@daisychainapp/maily-to-core 0.2.8 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/dist/blocks/index.d.mts +0 -57
- package/dist/blocks/index.js +0 -290
- package/dist/blocks/index.js.map +0 -1
- package/dist/extensions/index.d.mts +0 -332
- package/dist/extensions/index.js +0 -5268
- package/dist/extensions/index.js.map +0 -1
- package/dist/index.d.mts +0 -82
- package/dist/index.js +0 -8348
- package/dist/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/extensions.ts","../../src/editor/extensions/maily-kit.tsx","../../src/editor/extensions/color.ts","../../src/editor/extensions/horizontal-rule.tsx","../../src/editor/nodes/footer.ts","../../src/editor/nodes/spacer.ts","../../src/editor/utils/update-attribute.ts","../../src/editor/nodes/section/section.ts","../../src/editor/extensions/link-card.ts","../../src/editor/nodes/link-card.tsx","../../src/editor/components/input.tsx","../../src/editor/utils/classname.ts","../../src/editor/utils/constants.ts","../../src/editor/components/popover.tsx","../../src/editor/components/textarea.tsx","../../src/editor/utils/columns.ts","../../src/editor/nodes/columns/column.ts","../../src/editor/nodes/columns/columns.ts","../../src/editor/nodes/button/button.tsx","../../src/editor/components/alignment-switch.tsx","../../src/editor/components/base-button.tsx","../../src/editor/components/ui/tooltip.tsx","../../src/editor/components/bubble-menu-button.tsx","../../src/editor/components/ui/color-picker.tsx","../../src/editor/components/ui/divider.tsx","../../src/editor/components/ui/link-input-popover.tsx","../../src/editor/provider.tsx","../../src/editor/extensions/slash-command/default-slash-commands.tsx","../../src/blocks/button.tsx","../../src/blocks/code.tsx","../../src/blocks/image.tsx","../../src/blocks/layout.tsx","../../src/blocks/list.tsx","../../src/blocks/typography.tsx","../../src/editor/components/icons/logo-with-cover-image.tsx","../../src/editor/components/icons/logo-with-text-horizon.tsx","../../src/editor/components/icons/logo-with-text-vertical.tsx","../../src/blocks/headers.tsx","../../src/blocks/footers.tsx","../../src/editor/nodes/variable/variable-view.tsx","../../src/editor/nodes/variable/variable-popover.tsx","../../src/editor/utils/use-outside-click.ts","../../src/editor/components/ui/input-autocomplete.tsx","../../src/editor/utils/variable.ts","../../src/editor/components/ui/select.tsx","../../src/editor/nodes/button/button-view.tsx","../../src/editor/components/show-popover.tsx","../../src/editor/nodes/button/button-label-input.tsx","../../src/editor/nodes/logo/logo.ts","../../src/editor/nodes/logo/logo-view.tsx","../../src/editor/utils/use-event.ts","../../src/editor/nodes/image/image-view.tsx","../../src/editor/nodes/image/image.ts","../../src/editor/nodes/link.ts","../../src/editor/nodes/heading/heading.ts","../../src/editor/nodes/paragraph/paragraph.ts","../../src/editor/nodes/repeat/repeat.ts","../../src/editor/nodes/repeat/repeat-view.tsx","../../src/editor/extensions/slash-command/slash-command.ts","../../src/editor/extensions/slash-command/slash-command-view.tsx","../../src/editor/nodes/variable/variable.ts","../../src/editor/nodes/variable/variable-suggestions.tsx","../../src/editor/extensions/placeholder.ts"],"sourcesContent":["export * from './editor/extensions/maily-kit';\nexport * from './editor/extensions/slash-command/slash-command';\nexport * from './editor/extensions/slash-command/slash-command-view';\nexport * from './editor/extensions/color';\nexport * from './editor/extensions/horizontal-rule';\nexport * from './editor/nodes/footer';\nexport * from './editor/nodes/spacer';\nexport * from './editor/nodes/columns/columns';\nexport * from './editor/nodes/columns/column';\nexport * from './editor/nodes/section/section';\nexport * from './editor/nodes/repeat/repeat';\nexport * from './editor/nodes/button/button';\nexport * from './editor/nodes/logo/logo';\nexport * from './editor/nodes/image/image';\nexport * from './editor/nodes/link';\nexport * from './editor/nodes/variable/variable';\nexport * from './editor/nodes/variable/variable-suggestions';\nexport * from './editor/extensions/placeholder';\n","import { AnyExtension, Extension } from '@tiptap/core';\n\nimport StarterKit from '@tiptap/starter-kit';\nimport ListItem from '@tiptap/extension-list-item';\nimport Paragraph from '@tiptap/extension-paragraph';\nimport TextAlign from '@tiptap/extension-text-align';\nimport TextStyle from '@tiptap/extension-text-style';\nimport Heading from '@tiptap/extension-heading';\nimport Underline from '@tiptap/extension-underline';\nimport Document from '@tiptap/extension-document';\nimport Focus from '@tiptap/extension-focus';\nimport Dropcursor from '@tiptap/extension-dropcursor';\n\nimport { Color } from './color';\nimport { HorizontalRule } from './horizontal-rule';\nimport { Footer } from '../nodes/footer';\nimport { Spacer } from '../nodes/spacer';\nimport { LinkCardExtension, LinkCardOptions } from './link-card';\nimport { ColumnsExtension } from '../nodes/columns/columns';\nimport { ColumnExtension } from '../nodes/columns/column';\nimport { SectionExtension } from '../nodes/section/section';\nimport { ButtonExtension } from '../nodes/button/button';\nimport { LogoExtension } from '../nodes/logo/logo';\nimport { ImageExtension } from '../nodes/image/image';\nimport { LinkExtension } from '../nodes/link';\nimport { LinkOptions } from '@tiptap/extension-link';\nimport { HeadingExtension } from '../nodes/heading/heading';\nimport { ParagraphExtension } from '../nodes/paragraph/paragraph';\nimport { RepeatExtension } from '../nodes/repeat/repeat';\n\nexport type MailyKitOptions = {\n linkCard?: Partial<LinkCardOptions> | false;\n repeat?: Partial<{}> | false;\n section?: Partial<{}> | false;\n columns?: Partial<{}> | false;\n column?: Partial<{}> | false;\n button?: Partial<{}> | false;\n spacer?: Partial<{}> | false;\n logo?: Partial<{}> | false;\n image?: Partial<{}> | false;\n link?: Partial<LinkOptions> | false;\n};\n\nexport const MailyKit = Extension.create<MailyKitOptions>({\n name: 'maily-kit',\n\n addOptions() {\n return {\n link: {\n HTMLAttributes: {\n target: '_blank',\n rel: 'noopener noreferrer nofollow',\n class: 'mly-no-underline',\n },\n openOnClick: false,\n },\n };\n },\n\n addExtensions() {\n const extensions: AnyExtension[] = [\n Document.extend({\n content: '(block|columns)+',\n }),\n StarterKit.configure({\n code: {\n HTMLAttributes: {\n class:\n 'mly-px-1 mly-relative mly-py-0.5 mly-bg-[#efefef] mly-text-sm mly-rounded-md mly-tracking-normal mly-font-normal',\n },\n },\n blockquote: {\n HTMLAttributes: {\n class:\n 'mly-not-prose mly-border-l-4 mly-border-gray-300 mly-pl-4 mly-mt-4 mly-mb-4 mly-relative',\n },\n },\n bulletList: {\n HTMLAttributes: {\n class: 'mly-relative',\n },\n },\n orderedList: {\n HTMLAttributes: {\n class: 'mly-relative',\n },\n },\n heading: false,\n paragraph: false,\n horizontalRule: false,\n dropcursor: false,\n document: false,\n }),\n Underline,\n Color.configure({ types: [TextStyle.name, ListItem.name] }),\n TextStyle.configure(),\n TextAlign.configure({\n types: [Paragraph.name, Heading.name, Footer.name],\n }),\n HorizontalRule,\n Footer,\n Focus,\n Dropcursor.configure({\n color: '#555',\n width: 3,\n class: 'ProseMirror-dropcursor',\n }),\n HeadingExtension.configure({\n levels: [1, 2, 3],\n HTMLAttributes: {\n class: 'mly-relative',\n },\n }),\n ParagraphExtension.configure({\n HTMLAttributes: {\n class: 'mly-relative',\n },\n }),\n ];\n\n if (this.options.linkCard !== false) {\n extensions.push(LinkCardExtension.configure(this.options.linkCard));\n }\n\n if (this.options.repeat !== false) {\n extensions.push(RepeatExtension);\n }\n\n if (this.options.section !== false) {\n extensions.push(SectionExtension);\n }\n\n if (this.options.columns !== false) {\n extensions.push(ColumnsExtension);\n }\n\n if (this.options.column !== false) {\n extensions.push(ColumnExtension);\n }\n\n if (this.options.button !== false) {\n extensions.push(ButtonExtension);\n }\n\n if (this.options.spacer !== false) {\n extensions.push(Spacer);\n }\n\n if (this.options.logo !== false) {\n extensions.push(LogoExtension);\n }\n\n if (this.options.image !== false) {\n extensions.push(ImageExtension);\n }\n\n if (this.options.link !== false) {\n extensions.push(LinkExtension.configure(this.options.link));\n }\n\n return extensions;\n },\n});\n","import TiptapColor, { ColorOptions } from '@tiptap/extension-color';\n\ntype ColorStorage = {\n /**\n * Last 5 used colors\n */\n colors: Set<string>;\n};\n\nexport const Color = TiptapColor.extend<ColorOptions, ColorStorage>({\n addStorage() {\n return {\n colors: new Set(),\n };\n },\n});\n","import { InputRule } from '@tiptap/core';\nimport { HorizontalRule as TipTapHorizontalRule } from '@tiptap/extension-horizontal-rule';\n\nexport const HorizontalRule = TipTapHorizontalRule.extend({\n addInputRules() {\n return [\n new InputRule({\n find: /^(?:---|—-|___\\s|\\*\\*\\*\\s)$/,\n handler: ({ state, range }) => {\n const attributes = {};\n\n const { tr } = state;\n const start = range.from;\n const end = range.to;\n\n tr.insert(start - 1, this.type.create(attributes)).delete(\n tr.mapping.map(start),\n tr.mapping.map(end)\n );\n },\n }),\n ];\n },\n addOptions() {\n return {\n HTMLAttributes: {\n class: 'mly-relative',\n },\n };\n },\n});\n","import { mergeAttributes, Node } from '@tiptap/core';\n\nexport interface FooterOptions {\n HTMLAttributes: Record<string, any>;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n footer: {\n setFooter: () => ReturnType;\n };\n }\n}\n\nexport const Footer = Node.create<FooterOptions>({\n name: 'footer',\n group: 'block',\n content: 'inline*',\n\n addAttributes() {\n return {\n 'maily-component': {\n default: 'footer',\n renderHTML: (attributes) => {\n return {\n 'data-maily-component': attributes['maily-component'],\n };\n },\n parseHTML: (element) => element?.getAttribute('data-maily-component'),\n },\n };\n },\n\n addCommands() {\n return {\n setFooter:\n () =>\n ({ commands }) => {\n return commands.setNode(this.name);\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'small[data-maily-component=\"footer\"]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n 'small',\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n class:\n 'footer mly-block mly-text-[13px] mly-text-slate-500 mly-relative',\n }),\n 0,\n ];\n },\n});\n","import { mergeAttributes, Node } from '@tiptap/core';\nimport { DEFAULT_SECTION_SHOW_IF_KEY } from './section/section';\n\nexport interface SpacerOptions {\n height: number;\n showIfKey: string;\n HTMLAttributes: Record<string, any>;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n spacer: {\n setSpacer: (options: { height: number }) => ReturnType;\n setSpacerSize: (height: number) => ReturnType;\n setSpacerShowIfKey: (showIfKey: string) => ReturnType;\n unsetSpacer: () => ReturnType;\n };\n }\n}\n\nexport const DEFAULT_SPACER_HEIGHT = 8;\n\nexport const Spacer = Node.create<SpacerOptions>({\n name: 'spacer',\n priority: 1000,\n\n group: 'block',\n draggable: true,\n addAttributes() {\n return {\n height: {\n default: DEFAULT_SPACER_HEIGHT,\n parseHTML: (element) => Number(element.getAttribute('data-height')),\n renderHTML: (attributes) => {\n return {\n 'data-height': attributes.height,\n };\n },\n },\n showIfKey: {\n default: DEFAULT_SECTION_SHOW_IF_KEY,\n parseHTML: (element) => {\n return (\n element.getAttribute('data-show-if-key') ||\n DEFAULT_SECTION_SHOW_IF_KEY\n );\n },\n renderHTML(attributes) {\n if (!attributes.showIfKey) {\n return {};\n }\n\n return {\n 'data-show-if-key': attributes.showIfKey,\n };\n },\n },\n };\n },\n\n addCommands() {\n return {\n setSpacer:\n (options) =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: {\n height: options.height,\n },\n });\n },\n\n setSpacerSize:\n (height) =>\n ({ commands }) => {\n return commands.updateAttributes('spacer', { height });\n },\n\n setSpacerShowIfKey:\n (showIfKey) =>\n ({ commands }) => {\n return commands.updateAttributes('spacer', { showIfKey });\n },\n\n unsetSpacer:\n () =>\n ({ commands }) => {\n return commands.deleteNode('spacer');\n },\n };\n },\n renderHTML({ HTMLAttributes, node }) {\n const { height } = node.attrs as SpacerOptions;\n\n return [\n 'div',\n mergeAttributes(\n {\n 'data-maily-component': this.name,\n },\n this.options.HTMLAttributes,\n HTMLAttributes,\n {\n class: 'spacer mly-relative mly-full mly-z-50',\n contenteditable: false,\n style: `height: ${height}px;--spacer-height: ${height}px;`,\n }\n ),\n ];\n },\n parseHTML() {\n return [{ tag: `div[data-maily-component=\"${this.name}\"]` }];\n },\n});\n","import { Command } from '@tiptap/core';\n\nexport function updateAttribute(\n type: string,\n attr: string,\n value: any\n): Command {\n return ({ commands }) =>\n commands.command(({ tr, state, dispatch }) => {\n if (dispatch) {\n let lastPos = null;\n\n tr.selection.ranges.forEach((range) => {\n state.doc.nodesBetween(\n range.$from.pos,\n range.$to.pos,\n (node, pos) => {\n if (node.type.name === type) {\n lastPos = pos;\n }\n }\n );\n });\n\n if (lastPos !== null) {\n tr.setNodeAttribute(lastPos, attr, value);\n }\n }\n\n return true;\n });\n}\n\nexport function updateAttributes(\n type: string,\n attrs: Record<string, any>\n): Command {\n return ({ commands }) =>\n commands.command(({ tr, state, dispatch }) => {\n if (dispatch) {\n let lastPos = null;\n\n tr.selection.ranges.forEach((range) => {\n state.doc.nodesBetween(\n range.$from.pos,\n range.$to.pos,\n (node, pos) => {\n if (node.type.name === type) {\n lastPos = pos;\n }\n }\n );\n });\n\n if (lastPos !== null) {\n const node = state.doc.nodeAt(lastPos);\n if (node) {\n tr.setNodeMarkup(lastPos, null, {\n ...node.attrs,\n ...attrs,\n });\n } else {\n for (const [key, value] of Object.entries(attrs)) {\n tr.setNodeAttribute(lastPos, key, value);\n }\n }\n }\n\n if (type === 'button') {\n tr.setSelection(tr.selection);\n }\n }\n\n return true;\n });\n}\n","import { updateAttributes } from '@/editor/utils/update-attribute';\nimport { mergeAttributes, Node } from '@tiptap/core';\n\nexport const DEFAULT_SECTION_BACKGROUND_COLOR = '#f7f7f7';\nexport const DEFAULT_SECTION_ALIGN = 'left';\nexport const DEFAULT_SECTION_BORDER_WIDTH = 2;\nexport const DEFAULT_SECTION_BORDER_COLOR = '#e2e2e2';\nexport const DEFAULT_SECTION_BORDER_RADIUS = 0;\n\nexport const DEFAULT_SECTION_MARGIN_TOP = 0;\nexport const DEFAULT_SECTION_MARGIN_RIGHT = 0;\nexport const DEFAULT_SECTION_MARGIN_BOTTOM = 0;\nexport const DEFAULT_SECTION_MARGIN_LEFT = 0;\n\nexport const DEFAULT_SECTION_PADDING_TOP = 5;\nexport const DEFAULT_SECTION_PADDING_RIGHT = 5;\nexport const DEFAULT_SECTION_PADDING_BOTTOM = 5;\nexport const DEFAULT_SECTION_PADDING_LEFT = 5;\n\nexport const DEFAULT_SECTION_SHOW_IF_KEY = null;\n\ntype SectionAttributes = {\n borderRadius: number;\n backgroundColor: string;\n align: string;\n borderWidth: number;\n borderColor: string;\n\n marginTop: number;\n marginRight: number;\n marginBottom: number;\n marginLeft: number;\n\n paddingTop: number;\n paddingRight: number;\n paddingBottom: number;\n paddingLeft: number;\n\n showIfKey: string | null;\n};\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n section: {\n setSection: () => ReturnType;\n updateSection: (attrs: Partial<SectionAttributes>) => ReturnType;\n };\n }\n}\n\nexport const SectionExtension = Node.create({\n name: 'section',\n group: 'block',\n content: '(block|columns)+',\n defining: true,\n isolating: true,\n\n addAttributes() {\n return {\n borderRadius: {\n default: 0,\n parseHTML: (element) => {\n return Number(element?.style?.borderRadius?.replace(/['\"]+/g, ''));\n },\n renderHTML: (attributes) => {\n if (!attributes.borderRadius) {\n return {};\n }\n\n return {\n style: `border-radius: ${attributes.borderRadius}px`,\n };\n },\n },\n backgroundColor: {\n default: DEFAULT_SECTION_BACKGROUND_COLOR,\n parseHTML: (element) => {\n return element.style.backgroundColor;\n },\n renderHTML: (attributes) => {\n if (!attributes.backgroundColor) {\n return {};\n }\n\n return {\n style: `background-color: ${attributes.backgroundColor};--bg-color: ${attributes.backgroundColor}`,\n };\n },\n },\n align: {\n default: DEFAULT_SECTION_ALIGN,\n parseHTML: (element) => {\n return element.getAttribute('align') || DEFAULT_SECTION_ALIGN;\n },\n renderHTML(attributes) {\n if (!attributes.align) {\n return {};\n }\n\n return {\n align: attributes.align,\n };\n },\n },\n borderWidth: {\n default: DEFAULT_SECTION_BORDER_WIDTH,\n parseHTML: (element) => {\n return (\n Number(element?.style?.borderWidth?.replace(/['\"]+/g, '')) || 0\n );\n },\n renderHTML: (attributes) => {\n if (!attributes.borderWidth) {\n return {};\n }\n\n return {\n style: `border-width: ${attributes.borderWidth}px`,\n };\n },\n },\n borderColor: {\n default: DEFAULT_SECTION_BORDER_COLOR,\n parseHTML: (element) => {\n return element.style.borderColor;\n },\n renderHTML: (attributes) => {\n if (!attributes.borderColor) {\n return {};\n }\n\n return {\n style: `border-color: ${attributes.borderColor}`,\n };\n },\n },\n paddingTop: {\n default: DEFAULT_SECTION_PADDING_TOP,\n parseHTML: (element) => {\n return Number(element?.style?.paddingTop?.replace(/['\"]+/g, '')) || 0;\n },\n renderHTML: (attributes) => {\n if (!attributes.paddingTop) {\n return {};\n }\n\n return {\n style: `padding-top: ${attributes.paddingTop}px`,\n };\n },\n },\n paddingRight: {\n default: DEFAULT_SECTION_PADDING_RIGHT,\n parseHTML: (element) =>\n Number(element?.style?.paddingRight?.replace(/['\"]+/g, '')) || 0,\n renderHTML: (attributes) => {\n if (!attributes.paddingRight) {\n return {};\n }\n\n return {\n style: `padding-right: ${attributes.paddingRight}px`,\n };\n },\n },\n paddingBottom: {\n default: DEFAULT_SECTION_PADDING_BOTTOM,\n parseHTML: (element) =>\n Number(element?.style?.paddingBottom?.replace(/['\"]+/g, '')) || 0,\n renderHTML: (attributes) => {\n if (!attributes.paddingBottom) {\n return {};\n }\n\n return {\n style: `padding-bottom: ${attributes.paddingBottom}px`,\n };\n },\n },\n paddingLeft: {\n default: DEFAULT_SECTION_PADDING_LEFT,\n parseHTML: (element) =>\n Number(element?.style?.paddingLeft?.replace(/['\"]+/g, '')) || 0,\n renderHTML: (attributes) => {\n if (!attributes.paddingLeft) {\n return {};\n }\n\n return {\n style: `padding-left: ${attributes.paddingLeft}px`,\n };\n },\n },\n marginTop: {\n default: DEFAULT_SECTION_MARGIN_TOP,\n parseHTML: (element) => {\n return Number(element?.style?.marginTop?.replace(/['\"]+/g, '')) || 0;\n },\n renderHTML: (attributes) => {\n if (!attributes.marginTop) {\n return {};\n }\n\n return {\n marginTop: attributes.marginTop,\n };\n },\n },\n marginRight: {\n default: DEFAULT_SECTION_MARGIN_RIGHT,\n parseHTML: (element) =>\n Number(element?.style?.marginRight?.replace(/['\"]+/g, '')) || 0,\n renderHTML: (attributes) => {\n if (!attributes.marginRight) {\n return {};\n }\n\n return {\n marginRight: attributes.marginRight,\n };\n },\n },\n marginBottom: {\n default: DEFAULT_SECTION_MARGIN_BOTTOM,\n parseHTML: (element) =>\n Number(element?.style?.marginBottom?.replace(/['\"]+/g, '')) || 0,\n renderHTML: (attributes) => {\n if (!attributes.marginBottom) {\n return {};\n }\n\n return {\n marginBottom: attributes.marginBottom,\n };\n },\n },\n marginLeft: {\n default: DEFAULT_SECTION_MARGIN_LEFT,\n parseHTML: (element) =>\n Number(element?.style?.marginLeft?.replace(/['\"]+/g, '')) || 0,\n renderHTML: (attributes) => {\n if (!attributes.marginLeft) {\n return {};\n }\n\n return {\n marginLeft: attributes.marginLeft,\n };\n },\n },\n\n showIfKey: {\n default: DEFAULT_SECTION_SHOW_IF_KEY,\n parseHTML: (element) => {\n return (\n element.getAttribute('data-show-if-key') ||\n DEFAULT_SECTION_SHOW_IF_KEY\n );\n },\n renderHTML(attributes) {\n if (!attributes.showIfKey) {\n return {};\n }\n\n return {\n 'data-show-if-key': attributes.showIfKey,\n };\n },\n },\n };\n },\n\n addCommands() {\n return {\n setSection:\n () =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: {\n type: this.name,\n },\n content: [\n {\n type: 'paragraph',\n },\n ],\n });\n },\n updateSection: (attrs) => updateAttributes(this.name, attrs),\n };\n },\n\n renderHTML({ HTMLAttributes }) {\n const {\n marginTop = 0,\n marginRight = 0,\n marginBottom = 0,\n marginLeft = 0,\n } = HTMLAttributes;\n\n return [\n 'table',\n {\n 'data-type': this.name,\n border: 0,\n cellpadding: 0,\n cellspacing: 0,\n class: 'mly-w-full mly-border-separate mly-relative mly-table-fixed',\n style: `margin-top: ${marginTop}px; margin-right: ${marginRight}px; margin-bottom: ${marginBottom}px; margin-left: ${marginLeft}px;`,\n },\n [\n 'tbody',\n {\n class: 'mly-w-full',\n },\n [\n 'tr',\n {\n class: 'mly-w-full',\n },\n [\n 'td',\n mergeAttributes(HTMLAttributes, {\n 'data-type': 'section-cell',\n style: 'border-style: solid',\n class: 'mly-w-full [text-align:revert-layer]',\n }),\n 0,\n ],\n ],\n ],\n ];\n },\n\n parseHTML() {\n return [\n {\n tag: 'table[data-type=\"section\"]',\n },\n ];\n },\n});\n","import { mergeAttributes, Node } from '@tiptap/core';\nimport { ReactNodeViewRenderer } from '@tiptap/react';\nimport { LinkCardComponent } from '../nodes/link-card';\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n linkCard: {\n setLinkCard: () => ReturnType;\n };\n }\n}\n\nexport type LinkCardOptions = {};\n\nexport const LinkCardExtension = Node.create({\n name: 'linkCard',\n group: 'block',\n atom: true,\n draggable: true,\n\n addAttributes() {\n return {\n mailyComponent: {\n default: 'linkCard',\n },\n title: {\n default: '',\n },\n description: {\n default: '',\n },\n link: {\n default: '',\n },\n linkTitle: {\n default: '',\n },\n image: {\n default: '',\n },\n subTitle: {\n default: '',\n },\n badgeText: {\n default: '',\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: `a[data-maily-component=\"${this.name}\"]`,\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n 'div',\n mergeAttributes(\n {\n 'data-maily-component': this.name,\n },\n HTMLAttributes\n ),\n ];\n },\n\n addCommands() {\n return {\n setLinkCard:\n () =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: {\n mailyComponent: this.name,\n },\n });\n },\n };\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(LinkCardComponent, {\n className: 'mly-relative',\n });\n },\n});\n","import { NodeViewProps, NodeViewWrapper } from '@tiptap/react';\nimport { Input } from '../components/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '../components/popover';\nimport { Textarea } from '../components/textarea';\nimport { cn } from '../utils/classname';\n\nexport function LinkCardComponent(props: NodeViewProps) {\n const { title, description, link, linkTitle, image, badgeText, subTitle } =\n props.node.attrs;\n const { getPos, editor } = props;\n\n return (\n <NodeViewWrapper\n className={`react-component ${\n props.selected && 'ProseMirror-selectednode'\n }`}\n draggable={editor.isEditable}\n data-drag-handle={editor.isEditable}\n >\n <Popover open={props.selected}>\n <PopoverTrigger asChild>\n <div\n tabIndex={-1}\n onClick={(e) => {\n e.preventDefault();\n const pos = getPos();\n editor.commands.setNodeSelection(pos);\n }}\n >\n <div className=\"mly-no-prose mly-flex mly-flex-col mly-rounded-lg mly-border mly-border-gray-300\">\n {image && (\n <div className=\"mly-relative mly-mb-1.5 mly-w-full mly-shrink-0\">\n <img\n src={image}\n alt=\"link-card\"\n className=\"mly-no-prose !mly-mb-0 mly-h-full mly-w-full mly-rounded-t-lg\"\n draggable={editor.isEditable}\n />\n </div>\n )}\n <div className=\"mly-flex mly-items-stretch mly-p-3\">\n <div className={cn('mly-flex mly-flex-col')}>\n <div className=\"!mly-mb-1.5 mly-flex mly-items-center mly-gap-1.5\">\n <h2 className=\"!mly-mb-0 !mly-text-lg mly-font-semibold\">\n {title}\n </h2>\n {badgeText && (\n <span className=\"!mly-font-base text-xs mly-rounded-md mly-bg-yellow-200 mly-px-2 mly-py-1 mly-font-semibold mly-leading-none\">\n {badgeText}\n </span>\n )}{' '}\n {subTitle && !badgeText && (\n <span className=\"!mly-font-base text-xs mly-font-regular mly-rounded-md mly-leading-none mly-text-gray-400\">\n {subTitle}\n </span>\n )}\n </div>\n <p className=\"!mly-my-0 !mly-text-base mly-text-gray-500\">\n {description}{' '}\n {linkTitle ? (\n <a href={link} className=\"mly-font-semibold\">\n {linkTitle}\n </a>\n ) : null}\n </p>\n </div>\n </div>\n </div>\n </div>\n </PopoverTrigger>\n <PopoverContent\n align=\"end\"\n className=\"mly-flex mly-w-96 mly-flex-col mly-gap-2\"\n sideOffset={10}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <label className=\"mly-w-full mly-space-y-1\">\n <span className=\"mly-text-xs mly-font-normal mly-text-slate-400\">\n Image\n </span>\n <Input\n placeholder=\"Add Image\"\n type=\"url\"\n value={image}\n onChange={(e) => {\n props.updateAttributes({\n image: e.target.value,\n });\n }}\n />\n </label>\n\n <label className=\"mly-w-full mly-space-y-1\">\n <span className=\"mly-text-xs mly-font-normal mly-text-slate-400\">\n Title\n </span>\n <Input\n placeholder=\"Add title\"\n value={title}\n onChange={(e) => {\n props.updateAttributes({\n title: e.target.value,\n });\n }}\n />\n </label>\n\n <label className=\"mly-w-full mly-space-y-1\">\n <span className=\"mly-text-xs mly-font-normal mly-text-slate-400\">\n Description\n </span>\n <Textarea\n placeholder=\"Add description here\"\n value={description}\n onChange={(e) => {\n props.updateAttributes({\n description: e.target.value,\n });\n }}\n />\n </label>\n\n <div className=\"mly-grid mly-grid-cols-2 mly-gap-2\">\n <label className=\"mly-w-full mly-space-y-1\">\n <span className=\"mly-text-xs mly-font-normal mly-text-slate-400\">\n Link Title\n </span>\n <Input\n placeholder=\"Add link title here\"\n value={linkTitle}\n onChange={(e) => {\n props.updateAttributes({\n linkTitle: e.target.value,\n });\n }}\n />\n </label>\n\n <label className=\"mly-w-full mly-space-y-1\">\n <span className=\"mly-text-xs mly-font-normal mly-text-slate-400\">\n Link\n </span>\n <Input\n placeholder=\"Add link here\"\n value={link}\n onChange={(e) => {\n props.updateAttributes({\n link: e.target.value,\n });\n }}\n />\n </label>\n </div>\n\n <div className=\"mly-grid mly-grid-cols-2 mly-gap-2\">\n <label className=\"mly-w-full mly-space-y-1\">\n <span className=\"mly-text-xs mly-font-normal mly-text-slate-400\">\n Badge Text\n </span>\n <Input\n placeholder=\"Add badge text here\"\n value={badgeText}\n onChange={(e) => {\n props.updateAttributes({\n badgeText: e.target.value,\n });\n }}\n />\n </label>\n\n <label className=\"mly-w-full mly-space-y-1\">\n <span className=\"mly-text-xs mly-font-normal mly-text-slate-400\">\n Sub Title\n </span>\n <Input\n placeholder=\"Add sub title here\"\n value={subTitle}\n onChange={(e) => {\n props.updateAttributes({\n subTitle: e.target.value,\n });\n }}\n />\n </label>\n </div>\n </PopoverContent>\n </Popover>\n </NodeViewWrapper>\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '../utils/classname';\nimport { AUTOCOMPLETE_PASSWORD_MANAGERS_OFF } from '../utils/constants';\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n {...AUTOCOMPLETE_PASSWORD_MANAGERS_OFF}\n type={type}\n className={cn(\n 'mly-flex mly-h-10 mly-w-full mly-rounded-md mly-border mly-border-gray-200 mly-bg-white mly-px-3 mly-py-2 mly-text-sm mly-ring-offset-white file:mly-border-0 file:mly-bg-transparent file:mly-text-sm file:mly-font-medium placeholder:mly-text-gray-500 focus-visible:mly-outline-none focus-visible:mly-ring-2 focus-visible:mly-ring-gray-400 focus-visible:mly-ring-offset-2 disabled:mly-cursor-not-allowed disabled:mly-opacity-50',\n 'mly-editor',\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = 'Input';\n\nexport { Input };\n","import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\nconst twMerge = extendTailwindMerge({\n prefix: 'mly-',\n});\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","export const AUTOCOMPLETE_PASSWORD_MANAGERS_OFF = Object.freeze({\n autoComplete: 'off',\n 'data-1p-ignore': true,\n 'data-form-type': 'other',\n});\n","'use client';\n\nimport * as React from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\n\nimport { cn } from '../utils/classname';\n\nconst Popover: React.FC<\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Root>\n> = PopoverPrimitive.Root;\n\nconst PopoverTrigger: React.FC<\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Trigger>\n> = PopoverPrimitive.Trigger;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'mly-z-[9999] mly-w-72 mly-rounded-md mly-border mly-border-gray-200 mly-bg-white mly-p-4 mly-text-gray-950 mly-shadow-md mly-outline-none',\n 'mly-editor',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n)) as React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> &\n React.RefAttributes<React.ElementRef<typeof PopoverPrimitive.Content>>\n>;\n\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent };\n","import * as React from 'react';\n\nimport { cn } from '../utils/classname';\n\nexport interface TextAreaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n 'mly-flex mly-min-h-24 mly-w-full mly-rounded-md mly-border mly-border-gray-200 mly-bg-white mly-px-3 mly-py-2 mly-text-sm mly-ring-offset-white file:mly-border-0 file:mly-bg-transparent file:mly-text-sm file:mly-font-medium placeholder:mly-text-gray-500 focus-visible:mly-outline-none focus-visible:mly-ring-2 focus-visible:mly-ring-gray-400 focus-visible:mly-ring-offset-2 disabled:mly-cursor-not-allowed disabled:mly-opacity-50',\n 'mly-editor',\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n","import { Editor } from '@tiptap/react';\nimport { Fragment, Node } from '@tiptap/pm/model';\nimport { TextSelection } from '@tiptap/pm/state';\nimport { v4 as uuid } from 'uuid';\nimport { findParentNode } from '@tiptap/core';\nimport { DEFAULT_COLUMN_WIDTH } from '../nodes/columns/column';\n\nexport function getColumnCount(editor: Editor) {\n return getClosestNodeByName(editor, 'columns')?.node?.childCount || 0;\n}\n\nexport function getClosestNodeByName(editor: Editor, name: string) {\n const { state } = editor.view;\n return findParentNode((node) => node.type.name === name)(state.selection);\n}\n\nexport function addColumn(editor: Editor) {\n const { node: columnsNode, pos: columnsNodePos = 0 } =\n getClosestNodeByName(editor, 'columns') || {};\n if (!columnsNode) {\n return;\n }\n\n const { node: activeColumnNode, pos: activeColumnNodePos = 0 } =\n getClosestNodeByName(editor, 'column') || {};\n if (!activeColumnNode) {\n return;\n }\n\n const { state, dispatch } = editor.view;\n const { tr } = state;\n // Get the current columns node position and add the columns size\n // to the end of the columns node\n const calculatedWidth = +Number(100 / (columnsNode.childCount + 1)).toFixed(\n 2\n );\n const newColumn = state.schema.nodes.column.create(\n {\n width: calculatedWidth,\n columnId: uuid(),\n },\n state.schema.nodes.paragraph.create(null)\n );\n\n let updatedContent: Node[] = [];\n let activeColumnIndex = 0;\n columnsNode.content.forEach((child, _, index) => {\n if (\n child.eq(activeColumnNode) &&\n child?.attrs?.columnId === activeColumnNode?.attrs?.columnId\n ) {\n activeColumnIndex = index;\n }\n\n updatedContent.push(\n child.type.create(\n {\n ...child?.attrs,\n width: calculatedWidth,\n },\n child.content\n )\n );\n });\n\n updatedContent.splice(activeColumnIndex + 1, 0, newColumn);\n const newColumnPos =\n columnsNodePos +\n updatedContent\n .slice(0, activeColumnIndex + 1)\n .reduce((acc, node) => acc + node.nodeSize, 0);\n\n const updatedColumnsNode = columnsNode.copy(Fragment.from(updatedContent));\n\n const transaction = tr.replaceWith(\n columnsNodePos,\n columnsNodePos + columnsNode.nodeSize,\n updatedColumnsNode\n );\n\n // Calculate the position of the new column by adding the new column's position\n const textSelection = TextSelection.near(\n transaction.doc.resolve(newColumnPos)\n );\n transaction.setSelection(textSelection);\n\n dispatch(transaction);\n editor.view.focus();\n}\n\nexport function removeColumn(editor: Editor) {\n const { node: columnsNode, pos: columnsNodePos = 0 } =\n getClosestNodeByName(editor, 'columns') || {};\n if (!columnsNode) {\n return;\n }\n\n const { node: activeColumnNode, pos: activeColumnNodePos = 0 } =\n getClosestNodeByName(editor, 'column') || {};\n if (!activeColumnNode) {\n return;\n }\n\n const { state, dispatch } = editor.view;\n const { tr } = state;\n\n // If there is only one column, remove the entire columns node\n if (columnsNode.childCount === 1) {\n const transaction = tr.delete(\n columnsNodePos,\n columnsNodePos + columnsNode.nodeSize\n );\n dispatch(transaction);\n editor.view.focus();\n return;\n }\n\n const calculatedWidth = +Number(100 / (columnsNode.childCount - 1)).toFixed(\n 2\n );\n\n let updatedContent: Node[] = [];\n let activeColumnIndex = 0;\n let isRemoved = false;\n columnsNode.content.forEach((child, _, index) => {\n const isActiveColumn =\n child.eq(activeColumnNode) &&\n child?.attrs?.columnId === activeColumnNode?.attrs?.columnId;\n if (isActiveColumn && !isRemoved) {\n activeColumnIndex = index;\n isRemoved = true;\n return;\n }\n\n updatedContent.push(\n child.type.create(\n {\n ...child?.attrs,\n width: calculatedWidth,\n },\n child.content\n )\n );\n });\n\n const isLastColumn = activeColumnIndex === columnsNode.childCount - 1;\n\n const newColumnPos =\n columnsNodePos +\n updatedContent\n .slice(0, isLastColumn ? activeColumnIndex - 1 : activeColumnIndex)\n .reduce((acc, node) => acc + node.nodeSize, 0);\n\n const updatedColumnsNode = columnsNode.copy(Fragment.from(updatedContent));\n\n const transaction = tr.replaceWith(\n columnsNodePos,\n columnsNodePos + columnsNode.nodeSize,\n updatedColumnsNode\n );\n\n // Calculate the position of the new column by adding the new column's position\n const textSelection = TextSelection.near(\n transaction.doc.resolve(newColumnPos)\n );\n transaction.setSelection(textSelection);\n\n dispatch(transaction);\n editor.view.focus();\n}\n\nexport function goToColumn(editor: Editor, type: 'next' | 'previous') {\n const columnsNode = getClosestNodeByName(editor, 'columns');\n const columnNode = getClosestNodeByName(editor, 'column');\n if (!columnsNode || !columnNode) {\n return false;\n }\n\n const { state, dispatch } = editor.view;\n // Get the current columns node position and add the columns size\n // to the end of the columns node\n const cols = columnsNode.node;\n let currColumnIndex = 0;\n cols.content.forEach((child, _, index) => {\n if (\n child.eq(columnNode.node) &&\n child?.attrs?.columnId === columnNode.node?.attrs?.columnId\n ) {\n currColumnIndex = index;\n }\n });\n\n const nextColumnIndex =\n type === 'next' ? currColumnIndex + 1 : currColumnIndex - 1;\n // if the next column index is out of bounds, return\n if (nextColumnIndex < 0 || nextColumnIndex >= cols.childCount) {\n return false;\n }\n\n let nextColumnPos = columnsNode.pos;\n cols.content.forEach((child, _, index) => {\n if (index < nextColumnIndex) {\n nextColumnPos += child.nodeSize;\n }\n });\n\n const tr = state.tr.setTime(Date.now());\n const textSelection = TextSelection.near(tr.doc.resolve(nextColumnPos));\n tr.setSelection(textSelection);\n\n dispatch(tr);\n return true;\n}\n\nexport function updateColumnWidth(\n editor: Editor,\n index: number,\n width: string = 'auto'\n) {\n const { node: columnsNode, pos: columnsNodePos = 0 } =\n getClosestNodeByName(editor, 'columns') || {};\n if (!columnsNode) {\n return false;\n }\n\n const { state, dispatch } = editor.view;\n const { tr } = state;\n const { selection } = state;\n\n const beforeNodeEnd = columnsNodePos + columnsNode.nodeSize;\n const selectionRelative = {\n from: selection.from - columnsNodePos,\n to: selection.to - columnsNodePos,\n };\n\n const updatedContent: Node[] = [];\n columnsNode.content.forEach((child, _, i) => {\n updatedContent.push(\n child.type.create(\n {\n ...child?.attrs,\n width: i === index ? width : child?.attrs?.width,\n },\n child.content\n )\n );\n });\n\n const updatedColumnsNode = columnsNode.copy(Fragment.from(updatedContent));\n const transaction = tr.replaceWith(\n columnsNodePos,\n beforeNodeEnd,\n updatedColumnsNode\n );\n\n const newSelection = TextSelection.create(\n transaction.doc,\n columnsNodePos + selectionRelative.from,\n columnsNodePos + selectionRelative.to\n );\n\n dispatch(transaction.setSelection(newSelection));\n return true;\n}\n\nexport function addColumnByIndex(editor: Editor, index: number = -1) {\n const { node: columnsNode, pos: columnsNodePos = 0 } =\n getClosestNodeByName(editor, 'columns') || {};\n if (!columnsNode) {\n return false;\n }\n\n // If the index is out of bounds, append the column to the end\n // of the columns node\n const columnIndex = index < 0 ? columnsNode.childCount : index;\n // Keep the original width of the columns\n // and set the new column width to auto\n const { state } = editor.view;\n const newColumn = state.schema.nodes.column.create(\n {\n width: DEFAULT_COLUMN_WIDTH,\n columnId: uuid(),\n },\n state.schema.nodes.paragraph.create(null)\n );\n\n // append the new column to the columns node\n // at the specified index\n const updatedContent: Node[] = [];\n columnsNode.content.forEach((child, _, i) => {\n updatedContent.push(child);\n if (i === columnIndex) {\n updatedContent.push(newColumn);\n }\n });\n\n if (index === -1) {\n updatedContent.push(newColumn);\n }\n\n const updatedColumnsNode = columnsNode.copy(Fragment.from(updatedContent));\n const transaction = state.tr.replaceWith(\n columnsNodePos,\n columnsNodePos + columnsNode.nodeSize,\n updatedColumnsNode\n );\n\n // Set the selection to the new column\n // if the index is out of bounds, set the selection\n // to the last column\n const newColumnPos =\n columnsNodePos +\n updatedContent\n .slice(0, columnIndex)\n .reduce((acc, node) => acc + node.nodeSize, 0);\n\n const textSelection = TextSelection.near(\n transaction.doc.resolve(newColumnPos)\n );\n transaction.setSelection(textSelection);\n\n editor.view.dispatch(transaction);\n return true;\n}\n\nexport function removeColumnByIndex(editor: Editor, index: number = -1) {\n const { node: columnsNode, pos: columnsNodePos = 0 } =\n getClosestNodeByName(editor, 'columns') || {};\n if (!columnsNode) {\n return false;\n }\n\n const { state, dispatch } = editor.view;\n const { tr } = state;\n\n const updatedContent: Node[] = [];\n columnsNode.content.forEach((child, _, i) => {\n if (i !== index) {\n updatedContent.push(child);\n }\n });\n\n if (index === -1) {\n updatedContent.pop();\n }\n\n const updatedColumnsNode = columnsNode.copy(Fragment.from(updatedContent));\n const transaction = tr.replaceWith(\n columnsNodePos,\n columnsNodePos + columnsNode.nodeSize,\n updatedColumnsNode\n );\n\n // Set the selection to the next column\n // if the index is out of bounds, set the selection\n // to the last column\n const nextColumnIndex =\n index === columnsNode.childCount - 1 ? index - 1 : index;\n const nextColumnPos =\n columnsNodePos +\n updatedContent\n .slice(0, nextColumnIndex)\n .reduce((acc, node) => acc + node.nodeSize, 0);\n\n const textSelection = TextSelection.near(\n transaction.doc.resolve(nextColumnPos)\n );\n transaction.setSelection(textSelection);\n\n dispatch(transaction);\n return true;\n}\n\nexport function getColumnWidths(editor: Editor): {\n id: string;\n width: string;\n}[] {\n const { node: columnsNode, pos: columnsNodePos = 0 } =\n getClosestNodeByName(editor, 'columns') || {};\n if (!columnsNode) {\n return [];\n }\n\n const columnsWidth: { id: string; width: string }[] = [];\n columnsNode.content.forEach((child) => {\n const { columnId, width } = child.attrs;\n columnsWidth.push({ id: columnId, width });\n });\n\n return columnsWidth;\n}\n","import { updateAttributes } from '@/editor/utils/update-attribute';\nimport { Node, mergeAttributes } from '@tiptap/core';\nimport { v4 as uuid } from 'uuid';\n\nexport const DEFAULT_COLUMN_WIDTH = 'auto';\n\nexport type AllowedColumnVerticalAlign = 'top' | 'middle' | 'bottom';\nexport const DEFAULT_COLUMN_VERTICAL_ALIGN: AllowedColumnVerticalAlign = 'top';\n\ninterface ColumnAttributes {\n verticalAlign: AllowedColumnVerticalAlign;\n backgroundColor: string;\n borderRadius: number;\n align: string;\n borderWidth: number;\n borderColor: string;\n\n paddingTop: number;\n paddingRight: number;\n paddingBottom: number;\n paddingLeft: number;\n\n showIfKey: string;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n column: {\n updateColumn: (attrs: Partial<ColumnAttributes>) => ReturnType;\n };\n }\n}\n\nexport const ColumnExtension = Node.create({\n name: 'column',\n content: 'block+',\n isolating: true,\n\n addAttributes() {\n return {\n columnId: {\n default: null,\n parseHTML: (element) =>\n element.getAttribute('data-column-id') || uuid(),\n renderHTML: (attributes) => {\n if (!attributes.columnId) {\n return {\n 'data-column-id': uuid(),\n };\n }\n\n return {\n 'data-column-id': attributes.columnId,\n };\n },\n },\n width: {\n default: DEFAULT_COLUMN_WIDTH,\n parseHTML: (element) =>\n element.style.width.replace(/['\"]+/g, '') || DEFAULT_COLUMN_WIDTH,\n renderHTML: (attributes) => {\n if (!attributes.width || attributes.width === DEFAULT_COLUMN_WIDTH) {\n return {};\n }\n\n return {\n style: `width: ${attributes.width}%;max-width:${attributes.width}%`,\n };\n },\n },\n verticalAlign: {\n default: DEFAULT_COLUMN_VERTICAL_ALIGN,\n parseHTML: (element) => element?.style?.verticalAlign || 'top',\n renderHTML: (attributes) => {\n const { verticalAlign } = attributes;\n if (\n !verticalAlign ||\n verticalAlign === DEFAULT_COLUMN_VERTICAL_ALIGN\n ) {\n return {};\n }\n\n if (verticalAlign === 'middle') {\n return {\n style: `display: flex;flex-direction: column;justify-content: center;`,\n };\n } else if (verticalAlign === 'bottom') {\n return {\n style: `display: flex;flex-direction: column;justify-content: flex-end;`,\n };\n }\n },\n },\n };\n },\n\n addCommands() {\n return {\n updateColumn: (attrs) => updateAttributes(this.name, attrs),\n };\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n 'div',\n mergeAttributes(HTMLAttributes, {\n 'data-type': 'column',\n class: 'hide-scrollbars',\n }),\n 0,\n ];\n },\n\n parseHTML() {\n return [\n {\n tag: 'div[data-type=\"column\"]',\n },\n ];\n },\n});\n","import { goToColumn } from '@/editor/utils/columns';\nimport { updateAttributes } from '@/editor/utils/update-attribute';\nimport { mergeAttributes } from '@tiptap/core';\nimport { Node } from '@tiptap/core';\nimport { v4 as uuid } from 'uuid';\nimport { DEFAULT_SECTION_SHOW_IF_KEY } from '../section/section';\n\nexport const DEFAULT_COLUMNS_GAP = 8;\n\ninterface ColumnsAttributes {\n showIfKey: string;\n gap: number;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n columns: {\n setColumns: () => ReturnType;\n updateColumns: (attrs: Partial<ColumnsAttributes>) => ReturnType;\n };\n }\n}\n\nexport const ColumnsExtension = Node.create({\n name: 'columns',\n group: 'columns',\n content: 'column+',\n defining: true,\n isolating: true,\n\n addAttributes() {\n return {\n showIfKey: {\n default: DEFAULT_SECTION_SHOW_IF_KEY,\n parseHTML: (element) => {\n return (\n element.getAttribute('data-show-if-key') ||\n DEFAULT_SECTION_SHOW_IF_KEY\n );\n },\n renderHTML(attributes) {\n if (!attributes.showIfKey) {\n return {};\n }\n\n return {\n 'data-show-if-key': attributes.showIfKey,\n };\n },\n },\n gap: {\n default: DEFAULT_COLUMNS_GAP,\n parseHTML: (element) => {\n return Number(element.style.gap) || DEFAULT_COLUMNS_GAP;\n },\n renderHTML(attributes) {\n if (!attributes.gap) {\n return {};\n }\n\n return {\n style: `gap: ${attributes.gap}px`,\n };\n },\n },\n };\n },\n\n addCommands() {\n return {\n setColumns:\n () =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: {},\n content: [\n {\n type: 'column',\n attrs: {\n columnId: uuid(),\n },\n content: [\n {\n type: 'paragraph',\n },\n ],\n },\n {\n type: 'column',\n attrs: {\n columnId: uuid(),\n },\n content: [\n {\n type: 'paragraph',\n },\n ],\n },\n ],\n });\n },\n updateColumns: (attrs) => updateAttributes(this.name, attrs),\n };\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n 'div',\n mergeAttributes(HTMLAttributes, {\n 'data-type': 'columns',\n class: 'mly-relative',\n }),\n 0,\n ];\n },\n\n parseHTML() {\n return [\n {\n tag: 'div[data-type=\"columns\"]',\n },\n ];\n },\n\n addKeyboardShortcuts() {\n return {\n Tab: () => {\n return goToColumn(this.editor, 'next');\n },\n 'Shift-Tab': () => {\n return goToColumn(this.editor, 'previous');\n },\n };\n },\n});\n","import { mergeAttributes, Node } from '@tiptap/core';\nimport { ReactNodeViewRenderer } from '@tiptap/react';\nimport { ButtonView } from './button-view';\nimport { updateAttributes } from '@/editor/utils/update-attribute';\nimport { DEFAULT_SECTION_SHOW_IF_KEY } from '../section/section';\nimport { AllowedLogoAlignment } from '../logo/logo';\n\nexport const DEFAULT_BUTTON_ALIGNMENT: AllowedLogoAlignment = 'left';\nexport const DEFAULT_BUTTON_VARIANT: AllowedButtonVariant = 'filled';\nexport const DEFAULT_BUTTON_BORDER_RADIUS: AllowedButtonBorderRadius = 'smooth';\nexport const DEFAULT_BUTTON_BACKGROUND_COLOR = '#000000';\nexport const DEFAULT_BUTTON_TEXT_COLOR = '#ffffff';\n\nexport const DEFAULT_BUTTON_PADDING_TOP = 10;\nexport const DEFAULT_BUTTON_PADDING_RIGHT = 32;\nexport const DEFAULT_BUTTON_PADDING_BOTTOM = 10;\nexport const DEFAULT_BUTTON_PADDING_LEFT = 32;\n\nexport const allowedButtonVariant = ['filled', 'outline'] as const;\nexport type AllowedButtonVariant = (typeof allowedButtonVariant)[number];\n\nexport const allowedButtonBorderRadius = ['sharp', 'smooth', 'round'] as const;\nexport type AllowedButtonBorderRadius =\n (typeof allowedButtonBorderRadius)[number];\n\nexport type ButtonAttributes = {\n text: string;\n isTextVariable: boolean;\n\n url: string;\n isUrlVariable: boolean;\n\n alignment: AllowedLogoAlignment;\n variant: AllowedButtonVariant;\n borderRadius: AllowedButtonBorderRadius;\n buttonColor: string;\n textColor: string;\n\n showIfKey: string;\n\n paddingTop: number;\n paddingRight: number;\n paddingBottom: number;\n paddingLeft: number;\n};\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n button: {\n setButton: () => ReturnType;\n updateButton: (attrs: Partial<ButtonAttributes>) => ReturnType;\n };\n }\n}\n\nexport const ButtonExtension = Node.create({\n name: 'button',\n group: 'block',\n atom: true,\n draggable: true,\n\n addAttributes() {\n return {\n text: {\n default: 'Button',\n parseHTML: (element) => {\n return element.getAttribute('data-text') || '';\n },\n renderHTML: (attributes) => {\n return {\n 'data-text': attributes.text,\n };\n },\n },\n isTextVariable: {\n default: false,\n parseHTML: (element) => {\n return element.getAttribute('data-is-text-variable') === 'true';\n },\n renderHTML: (attributes) => {\n if (!attributes.isTextVariable) {\n return {};\n }\n\n return {\n 'data-is-text-variable': 'true',\n };\n },\n },\n\n url: {\n default: '',\n parseHTML: (element) => {\n return element.getAttribute('data-url') || '';\n },\n renderHTML: (attributes) => {\n return {\n 'data-url': attributes.url,\n };\n },\n },\n // Later we will remove this attribute\n // and use the `url` attribute instead when implement\n // the URL variable feature\n isUrlVariable: {\n default: false,\n parseHTML: (element) => {\n return element.getAttribute('data-is-url-variable') === 'true';\n },\n renderHTML: (attributes) => {\n if (!attributes.isUrlVariable) {\n return {};\n }\n\n return {\n 'data-is-url-variable': 'true',\n };\n },\n },\n\n alignment: {\n default: DEFAULT_BUTTON_ALIGNMENT,\n parseHTML: (element) => {\n return (\n element.getAttribute('data-alignment') || DEFAULT_BUTTON_ALIGNMENT\n );\n },\n renderHTML: (attributes) => {\n return {\n 'data-alignment': attributes.alignment,\n };\n },\n },\n variant: {\n default: DEFAULT_BUTTON_VARIANT,\n parseHTML: (element) => {\n return element.getAttribute('data-variant') || DEFAULT_BUTTON_VARIANT;\n },\n renderHTML: (attributes) => {\n return {\n 'data-variant': attributes.variant,\n };\n },\n },\n borderRadius: {\n default: DEFAULT_BUTTON_BORDER_RADIUS,\n parseHTML: (element) => {\n return (\n element.getAttribute('data-border-radius') ||\n DEFAULT_BUTTON_BORDER_RADIUS\n );\n },\n renderHTML: (attributes) => {\n return {\n 'data-border-radius': attributes.borderRadius,\n };\n },\n },\n buttonColor: {\n default: DEFAULT_BUTTON_BACKGROUND_COLOR,\n parseHTML: (element) => {\n return (\n element.getAttribute('data-button-color') ||\n DEFAULT_BUTTON_BACKGROUND_COLOR\n );\n },\n renderHTML: (attributes) => {\n return {\n 'data-button-color': attributes.buttonColor,\n };\n },\n },\n textColor: {\n default: DEFAULT_BUTTON_TEXT_COLOR,\n parseHTML: (element) => {\n return (\n element.getAttribute('data-text-color') || DEFAULT_BUTTON_TEXT_COLOR\n );\n },\n renderHTML: (attributes) => {\n return {\n 'data-text-color': attributes.textColor,\n };\n },\n },\n showIfKey: {\n default: DEFAULT_SECTION_SHOW_IF_KEY,\n parseHTML: (element) => {\n return (\n element.getAttribute('data-show-if-key') ||\n DEFAULT_SECTION_SHOW_IF_KEY\n );\n },\n renderHTML(attributes) {\n if (!attributes.showIfKey) {\n return {};\n }\n\n return {\n 'data-show-if-key': attributes.showIfKey,\n };\n },\n },\n\n paddingTop: {\n default: DEFAULT_BUTTON_PADDING_TOP,\n parseHTML: (element) => {\n return parseInt(\n element.getAttribute('data-padding-top') ||\n DEFAULT_BUTTON_PADDING_TOP.toString(),\n 10\n );\n },\n renderHTML: (attributes) => {\n return {\n 'data-padding-top': attributes.paddingTop,\n };\n },\n },\n paddingRight: {\n default: DEFAULT_BUTTON_PADDING_RIGHT,\n parseHTML: (element) => {\n return parseInt(\n element.getAttribute('data-padding-right') ||\n DEFAULT_BUTTON_PADDING_RIGHT.toString(),\n 10\n );\n },\n renderHTML: (attributes) => {\n return {\n 'data-padding-right': attributes.paddingRight,\n };\n },\n },\n paddingBottom: {\n default: DEFAULT_BUTTON_PADDING_BOTTOM,\n parseHTML: (element) => {\n return parseInt(\n element.getAttribute('data-padding-bottom') ||\n DEFAULT_BUTTON_PADDING_BOTTOM.toString(),\n 10\n );\n },\n renderHTML: (attributes) => {\n return {\n 'data-padding-bottom': attributes.paddingBottom,\n };\n },\n },\n paddingLeft: {\n default: DEFAULT_BUTTON_PADDING_LEFT,\n parseHTML: (element) => {\n return parseInt(\n element.getAttribute('data-padding-left') ||\n DEFAULT_BUTTON_PADDING_LEFT.toString(),\n 10\n );\n },\n renderHTML: (attributes) => {\n return {\n 'data-padding-left': attributes.paddingLeft,\n };\n },\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: `div[data-type=\"${this.name}\"]`,\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n 'div',\n mergeAttributes(HTMLAttributes, {\n 'data-type': this.name,\n }),\n ];\n },\n\n addCommands() {\n return {\n setButton:\n () =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: {},\n content: [],\n });\n },\n updateButton: (attrs) => updateAttributes(this.name, attrs),\n };\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(ButtonView, {\n contentDOMElementTag: 'div',\n className: 'mly-relative',\n });\n },\n});\n","import { AlignCenter, AlignLeft, AlignRight } from 'lucide-react';\nimport { BubbleMenuButton } from './bubble-menu-button';\nimport { AllowedLogoAlignment } from '../nodes/logo/logo';\nimport { Popover, PopoverContent, PopoverTrigger } from './popover';\nimport { cn } from '../utils/classname';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './ui/tooltip';\n\ntype AlignmentSwitchProps = {\n alignment: AllowedLogoAlignment;\n onAlignmentChange: (alignment: AllowedLogoAlignment) => void;\n};\n\nexport function AlignmentSwitch(props: AlignmentSwitchProps) {\n const { alignment = 'left', onAlignmentChange } = props;\n\n const alignments = {\n left: {\n icon: AlignLeft,\n tooltip: 'Align Left',\n onClick: () => {\n onAlignmentChange('left');\n },\n },\n center: {\n icon: AlignCenter,\n tooltip: 'Align Center',\n onClick: () => {\n onAlignmentChange('center');\n },\n },\n right: {\n icon: AlignRight,\n tooltip: 'Align Right',\n onClick: () => {\n onAlignmentChange('right');\n },\n },\n };\n\n const activeAlignment = alignments[alignment];\n\n return (\n <Popover>\n <Tooltip>\n <TooltipTrigger asChild>\n <PopoverTrigger\n className={cn(\n 'mly-flex mly-size-7 mly-items-center mly-justify-center mly-gap-1 mly-rounded-md mly-px-1.5 mly-text-sm data-[state=open]:mly-bg-soft-gray hover:mly-bg-soft-gray focus-visible:mly-relative focus-visible:mly-z-10 focus-visible:mly-outline-none focus-visible:mly-ring-2 focus-visible:mly-ring-gray-400 focus-visible:mly-ring-offset-2'\n )}\n >\n <activeAlignment.icon className=\"mly-h-3 mly-w-3 mly-stroke-[2.5]\" />\n </PopoverTrigger>\n </TooltipTrigger>\n <TooltipContent sideOffset={8}>Alignment</TooltipContent>\n </Tooltip>\n <PopoverContent\n className=\"mly-flex mly-w-max mly-gap-0.5 mly-rounded-lg !mly-p-0.5\"\n side=\"top\"\n sideOffset={8}\n align=\"center\"\n onOpenAutoFocus={(e) => {\n e.preventDefault();\n }}\n onCloseAutoFocus={(e) => {\n e.preventDefault();\n }}\n >\n {Object.entries(alignments).map(([key, value]) => {\n return (\n <BubbleMenuButton\n key={key}\n icon={value.icon}\n tooltip={value.tooltip}\n command={value.onClick}\n isActive={() => key === alignment}\n />\n );\n })}\n </PopoverContent>\n </Popover>\n );\n}\n","import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn } from '../utils/classname';\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?:\n | 'default'\n | 'destructive'\n | 'outline'\n | 'secondary'\n | 'ghost'\n | 'link';\n size?: 'default' | 'sm' | 'lg' | 'icon';\n asChild?: boolean;\n}\n\nconst BaseButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : 'button';\n const baseClass =\n 'mly-inline-flex mly-items-center mly-justify-center mly-rounded-md mly-text-sm mly-font-medium mly-ring-offset-white mly-transition-colors focus-visible:mly-outline-none focus-visible:mly-ring-2 focus-visible:mly-ring-gray-400 focus-visible:mly-ring-offset-2 focus-visible:mly-relative focus-visible:mly-z-10 disabled:mly-opacity-50 ';\n const variantClasses = {\n default: 'mly-bg-gray-900 mly-text-gray-50 hover:mly-bg-soft-gray',\n destructive: 'mly-bg-red-500 mly-text-gray-50 hover:mly-bg-red-500/90',\n outline:\n 'mly-border mly-border-gray-200 mly-bg-white hover:mly-bg-gray-100 hover:mly-text-gray-900',\n secondary: 'mly-bg-gray-100 mly-text-gray-900 hover:mly-bg-gray-100/80',\n ghost:\n 'hover:mly-bg-soft-gray bg-transparent hover:mly-text-gray-900 data-[state=true]:mly-bg-soft-gray data-[state=true]:mly-text-gray-900',\n link: 'mly-text-gray-900 mly-underline-offset-4 hover:mly-underline',\n };\n const sizeClasses = {\n default: 'mly-h-10 mly-px-4 mly-py-2',\n sm: 'mly-h-9 mly-rounded-md mly-px-3',\n lg: 'mly-h-11 mly-rounded-md mly-px-8',\n icon: 'mly-h-10 mly-w-10',\n };\n\n const classes = cn(\n 'mly-editor',\n baseClass,\n variantClasses[variant],\n sizeClasses[size],\n className\n );\n\n return <Comp className={classes} ref={ref} {...props} />;\n }\n);\n\nBaseButton.displayName = 'BaseButton';\n\nexport { BaseButton };\n","'use client';\n\nimport * as React from 'react';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { cn } from '@/editor/utils/classname';\n\n// Explicit type annotations to avoid TS2742 errors\nconst TooltipProvider: React.FC<\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Provider>\n> = TooltipPrimitive.Provider;\n\nconst Tooltip: React.FC<\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Root>\n> = TooltipPrimitive.Root;\n\nconst TooltipTrigger: React.FC<\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Trigger>\n> = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'mly-z-50 mly-overflow-hidden mly-rounded-md mly-border mly-border-gray-200 mly-bg-white mly-px-2 mly-py-1 mly-text-xs mly-animate-in mly-fade-in-0 mly-zoom-in-95',\n className\n )}\n {...props}\n />\n)) as React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> &\n React.RefAttributes<React.ElementRef<typeof TooltipPrimitive.Content>>\n>;\n\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import { BaseButton } from '@/editor/components/base-button';\nimport { cn } from '@/editor/utils/classname';\nimport { BubbleMenuItem } from './text-menu/text-bubble-menu';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './ui/tooltip';\n\nexport function BubbleMenuButton(item: BubbleMenuItem) {\n const { tooltip } = item;\n\n const content = (\n <BaseButton\n variant=\"ghost\"\n size=\"sm\"\n {...(item.command ? { onClick: item.command } : {})}\n data-state={item?.isActive?.()}\n className={cn(\n '!mly-size-7 mly-px-2.5 disabled:mly-cursor-not-allowed',\n item?.className\n )}\n type=\"button\"\n disabled={item.disbabled}\n >\n {item.icon ? (\n <item.icon\n className={cn(\n 'mly-h-3 mly-w-3 mly-shrink-0 mly-stroke-[2.5]',\n item?.iconClassName\n )}\n />\n ) : (\n <span\n className={cn(\n 'mly-text-sm mly-font-medium mly-text-slate-600',\n item?.nameClassName\n )}\n >\n {item.name}\n </span>\n )}\n </BaseButton>\n );\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{content}</TooltipTrigger>\n <TooltipContent sideOffset={8}>{tooltip}</TooltipContent>\n </Tooltip>\n );\n }\n\n return content;\n}\n","'use client';\n\nimport { HexColorPicker, HexColorInput } from 'react-colorful';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\nimport { BaseButton } from '../base-button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './tooltip';\nimport { cn } from '@/editor/utils/classname';\nimport { ReactNode } from 'react';\n\ntype ColorPickerProps = {\n color: string;\n onColorChange: (color: string) => void;\n\n borderColor?: string;\n backgroundColor?: string;\n tooltip?: string;\n className?: string;\n\n children?: ReactNode;\n onClose?: (color: string) => void;\n suggestedColors?: string[];\n};\n\nexport function ColorPicker(props: ColorPickerProps) {\n const {\n color,\n onColorChange,\n borderColor,\n backgroundColor,\n tooltip,\n className,\n\n children,\n onClose,\n\n suggestedColors = [],\n } = props;\n\n const handleColorChange = (color: string) => {\n // HACK: This is a workaround for a bug in tiptap\n // https://github.com/ueberdosis/tiptap/issues/3580\n //\n // ERROR: flushSync was called from inside a lifecycle\n //\n // To fix this, we need to make sure that the onChange\n // callback is run after the current execution context.\n queueMicrotask(() => {\n onColorChange(color);\n });\n };\n\n const popoverButton = (\n <PopoverTrigger asChild>\n {children || (\n <BaseButton\n variant=\"ghost\"\n className=\"!mly-size-7 mly-shrink-0\"\n size=\"sm\"\n type=\"button\"\n >\n <div\n className={cn(\n 'mly-h-4 mly-w-4 mly-shrink-0 mly-rounded mly-border-2 mly-border-gray-700',\n className\n )}\n style={{\n ...(borderColor ? { borderColor } : {}),\n backgroundColor: backgroundColor || 'transparent',\n }}\n />\n </BaseButton>\n )}\n </PopoverTrigger>\n );\n\n return (\n <Popover\n onOpenChange={(open) => {\n if (!open) {\n onClose?.(color);\n }\n }}\n >\n {tooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{popoverButton}</TooltipTrigger>\n <TooltipContent sideOffset={8}>{tooltip}</TooltipContent>\n </Tooltip>\n ) : (\n popoverButton\n )}\n\n <PopoverContent\n className=\"mly-w-full mly-rounded-none mly-border-0 !mly-bg-transparent !mly-p-0 mly-shadow-none mly-drop-shadow-md\"\n sideOffset={8}\n >\n <div className=\"mly-min-w-[260px] mly-rounded-xl mly-border mly-bg-white mly-p-4\">\n <HexColorPicker\n color={color}\n onChange={handleColorChange}\n className=\"mly-flex !mly-w-full mly-flex-col mly-gap-4\"\n />\n <HexColorInput\n alpha={true}\n color={color}\n onChange={handleColorChange}\n className=\"mly-mt-4 mly-w-full mly-min-w-0 mly-rounded-lg mly-border mly-px-2 mly-py-1.5 mly-text-sm mly-uppercase focus-visible:mly-border-gray-400 focus-visible:mly-outline-none\"\n prefixed\n />\n\n {suggestedColors.length > 0 && (\n <div>\n <div className=\"-mly-mx-4 mly-my-4 mly-h-px mly-bg-gray-200\" />\n\n <h2 className=\"mly-text-xs mly-text-gray-500\">Recently used</h2>\n\n <div className=\"mly-mt-2 mly-flex mly-flex-wrap mly-gap-0.5\">\n {suggestedColors.map((suggestedColor) => (\n <BaseButton\n key={suggestedColor}\n variant=\"ghost\"\n size=\"sm\"\n className=\"!mly-size-7 mly-shrink-0\"\n type=\"button\"\n onClick={() => handleColorChange(suggestedColor)}\n >\n <div\n className=\"mly-h-4 mly-w-4 mly-shrink-0 mly-rounded\"\n style={{\n backgroundColor: suggestedColor,\n }}\n />\n </BaseButton>\n ))}\n </div>\n </div>\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n","import { cn } from '@/editor/utils/classname';\n\ntype Props = {\n type?: 'horizontal' | 'vertical';\n className?: string;\n};\n\nexport function Divider(props: Props) {\n const { type = 'vertical', className } = props;\n\n return (\n <div\n className={cn(\n 'mly-shrink-0 mly-bg-gray-200',\n type === 'vertical' ? 'mly-mx-0.5 mly-w-px' : 'mly-my-0.5 mly-h-px',\n className\n )}\n />\n );\n}\n","import {\n BracesIcon,\n ChevronDownIcon,\n CornerDownLeft,\n Link,\n LucideIcon,\n} from 'lucide-react';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\nimport { BaseButton } from '../base-button';\nimport { useRef, useState } from 'react';\nimport { Tooltip, TooltipTrigger, TooltipContent } from './tooltip';\nimport {\n DEFAULT_PLACEHOLDER_URL,\n DEFAULT_RENDER_VARIABLE_FUNCTION,\n DEFAULT_VARIABLE_TRIGGER_CHAR,\n useMailyContext,\n} from '@/editor/provider';\nimport { InputAutocomplete } from './input-autocomplete';\nimport { processVariables } from '@/editor/utils/variable';\nimport { useMemo } from 'react';\nimport { Editor } from '@tiptap/core';\n\nconst LINK_PROTOCOL_REGEX = /https?:\\/\\//;\n\ntype LinkInputPopoverProps = {\n defaultValue?: string;\n isVariable?: boolean;\n onValueChange?: (value: string, isVariable?: boolean) => void;\n\n icon?: LucideIcon;\n tooltip?: string;\n\n editor: Editor;\n};\n\nexport function LinkInputPopover(props: LinkInputPopoverProps) {\n const {\n defaultValue = '',\n onValueChange,\n tooltip,\n icon: Icon = Link,\n editor,\n\n isVariable,\n } = props;\n\n const defaultProtocol = defaultValue.match(LINK_PROTOCOL_REGEX)?.[0];\n const defaultUrlWithoutProtocol = defaultValue.replace(\n LINK_PROTOCOL_REGEX,\n ''\n );\n\n const [isOpen, setIsOpen] = useState(false);\n const [protocol, setProtocol] = useState(defaultProtocol || 'https://');\n const [isEditing, setIsEditing] = useState(!isVariable);\n\n const linkInputRef = useRef<HTMLInputElement>(null);\n\n const {\n variables = [],\n variableTriggerCharacter = DEFAULT_VARIABLE_TRIGGER_CHAR,\n renderVariable = DEFAULT_RENDER_VARIABLE_FUNCTION,\n placeholderUrl = DEFAULT_PLACEHOLDER_URL,\n } = useMailyContext();\n\n const autoCompleteOptions = useMemo(() => {\n const withoutTrigger = defaultUrlWithoutProtocol.replace(\n new RegExp(variableTriggerCharacter, 'g'),\n ''\n );\n\n return processVariables(variables, {\n query: withoutTrigger || '',\n from: 'bubble-variable',\n editor,\n }).map((variable) => variable.name);\n }, [variables, defaultUrlWithoutProtocol, editor]);\n\n const popoverButton = (\n <PopoverTrigger asChild>\n <BaseButton\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n className=\"mly-size-7\"\n data-state={!!defaultUrlWithoutProtocol}\n >\n <Icon className=\"mly-h-3 mly-w-3 mly-shrink-0 mly-stroke-[2.5] mly-text-midnight-gray\" />\n </BaseButton>\n </PopoverTrigger>\n );\n\n const normalizeProtocol = (value: string, p: string = protocol) => {\n // remove protocol if it's already there\n // and add the new one\n value = value?.replace(LINK_PROTOCOL_REGEX, '');\n return p + value;\n };\n\n return (\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n {tooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{popoverButton}</TooltipTrigger>\n <TooltipContent sideOffset={8}>{tooltip}</TooltipContent>\n </Tooltip>\n ) : (\n popoverButton\n )}\n\n <PopoverContent\n align=\"end\"\n side=\"top\"\n className=\"mly-w-max mly-rounded-none mly-border-none mly-bg-transparent !mly-p-0 mly-shadow-none\"\n sideOffset={8}\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <form\n onSubmit={(e) => {\n e.preventDefault();\n const input = linkInputRef.current;\n if (!input) {\n return;\n }\n\n let value = normalizeProtocol(input.value);\n onValueChange?.(value);\n setIsOpen(false);\n }}\n >\n <div className=\"mly-isolate mly-flex mly-rounded-lg\">\n {!isEditing && (\n <div className=\"mly-flex mly-h-8 mly-items-center mly-rounded-lg mly-border mly-border-gray-300 mly-bg-white mly-px-0.5\">\n <button\n onClick={() => {\n setIsEditing(true);\n setTimeout(() => {\n linkInputRef.current?.focus();\n }, 0);\n }}\n >\n {renderVariable({\n variable: {\n name: defaultUrlWithoutProtocol,\n valid: true,\n },\n fallback: '',\n from: 'bubble-variable',\n editor,\n })}\n </button>\n </div>\n )}\n\n {isEditing && (\n <>\n <div className=\"mly-relative\">\n <select\n className=\"hover:text-accent-foreground mly-peer mly-inline-flex mly-h-full mly-appearance-none mly-items-center mly-rounded-none mly-rounded-s-lg mly-border mly-border-gray-300 mly-bg-gray-50 mly-pe-8 mly-ps-3 mly-text-sm mly-text-gray-700 mly-transition-shadow hover:mly-bg-gray-100 focus:mly-z-10 focus-visible:mly-outline-none disabled:mly-pointer-events-none disabled:mly-cursor-not-allowed disabled:mly-opacity-50\"\n aria-label=\"Protocol\"\n value={protocol}\n onChange={(e) => {\n const protocol = e.target.value;\n\n setProtocol(protocol);\n const newValue = normalizeProtocol(\n linkInputRef.current?.value || '',\n protocol\n );\n onValueChange?.(newValue);\n }}\n >\n <option value=\"https://\">https://</option>\n <option value=\"http://\">http://</option>\n </select>\n <span className=\"mly-pointer-events-none mly-absolute mly-inset-y-0 mly-right-0 mly-z-10 mly-flex mly-h-full mly-w-9 mly-items-center mly-justify-center mly-text-gray-600 peer-disabled:mly-opacity-50\">\n <ChevronDownIcon\n size={16}\n strokeWidth={2}\n aria-hidden=\"true\"\n role=\"img\"\n />\n </span>\n </div>\n\n <InputAutocomplete\n value={defaultUrlWithoutProtocol}\n onValueChange={(value) => {\n let newValue = normalizeProtocol(value);\n onValueChange?.(newValue);\n }}\n autoCompleteOptions={autoCompleteOptions}\n ref={linkInputRef}\n placeholder={placeholderUrl}\n className=\"-mly-ms-px mly-block mly-h-8 mly-w-52 mly-rounded-lg mly-rounded-s-none mly-border mly-border-gray-300 mly-px-2 mly-py-1.5 mly-pr-6 mly-text-sm mly-shadow-sm mly-outline-none placeholder:mly-text-gray-400\"\n triggerChar={variableTriggerCharacter}\n onSelectOption={(value) => {\n const isVariable =\n autoCompleteOptions.includes(value) ?? false;\n if (isVariable) {\n setIsEditing(false);\n } else {\n value = normalizeProtocol(value);\n }\n\n onValueChange?.(value, isVariable);\n setIsOpen(false);\n }}\n />\n </>\n )}\n </div>\n </form>\n </PopoverContent>\n </Popover>\n );\n}\n","'use client';\n\nimport { BlockGroupItem, BlockItem } from '@/blocks/types';\nimport { createContext, PropsWithChildren, useContext } from 'react';\nimport { DEFAULT_SLASH_COMMANDS } from './extensions/slash-command/default-slash-commands';\nimport { Editor } from '@tiptap/core';\nimport { DefaultRenderVariable } from './nodes/variable/variable-view';\n\nexport type Variable = {\n name: string;\n // Default is true\n required?: boolean;\n // default is true\n valid?: boolean;\n};\n\nexport type VariableFunctionOptions = {\n query: string;\n from: 'content-variable' | 'bubble-variable' | 'repeat-variable';\n editor: Editor;\n};\n\nexport type VariablesFunction = (\n opts: VariableFunctionOptions\n) => Array<Variable>;\n\nexport type Variables = Array<Variable> | VariablesFunction;\n\nexport type RenderVariableOptions = {\n variable: Variable;\n fallback?: string;\n editor: Editor;\n from: 'content-variable' | 'bubble-variable' | 'button-variable';\n};\n\nexport type RenderVariableFunction = (\n opts: RenderVariableOptions\n) => JSX.Element | null;\n\nexport const DEFAULT_PLACEHOLDER_URL = 'maily.to/';\n\nexport const DEFAULT_VARIABLE_TRIGGER_CHAR = '@';\nexport const DEFAULT_VARIABLES: Variables = [];\nexport const DEFAULT_RENDER_VARIABLE_FUNCTION: RenderVariableFunction =\n DefaultRenderVariable;\n\nexport type MailyContextType = {\n placeholderUrl?: string;\n variableTriggerCharacter?: string;\n variables?: Variables;\n blocks?: BlockGroupItem[];\n renderVariable?: RenderVariableFunction;\n};\n\nexport const MailyContext = createContext<MailyContextType>({\n placeholderUrl: DEFAULT_PLACEHOLDER_URL,\n variableTriggerCharacter: DEFAULT_VARIABLE_TRIGGER_CHAR,\n variables: DEFAULT_VARIABLES,\n blocks: DEFAULT_SLASH_COMMANDS,\n renderVariable: DEFAULT_RENDER_VARIABLE_FUNCTION,\n});\n\ntype MailyProviderProps = PropsWithChildren<MailyContextType>;\n\nexport function MailyProvider(props: MailyProviderProps) {\n const { children, ...defaultValues } = props;\n\n if (defaultValues.variableTriggerCharacter === '') {\n throw new Error('variableTriggerCharacter cannot be an empty string');\n }\n\n return (\n <MailyContext.Provider value={defaultValues}>\n {children}\n </MailyContext.Provider>\n );\n}\n\nexport function useMailyContext() {\n const values = useContext(MailyContext);\n if (!values) {\n throw new Error('Missing MailyContext.Provider in the component tree');\n }\n\n return values;\n}\n","import { FootprintsIcon, Heading1 } from 'lucide-react';\nimport { button, linkCard } from '@/blocks/button';\nimport { htmlCodeBlock } from '@/blocks/code';\nimport { image, inlineImage, logo } from '@/blocks/image';\nimport { columns, divider, repeat, section, spacer } from '@/blocks/layout';\nimport { bulletList, orderedList } from '@/blocks/list';\nimport { BlockGroupItem } from '@/blocks/types';\nimport {\n blockquote,\n clearLine,\n footer,\n hardBreak,\n heading1,\n heading2,\n heading3,\n text,\n} from '@/blocks/typography';\nimport {\n headerLogoWithCoverImage,\n headerLogoWithTextHorizontal,\n headerLogoWithTextVertical,\n} from '@/blocks/headers';\nimport {\n footerCopyrightText,\n footerCommunityFeedbackCta,\n footerCompanySignature,\n} from '@/blocks/footers';\n\nexport const DEFAULT_SLASH_COMMANDS: BlockGroupItem[] = [\n {\n title: 'Blocks',\n commands: [\n text,\n heading1,\n heading2,\n heading3,\n bulletList,\n orderedList,\n image,\n logo,\n inlineImage,\n columns,\n section,\n repeat,\n divider,\n spacer,\n button,\n linkCard,\n hardBreak,\n blockquote,\n footer,\n clearLine,\n ],\n },\n {\n title: 'Components',\n commands: [\n {\n id: 'headers',\n title: 'Headers',\n description: 'Add pre-designed headers block',\n searchTerms: ['header', 'headers'],\n icon: <Heading1 className=\"mly-h-4 mly-w-4\" />,\n preview: 'https://cdn.usemaily.com/previews/header-preview-xyz.png',\n commands: [\n headerLogoWithTextVertical,\n headerLogoWithTextHorizontal,\n headerLogoWithCoverImage,\n ],\n },\n {\n id: 'footers',\n title: 'Footers',\n description: 'Add pre-designed footers block',\n searchTerms: ['footers'],\n icon: <FootprintsIcon className=\"mly-h-4 mly-w-4\" />,\n commands: [\n footerCopyrightText,\n footerCommunityFeedbackCta,\n footerCompanySignature,\n ],\n },\n htmlCodeBlock,\n ],\n },\n];\n","import type { BlockItem } from './types';\nimport { MousePointer, ArrowUpRightSquare } from 'lucide-react';\n\nexport const button: BlockItem = {\n title: 'Button',\n description: 'Add a call to action button to email.',\n searchTerms: ['link', 'button', 'cta'],\n icon: <MousePointer className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor.chain().focus().deleteRange(range).setButton().run();\n },\n};\n\nexport const linkCard: BlockItem = {\n title: 'Link Card',\n description: 'Add a link card to email.',\n searchTerms: ['link', 'button', 'image'],\n icon: <ArrowUpRightSquare className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor.chain().focus().deleteRange(range).setLinkCard().run();\n },\n render: (editor) => {\n return editor.extensionManager.extensions.findIndex(\n (ext) => ext.name === 'linkCard'\n ) === -1\n ? null\n : true;\n },\n};\n","import { CodeXmlIcon } from 'lucide-react';\nimport { BlockItem } from './types';\n\nexport const htmlCodeBlock: BlockItem = {\n title: 'Custom HTML',\n description: 'Insert a custom HTML block',\n searchTerms: ['html', 'code', 'custom'],\n icon: <CodeXmlIcon className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setHtmlCodeBlock({ language: 'html' })\n .run();\n },\n};\n","import { NodeSelection, Selection, TextSelection } from '@tiptap/pm/state';\nimport type { BlockItem } from './types';\nimport { ImageIcon } from 'lucide-react';\n\nexport const image: BlockItem = {\n title: 'Image',\n description: 'Full width image',\n searchTerms: ['image'],\n icon: <ImageIcon className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor.chain().focus().deleteRange(range).setImage({ src: '' }).run();\n },\n};\n\nexport const logo: BlockItem = {\n title: 'Logo',\n description: 'Add your brand logo',\n searchTerms: ['image', 'logo'],\n icon: <ImageIcon className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor.chain().focus().deleteRange(range).setLogoImage({ src: '' }).run();\n },\n};\n\nexport const inlineImage: BlockItem = {\n title: 'Inline Image',\n description: 'Inline image',\n searchTerms: ['image', 'inline'],\n icon: <ImageIcon className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor\n .chain()\n .focus()\n .deleteRange(range)\n // @ts-ignore\n .setInlineImage({\n src: '',\n })\n // @ts-ignore\n .command((props) => {\n const { tr, state, view, editor } = props;\n const { from } = range;\n\n const node = state.doc.nodeAt(from);\n if (!node) {\n return false;\n }\n\n const selection = TextSelection.create(\n tr.doc,\n from,\n from + node.nodeSize\n );\n tr.setSelection(selection);\n return true;\n })\n .run();\n },\n};\n","import type { BlockItem } from './types';\nimport {\n ColumnsIcon,\n Repeat2,\n MoveVertical,\n RectangleHorizontal,\n Minus,\n} from 'lucide-react';\n\nexport const columns: BlockItem = {\n title: 'Columns',\n description: 'Add columns to email.',\n searchTerms: ['layout', 'columns'],\n icon: <ColumnsIcon className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor\n .chain()\n .focus()\n .deleteRange(range)\n // @ts-ignore\n .setColumns()\n .focus(editor.state.selection.head - 2)\n .run();\n },\n};\n\nexport const section: BlockItem = {\n title: 'Section',\n description: 'Add a section to email.',\n searchTerms: ['layout', 'section'],\n icon: <RectangleHorizontal className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor.chain().focus().deleteRange(range).setSection().run();\n },\n};\n\nexport const repeat: BlockItem = {\n title: 'Repeat',\n description: 'Loop over an array of items.',\n searchTerms: ['repeat', 'for', 'loop'],\n icon: <Repeat2 className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor.chain().focus().deleteRange(range).setRepeat().run();\n },\n};\n\nexport const spacer: BlockItem = {\n title: 'Spacer',\n description: 'Add space between blocks.',\n searchTerms: ['space', 'gap', 'divider'],\n icon: <MoveVertical className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor.chain().focus().deleteRange(range).setSpacer({ height: 'sm' }).run();\n },\n};\n\nexport const divider: BlockItem = {\n title: 'Divider',\n description: 'Add a horizontal divider.',\n searchTerms: ['divider', 'line'],\n icon: <Minus className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor.chain().focus().deleteRange(range).setHorizontalRule().run();\n },\n};\n","import type { BlockItem } from './types';\nimport { List, ListOrdered } from 'lucide-react';\n\nexport const bulletList: BlockItem = {\n title: 'Bullet List',\n description: 'Create a simple bullet list.',\n searchTerms: ['unordered', 'point'],\n icon: <List className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor.chain().focus().deleteRange(range).toggleBulletList().run();\n },\n};\n\nexport const orderedList: BlockItem = {\n title: 'Numbered List',\n description: 'Create a list with numbering.',\n searchTerms: ['ordered'],\n icon: <ListOrdered className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor.chain().focus().deleteRange(range).toggleOrderedList().run();\n },\n};\n","import type { BlockItem } from './types';\nimport {\n Text,\n Heading1,\n Heading2,\n Heading3,\n DivideIcon,\n TextQuote,\n FootprintsIcon,\n EraserIcon,\n} from 'lucide-react';\n\nexport const text: BlockItem = {\n title: 'Text',\n description: 'Just start typing with plain text.',\n searchTerms: ['p', 'paragraph'],\n icon: <Text className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .toggleNode('paragraph', 'paragraph')\n .run();\n },\n};\n\nexport const heading1: BlockItem = {\n title: 'Heading 1',\n description: 'Big heading.',\n searchTerms: ['title', 'big', 'large'],\n icon: <Heading1 className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setNode('heading', { level: 1 })\n .run();\n },\n};\n\nexport const heading2: BlockItem = {\n title: 'Heading 2',\n description: 'Medium heading.',\n searchTerms: ['subtitle', 'medium'],\n icon: <Heading2 className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setNode('heading', { level: 2 })\n .run();\n },\n};\n\nexport const heading3: BlockItem = {\n title: 'Heading 3',\n description: 'Small heading.',\n searchTerms: ['subtitle', 'small'],\n icon: <Heading3 className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setNode('heading', { level: 3 })\n .run();\n },\n};\n\nexport const hardBreak: BlockItem = {\n title: 'Hard Break',\n description: 'Add a break between lines.',\n searchTerms: ['break', 'line'],\n icon: <DivideIcon className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor.chain().focus().deleteRange(range).setHardBreak().run();\n },\n};\n\nexport const blockquote: BlockItem = {\n title: 'Blockquote',\n description: 'Add blockquote.',\n searchTerms: ['quote', 'blockquote'],\n icon: <TextQuote className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor.chain().focus().deleteRange(range).toggleBlockquote().run();\n },\n};\n\nexport const footer: BlockItem = {\n title: 'Footer',\n description: 'Add a footer text to email.',\n searchTerms: ['footer', 'text'],\n icon: <FootprintsIcon className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor.chain().focus().deleteRange(range).setFooter().run();\n },\n};\n\nexport const clearLine: BlockItem = {\n title: 'Clear Line',\n description: 'Clear the current line.',\n searchTerms: ['clear', 'line'],\n icon: <EraserIcon className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n // @ts-ignore\n editor.chain().focus().selectParentNode().deleteSelection().run();\n },\n};\n","import { SVGProps } from 'react';\n\nexport function LogoWithCoverImageIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.97634 1.4502H9.02405C9.70389 1.4502 10.2476 1.45019 10.687 1.48609C11.1379 1.52293 11.527 1.6003 11.8849 1.78263C12.4588 2.07504 12.9254 2.54164 13.2178 3.11553C13.4001 3.47338 13.4775 3.86253 13.5143 4.31342C13.5502 4.75277 13.5502 5.29652 13.5502 5.97637V8.02403C13.5502 8.70388 13.5502 9.24763 13.5143 9.68698C13.4775 10.1379 13.4001 10.527 13.2178 10.8849C12.9254 11.4588 12.4588 11.9254 11.8849 12.2178C11.527 12.4001 11.1379 12.4775 10.687 12.5143C10.2476 12.5502 9.70387 12.5502 9.02402 12.5502H4.97636C4.29651 12.5502 3.75276 12.5502 3.31341 12.5143C2.86252 12.4775 2.47337 12.4001 2.11552 12.2178C1.54163 11.9254 1.07504 11.4588 0.782626 10.8849C0.600293 10.527 0.522922 10.1379 0.486083 9.68698C0.450187 9.24764 0.45019 8.70389 0.450195 8.02405V5.97635C0.45019 5.29651 0.450187 4.75276 0.486083 4.31342C0.522922 3.86253 0.600293 3.47338 0.782626 3.11553C1.07504 2.54164 1.54163 2.07504 2.11552 1.78263C2.47337 1.6003 2.86252 1.52293 3.31341 1.48609C3.75276 1.45019 4.2965 1.4502 4.97634 1.4502ZM3.40298 2.58243C3.02012 2.61372 2.79184 2.67259 2.61491 2.76274C2.248 2.94969 1.94968 3.248 1.76273 3.61492C1.67258 3.79185 1.61371 4.02013 1.58243 4.40299C1.55062 4.79228 1.55019 5.29106 1.55019 6.0002V8.0002C1.55019 8.70934 1.55062 9.20812 1.58243 9.59741C1.61371 9.98028 1.67258 10.2086 1.76273 10.3855C1.94968 10.7524 2.248 11.0507 2.61491 11.2377C2.79184 11.3278 3.02012 11.3867 3.40298 11.418C3.79227 11.4498 4.29105 11.4502 5.00019 11.4502H9.00019C9.70933 11.4502 10.2081 11.4498 10.5974 11.418C10.9803 11.3867 11.2086 11.3278 11.3855 11.2377C11.7524 11.0507 12.0507 10.7524 12.2377 10.3855C12.3278 10.2086 12.3867 9.98028 12.418 9.59741C12.4498 9.20812 12.4502 8.70934 12.4502 8.0002V6.0002C12.4502 5.29106 12.4498 4.79228 12.418 4.40299C12.3867 4.02013 12.3278 3.79185 12.2377 3.61492C12.0507 3.248 11.7524 2.94969 11.3855 2.76274C11.2086 2.67259 10.9803 2.61372 10.5974 2.58243C10.2081 2.55063 9.70933 2.5502 9.00019 2.5502H5.00019C4.29105 2.5502 3.79227 2.55063 3.40298 2.58243Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.1999 0.450195C4.50366 0.450195 4.7499 0.696438 4.7499 1.00019V2.75019C4.7499 3.05395 4.50366 3.30019 4.1999 3.30019C3.89614 3.30019 3.6499 3.05395 3.6499 2.75019V1.00019C3.6499 0.696438 3.89614 0.450195 4.1999 0.450195Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.8 0.450195C10.1037 0.450195 10.35 0.696438 10.35 1.00019V2.75019C10.35 3.05395 10.1037 3.30019 9.8 3.30019C9.49625 3.30019 9.25 3.05395 9.25 2.75019V1.00019C9.25 0.696438 9.49625 0.450195 9.8 0.450195Z\"\n fill=\"currentColor\"\n />\n <mask id=\"path-4-inside-1_1046_19527\" fill=\"white\">\n <rect x=\"3\" y=\"4\" width=\"8\" height=\"3\" rx=\"0.5\" />\n </mask>\n <rect\n x=\"3\"\n y=\"4\"\n width=\"8\"\n height=\"3\"\n rx=\"0.5\"\n stroke=\"black\"\n strokeWidth=\"2\"\n mask=\"url(#path-4-inside-1_1046_19527)\"\n />\n <rect\n x=\"6.25\"\n y=\"8.25\"\n width=\"4.5\"\n height=\"0.5\"\n rx=\"0.25\"\n stroke=\"black\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"3\" y=\"8\" width=\"2\" height=\"1\" rx=\"0.5\" fill=\"currentColor\" />\n </svg>\n );\n}\n","import { SVGProps } from 'react';\n\nexport function LogoWithTextHorizonIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.97634 1.4502H9.02405C9.70389 1.4502 10.2476 1.45019 10.687 1.48609C11.1379 1.52293 11.527 1.6003 11.8849 1.78263C12.4588 2.07504 12.9254 2.54164 13.2178 3.11553C13.4001 3.47338 13.4775 3.86253 13.5143 4.31342C13.5502 4.75277 13.5502 5.29652 13.5502 5.97637V8.02403C13.5502 8.70388 13.5502 9.24763 13.5143 9.68698C13.4775 10.1379 13.4001 10.527 13.2178 10.8849C12.9254 11.4588 12.4588 11.9254 11.8849 12.2178C11.527 12.4001 11.1379 12.4775 10.687 12.5143C10.2476 12.5502 9.70387 12.5502 9.02402 12.5502H4.97636C4.29651 12.5502 3.75276 12.5502 3.31341 12.5143C2.86252 12.4775 2.47337 12.4001 2.11552 12.2178C1.54163 11.9254 1.07504 11.4588 0.782626 10.8849C0.600293 10.527 0.522922 10.1379 0.486083 9.68698C0.450187 9.24764 0.45019 8.70389 0.450195 8.02405V5.97635C0.45019 5.29651 0.450187 4.75276 0.486083 4.31342C0.522922 3.86253 0.600293 3.47338 0.782626 3.11553C1.07504 2.54164 1.54163 2.07504 2.11552 1.78263C2.47337 1.6003 2.86252 1.52293 3.31341 1.48609C3.75276 1.45019 4.2965 1.4502 4.97634 1.4502ZM3.40298 2.58243C3.02012 2.61372 2.79184 2.67259 2.61491 2.76274C2.248 2.94969 1.94968 3.248 1.76273 3.61492C1.67258 3.79185 1.61371 4.02013 1.58243 4.40299C1.55062 4.79228 1.55019 5.29106 1.55019 6.0002V8.0002C1.55019 8.70934 1.55062 9.20812 1.58243 9.59741C1.61371 9.98028 1.67258 10.2086 1.76273 10.3855C1.94968 10.7524 2.248 11.0507 2.61491 11.2377C2.79184 11.3278 3.02012 11.3867 3.40298 11.418C3.79227 11.4498 4.29105 11.4502 5.00019 11.4502H9.00019C9.70933 11.4502 10.2081 11.4498 10.5974 11.418C10.9803 11.3867 11.2086 11.3278 11.3855 11.2377C11.7524 11.0507 12.0507 10.7524 12.2377 10.3855C12.3278 10.2086 12.3867 9.98028 12.418 9.59741C12.4498 9.20812 12.4502 8.70934 12.4502 8.0002V6.0002C12.4502 5.29106 12.4498 4.79228 12.418 4.40299C12.3867 4.02013 12.3278 3.79185 12.2377 3.61492C12.0507 3.248 11.7524 2.94969 11.3855 2.76274C11.2086 2.67259 10.9803 2.61372 10.5974 2.58243C10.2081 2.55063 9.70933 2.5502 9.00019 2.5502H5.00019C4.29105 2.5502 3.79227 2.55063 3.40298 2.58243Z\"\n fill=\"currentColor\"\n />\n <rect\n x=\"6.25\"\n y=\"6.75\"\n width=\"4.5\"\n height=\"0.5\"\n rx=\"0.25\"\n stroke=\"black\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"3\" y=\"6.5\" width=\"2\" height=\"1\" rx=\"0.5\" fill=\"currentColor\" />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.1999 0.450195C4.50366 0.450195 4.7499 0.696438 4.7499 1.00019V2.75019C4.7499 3.05395 4.50366 3.30019 4.1999 3.30019C3.89614 3.30019 3.6499 3.05395 3.6499 2.75019V1.00019C3.6499 0.696438 3.89614 0.450195 4.1999 0.450195Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.8 0.450195C10.1037 0.450195 10.35 0.696438 10.35 1.00019V2.75019C10.35 3.05395 10.1037 3.30019 9.8 3.30019C9.49625 3.30019 9.25 3.05395 9.25 2.75019V1.00019C9.25 0.696438 9.49625 0.450195 9.8 0.450195Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n","import { SVGProps } from 'react';\n\nexport function LogoWithTextVerticalIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.97634 1.4502H9.02405C9.70389 1.4502 10.2476 1.45019 10.687 1.48609C11.1379 1.52293 11.527 1.6003 11.8849 1.78263C12.4588 2.07504 12.9254 2.54164 13.2178 3.11553C13.4001 3.47338 13.4775 3.86253 13.5143 4.31342C13.5502 4.75277 13.5502 5.29652 13.5502 5.97637V8.02403C13.5502 8.70388 13.5502 9.24763 13.5143 9.68698C13.4775 10.1379 13.4001 10.527 13.2178 10.8849C12.9254 11.4588 12.4588 11.9254 11.8849 12.2178C11.527 12.4001 11.1379 12.4775 10.687 12.5143C10.2476 12.5502 9.70387 12.5502 9.02402 12.5502H4.97636C4.29651 12.5502 3.75276 12.5502 3.31341 12.5143C2.86252 12.4775 2.47337 12.4001 2.11552 12.2178C1.54163 11.9254 1.07504 11.4588 0.782626 10.8849C0.600293 10.527 0.522922 10.1379 0.486083 9.68698C0.450187 9.24764 0.45019 8.70389 0.450195 8.02405V5.97635C0.45019 5.29651 0.450187 4.75276 0.486083 4.31342C0.522922 3.86253 0.600293 3.47338 0.782626 3.11553C1.07504 2.54164 1.54163 2.07504 2.11552 1.78263C2.47337 1.6003 2.86252 1.52293 3.31341 1.48609C3.75276 1.45019 4.2965 1.4502 4.97634 1.4502ZM3.40298 2.58243C3.02012 2.61372 2.79184 2.67259 2.61491 2.76274C2.248 2.94969 1.94968 3.248 1.76273 3.61492C1.67258 3.79185 1.61371 4.02013 1.58243 4.40299C1.55062 4.79228 1.55019 5.29106 1.55019 6.0002V8.0002C1.55019 8.70934 1.55062 9.20812 1.58243 9.59741C1.61371 9.98028 1.67258 10.2086 1.76273 10.3855C1.94968 10.7524 2.248 11.0507 2.61491 11.2377C2.79184 11.3278 3.02012 11.3867 3.40298 11.418C3.79227 11.4498 4.29105 11.4502 5.00019 11.4502H9.00019C9.70933 11.4502 10.2081 11.4498 10.5974 11.418C10.9803 11.3867 11.2086 11.3278 11.3855 11.2377C11.7524 11.0507 12.0507 10.7524 12.2377 10.3855C12.3278 10.2086 12.3867 9.98028 12.418 9.59741C12.4498 9.20812 12.4502 8.70934 12.4502 8.0002V6.0002C12.4502 5.29106 12.4498 4.79228 12.418 4.40299C12.3867 4.02013 12.3278 3.79185 12.2377 3.61492C12.0507 3.248 11.7524 2.94969 11.3855 2.76274C11.2086 2.67259 10.9803 2.61372 10.5974 2.58243C10.2081 2.55063 9.70933 2.5502 9.00019 2.5502H5.00019C4.29105 2.5502 3.79227 2.55063 3.40298 2.58243Z\"\n fill=\"currentColor\"\n />\n <rect\n x=\"4.25\"\n y=\"8.25\"\n width=\"5.5\"\n height=\"0.5\"\n rx=\"0.25\"\n stroke=\"black\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"6\" y=\"6\" width=\"2\" height=\"1\" rx=\"0.5\" fill=\"currentColor\" />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.1999 0.450195C4.50366 0.450195 4.7499 0.696438 4.7499 1.00019V2.75019C4.7499 3.05395 4.50366 3.30019 4.1999 3.30019C3.89614 3.30019 3.6499 3.05395 3.6499 2.75019V1.00019C3.6499 0.696438 3.89614 0.450195 4.1999 0.450195Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.8 0.450195C10.1037 0.450195 10.35 0.696438 10.35 1.00019V2.75019C10.35 3.05395 10.1037 3.30019 9.8 3.30019C9.49625 3.30019 9.25 3.05395 9.25 2.75019V1.00019C9.25 0.696438 9.49625 0.450195 9.8 0.450195Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n","import { LogoWithCoverImageIcon } from '@/editor/components/icons/logo-with-cover-image';\nimport { BlockItem } from './types';\nimport { LogoWithTextHorizonIcon } from '@/editor/components/icons/logo-with-text-horizon';\nimport { LogoWithTextVerticalIcon } from '@/editor/components/icons/logo-with-text-vertical';\n\nexport const headerLogoWithTextHorizontal: BlockItem = {\n title: 'Logo with Text (Horizontal)',\n description: 'Logo and a text horizontally',\n searchTerms: ['logo', 'text'],\n icon: <LogoWithTextHorizonIcon className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .deleteRange(range)\n .insertContent({\n type: 'columns',\n attrs: { showIfKey: null, gap: 8 },\n content: [\n {\n type: 'column',\n attrs: {\n columnId: '36de3eda-0677-47c3-a8b7-e071dec9ce30',\n width: 'auto',\n verticalAlign: 'middle',\n },\n content: [\n {\n type: 'image',\n attrs: {\n src: 'https://maily.to/brand/logo.png',\n alt: null,\n title: null,\n width: '32',\n height: '32',\n alignment: 'left',\n externalLink: null,\n isExternalLinkVariable: false,\n isSrcVariable: false,\n showIfKey: null,\n },\n },\n ],\n },\n {\n type: 'column',\n attrs: {\n columnId: '6feb593e-374a-4479-a1c7-872c60c2f4e0',\n width: 'auto',\n verticalAlign: 'bottom',\n },\n content: [\n {\n type: 'heading',\n attrs: {\n textAlign: 'right',\n level: 3,\n showIfKey: null,\n },\n content: [\n {\n type: 'text',\n marks: [{ type: 'bold' }],\n text: 'Weekly Newsletter',\n },\n ],\n },\n ],\n },\n ],\n })\n .run();\n },\n};\n\nexport const headerLogoWithTextVertical: BlockItem = {\n title: 'Logo with Text (Vertical)',\n description: 'Logo and a text vertically',\n searchTerms: ['logo', 'text'],\n icon: <LogoWithTextVerticalIcon className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .deleteRange(range)\n .insertContent([\n {\n type: 'image',\n attrs: {\n src: 'https://maily.to/brand/logo.png',\n alt: null,\n title: null,\n width: '48',\n height: '48',\n alignment: 'center',\n externalLink: null,\n isExternalLinkVariable: false,\n isSrcVariable: false,\n showIfKey: null,\n },\n },\n { type: 'spacer', attrs: { height: 8, showIfKey: null } },\n {\n type: 'heading',\n attrs: { textAlign: 'center', level: 2, showIfKey: null },\n content: [{ type: 'text', text: 'Maily' }],\n },\n ])\n .run();\n },\n};\n\nexport const headerLogoWithCoverImage: BlockItem = {\n title: 'Logo with Cover Image',\n description: 'Logo and a cover image',\n searchTerms: ['logo', 'cover', 'image'],\n icon: <LogoWithCoverImageIcon className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n const todayFormatted = new Date().toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n\n editor\n .chain()\n .deleteRange(range)\n .insertContent([\n {\n type: 'image',\n attrs: {\n src: 'https://maily.to/og-image.png',\n alt: null,\n title: null,\n width: 600,\n height: 314,\n alignment: 'center',\n externalLink: null,\n isExternalLinkVariable: false,\n isSrcVariable: false,\n showIfKey: null,\n },\n },\n {\n type: 'columns',\n attrs: { showIfKey: null, gap: 8 },\n content: [\n {\n type: 'column',\n attrs: {\n columnId: '36de3eda-0677-47c3-a8b7-e071dec9ce30',\n width: 'auto',\n verticalAlign: 'middle',\n },\n content: [\n {\n type: 'image',\n attrs: {\n src: 'https://maily.to/brand/logo.png',\n alt: null,\n title: null,\n width: '48',\n height: '48',\n alignment: 'left',\n externalLink: null,\n isExternalLinkVariable: false,\n isSrcVariable: false,\n showIfKey: null,\n },\n },\n ],\n },\n {\n type: 'column',\n attrs: {\n columnId: '6feb593e-374a-4479-a1c7-872c60c2f4e0',\n width: 'auto',\n verticalAlign: 'middle',\n },\n content: [\n {\n type: 'paragraph',\n attrs: { textAlign: 'right', showIfKey: null },\n content: [\n {\n type: 'text',\n marks: [{ type: 'bold' }],\n text: 'Weekly Newsletter',\n },\n { type: 'hardBreak' },\n {\n type: 'text',\n marks: [\n { type: 'textStyle', attrs: { color: '#929292' } },\n ],\n text: todayFormatted,\n },\n ],\n },\n ],\n },\n ],\n },\n ])\n .run();\n },\n};\n","import {\n CopyrightIcon,\n LayoutTemplateIcon,\n RectangleHorizontalIcon,\n} from 'lucide-react';\nimport { BlockItem } from './types';\n\nexport const footerCopyrightText: BlockItem = {\n title: 'Footer Copyright',\n description: 'Copyright text for the footer.',\n searchTerms: ['footer', 'copyright'],\n icon: <CopyrightIcon className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n const currentYear = new Date().getFullYear();\n\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .insertContent({\n type: 'paragraph',\n attrs: { textAlign: 'center', showIfKey: null },\n content: [\n {\n type: 'text',\n marks: [{ type: 'textStyle', attrs: { color: '#AAAAAA' } }],\n text: `Maily © ${currentYear}. All rights reserved.`,\n },\n ],\n })\n .run();\n },\n};\n\nexport const footerCommunityFeedbackCta: BlockItem = {\n title: 'Footer Community Feedback CTA',\n description: 'Community feedback CTA for the footer.',\n searchTerms: ['footer', 'community', 'feedback', 'cta'],\n icon: <RectangleHorizontalIcon className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .insertContent([\n {\n type: 'image',\n attrs: {\n src: 'https://maily.to/brand/logo.png',\n alt: null,\n title: null,\n width: '42',\n height: '42',\n alignment: 'left',\n externalLink: null,\n isExternalLinkVariable: false,\n isSrcVariable: false,\n showIfKey: null,\n },\n },\n { type: 'spacer', attrs: { height: 16, showIfKey: null } },\n {\n type: 'footer',\n attrs: { textAlign: null, 'maily-component': 'footer' },\n content: [\n {\n type: 'text',\n marks: [{ type: 'textStyle', attrs: { color: '' } }],\n text: 'Enjoyed this month’s update?',\n },\n { type: 'hardBreak' },\n {\n type: 'text',\n marks: [{ type: 'textStyle', attrs: { color: '' } }],\n text: \"And, as always, we'd love your feedback – simply reply to the email or reach out via the Discord community!\",\n },\n ],\n },\n ])\n .run();\n },\n};\n\nexport const footerCompanySignature: BlockItem = {\n title: 'Footer Company Signature',\n description: 'Company signature for the footer.',\n searchTerms: ['footer', 'company', 'signature'],\n icon: <LayoutTemplateIcon className=\"mly-h-4 mly-w-4\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .insertContent([\n { type: 'horizontalRule' },\n {\n type: 'image',\n attrs: {\n src: 'https://maily.to/brand/logo.png',\n alt: null,\n title: null,\n width: '48',\n height: '48',\n alignment: 'center',\n externalLink: null,\n isExternalLinkVariable: false,\n isSrcVariable: false,\n showIfKey: null,\n },\n },\n { type: 'spacer', attrs: { height: 16, showIfKey: null } },\n {\n type: 'heading',\n attrs: { textAlign: 'center', level: 3, showIfKey: null },\n content: [{ type: 'text', text: 'Maily' }],\n },\n { type: 'spacer', attrs: { height: 4, showIfKey: null } },\n {\n type: 'footer',\n attrs: { textAlign: 'center', 'maily-component': 'footer' },\n content: [\n {\n type: 'text',\n marks: [{ type: 'textStyle', attrs: { color: '' } }],\n text: '1234 Example Street, Example, DE 19801, United States',\n },\n { type: 'hardBreak' },\n {\n type: 'text',\n marks: [\n {\n type: 'link',\n attrs: {\n href: 'https://maily.to',\n target: '_blank',\n rel: 'noopener noreferrer nofollow',\n class: 'mly-no-underline',\n isUrlVariable: false,\n },\n },\n { type: 'textStyle', attrs: { color: '#64748b' } },\n { type: 'underline' },\n ],\n text: 'VISIT COMPANY',\n },\n {\n type: 'text',\n marks: [{ type: 'textStyle', attrs: { color: '#64748b' } }],\n text: ' | ',\n },\n {\n type: 'text',\n marks: [\n {\n type: 'link',\n attrs: {\n href: 'https://maily.to',\n target: '_blank',\n rel: 'noopener noreferrer nofollow',\n class: 'mly-no-underline',\n isUrlVariable: false,\n },\n },\n { type: 'textStyle', attrs: { color: '#64748b' } },\n { type: 'underline' },\n ],\n text: 'VISIT OUR BLOG',\n },\n {\n type: 'text',\n marks: [{ type: 'textStyle', attrs: { color: '#64748b' } }],\n text: ' | ',\n },\n {\n type: 'text',\n marks: [\n {\n type: 'link',\n attrs: {\n href: 'https://maily.to',\n target: '_blank',\n rel: 'noopener noreferrer nofollow',\n class: 'mly-no-underline',\n isUrlVariable: false,\n },\n },\n { type: 'textStyle', attrs: { color: '#64748b' } },\n { type: 'underline' },\n ],\n text: 'UNSUBSCRIBE',\n },\n ],\n },\n {\n type: 'paragraph',\n attrs: { textAlign: 'center', showIfKey: null },\n content: [\n {\n type: 'inlineImage',\n attrs: {\n height: 20,\n width: 20,\n src: 'https://cdn.usemaily.com/images/icons/linkedin.png',\n isSrcVariable: false,\n alt: null,\n title: null,\n externalLink: 'https://www.linkedin.com/in/arikchakma/',\n isExternalLinkVariable: false,\n },\n },\n { type: 'text', text: ' ' },\n {\n type: 'inlineImage',\n attrs: {\n height: 20,\n width: 20,\n src: 'https://cdn.usemaily.com/images/icons/youtube.png',\n isSrcVariable: false,\n alt: null,\n title: null,\n externalLink: 'https://www.youtube.com/arikchakma',\n isExternalLinkVariable: false,\n },\n },\n { type: 'text', text: ' ' },\n {\n type: 'inlineImage',\n attrs: {\n height: 20,\n width: 20,\n src: 'https://cdn.usemaily.com/images/icons/twitter.png',\n isSrcVariable: false,\n alt: null,\n title: null,\n externalLink: 'https://x.com/imarikchakma',\n isExternalLinkVariable: false,\n },\n },\n ],\n },\n ])\n .run();\n },\n};\n","import {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@/editor/components/popover';\nimport { Divider } from '@/editor/components/ui/divider';\nimport { TooltipProvider } from '@/editor/components/ui/tooltip';\nimport {\n DEFAULT_RENDER_VARIABLE_FUNCTION,\n RenderVariableFunction,\n useMailyContext,\n} from '@/editor/provider';\nimport { cn } from '@/editor/utils/classname';\nimport { AUTOCOMPLETE_PASSWORD_MANAGERS_OFF } from '@/editor/utils/constants';\nimport { NodeViewProps } from '@tiptap/core';\nimport { NodeViewWrapper } from '@tiptap/react';\nimport { AlertTriangle, Braces, Pencil } from 'lucide-react';\n\nexport function VariableView(props: NodeViewProps) {\n const { node, updateAttributes, editor } = props;\n const { id, fallback, required } = node.attrs;\n\n const { renderVariable = DEFAULT_RENDER_VARIABLE_FUNCTION } =\n useMailyContext();\n\n return (\n <NodeViewWrapper\n className=\"react-component mly-inline-block mly-leading-none\"\n draggable=\"false\"\n >\n <Popover\n onOpenChange={(open) => {\n editor.storage.variable.popover = open;\n }}\n >\n <PopoverTrigger>\n {renderVariable({\n variable: { name: id, required: required, valid: true },\n fallback,\n editor,\n from: 'content-variable',\n })}\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n side=\"bottom\"\n className=\"mly-w-max mly-rounded-lg !mly-p-0.5\"\n sideOffset={8}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <TooltipProvider>\n <div className=\"mly-flex mly-items-stretch mly-text-midnight-gray\">\n <label className=\"mly-relative\">\n <span className=\"mly-inline-block mly-px-2 mly-text-xs mly-text-midnight-gray\">\n Variable\n </span>\n <input\n {...AUTOCOMPLETE_PASSWORD_MANAGERS_OFF}\n value={id ?? ''}\n onChange={(e) => {\n updateAttributes({\n id: e.target.value,\n });\n }}\n placeholder=\"ie. name...\"\n className=\"mly-h-7 mly-w-36 mly-rounded-md mly-bg-soft-gray mly-px-2 mly-text-sm mly-text-midnight-gray focus:mly-bg-soft-gray focus:mly-outline-none\"\n />\n </label>\n\n <Divider className=\"mly-mx-1.5\" />\n\n <label className=\"mly-relative\">\n <span className=\"mly-inline-block mly-px-2 mly-pl-1 mly-text-xs mly-text-midnight-gray\">\n Default\n </span>\n <input\n {...AUTOCOMPLETE_PASSWORD_MANAGERS_OFF}\n value={fallback ?? ''}\n onChange={(e) => {\n updateAttributes({\n fallback: e.target.value,\n });\n }}\n placeholder=\"ie. John Doe...\"\n className=\"mly-h-7 mly-w-32 mly-rounded-md mly-bg-soft-gray mly-px-2 mly-pr-6 mly-text-sm mly-text-midnight-gray focus:mly-bg-soft-gray focus:mly-outline-none\"\n />\n <div className=\"mly-absolute mly-inset-y-0 mly-right-1 mly-flex mly-items-center\">\n <Pencil className=\"mly-h-3 mly-w-3 mly-stroke-[2.5] mly-text-midnight-gray\" />\n </div>\n </label>\n </div>\n </TooltipProvider>\n </PopoverContent>\n </Popover>\n </NodeViewWrapper>\n );\n}\n\nexport const DefaultRenderVariable: RenderVariableFunction = (props) => {\n const { variable, fallback, from } = props;\n const { name, required, valid } = variable;\n\n if (from === 'button-variable') {\n return (\n <div className=\"mly-inline-grid mly-h-7 mly-max-w-xs mly-grid-cols-[12px_1fr] mly-items-center mly-gap-1.5 mly-rounded-md mly-border mly-border-[var(--button-var-border-color)] mly-px-2 mly-font-mono mly-text-sm\">\n <Braces className=\"mly-h-3 mly-w-3 mly-shrink-0 mly-stroke-[2.5]\" />\n <span className=\"mly-min-w-0 mly-truncate mly-text-left\">{name}</span>\n </div>\n );\n }\n\n if (from === 'bubble-variable') {\n return (\n <div\n className={cn(\n 'mly-inline-grid mly-h-7 mly-min-w-28 mly-max-w-xs mly-grid-cols-[12px_1fr] mly-items-center mly-gap-1.5 mly-rounded-md mly-border mly-px-2 mly-font-mono mly-text-sm hover:mly-bg-soft-gray',\n !valid &&\n 'mly-border-rose-400 mly-bg-rose-50 mly-text-rose-600 hover:mly-bg-rose-100'\n )}\n >\n <Braces className=\"mly-h-3 mly-w-3 mly-shrink-0 mly-stroke-[2.5] mly-text-rose-600\" />\n <span className=\"mly-min-w-0 mly-truncate mly-text-left\">{name}</span>\n </div>\n );\n }\n\n return (\n <span\n tabIndex={-1}\n className=\"mly-inline-flex mly-items-center mly-gap-[var(--variable-icon-gap)] mly-rounded-full mly-border mly-px-1.5 mly-py-0.5 mly-leading-none\"\n >\n <Braces className=\"mly-size-[var(--variable-icon-size)] mly-shrink-0 mly-stroke-[2.5] mly-text-rose-600\" />\n {name}\n {required && !fallback && (\n <AlertTriangle className=\"mly-size-[var(--variable-icon-size)] mly-shrink-0 mly-stroke-[2.5]\" />\n )}\n </span>\n );\n};\n","import { Variable } from '@/editor/provider';\nimport { cn } from '@/editor/utils/classname';\nimport {\n ArrowDownIcon,\n ArrowUpIcon,\n Braces,\n CornerDownLeftIcon,\n} from 'lucide-react';\nimport {\n useImperativeHandle,\n forwardRef,\n useState,\n useEffect,\n useRef,\n} from 'react';\n\ntype VariablePopoverProps = {\n items: Variable[];\n onSelectItem: (item: Variable) => void;\n};\n\nexport type VariablePopoverRef = {\n moveUp: () => void;\n moveDown: () => void;\n select: () => void;\n};\n\nexport const VariablePopover = forwardRef<\n VariablePopoverRef,\n VariablePopoverProps\n>((props, ref) => {\n const { items, onSelectItem } = props;\n\n const [selectedIndex, setSelectedIndex] = useState(0);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n const scrollSelectedIntoView = (index: number) => {\n const container = scrollContainerRef.current;\n const selectedItem = itemRefs.current[index];\n\n if (!container || !selectedItem) {\n return;\n }\n\n const containerRect = container.getBoundingClientRect();\n const itemRect = selectedItem.getBoundingClientRect();\n\n const padding = 4;\n if (itemRect.bottom > containerRect.bottom) {\n container.scrollTop += itemRect.bottom - containerRect.bottom + padding;\n } else if (itemRect.top < containerRect.top) {\n container.scrollTop += itemRect.top - containerRect.top - padding;\n }\n };\n\n useEffect(() => {\n setSelectedIndex(0);\n if (scrollContainerRef.current) {\n scrollContainerRef.current.scrollTop = 0;\n }\n itemRefs.current = items.map(() => null);\n }, [items]);\n\n useEffect(() => {\n scrollSelectedIntoView(selectedIndex);\n }, [selectedIndex]);\n\n useImperativeHandle(ref, () => ({\n moveUp: () => {\n setSelectedIndex((selectedIndex + items.length - 1) % items.length);\n },\n moveDown: () => {\n setSelectedIndex((selectedIndex + 1) % items.length);\n },\n select: () => {\n const item = items[selectedIndex];\n if (!item) {\n return;\n }\n\n onSelectItem(item);\n },\n }));\n\n return (\n <div className=\"mly-z-50 mly-w-64 mly-rounded-lg mly-border mly-border-gray-200 mly-bg-white mly-shadow-md mly-transition-all\">\n <div className=\"mly-flex mly-items-center mly-justify-between mly-gap-2 mly-border-b mly-border-gray-200 mly-bg-soft-gray/40 mly-px-1 mly-py-1.5 mly-text-gray-500\">\n <span className=\"mly-text-xs mly-uppercase\">Variables</span>\n <VariableIcon>\n <Braces className=\"mly-size-3 mly-stroke-[2.5]\" />\n </VariableIcon>\n </div>\n\n <div\n ref={scrollContainerRef}\n className=\"mly-max-h-52 mly-overflow-y-auto mly-scrollbar-thin mly-scrollbar-track-transparent mly-scrollbar-thumb-gray-200\"\n >\n <div className=\"mly-flex mly-w-fit mly-min-w-full mly-flex-col mly-gap-0.5 mly-p-1\">\n {items?.length ? (\n items?.map((item, index: number) => (\n <button\n key={index}\n ref={(el) => (itemRefs.current[index] = el)}\n onClick={() => onSelectItem(item)}\n className={cn(\n 'mly-flex mly-w-fit mly-min-w-full mly-items-center mly-gap-2 mly-rounded-md mly-px-2 mly-py-1 mly-text-left mly-font-mono mly-text-sm mly-text-gray-900 hover:mly-bg-soft-gray',\n index === selectedIndex ? 'mly-bg-soft-gray' : 'mly-bg-white'\n )}\n >\n <Braces className=\"mly-size-3 mly-stroke-[2.5] mly-text-rose-600\" />\n {item.name}\n </button>\n ))\n ) : (\n <div className=\"mly-flex mly-h-7 mly-w-full mly-items-center mly-gap-2 mly-rounded-md mly-px-2 mly-py-1 mly-text-left mly-font-mono mly-text-[13px] mly-text-gray-900 hover:mly-bg-soft-gray\">\n No result\n </div>\n )}\n </div>\n </div>\n\n <div className=\"mly-flex mly-items-center mly-justify-between mly-gap-2 mly-border-t mly-border-gray-200 mly-px-1 mly-py-1.5 mly-text-gray-500\">\n <div className=\"mly-flex mly-items-center mly-gap-1\">\n <VariableIcon>\n <ArrowDownIcon className=\"mly-size-3 mly-stroke-[2.5]\" />\n </VariableIcon>\n <VariableIcon>\n <ArrowUpIcon className=\"mly-size-3 mly-stroke-[2.5]\" />\n </VariableIcon>\n <span className=\"mly-text-xs mly-text-gray-500\">Navigate</span>\n </div>\n <VariableIcon>\n <CornerDownLeftIcon className=\"mly-size-3 mly-stroke-[2.5]\" />\n </VariableIcon>\n </div>\n </div>\n );\n});\n\ntype VariableIconProps = {\n className?: string;\n children: React.ReactNode;\n};\n\nfunction VariableIcon(props: VariableIconProps) {\n const { className, children } = props;\n\n return (\n <div\n className={cn(\n 'mly-flex mly-size-5 mly-items-center mly-justify-center mly-rounded-md mly-border',\n className\n )}\n >\n {children}\n </div>\n );\n}\n","import { useCallback } from 'react';\nimport { useEffect } from 'react';\nimport { RefObject } from 'react';\n\nexport function useOutsideClick(\n ref: RefObject<HTMLElement>,\n callback: () => void\n) {\n const handleClick = useCallback(\n (e: MouseEvent | TouchEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n callback();\n }\n },\n [ref, callback]\n );\n\n useEffect(() => {\n document.addEventListener('mousedown', handleClick);\n document.addEventListener('touchstart', handleClick);\n return () => {\n document.removeEventListener('mousedown', handleClick);\n document.removeEventListener('touchstart', handleClick);\n };\n }, [handleClick]);\n}\n","import {\n VariablePopover,\n VariablePopoverRef,\n} from '@/editor/nodes/variable/variable-popover';\nimport { useMailyContext } from '@/editor/provider';\nimport { cn } from '@/editor/utils/classname';\nimport { AUTOCOMPLETE_PASSWORD_MANAGERS_OFF } from '@/editor/utils/constants';\nimport { useOutsideClick } from '@/editor/utils/use-outside-click';\nimport { CornerDownLeft } from 'lucide-react';\nimport { forwardRef, HTMLAttributes, useMemo, useState, useRef } from 'react';\n\ntype InputAutocompleteProps = HTMLAttributes<HTMLInputElement> & {\n value: string;\n onValueChange: (value: string) => void;\n\n autoCompleteOptions?: string[];\n onSelectOption?: (option: string) => void;\n\n onOutsideClick?: () => void;\n triggerChar?: string;\n placeholder?: string;\n};\n\nexport const InputAutocomplete = forwardRef<\n HTMLInputElement,\n InputAutocompleteProps\n>((props, ref) => {\n const {\n value = '',\n onValueChange,\n className,\n onOutsideClick,\n onSelectOption,\n autoCompleteOptions = [],\n triggerChar = '',\n ...inputProps\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<VariablePopoverRef>(null);\n\n useOutsideClick(containerRef, () => {\n onOutsideClick?.();\n });\n\n const isTriggeringVariable = value.startsWith(triggerChar);\n\n return (\n <div className={cn('mly-relative')} ref={containerRef}>\n <label className=\"mly-relative\">\n <input\n {...AUTOCOMPLETE_PASSWORD_MANAGERS_OFF}\n placeholder=\"e.g. items\"\n type=\"text\"\n {...inputProps}\n ref={ref}\n value={value}\n onChange={(e) => {\n onValueChange(e.target.value);\n }}\n className={cn(\n 'mly-h-7 mly-w-40 mly-rounded-md mly-bg-white mly-px-2 mly-pr-6 mly-text-sm mly-text-midnight-gray hover:mly-bg-soft-gray focus:mly-bg-soft-gray focus:mly-outline-none',\n className\n )}\n onKeyDown={(e) => {\n if (!popoverRef.current || !isTriggeringVariable) {\n return;\n }\n const { moveUp, moveDown, select } = popoverRef.current;\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n moveDown();\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n moveUp();\n } else if (e.key === 'Enter') {\n e.preventDefault();\n select();\n }\n }}\n spellCheck={false}\n />\n <div className=\"mly-absolute mly-inset-y-0 mly-right-1 mly-flex mly-items-center\">\n <CornerDownLeft className=\"mly-h-3 mly-w-3 mly-stroke-[2.5] mly-text-midnight-gray\" />\n </div>\n </label>\n\n {isTriggeringVariable && (\n <div className=\"mly-absolute mly-left-0 mly-top-8\">\n <VariablePopover\n items={autoCompleteOptions.map((option) => {\n return {\n name: option,\n };\n })}\n onSelectItem={(item) => {\n onSelectOption?.(item.name);\n }}\n ref={popoverRef}\n />\n </div>\n )}\n </div>\n );\n});\n\nInputAutocomplete.displayName = 'InputAutocomplete';\n","import { Variable, VariableFunctionOptions, Variables } from '../provider';\n\nexport function processVariables(\n variables: Variables,\n options: VariableFunctionOptions\n): Array<Variable> {\n const { query } = options;\n const queryLower = query.toLowerCase();\n\n let filteredVariables: Array<Variable> = [];\n if (Array.isArray(variables)) {\n filteredVariables = variables.filter((variable) =>\n variable.name.toLowerCase().startsWith(queryLower)\n );\n\n if (\n query.length > 0 &&\n !filteredVariables.some((variable) => variable.name === query)\n ) {\n filteredVariables.push({ name: query, required: true });\n }\n\n return filteredVariables;\n } else if (typeof variables === 'function') {\n return variables(options);\n } else {\n throw new Error(`Invalid variables type. Expected 'Array' or 'Function', but received '${typeof variables}'.\n\nYou can check out the documentation for more information: https://github.com/arikchakma/maily.to/blob/main/packages/core/readme.md`);\n }\n}\n","import { useId } from 'react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './tooltip';\nimport { cn } from '@/editor/utils/classname';\nimport { ChevronDownIcon, LucideIcon } from 'lucide-react';\nimport { SVGIcon } from '../icons/grid-lines';\n\ntype SelectProps = {\n label: string;\n options: {\n value: string;\n label: string;\n }[];\n\n value: string;\n onValueChange: (value: string) => void;\n\n tooltip?: string;\n className?: string;\n\n icon?: LucideIcon | SVGIcon;\n iconClassName?: string;\n};\n\nexport function Select(props: SelectProps) {\n const {\n label,\n options,\n value,\n onValueChange,\n tooltip,\n className,\n icon: Icon,\n iconClassName,\n } = props;\n\n const selectId = `mly${useId()}`;\n\n const content = (\n <div className=\"mly-relative\">\n <label htmlFor={selectId} className=\"mly-sr-only\">\n {label}\n </label>\n\n {Icon && (\n <div className=\"mly-pointer-events-none mly-absolute mly-inset-y-0 mly-left-2 mly-z-20 mly-flex mly-items-center\">\n <Icon className={cn('mly-size-3', iconClassName)} />\n </div>\n )}\n\n <select\n id={selectId}\n className={cn(\n 'mly-flex mly-min-h-7 mly-max-w-max mly-appearance-none mly-items-center mly-rounded-md mly-px-1.5 mly-py-0.5 mly-pr-7 mly-text-sm mly-text-midnight-gray mly-ring-offset-white mly-transition-colors hover:mly-bg-soft-gray focus-visible:mly-relative focus-visible:mly-z-10 focus-visible:mly-outline-none focus-visible:mly-ring-2 focus-visible:mly-ring-gray-400 focus-visible:mly-ring-offset-2 active:mly-bg-soft-gray',\n !!Icon && 'mly-pl-7',\n className\n )}\n value={value}\n onChange={(event) => onValueChange(event.target.value)}\n >\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n\n <span className=\"mly-pointer-events-none mly-absolute mly-inset-y-0 mly-right-0 mly-z-10 mly-flex mly-h-full mly-w-7 mly-items-center mly-justify-center mly-text-gray-600 peer-disabled:mly-opacity-50\">\n <ChevronDownIcon\n size={16}\n strokeWidth={2}\n aria-hidden=\"true\"\n role=\"img\"\n />\n </span>\n </div>\n );\n\n if (!tooltip) {\n return content;\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{content}</TooltipTrigger>\n <TooltipContent sideOffset={8}>{tooltip}</TooltipContent>\n </Tooltip>\n );\n}\n","import { AlignmentSwitch } from '@/editor/components/alignment-switch';\nimport { BaseButton } from '@/editor/components/base-button';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@/editor/components/popover';\nimport { ColorPicker } from '@/editor/components/ui/color-picker';\nimport { Divider } from '@/editor/components/ui/divider';\nimport { LinkInputPopover } from '@/editor/components/ui/link-input-popover';\nimport { Select } from '@/editor/components/ui/select';\nimport { TooltipProvider } from '@/editor/components/ui/tooltip';\nimport { cn } from '@/editor/utils/classname';\nimport { NodeViewProps, NodeViewWrapper } from '@tiptap/react';\nimport {\n allowedButtonBorderRadius,\n AllowedButtonVariant,\n allowedButtonVariant,\n ButtonAttributes,\n} from './button';\nimport { ShowPopover } from '@/editor/components/show-popover';\nimport { ButtonLabelInput } from './button-label-input';\nimport { DEFAULT_RENDER_VARIABLE_FUNCTION } from '@/editor/provider';\nimport { useMailyContext } from '@/editor/provider';\nimport { CSSProperties, useMemo } from 'react';\n\nexport function ButtonView(props: NodeViewProps) {\n const { node, editor, getPos, updateAttributes } = props;\n const {\n text,\n isTextVariable,\n alignment,\n variant,\n borderRadius: _radius,\n buttonColor,\n textColor,\n url: externalLink,\n showIfKey = '',\n isUrlVariable,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n } = node.attrs as ButtonAttributes;\n\n const { renderVariable = DEFAULT_RENDER_VARIABLE_FUNCTION } =\n useMailyContext();\n\n const sizes = useMemo(\n () => ({\n small: {\n paddingX: 24,\n paddingY: 6,\n },\n medium: {\n paddingX: 32,\n paddingY: 10,\n },\n large: {\n paddingX: 40,\n paddingY: 14,\n },\n }),\n []\n );\n\n const size = useMemo(() => {\n return Object.entries(sizes).find(\n ([, { paddingX, paddingY }]) =>\n paddingRight === paddingX && paddingTop === paddingY\n )?.[0] as 'small' | 'medium' | 'large';\n }, [paddingRight, paddingTop, sizes]);\n\n return (\n <NodeViewWrapper\n draggable={editor.isEditable}\n data-drag-handle={editor.isEditable}\n data-type=\"button\"\n style={{\n textAlign: alignment,\n }}\n >\n <Popover open={props.selected && editor.isEditable}>\n <PopoverTrigger asChild>\n <div>\n <button\n className={cn(\n 'mly-inline-flex mly-items-center mly-justify-center mly-rounded-md mly-text-sm mly-font-medium mly-ring-offset-white mly-transition-colors disabled:mly-pointer-events-none disabled:mly-opacity-50',\n 'mly-font-semibold mly-no-underline',\n {\n '!mly-rounded-full': _radius === 'round',\n '!mly-rounded-md': _radius === 'smooth',\n '!mly-rounded-none': _radius === 'sharp',\n }\n )}\n tabIndex={-1}\n style={\n {\n backgroundColor:\n variant === 'filled' ? buttonColor : 'transparent',\n color: textColor,\n borderWidth: 2,\n borderStyle: 'solid',\n borderColor: buttonColor,\n // decrease the border color opacity to 80%\n // so that it's not too prominent\n '--button-var-border-color': `${textColor}80`,\n\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n } as CSSProperties\n }\n onClick={(e) => {\n e.preventDefault();\n if (!editor.isEditable) {\n return;\n }\n\n const pos = getPos();\n editor.commands.setNodeSelection(pos);\n }}\n >\n {isTextVariable\n ? renderVariable({\n variable: { name: text, valid: true },\n fallback: text,\n from: 'button-variable',\n editor,\n })\n : text}\n </button>\n </div>\n </PopoverTrigger>\n <PopoverContent\n align=\"end\"\n side=\"top\"\n className=\"mly-w-max mly-rounded-lg !mly-p-0.5\"\n sideOffset={8}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <TooltipProvider>\n <div className=\"mly-flex mly-items-stretch mly-text-midnight-gray\">\n <ButtonLabelInput\n value={text}\n onValueChange={(value, isVariable) => {\n updateAttributes({\n text: value,\n isTextVariable: isVariable ?? false,\n });\n }}\n isVariable={isTextVariable}\n editor={editor}\n />\n\n <Divider />\n\n <div className=\"mly-flex mly-space-x-0.5\">\n <Select\n label=\"Border Radius\"\n value={_radius}\n options={allowedButtonBorderRadius.map((value) => ({\n value,\n label: value,\n }))}\n onValueChange={(value) => {\n updateAttributes({\n borderRadius: value,\n });\n }}\n tooltip=\"Border Radius\"\n className=\"mly-capitalize\"\n />\n\n <Select\n label=\"Style\"\n value={variant}\n options={allowedButtonVariant.map((value) => ({\n value,\n label: value,\n }))}\n onValueChange={(value) => {\n updateAttributes({\n variant: value,\n });\n }}\n tooltip=\"Style\"\n className=\"mly-capitalize\"\n />\n\n <Select\n label=\"Size\"\n value={size}\n options={[\n { value: 'small', label: 'Small' },\n { value: 'medium', label: 'Medium' },\n { value: 'large', label: 'Large' },\n ]}\n onValueChange={(value) => {\n const { paddingX, paddingY } =\n sizes[value as 'small' | 'medium' | 'large'];\n\n updateAttributes({\n paddingTop: paddingY,\n paddingRight: paddingX,\n paddingBottom: paddingY,\n paddingLeft: paddingX,\n });\n }}\n tooltip=\"Size\"\n />\n </div>\n\n <Divider />\n\n <div className=\"mly-flex mly-space-x-0.5\">\n <AlignmentSwitch\n alignment={alignment}\n onAlignmentChange={(alignment) => {\n updateAttributes({\n alignment,\n });\n }}\n />\n\n <LinkInputPopover\n defaultValue={externalLink || ''}\n onValueChange={(value, isVariable) => {\n updateAttributes({\n url: value,\n isUrlVariable: isVariable ?? false,\n });\n }}\n tooltip=\"Update External Link\"\n editor={editor}\n isVariable={isUrlVariable}\n />\n </div>\n\n <Divider />\n\n <div className=\"mly-flex mly-space-x-0.5\">\n <BackgroundColorPickerPopup\n variant={variant}\n color={buttonColor}\n onChange={(color) => {\n updateAttributes({\n buttonColor: color,\n });\n }}\n />\n\n <TextColorPickerPopup\n color={textColor}\n onChange={(color) => {\n updateAttributes({\n textColor: color,\n });\n }}\n />\n </div>\n\n <Divider />\n\n <ShowPopover\n showIfKey={showIfKey}\n onShowIfKeyValueChange={(value) => {\n updateAttributes({\n showIfKey: value,\n });\n }}\n editor={editor}\n />\n </div>\n </TooltipProvider>\n </PopoverContent>\n </Popover>\n </NodeViewWrapper>\n );\n}\n\ntype ColorPickerProps = {\n variant?: AllowedButtonVariant;\n color: string;\n onChange: (color: string) => void;\n};\n\nfunction BackgroundColorPickerPopup(props: ColorPickerProps) {\n const { color, onChange, variant } = props;\n\n return (\n <ColorPicker\n color={color}\n onColorChange={onChange}\n tooltip=\"Background Color\"\n >\n <BaseButton\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n className=\"mly-size-7\"\n >\n <div\n className=\"mly-h-4 mly-w-4 mly-shrink-0 mly-rounded-full mly-shadow\"\n style={{\n backgroundColor: variant === 'filled' ? color : 'transparent',\n borderStyle: 'solid',\n borderWidth: 2,\n borderColor: variant === 'filled' ? 'white' : color,\n }}\n />\n </BaseButton>\n </ColorPicker>\n );\n}\n\nfunction TextColorPickerPopup(props: ColorPickerProps) {\n const { color, onChange } = props;\n\n return (\n <ColorPicker color={color} onColorChange={onChange} tooltip=\"Text Color\">\n <BaseButton\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n className=\"mly-size-7\"\n >\n <div className=\"mly-flex mly-flex-col mly-items-center mly-justify-center mly-gap-[1px]\">\n <span className=\"mly-font-bolder mly-font-mono mly-text-xs mly-text-midnight-gray\">\n A\n </span>\n <div\n className=\"mly-h-[2px] mly-w-3 mly-shrink-0 mly-rounded-md mly-shadow\"\n style={{ backgroundColor: color }}\n />\n </div>\n </BaseButton>\n </ColorPicker>\n );\n}\n","import { Editor } from '@tiptap/core';\nimport { Eye, InfoIcon } from 'lucide-react';\nimport { memo, useMemo, useRef, useState } from 'react';\nimport { DEFAULT_RENDER_VARIABLE_FUNCTION, useMailyContext } from '../provider';\nimport { cn } from '../utils/classname';\nimport { processVariables } from '../utils/variable';\nimport { Popover, PopoverContent, PopoverTrigger } from './popover';\nimport { InputAutocomplete } from './ui/input-autocomplete';\nimport { Tooltip, TooltipContent, TooltipTrigger } from './ui/tooltip';\n\ntype ShowPopoverProps = {\n showIfKey?: string;\n onShowIfKeyValueChange?: (when: string) => void;\n\n editor: Editor;\n};\n\nfunction _ShowPopover(props: ShowPopoverProps) {\n const { showIfKey = '', onShowIfKeyValueChange, editor } = props;\n\n const { variables = [], renderVariable = DEFAULT_RENDER_VARIABLE_FUNCTION } =\n useMailyContext();\n const [isUpdatingKey, setIsUpdatingKey] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const autoCompleteOptions = useMemo(() => {\n return processVariables(variables, {\n query: showIfKey || '',\n from: 'bubble-variable',\n editor,\n }).map((variable) => variable.name);\n }, [variables, showIfKey, editor]);\n\n const isValidWhenKey = showIfKey || autoCompleteOptions.includes(showIfKey);\n\n return (\n <Popover\n onOpenChange={(open) => {\n if (open) {\n return;\n }\n\n setIsUpdatingKey(false);\n }}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <PopoverTrigger\n className={cn(\n 'mly-flex mly-size-7 mly-items-center mly-justify-center mly-gap-1 mly-rounded-md mly-px-1.5 mly-text-sm data-[state=open]:mly-bg-soft-gray hover:mly-bg-soft-gray focus-visible:mly-relative focus-visible:mly-z-10 focus-visible:mly-outline-none focus-visible:mly-ring-2 focus-visible:mly-ring-gray-400 focus-visible:mly-ring-offset-2',\n showIfKey &&\n 'mly-bg-rose-100 mly-text-rose-800 data-[state=open]:mly-bg-rose-100 hover:mly-bg-rose-100'\n )}\n >\n <Eye className=\"mly-h-3 mly-w-3 mly-stroke-[2.5]\" />\n </PopoverTrigger>\n </TooltipTrigger>\n <TooltipContent sideOffset={8}>Show block conditionally</TooltipContent>\n </Tooltip>\n <PopoverContent\n className=\"mly-flex mly-w-max mly-rounded-lg !mly-p-0.5\"\n side=\"top\"\n sideOffset={8}\n align=\"end\"\n onOpenAutoFocus={(e) => {\n e.preventDefault();\n }}\n onCloseAutoFocus={(e) => {\n e.preventDefault();\n }}\n >\n <div className=\"mly-flex mly-items-center mly-gap-1.5 mly-px-1.5 mly-text-sm mly-leading-none\">\n Show if\n <Tooltip>\n <TooltipTrigger>\n <InfoIcon\n className={cn('mly-size-3 mly-stroke-[2.5] mly-text-gray-500')}\n />\n </TooltipTrigger>\n <TooltipContent\n sideOffset={14}\n className=\"mly-max-w-[285px]\"\n align=\"start\"\n >\n Show the block if the selected variable is true.\n </TooltipContent>\n </Tooltip>\n </div>\n\n {!isUpdatingKey && (\n <button\n onClick={() => {\n setIsUpdatingKey(true);\n setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n }}\n >\n {renderVariable({\n variable: {\n name: showIfKey,\n valid: !!isValidWhenKey,\n },\n fallback: '',\n from: 'bubble-variable',\n editor,\n })}\n </button>\n )}\n {isUpdatingKey && (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n setIsUpdatingKey(false);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n setIsUpdatingKey(false);\n }\n }}\n >\n <InputAutocomplete\n value={showIfKey || ''}\n onValueChange={(value) => {\n onShowIfKeyValueChange?.(value);\n }}\n onOutsideClick={() => {\n setIsUpdatingKey(false);\n }}\n onSelectOption={(value) => {\n onShowIfKeyValueChange?.(value);\n setIsUpdatingKey(false);\n }}\n autoCompleteOptions={autoCompleteOptions}\n ref={inputRef}\n />\n </form>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport const ShowPopover = memo(_ShowPopover);\n","import { InputAutocomplete } from '@/editor/components/ui/input-autocomplete';\nimport {\n DEFAULT_PLACEHOLDER_URL,\n DEFAULT_RENDER_VARIABLE_FUNCTION,\n DEFAULT_VARIABLE_TRIGGER_CHAR,\n useMailyContext,\n} from '@/editor/provider';\nimport { processVariables } from '@/editor/utils/variable';\nimport { Editor } from '@tiptap/core';\nimport { BracesIcon } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useState } from 'react';\nimport { useRef } from 'react';\n\ntype ButtonLabelInputProps = {\n value: string;\n onValueChange?: (value: string, isVariable?: boolean) => void;\n isVariable?: boolean;\n\n editor: Editor;\n};\n\nexport function ButtonLabelInput(props: ButtonLabelInputProps) {\n const { value, onValueChange, isVariable, editor } = props;\n\n const linkInputRef = useRef<HTMLInputElement>(null);\n const [isEditing, setIsEditing] = useState(!isVariable);\n\n const {\n variables = [],\n variableTriggerCharacter = DEFAULT_VARIABLE_TRIGGER_CHAR,\n renderVariable = DEFAULT_RENDER_VARIABLE_FUNCTION,\n placeholderUrl = DEFAULT_PLACEHOLDER_URL,\n } = useMailyContext();\n\n const autoCompleteOptions = useMemo(() => {\n const withoutTrigger = value.replace(\n new RegExp(variableTriggerCharacter, 'g'),\n ''\n );\n\n return processVariables(variables, {\n query: withoutTrigger || '',\n from: 'bubble-variable',\n editor,\n }).map((variable) => variable.name);\n }, [variables, value, editor]);\n\n return (\n <div className=\"mly-isolate mly-flex mly-rounded-lg\">\n {!isEditing && (\n <button\n onClick={() => {\n setIsEditing(true);\n setTimeout(() => {\n linkInputRef.current?.focus();\n }, 0);\n }}\n >\n {renderVariable({\n variable: {\n name: value,\n valid: true,\n },\n fallback: '',\n from: 'bubble-variable',\n editor,\n })}\n </button>\n )}\n\n {isEditing && (\n <InputAutocomplete\n value={value}\n onValueChange={(value) => {\n onValueChange?.(value);\n }}\n autoCompleteOptions={autoCompleteOptions}\n ref={linkInputRef}\n placeholder={placeholderUrl}\n className=\"mly-h-7 mly-w-40 mly-rounded-md mly-px-2 mly-pr-6 mly-text-sm mly-text-midnight-gray hover:mly-bg-soft-gray focus:mly-bg-soft-gray focus:mly-outline-none\"\n triggerChar={variableTriggerCharacter}\n onSelectOption={(value) => {\n const isVariable = autoCompleteOptions.includes(value) ?? false;\n if (isVariable) {\n setIsEditing(false);\n }\n onValueChange?.(value, isVariable);\n }}\n />\n )}\n </div>\n );\n}\n","import TiptapImage from '@tiptap/extension-image';\nimport { ReactNodeViewRenderer } from '@tiptap/react';\nimport { DEFAULT_SECTION_SHOW_IF_KEY } from '../section/section';\nimport { LogoView } from './logo-view';\n\nexport const allowedLogoSize = ['sm', 'md', 'lg'] as const;\nexport type AllowedLogoSize = (typeof allowedLogoSize)[number];\n\nexport const allowedLogoAlignment = ['left', 'center', 'right'] as const;\nexport type AllowedLogoAlignment = (typeof allowedLogoAlignment)[number];\n\ninterface LogoOptions {\n src: string;\n alt?: string;\n title?: string;\n size?: AllowedLogoSize;\n alignment?: AllowedLogoAlignment;\n}\n\nexport interface LogoAttributes {\n src?: string;\n size?: AllowedLogoSize;\n alignment?: AllowedLogoAlignment;\n\n showIfKey: string;\n isSrcVariable?: boolean;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n logo: {\n setLogoImage: (options: LogoOptions) => ReturnType;\n setLogoAttributes: (attributes: Partial<LogoAttributes>) => ReturnType;\n };\n }\n}\n\nconst DEFAULT_ALIGNMENT: AllowedLogoAlignment = 'left';\nexport const DEFAULT_LOGO_SIZE: AllowedLogoSize = 'sm';\n\nexport const logoSizes: Record<AllowedLogoSize, string> = {\n sm: '40px',\n md: '48px',\n lg: '64px',\n};\n\nexport const LogoExtension = TiptapImage.extend({\n name: 'logo',\n priority: 1000,\n\n addAttributes() {\n return {\n ...this.parent?.(),\n 'maily-component': {\n default: 'logo',\n renderHTML: (attributes) => {\n return {\n 'data-maily-component': attributes['maily-component'],\n };\n },\n parseHTML: (element: Element) =>\n element.getAttribute('data-maily-component'),\n },\n size: {\n default: DEFAULT_LOGO_SIZE,\n parseHTML: (element) =>\n element.getAttribute('data-size') as AllowedLogoSize,\n renderHTML: (attributes) => {\n return {\n 'data-size': attributes.size,\n };\n },\n },\n alignment: {\n default: DEFAULT_ALIGNMENT,\n parseHTML: (element) =>\n element.getAttribute('data-alignment') as AllowedLogoAlignment,\n renderHTML: (attributes) => {\n return {\n 'data-alignment': attributes.alignment,\n };\n },\n },\n showIfKey: {\n default: DEFAULT_SECTION_SHOW_IF_KEY,\n parseHTML: (element) => {\n return (\n element.getAttribute('data-show-if-key') ||\n DEFAULT_SECTION_SHOW_IF_KEY\n );\n },\n renderHTML(attributes) {\n if (!attributes.showIfKey) {\n return {};\n }\n\n return {\n 'data-show-if-key': attributes.showIfKey,\n };\n },\n },\n\n // Later we will remove this attribute\n // and use the `src` attribute instead when implement\n // the URL variable feature\n isSrcVariable: {\n default: false,\n parseHTML: (element) => {\n return element.getAttribute('data-is-src-variable') === 'true';\n },\n renderHTML: (attributes) => {\n if (!attributes.isSrcVariable) {\n return {};\n }\n\n return {\n 'data-is-src-variable': 'true',\n };\n },\n },\n };\n },\n addCommands() {\n return {\n setLogoImage:\n (options) =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: options,\n });\n },\n setLogoAttributes:\n (attributes) =>\n ({ commands }) => {\n return commands.updateAttributes('logo', attributes);\n },\n };\n },\n parseHTML() {\n return [\n {\n tag: `img[data-maily-component=\"${this.name}\"]`,\n },\n ];\n },\n addNodeView() {\n return ReactNodeViewRenderer(LogoView, {\n className: 'mly-relative',\n });\n },\n});\n","import { NodeViewProps } from '@tiptap/core';\nimport { NodeViewWrapper } from '@tiptap/react';\nimport { useEffect } from 'react';\nimport { useState } from 'react';\nimport { LogoAttributes, logoSizes } from './logo';\nimport { ImageStatus, ImageStatusLabel } from '../image/image-view';\n\nexport function LogoView(props: NodeViewProps) {\n const { node, editor } = props;\n\n const [status, setStatus] = useState<ImageStatus>('idle');\n\n let {\n alignment = 'center',\n src: logoSrc,\n isSrcVariable,\n size = 'sm',\n } = (node.attrs || {}) as LogoAttributes;\n\n const hasImageSrc = !!logoSrc;\n\n // load the image using new Image() to avoid layout shift\n // then if the image is loaded, set the status to loaded\n useEffect(() => {\n if (!logoSrc) {\n return;\n }\n\n setStatus('loading');\n const img = new Image();\n img.src = logoSrc;\n img.onload = () => {\n setStatus('loaded');\n };\n img.onerror = () => {\n setStatus('error');\n };\n\n return () => {\n img.src = '';\n img.onload = null;\n img.onerror = null;\n };\n }, [logoSrc]);\n\n const logoSize = logoSizes[size];\n\n return (\n <NodeViewWrapper\n as=\"div\"\n draggable={editor.isEditable}\n data-drag-handle={editor.isEditable}\n style={{\n overflow: 'hidden',\n position: 'relative',\n // Weird! Basically tiptap/prose wraps this in a span and the line height causes an annoying buffer.\n lineHeight: '0px',\n display: 'block',\n }}\n >\n {!hasImageSrc && <ImageStatusLabel status=\"idle\" minHeight={logoSize} />}\n {hasImageSrc && isSrcVariable && (\n <ImageStatusLabel status=\"variable\" minHeight={logoSize} />\n )}\n {hasImageSrc && status === 'loading' && !isSrcVariable && (\n <ImageStatusLabel status=\"loading\" minHeight={logoSize} />\n )}\n {hasImageSrc && status === 'error' && !isSrcVariable && (\n <ImageStatusLabel status=\"error\" minHeight={logoSize} />\n )}\n\n {hasImageSrc && status === 'loaded' && !isSrcVariable && (\n <img\n src={logoSrc}\n alt=\"Logo\"\n style={{\n height: logoSize,\n width: logoSize,\n cursor: 'default',\n marginBottom: 0,\n ...({\n center: { marginLeft: 'auto', marginRight: 'auto' },\n left: { marginRight: 'auto' },\n right: { marginLeft: 'auto' },\n }[alignment] || {}),\n }}\n draggable={editor.isEditable}\n />\n )}\n </NodeViewWrapper>\n );\n}\n","import { useCallback, useLayoutEffect, useRef } from 'react';\n\nexport const useEvent = <T extends (...args: any[]) => any>(handler: T): T => {\n const handlerRef = useRef<T | null>(null);\n\n useLayoutEffect(() => {\n handlerRef.current = handler;\n }, [handler]);\n\n return useCallback((...args: Parameters<T>): ReturnType<T> => {\n if (handlerRef.current === null) {\n throw new Error('Handler is not assigned');\n }\n return handlerRef.current(...args);\n }, []) as T;\n};\n","import { cn } from '@/editor/utils/classname';\nimport { useEvent } from '@/editor/utils/use-event';\nimport { type NodeViewProps, NodeViewWrapper } from '@tiptap/react';\nimport { Ban, BracesIcon, ImageOffIcon, Loader2 } from 'lucide-react';\nimport { type CSSProperties, useEffect, useRef, useState } from 'react';\n\nconst MIN_WIDTH = 20;\nconst MAX_WIDTH = 600;\n\nexport type ImageStatus = 'idle' | 'loading' | 'loaded' | 'error';\n\nexport function ImageView(props: NodeViewProps) {\n const { node, updateAttributes, selected, editor } = props;\n\n const [status, setStatus] = useState<ImageStatus>('idle');\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const imgRef = useRef<HTMLImageElement>(null);\n\n const [resizingStyle, setResizingStyle] = useState<\n Pick<CSSProperties, 'width' | 'height'> | undefined\n >();\n\n const handleMouseDown = useEvent(\n (event: React.MouseEvent<HTMLDivElement>) => {\n const imageParent = document.querySelector(\n '.ProseMirror-selectednode'\n ) as HTMLDivElement;\n\n if (!imgRef.current || !imageParent || !selected) {\n return;\n }\n\n const imageParentWidth = Math.max(imageParent.offsetWidth, MAX_WIDTH);\n\n event.preventDefault();\n const direction = event.currentTarget.dataset.direction || '--';\n const initialXPosition = event.clientX;\n const currentWidth = imgRef.current.width;\n const currentHeight = imgRef.current.height;\n let newWidth = currentWidth;\n let newHeight = currentHeight;\n const transform = direction[1] === 'w' ? -1 : 1;\n\n const removeListeners = () => {\n window.removeEventListener('mousemove', mouseMoveHandler);\n window.removeEventListener('mouseup', removeListeners);\n updateAttributes({ width: newWidth, height: newHeight });\n setResizingStyle(undefined);\n };\n\n const mouseMoveHandler = (event: MouseEvent) => {\n newWidth = Math.max(\n currentWidth + transform * (event.clientX - initialXPosition),\n MIN_WIDTH\n );\n\n if (newWidth > imageParentWidth) {\n newWidth = imageParentWidth;\n }\n\n newHeight = (newWidth / currentWidth) * currentHeight;\n\n setResizingStyle({ width: newWidth, height: newHeight });\n // If mouse is up, remove event listeners\n if (!event.buttons) {\n return removeListeners();\n }\n };\n\n window.addEventListener('mousemove', mouseMoveHandler);\n window.addEventListener('mouseup', removeListeners);\n }\n );\n\n function dragCornerButton(direction: string) {\n return (\n <div\n role=\"button\"\n tabIndex={0}\n onMouseDown={handleMouseDown}\n data-direction={direction}\n className=\"mly-bg-rose-500\"\n style={{\n position: 'absolute',\n height: '10px',\n width: '10px',\n ...{ n: { top: 0 }, s: { bottom: 0 } }[direction[0]],\n ...{ w: { left: 0 }, e: { right: 0 } }[direction[1]],\n cursor: `${direction}-resize`,\n }}\n />\n );\n }\n\n let { alignment = 'center', width, height, src } = node.attrs || {};\n const {\n externalLink,\n isExternalLinkVariable,\n isSrcVariable,\n showIfKey,\n ...attrs\n } = node.attrs || {};\n\n const hasImageSrc = !!attrs.src;\n\n // load the image using new Image() to avoid layout shift\n // then if the image is loaded, set the status to loaded\n useEffect(() => {\n if (!src) {\n return;\n }\n\n setStatus('loading');\n const img = new Image();\n img.src = src;\n img.onload = () => {\n setStatus('loaded');\n // for some reason Apple Mail doesn't respect the width and height attributes\n // update the dimensions to ensure that the image is not stretched\n const { naturalWidth, naturalHeight } = img;\n const wrapper = wrapperRef?.current;\n if (!wrapper || width !== 'auto' || !naturalWidth) {\n return;\n }\n\n const wrapperWidth = wrapper.offsetWidth;\n const aspectRatio = naturalWidth / naturalHeight;\n const calculatedHeight = Math.min(\n wrapperWidth / aspectRatio,\n naturalHeight\n );\n\n updateAttributes({\n width: Math.min(wrapperWidth, naturalWidth),\n height: Math.min(calculatedHeight, naturalHeight),\n });\n };\n img.onerror = () => {\n setStatus('error');\n };\n\n return () => {\n img.src = '';\n img.onload = null;\n img.onerror = null;\n };\n }, [src]);\n\n return (\n <NodeViewWrapper\n as=\"div\"\n draggable={editor.isEditable}\n data-drag-handle={editor.isEditable}\n style={{\n ...(hasImageSrc && status === 'loaded'\n ? {\n width: `${width}px`,\n height: `${height}px`,\n ...resizingStyle,\n }\n : {}),\n overflow: 'hidden',\n position: 'relative',\n // Weird! Basically tiptap/prose wraps this in a span and the line height causes an annoying buffer.\n lineHeight: '0px',\n display: 'block',\n ...({\n center: { marginLeft: 'auto', marginRight: 'auto' },\n left: { marginRight: 'auto' },\n right: { marginLeft: 'auto' },\n }[alignment as string] || {}),\n }}\n ref={wrapperRef}\n >\n {!hasImageSrc && <ImageStatusLabel status=\"idle\" minHeight={height} />}\n {hasImageSrc && isSrcVariable && (\n <ImageStatusLabel status=\"variable\" minHeight={height} />\n )}\n\n {hasImageSrc && status === 'loading' && !isSrcVariable && (\n <ImageStatusLabel status=\"loading\" minHeight={height} />\n )}\n {hasImageSrc && status === 'error' && !isSrcVariable && (\n <ImageStatusLabel status=\"error\" minHeight={height} />\n )}\n\n {hasImageSrc && status === 'loaded' && !isSrcVariable && (\n <>\n <img\n {...attrs}\n ref={imgRef}\n style={{\n ...resizingStyle,\n cursor: 'default',\n marginBottom: 0,\n }}\n draggable={editor.isEditable}\n />\n\n {selected && editor.isEditable && (\n <>\n {/* Don't use a simple border as it pushes other content around. */}\n {[\n { left: 0, top: 0, height: '100%', width: '1px' },\n { right: 0, top: 0, height: '100%', width: '1px' },\n { top: 0, left: 0, width: '100%', height: '1px' },\n { bottom: 0, left: 0, width: '100%', height: '1px' },\n ].map((style, i) => (\n <div\n key={i}\n className=\"mly-bg-rose-500\"\n style={{\n position: 'absolute',\n ...style,\n }}\n />\n ))}\n {dragCornerButton('nw')}\n {dragCornerButton('ne')}\n {dragCornerButton('sw')}\n {dragCornerButton('se')}\n </>\n )}\n </>\n )}\n </NodeViewWrapper>\n );\n}\n\ntype ImageStatusLabelProps = {\n status: ImageStatus | 'variable';\n minHeight?: number | string;\n};\n\nexport function ImageStatusLabel(props: ImageStatusLabelProps) {\n const { status, minHeight } = props;\n\n return (\n <div\n className={cn(\n 'mly-flex mly-items-center mly-justify-center mly-gap-2 mly-rounded-lg mly-bg-soft-gray mly-px-4 mly-py-2 mly-text-sm mly-font-medium',\n {\n 'mly-text-gray-500 hover:mly-bg-soft-gray/60': status === 'loading',\n 'mly-text-red-500 hover:mly-bg-soft-gray/60': status === 'error',\n }\n )}\n style={{\n ...(minHeight\n ? {\n minHeight,\n }\n : {}),\n }}\n >\n {status === 'idle' && (\n <>\n <ImageOffIcon className=\"mly-size-4 mly-stroke-[2.5]\" />\n <span>No image selected</span>\n </>\n )}\n {status === 'loading' && (\n <>\n <Loader2 className=\"mly-size-4 mly-animate-spin mly-stroke-[2.5]\" />\n <span>Loading image...</span>\n </>\n )}\n {status === 'error' && (\n <>\n <Ban className=\"mly-size-4 mly-stroke-[2.5]\" />\n <span>Error loading image</span>\n </>\n )}\n {status === 'variable' && (\n <>\n <BracesIcon className=\"mly-size-4 mly-stroke-[2.5]\" />\n <span>Variable Image URL</span>\n </>\n )}\n </div>\n );\n}\n","import TiptapImage from '@tiptap/extension-image';\nimport { ReactNodeViewRenderer } from '@tiptap/react';\nimport { DEFAULT_SECTION_SHOW_IF_KEY } from '../section/section';\nimport { ImageView } from './image-view';\n\nexport const ImageExtension = TiptapImage.extend({\n addAttributes() {\n return {\n ...this.parent?.(),\n width: {\n default: 'auto',\n parseHTML: (element) => {\n const width = element.style.width;\n return width ? { width } : null;\n },\n renderHTML: ({ width }) => ({ style: `width: ${width}` }),\n },\n height: {\n default: 'auto',\n parseHTML: (element) => {\n const height = element.style.height;\n return height ? { height } : null;\n },\n renderHTML: ({ height }) => ({ style: `height: ${height}` }),\n },\n alignment: {\n default: 'center',\n renderHTML: ({ alignment }) => ({ 'data-alignment': alignment }),\n parseHTML: (element) =>\n element.getAttribute('data-alignment') || 'center',\n },\n\n externalLink: {\n default: null,\n renderHTML: ({ externalLink }) => {\n if (!externalLink) {\n return {};\n }\n return {\n 'data-external-link': externalLink,\n };\n },\n parseHTML: (element) => {\n const externalLink = element.getAttribute('data-external-link');\n return externalLink ? { externalLink } : null;\n },\n },\n\n // Later we will remove this attribute\n // and use the `externalLink` attribute instead\n // when implement the URL variable feature\n isExternalLinkVariable: {\n default: false,\n parseHTML: (element) => {\n return (\n element.getAttribute('data-is-external-link-variable') === 'true'\n );\n },\n renderHTML: (attributes) => {\n if (!attributes.isExternalLinkVariable) {\n return {};\n }\n\n return {\n 'data-is-external-link-variable': 'true',\n };\n },\n },\n\n // Later we will remove this attribute\n // and use the `src` attribute instead when implement\n // the URL variable feature\n isSrcVariable: {\n default: false,\n parseHTML: (element) => {\n return element.getAttribute('data-is-src-variable') === 'true';\n },\n renderHTML: (attributes) => {\n if (!attributes.isSrcVariable) {\n return {};\n }\n\n return {\n 'data-is-src-variable': 'true',\n };\n },\n },\n\n showIfKey: {\n default: DEFAULT_SECTION_SHOW_IF_KEY,\n parseHTML: (element) => {\n return (\n element.getAttribute('data-show-if-key') ||\n DEFAULT_SECTION_SHOW_IF_KEY\n );\n },\n renderHTML(attributes) {\n if (!attributes.showIfKey) {\n return {};\n }\n\n return {\n 'data-show-if-key': attributes.showIfKey,\n };\n },\n },\n };\n },\n addNodeView() {\n return ReactNodeViewRenderer(ImageView, {\n className: 'mly-relative',\n });\n },\n});\n","import TiptapLink from '@tiptap/extension-link';\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n customLink: {\n setIsUrlVariable: (isUrlVariable: boolean) => ReturnType;\n };\n }\n}\n\nexport const LinkExtension = TiptapLink.extend({\n addAttributes() {\n return {\n ...this.parent?.(),\n isUrlVariable: {\n default: false,\n },\n };\n },\n addCommands() {\n return {\n ...this.parent?.(),\n\n setIsUrlVariable:\n (isUrlVariable) =>\n ({ chain }) => {\n return chain().setMark('link', { isUrlVariable }).run();\n },\n };\n },\n});\n","import TiptapHeading from '@tiptap/extension-heading';\nimport { DEFAULT_SECTION_SHOW_IF_KEY } from '../section/section';\n\nexport const HeadingExtension = TiptapHeading.extend({\n addAttributes() {\n return {\n ...(this?.parent?.() || {}),\n showIfKey: {\n default: DEFAULT_SECTION_SHOW_IF_KEY,\n parseHTML: (element) => {\n return (\n element.getAttribute('data-show-if-key') ||\n DEFAULT_SECTION_SHOW_IF_KEY\n );\n },\n renderHTML(attributes) {\n if (!attributes.showIfKey) {\n return {};\n }\n\n return {\n 'data-show-if-key': attributes.showIfKey,\n };\n },\n },\n };\n },\n});\n","import TiptapParagraph from '@tiptap/extension-paragraph';\nimport { DEFAULT_SECTION_SHOW_IF_KEY } from '../section/section';\n\nexport const ParagraphExtension = TiptapParagraph.extend({\n addAttributes() {\n return {\n ...(this?.parent?.() || {}),\n showIfKey: {\n default: DEFAULT_SECTION_SHOW_IF_KEY,\n parseHTML: (element) => {\n return (\n element.getAttribute('data-show-if-key') ||\n DEFAULT_SECTION_SHOW_IF_KEY\n );\n },\n renderHTML(attributes) {\n if (!attributes.showIfKey) {\n return {};\n }\n\n return {\n 'data-show-if-key': attributes.showIfKey,\n };\n },\n },\n };\n },\n});\n","import { mergeAttributes, Node } from '@tiptap/core';\nimport { ReactNodeViewRenderer } from '@tiptap/react';\nimport { RepeatView } from './repeat-view';\nimport { updateAttributes } from '@/editor/utils/update-attribute';\nimport { DEFAULT_SECTION_SHOW_IF_KEY } from '../section/section';\n\ntype RepeatAttributes = {\n each: string;\n isUpdatingKey: boolean;\n showIfKey: string;\n};\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n repeat: {\n setRepeat: () => ReturnType;\n updateRepeat: (attrs: Partial<RepeatAttributes>) => ReturnType;\n };\n }\n}\n\nexport const RepeatExtension = Node.create({\n name: 'repeat',\n group: 'block',\n content: '(block|columns)+',\n draggable: true,\n isolating: true,\n\n addAttributes() {\n return {\n each: {\n default: 'items',\n parseHTML: (element) => {\n return element.getAttribute('each') || '';\n },\n renderHTML: (attributes) => {\n if (!attributes.each) {\n return {};\n }\n\n return {\n each: attributes.each,\n };\n },\n },\n isUpdatingKey: {\n default: false,\n },\n showIfKey: {\n default: DEFAULT_SECTION_SHOW_IF_KEY,\n parseHTML: (element) => {\n return (\n element.getAttribute('data-show-if-key') ||\n DEFAULT_SECTION_SHOW_IF_KEY\n );\n },\n renderHTML(attributes) {\n if (!attributes.showIfKey) {\n return {};\n }\n\n return {\n 'data-show-if-key': attributes.showIfKey,\n };\n },\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: `div[data-type=\"${this.name}\"]`,\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n 'div',\n mergeAttributes(HTMLAttributes, {\n 'data-type': this.name,\n }),\n 0,\n ];\n },\n\n addCommands() {\n return {\n setRepeat:\n () =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: {},\n content: [\n {\n type: 'paragraph',\n },\n ],\n });\n },\n updateRepeat: (attrs) => updateAttributes(this.name, attrs),\n };\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(RepeatView, {\n contentDOMElementTag: 'div',\n className: 'mly-relative',\n });\n },\n});\n","import { NodeViewProps, NodeViewWrapper, NodeViewContent } from '@tiptap/react';\nimport { Repeat2 } from 'lucide-react';\n\nexport function RepeatView(props: NodeViewProps) {\n const { editor, getPos } = props;\n\n return (\n <NodeViewWrapper\n data-type=\"repeat\"\n draggable={editor.isEditable}\n data-drag-handle={editor.isEditable}\n className=\"mly-relative\"\n >\n <NodeViewContent className=\"is-editable\" />\n\n <div\n role=\"button\"\n data-repeat-indicator=\"\"\n className=\"mly-absolute mly-inset-y-0 mly-right-0 mly-flex mly-translate-x-full mly-cursor-pointer mly-flex-col mly-items-center mly-gap-1 mly-opacity-60\"\n contentEditable={false}\n onClick={() => {\n editor.commands.setNodeSelection(getPos());\n }}\n >\n <Repeat2 className=\"mly-size-3 mly-stroke-[2.5] mly-text-midnight-gray\" />\n <div className=\"mly-w-[1.5px] mly-grow mly-rounded-full mly-bg-rose-300\" />\n </div>\n </NodeViewWrapper>\n );\n}\n","import { Editor, Extension } from '@tiptap/core';\nimport Suggestion, { SuggestionOptions } from '@tiptap/suggestion';\n\nexport type SlashCommandOptions = {\n suggestion: Omit<SuggestionOptions, 'editor'>;\n};\n\nexport const SlashCommandExtension = Extension.create<SlashCommandOptions>({\n name: 'slash-command',\n addOptions() {\n return {\n suggestion: {\n char: '/',\n command: ({ editor, range, props }) => {\n props.command({ editor, range });\n },\n },\n };\n },\n addProseMirrorPlugins() {\n return [\n Suggestion({\n editor: this.editor,\n ...this.options.suggestion,\n }),\n ];\n },\n});\n","import { BlockGroupItem, BlockItem } from '@/blocks/types';\nimport { cn } from '@/editor/utils/classname';\nimport { Editor } from '@tiptap/core';\nimport { ReactRenderer } from '@tiptap/react';\nimport { SuggestionOptions } from '@tiptap/suggestion';\nimport {\n forwardRef,\n Fragment,\n KeyboardEvent,\n useCallback,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport tippy, { GetReferenceClientRect } from 'tippy.js';\nimport { DEFAULT_SLASH_COMMANDS } from './default-slash-commands';\nimport { ChevronRightIcon } from 'lucide-react';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@/editor/components/ui/tooltip';\n\ntype CommandListProps = {\n items: BlockGroupItem[];\n command: (item: BlockItem) => void;\n editor: Editor;\n range: any;\n query: string;\n};\n\nconst CommandList = forwardRef(function CommandList(\n props: CommandListProps,\n ref\n) {\n const { items: groups, command, editor } = props;\n\n const [selectedGroupIndex, setSelectedGroupIndex] = useState(0);\n const [selectedCommandIndex, setSelectedCommandIndex] = useState(0);\n\n const selectItem = useCallback(\n (groupIndex: number, commandIndex: number) => {\n const item = groups[groupIndex].commands[commandIndex];\n if (!item) {\n return;\n }\n\n command(item);\n },\n [command]\n );\n\n useImperativeHandle(ref, () => ({\n onKeyDown: ({ event }: { event: KeyboardEvent }) => {\n const navigationKeys = ['ArrowUp', 'ArrowDown', 'Enter'];\n if (navigationKeys.includes(event.key)) {\n if (event.key === 'ArrowUp') {\n if (!groups.length) {\n return false;\n }\n\n let newCommandIndex = selectedCommandIndex - 1;\n let newGroupIndex = selectedGroupIndex;\n\n if (newCommandIndex < 0) {\n newGroupIndex = selectedGroupIndex - 1;\n newCommandIndex = groups[newGroupIndex]?.commands.length - 1 || 0;\n }\n\n if (newGroupIndex < 0) {\n newGroupIndex = groups.length - 1;\n newCommandIndex = groups[newGroupIndex]?.commands.length - 1 || 0;\n }\n\n setSelectedGroupIndex(newGroupIndex);\n setSelectedCommandIndex(newCommandIndex);\n return true;\n }\n if (event.key === 'ArrowDown') {\n if (!groups.length) {\n return false;\n }\n\n const commands = groups[selectedGroupIndex].commands;\n let newCommandIndex = selectedCommandIndex + 1;\n let newGroupIndex = selectedGroupIndex;\n\n if (commands.length - 1 < newCommandIndex) {\n newCommandIndex = 0;\n newGroupIndex = selectedGroupIndex + 1;\n }\n\n if (groups.length - 1 < newGroupIndex) {\n newGroupIndex = 0;\n }\n\n setSelectedGroupIndex(newGroupIndex);\n setSelectedCommandIndex(newCommandIndex);\n return true;\n }\n if (event.key === 'Enter') {\n if (!groups.length) {\n return false;\n }\n\n selectItem(selectedGroupIndex, selectedCommandIndex);\n return true;\n }\n return false;\n }\n },\n }));\n\n useEffect(() => {\n setSelectedGroupIndex(0);\n setSelectedCommandIndex(0);\n }, [groups]);\n\n const commandListContainer = useRef<HTMLDivElement>(null);\n const activeCommandRef = useRef<HTMLButtonElement>(null);\n\n useLayoutEffect(() => {\n const container = commandListContainer?.current;\n const activeCommandContainer = activeCommandRef?.current;\n if (!container || !activeCommandContainer) {\n return;\n }\n\n const { offsetTop, offsetHeight } = activeCommandContainer;\n container.scrollTop = offsetTop - offsetHeight;\n }, [\n selectedGroupIndex,\n selectedCommandIndex,\n commandListContainer,\n activeCommandRef,\n ]);\n\n return groups.length > 0 ? (\n <TooltipProvider>\n <div className=\"mly-z-50 mly-w-72 mly-overflow-hidden mly-rounded-md mly-border mly-border-gray-200 mly-bg-white mly-shadow-md mly-transition-all\">\n <div\n id=\"slash-command\"\n ref={commandListContainer}\n className=\"mly-no-scrollbar mly-h-auto mly-max-h-[330px] mly-overflow-y-auto mly-scroll-smooth\"\n >\n {groups.map((group, groupIndex) => (\n <Fragment key={groupIndex}>\n <span\n className={cn(\n 'mly-block mly-border-b mly-border-gray-200 mly-bg-soft-gray mly-p-2 mly-text-xs mly-uppercase mly-text-gray-400',\n groupIndex > 0 ? 'mly-border-t' : ''\n )}\n >\n {group.title}\n </span>\n <div className=\"mly-space-y-0.5 mly-p-1\">\n {group.commands.map((item, commandIndex) => {\n const isActive =\n groupIndex === selectedGroupIndex &&\n commandIndex === selectedCommandIndex;\n const isSubCommand = 'commands' in item;\n\n const hasRenderFunction = typeof item.render === 'function';\n const renderFunctionValue = hasRenderFunction\n ? item.render?.(editor)\n : null;\n\n let value = (\n <>\n <div className=\"mly-flex mly-h-6 mly-w-6 mly-shrink-0 mly-items-center mly-justify-center\">\n {item.icon}\n </div>\n <div className=\"mly-grow\">\n <p className=\"mly-font-medium\">{item.title}</p>\n <p className=\"mly-text-xs mly-text-gray-400\">\n {item.description}\n </p>\n </div>\n\n {isSubCommand && (\n <span className=\"mly-block mly-px-1 mly-text-gray-400\">\n <ChevronRightIcon className=\"mly-size-3.5 mly-stroke-[2.5]\" />\n </span>\n )}\n </>\n );\n\n if (\n renderFunctionValue !== null &&\n renderFunctionValue !== true\n ) {\n value = renderFunctionValue!;\n }\n\n const shouldOpenTooltip = !!item?.preview && isActive;\n\n return (\n <Tooltip open={shouldOpenTooltip} key={commandIndex}>\n <TooltipTrigger asChild>\n <button\n className={cn(\n 'mly-flex mly-w-full mly-items-center mly-gap-2 mly-rounded-md mly-px-2 mly-py-1 mly-text-left mly-text-sm mly-text-gray-900 hover:mly-bg-gray-100 hover:mly-text-gray-900',\n isActive\n ? 'mly-bg-gray-100 mly-text-gray-900'\n : 'mly-bg-transparent'\n )}\n onClick={() => selectItem(groupIndex, commandIndex)}\n type=\"button\"\n ref={isActive ? activeCommandRef : null}\n >\n {value}\n </button>\n </TooltipTrigger>\n <TooltipContent\n side=\"right\"\n sideOffset={10}\n className=\"mly-w-52 mly-rounded-lg mly-border-none mly-p-1 mly-shadow\"\n >\n {typeof item.preview === 'function' ? (\n item?.preview(editor)\n ) : (\n <>\n <figure className=\"mly-relative mly-aspect-[2.5] mly-w-full mly-overflow-hidden mly-rounded-md mly-border mly-border-gray-200\">\n <img\n src={item?.preview}\n alt={item?.title}\n className=\"mly-absolute mly-inset-0 mly-h-full mly-w-full mly-object-cover\"\n />\n </figure>\n <p className=\"mly-mt-2 mly-px-0.5 mly-text-gray-500\">\n {item.description}\n </p>\n </>\n )}\n </TooltipContent>\n </Tooltip>\n );\n })}\n </div>\n </Fragment>\n ))}\n </div>\n <div className=\"mly-border-t mly-border-gray-200 mly-px-1 mly-py-3 mly-pl-4\">\n <div className=\"mly-flex mly-items-center\">\n <p className=\"mly-text-center mly-text-xs mly-text-gray-400\">\n <kbd className=\"mly-rounded mly-border mly-border-gray-200 mly-p-1 mly-px-2 mly-font-medium\">\n ↑\n </kbd>\n <kbd className=\"mly-ml-1 mly-rounded mly-border mly-border-gray-200 mly-p-1 mly-px-2 mly-font-medium\">\n ↓\n </kbd>{' '}\n to navigate\n </p>\n <span aria-hidden=\"true\" className=\"mly-select-none mly-px-1\">\n ·\n </span>\n <p className=\"mly-text-center mly-text-xs mly-text-gray-400\">\n <kbd className=\"mly-rounded mly-border mly-border-gray-200 mly-p-1 mly-px-1.5 mly-font-medium\">\n Enter\n </kbd>{' '}\n to select\n </p>\n </div>\n </div>\n </div>\n </TooltipProvider>\n ) : null;\n});\n\nexport function getSlashCommandSuggestions(\n groups: BlockGroupItem[] = DEFAULT_SLASH_COMMANDS\n): Omit<SuggestionOptions, 'editor'> {\n return {\n items: ({ query, editor }) => {\n let newGroups = groups;\n\n let search = query.toLowerCase();\n const subCommandIds = newGroups\n .map((group) => {\n return (\n group.commands\n .filter((item) => 'commands' in item)\n // @ts-ignore\n .map((item) => item?.id.toLowerCase())\n );\n })\n .flat()\n .map((id) => `${id}.`);\n\n const shouldEnterSubCommand = subCommandIds.some((id) =>\n search.startsWith(id)\n );\n\n if (shouldEnterSubCommand) {\n const subCommandId = subCommandIds.find((id) => search.startsWith(id));\n const sanitizedSubCommandId = subCommandId?.slice(0, -1);\n\n const group = newGroups\n .find((group) => {\n return group.commands.some(\n // @ts-ignore\n (item) => item?.id?.toLowerCase() === sanitizedSubCommandId\n );\n })\n ?.commands.find(\n // @ts-ignore\n (item) => item?.id?.toLowerCase() === sanitizedSubCommandId\n );\n\n if (!group) {\n return groups;\n }\n\n search = search.replace(subCommandId || '', '');\n newGroups = [\n {\n ...group,\n commands: group?.commands || [],\n },\n ];\n }\n\n const filteredGroups = newGroups\n .map((group) => {\n return {\n ...group,\n commands: group.commands\n .filter((item) => {\n if (typeof query === 'string' && query.length > 0) {\n const show = item?.render?.(editor);\n if (show === null) {\n return false;\n }\n\n return (\n item.title.toLowerCase().includes(search) ||\n (item?.description &&\n item?.description.toLowerCase().includes(search)) ||\n (item.searchTerms &&\n item.searchTerms.some((term: string) =>\n term.includes(search)\n ))\n );\n }\n return true;\n })\n .map((item) => {\n const isSubCommandItem = 'commands' in item;\n if (isSubCommandItem) {\n // so to make it work with the enter key\n // we make it a command\n // @ts-ignore\n item = {\n ...item,\n command: (options) => {\n const { editor, range } = options;\n editor\n .chain()\n .focus()\n .insertContentAt(range, `/${item.id}.`)\n .run();\n },\n };\n }\n\n return item;\n }),\n };\n })\n .filter((group) => group.commands.length > 0);\n\n return filteredGroups;\n },\n allow: ({ editor }) => {\n const isInsideHTMLCodeBlock = editor.isActive('htmlCodeBlock');\n if (isInsideHTMLCodeBlock) {\n return false;\n }\n\n return true;\n },\n render: () => {\n let component: ReactRenderer<any>;\n let popup: InstanceType<any> | null = null;\n\n return {\n onStart: (props) => {\n component = new ReactRenderer(CommandList, {\n props,\n editor: props.editor,\n });\n\n popup = tippy('body', {\n getReferenceClientRect: props.clientRect as GetReferenceClientRect,\n appendTo: () => document.body,\n content: component.element,\n showOnCreate: true,\n interactive: true,\n trigger: 'manual',\n });\n },\n onUpdate: (props) => {\n component?.updateProps(props);\n\n popup &&\n popup[0].setProps({\n getReferenceClientRect: props.clientRect,\n });\n },\n onKeyDown: (props) => {\n if (props.event.key === 'Escape') {\n popup?.[0].hide();\n\n return true;\n }\n\n return component?.ref?.onKeyDown(props);\n },\n onExit: () => {\n if (!popup || !popup?.[0] || !component) {\n return;\n }\n\n popup?.[0].destroy();\n component?.destroy();\n },\n };\n },\n };\n}\n","import { mergeAttributes, Node } from '@tiptap/core';\nimport { Node as TNode } from '@tiptap/pm/model';\nimport { PluginKey } from '@tiptap/pm/state';\nimport { ReactNodeViewRenderer } from '@tiptap/react';\nimport Suggestion, { SuggestionOptions } from '@tiptap/suggestion';\nimport { VariableView } from './variable-view';\nimport { Variables } from '@/editor/provider';\n\nexport type VariableOptions = {\n renderLabel: (props: { options: VariableOptions; node: TNode }) => string;\n suggestion: Omit<SuggestionOptions, 'editor'>;\n variables?: Variables;\n triggerChar?: string;\n};\n\nexport type VariableStorage = {\n popover: boolean;\n};\n\nexport const VariablePluginKey = new PluginKey('variable');\n\nexport const VariableExtension = Node.create<VariableOptions, VariableStorage>({\n name: 'variable',\n group: 'inline',\n inline: true,\n selectable: true,\n atom: true,\n\n addStorage() {\n return {\n popover: false,\n };\n },\n\n addOptions() {\n return {\n variables: [],\n triggerChar: '@',\n renderLabel({ options, node }) {\n return `${node.attrs.label ?? node.attrs.id}`;\n },\n suggestion: {\n char: '@',\n pluginKey: VariablePluginKey,\n command: ({ editor, range, props }) => {\n // increase range.to by one when the next node is of type \"text\"\n // and starts with a space character\n const nodeAfter = editor.view.state.selection.$to.nodeAfter;\n const overrideSpace = nodeAfter?.text?.startsWith(' ');\n\n if (overrideSpace) {\n range.to += 1;\n }\n\n editor\n .chain()\n .focus()\n .insertContentAt(range, [\n {\n type: this.name,\n attrs: props,\n },\n {\n type: 'text',\n text: ' ',\n },\n ])\n .run();\n\n window.getSelection()?.collapseToEnd();\n },\n allow: ({ state, range }) => {\n const $from = state.doc.resolve(range.from);\n const type = state.schema.nodes[this.name];\n const allow = !!$from.parent.type.contentMatch.matchType(type);\n\n return allow;\n },\n },\n };\n },\n\n addAttributes() {\n return {\n id: {\n default: null,\n parseHTML: (element) => element.getAttribute('data-id'),\n renderHTML: (attributes) => {\n if (!attributes.id) {\n return {};\n }\n\n return {\n 'data-id': attributes.id,\n };\n },\n },\n\n label: {\n default: null,\n parseHTML: (element) => element.getAttribute('data-label'),\n renderHTML: (attributes) => {\n if (!attributes.label) {\n return {};\n }\n\n return {\n 'data-label': attributes.label,\n };\n },\n },\n\n fallback: {\n default: null,\n parseHTML: (element) => element.getAttribute('data-fallback'),\n renderHTML: (attributes) => {\n if (!attributes.fallback) {\n return {};\n }\n\n return {\n 'data-fallback': attributes.fallback,\n };\n },\n },\n\n required: {\n default: true,\n parseHTML: (element) => element.hasAttribute('data-required'),\n renderHTML: (attributes) => {\n return {\n 'data-required': attributes?.required ?? true,\n };\n },\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: `div[data-type=\"${this.name}\"]`,\n },\n ];\n },\n\n renderHTML({ node, HTMLAttributes }) {\n return [\n 'div',\n mergeAttributes({ 'data-type': this.name }, HTMLAttributes),\n this.options.renderLabel({\n options: this.options,\n node,\n }),\n ];\n },\n\n renderText({ node }) {\n return this.options.renderLabel({\n options: this.options,\n node,\n });\n },\n\n addKeyboardShortcuts() {\n return {\n Backspace: () =>\n this.editor.commands.command(({ tr, state }) => {\n let isMention = false;\n const { selection } = state;\n const { empty, anchor } = selection;\n\n if (!empty) {\n return false;\n }\n\n state.doc.nodesBetween(anchor - 1, anchor, (node, pos) => {\n if (node.type.name === this.name) {\n isMention = true;\n tr.insertText(\n this.options.suggestion.char || '',\n pos,\n pos + node.nodeSize\n );\n\n return false;\n }\n });\n\n return isMention;\n }),\n };\n },\n\n addProseMirrorPlugins() {\n return [\n Suggestion({\n editor: this.editor,\n ...this.options.suggestion,\n }),\n ];\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(VariableView, {\n className: 'mly-relative mly-inline-block',\n as: 'div',\n });\n },\n});\n","import {\n DEFAULT_VARIABLE_TRIGGER_CHAR,\n DEFAULT_VARIABLES,\n Variable as VariableType,\n Variables,\n} from '@/editor/provider';\nimport { processVariables } from '@/editor/utils/variable';\nimport { ReactRenderer } from '@tiptap/react';\nimport { SuggestionOptions } from '@tiptap/suggestion';\nimport { useRef, forwardRef, useImperativeHandle, ComponentType } from 'react';\nimport tippy, { GetReferenceClientRect } from 'tippy.js';\nimport { VariablePopover, VariablePopoverRef } from './variable-popover';\n\nexport type VariableListProps = {\n command: (params: { id: string; required: boolean }) => void;\n items: VariableType[];\n};\n\nexport const VariableList = forwardRef((props: VariableListProps, ref) => {\n const { items = [] } = props;\n\n const popoverRef = useRef<VariablePopoverRef>(null);\n\n useImperativeHandle(ref, () => ({\n onKeyDown: ({ event }: { event: KeyboardEvent }) => {\n if (!popoverRef.current) {\n return false;\n }\n\n const { moveUp, moveDown, select } = popoverRef.current || {};\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n moveUp();\n return true;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n moveDown();\n return true;\n }\n\n if (event.key === 'Enter') {\n select();\n return true;\n }\n\n return false;\n },\n }));\n\n return (\n <VariablePopover\n items={items}\n onSelectItem={(value) => {\n props.command({\n id: value.name,\n required: value.required ?? true,\n });\n }}\n ref={popoverRef}\n />\n );\n});\n\nVariableList.displayName = 'VariableList';\n\nexport function getVariableSuggestions(\n variables: Variables = DEFAULT_VARIABLES,\n char: string = DEFAULT_VARIABLE_TRIGGER_CHAR,\n variableListComponent: ComponentType<VariableListProps> = VariableList\n): Omit<SuggestionOptions, 'editor'> {\n return {\n char,\n items: ({ query, editor }) => {\n return processVariables(variables, {\n query,\n editor,\n from: 'content-variable',\n });\n },\n\n render: () => {\n let component: ReactRenderer<any>;\n let popup: InstanceType<any> | null = null;\n\n return {\n onStart: (props) => {\n component = new ReactRenderer(variableListComponent, {\n props,\n editor: props.editor,\n });\n\n if (!props.clientRect) {\n return;\n }\n\n popup = tippy('body', {\n getReferenceClientRect: props.clientRect as GetReferenceClientRect,\n appendTo: () => document.body,\n content: component.element,\n showOnCreate: true,\n interactive: true,\n trigger: 'manual',\n placement: 'bottom-start',\n });\n },\n\n onUpdate(props) {\n component.updateProps(props);\n\n if (!props.clientRect) {\n return;\n }\n\n popup?.[0]?.setProps({\n getReferenceClientRect: props.clientRect as GetReferenceClientRect,\n });\n },\n\n onKeyDown(props) {\n if (props.event.key === 'Escape') {\n popup?.[0].hide();\n return true;\n }\n\n return component.ref?.onKeyDown(props);\n },\n\n onExit() {\n if (!popup || !popup?.[0] || !component) {\n return;\n }\n\n popup?.[0].destroy();\n component.destroy();\n },\n };\n },\n };\n}\n","import Placeholder from '@tiptap/extension-placeholder';\n\nexport const PlaceholderExtension = Placeholder.configure({\n placeholder: ({ node }) => {\n if (node.type.name === 'heading') {\n return `Heading ${node.attrs.level}`;\n } else if (node.type.name === 'htmlCodeBlock') {\n return 'Type your HTML code...';\n } else if (\n ['columns', 'column', 'section', 'repeat', 'show', 'blockquote'].includes(\n node.type.name\n )\n ) {\n return '';\n }\n\n return 'Write something or / to see commands';\n },\n includeChildren: true,\n});\n"],"mappings":"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","names":["import_core","import_extension_paragraph","import_extension_heading","TiptapColor","TipTapHorizontalRule","import_core","HTMLAttributes","import_core","import_core","HTMLAttributes","HTMLAttributes","import_core","import_react","React","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","image","HTMLAttributes","import_uuid","import_core","import_core","uuid","HTMLAttributes","import_core","import_uuid","uuid","HTMLAttributes","import_core","import_react","React","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","color","import_jsx_runtime","import_lucide_react","import_react","import_react","import_lucide_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_state","import_lucide_react","import_jsx_runtime","editor","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","updateAttributes","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","import_react","import_lucide_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","_a","protocol","isVariable","import_react","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","value","isVariable","import_react","import_jsx_runtime","updateAttributes","text","alignment","HTMLAttributes","import_react","import_react","import_react","import_react","import_lucide_react","import_jsx_runtime","updateAttributes","event","import_jsx_runtime","TiptapImage","import_extension_image","import_react","TiptapImage","TiptapLink","TiptapHeading","TiptapParagraph","import_core","import_react","import_react","import_lucide_react","import_jsx_runtime","HTMLAttributes","Document","StarterKit","Underline","TextStyle","ListItem","TextAlign","Paragraph","Heading","Focus","Dropcursor","import_core","Suggestion","import_react","import_lucide_react","import_jsx_runtime","CommandList","group","_a","editor","tippy","import_core","import_state","import_react","import_suggestion","HTMLAttributes","Suggestion","import_react","import_tippy","import_jsx_runtime","tippy","Placeholder"]}
|