{"version":3,"file":"rytrox-quill-emoji-mart.mjs","sources":["../../../projects/quill-emoji-mart/src/lib/emoji-module.ts","../../../projects/quill-emoji-mart/src/public-api.ts","../../../projects/quill-emoji-mart/src/rytrox-quill-emoji-mart.ts"],"sourcesContent":["import Quill, {Module} from \"quill\";\nimport {EmojiOptions} from \"./model/emoji-options\";\nimport Toolbar from \"quill/modules/toolbar\";\nimport data, {EmojiMartData} from '@emoji-mart/data';\nimport {Picker} from \"emoji-mart\";\nimport {Emoji} from \"./model/emoji\";\n\nexport class EmojiModule extends Module<Partial<EmojiOptions>> {\n\n    private readonly toolbar?: Toolbar;\n    private readonly button?: HTMLButtonElement;\n\n    private picker?: HTMLElement;\n\n    public constructor(quill: Quill, options: Partial<EmojiOptions>) {\n        super(quill, {\n            ...options,\n            theme: 'light',\n            data: data as EmojiMartData\n        });\n\n        const toolbar = this.quill.getModule('toolbar');\n        if (toolbar instanceof Toolbar) {\n            this.toolbar = toolbar;\n            this.button = this.toolbar.container?.querySelector('button.ql-emoji') ?? undefined;\n\n            if (this.button) {\n                this.button.innerHTML = '<svg viewbox=\"0 0 18 18\"><circle class=\"ql-fill\" cx=\"7\" cy=\"7\" r=\"1\"></circle><circle class=\"ql-fill\" cx=\"11\" cy=\"7\" r=\"1\"></circle><path class=\"ql-stroke\" d=\"M7,10a2,2,0,0,0,4,0H7Z\"></path><circle class=\"ql-stroke\" cx=\"9\" cy=\"9\" r=\"6\"></circle></svg>';\n\n                this.button.addEventListener('click', () => {\n                    if (this.picker) {\n                        this.closeDialog();\n                    } else {\n                        this.openDialog();\n                    }\n                });\n            }\n        }\n    }\n\n    public openDialog() {\n        if (!this.picker) {\n            this.picker = new Picker({\n                onEmojiSelect: (emoji: Emoji) => this.selectEmoji(emoji),\n                onClickOutside: (event: MouseEvent) => this.onClickOutside(event),\n                ...this.options,\n            }) as unknown as HTMLElement;\n\n            document.body.appendChild(this.picker);\n\n            const rect = this.button?.getBoundingClientRect();\n            if (rect) {\n                this.picker.style.top = `${rect.top + 25}px`;\n                this.picker.style.left = `${rect.left}px`;\n            }\n\n            this.picker.style.boxShadow = '0 4px 4px 0 rgba(0, 0, 0, 0.25)';\n            this.picker.style.position = 'absolute';\n            this.picker.style.zIndex = '1';\n        }\n    }\n\n    private selectEmoji(emoji: Emoji): void {\n        const emojiDelta = this.quill.insertText(\n            this.quill.getSelection(true).index,\n            emoji.native,\n            'user'\n        );\n\n        this.closeDialog();\n\n        // Set Input position after the emoji\n        setTimeout(() => {\n            this.quill.setSelection(this.quill.getSelection(true).index + emojiDelta.length());\n        });\n    }\n\n    private onClickOutside(event: MouseEvent): void {\n        // Only close if the Click did not happen on the Emoji-Button inside the Toolbar when it exists!\n        if (!this.button || !(this.button === event.target ||\n            (event.target instanceof Element && this.button.contains(event.target))\n        )) {\n            this.closeDialog();\n        }\n    }\n\n    public closeDialog() {\n        this.picker?.remove();\n        this.picker = undefined;\n    }\n}\n","/*\n * Public API Surface of quill-emoji-mart\n */\n\nexport * from './lib/emoji-module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}