@daisychainapp/maily-to-core 0.1.2 → 0.1.3
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/dist/extensions/index.js +304 -155
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/index.mjs +271 -122
- package/dist/extensions/index.mjs.map +1 -1
- package/dist/index.js +63 -22
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +125 -85
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["#style-inject:#style-inject","../src/styles/index.css","../src/styles/preflight.css","../src/styles/tailwind.css","../src/editor/index.tsx","../src/editor/components/column-menu/columns-bubble-menu.tsx","../src/editor/utils/get-render-container.ts","../src/editor/utils/is-text-selected.ts","../src/editor/utils/columns.ts","../src/editor/utils/update-attribute.ts","../src/editor/nodes/columns/column.ts","../src/editor/components/column-menu/use-columns-state.tsx","../src/editor/utils/classname.ts","../src/editor/components/ui/divider.tsx","../src/editor/components/ui/tooltip.tsx","../src/editor/components/vertical-alignment-switch.tsx","../src/editor/components/base-button.tsx","../src/editor/components/bubble-menu-button.tsx","../src/editor/components/show-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/components/popover.tsx","../src/editor/utils/constants.ts","../src/editor/nodes/variable/variable-view.tsx","../src/editor/utils/variable.ts","../src/editor/nodes/variable/variable-popover.tsx","../src/editor/utils/use-outside-click.ts","../src/editor/components/ui/input-autocomplete.tsx","../src/editor/components/column-menu/columns-width-config.tsx","../src/editor/components/ui/select.tsx","../src/editor/components/column-menu/columns-bubble-menu-content.tsx","../src/editor/utils/delete-node.ts","../src/editor/utils/spacing.ts","../src/editor/components/content-menu.tsx","../src/editor/plugins/drag-handle/drag-handle.tsx","../src/editor/plugins/drag-handle/drag-handle-plugin.ts","../src/editor/components/editor-menu-bar.tsx","../src/editor/components/repeat-menu/repeat-bubble-menu.tsx","../src/editor/components/repeat-menu/use-repeat-state.ts","../src/editor/components/image-menu/image-bubble-menu.tsx","../src/editor/components/alignment-switch.tsx","../src/editor/components/ui/link-input-popover.tsx","../src/editor/components/image-menu/image-size.tsx","../src/editor/nodes/logo/logo.ts","../src/editor/nodes/section/section.ts","../src/editor/nodes/logo/logo-view.tsx","../src/editor/utils/use-event.ts","../src/editor/nodes/image/image-view.tsx","../src/editor/components/image-menu/use-image-state.tsx","../src/editor/components/section-menu/section-bubble-menu.tsx","../src/editor/components/icons/border-color.tsx","../src/editor/components/icons/margin-icon.tsx","../src/editor/components/icons/padding-icon.tsx","../src/editor/components/ui/color-picker.tsx","../src/editor/components/section-menu/use-section-state.tsx","../src/editor/components/spacer-menu/spacer-bubble-menu.tsx","../src/editor/components/spacer-menu/use-spacer-state.ts","../src/editor/nodes/columns/columns.ts","../src/editor/extensions/horizontal-rule.tsx","../src/editor/utils/is-custom-node-selected.ts","../src/editor/nodes/spacer.ts","../src/editor/extensions/link-card.ts","../src/editor/nodes/link-card.tsx","../src/editor/components/input.tsx","../src/editor/components/textarea.tsx","../src/editor/nodes/button/button.tsx","../src/editor/nodes/button/button-view.tsx","../src/editor/nodes/button/button-label-input.tsx","../src/editor/nodes/variable/variable.ts","../src/editor/nodes/image/image.ts","../src/editor/nodes/html/html.tsx","../src/editor/nodes/html/html-view.tsx","../src/editor/extensions/maily-kit.tsx","../src/editor/extensions/color.ts","../src/editor/nodes/footer.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-suggestions.tsx","../src/editor/extensions/placeholder.ts","../src/editor/nodes/inline-image/inline-image.tsx","../src/editor/components/text-menu/text-bubble-menu.tsx","../src/editor/components/text-menu/text-bubble-content.tsx","../src/editor/components/text-menu/use-text-menu-state.tsx","../src/editor/components/text-menu/turn-into-block.tsx","../src/editor/components/text-menu/use-turn-into-block-options.tsx","../src/editor/extensions/index.ts","../src/editor/components/variable-menu/variable-bubble-menu.tsx","../src/editor/utils/replace-deprecated.ts","../src/editor/components/html-menu/html-menu.tsx","../src/editor/components/html-menu/use-html-state.ts","../src/editor/components/inline-image-menu/inline-image-bubble-menu.tsx","../src/editor/components/inline-image-menu/use-inline-image-state.tsx"],"sourcesContent":["\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\":root {\\n --placeholder-color: #adb5bd;\\n --bg-color: #ffffff;\\n --variable-icon-size: 12px;\\n --variable-icon-gap: 4px;\\n --color-token-tag: #00c951;\\n --color-meta-string: #2b7fff;\\n --color-attribute: #ad46ff;\\n --color-tag: #313233;\\n --color-meta: #313233d6;\\n}\\n.mly-editor .mly-prose p:where([class~=text-sm]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-size: 16px;\\n}\\n.mly-editor .mly-prose :where(h1, h2, h3):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n margin-bottom: 12px;\\n}\\n.mly-editor .mly-prose :where(h1):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-size: 36px;\\n}\\n.mly-editor .mly-prose :where(h2):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-size: 30px;\\n}\\n.mly-editor .mly-prose :where(h3):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-size: 24px;\\n}\\n.mly-editor .mly-prose p:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-size: 15px;\\n margin-bottom: 20px;\\n}\\n.mly-editor .mly-prose :where(h1, h2, h3, hr, table) + p:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n}\\n.mly-editor .mly-prose :where(ol, ul):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n margin-bottom: 20px;\\n}\\n.mly-editor .mly-prose li:not(:last-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-bottom: 8px;\\n}\\n.mly-editor .mly-prose li > p:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin: 0;\\n}\\n.mly-editor .mly-prose :where(img, .node-logo):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n margin-bottom: 32px;\\n}\\n.mly-editor .mly-prose hr:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-block: 32px;\\n}\\n.mly-editor .mly-prose .footer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n display: block;\\n font-size: 13px;\\n margin-bottom: 20px;\\n color: rgb(100, 116, 139);\\n}\\n.mly-editor .mly-prose .spacer + *:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n}\\n.mly-editor .mly-prose p + .spacer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: -20px;\\n}\\n.mly-editor .mly-prose blockquote + .spacer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: -16px;\\n}\\n.mly-editor .mly-prose :where(h1, h2, h3) + .spacer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: -12px;\\n}\\n.mly-editor .mly-prose :where(ol, ul) + .spacer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: -20px;\\n}\\n.mly-editor .mly-prose :where(img, .node-logo) + .spacer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: -32px;\\n}\\n.mly-editor .mly-prose :where(.node-button, .node-linkCard, footer) + .spacer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: -20px;\\n}\\n.mly-editor .mly-prose :where(.node-button, .node-linkCard):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n margin-bottom: 20px;\\n}\\n.mly-editor .mly-prose .node-image:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n line-height: 0;\\n margin-top: 0;\\n margin-bottom: 32px;\\n outline: none;\\n}\\n.mly-editor .mly-prose .node-image + .spacer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: -32px;\\n}\\n.mly-editor .mly-prose code::before,\\n.mly-editor .mly-prose code::after {\\n content: none;\\n}\\n.mly-no-scrollbar::-webkit-scrollbar {\\n display: none;\\n}\\n.mly-no-scrollbar {\\n -ms-overflow-style: none;\\n scrollbar-width: none;\\n}\\n.mly-editor .react-colorful__alpha {\\n border-radius: 0;\\n}\\n.mly-editor .react-colorful__saturation,\\n.mly-editor .react-colorful__hue,\\n.mly-editor .react-colorful__alpha {\\n border-radius: 8px;\\n}\\n.mly-editor .react-colorful__hue,\\n.mly-editor .react-colorful__alpha {\\n height: 16px;\\n}\\n.mly-editor .react-colorful__pointer {\\n width: 16px;\\n height: 16px;\\n}\\n.mly-editable .ProseMirror-selectednode::after {\\n content: \\\"\\\";\\n position: absolute;\\n inset: -2px;\\n pointer-events: none;\\n border-radius: 6px;\\n background: rgba(35, 131, 226, 0.14);\\n}\\n.mly-prose {\\n strong {\\n color: currentColor;\\n }\\n}\\n.ProseMirror {\\n position: relative;\\n word-wrap: break-word;\\n white-space: pre-wrap;\\n white-space: break-spaces;\\n font-variant-ligatures: none;\\n font-feature-settings: \\\"liga\\\" 0;\\n &:focus {\\n outline: none;\\n }\\n p:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n }\\n h1 {\\n --variable-icon-size: 28px;\\n }\\n h2 {\\n --variable-icon-size: 24px;\\n }\\n h3 {\\n --variable-icon-size: 20px;\\n }\\n h1,\\n h2,\\n h3 {\\n --variable-icon-gap: 8px;\\n }\\n :where(.is-editor-empty:first-child, .is-empty):not(:where([data-type=\\\"columns\\\"], [data-type=\\\"section\\\"], ul, li, ol, ))::before {\\n content: attr(data-placeholder);\\n float: left;\\n color: var(--placeholder-color);\\n pointer-events: none;\\n height: 0;\\n }\\n .is-empty:where(.node-htmlCodeBlock):not([data-active-tab=preview])::before,\\n .is-editor-empty:first-child:where(.node-htmlCodeBlock):not([data-active-tab=preview])::before {\\n float: none !important;\\n position: absolute;\\n left: 9px;\\n top: 8px;\\n }\\n .is-empty:where(.node-htmlCodeBlock):not([data-active-tab=code])::before,\\n .is-editor-empty:first-child:where(.node-htmlCodeBlock):not([data-active-tab=code])::before {\\n content: \\\"\\\";\\n }\\n [data-type=columns] .is-empty::before,\\n [data-type=section] .is-empty::before {\\n --l-threshold: 0.66;\\n --diff: calc(var(--l-threshold) - l);\\n color: oklch(from var(--bg-color) clamp(0.05, max(min(var(--diff) * infinity, 1), 0), 0.95) c h) !important;\\n opacity: 0.6;\\n }\\n [data-type=columns] {\\n display: flex;\\n margin: 0;\\n padding: 0;\\n &.has-focus [data-type=column],\\n &:hover [data-type=column] {\\n outline: 1.5px solid #e9ecef;\\n outline-style: dashed;\\n }\\n [data-type=column].has-focus {\\n outline-style: solid;\\n }\\n }\\n [data-type=column] {\\n display: table-cell;\\n flex-basis: 0;\\n flex-grow: 1;\\n overflow: auto;\\n & > *:first-child {\\n margin-top: 0;\\n }\\n & > *:last-child {\\n margin-bottom: 0;\\n }\\n }\\n [data-type=section] {\\n margin: 0;\\n padding: 0;\\n [data-type=section-cell] {\\n padding: 0;\\n & > *:first-child {\\n margin-top: 0;\\n }\\n & > *:last-child {\\n margin-bottom: 0;\\n }\\n }\\n }\\n [data-type=repeat] {\\n [data-node-view-content] > div {\\n & > *:first-child {\\n margin-top: 0;\\n }\\n & > *:last-child {\\n margin-bottom: 0;\\n }\\n }\\n }\\n .node-repeat.has-focus [data-repeat-indicator] {\\n opacity: 1;\\n }\\n [data-type=show] {\\n [data-node-view-content] > div {\\n & > *:first-child {\\n margin-top: 0;\\n }\\n & > *:last-child {\\n margin-bottom: 0;\\n }\\n }\\n }\\n *:has(+ .ProseMirror-gapcursor) {\\n margin-bottom: 0 !important;\\n }\\n .ProseMirror-gapcursor {\\n &::after {\\n border: 1.5px solid gray;\\n width: 24px;\\n }\\n & + * {\\n margin-top: 0 !important;\\n }\\n }\\n pre {\\n code {\\n background: none;\\n color: inherit;\\n }\\n .hljs-comment,\\n .hljs-quote {\\n color: #616161;\\n }\\n .hljs-variable,\\n .hljs-template-variable,\\n .hljs-attribute,\\n .hljs-regexp,\\n .hljs-link,\\n .hljs-selector-id,\\n .hljs-selector-class {\\n color: var(--color-token-tag);\\n }\\n .hljs-tag {\\n color: var(--color-tag);\\n }\\n .hljs-name {\\n color: var(--color-token-tag);\\n }\\n .hljs-number,\\n .hljs-built_in,\\n .hljs-builtin-name,\\n .hljs-literal,\\n .hljs-type,\\n .hljs-params {\\n color: var(--color-meta-string);\\n }\\n .hljs-meta,\\n .hljs-keyword {\\n color: var(--color-meta);\\n }\\n .hljs-string,\\n .hljs-symbol,\\n .hljs-bullet {\\n color: var(--color-meta-string);\\n }\\n .hljs-title,\\n .hljs-section {\\n color: #faf594;\\n }\\n .hljs-emphasis {\\n font-style: italic;\\n }\\n .hljs-strong {\\n font-weight: 700;\\n }\\n .hljs-attr {\\n color: var(--color-attribute);\\n }\\n .hljs-selector-tag {\\n color: var(--color-meta-string);\\n }\\n }\\n}\\n.hide-number-controls {\\n &::-webkit-outer-spin-button,\\n &::-webkit-inner-spin-button {\\n -webkit-appearance: none;\\n margin: 0;\\n }\\n &[type=number] {\\n -moz-appearance: textfield;\\n }\\n}\\n.hide-scrollbars {\\n scrollbar-width: none;\\n -ms-overflow-style: none;\\n &::-webkit-scrollbar {\\n display: none;\\n }\\n}\\n\")","import styleInject from '#style-inject';styleInject(\":where(.mly-editor),\\n:where(.mly-editor) ::before,\\n:where(.mly-editor) ::after {\\n box-sizing: border-box;\\n border-width: 0;\\n border-style: solid;\\n border-color: #e5e7eb;\\n}\\n:where(.mly-editor) ::before,\\n:where(.mly-editor) ::after {\\n --tw-content: \\\"\\\";\\n}\\n:where(.mly-editor) html {\\n line-height: 1.5;\\n -webkit-text-size-adjust: 100%;\\n -moz-tab-size: 4;\\n -o-tab-size: 4;\\n tab-size: 4;\\n font-family:\\n ui-sans-serif,\\n system-ui,\\n sans-serif,\\n \\\"Apple Color Emoji\\\",\\n \\\"Segoe UI Emoji\\\",\\n \\\"Segoe UI Symbol\\\",\\n \\\"Noto Color Emoji\\\";\\n font-feature-settings: normal;\\n font-variation-settings: normal;\\n}\\n:where(.mly-editor) body {\\n margin: 0;\\n line-height: inherit;\\n}\\n:where(.mly-editor) hr {\\n height: 0;\\n color: inherit;\\n border-top-width: 1px;\\n}\\n:where(.mly-editor) abbr:where([title]) {\\n -webkit-text-decoration: underline dotted;\\n text-decoration: underline dotted;\\n}\\n:where(.mly-editor) h1,\\n:where(.mly-editor) h2,\\n:where(.mly-editor) h3,\\n:where(.mly-editor) h4,\\n:where(.mly-editor) h5,\\n:where(.mly-editor) h6 {\\n font-size: inherit;\\n font-weight: inherit;\\n}\\n:where(.mly-editor) a {\\n color: inherit;\\n text-decoration: inherit;\\n}\\n:where(.mly-editor) b,\\n:where(.mly-editor) strong {\\n font-weight: bolder;\\n}\\n:where(.mly-editor) code,\\n:where(.mly-editor) kbd,\\n:where(.mly-editor) samp,\\n:where(.mly-editor) pre {\\n font-family:\\n ui-monospace,\\n SFMono-Regular,\\n Menlo,\\n Monaco,\\n Consolas,\\n \\\"Liberation Mono\\\",\\n \\\"Courier New\\\",\\n monospace;\\n font-size: 1em;\\n}\\n:where(.mly-editor) small {\\n font-size: 80%;\\n}\\n:where(.mly-editor) sub,\\n:where(.mly-editor) sup {\\n font-size: 75%;\\n line-height: 0;\\n position: relative;\\n vertical-align: baseline;\\n}\\n:where(.mly-editor) sub {\\n bottom: -0.25em;\\n}\\n:where(.mly-editor) sup {\\n top: -0.5em;\\n}\\n:where(.mly-editor) table {\\n text-indent: 0;\\n border-color: inherit;\\n border-collapse: collapse;\\n}\\n:where(.mly-editor) button,\\n:where(.mly-editor) input,\\n:where(.mly-editor) optgroup,\\n:where(.mly-editor) select,\\n:where(.mly-editor) textarea {\\n font-family: inherit;\\n font-feature-settings: inherit;\\n font-variation-settings: inherit;\\n font-size: 100%;\\n font-weight: inherit;\\n line-height: inherit;\\n color: inherit;\\n margin: 0;\\n padding: 0;\\n}\\n:where(.mly-editor) button,\\n:where(.mly-editor) select {\\n text-transform: none;\\n}\\n:where(.mly-editor) button,\\n:where(.mly-editor) [type=button],\\n:where(.mly-editor) [type=reset],\\n:where(.mly-editor) [type=submit] {\\n -webkit-appearance: button;\\n background-image: none;\\n}\\n:where(.mly-editor) :-moz-focusring {\\n outline: auto;\\n}\\n:where(.mly-editor) :-moz-ui-invalid {\\n box-shadow: none;\\n}\\n:where(.mly-editor) progress {\\n vertical-align: baseline;\\n}\\n:where(.mly-editor) ::-webkit-inner-spin-button,\\n:where(.mly-editor) ::-webkit-outer-spin-button {\\n height: auto;\\n}\\n:where(.mly-editor) [type=search] {\\n -webkit-appearance: textfield;\\n outline-offset: -2px;\\n}\\n:where(.mly-editor) ::-webkit-search-decoration {\\n -webkit-appearance: none;\\n}\\n:where(.mly-editor) ::-webkit-file-upload-button {\\n -webkit-appearance: button;\\n font: inherit;\\n}\\n:where(.mly-editor) summary {\\n display: list-item;\\n}\\n:where(.mly-editor) blockquote,\\n:where(.mly-editor) dl,\\n:where(.mly-editor) dd,\\n:where(.mly-editor) h1,\\n:where(.mly-editor) h2,\\n:where(.mly-editor) h3,\\n:where(.mly-editor) h4,\\n:where(.mly-editor) h5,\\n:where(.mly-editor) h6,\\n:where(.mly-editor) hr,\\n:where(.mly-editor) figure,\\n:where(.mly-editor) p,\\n:where(.mly-editor) pre {\\n margin: 0;\\n}\\n:where(.mly-editor) fieldset {\\n margin: 0;\\n padding: 0;\\n}\\n:where(.mly-editor) legend {\\n padding: 0;\\n}\\n:where(.mly-editor) ol,\\n:where(.mly-editor) ul,\\n:where(.mly-editor) menu {\\n list-style: none;\\n margin: 0;\\n padding: 0;\\n}\\n:where(.mly-editor) dialog {\\n padding: 0;\\n}\\n:where(.mly-editor) textarea {\\n resize: vertical;\\n}\\n:where(.mly-editor) input::-moz-placeholder,\\n:where(.mly-editor) textarea::-moz-placeholder {\\n opacity: 1;\\n color: #9ca3af;\\n}\\n:where(.mly-editor) input::placeholder,\\n:where(.mly-editor) textarea::placeholder {\\n opacity: 1;\\n color: #9ca3af;\\n}\\n:where(.mly-editor) button,\\n:where(.mly-editor) [role=button] {\\n cursor: pointer;\\n}\\n:where(.mly-editor) :disabled {\\n cursor: default;\\n}\\n:where(.mly-editor) img,\\n:where(.mly-editor) svg,\\n:where(.mly-editor) video,\\n:where(.mly-editor) canvas,\\n:where(.mly-editor) audio,\\n:where(.mly-editor) iframe,\\n:where(.mly-editor) embed,\\n:where(.mly-editor) object {\\n display: block;\\n vertical-align: middle;\\n}\\n:where(.mly-editor) img,\\n:where(.mly-editor) video {\\n max-width: 100%;\\n height: auto;\\n}\\n:where(.mly-editor) [hidden] {\\n display: none;\\n}\\n\")","import styleInject from '#style-inject';styleInject(\"*,\\n::before,\\n::after {\\n --tw-border-spacing-x: 0;\\n --tw-border-spacing-y: 0;\\n --tw-translate-x: 0;\\n --tw-translate-y: 0;\\n --tw-rotate: 0;\\n --tw-skew-x: 0;\\n --tw-skew-y: 0;\\n --tw-scale-x: 1;\\n --tw-scale-y: 1;\\n --tw-pan-x: ;\\n --tw-pan-y: ;\\n --tw-pinch-zoom: ;\\n --tw-scroll-snap-strictness: proximity;\\n --tw-gradient-from-position: ;\\n --tw-gradient-via-position: ;\\n --tw-gradient-to-position: ;\\n --tw-ordinal: ;\\n --tw-slashed-zero: ;\\n --tw-numeric-figure: ;\\n --tw-numeric-spacing: ;\\n --tw-numeric-fraction: ;\\n --tw-ring-inset: ;\\n --tw-ring-offset-width: 0px;\\n --tw-ring-offset-color: #fff;\\n --tw-ring-color: rgb(59 130 246 / 0.5);\\n --tw-ring-offset-shadow: 0 0 #0000;\\n --tw-ring-shadow: 0 0 #0000;\\n --tw-shadow: 0 0 #0000;\\n --tw-shadow-colored: 0 0 #0000;\\n --tw-blur: ;\\n --tw-brightness: ;\\n --tw-contrast: ;\\n --tw-grayscale: ;\\n --tw-hue-rotate: ;\\n --tw-invert: ;\\n --tw-saturate: ;\\n --tw-sepia: ;\\n --tw-drop-shadow: ;\\n --tw-backdrop-blur: ;\\n --tw-backdrop-brightness: ;\\n --tw-backdrop-contrast: ;\\n --tw-backdrop-grayscale: ;\\n --tw-backdrop-hue-rotate: ;\\n --tw-backdrop-invert: ;\\n --tw-backdrop-opacity: ;\\n --tw-backdrop-saturate: ;\\n --tw-backdrop-sepia: ;\\n --tw-contain-size: ;\\n --tw-contain-layout: ;\\n --tw-contain-paint: ;\\n --tw-contain-style: ;\\n}\\n::backdrop {\\n --tw-border-spacing-x: 0;\\n --tw-border-spacing-y: 0;\\n --tw-translate-x: 0;\\n --tw-translate-y: 0;\\n --tw-rotate: 0;\\n --tw-skew-x: 0;\\n --tw-skew-y: 0;\\n --tw-scale-x: 1;\\n --tw-scale-y: 1;\\n --tw-pan-x: ;\\n --tw-pan-y: ;\\n --tw-pinch-zoom: ;\\n --tw-scroll-snap-strictness: proximity;\\n --tw-gradient-from-position: ;\\n --tw-gradient-via-position: ;\\n --tw-gradient-to-position: ;\\n --tw-ordinal: ;\\n --tw-slashed-zero: ;\\n --tw-numeric-figure: ;\\n --tw-numeric-spacing: ;\\n --tw-numeric-fraction: ;\\n --tw-ring-inset: ;\\n --tw-ring-offset-width: 0px;\\n --tw-ring-offset-color: #fff;\\n --tw-ring-color: rgb(59 130 246 / 0.5);\\n --tw-ring-offset-shadow: 0 0 #0000;\\n --tw-ring-shadow: 0 0 #0000;\\n --tw-shadow: 0 0 #0000;\\n --tw-shadow-colored: 0 0 #0000;\\n --tw-blur: ;\\n --tw-brightness: ;\\n --tw-contrast: ;\\n --tw-grayscale: ;\\n --tw-hue-rotate: ;\\n --tw-invert: ;\\n --tw-saturate: ;\\n --tw-sepia: ;\\n --tw-drop-shadow: ;\\n --tw-backdrop-blur: ;\\n --tw-backdrop-brightness: ;\\n --tw-backdrop-contrast: ;\\n --tw-backdrop-grayscale: ;\\n --tw-backdrop-hue-rotate: ;\\n --tw-backdrop-invert: ;\\n --tw-backdrop-opacity: ;\\n --tw-backdrop-saturate: ;\\n --tw-backdrop-sepia: ;\\n --tw-contain-size: ;\\n --tw-contain-layout: ;\\n --tw-contain-paint: ;\\n --tw-contain-style: ;\\n}\\n* {\\n scrollbar-color: initial;\\n scrollbar-width: initial;\\n}\\n.mly-prose {\\n color: var(--tw-prose-body);\\n max-width: 65ch;\\n}\\n.mly-prose :where(p):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 1.25em;\\n margin-bottom: 1.25em;\\n}\\n.mly-prose :where([class~=lead]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-lead);\\n font-size: 1.25em;\\n line-height: 1.6;\\n margin-top: 1.2em;\\n margin-bottom: 1.2em;\\n}\\n.mly-prose :where(a):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-links);\\n text-decoration: underline;\\n font-weight: 500;\\n}\\n.mly-prose :where(strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-bold);\\n font-weight: 600;\\n}\\n.mly-prose :where(a strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(blockquote strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(thead th strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(ol):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: decimal;\\n margin-top: 1.25em;\\n margin-bottom: 1.25em;\\n padding-inline-start: 1.625em;\\n}\\n.mly-prose :where(ol[type=A]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: upper-alpha;\\n}\\n.mly-prose :where(ol[type=a]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: lower-alpha;\\n}\\n.mly-prose :where(ol[type=A s]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: upper-alpha;\\n}\\n.mly-prose :where(ol[type=a s]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: lower-alpha;\\n}\\n.mly-prose :where(ol[type=I]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: upper-roman;\\n}\\n.mly-prose :where(ol[type=i]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: lower-roman;\\n}\\n.mly-prose :where(ol[type=I s]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: upper-roman;\\n}\\n.mly-prose :where(ol[type=i s]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: lower-roman;\\n}\\n.mly-prose :where(ol[type=\\\"1\\\"]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: decimal;\\n}\\n.mly-prose :where(ul):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: disc;\\n margin-top: 1.25em;\\n margin-bottom: 1.25em;\\n padding-inline-start: 1.625em;\\n}\\n.mly-prose :where(ol > li):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::marker {\\n font-weight: 400;\\n color: var(--tw-prose-counters);\\n}\\n.mly-prose :where(ul > li):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::marker {\\n color: var(--tw-prose-bullets);\\n}\\n.mly-prose :where(dt):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-headings);\\n font-weight: 600;\\n margin-top: 1.25em;\\n}\\n.mly-prose :where(hr):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n border-color: var(--tw-prose-hr);\\n border-top-width: 1px;\\n margin-top: 3em;\\n margin-bottom: 3em;\\n}\\n.mly-prose :where(blockquote):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-weight: 500;\\n font-style: italic;\\n color: var(--tw-prose-quotes);\\n border-inline-start-width: 0.25rem;\\n border-inline-start-color: var(--tw-prose-quote-borders);\\n quotes: \\\"\\\\201c\\\"\\\"\\\\201d\\\"\\\"\\\\2018\\\"\\\"\\\\2019\\\";\\n margin-top: 1.6em;\\n margin-bottom: 1.6em;\\n padding-inline-start: 1em;\\n}\\n.mly-prose :where(blockquote p:first-of-type):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::before {\\n content: open-quote;\\n}\\n.mly-prose :where(blockquote p:last-of-type):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::after {\\n content: close-quote;\\n}\\n.mly-prose :where(h1):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-headings);\\n font-weight: 800;\\n font-size: 2.25em;\\n margin-top: 0;\\n margin-bottom: 0.8888889em;\\n line-height: 1.1111111;\\n}\\n.mly-prose :where(h1 strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-weight: 900;\\n color: inherit;\\n}\\n.mly-prose :where(h2):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-headings);\\n font-weight: 700;\\n font-size: 1.5em;\\n margin-top: 2em;\\n margin-bottom: 1em;\\n line-height: 1.3333333;\\n}\\n.mly-prose :where(h2 strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-weight: 800;\\n color: inherit;\\n}\\n.mly-prose :where(h3):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-headings);\\n font-weight: 600;\\n font-size: 1.25em;\\n margin-top: 1.6em;\\n margin-bottom: 0.6em;\\n line-height: 1.6;\\n}\\n.mly-prose :where(h3 strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-weight: 700;\\n color: inherit;\\n}\\n.mly-prose :where(h4):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-headings);\\n font-weight: 600;\\n margin-top: 1.5em;\\n margin-bottom: 0.5em;\\n line-height: 1.5;\\n}\\n.mly-prose :where(h4 strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-weight: 700;\\n color: inherit;\\n}\\n.mly-prose :where(img):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 2em;\\n margin-bottom: 2em;\\n}\\n.mly-prose :where(picture):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n display: block;\\n margin-top: 2em;\\n margin-bottom: 2em;\\n}\\n.mly-prose :where(video):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 2em;\\n margin-bottom: 2em;\\n}\\n.mly-prose :where(kbd):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-weight: 500;\\n font-family: inherit;\\n color: var(--tw-prose-kbd);\\n box-shadow: 0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%), 0 3px 0 rgb(var(--tw-prose-kbd-shadows) / 10%);\\n font-size: 0.875em;\\n border-radius: 0.3125rem;\\n padding-top: 0.1875em;\\n padding-inline-end: 0.375em;\\n padding-bottom: 0.1875em;\\n padding-inline-start: 0.375em;\\n}\\n.mly-prose :where(code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-code);\\n font-weight: 600;\\n font-size: 0.875em;\\n}\\n.mly-prose :where(code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::before {\\n content: \\\"`\\\";\\n}\\n.mly-prose :where(code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::after {\\n content: \\\"`\\\";\\n}\\n.mly-prose :where(a code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(h1 code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(h2 code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n font-size: 0.875em;\\n}\\n.mly-prose :where(h3 code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n font-size: 0.9em;\\n}\\n.mly-prose :where(h4 code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(blockquote code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(thead th code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(pre):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-pre-code);\\n background-color: var(--tw-prose-pre-bg);\\n overflow-x: auto;\\n font-weight: 400;\\n font-size: 0.875em;\\n line-height: 1.7142857;\\n margin-top: 1.7142857em;\\n margin-bottom: 1.7142857em;\\n border-radius: 0.375rem;\\n padding-top: 0.8571429em;\\n padding-inline-end: 1.1428571em;\\n padding-bottom: 0.8571429em;\\n padding-inline-start: 1.1428571em;\\n}\\n.mly-prose :where(pre code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n background-color: transparent;\\n border-width: 0;\\n border-radius: 0;\\n padding: 0;\\n font-weight: inherit;\\n color: inherit;\\n font-size: inherit;\\n font-family: inherit;\\n line-height: inherit;\\n}\\n.mly-prose :where(pre code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::before {\\n content: none;\\n}\\n.mly-prose :where(pre code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::after {\\n content: none;\\n}\\n.mly-prose :where(table):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n width: 100%;\\n table-layout: auto;\\n margin-top: 2em;\\n margin-bottom: 2em;\\n font-size: 0.875em;\\n line-height: 1.7142857;\\n}\\n.mly-prose :where(thead):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n border-bottom-width: 1px;\\n border-bottom-color: var(--tw-prose-th-borders);\\n}\\n.mly-prose :where(thead th):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-headings);\\n font-weight: 600;\\n vertical-align: bottom;\\n padding-inline-end: 0.5714286em;\\n padding-bottom: 0.5714286em;\\n padding-inline-start: 0.5714286em;\\n}\\n.mly-prose :where(tbody tr):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n border-bottom-width: 1px;\\n border-bottom-color: var(--tw-prose-td-borders);\\n}\\n.mly-prose :where(tbody tr:last-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n border-bottom-width: 0;\\n}\\n.mly-prose :where(tbody td):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n vertical-align: baseline;\\n}\\n.mly-prose :where(tfoot):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n border-top-width: 1px;\\n border-top-color: var(--tw-prose-th-borders);\\n}\\n.mly-prose :where(tfoot td):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n vertical-align: top;\\n}\\n.mly-prose :where(th, td):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n text-align: start;\\n}\\n.mly-prose :where(figure > *):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n.mly-prose :where(figcaption):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-captions);\\n font-size: 0.875em;\\n line-height: 1.4285714;\\n margin-top: 0.8571429em;\\n}\\n.mly-prose {\\n --tw-prose-body: #374151;\\n --tw-prose-headings: #111827;\\n --tw-prose-lead: #4b5563;\\n --tw-prose-links: #111827;\\n --tw-prose-bold: #111827;\\n --tw-prose-counters: #6b7280;\\n --tw-prose-bullets: #d1d5db;\\n --tw-prose-hr: #e5e7eb;\\n --tw-prose-quotes: #111827;\\n --tw-prose-quote-borders: #e5e7eb;\\n --tw-prose-captions: #6b7280;\\n --tw-prose-kbd: #111827;\\n --tw-prose-kbd-shadows: 17 24 39;\\n --tw-prose-code: #111827;\\n --tw-prose-pre-code: #e5e7eb;\\n --tw-prose-pre-bg: #1f2937;\\n --tw-prose-th-borders: #d1d5db;\\n --tw-prose-td-borders: #e5e7eb;\\n --tw-prose-invert-body: #d1d5db;\\n --tw-prose-invert-headings: #fff;\\n --tw-prose-invert-lead: #9ca3af;\\n --tw-prose-invert-links: #fff;\\n --tw-prose-invert-bold: #fff;\\n --tw-prose-invert-counters: #9ca3af;\\n --tw-prose-invert-bullets: #4b5563;\\n --tw-prose-invert-hr: #374151;\\n --tw-prose-invert-quotes: #f3f4f6;\\n --tw-prose-invert-quote-borders: #374151;\\n --tw-prose-invert-captions: #9ca3af;\\n --tw-prose-invert-kbd: #fff;\\n --tw-prose-invert-kbd-shadows: 255 255 255;\\n --tw-prose-invert-code: #fff;\\n --tw-prose-invert-pre-code: #d1d5db;\\n --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);\\n --tw-prose-invert-th-borders: #4b5563;\\n --tw-prose-invert-td-borders: #374151;\\n font-size: 1rem;\\n line-height: 1.75;\\n}\\n.mly-prose :where(picture > img):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n.mly-prose :where(li):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0.5em;\\n margin-bottom: 0.5em;\\n}\\n.mly-prose :where(ol > li):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n padding-inline-start: 0.375em;\\n}\\n.mly-prose :where(ul > li):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n padding-inline-start: 0.375em;\\n}\\n.mly-prose :where(.mly-prose > ul > li p):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0.75em;\\n margin-bottom: 0.75em;\\n}\\n.mly-prose :where(.mly-prose > ul > li > p:first-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 1.25em;\\n}\\n.mly-prose :where(.mly-prose > ul > li > p:last-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-bottom: 1.25em;\\n}\\n.mly-prose :where(.mly-prose > ol > li > p:first-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 1.25em;\\n}\\n.mly-prose :where(.mly-prose > ol > li > p:last-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-bottom: 1.25em;\\n}\\n.mly-prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0.75em;\\n margin-bottom: 0.75em;\\n}\\n.mly-prose :where(dl):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 1.25em;\\n margin-bottom: 1.25em;\\n}\\n.mly-prose :where(dd):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0.5em;\\n padding-inline-start: 1.625em;\\n}\\n.mly-prose :where(hr + *):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n}\\n.mly-prose :where(h2 + *):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n}\\n.mly-prose :where(h3 + *):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n}\\n.mly-prose :where(h4 + *):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n}\\n.mly-prose :where(thead th:first-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n padding-inline-start: 0;\\n}\\n.mly-prose :where(thead th:last-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n padding-inline-end: 0;\\n}\\n.mly-prose :where(tbody td, tfoot td):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n padding-top: 0.5714286em;\\n padding-inline-end: 0.5714286em;\\n padding-bottom: 0.5714286em;\\n padding-inline-start: 0.5714286em;\\n}\\n.mly-prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n padding-inline-start: 0;\\n}\\n.mly-prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n padding-inline-end: 0;\\n}\\n.mly-prose :where(figure):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 2em;\\n margin-bottom: 2em;\\n}\\n.mly-prose :where(.mly-prose > :first-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n}\\n.mly-prose :where(.mly-prose > :last-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-bottom: 0;\\n}\\n.mly-sr-only {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip: rect(0, 0, 0, 0);\\n white-space: nowrap;\\n border-width: 0;\\n}\\n.mly-pointer-events-none {\\n pointer-events: none;\\n}\\n.mly-visible {\\n visibility: visible;\\n}\\n.mly-absolute {\\n position: absolute;\\n}\\n.mly-relative {\\n position: relative;\\n}\\n.mly-inset-0 {\\n inset: 0px;\\n}\\n.mly-inset-y-0 {\\n top: 0px;\\n bottom: 0px;\\n}\\n.mly-left-0 {\\n left: 0px;\\n}\\n.mly-left-1\\\\.5 {\\n left: 0.375rem;\\n}\\n.mly-left-2 {\\n left: 0.5rem;\\n}\\n.mly-right-0 {\\n right: 0px;\\n}\\n.mly-right-1 {\\n right: 0.25rem;\\n}\\n.mly-top-0 {\\n top: 0px;\\n}\\n.mly-top-8 {\\n top: 2rem;\\n}\\n.mly-isolate {\\n isolation: isolate;\\n}\\n.mly-z-0 {\\n z-index: 0;\\n}\\n.mly-z-10 {\\n z-index: 10;\\n}\\n.mly-z-20 {\\n z-index: 20;\\n}\\n.mly-z-50 {\\n z-index: 50;\\n}\\n.mly-z-\\\\[1\\\\] {\\n z-index: 1;\\n}\\n.mly-z-\\\\[9999\\\\] {\\n z-index: 9999;\\n}\\n.\\\\!mly-my-0 {\\n margin-top: 0px !important;\\n margin-bottom: 0px !important;\\n}\\n.-mly-mx-4 {\\n margin-left: -1rem;\\n margin-right: -1rem;\\n}\\n.mly--mx-1 {\\n margin-left: -0.25rem;\\n margin-right: -0.25rem;\\n}\\n.mly-mx-0 {\\n margin-left: 0px;\\n margin-right: 0px;\\n}\\n.mly-mx-0\\\\.5 {\\n margin-left: 0.125rem;\\n margin-right: 0.125rem;\\n}\\n.mly-mx-1\\\\.5 {\\n margin-left: 0.375rem;\\n margin-right: 0.375rem;\\n}\\n.mly-my-0 {\\n margin-top: 0px;\\n margin-bottom: 0px;\\n}\\n.mly-my-0\\\\.5 {\\n margin-top: 0.125rem;\\n margin-bottom: 0.125rem;\\n}\\n.mly-my-1 {\\n margin-top: 0.25rem;\\n margin-bottom: 0.25rem;\\n}\\n.mly-my-2 {\\n margin-top: 0.5rem;\\n margin-bottom: 0.5rem;\\n}\\n.mly-my-4 {\\n margin-top: 1rem;\\n margin-bottom: 1rem;\\n}\\n.\\\\!mly-mb-0 {\\n margin-bottom: 0px !important;\\n}\\n.\\\\!mly-mb-1\\\\.5 {\\n margin-bottom: 0.375rem !important;\\n}\\n.-mly-ms-px {\\n margin-inline-start: -1px;\\n}\\n.mly-mb-1\\\\.5 {\\n margin-bottom: 0.375rem;\\n}\\n.mly-mb-2 {\\n margin-bottom: 0.5rem;\\n}\\n.mly-mb-4 {\\n margin-bottom: 1rem;\\n}\\n.mly-ml-1 {\\n margin-left: 0.25rem;\\n}\\n.mly-ml-auto {\\n margin-left: auto;\\n}\\n.mly-mt-1 {\\n margin-top: 0.25rem;\\n}\\n.mly-mt-2 {\\n margin-top: 0.5rem;\\n}\\n.mly-mt-4 {\\n margin-top: 1rem;\\n}\\n.mly-block {\\n display: block;\\n}\\n.mly-inline-block {\\n display: inline-block;\\n}\\n.mly-inline {\\n display: inline;\\n}\\n.mly-flex {\\n display: flex;\\n}\\n.mly-inline-flex {\\n display: inline-flex;\\n}\\n.mly-grid {\\n display: grid;\\n}\\n.mly-inline-grid {\\n display: inline-grid;\\n}\\n.mly-hidden {\\n display: none;\\n}\\n.mly-aspect-\\\\[2\\\\.5\\\\] {\\n aspect-ratio: 2.5;\\n}\\n.mly-aspect-square {\\n aspect-ratio: 1 / 1;\\n}\\n.\\\\!mly-size-5 {\\n width: 1.25rem !important;\\n height: 1.25rem !important;\\n}\\n.\\\\!mly-size-7 {\\n width: 1.75rem !important;\\n height: 1.75rem !important;\\n}\\n.mly-size-3 {\\n width: 0.75rem;\\n height: 0.75rem;\\n}\\n.mly-size-3\\\\.5 {\\n width: 0.875rem;\\n height: 0.875rem;\\n}\\n.mly-size-4 {\\n width: 1rem;\\n height: 1rem;\\n}\\n.mly-size-5 {\\n width: 1.25rem;\\n height: 1.25rem;\\n}\\n.mly-size-6 {\\n width: 1.5rem;\\n height: 1.5rem;\\n}\\n.mly-size-7 {\\n width: 1.75rem;\\n height: 1.75rem;\\n}\\n.mly-size-\\\\[15px\\\\] {\\n width: 15px;\\n height: 15px;\\n}\\n.mly-size-\\\\[var\\\\(--variable-icon-size\\\\)\\\\] {\\n width: var(--variable-icon-size);\\n height: var(--variable-icon-size);\\n}\\n.\\\\!mly-h-7 {\\n height: 1.75rem !important;\\n}\\n.mly-h-10 {\\n height: 2.5rem;\\n}\\n.mly-h-11 {\\n height: 2.75rem;\\n}\\n.mly-h-3 {\\n height: 0.75rem;\\n}\\n.mly-h-4 {\\n height: 1rem;\\n}\\n.mly-h-5 {\\n height: 1.25rem;\\n}\\n.mly-h-6 {\\n height: 1.5rem;\\n}\\n.mly-h-7 {\\n height: 1.75rem;\\n}\\n.mly-h-8 {\\n height: 2rem;\\n}\\n.mly-h-9 {\\n height: 2.25rem;\\n}\\n.mly-h-\\\\[2px\\\\] {\\n height: 2px;\\n}\\n.mly-h-auto {\\n height: auto;\\n}\\n.mly-h-full {\\n height: 100%;\\n}\\n.mly-h-px {\\n height: 1px;\\n}\\n.mly-max-h-52 {\\n max-height: 13rem;\\n}\\n.mly-max-h-\\\\[330px\\\\] {\\n max-height: 330px;\\n}\\n.mly-min-h-24 {\\n min-height: 6rem;\\n}\\n.mly-min-h-7 {\\n min-height: 1.75rem;\\n}\\n.mly-min-h-\\\\[42px\\\\] {\\n min-height: 42px;\\n}\\n.\\\\!mly-w-full {\\n width: 100% !important;\\n}\\n.mly-w-10 {\\n width: 2.5rem;\\n}\\n.mly-w-3 {\\n width: 0.75rem;\\n}\\n.mly-w-32 {\\n width: 8rem;\\n}\\n.mly-w-36 {\\n width: 9rem;\\n}\\n.mly-w-4 {\\n width: 1rem;\\n}\\n.mly-w-40 {\\n width: 10rem;\\n}\\n.mly-w-5 {\\n width: 1.25rem;\\n}\\n.mly-w-52 {\\n width: 13rem;\\n}\\n.mly-w-6 {\\n width: 1.5rem;\\n}\\n.mly-w-64 {\\n width: 16rem;\\n}\\n.mly-w-7 {\\n width: 1.75rem;\\n}\\n.mly-w-72 {\\n width: 18rem;\\n}\\n.mly-w-9 {\\n width: 2.25rem;\\n}\\n.mly-w-96 {\\n width: 24rem;\\n}\\n.mly-w-\\\\[1\\\\.5px\\\\] {\\n width: 1.5px;\\n}\\n.mly-w-\\\\[160px\\\\] {\\n width: 160px;\\n}\\n.mly-w-\\\\[300px\\\\] {\\n width: 300px;\\n}\\n.mly-w-fit {\\n width: -moz-fit-content;\\n width: fit-content;\\n}\\n.mly-w-full {\\n width: 100%;\\n}\\n.mly-w-max {\\n width: -moz-max-content;\\n width: max-content;\\n}\\n.mly-w-px {\\n width: 1px;\\n}\\n.mly-min-w-0 {\\n min-width: 0px;\\n}\\n.mly-min-w-28 {\\n min-width: 7rem;\\n}\\n.mly-min-w-\\\\[260px\\\\] {\\n min-width: 260px;\\n}\\n.mly-min-w-\\\\[8rem\\\\] {\\n min-width: 8rem;\\n}\\n.mly-min-w-full {\\n min-width: 100%;\\n}\\n.mly-max-w-12 {\\n max-width: 3rem;\\n}\\n.mly-max-w-20 {\\n max-width: 5rem;\\n}\\n.mly-max-w-28 {\\n max-width: 7rem;\\n}\\n.mly-max-w-\\\\[260px\\\\] {\\n max-width: 260px;\\n}\\n.mly-max-w-\\\\[285px\\\\] {\\n max-width: 285px;\\n}\\n.mly-max-w-max {\\n max-width: -moz-max-content;\\n max-width: max-content;\\n}\\n.mly-max-w-xs {\\n max-width: 20rem;\\n}\\n.mly-shrink-0 {\\n flex-shrink: 0;\\n}\\n.mly-grow {\\n flex-grow: 1;\\n}\\n.mly-table-fixed {\\n table-layout: fixed;\\n}\\n.mly-border-separate {\\n border-collapse: separate;\\n}\\n.mly-translate-x-full {\\n --tw-translate-x: 100%;\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.mly-transform {\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n@keyframes mly-spin {\\n to {\\n transform: rotate(360deg);\\n }\\n}\\n.mly-animate-spin {\\n animation: mly-spin 1s linear infinite;\\n}\\n.mly-cursor-default {\\n cursor: default;\\n}\\n.mly-cursor-grab {\\n cursor: grab;\\n}\\n.mly-cursor-pointer {\\n cursor: pointer;\\n}\\n.mly-select-none {\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.mly-appearance-none {\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n}\\n.mly-grid-cols-2 {\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n}\\n.mly-grid-cols-\\\\[12px_1fr\\\\] {\\n grid-template-columns: 12px 1fr;\\n}\\n.mly-flex-col {\\n flex-direction: column;\\n}\\n.mly-flex-wrap {\\n flex-wrap: wrap;\\n}\\n.mly-items-center {\\n align-items: center;\\n}\\n.mly-items-stretch {\\n align-items: stretch;\\n}\\n.mly-justify-start {\\n justify-content: flex-start;\\n}\\n.mly-justify-center {\\n justify-content: center;\\n}\\n.mly-justify-between {\\n justify-content: space-between;\\n}\\n.mly-gap-0\\\\.5 {\\n gap: 0.125rem;\\n}\\n.mly-gap-1 {\\n gap: 0.25rem;\\n}\\n.mly-gap-1\\\\.5 {\\n gap: 0.375rem;\\n}\\n.mly-gap-2 {\\n gap: 0.5rem;\\n}\\n.mly-gap-3 {\\n gap: 0.75rem;\\n}\\n.mly-gap-4 {\\n gap: 1rem;\\n}\\n.mly-gap-\\\\[1px\\\\] {\\n gap: 1px;\\n}\\n.mly-gap-\\\\[var\\\\(--variable-icon-gap\\\\)\\\\] {\\n gap: var(--variable-icon-gap);\\n}\\n.mly-space-x-0\\\\.5 > :not([hidden]) ~ :not([hidden]) {\\n --tw-space-x-reverse: 0;\\n margin-right: calc(0.125rem * var(--tw-space-x-reverse));\\n margin-left: calc(0.125rem * calc(1 - var(--tw-space-x-reverse)));\\n}\\n.mly-space-y-0\\\\.5 > :not([hidden]) ~ :not([hidden]) {\\n --tw-space-y-reverse: 0;\\n margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse)));\\n margin-bottom: calc(0.125rem * var(--tw-space-y-reverse));\\n}\\n.mly-space-y-1 > :not([hidden]) ~ :not([hidden]) {\\n --tw-space-y-reverse: 0;\\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\\n}\\n.mly-overflow-hidden {\\n overflow: hidden;\\n}\\n.mly-overflow-y-auto {\\n overflow-y: auto;\\n}\\n.mly-scroll-smooth {\\n scroll-behavior: smooth;\\n}\\n.mly-truncate {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.\\\\!mly-rounded {\\n border-radius: 0.25rem !important;\\n}\\n.\\\\!mly-rounded-full {\\n border-radius: 9999px !important;\\n}\\n.\\\\!mly-rounded-md {\\n border-radius: 0.375rem !important;\\n}\\n.\\\\!mly-rounded-none {\\n border-radius: 0px !important;\\n}\\n.mly-rounded {\\n border-radius: 0.25rem;\\n}\\n.mly-rounded-full {\\n border-radius: 9999px;\\n}\\n.mly-rounded-lg {\\n border-radius: 0.5rem;\\n}\\n.mly-rounded-md {\\n border-radius: 0.375rem;\\n}\\n.mly-rounded-none {\\n border-radius: 0px;\\n}\\n.mly-rounded-sm {\\n border-radius: 0.125rem;\\n}\\n.mly-rounded-xl {\\n border-radius: 0.75rem;\\n}\\n.mly-rounded-s-lg {\\n border-start-start-radius: 0.5rem;\\n border-end-start-radius: 0.5rem;\\n}\\n.mly-rounded-s-none {\\n border-start-start-radius: 0px;\\n border-end-start-radius: 0px;\\n}\\n.mly-rounded-t-lg {\\n border-top-left-radius: 0.5rem;\\n border-top-right-radius: 0.5rem;\\n}\\n.mly-border {\\n border-width: 1px;\\n}\\n.mly-border-0 {\\n border-width: 0px;\\n}\\n.mly-border-2 {\\n border-width: 2px;\\n}\\n.mly-border-\\\\[1\\\\.5px\\\\] {\\n border-width: 1.5px;\\n}\\n.mly-border-b {\\n border-bottom-width: 1px;\\n}\\n.mly-border-l-4 {\\n border-left-width: 4px;\\n}\\n.mly-border-t {\\n border-top-width: 1px;\\n}\\n.mly-border-none {\\n border-style: none;\\n}\\n.mly-border-\\\\[var\\\\(--button-var-border-color\\\\)\\\\] {\\n border-color: var(--button-var-border-color);\\n}\\n.mly-border-gray-200 {\\n --tw-border-opacity: 1;\\n border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));\\n}\\n.mly-border-gray-300 {\\n --tw-border-opacity: 1;\\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\\n}\\n.mly-border-gray-700 {\\n --tw-border-opacity: 1;\\n border-color: rgb(55 65 81 / var(--tw-border-opacity, 1));\\n}\\n.mly-border-rose-400 {\\n --tw-border-opacity: 1;\\n border-color: rgb(251 113 133 / var(--tw-border-opacity, 1));\\n}\\n.mly-border-slate-200 {\\n --tw-border-opacity: 1;\\n border-color: rgb(226 232 240 / var(--tw-border-opacity, 1));\\n}\\n.mly-border-white {\\n --tw-border-opacity: 1;\\n border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\\n}\\n.\\\\!mly-bg-transparent {\\n background-color: transparent !important;\\n}\\n.mly-bg-\\\\[\\\\#efefef\\\\] {\\n --tw-bg-opacity: 1;\\n background-color: rgb(239 239 239 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-gray-100 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-gray-200 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-gray-50 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-gray-900 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-red-100 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-red-500 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-rose-100 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(255 228 230 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-rose-300 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(253 164 175 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-rose-50 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(255 241 242 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-rose-500 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(244 63 94 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-soft-gray {\\n --tw-bg-opacity: 1;\\n background-color: rgb(244 245 246 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-soft-gray\\\\/40 {\\n background-color: rgb(244 245 246 / 0.4);\\n}\\n.mly-bg-soft-gray\\\\/60 {\\n background-color: rgb(244 245 246 / 0.6);\\n}\\n.mly-bg-transparent {\\n background-color: transparent;\\n}\\n.mly-bg-white {\\n --tw-bg-opacity: 1;\\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-yellow-200 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(254 240 138 / var(--tw-bg-opacity, 1));\\n}\\n.mly-stroke-midnight-gray {\\n stroke: #333333;\\n}\\n.mly-stroke-\\\\[1\\\\.2\\\\] {\\n stroke-width: 1.2;\\n}\\n.mly-stroke-\\\\[1\\\\] {\\n stroke-width: 1;\\n}\\n.mly-stroke-\\\\[2\\\\.5\\\\] {\\n stroke-width: 2.5;\\n}\\n.mly-object-cover {\\n -o-object-fit: cover;\\n object-fit: cover;\\n}\\n.\\\\!mly-p-0 {\\n padding: 0px !important;\\n}\\n.\\\\!mly-p-0\\\\.5 {\\n padding: 0.125rem !important;\\n}\\n.mly-p-0 {\\n padding: 0px;\\n}\\n.mly-p-0\\\\.5 {\\n padding: 0.125rem;\\n}\\n.mly-p-1 {\\n padding: 0.25rem;\\n}\\n.mly-p-2 {\\n padding: 0.5rem;\\n}\\n.mly-p-3 {\\n padding: 0.75rem;\\n}\\n.mly-p-4 {\\n padding: 1rem;\\n}\\n.mly-px-0\\\\.5 {\\n padding-left: 0.125rem;\\n padding-right: 0.125rem;\\n}\\n.mly-px-1 {\\n padding-left: 0.25rem;\\n padding-right: 0.25rem;\\n}\\n.mly-px-1\\\\.5 {\\n padding-left: 0.375rem;\\n padding-right: 0.375rem;\\n}\\n.mly-px-2 {\\n padding-left: 0.5rem;\\n padding-right: 0.5rem;\\n}\\n.mly-px-2\\\\.5 {\\n padding-left: 0.625rem;\\n padding-right: 0.625rem;\\n}\\n.mly-px-3 {\\n padding-left: 0.75rem;\\n padding-right: 0.75rem;\\n}\\n.mly-px-4 {\\n padding-left: 1rem;\\n padding-right: 1rem;\\n}\\n.mly-px-8 {\\n padding-left: 2rem;\\n padding-right: 2rem;\\n}\\n.mly-px-\\\\[26px\\\\] {\\n padding-left: 26px;\\n padding-right: 26px;\\n}\\n.mly-py-0\\\\.5 {\\n padding-top: 0.125rem;\\n padding-bottom: 0.125rem;\\n}\\n.mly-py-1 {\\n padding-top: 0.25rem;\\n padding-bottom: 0.25rem;\\n}\\n.mly-py-1\\\\.5 {\\n padding-top: 0.375rem;\\n padding-bottom: 0.375rem;\\n}\\n.mly-py-2 {\\n padding-top: 0.5rem;\\n padding-bottom: 0.5rem;\\n}\\n.mly-py-3 {\\n padding-top: 0.75rem;\\n padding-bottom: 0.75rem;\\n}\\n.mly-pe-8 {\\n padding-inline-end: 2rem;\\n}\\n.mly-pl-1 {\\n padding-left: 0.25rem;\\n}\\n.mly-pl-4 {\\n padding-left: 1rem;\\n}\\n.mly-pl-7 {\\n padding-left: 1.75rem;\\n}\\n.mly-pl-8 {\\n padding-left: 2rem;\\n}\\n.mly-pl-\\\\[26px\\\\] {\\n padding-left: 26px;\\n}\\n.mly-pr-1\\\\.5 {\\n padding-right: 0.375rem;\\n}\\n.mly-pr-6 {\\n padding-right: 1.5rem;\\n}\\n.mly-pr-7 {\\n padding-right: 1.75rem;\\n}\\n.mly-ps-3 {\\n padding-inline-start: 0.75rem;\\n}\\n.mly-text-left {\\n text-align: left;\\n}\\n.mly-text-center {\\n text-align: center;\\n}\\n.mly-font-mono {\\n font-family:\\n ui-monospace,\\n SFMono-Regular,\\n Menlo,\\n Monaco,\\n Consolas,\\n \\\"Liberation Mono\\\",\\n \\\"Courier New\\\",\\n monospace;\\n}\\n.\\\\!mly-text-base {\\n font-size: 1rem !important;\\n line-height: 1.5rem !important;\\n}\\n.\\\\!mly-text-lg {\\n font-size: 1.125rem !important;\\n line-height: 1.75rem !important;\\n}\\n.mly-text-\\\\[10px\\\\] {\\n font-size: 10px;\\n}\\n.mly-text-\\\\[13px\\\\] {\\n font-size: 13px;\\n}\\n.mly-text-sm {\\n font-size: 0.875rem;\\n line-height: 1.25rem;\\n}\\n.mly-text-xs {\\n font-size: 0.75rem;\\n line-height: 1rem;\\n}\\n.mly-font-medium {\\n font-weight: 500;\\n}\\n.mly-font-normal {\\n font-weight: 400;\\n}\\n.mly-font-semibold {\\n font-weight: 600;\\n}\\n.mly-uppercase {\\n text-transform: uppercase;\\n}\\n.mly-capitalize {\\n text-transform: capitalize;\\n}\\n.mly-tabular-nums {\\n --tw-numeric-spacing: tabular-nums;\\n font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);\\n}\\n.mly-leading-none {\\n line-height: 1;\\n}\\n.mly-tracking-normal {\\n letter-spacing: 0em;\\n}\\n.mly-tracking-widest {\\n letter-spacing: 0.1em;\\n}\\n.mly-text-black {\\n --tw-text-opacity: 1;\\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-gray-400 {\\n --tw-text-opacity: 1;\\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-gray-50 {\\n --tw-text-opacity: 1;\\n color: rgb(249 250 251 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-gray-500 {\\n --tw-text-opacity: 1;\\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-gray-600 {\\n --tw-text-opacity: 1;\\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-gray-700 {\\n --tw-text-opacity: 1;\\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-gray-900 {\\n --tw-text-opacity: 1;\\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-gray-950 {\\n --tw-text-opacity: 1;\\n color: rgb(3 7 18 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-midnight-gray {\\n --tw-text-opacity: 1;\\n color: rgb(51 51 51 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-midnight-gray\\\\/60 {\\n color: rgb(51 51 51 / 0.6);\\n}\\n.mly-text-red-500 {\\n --tw-text-opacity: 1;\\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-red-600 {\\n --tw-text-opacity: 1;\\n color: rgb(220 38 38 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-rose-600 {\\n --tw-text-opacity: 1;\\n color: rgb(225 29 72 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-rose-800 {\\n --tw-text-opacity: 1;\\n color: rgb(159 18 57 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-slate-400 {\\n --tw-text-opacity: 1;\\n color: rgb(148 163 184 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-slate-500 {\\n --tw-text-opacity: 1;\\n color: rgb(100 116 139 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-slate-600 {\\n --tw-text-opacity: 1;\\n color: rgb(71 85 105 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-slate-700 {\\n --tw-text-opacity: 1;\\n color: rgb(51 65 85 / var(--tw-text-opacity, 1));\\n}\\n.mly-no-underline {\\n text-decoration-line: none;\\n}\\n.mly-underline-offset-4 {\\n text-underline-offset: 4px;\\n}\\n.mly-antialiased {\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n.mly-opacity-60 {\\n opacity: 0.6;\\n}\\n.mly-shadow {\\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.mly-shadow-lg {\\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.mly-shadow-md {\\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.mly-shadow-none {\\n --tw-shadow: 0 0 #0000;\\n --tw-shadow-colored: 0 0 #0000;\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.mly-shadow-sm {\\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.mly-outline-none {\\n outline: 2px solid transparent;\\n outline-offset: 2px;\\n}\\n.mly-ring-offset-white {\\n --tw-ring-offset-color: #fff;\\n}\\n.mly-drop-shadow-md {\\n --tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06));\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.mly-transition-all {\\n transition-property: all;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.mly-transition-colors {\\n transition-property:\\n color,\\n background-color,\\n border-color,\\n text-decoration-color,\\n fill,\\n stroke;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.mly-transition-shadow {\\n transition-property: box-shadow;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.mly-ease-out {\\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n}\\n@keyframes enter {\\n from {\\n opacity: var(--tw-enter-opacity, 1);\\n transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0));\\n }\\n}\\n@keyframes exit {\\n to {\\n opacity: var(--tw-exit-opacity, 1);\\n transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));\\n }\\n}\\n.mly-animate-in {\\n animation-name: enter;\\n animation-duration: 150ms;\\n --tw-enter-opacity: initial;\\n --tw-enter-scale: initial;\\n --tw-enter-rotate: initial;\\n --tw-enter-translate-x: initial;\\n --tw-enter-translate-y: initial;\\n}\\n.mly-fade-in-0 {\\n --tw-enter-opacity: 0;\\n}\\n.mly-zoom-in-95 {\\n --tw-enter-scale: .95;\\n}\\n.mly-ease-out {\\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-track {\\n background-color: var(--scrollbar-track);\\n border-radius: var(--scrollbar-track-radius);\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-track:hover {\\n background-color: var(--scrollbar-track-hover, var(--scrollbar-track));\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-track:active {\\n background-color: var(--scrollbar-track-active, var(--scrollbar-track-hover, var(--scrollbar-track)));\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-thumb {\\n background-color: var(--scrollbar-thumb);\\n border-radius: var(--scrollbar-thumb-radius);\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-thumb:hover {\\n background-color: var(--scrollbar-thumb-hover, var(--scrollbar-thumb));\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-thumb:active {\\n background-color: var(--scrollbar-thumb-active, var(--scrollbar-thumb-hover, var(--scrollbar-thumb)));\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-corner {\\n background-color: var(--scrollbar-corner);\\n border-radius: var(--scrollbar-corner-radius);\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-corner:hover {\\n background-color: var(--scrollbar-corner-hover, var(--scrollbar-corner));\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-corner:active {\\n background-color: var(--scrollbar-corner-active, var(--scrollbar-corner-hover, var(--scrollbar-corner)));\\n}\\n.mly-scrollbar-thin {\\n scrollbar-width: thin;\\n scrollbar-color: var(--scrollbar-thumb, initial) var(--scrollbar-track, initial);\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar {\\n display: block;\\n width: 8px;\\n height: 8px;\\n}\\n.mly-scrollbar-track-transparent {\\n --scrollbar-track: transparent !important;\\n}\\n.mly-scrollbar-thumb-gray-200 {\\n --scrollbar-thumb: #e5e7eb !important;\\n}\\n.\\\\[text-align\\\\:revert-layer\\\\] {\\n text-align: revert-layer;\\n}\\n.file\\\\:mly-border-0::file-selector-button {\\n border-width: 0px;\\n}\\n.file\\\\:mly-bg-transparent::file-selector-button {\\n background-color: transparent;\\n}\\n.file\\\\:mly-text-sm::file-selector-button {\\n font-size: 0.875rem;\\n line-height: 1.25rem;\\n}\\n.file\\\\:mly-font-medium::file-selector-button {\\n font-weight: 500;\\n}\\n.placeholder\\\\:mly-text-gray-400::-moz-placeholder {\\n --tw-text-opacity: 1;\\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\\n}\\n.placeholder\\\\:mly-text-gray-400::placeholder {\\n --tw-text-opacity: 1;\\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\\n}\\n.placeholder\\\\:mly-text-gray-500::-moz-placeholder {\\n --tw-text-opacity: 1;\\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\\n}\\n.placeholder\\\\:mly-text-gray-500::placeholder {\\n --tw-text-opacity: 1;\\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\\n}\\n.mly-peer:disabled ~ .peer-disabled\\\\:mly-opacity-50 {\\n opacity: 0.5;\\n}\\n.data-\\\\[disabled\\\\]\\\\:mly-pointer-events-none[data-disabled] {\\n pointer-events: none;\\n}\\n.data-\\\\[state\\\\=open\\\\]\\\\:mly-bg-rose-100[data-state=open] {\\n --tw-bg-opacity: 1;\\n background-color: rgb(255 228 230 / var(--tw-bg-opacity, 1));\\n}\\n.data-\\\\[state\\\\=open\\\\]\\\\:mly-bg-soft-gray[data-state=open] {\\n --tw-bg-opacity: 1;\\n background-color: rgb(244 245 246 / var(--tw-bg-opacity, 1));\\n}\\n.data-\\\\[state\\\\=true\\\\]\\\\:mly-bg-soft-gray[data-state=true] {\\n --tw-bg-opacity: 1;\\n background-color: rgb(244 245 246 / var(--tw-bg-opacity, 1));\\n}\\n.data-\\\\[state\\\\=true\\\\]\\\\:mly-text-gray-900[data-state=true] {\\n --tw-text-opacity: 1;\\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\\n}\\n.data-\\\\[disabled\\\\]\\\\:mly-opacity-50[data-disabled] {\\n opacity: 0.5;\\n}\\n.hover\\\\:mly-bg-gray-100:hover {\\n --tw-bg-opacity: 1;\\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\\n}\\n.hover\\\\:mly-bg-gray-100\\\\/80:hover {\\n background-color: rgb(243 244 246 / 0.8);\\n}\\n.hover\\\\:mly-bg-red-200:hover {\\n --tw-bg-opacity: 1;\\n background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));\\n}\\n.hover\\\\:mly-bg-red-500\\\\/90:hover {\\n background-color: rgb(239 68 68 / 0.9);\\n}\\n.hover\\\\:mly-bg-rose-100:hover {\\n --tw-bg-opacity: 1;\\n background-color: rgb(255 228 230 / var(--tw-bg-opacity, 1));\\n}\\n.hover\\\\:mly-bg-soft-gray:hover {\\n --tw-bg-opacity: 1;\\n background-color: rgb(244 245 246 / var(--tw-bg-opacity, 1));\\n}\\n.hover\\\\:mly-bg-soft-gray\\\\/60:hover {\\n background-color: rgb(244 245 246 / 0.6);\\n}\\n.hover\\\\:mly-text-black:hover {\\n --tw-text-opacity: 1;\\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\\n}\\n.hover\\\\:mly-text-gray-900:hover {\\n --tw-text-opacity: 1;\\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\\n}\\n.hover\\\\:mly-text-midnight-gray:hover {\\n --tw-text-opacity: 1;\\n color: rgb(51 51 51 / var(--tw-text-opacity, 1));\\n}\\n.hover\\\\:mly-underline:hover {\\n text-decoration-line: underline;\\n}\\n.focus\\\\:mly-z-10:focus {\\n z-index: 10;\\n}\\n.focus\\\\:mly-bg-gray-100:focus {\\n --tw-bg-opacity: 1;\\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\\n}\\n.focus\\\\:mly-bg-red-200:focus {\\n --tw-bg-opacity: 1;\\n background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));\\n}\\n.focus\\\\:mly-bg-soft-gray:focus {\\n --tw-bg-opacity: 1;\\n background-color: rgb(244 245 246 / var(--tw-bg-opacity, 1));\\n}\\n.focus\\\\:mly-outline-none:focus {\\n outline: 2px solid transparent;\\n outline-offset: 2px;\\n}\\n.focus\\\\:mly-ring-1:focus {\\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow),\\n var(--tw-ring-shadow),\\n var(--tw-shadow, 0 0 #0000);\\n}\\n.focus\\\\:mly-ring-midnight-gray\\\\/50:focus {\\n --tw-ring-color: rgb(51 51 51 / 0.5);\\n}\\n.focus-visible\\\\:mly-relative:focus-visible {\\n position: relative;\\n}\\n.focus-visible\\\\:mly-z-10:focus-visible {\\n z-index: 10;\\n}\\n.focus-visible\\\\:mly-border-gray-400:focus-visible {\\n --tw-border-opacity: 1;\\n border-color: rgb(156 163 175 / var(--tw-border-opacity, 1));\\n}\\n.focus-visible\\\\:mly-outline-none:focus-visible {\\n outline: 2px solid transparent;\\n outline-offset: 2px;\\n}\\n.focus-visible\\\\:mly-ring-2:focus-visible {\\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow),\\n var(--tw-ring-shadow),\\n var(--tw-shadow, 0 0 #0000);\\n}\\n.focus-visible\\\\:mly-ring-gray-400:focus-visible {\\n --tw-ring-opacity: 1;\\n --tw-ring-color: rgb(156 163 175 / var(--tw-ring-opacity, 1));\\n}\\n.focus-visible\\\\:mly-ring-offset-2:focus-visible {\\n --tw-ring-offset-width: 2px;\\n}\\n.active\\\\:mly-bg-soft-gray:active {\\n --tw-bg-opacity: 1;\\n background-color: rgb(244 245 246 / var(--tw-bg-opacity, 1));\\n}\\n.disabled\\\\:mly-pointer-events-none:disabled {\\n pointer-events: none;\\n}\\n.disabled\\\\:mly-cursor-not-allowed:disabled {\\n cursor: not-allowed;\\n}\\n.disabled\\\\:mly-opacity-50:disabled {\\n opacity: 0.5;\\n}\\n.\\\\[\\\\&_svg\\\\]\\\\:mly-pointer-events-none svg {\\n pointer-events: none;\\n}\\n\")","'use client';\n\nimport {\n AnyExtension,\n FocusPosition,\n Editor as TiptapEditor,\n} from '@tiptap/core';\nimport { EditorContent, JSONContent, useEditor } from '@tiptap/react';\n\nimport { useMemo, useRef } from 'react';\nimport { ColumnsBubbleMenu } from './components/column-menu/columns-bubble-menu';\nimport { ContentMenu } from './components/content-menu';\nimport { EditorMenuBar } from './components/editor-menu-bar';\nimport { RepeatBubbleMenu } from './components/repeat-menu/repeat-bubble-menu';\nimport { ImageBubbleMenu } from './components/image-menu/image-bubble-menu';\nimport { SectionBubbleMenu } from './components/section-menu/section-bubble-menu';\nimport { SpacerBubbleMenu } from './components/spacer-menu/spacer-bubble-menu';\nimport { TextBubbleMenu } from './components/text-menu/text-bubble-menu';\nimport { extensions as defaultExtensions } from './extensions';\nimport {\n DEFAULT_PLACEHOLDER_URL,\n DEFAULT_RENDER_VARIABLE_FUNCTION,\n DEFAULT_VARIABLE_TRIGGER_CHAR,\n DEFAULT_VARIABLES,\n MailyContextType,\n MailyProvider,\n} from './provider';\nimport { cn } from './utils/classname';\nimport { VariableBubbleMenu } from './components/variable-menu/variable-bubble-menu';\nimport { replaceDeprecatedNode } from './utils/replace-deprecated';\nimport { DEFAULT_SLASH_COMMANDS } from './extensions/slash-command/default-slash-commands';\nimport { HTMLBubbleMenu } from './components/html-menu/html-menu';\nimport { InlineImageBubbleMenu } from './components/inline-image-menu/inline-image-bubble-menu';\n\ntype ParitialMailContextType = Partial<MailyContextType>;\n\nexport type EditorProps = {\n contentHtml?: string;\n contentJson?: JSONContent;\n onUpdate?: (editor: TiptapEditor) => void;\n onCreate?: (editor: TiptapEditor) => void;\n extensions?: AnyExtension[];\n config?: {\n hasMenuBar?: boolean;\n spellCheck?: boolean;\n wrapClassName?: string;\n toolbarClassName?: string;\n contentClassName?: string;\n bodyClassName?: string;\n autofocus?: FocusPosition;\n immediatelyRender?: boolean;\n };\n\n editable?: boolean;\n} & ParitialMailContextType;\n\nexport function Editor(props: EditorProps) {\n const {\n config: {\n wrapClassName = '',\n contentClassName = '',\n bodyClassName = '',\n hasMenuBar = true,\n spellCheck = false,\n autofocus = 'end',\n immediatelyRender = false,\n } = {},\n onCreate,\n onUpdate,\n extensions,\n contentHtml,\n contentJson,\n blocks = DEFAULT_SLASH_COMMANDS,\n variables = DEFAULT_VARIABLES,\n variableTriggerCharacter = DEFAULT_VARIABLE_TRIGGER_CHAR,\n renderVariable = DEFAULT_RENDER_VARIABLE_FUNCTION,\n editable = true,\n placeholderUrl = DEFAULT_PLACEHOLDER_URL,\n } = props;\n\n const formattedContent = useMemo(() => {\n if (contentJson) {\n const json =\n contentJson?.type === 'doc'\n ? contentJson\n : ({\n type: 'doc',\n content: contentJson,\n } as JSONContent);\n\n return replaceDeprecatedNode(json);\n } else if (contentHtml) {\n return contentHtml;\n } else {\n return {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [],\n },\n ],\n };\n }\n }, [contentHtml, contentJson, replaceDeprecatedNode]);\n\n const menuContainerRef = useRef(null);\n const editor = useEditor({\n editorProps: {\n attributes: {\n class: cn(`mly-prose mly-w-full`, contentClassName),\n spellCheck: spellCheck ? 'true' : 'false',\n },\n },\n immediatelyRender,\n onCreate: ({ editor }) => {\n onCreate?.(editor);\n },\n onUpdate: ({ editor }) => {\n onUpdate?.(editor);\n },\n extensions: defaultExtensions({\n variables,\n variableTriggerCharacter,\n extensions,\n blocks,\n }),\n content: formattedContent,\n autofocus,\n editable,\n });\n\n if (!editor) {\n return null;\n }\n\n return (\n <MailyProvider\n variables={variables}\n variableTriggerCharacter={variableTriggerCharacter}\n renderVariable={renderVariable}\n placeholderUrl={placeholderUrl}\n >\n <div\n className={cn(\n 'mly-editor mly-antialiased',\n editor.isEditable ? 'mly-editable' : 'mly-not-editable',\n wrapClassName\n )}\n ref={menuContainerRef}\n >\n {hasMenuBar && <EditorMenuBar config={props.config} editor={editor} />}\n <div\n className={cn(\n 'mly-mt-4 mly-rounded mly-border mly-bg-white mly-p-4',\n bodyClassName\n )}\n >\n <TextBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <ImageBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <SpacerBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <EditorContent editor={editor} />\n <SectionBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <ColumnsBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <ContentMenu editor={editor} />\n <VariableBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <RepeatBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <HTMLBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <InlineImageBubbleMenu editor={editor} appendTo={menuContainerRef} />\n </div>\n </div>\n </MailyProvider>\n );\n}\n","import { BubbleMenu } from '@tiptap/react';\nimport { useCallback } from 'react';\nimport { getRenderContainer } from '../../utils/get-render-container';\nimport { sticky } from 'tippy.js';\nimport { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { isTextSelected } from '@/editor/utils/is-text-selected';\nimport { ColumnsBubbleMenuContent } from './columns-bubble-menu-content';\n\nexport function ColumnsBubbleMenu(props: EditorBubbleMenuProps) {\n const { appendTo, editor } = props;\n if (!editor) {\n return null;\n }\n\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor!, 'columns');\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n shouldShow: ({ editor }) => {\n if (\n isTextSelected(editor) ||\n editor.isActive('section') ||\n editor.isActive('repeat') ||\n !editor.isEditable\n ) {\n return false;\n }\n\n return editor.isActive('columns');\n },\n tippyOptions: {\n offset: [0, 8],\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: false }],\n },\n getReferenceClientRect,\n appendTo: () => appendTo?.current,\n plugins: [sticky],\n sticky: 'popper',\n maxWidth: 'auto',\n },\n pluginKey: 'columnsBubbleMenu',\n };\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <ColumnsBubbleMenuContent editor={editor} />\n </BubbleMenu>\n );\n}\n","import { Editor } from '@tiptap/react';\n\nexport function getRenderContainer(editor: Editor, nodeType: string) {\n const {\n view,\n state: {\n selection: { from },\n },\n } = editor;\n\n const elements = document.querySelectorAll('.has-focus');\n const elementCount = elements.length;\n const innermostNode = elements[elementCount - 1];\n const element = innermostNode;\n\n if (\n (element &&\n element.getAttribute('data-type') &&\n element.getAttribute('data-type') === nodeType) ||\n (element &&\n element.classList &&\n (element.classList.contains(nodeType) ||\n element.classList.contains(`node-${nodeType}`)))\n ) {\n return element;\n }\n\n const node = view.domAtPos(from).node as HTMLElement;\n let container: HTMLElement | null = node;\n\n if (!container.tagName) {\n container = node.parentElement;\n }\n\n while (\n container &&\n !(\n container.getAttribute('data-type') &&\n container.getAttribute('data-type') === nodeType\n ) &&\n !container.classList.contains(nodeType)\n ) {\n container = container.parentElement;\n }\n\n return container;\n}\n","import { isTextSelection } from '@tiptap/core';\nimport { Editor } from '@tiptap/react';\n\nexport function isTextSelected(editor: Editor) {\n const {\n state: {\n doc,\n selection,\n selection: { empty, from, to },\n },\n } = editor;\n\n // Sometime check for `empty` is not enough.\n // Doubleclick an empty paragraph returns a node size of 2.\n // So we check also for an empty text size.\n const isEmptyTextBlock =\n !doc.textBetween(from, to).length && isTextSelection(selection);\n\n if (empty || isEmptyTextBlock || !editor.isEditable) {\n return false;\n }\n\n return true;\n}\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 { 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 { 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 { getColumnCount, getColumnWidths } from '@/editor/utils/columns';\nimport { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const useColumnsState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n isSectionActive: ctx.editor.isActive('section'),\n isColumnActive: ctx.editor.isActive('column'),\n\n currentVerticalAlignment:\n ctx.editor.getAttributes('column')?.verticalAlign || 'top',\n\n currentShowIfKey: ctx.editor.getAttributes('columns')?.showIfKey || '',\n\n columnsCount: getColumnCount(ctx.editor),\n columnWidths: getColumnWidths(ctx.editor).map((c) => c.width),\n\n currentColumnsGap: ctx.editor.getAttributes('columns')?.gap || 0,\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\n};\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","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","'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 {\n AlignVerticalDistributeCenter,\n AlignVerticalDistributeEnd,\n AlignVerticalDistributeStart,\n} from 'lucide-react';\nimport { BubbleMenuButton } from './bubble-menu-button';\nimport { AllowedColumnVerticalAlign } from '../nodes/columns/column';\n\ntype VerticalAlignmentSwitchProps = {\n alignment: AllowedColumnVerticalAlign;\n onAlignmentChange: (alignment: AllowedColumnVerticalAlign) => void;\n};\n\nexport function VerticalAlignmentSwitch(props: VerticalAlignmentSwitchProps) {\n const { alignment = 'top', onAlignmentChange } = props;\n\n const activeAlignment = {\n top: {\n icon: AlignVerticalDistributeStart,\n tooltip: 'Align Top',\n onClick: () => {\n onAlignmentChange('middle');\n },\n },\n middle: {\n icon: AlignVerticalDistributeCenter,\n tooltip: 'Align Center',\n onClick: () => {\n onAlignmentChange('bottom');\n },\n },\n bottom: {\n icon: AlignVerticalDistributeEnd,\n tooltip: 'Align Bottom',\n onClick: () => {\n onAlignmentChange('top');\n },\n },\n }[alignment];\n\n return (\n <BubbleMenuButton\n icon={activeAlignment.icon}\n tooltip={activeAlignment.tooltip}\n command={activeAlignment.onClick}\n />\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","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","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","'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","'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","export const AUTOCOMPLETE_PASSWORD_MANAGERS_OFF = Object.freeze({\n autoComplete: 'off',\n 'data-1p-ignore': true,\n 'data-form-type': 'other',\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, 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 { 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 { Columns2, SlidersVertical, Columns3 } from 'lucide-react';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\nimport { cn } from '@/editor/utils/classname';\nimport { AUTOCOMPLETE_PASSWORD_MANAGERS_OFF } from '@/editor/utils/constants';\n\ntype ColumnsWidthConfigProps = {\n columnsCount: number;\n onColumnsCountChange: (columns: number) => void;\n\n columnWidths: string[];\n onColumnWidthChange?: (column: number, width: string) => void;\n};\n\nexport function ColumnsWidthConfig(props: ColumnsWidthConfigProps) {\n const {\n columnsCount = 2,\n onColumnsCountChange,\n columnWidths,\n onColumnWidthChange,\n } = props;\n\n return (\n <Popover>\n <PopoverTrigger className=\"mly-flex mly-size-7 mly-items-center mly-justify-center mly-gap-1 mly-rounded-md mly-text-sm data-[state=open]:mly-bg-soft-gray hover:mly-bg-soft-gray\">\n <SlidersVertical className=\"mly-h-3 mly-w-3 mly-stroke-[2.5]\" />\n </PopoverTrigger>\n <PopoverContent\n className=\"mly-w-[300px] 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 <div className=\"mly-grid mly-grid-cols-2 mly-gap-1\">\n <SwitchButton\n onClick={() => onColumnsCountChange(2)}\n isActive={columnsCount === 2}\n >\n <Columns2 className=\"mly-h-4 mly-w-4 mly-stroke-[2.5]\" />\n <span>2 Columns</span>\n </SwitchButton>\n <SwitchButton\n onClick={() => onColumnsCountChange(3)}\n isActive={columnsCount === 3}\n >\n <Columns3 className=\"mly-h-4 mly-w-4 mly-stroke-[2.5]\" />\n <span>3 Columns</span>\n </SwitchButton>\n </div>\n\n <hr className=\"mly-my-0.5 mly-border-gray-200\" />\n\n <div\n className=\"mly-grid mly-gap-1 mly-p-1\"\n style={{ gridTemplateColumns: `repeat(${columnsCount}, 1fr)` }}\n >\n {Array.from({ length: columnsCount }).map((_, index) => {\n const value =\n columnWidths[index] === 'auto' ? '' : columnWidths[index];\n const label =\n columnsCount === 2\n ? index === 0\n ? 'Left'\n : 'Right'\n : index === 0\n ? 'Left'\n : index === 1\n ? 'Middle'\n : 'Right';\n\n return (\n <div className=\"mly-flex mly-flex-col mly-gap-1\" key={index}>\n <span className=\"mly-text-xs mly-text-gray-400\">{label}</span>\n\n <label className=\"mly-relative\">\n <input\n {...AUTOCOMPLETE_PASSWORD_MANAGERS_OFF}\n placeholder=\"auto\"\n min={1}\n max={90}\n type=\"number\"\n className=\"hide-number-controls mly-w-full mly-appearance-none mly-rounded-md mly-bg-soft-gray mly-px-1.5 mly-py-1 mly-pr-6 mly-text-sm mly-tabular-nums mly-outline-none focus:mly-bg-soft-gray focus:mly-outline-none focus:mly-ring-1 focus:mly-ring-midnight-gray/50\"\n value={value}\n onChange={(e) => {\n const value = e.target.value;\n onColumnWidthChange?.(index, value);\n }}\n />\n <span className=\"mly-absolute mly-inset-y-0 mly-right-0 mly-flex mly-aspect-square mly-items-center mly-justify-center mly-text-xs mly-tabular-nums mly-text-gray-500\">\n %\n </span>\n </label>\n </div>\n );\n })}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\ntype SwitchButtonProps = {\n isActive?: boolean;\n onClick?: () => void;\n children: React.ReactNode;\n};\n\nfunction SwitchButton(props: SwitchButtonProps) {\n const { onClick, isActive = false, children } = props;\n\n return (\n <button\n className={cn(\n 'mly-flex mly-h-7 mly-items-center mly-gap-1 mly-rounded-md mly-px-2 mly-text-sm mly-text-gray-500 hover:mly-bg-soft-gray hover:mly-text-midnight-gray',\n isActive && 'mly-bg-soft-gray mly-text-midnight-gray'\n )}\n onClick={onClick}\n >\n {children}\n </button>\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 { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { useColumnsState } from './use-columns-state';\nimport { Divider } from '../ui/divider';\nimport { TooltipProvider } from '../ui/tooltip';\nimport { VerticalAlignmentSwitch } from '../vertical-alignment-switch';\nimport {\n addColumnByIndex,\n removeColumnByIndex,\n updateColumnWidth,\n} from '@/editor/utils/columns';\nimport { ShowPopover } from '../show-popover';\nimport { ColumnsWidthConfig } from './columns-width-config';\nimport { Select } from '../ui/select';\nimport { Space, Trash } from 'lucide-react';\nimport { BubbleMenuButton } from '../bubble-menu-button';\nimport { deleteNode } from '@/editor/utils/delete-node';\nimport { spacing } from '@/editor/utils/spacing';\n\ntype ColumnsBubbleMenuProps = {\n editor: EditorBubbleMenuProps['editor'];\n};\n\nexport function ColumnsBubbleMenuContent(props: ColumnsBubbleMenuProps) {\n const { editor } = props;\n if (!editor) {\n return null;\n }\n\n const state = useColumnsState(editor);\n\n const currentColumnCount = state.columnsCount;\n\n return (\n <TooltipProvider>\n <div className=\"mly-flex mly-items-stretch\">\n {state.isColumnActive && (\n <>\n <ColumnsWidthConfig\n columnsCount={currentColumnCount}\n columnWidths={state.columnWidths}\n onColumnsCountChange={(count) => {\n if (count > currentColumnCount) {\n addColumnByIndex(editor);\n } else {\n removeColumnByIndex(editor);\n }\n }}\n onColumnWidthChange={(index, width) => {\n updateColumnWidth(editor, index, width);\n }}\n />\n\n <Divider />\n </>\n )}\n\n <VerticalAlignmentSwitch\n alignment={state.currentVerticalAlignment}\n onAlignmentChange={(value) => {\n editor.commands.updateColumn({\n verticalAlign: value,\n });\n }}\n />\n\n <Divider />\n\n <Select\n icon={Space}\n label=\"Columns Gap\"\n value={state.currentColumnsGap}\n options={[\n { value: '0', label: 'None' },\n ...spacing.map((space) => ({\n label: space.name,\n value: String(space.value),\n })),\n ]}\n onValueChange={(value) => {\n editor.commands.updateColumns({\n gap: +value,\n });\n }}\n tooltip=\"Columns Gap\"\n />\n\n <Divider />\n\n <BubbleMenuButton\n icon={Trash}\n tooltip=\"Delete Columns\"\n command={() => {\n deleteNode(editor, 'columns');\n }}\n />\n\n <Divider />\n\n <ShowPopover\n showIfKey={state.currentShowIfKey}\n onShowIfKeyValueChange={(value) => {\n editor.commands.updateColumns({\n showIfKey: value,\n });\n }}\n editor={editor}\n />\n </div>\n </TooltipProvider>\n );\n}\n","import { findParentNode, type Editor } from '@tiptap/core';\n\nexport function deleteNode(editor: Editor, nodeType: string) {\n const { state } = editor.view;\n const associatedNode = findParentNode((node) => node.type.name === nodeType)(\n state.selection\n );\n\n if (!associatedNode) {\n return;\n }\n\n const from = associatedNode.pos;\n const to = from + associatedNode.node.nodeSize;\n\n const { tr } = state;\n const transaction = tr.delete(from, to);\n editor.view.dispatch(transaction);\n}\n","export const spacing = [\n {\n name: 'Extra Small',\n short: 'xs',\n value: 4,\n },\n {\n name: 'Small',\n short: 'sm',\n value: 8,\n },\n {\n name: 'Medium',\n short: 'md',\n value: 16,\n },\n {\n name: 'Large',\n short: 'lg',\n value: 32,\n },\n {\n name: 'Extra Large',\n short: 'xl',\n value: 64,\n },\n];\n","import type { Editor } from '@tiptap/core';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport type { NodeSelection } from '@tiptap/pm/state';\n\nimport type { Node } from '@tiptap/pm/model';\nimport { Copy, GripVertical, Plus, Trash2 } from 'lucide-react';\nimport { BaseButton } from './base-button';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from './ui/tooltip';\nimport { Popover, PopoverContent, PopoverTrigger } from './popover';\nimport { Divider } from './ui/divider';\nimport { DragHandle } from '../plugins/drag-handle/drag-handle';\nimport { cn } from '../utils/classname';\n\nexport type ContentMenuProps = {\n editor: Editor;\n};\n\nexport function ContentMenu(props: ContentMenuProps) {\n const { editor } = props;\n\n const [menuOpen, setMenuOpen] = useState(false);\n const [currentNode, setCurrentNode] = useState<Node | null>(null);\n const [currentNodePos, setCurrentNodePos] = useState<number>(-1);\n\n const handleNodeChange = useCallback(\n (data: { node: Node | null; editor: Editor; pos: number }) => {\n if (data.node) {\n setCurrentNode(data.node);\n }\n\n setCurrentNodePos(data.pos);\n },\n [setCurrentNodePos, setCurrentNode]\n );\n\n function duplicateNode() {\n editor.commands.setNodeSelection(currentNodePos);\n const { $anchor } = editor.state.selection;\n const selectedNode =\n $anchor.node(1) || (editor.state.selection as NodeSelection).node;\n editor\n .chain()\n .setMeta('hideDragHandle', true)\n .insertContentAt(\n currentNodePos + (currentNode?.nodeSize || 0),\n selectedNode.toJSON()\n )\n .run();\n\n setMenuOpen(false);\n }\n\n function deleteCurrentNode() {\n editor\n .chain()\n .setMeta('hideDragHandle', true)\n .setNodeSelection(currentNodePos)\n .deleteSelection()\n .run();\n\n setMenuOpen(false);\n }\n\n function handleAddNewNode() {\n if (currentNodePos !== -1) {\n const currentNodeSize = currentNode?.nodeSize || 0;\n const insertPos = currentNodePos + currentNodeSize;\n const currentNodeIsEmptyParagraph =\n currentNode?.type.name === 'paragraph' &&\n currentNode?.content?.size === 0;\n const focusPos = currentNodeIsEmptyParagraph\n ? currentNodePos + 2\n : insertPos + 2;\n editor\n .chain()\n .command(({ dispatch, tr, state }: any) => {\n if (dispatch) {\n if (currentNodeIsEmptyParagraph) {\n tr.insertText('/', currentNodePos, currentNodePos + 1);\n } else {\n tr.insert(\n insertPos,\n state.schema.nodes.paragraph.create(null, [\n state.schema.text('/'),\n ])\n );\n }\n\n return dispatch(tr);\n }\n\n return true;\n })\n .focus(focusPos)\n .run();\n }\n }\n\n useEffect(() => {\n if (menuOpen) {\n editor.commands.setMeta('lockDragHandle', true);\n } else {\n editor.commands.setMeta('lockDragHandle', false);\n }\n\n return () => {\n editor.commands.setMeta('lockDragHandle', false);\n };\n }, [editor, menuOpen]);\n\n return (\n <DragHandle\n pluginKey=\"ContentMenu\"\n editor={editor}\n tippyOptions={{\n offset: [2, 0],\n zIndex: 99,\n }}\n onNodeChange={handleNodeChange}\n className={cn(editor.isEditable ? 'mly-visible' : 'mly-hidden')}\n >\n <TooltipProvider>\n <div className=\"mly-flex mly-items-center mly-pr-1.5\">\n <Tooltip>\n <TooltipTrigger asChild>\n <BaseButton\n variant=\"ghost\"\n size=\"icon\"\n className=\"!mly-size-5 mly-cursor-grab mly-text-gray-500 hover:mly-text-black\"\n onClick={handleAddNewNode}\n type=\"button\"\n >\n <Plus className=\"mly-size-3.5 mly-shrink-0\" />\n </BaseButton>\n </TooltipTrigger>\n <TooltipContent sideOffset={8}>Add new node</TooltipContent>\n </Tooltip>\n <Popover open={menuOpen} onOpenChange={setMenuOpen}>\n <div className=\"mly-relative mly-flex mly-flex-col\">\n <Tooltip>\n <TooltipTrigger asChild>\n <BaseButton\n variant=\"ghost\"\n size=\"icon\"\n className=\"mly-relative mly-z-[1] !mly-size-5 mly-cursor-grab mly-text-gray-500 hover:mly-text-black\"\n onClick={(e) => {\n e.preventDefault();\n setMenuOpen(true);\n editor.commands.setNodeSelection(currentNodePos);\n }}\n type=\"button\"\n >\n <GripVertical className=\"mly-size-3.5 mly-shrink-0\" />\n </BaseButton>\n </TooltipTrigger>\n <TooltipContent sideOffset={8}>Node actions</TooltipContent>\n </Tooltip>\n <PopoverTrigger className=\"mly-absolute mly-left-0 mly-top-0 mly-z-0 mly-h-5 mly-w-5\" />\n </div>\n\n <PopoverContent\n align=\"start\"\n side=\"bottom\"\n sideOffset={8}\n className=\"mly-flex mly-w-max mly-flex-col mly-rounded-md mly-p-1\"\n >\n <BaseButton\n variant=\"ghost\"\n onClick={duplicateNode}\n className=\"mly-h-auto mly-justify-start mly-gap-2 !mly-rounded mly-px-2 mly-py-1 mly-text-sm mly-font-normal\"\n >\n <Copy className=\"mly-size-[15px] mly-shrink-0\" />\n Duplicate\n </BaseButton>\n <Divider type=\"horizontal\" />\n <BaseButton\n onClick={deleteCurrentNode}\n className=\"mly-h-auto mly-justify-start mly-gap-2 !mly-rounded mly-bg-red-100 mly-px-2 mly-py-1 mly-text-sm mly-font-normal mly-text-red-600 hover:mly-bg-red-200 focus:mly-bg-red-200\"\n >\n <Trash2 className=\"mly-size-[15px] mly-shrink-0\" />\n Delete\n </BaseButton>\n </PopoverContent>\n </Popover>\n </div>\n </TooltipProvider>\n </DragHandle>\n );\n}\n","import React, { useState, useRef, useEffect } from 'react';\n\nimport { Node } from '@tiptap/pm/model';\nimport { ReactNode } from 'react';\nimport { Editor } from '@tiptap/core';\nimport { Props as TippyProps } from 'tippy.js';\nimport {\n DragHandlePlugin,\n dragHandlePluginDefaultKey,\n} from './drag-handle-plugin';\n\nexport type DragHandleProps = {\n editor: Editor;\n pluginKey?: string;\n className?: string;\n tippyOptions?: Partial<TippyProps>;\n onNodeChange?: (data: {\n node: Node | null;\n editor: Editor;\n pos: number;\n }) => void;\n children: ReactNode;\n};\n\nexport function DragHandle(props: DragHandleProps) {\n const {\n className = 'drag-handle',\n children,\n editor,\n pluginKey = dragHandlePluginDefaultKey,\n onNodeChange,\n tippyOptions = {},\n } = props;\n\n const [element, setElement] = useState<HTMLDivElement | null>(null);\n const pluginRef = useRef<ReturnType<typeof DragHandlePlugin> | null>(null);\n\n useEffect(() => {\n if (!element) {\n return () => {\n pluginRef.current = null;\n };\n }\n\n if (editor.isDestroyed) {\n return () => {\n pluginRef.current = null;\n };\n }\n\n if (!pluginRef.current) {\n pluginRef.current = DragHandlePlugin({\n editor,\n element,\n pluginKey,\n tippyOptions,\n onNodeChange,\n });\n\n editor.registerPlugin(pluginRef.current);\n }\n\n return () => {\n editor.unregisterPlugin(pluginKey);\n pluginRef.current = null;\n };\n }, [element, editor, onNodeChange, pluginKey]);\n\n return (\n <div className={className} ref={setElement}>\n {children}\n </div>\n );\n}\n","/**\n * This plugin is a modified version of the package\n * LINK: https://www.npmjs.com/package/echo-drag-handle-plugin.\n * The original package was not working as expected while migrating.\n *\n * I will be building a new version from scratch for the drag handle plugin\n * for better usability and compatibility for me.\n * Until then, I will be using this modified version.\n */\n\nimport {\n SelectionRange,\n Selection,\n PluginKey,\n Plugin,\n EditorState,\n} from '@tiptap/pm/state';\nimport tippy, { Instance, Tippy } from 'tippy.js';\nimport {\n ySyncPluginKey,\n absolutePositionToRelativePosition,\n} from 'y-prosemirror';\nimport { NodeRange } from '@tiptap/pm/model';\nimport { ResolvedPos, Node as TNode } from '@tiptap/pm/model';\nimport { Mapping } from '@tiptap/pm/transform';\nimport { Editor } from '@tiptap/core';\nimport { Props as TippyProps } from 'tippy.js';\n\nfunction getSelectionRanges(\n state: ResolvedPos,\n range: ResolvedPos,\n depth?: number\n): SelectionRange[] {\n const ranges: SelectionRange[] = [];\n const root = state.node(0);\n depth =\n typeof depth === 'number' && depth >= 0\n ? depth\n : state.sameParent(range)\n ? Math.max(0, state.sharedDepth(range.pos) - 1)\n : state.sharedDepth(range.pos);\n const nodeRange = new NodeRange(state, range, depth);\n const startIndex =\n nodeRange.depth === 0 ? 0 : root.resolve(nodeRange.start).posAtIndex(0);\n nodeRange.parent.forEach((size, offset) => {\n const from = startIndex + offset;\n const to = from + size.nodeSize;\n if (from < nodeRange.start || from >= nodeRange.end) return;\n const selectionRange = new SelectionRange(\n root.resolve(from),\n root.resolve(to)\n );\n ranges.push(selectionRange);\n });\n return ranges;\n}\n\nclass NodeRangeBookmark {\n anchor: number;\n head: number;\n constructor(anchor: number, head: number) {\n this.anchor = anchor;\n this.head = head;\n }\n map(mapping: Mapping) {\n return new NodeRangeBookmark(\n mapping.map(this.anchor),\n mapping.map(this.head)\n );\n }\n resolve(doc: TNode) {\n const e = doc.resolve(this.anchor);\n const o = doc.resolve(this.head);\n return new NodeRangeSelection(e, o);\n }\n}\n\nclass NodeRangeSelection extends Selection {\n depth: number | undefined;\n\n constructor(t: ResolvedPos, e: ResolvedPos, o?: number, s: number = 1) {\n const { doc: r } = t;\n const n = t === e;\n const i = t.pos === r.content.size && e.pos === r.content.size;\n const a = n && !i ? r.resolve(e.pos + (s > 0 ? 1 : -1)) : e;\n const c = n && i ? r.resolve(t.pos - (s > 0 ? 1 : -1)) : t;\n const d = getSelectionRanges(c.min(a), c.max(a), o);\n super(\n a.pos >= t.pos ? d[0].$from : d[d.length - 1].$to,\n a.pos >= t.pos ? d[d.length - 1].$to : d[0].$from,\n d\n );\n this.depth = o;\n }\n get $to() {\n return this.ranges[this.ranges.length - 1].$to;\n }\n eq(other: Selection): boolean {\n return (\n other instanceof NodeRangeSelection &&\n other.$from.pos === this.$from.pos &&\n other.$to.pos === this.$to.pos\n );\n }\n // @ts-ignore\n map(doc: TNode, mapping: Mapping) {\n const o = doc.resolve(mapping.map(this.anchor));\n const s = doc.resolve(mapping.map(this.head));\n return new NodeRangeSelection(o, s);\n }\n toJSON() {\n return { type: 'nodeRange', anchor: this.anchor, head: this.head };\n }\n get isForwards() {\n return this.head >= this.anchor;\n }\n get isBackwards() {\n return !this.isForwards;\n }\n extendBackwards() {\n const { doc: t } = this.$from;\n if (this.isForwards && this.ranges.length > 1) {\n const t = this.ranges.slice(0, -1);\n const e = t[0].$from;\n const o = t[t.length - 1].$to;\n return new NodeRangeSelection(e, o, this.depth);\n }\n const e = this.ranges[0];\n const o = t.resolve(Math.max(0, e.$from.pos - 1));\n return new NodeRangeSelection(this.$anchor, o, this.depth);\n }\n extendForwards() {\n const { doc: t } = this.$from;\n if (this.isBackwards && this.ranges.length > 1) {\n const t = this.ranges.slice(1);\n const e = t[0].$from;\n const o = t[t.length - 1].$to;\n return new NodeRangeSelection(o, e, this.depth);\n }\n const e = this.ranges[this.ranges.length - 1];\n const o = t.resolve(Math.min(t.content.size, e.$to.pos + 1));\n return new NodeRangeSelection(this.$anchor, o, this.depth);\n }\n static fromJSON(doc: TNode, json: any) {\n return new NodeRangeSelection(\n doc.resolve(json.anchor),\n doc.resolve(json.head)\n );\n }\n static create(\n doc: TNode,\n anchor: number,\n head: number,\n depth?: number,\n bias: number = 1\n ) {\n return new this(doc.resolve(anchor), doc.resolve(head), depth, bias);\n }\n // @ts-ignore\n getBookmark(): NodeRangeBookmark {\n return new NodeRangeBookmark(this.anchor, this.head);\n }\n}\n\nfunction cloneElement(node: HTMLElement) {\n const clonedNode = node.cloneNode(true) as HTMLElement;\n const originalElements = [\n node,\n ...Array.from(node.getElementsByTagName('*')),\n ];\n const clonedElements = [\n clonedNode,\n ...Array.from(clonedNode.getElementsByTagName('*')),\n ];\n\n originalElements.forEach((element, index) => {\n const clonedElement = clonedElements[index];\n\n if (\n clonedElement instanceof HTMLElement &&\n element instanceof HTMLElement\n ) {\n clonedElement.style.cssText = (function (element: HTMLElement) {\n let styles = '';\n const computedStyles = getComputedStyle(element);\n for (let i = 0; i < computedStyles.length; i += 1) {\n styles += `${computedStyles[i]}:${computedStyles.getPropertyValue(computedStyles[i])};`;\n }\n return styles;\n })(element);\n }\n });\n\n return clonedNode;\n}\n\nfunction getComputedStyles(node: Element, property: any) {\n return window.getComputedStyle(node)[property];\n}\nfunction minMax(value = 0, min = 0, max = 0) {\n return Math.min(Math.max(value, min), max);\n}\nfunction removeNode(node: HTMLElement) {\n if (node.parentNode !== null && node.parentNode !== undefined) {\n node.parentNode.removeChild(node);\n }\n}\n\nexport type FindElementNextToCoords = {\n x: number;\n y: number;\n direction?: 'left' | 'right';\n editor: Editor;\n};\n\nconst findElementNextToCoords = (options: FindElementNextToCoords) => {\n const { x, y, direction, editor } = options;\n let resultElement = null;\n let resultNode = null;\n let d = null;\n let l = x;\n for (; null === resultNode && l < window.innerWidth && l > 0; ) {\n const elements = document.elementsFromPoint(l, y);\n const index = elements.findIndex((el) =>\n el.classList.contains('ProseMirror')\n );\n const filteredElements = elements.slice(0, index);\n if (filteredElements.length > 0) {\n const element = filteredElements[0];\n resultElement = element;\n d = editor.view.posAtDOM(element, 0);\n if (d >= 0) {\n resultNode = editor.state.doc.nodeAt(Math.max(d - 1, 0));\n if (resultNode === null || resultNode.isText) {\n resultNode = editor.state.doc.nodeAt(Math.max(d - 1, 0));\n }\n if (!resultNode) {\n resultNode = editor.state.doc.nodeAt(Math.max(d, 0));\n }\n break;\n }\n }\n if (direction === 'left') {\n l -= 1;\n } else {\n l += 1;\n }\n }\n return { resultElement, resultNode, pos: d !== null ? d : null };\n};\n\nfunction getSelectionRangesNearCursor(e: MouseEvent, t: Editor) {\n const { doc: n } = t.view.state,\n o = findElementNextToCoords({\n editor: t,\n x: e.clientX,\n y: e.clientY,\n direction: 'right',\n });\n if (!o.resultNode || null === o.pos) return [];\n const r = e.clientX,\n i = (function (e, t, n) {\n const o = parseInt(getComputedStyles(e.dom, 'paddingLeft'), 10),\n r = parseInt(getComputedStyles(e.dom, 'paddingRight'), 10),\n i = parseInt(getComputedStyles(e.dom, 'borderLeftWidth'), 10),\n s = parseInt(getComputedStyles(e.dom, 'borderLeftWidth'), 10),\n d = e.dom.getBoundingClientRect();\n return { left: minMax(t, d.left + o + i, d.right - r - s), top: n };\n })(t.view, r, e.clientY),\n s = t.view.posAtCoords(i);\n if (!s) return [];\n const { pos: d } = s;\n if (!n.resolve(d).parent) return [];\n const a = n.resolve(o.pos),\n p = n.resolve(o.pos + 1);\n return getSelectionRanges(a, p, 0);\n}\nconst getPreviousNodeStartPosition = (e: TNode, t: number) => {\n const n = e.resolve(t),\n { depth: o } = n;\n if (0 === o) return t;\n return n.pos - n.parentOffset - 1;\n};\nconst getAncestorNodeAtDepth = (e: TNode, t: number) => {\n const n = e.nodeAt(t),\n o = e.resolve(t);\n let { depth: r } = o,\n i = n;\n for (; r > 0; ) {\n const e = o.node(r);\n (r -= 1), 0 === r && (i = e);\n }\n return i;\n};\nconst getOuterNode = (doc: EditorState, pos: number) => {\n const n = ySyncPluginKey.getState(doc);\n return n\n ? absolutePositionToRelativePosition(pos, n.type, n.binding.mapping)\n : null;\n};\n\n// @ts-ignore\nconst getOuterNodePos = (e, t) => {\n let n = t;\n for (; n && n.parentNode && n.parentNode !== e.dom; ) n = n.parentNode;\n return n;\n};\n\ntype DragHandlePluginOptions = {\n pluginKey?: PluginKey | string;\n element: HTMLElement;\n editor: Editor;\n tippyOptions?: Partial<TippyProps>;\n onNodeChange?: (data: {\n editor: Editor;\n node: TNode | null;\n pos: number;\n }) => void;\n};\n\nexport const dragHandlePluginDefaultKey = new PluginKey('dragHandle');\nexport function DragHandlePlugin(\n options: DragHandlePluginOptions\n): Plugin<{ locked: boolean }> {\n const {\n pluginKey: e = dragHandlePluginDefaultKey,\n element,\n editor,\n tippyOptions,\n onNodeChange,\n } = options;\n\n const container = document.createElement('div');\n let tippyInstance: Instance | null = null;\n let x = false;\n let currentNode: TNode | null = null;\n let lastNodePos = -1;\n element.addEventListener('dragstart', (e) => {\n const { view } = editor;\n if (!e.dataTransfer) return;\n const { empty, $from, $to } = view.state.selection;\n const s = getSelectionRangesNearCursor(e, editor);\n const d = getSelectionRanges($from, $to, 0);\n const c = d.some((e) =>\n s.find((t) => t.$from === e.$from && t.$to === e.$to)\n );\n const u = empty || !c ? s : d;\n if (!u.length) return;\n const { tr: g } = view.state;\n const h = document.createElement('div');\n const y = u[0].$from.pos;\n const v = u[u.length - 1].$to.pos;\n const C = NodeRangeSelection.create(view.state.doc, y, v);\n const E = C.content();\n u.forEach((e) => {\n const t = cloneElement(view?.nodeDOM(e.$from.pos) as HTMLElement);\n h.append(t);\n });\n h.style.position = 'absolute';\n h.style.top = '-10000px';\n document.body.append(h);\n e.dataTransfer.clearData();\n e.dataTransfer.setDragImage(h, 0, 0);\n view.dragging = { slice: E, move: true };\n g.setSelection(C as unknown as Selection);\n view.dispatch(g);\n document.addEventListener('drop', () => removeNode(h), { once: true });\n setTimeout(() => {\n element && (element.style.pointerEvents = 'none');\n }, 0);\n });\n element.addEventListener('dragend', () => {\n element && (element.style.pointerEvents = 'auto');\n });\n\n return new Plugin({\n key: typeof e === 'string' ? new PluginKey(e) : e,\n state: {\n init: () => ({ locked: false }) as { locked: boolean },\n apply(e, t, n, o) {\n const l = e.getMeta('lockDragHandle');\n const a = e.getMeta('hideDragHandle');\n if ((undefined !== l && (x = l), a && tippyInstance)) {\n return (\n tippyInstance?.hide(),\n (x = false),\n (currentNode = null),\n (lastNodePos = -1),\n null == onNodeChange ||\n onNodeChange({ editor: editor, node: null, pos: -1 }),\n t\n );\n }\n if (e.docChanged && -1 !== lastNodePos && element && tippyInstance) {\n const t = e.mapping.map(lastNodePos);\n t !== lastNodePos &&\n ((lastNodePos = t), getOuterNode(o, lastNodePos));\n }\n return t;\n },\n },\n view: (e) => {\n var t;\n return (\n (element.draggable = true),\n (element.style.pointerEvents = 'auto'),\n null === (t = editor.view.dom.parentElement) ||\n undefined === t ||\n t.appendChild(container),\n container.appendChild(element),\n (container.style.pointerEvents = 'none'),\n (container.style.position = 'absolute'),\n (container.style.top = '0'),\n (container.style.left = '0'),\n (tippyInstance = tippy(e.dom, {\n getReferenceClientRect: null,\n interactive: true,\n trigger: 'manual',\n placement: 'left-start',\n hideOnClick: false,\n duration: 100,\n zIndex: 10,\n popperOptions: {\n modifiers: [\n { name: 'flip', enabled: false },\n {\n name: 'preventOverflow',\n options: { rootBoundary: 'document', mainAxis: false },\n },\n ],\n },\n ...tippyOptions,\n appendTo: container,\n content: element,\n })),\n {\n update(t, n) {\n if (!element || !tippyInstance) return;\n if (\n ((element.draggable = !x),\n e.state.doc.eq(n.doc) || -1 === lastNodePos)\n )\n return;\n let o = e.nodeDOM(lastNodePos) as HTMLElement;\n if (((o = getOuterNodePos(e, o)), o === e.dom)) return;\n if (1 !== (null == o ? undefined : o.nodeType)) return;\n const r = e.posAtDOM(o, 0),\n s = getAncestorNodeAtDepth(editor.state.doc, r);\n if (s !== currentNode) {\n const t = getPreviousNodeStartPosition(editor.state.doc, r);\n (currentNode = s),\n (lastNodePos = t),\n getOuterNode(e.state, lastNodePos),\n null == onNodeChange ||\n onNodeChange({\n editor: editor,\n node: currentNode as TNode,\n pos: lastNodePos,\n }),\n tippyInstance.setProps({\n getReferenceClientRect: () => o?.getBoundingClientRect(),\n }),\n tippyInstance.show();\n }\n },\n destroy() {\n null == tippyInstance || tippyInstance.destroy(),\n element && removeNode(container);\n },\n }\n );\n },\n props: {\n handleDOMEvents: {\n mouseleave: (e, event) => (\n x ||\n (event.target &&\n !container.contains(event?.relatedTarget as Node) &&\n (null == tippyInstance || tippyInstance.hide(),\n (currentNode = null),\n (lastNodePos = -1),\n null == onNodeChange ||\n onNodeChange({ editor: editor, node: null, pos: -1 }))),\n false\n ),\n mousemove(e, t) {\n if (!element || !tippyInstance || x) return false;\n const n = findElementNextToCoords({\n x: t.clientX,\n y: t.clientY,\n direction: 'right',\n editor: editor,\n });\n if (!n.resultElement) return false;\n let o = n.resultElement;\n if (((o = getOuterNodePos(e, o)), o === e.dom)) return false;\n if (1 !== (null == o ? undefined : o.nodeType)) return false;\n const r = e.posAtDOM(o, 0),\n s = getAncestorNodeAtDepth(editor.state.doc, r);\n if (s !== currentNode) {\n const t = getPreviousNodeStartPosition(editor.state.doc, r);\n (currentNode = s),\n (lastNodePos = t),\n getOuterNode(e.state, lastNodePos),\n null == onNodeChange ||\n onNodeChange({\n editor: editor,\n node: currentNode,\n pos: lastNodePos,\n }),\n tippyInstance.setProps({\n getReferenceClientRect: () => o.getBoundingClientRect(),\n }),\n tippyInstance.show();\n }\n return false;\n },\n },\n },\n });\n}\n","import { useMemo } from 'react';\nimport { Editor as EditorType } from '@tiptap/core';\nimport {\n AlignCenter,\n AlignLeft,\n AlignRight,\n BoldIcon,\n EraserIcon,\n ItalicIcon,\n LinkIcon,\n SeparatorHorizontal,\n StrikethroughIcon,\n UnderlineIcon,\n} from 'lucide-react';\n\nimport { EditorProps } from '@/editor';\n\nimport { BubbleMenuButton } from './bubble-menu-button';\nimport { BubbleMenuItem } from './text-menu/text-bubble-menu';\n\ninterface EditorMenuItem extends BubbleMenuItem {\n group: 'alignment' | 'image' | 'mark' | 'custom' | 'email';\n}\n\ntype EditorMenuBarProps = {\n config: EditorProps['config'];\n editor: EditorType;\n};\n\nexport const EditorMenuBar = (props: EditorMenuBarProps) => {\n const { editor, config } = props;\n\n const items: EditorMenuItem[] = useMemo(\n () => [\n {\n name: 'bold',\n command: () => editor.chain().focus().toggleBold().run(),\n isActive: () => editor.isActive('bold'),\n group: 'mark',\n icon: BoldIcon,\n },\n {\n name: 'italic',\n command: () => editor.chain().focus().toggleItalic().run(),\n isActive: () => editor.isActive('italic'),\n group: 'mark',\n icon: ItalicIcon,\n },\n {\n name: 'underline',\n command: () => editor.chain().focus().toggleUnderline().run(),\n isActive: () => editor.isActive('underline'),\n group: 'mark',\n icon: UnderlineIcon,\n },\n {\n name: 'strike',\n command: () => editor.chain().focus().toggleStrike().run(),\n isActive: () => editor.isActive('strike'),\n group: 'mark',\n icon: StrikethroughIcon,\n },\n {\n name: 'delete-line',\n command: () =>\n editor.chain().focus().selectParentNode().deleteSelection().run(),\n isActive: () => false,\n group: 'mark',\n icon: EraserIcon,\n },\n {\n name: 'divider',\n command: () => editor.chain().focus().setHorizontalRule().run(),\n isActive: () => editor.isActive('horizontalRule'),\n group: 'custom',\n icon: SeparatorHorizontal,\n },\n {\n name: 'link',\n command: () => {\n const previousUrl = editor.getAttributes('link').href;\n const url = window.prompt('URL', previousUrl);\n // If the user cancels the prompt, we don't want to toggle the link\n if (url === null) return;\n // If the user deletes the URL entirely, we'll unlink the selected text\n if (url === '') {\n editor.chain().focus().extendMarkRange('link').unsetLink().run();\n return;\n }\n\n // Otherwise, we set the link to the given URL\n editor\n .chain()\n .focus()\n .extendMarkRange('link')\n .setLink({ href: url })\n .run();\n },\n isActive: () => editor.isActive('link'),\n group: 'custom',\n icon: LinkIcon,\n },\n {\n name: 'left',\n command: () => editor.chain().focus().setTextAlign('left').run(),\n isActive: () => editor.isActive({ textAlign: 'left' }),\n group: 'alignment',\n icon: AlignLeft,\n },\n {\n name: 'center',\n command: () => editor.chain().focus().setTextAlign('center').run(),\n isActive: () => editor.isActive({ textAlign: 'center' }),\n group: 'alignment',\n icon: AlignCenter,\n },\n {\n name: 'right',\n command: () => editor.chain().focus().setTextAlign('right').run(),\n isActive: () => editor.isActive({ textAlign: 'right' }),\n group: 'alignment',\n icon: AlignRight,\n },\n ],\n [editor]\n );\n\n const groups = useMemo(\n () =>\n items.reduce((acc, item) => {\n if (!acc.includes(item.group)) {\n acc.push(item.group);\n }\n return acc;\n }, [] as string[]),\n [items]\n );\n\n if (!editor) {\n return null;\n }\n\n return (\n <div\n className={`mly-flex mly-items-center mly-gap-3 ${config?.toolbarClassName}`}\n >\n {groups.map((group, index) => (\n <div\n key={index}\n className=\"mly-flex mly-items-center mly-gap-1 mly-rounded-md mly-border mly-bg-white mly-p-1\"\n >\n {items\n .filter((item) => item.group === group)\n .map((item, index) => (\n <BubbleMenuButton key={index} {...item} />\n ))}\n </div>\n ))}\n </div>\n );\n};\n","import {\n DEFAULT_RENDER_VARIABLE_FUNCTION,\n useMailyContext,\n} from '@/editor/provider';\nimport { cn } from '@/editor/utils/classname';\nimport { isTextSelected } from '@/editor/utils/is-text-selected';\nimport { BubbleMenu, findChildren } from '@tiptap/react';\nimport { InfoIcon } from 'lucide-react';\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport { sticky } from 'tippy.js';\nimport { getRenderContainer } from '../../utils/get-render-container';\nimport { ShowPopover } from '../show-popover';\nimport { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { Divider } from '../ui/divider';\nimport { InputAutocomplete } from '../ui/input-autocomplete';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '../ui/tooltip';\nimport { useRepeatState } from './use-repeat-state';\nimport { getClosestNodeByName } from '@/editor/utils/columns';\nimport { processVariables } from '@/editor/utils/variable';\n\nexport function RepeatBubbleMenu(props: EditorBubbleMenuProps) {\n const { appendTo, editor } = props;\n if (!editor) {\n return null;\n }\n\n const state = useRepeatState(editor);\n\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor!, 'repeat');\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n shouldShow: ({ editor }) => {\n const activeForNode = getClosestNodeByName(editor, 'repeat');\n const sectionNodeChildren = activeForNode\n ? findChildren(activeForNode?.node, (node) => {\n return node.type.name === 'section';\n })?.[0]\n : null;\n const hasActiveSectionNodeChildren =\n sectionNodeChildren && editor.isActive('section');\n\n if (\n isTextSelected(editor) ||\n hasActiveSectionNodeChildren ||\n !editor.isEditable\n ) {\n return false;\n }\n\n return editor.isActive('repeat');\n },\n tippyOptions: {\n offset: [0, 8],\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: false }],\n },\n getReferenceClientRect,\n appendTo: () => appendTo?.current,\n plugins: [sticky],\n sticky: 'popper',\n maxWidth: 'auto',\n },\n pluginKey: 'repeatBubbleMenu',\n };\n\n const { variables = [], renderVariable = DEFAULT_RENDER_VARIABLE_FUNCTION } =\n useMailyContext();\n const inputRef = useRef<HTMLInputElement>(null);\n const [isUpdatingKey, setIsUpdatingKey] = useState(false);\n\n const eachKey = state?.each || '';\n const autoCompleteOptions = useMemo(() => {\n return processVariables(variables, {\n query: eachKey || '',\n editor,\n from: 'repeat-variable',\n }).map((variable) => variable.name);\n }, [variables, eachKey, editor]);\n\n const isValidEachKey = eachKey;\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-items-stretch mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n <div className=\"mly-flex mly-items-center mly-gap-1.5 mly-px-1.5 mly-text-sm mly-leading-none\">\n Repeat\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-[260px]\"\n align=\"start\"\n >\n Ensure the selected variable is iterable, such as an array of\n objects.\n </TooltipContent>\n </Tooltip>\n </div>\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: state?.each,\n valid: isValidEachKey,\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 placeholder=\"ie. payload.items\"\n value={state?.each || ''}\n onValueChange={(value) => {\n editor.commands.updateRepeat({\n each: value,\n });\n }}\n onOutsideClick={() => {\n setIsUpdatingKey(false);\n }}\n onSelectOption={(value) => {\n editor.commands.updateRepeat({\n each: value,\n });\n setIsUpdatingKey(false);\n }}\n autoCompleteOptions={autoCompleteOptions}\n ref={inputRef}\n />\n </form>\n )}\n\n <Divider />\n <ShowPopover\n showIfKey={state.currentShowIfKey}\n onShowIfKeyValueChange={(value) => {\n editor.commands.updateRepeat({\n showIfKey: value,\n });\n }}\n editor={editor}\n />\n </TooltipProvider>\n </BubbleMenu>\n );\n}\n","import { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const useRepeatState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n each: ctx.editor.getAttributes('repeat')?.each,\n currentShowIfKey: ctx.editor.getAttributes('repeat')?.showIfKey || '',\n\n isSectionActive: ctx.editor.isActive('section'),\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\n};\n","import { BubbleMenu } from '@tiptap/react';\nimport { ArrowUpRight, ImageDown } from 'lucide-react';\nimport { AlignmentSwitch } from '../alignment-switch';\nimport { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { Divider } from '../ui/divider';\nimport { LinkInputPopover } from '../ui/link-input-popover';\nimport { Select } from '../ui/select';\nimport { TooltipProvider } from '../ui/tooltip';\nimport { ImageSize } from './image-size';\nimport { useImageState } from './use-image-state';\nimport { AllowedLogoSize, allowedLogoSize } from '@/editor/nodes/logo/logo';\nimport { sticky } from 'tippy.js';\n\nexport function ImageBubbleMenu(props: EditorBubbleMenuProps) {\n const { editor, appendTo } = props;\n if (!editor) {\n return null;\n }\n\n const state = useImageState(editor);\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n shouldShow: ({ editor }) => {\n if (!editor.isEditable) {\n return false;\n }\n\n return editor.isActive('logo') || editor.isActive('image');\n },\n tippyOptions: {\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: false }],\n },\n plugins: [sticky],\n sticky: 'popper',\n maxWidth: '100%',\n },\n };\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n {state.isLogoActive && state.imageSrc && (\n <>\n <Select\n label=\"Size\"\n tooltip=\"Size\"\n value={state.logoSize}\n options={allowedLogoSize.map((size) => ({\n value: size,\n label: size,\n }))}\n onValueChange={(value) => {\n editor\n ?.chain()\n .focus()\n .setLogoAttributes({ size: value as AllowedLogoSize })\n .run();\n }}\n />\n\n <Divider />\n </>\n )}\n\n <div className=\"mly-flex mly-space-x-0.5\">\n <AlignmentSwitch\n alignment={state.alignment}\n onAlignmentChange={(alignment) => {\n const isCurrentNodeImage = state.isImageActive;\n if (!isCurrentNodeImage) {\n editor?.chain().focus().setLogoAttributes({ alignment }).run();\n } else {\n editor\n ?.chain()\n .focus()\n .updateAttributes('image', { alignment })\n .run();\n }\n }}\n />\n\n <LinkInputPopover\n defaultValue={state?.imageSrc ?? ''}\n onValueChange={(value, isVariable) => {\n if (state.isLogoActive) {\n editor\n ?.chain()\n .setLogoAttributes({\n src: value,\n isSrcVariable: isVariable ?? false,\n })\n .run();\n } else {\n editor\n ?.chain()\n .updateAttributes('image', {\n src: value,\n isSrcVariable: isVariable ?? false,\n })\n .run();\n }\n }}\n tooltip=\"Source URL\"\n icon={ImageDown}\n editor={editor}\n isVariable={state.isSrcVariable}\n />\n\n {state.isImageActive && (\n <LinkInputPopover\n defaultValue={state?.imageExternalLink ?? ''}\n onValueChange={(value, isVariable) => {\n editor\n ?.chain()\n .updateAttributes('image', {\n externalLink: value,\n isExternalLinkVariable: isVariable ?? false,\n })\n .run();\n }}\n tooltip=\"External URL\"\n editor={editor}\n isVariable={state.isExternalLinkVariable}\n />\n )}\n </div>\n\n {state.isImageActive && state.imageSrc && (\n <>\n <Divider />\n\n <div className=\"mly-flex mly-space-x-0.5\">\n <ImageSize\n dimension=\"width\"\n value={state?.width ?? 0}\n onValueChange={(value) => {\n editor\n ?.chain()\n .updateAttributes('image', { width: value })\n .run();\n }}\n />\n <ImageSize\n dimension=\"height\"\n value={state?.height ?? 0}\n onValueChange={(value) => {\n editor\n ?.chain()\n .updateAttributes('image', { height: value })\n .run();\n }}\n />\n </div>\n </>\n )}\n </TooltipProvider>\n </BubbleMenu>\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 {\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","import { AUTOCOMPLETE_PASSWORD_MANAGERS_OFF } from '@/editor/utils/constants';\n\ntype ImageSizeProps = {\n value: string;\n onValueChange: (value: string) => void;\n dimension: 'width' | 'height';\n};\n\nexport function ImageSize(props: ImageSizeProps) {\n const { value, onValueChange, dimension } = props;\n\n return (\n <label className=\"mly-relative mly-flex mly-items-center\">\n <span className=\"mly-absolute mly-inset-y-0 mly-left-2 mly-flex mly-items-center mly-text-xs mly-leading-none mly-text-gray-400\">\n {dimension === 'width' ? 'W' : 'H'}\n </span>\n <input\n {...AUTOCOMPLETE_PASSWORD_MANAGERS_OFF}\n className=\"hide-number-controls mly-h-auto mly-max-w-20 mly-appearance-none mly-border-0 mly-border-none mly-p-1 mly-px-[26px] mly-text-sm mly-uppercase mly-tabular-nums mly-outline-none focus-visible:mly-outline-none\"\n type=\"number\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n />\n <span className=\"mly-absolute mly-inset-y-0 mly-right-1 mly-flex mly-items-center mly-text-xs mly-leading-none mly-text-gray-400\">\n PX\n </span>\n </label>\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 { 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 { 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 { DEFAULT_LOGO_SIZE } from '@/editor/nodes/logo/logo';\nimport { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const useImageState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: ({ editor }) => {\n return {\n width: editor.getAttributes('image').width,\n height: editor.getAttributes('image').height,\n isImageActive: editor.isActive('image'),\n isLogoActive: editor.isActive('logo'),\n alignment:\n editor.getAttributes('image')?.alignment ||\n editor.getAttributes('logo')?.alignment,\n\n logoSize: editor.getAttributes('logo')?.size || DEFAULT_LOGO_SIZE,\n imageSrc:\n editor.getAttributes('image')?.src ||\n editor.getAttributes('logo')?.src ||\n '',\n isSrcVariable:\n editor.getAttributes('image')?.isSrcVariable ??\n editor.getAttributes('logo')?.isSrcVariable ??\n false,\n imageExternalLink: editor.getAttributes('image')?.externalLink || '',\n isExternalLinkVariable:\n editor.getAttributes('image')?.isExternalLinkVariable,\n\n currentShowIfKey:\n editor.getAttributes('image')?.showIfKey ||\n editor.getAttributes('logo')?.showIfKey ||\n '',\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\n};\n","import { deleteNode } from '@/editor/utils/delete-node';\nimport { isTextSelected } from '@/editor/utils/is-text-selected';\nimport { BubbleMenu, findChildren } from '@tiptap/react';\nimport { ChevronUp, Trash } from 'lucide-react';\nimport { useCallback } from 'react';\nimport { sticky } from 'tippy.js';\nimport { getRenderContainer } from '../../utils/get-render-container';\nimport { AlignmentSwitch } from '../alignment-switch';\nimport { BaseButton } from '../base-button';\nimport { BubbleMenuButton } from '../bubble-menu-button';\nimport { ColumnsBubbleMenuContent } from '../column-menu/columns-bubble-menu-content';\nimport { BorderColor } from '../icons/border-color';\nimport { MarginIcon } from '../icons/margin-icon';\nimport { PaddingIcon } from '../icons/padding-icon';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\nimport { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { ColorPicker } from '../ui/color-picker';\nimport { Divider } from '../ui/divider';\nimport { Select } from '../ui/select';\nimport { TooltipProvider } from '../ui/tooltip';\nimport { useSectionState } from './use-section-state';\nimport { getClosestNodeByName } from '@/editor/utils/columns';\nimport { spacing } from '@/editor/utils/spacing';\n\nexport function SectionBubbleMenu(props: EditorBubbleMenuProps) {\n const { appendTo, editor } = props;\n if (!editor) {\n return null;\n }\n\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor!, 'section');\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n shouldShow: ({ editor }) => {\n const activeSectionNode = getClosestNodeByName(editor, 'section');\n const repeatNodeChildren = activeSectionNode\n ? findChildren(activeSectionNode?.node, (node) => {\n return node.type.name === 'repeat';\n })?.[0]\n : null;\n const inlineImageNodeChildren = activeSectionNode\n ? findChildren(activeSectionNode?.node, (node) => {\n return node.type.name === 'inlineImage';\n })?.[0]\n : null;\n const hasActiveRepeatNodeChildren =\n repeatNodeChildren && editor.isActive('repeat');\n const hasActiveInlineImageNodeChildren =\n inlineImageNodeChildren && editor.isActive('inlineImage');\n\n if (\n isTextSelected(editor) ||\n hasActiveRepeatNodeChildren ||\n hasActiveInlineImageNodeChildren ||\n !editor.isEditable\n ) {\n return false;\n }\n\n return editor.isActive('section');\n },\n tippyOptions: {\n offset: [0, 8],\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: false }],\n },\n getReferenceClientRect,\n appendTo: () => appendTo?.current,\n plugins: [sticky],\n sticky: 'popper',\n maxWidth: 'auto',\n },\n pluginKey: 'sectionBubbleMenu',\n };\n\n const state = useSectionState(editor);\n\n const borderRadiusOptions = [\n { value: '0', label: 'Sharp' },\n { value: '6', label: 'Smooth' },\n { value: '9999', label: 'Round' },\n ];\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-items-stretch mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n <AlignmentSwitch\n alignment={state.currentAlignment}\n onAlignmentChange={(alignment) => {\n editor?.commands?.updateSection({\n align: alignment,\n });\n }}\n />\n\n <Divider />\n\n <div className=\"mly-flex mly-space-x-0.5\">\n <Select\n label=\"Border Radius\"\n value={String(state.currentBorderRadius)}\n options={borderRadiusOptions}\n onValueChange={(value) => {\n editor?.commands?.updateSection({\n borderRadius: Number(value),\n });\n }}\n tooltip=\"Border Radius\"\n className=\"mly-capitalize\"\n />\n\n <Select\n label=\"Border Width\"\n value={String(state.currentBorderWidth)}\n options={[\n { value: '0', label: 'None' },\n { value: '1', label: 'Thin' },\n { value: '2', label: 'Medium' },\n { value: '3', label: 'Thick' },\n ]}\n onValueChange={(value) => {\n editor?.commands?.updateSection({\n borderWidth: Number(value),\n });\n }}\n tooltip=\"Border Width\"\n className=\"mly-capitalize\"\n />\n </div>\n\n <Divider />\n\n <Select\n icon={MarginIcon}\n iconClassName=\"mly-stroke-[1.2] mly-size-3.5\"\n label=\"Margin\"\n value={String(state.currentMarginTop)}\n options={[\n { value: '0', label: 'None' },\n ...spacing.map((space) => ({\n label: space.name,\n value: String(space.value),\n })),\n ]}\n onValueChange={(_value) => {\n const value = Number(_value);\n editor?.commands?.updateSection({\n marginTop: value,\n marginRight: value,\n marginBottom: value,\n marginLeft: value,\n });\n }}\n tooltip=\"Margin\"\n className=\"mly-capitalize\"\n />\n\n <Divider />\n\n <Select\n icon={PaddingIcon}\n iconClassName=\"mly-stroke-[1]\"\n label=\"Padding\"\n value={String(state.currentPaddingTop)}\n options={[\n { value: '0', label: 'None' },\n ...spacing.map((space) => ({\n label: space.name,\n value: String(space.value),\n })),\n ]}\n onValueChange={(_value) => {\n const value = Number(_value);\n editor?.commands?.updateSection({\n paddingTop: value,\n paddingRight: value,\n paddingBottom: value,\n paddingLeft: value,\n });\n }}\n tooltip=\"Padding\"\n className=\"mly-capitalize\"\n />\n\n <Divider />\n\n <div className=\"mly-flex mly-space-x-0.5\">\n <ColorPicker\n color={state.currentBorderColor}\n onColorChange={(color) => {\n editor?.commands?.updateSection({\n borderColor: color,\n });\n }}\n tooltip=\"Border Color\"\n >\n <BaseButton\n variant=\"ghost\"\n className=\"!mly-size-7 mly-shrink-0\"\n size=\"sm\"\n type=\"button\"\n >\n <BorderColor\n className=\"mly-size-3 mly-shrink-0\"\n topBarClassName=\"mly-stroke-midnight-gray\"\n style={{\n color: state.currentBorderColor,\n }}\n />\n </BaseButton>\n </ColorPicker>\n <ColorPicker\n color={state.currentBackgroundColor}\n onColorChange={(color) => {\n editor?.commands?.updateSection({\n backgroundColor: color,\n });\n }}\n backgroundColor={state.currentBackgroundColor}\n tooltip=\"Background Color\"\n className=\"mly-rounded-full mly-border-[1.5px] mly-border-white mly-shadow\"\n />\n </div>\n\n <Divider />\n\n <BubbleMenuButton\n icon={Trash}\n tooltip=\"Delete Section\"\n command={() => {\n deleteNode(editor, 'section');\n }}\n />\n\n {state.isColumnsActive && (\n <>\n <Divider />\n <Popover>\n <PopoverTrigger className=\"mly-flex mly-items-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\">\n Column\n <ChevronUp className=\"mly-h-3 mly-w-3\" />\n </PopoverTrigger>\n <PopoverContent\n className=\"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 <ColumnsBubbleMenuContent editor={editor} />\n </PopoverContent>\n </Popover>\n </>\n )}\n </TooltipProvider>\n </BubbleMenu>\n );\n}\n","import { SVGProps } from 'react';\n\nexport function BorderColor(\n props: SVGProps<SVGSVGElement> & { topBarClassName?: string }\n) {\n const { topBarClassName, ...rest } = props;\n\n return (\n <svg\n width={11}\n height={12}\n viewBox=\"0 0 11 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path d=\"M0 11H10.6667\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M0.666504 9V6.33333C0.666504 3.38781 3.05432 1 5.99984 1H10.6665\"\n strokeWidth=\"1.5\"\n className={topBarClassName}\n />\n </svg>\n );\n}\n","import { SVGProps } from 'react';\n\nexport function MarginIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.5 10.499V1.49902M1.5 10.499V1.49902M4.5 5.99902C4.5 5.53308 4.5 5.30011 4.57612 5.11634C4.67761 4.87131 4.87229 4.67664 5.11732 4.57514C5.30109 4.49902 5.53406 4.49902 6 4.49902C6.46594 4.49902 6.69891 4.49902 6.88268 4.57514C7.12771 4.67664 7.32239 4.87131 7.42388 5.11634C7.5 5.30011 7.5 5.53308 7.5 5.99902C7.5 6.46496 7.5 6.69794 7.42388 6.88171C7.32239 7.12673 7.12771 7.32141 6.88268 7.4229C6.69891 7.49902 6.46594 7.49902 6 7.49902C5.53406 7.49902 5.30109 7.49902 5.11732 7.4229C4.87229 7.32141 4.67761 7.12673 4.57612 6.88171C4.5 6.69794 4.5 6.46496 4.5 5.99902Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import { SVGProps } from 'react';\n\nexport function PaddingIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width={10}\n height={10}\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M9.50244 0.501526L9.10244 0.501526C8.54239 0.501526 8.26236 0.501526 8.04845 0.610519C7.86029 0.706392 7.70731 0.859373 7.61144 1.04754C7.50244 1.26145 7.50244 1.54147 7.50244 2.10153V7.90153C7.50244 8.46158 7.50244 8.74161 7.61144 8.95552C7.70731 9.14368 7.86029 9.29666 8.04845 9.39253C8.26236 9.50153 8.54239 9.50153 9.10244 9.50153H9.50244M0.502441 0.501527L0.902441 0.501527C1.46249 0.501527 1.74252 0.501527 1.95643 0.61052C2.14459 0.706393 2.29757 0.859374 2.39345 1.04754C2.50244 1.26145 2.50244 1.54147 2.50244 2.10153L2.50244 7.90153C2.50244 8.46158 2.50244 8.74161 2.39345 8.95552C2.29757 9.14368 2.14459 9.29666 1.95643 9.39253C1.74252 9.50153 1.46249 9.50153 0.902442 9.50153H0.502442M4.99994 7.99903V1.99903\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\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 {\n DEFAULT_SECTION_BACKGROUND_COLOR,\n DEFAULT_SECTION_BORDER_COLOR,\n} from '@/editor/nodes/section/section';\nimport { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const useSectionState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n currentAlignment: ctx.editor.getAttributes('section')?.align || 'left',\n\n currentBorderRadius:\n Number(ctx.editor.getAttributes('section')?.borderRadius) || 0,\n currentBackgroundColor:\n ctx.editor.getAttributes('section')?.backgroundColor ||\n DEFAULT_SECTION_BACKGROUND_COLOR,\n\n currentBorderColor:\n ctx.editor.getAttributes('section')?.borderColor ||\n DEFAULT_SECTION_BORDER_COLOR,\n currentBorderWidth:\n Number(ctx.editor.getAttributes('section')?.borderWidth) || 0,\n\n currentMarginTop:\n Number(ctx.editor.getAttributes('section')?.marginTop) || 0,\n currentMarginRight:\n Number(ctx.editor.getAttributes('section')?.marginRight) || 0,\n currentMarginBottom:\n Number(ctx.editor.getAttributes('section')?.marginBottom) || 0,\n currentMarginLeft:\n Number(ctx.editor.getAttributes('section')?.marginLeft) || 0,\n\n currentPaddingTop:\n Number(ctx.editor.getAttributes('section')?.paddingTop) || 0,\n currentPaddingRight:\n Number(ctx.editor.getAttributes('section')?.paddingRight) || 0,\n currentPaddingBottom:\n Number(ctx.editor.getAttributes('section')?.paddingBottom) || 0,\n currentPaddingLeft:\n Number(ctx.editor.getAttributes('section')?.paddingLeft) || 0,\n\n isColumnsActive: ctx.editor.isActive('columns'),\n\n currentShowIfKey: ctx.editor.getAttributes('section')?.showIfKey || '',\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\n};\n","import { BubbleMenu } from '@tiptap/react';\n\nimport { BubbleMenuButton } from '../bubble-menu-button';\nimport {\n BubbleMenuItem,\n EditorBubbleMenuProps,\n} from '../text-menu/text-bubble-menu';\nimport { Divider } from '../ui/divider';\nimport { useSpacerState } from './use-spacer-state';\nimport { ShowPopover } from '../show-popover';\nimport { TooltipProvider } from '../ui/tooltip';\nimport { spacing } from '@/editor/utils/spacing';\nimport { useMemo } from 'react';\n\nexport function SpacerBubbleMenu(props: EditorBubbleMenuProps) {\n const { editor, appendTo } = props;\n if (!editor) {\n return null;\n }\n\n const items: BubbleMenuItem[] = useMemo(\n () =>\n spacing.map((space) => {\n const { value: height, short: name } = space;\n return {\n name,\n isActive: () => editor?.isActive('spacer', { height }),\n command: () => {\n editor?.chain().focus().setSpacer({ height }).run();\n },\n };\n }),\n [editor]\n );\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n shouldShow: ({ editor }) => {\n if (!editor.isEditable) {\n return false;\n }\n\n return editor.isActive('spacer');\n },\n tippyOptions: {\n maxWidth: '100%',\n moveTransition: 'mly-transform 0.15s mly-ease-out',\n },\n };\n\n const state = useSpacerState(editor);\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-gap-0.5 mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n {items.map((item, index) => (\n <BubbleMenuButton\n key={index}\n className=\"!mly-h-7 mly-w-7 mly-shrink-0 mly-p-0\"\n iconClassName=\"mly-w-3 mly-h-3\"\n nameClassName=\"mly-text-xs\"\n {...item}\n />\n ))}\n </TooltipProvider>\n </BubbleMenu>\n );\n}\n","import { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const useSpacerState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n currentShowIfKey: ctx.editor.getAttributes('spacer')?.showIfKey || '',\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\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 { 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 { Editor } from '@tiptap/core';\nimport { HorizontalRule } from '../extensions/horizontal-rule';\nimport Image from '@tiptap/extension-image';\nimport { Spacer } from '../nodes/spacer';\nimport { LinkCardExtension } from '../extensions/link-card';\nimport { ButtonExtension } from '../nodes/button/button';\nimport { VariableExtension } from '../nodes/variable/variable';\nimport { ImageExtension } from '../nodes/image/image';\nimport { LogoExtension } from '../nodes/logo/logo';\nimport { HTMLCodeBlockExtension } from '../nodes/html/html';\nimport { InlineImageExtension } from '../nodes/inline-image/inline-image';\n\nexport const isCustomNodeSelected = (editor: Editor, node: HTMLElement) => {\n const customNodes = [\n HorizontalRule.name,\n Image.name,\n Spacer.name,\n ImageExtension.name,\n VariableExtension.name,\n LinkCardExtension.name,\n LogoExtension.name,\n ButtonExtension.name,\n HTMLCodeBlockExtension.name,\n InlineImageExtension.name,\n ];\n\n return customNodes.some((type) => editor.isActive(type));\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 { 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 * 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 { 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 { 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 { 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 </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 { 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 { 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 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 { updateAttributes } from '@/editor/utils/update-attribute';\nimport CodeBlockLowlight from '@tiptap/extension-code-block-lowlight';\nimport { TextSelection } from '@tiptap/pm/state';\nimport {\n NodeViewContent,\n NodeViewProps,\n NodeViewWrapper,\n ReactNodeViewRenderer,\n} from '@tiptap/react';\nimport html from 'highlight.js/lib/languages/xml';\nimport { createLowlight, common } from 'lowlight';\nimport { HTMLCodeBlockView } from './html-view';\nimport { DEFAULT_SECTION_SHOW_IF_KEY } from '@/extensions';\n\nconst lowlight = createLowlight(common);\nlowlight.register('html', html);\n\nexport type HtmlCodeBlockAttributes = {\n activeTab: string;\n showIfKey: string;\n language: string;\n};\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n htmlCodeBlock: {\n /**\n * Set a code block\n * @param attributes Code block attributes\n * @example editor.commands.setCodeBlock({ language: 'javascript' })\n */\n setHtmlCodeBlock: (attributes?: { language: string }) => ReturnType;\n /**\n * Toggle a code block\n * @param attributes Code block attributes\n * @example editor.commands.toggleCodeBlock({ language: 'javascript' })\n */\n toggleHtmlCodeBlock: (attributes?: { language: string }) => ReturnType;\n updateHtmlCodeBlock: (\n attrs: Partial<HtmlCodeBlockAttributes>\n ) => ReturnType;\n };\n }\n}\n\nexport const HTMLCodeBlockExtension = CodeBlockLowlight.extend({\n name: 'htmlCodeBlock',\n content: '(text|variable)*',\n\n addAttributes() {\n return {\n ...this.parent?.(),\n activeTab: 'code',\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 addNodeView() {\n return ReactNodeViewRenderer(HTMLCodeBlockView, {\n className: 'mly-relative',\n attrs: ({ node }) => ({\n 'data-active-tab': node?.attrs?.activeTab || 'code',\n }),\n });\n },\n\n addCommands() {\n return {\n setHtmlCodeBlock:\n (attributes) =>\n ({ commands }) => {\n return commands.setNode(this.name, attributes);\n },\n toggleHtmlCodeBlock:\n (attributes) =>\n ({ commands }) => {\n return commands.toggleNode(this.name, 'paragraph', attributes);\n },\n updateHtmlCodeBlock: (attrs) => updateAttributes(this.name, attrs),\n };\n },\n\n addKeyboardShortcuts() {\n return {\n ...this.parent?.(),\n 'Mod-a': ({ editor }) => {\n const { selection } = editor.state;\n const $pos = selection.$anchor;\n\n // resolve the position to the code block node\n // and check if the node is a code block\n const node = $pos.node($pos.depth);\n if (node.type.name !== this.name) {\n return false;\n }\n\n // find the depth of the code block node\n // to get the correct start and end position\n // usually when we are inside a code block\n // the depth is the same as the code block node\n let depth = $pos.depth;\n for (let d = depth; d > 0; d--) {\n if ($pos.node(d).type.name === this.name) {\n depth = d;\n break;\n }\n }\n\n // find the start and end position of the code block\n // and set the selection to the code block\n const start = $pos.before(depth) + 1; // +1 to move inside the code block\n const end = $pos.after(depth) - 1; // -1 to stay inside the code block\n\n const from = editor.state.doc.resolve(start);\n const to = editor.state.doc.resolve(end);\n if (from && to) {\n const transaction = editor.state.tr.setSelection(\n TextSelection.between(from, to)\n );\n editor.view.dispatch(transaction);\n return true;\n }\n\n return false;\n },\n };\n },\n}).configure({\n lowlight,\n});\n","import { cn } from '@/editor/utils/classname';\nimport { NodeViewProps } from '@tiptap/core';\nimport { NodeViewContent, NodeViewWrapper } from '@tiptap/react';\nimport { useMemo } from 'react';\nimport { HtmlCodeBlockAttributes } from './html';\n\nexport function HTMLCodeBlockView(props: NodeViewProps) {\n const { node, updateAttributes } = props;\n\n let { language, activeTab = 'code' } = node.attrs as HtmlCodeBlockAttributes;\n activeTab ||= 'code';\n\n const languageClass = language ? `language-${language}` : '';\n\n const html = useMemo(() => {\n const text = node.content.content.reduce((acc, cur) => {\n if (cur.type.name === 'text') {\n return acc + cur.text;\n } else if (cur.type.name === 'variable') {\n const { id: variable, fallback } = cur?.attrs || {};\n const formattedVariable = fallback\n ? `{{${variable},fallback=${fallback}}}`\n : `{{${variable}}}`;\n return acc + formattedVariable;\n }\n\n return acc;\n }, '');\n\n const htmlParser = new DOMParser();\n const htmlDoc = htmlParser.parseFromString(text, 'text/html');\n const body = htmlDoc.body;\n return body.innerHTML;\n }, [activeTab]);\n\n const isEmpty = html === '';\n\n return (\n <NodeViewWrapper\n draggable={false}\n data-drag-handle={false}\n data-type=\"htmlCodeBlock\"\n >\n {activeTab === 'code' && (\n <pre className=\"mly-my-0 mly-rounded-lg mly-border mly-border-gray-200 mly-bg-white mly-p-2 mly-text-black\">\n <NodeViewContent\n as=\"code\"\n className={cn('is-editable', languageClass)}\n />\n </pre>\n )}\n\n {activeTab === 'preview' && (\n <div\n className={cn(\n 'mly-not-prose mly-rounded-lg mly-border mly-border-gray-200 mly-p-2',\n isEmpty && 'mly-min-h-[42px]'\n )}\n dangerouslySetInnerHTML={{ __html: html }}\n contentEditable={false}\n onClick={() => {\n if (!isEmpty) {\n return;\n }\n\n updateAttributes({\n activeTab: 'code',\n });\n }}\n />\n )}\n </NodeViewWrapper>\n );\n}\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 { 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 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 {\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","import { mergeAttributes, Node } from '@tiptap/core';\nimport { PluginKey, Plugin } from '@tiptap/pm/state';\n\nexport interface InlineImageOptions {\n /**\n * HTML attributes to add to the image element.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record<string, any>;\n}\n\nexport interface InlineImageAttributes {\n src: string;\n alt?: string;\n title?: string;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n inlineImage: {\n setInlineImage: (options: InlineImageAttributes) => ReturnType;\n };\n }\n}\n\nexport const DEFAULT_INLINE_IMAGE_HEIGHT = 20;\nexport const DEFAULT_INLINE_IMAGE_WIDTH = 20;\n\nexport const InlineImageExtension = Node.create<InlineImageOptions>({\n name: 'inlineImage',\n inline: true,\n group: 'inline',\n selectable: false,\n\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n\n addAttributes() {\n return {\n height: {\n default: DEFAULT_INLINE_IMAGE_HEIGHT,\n },\n width: {\n default: DEFAULT_INLINE_IMAGE_WIDTH,\n },\n\n src: {\n default: null,\n },\n isSrcVariable: {\n default: false,\n renderHTML(attributes) {\n if (!attributes.isSrcVariable) {\n return {};\n }\n\n return {\n 'data-is-src-variable': 'true',\n };\n },\n },\n alt: {\n default: null,\n },\n title: {\n default: null,\n },\n\n externalLink: {\n default: null,\n renderHTML(attributes) {\n if (!attributes.externalLink) {\n return {};\n }\n\n return {\n 'data-external-link': attributes.externalLink,\n };\n },\n },\n isExternalLinkVariable: {\n default: false,\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 },\n\n parseHTML() {\n return [\n {\n tag: `img[data-type=\"${this.name}\"]`,\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n const attrs = mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n 'data-type': this.name,\n class: 'mly-inline mly-relative',\n style: `--mly-inline-image-height: ${HTMLAttributes.height}px; --mly-inline-image-width: ${HTMLAttributes.width}px; margin:0; vertical-align: middle;`,\n draggable: 'false',\n loading: 'lazy',\n });\n\n return ['img', attrs];\n },\n\n addCommands() {\n return {\n setInlineImage:\n (options) =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: options,\n });\n },\n };\n },\n\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('inlineImage'),\n props: {\n handleClickOn: (_, pos, node) => {\n if (node.type !== this.type) {\n return false;\n }\n\n const from = pos;\n const to = pos + node.nodeSize;\n\n this.editor.commands.setTextSelection({ from, to });\n return true;\n },\n },\n }),\n ];\n },\n});\n","import { ColumnExtension } from '@/editor/nodes/columns/column';\nimport { ColumnsExtension } from '@/editor/nodes/columns/columns';\nimport { SectionExtension } from '@/editor/nodes/section/section';\nimport { isCustomNodeSelected } from '@/editor/utils/is-custom-node-selected';\nimport { isTextSelected } from '@/editor/utils/is-text-selected';\nimport { BubbleMenu, BubbleMenuProps } from '@tiptap/react';\nimport { LucideIcon } from 'lucide-react';\nimport { SVGIcon } from '../icons/grid-lines';\nimport { Divider } from '../ui/divider';\nimport { TooltipProvider } from '../ui/tooltip';\nimport { TextBubbleContent } from './text-bubble-content';\nimport { RepeatExtension } from '@/editor/nodes/repeat/repeat';\nimport { TurnIntoBlock } from './turn-into-block';\nimport { useTurnIntoBlockOptions } from './use-turn-into-block-options';\n\nexport interface BubbleMenuItem {\n name?: string;\n isActive?: () => boolean;\n command?: () => void;\n shouldShow?: () => boolean;\n icon?: LucideIcon | SVGIcon;\n className?: string;\n iconClassName?: string;\n nameClassName?: string;\n disbabled?: boolean;\n\n tooltip?: string;\n}\n\nexport type EditorBubbleMenuProps = Omit<BubbleMenuProps, 'children'> & {\n appendTo?: React.RefObject<any>;\n};\n\nexport function TextBubbleMenu(props: EditorBubbleMenuProps) {\n const { editor, appendTo } = props;\n\n if (!editor) {\n return null;\n }\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n pluginKey: 'text-menu',\n shouldShow: ({ editor, from, view }) => {\n if (!view || editor.view.dragging) {\n return false;\n }\n\n const domAtPos = view.domAtPos(from || 0).node as HTMLElement;\n const nodeDOM = view.nodeDOM(from || 0) as HTMLElement;\n const node = nodeDOM || domAtPos;\n\n if (isCustomNodeSelected(editor, node) || !editor.isEditable) {\n return false;\n }\n\n const nestedNodes = [\n RepeatExtension.name,\n SectionExtension.name,\n ColumnsExtension.name,\n ColumnExtension.name,\n ];\n\n const isNestedNodeSelected =\n nestedNodes.some((name) => editor.isActive(name)) &&\n node?.classList?.contains('ProseMirror-selectednode');\n return isTextSelected(editor) && !isNestedNodeSelected;\n },\n tippyOptions: {\n popperOptions: {\n placement: 'top-start',\n modifiers: [\n {\n name: 'preventOverflow',\n options: {\n boundary: 'viewport',\n padding: 8,\n },\n },\n {\n name: 'flip',\n options: {\n fallbackPlacements: ['bottom-start', 'top-end', 'bottom-end'],\n },\n },\n ],\n },\n maxWidth: '100%',\n },\n };\n\n const turnIntoBlockOptions = useTurnIntoBlockOptions(editor);\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-gap-0.5 mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n <TurnIntoBlock options={turnIntoBlockOptions} />\n\n <Divider className=\"mly-mx-0\" />\n\n <TextBubbleContent editor={editor} />\n </TooltipProvider>\n </BubbleMenu>\n );\n}\n","import { Editor } from '@tiptap/core';\nimport { BubbleMenuItem } from './text-bubble-menu';\n\nimport {\n BoldIcon,\n CodeIcon,\n ItalicIcon,\n List,\n ListOrdered,\n LucideIcon,\n StrikethroughIcon,\n UnderlineIcon,\n} from 'lucide-react';\nimport { BubbleMenuButton } from '../bubble-menu-button';\nimport { AlignmentSwitch } from '../alignment-switch';\nimport { useTextMenuState } from './use-text-menu-state';\nimport { LinkInputPopover } from '../ui/link-input-popover';\nimport { Divider } from '../ui/divider';\nimport { ColorPicker } from '../ui/color-picker';\nimport { BaseButton } from '../base-button';\n\ntype TextBubbleContentProps = {\n editor: Editor;\n showListMenu?: boolean;\n};\n\nexport function TextBubbleContent(props: TextBubbleContentProps) {\n const { editor, showListMenu = true } = props;\n\n const state = useTextMenuState(editor);\n const colors = editor?.storage.color.colors as Set<string>;\n const suggestedColors = Array?.from(colors)?.reverse()?.slice(0, 6) ?? [];\n\n const items: BubbleMenuItem[] = [\n {\n name: 'bold',\n isActive: () => editor?.isActive('bold')!,\n command: () => editor?.chain().focus().toggleBold().run()!,\n icon: BoldIcon,\n tooltip: 'Bold',\n },\n {\n name: 'italic',\n isActive: () => editor?.isActive('italic')!,\n command: () => editor?.chain().focus().toggleItalic().run()!,\n icon: ItalicIcon,\n tooltip: 'Italic',\n },\n {\n name: 'underline',\n isActive: () => editor?.isActive('underline')!,\n command: () => editor?.chain().focus().toggleUnderline().run()!,\n icon: UnderlineIcon,\n tooltip: 'Underline',\n },\n {\n name: 'strike',\n isActive: () => editor?.isActive('strike')!,\n command: () => editor?.chain().focus().toggleStrike().run()!,\n icon: StrikethroughIcon,\n tooltip: 'Strikethrough',\n },\n {\n name: 'code',\n isActive: () => editor?.isActive('code')!,\n command: () => editor?.chain().focus().toggleCode().run()!,\n icon: CodeIcon,\n tooltip: 'Code',\n },\n ];\n\n return (\n <>\n {items.map((item, index) => (\n <BubbleMenuButton key={index} {...item} />\n ))}\n\n <AlignmentSwitch\n alignment={state.textAlign}\n onAlignmentChange={(alignment) => {\n editor?.chain().focus().setTextAlign(alignment).run();\n }}\n />\n\n {!state.isListActive && showListMenu && (\n <>\n <BubbleMenuButton\n icon={List}\n command={() => {\n editor.chain().focus().toggleBulletList().run();\n }}\n tooltip=\"Bullet List\"\n />\n <BubbleMenuButton\n icon={ListOrdered}\n command={() => {\n editor.chain().focus().toggleOrderedList().run();\n }}\n tooltip=\"Ordered List\"\n />\n </>\n )}\n\n <LinkInputPopover\n defaultValue={state?.linkUrl ?? ''}\n onValueChange={(value, isVariable) => {\n const defaultValueWithoutProtocol = value.replace(/https?:\\/\\//, '');\n\n if (!defaultValueWithoutProtocol) {\n editor\n ?.chain()\n .focus()\n .extendMarkRange('link')\n .unsetLink()\n .unsetUnderline()\n .run();\n return;\n }\n\n editor\n ?.chain()\n .extendMarkRange('link')\n .setLink({ href: value })\n .setIsUrlVariable(isVariable ?? false)\n .setUnderline()\n .run()!;\n }}\n tooltip=\"External URL\"\n editor={editor}\n isVariable={state.isUrlVariable}\n />\n\n <Divider />\n\n <ColorPicker\n color={state.currentTextColor}\n onColorChange={(color) => {\n editor?.chain().setColor(color).run();\n }}\n tooltip=\"Text Color\"\n suggestedColors={suggestedColors}\n >\n <BaseButton\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n className=\"!mly-h-7 mly-w-7 mly-shrink-0 mly-p-0\"\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-slate-700\">\n A\n </span>\n <div\n className=\"mly-h-[2px] mly-w-3\"\n style={{ backgroundColor: state.currentTextColor }}\n />\n </div>\n </BaseButton>\n </ColorPicker>\n </>\n );\n}\n","import { AllowedLogoAlignment } from '@/editor/nodes/logo/logo';\nimport { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const DEFAULT_TEXT_COLOR = '#374151';\n\nexport const useTextMenuState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n currentTextColor:\n ctx.editor.getAttributes('textStyle').color || DEFAULT_TEXT_COLOR,\n\n linkUrl: ctx.editor?.getAttributes('link').href,\n textAlign: (ctx.editor?.isActive({ textAlign: 'left' })\n ? 'left'\n : ctx.editor?.isActive({ textAlign: 'center' })\n ? 'center'\n : ctx.editor?.isActive({ textAlign: 'right' })\n ? 'right'\n : ctx.editor?.isActive({ textAlign: 'justify' })\n ? 'justify'\n : 'left') as AllowedLogoAlignment,\n\n isListActive:\n ctx.editor.isActive('bulletList') ||\n ctx.editor.isActive('orderedList'),\n isUrlVariable: ctx.editor.getAttributes('link').isUrlVariable ?? false,\n\n isHeadingActive: ctx.editor.isActive('heading'),\n headingShowIfKey: ctx.editor.getAttributes('heading')?.showIfKey || '',\n\n isParagraphActive: ctx.editor.isActive('paragraph'),\n paragraphShowIfKey:\n ctx.editor.getAttributes('paragraph')?.showIfKey || '',\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\n};\n","import { ChevronDownIcon, PilcrowIcon } from 'lucide-react';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\nimport {\n TurnIntoBlockCategory,\n TurnIntoBlockOptions,\n TurnIntoOptions,\n} from './use-turn-into-block-options';\nimport { useMemo } from 'react';\nimport { BaseButton } from '../base-button';\nimport { cn } from '@/editor/utils/classname';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';\n\ntype TurnIntoBlockProps = {\n options: TurnIntoOptions;\n};\n\nconst isOption = (\n option: TurnIntoOptions[number]\n): option is TurnIntoBlockOptions => option.type === 'option';\nconst isCategory = (\n option: TurnIntoOptions[number]\n): option is TurnIntoBlockCategory => option.type === 'category';\n\nexport function TurnIntoBlock(props: TurnIntoBlockProps) {\n const { options } = props;\n\n const activeItem = useMemo(\n () =>\n options.find((option) => option.type === 'option' && option.isActive()),\n [options]\n ) as TurnIntoBlockOptions | undefined;\n const { icon: ActiveIcon = PilcrowIcon } = activeItem || {};\n\n return (\n <Popover>\n <Tooltip>\n <TooltipTrigger asChild>\n <PopoverTrigger\n className={cn(\n 'mly-flex mly-aspect-square mly-h-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 <ActiveIcon className=\"mly-h-3 mly-w-3 mly-shrink-0 mly-stroke-[2.5]\" />\n <ChevronDownIcon className=\"mly-h-3 mly-w-3 mly-shrink-0 mly-stroke-[2.5]\" />\n </PopoverTrigger>\n </TooltipTrigger>\n <TooltipContent sideOffset={8}>Turn into</TooltipContent>\n </Tooltip>\n <PopoverContent\n align=\"start\"\n side=\"bottom\"\n sideOffset={8}\n className=\"mly-flex mly-w-[160px] mly-flex-col mly-rounded-md mly-p-1\"\n >\n {options.map((option, index) => {\n if (isOption(option)) {\n return (\n <BaseButton\n key={option.id}\n onClick={option.onClick}\n variant=\"ghost\"\n className=\"mly-h-auto mly-justify-start mly-gap-2 !mly-rounded mly-px-2 mly-py-1 mly-text-sm mly-font-normal mly-text-midnight-gray\"\n >\n <option.icon className=\"mly-size-[15px] mly-shrink-0\" />\n {option.label}\n </BaseButton>\n );\n } else if (isCategory(option)) {\n return (\n <label\n key={option.id}\n className={cn(\n 'mly-px-2 mly-text-xs mly-font-medium mly-text-midnight-gray/60',\n index === 0 ? 'mly-mb-2 mly-mt-1' : 'mly-my-2'\n )}\n >\n {option.label}\n </label>\n );\n }\n })}\n </PopoverContent>\n </Popover>\n );\n}\n","import { Editor, useEditorState } from '@tiptap/react';\nimport {\n FootprintsIcon,\n Heading1Icon,\n Heading2Icon,\n Heading3Icon,\n ListIcon,\n ListOrderedIcon,\n LucideIcon,\n PilcrowIcon,\n} from 'lucide-react';\n\nexport type TurnIntoBlockOptions = {\n label: string;\n id: string;\n type: 'option';\n disabled: () => boolean;\n isActive: () => boolean;\n onClick: () => void;\n icon: LucideIcon;\n};\n\nexport type TurnIntoBlockCategory = {\n label: string;\n id: string;\n type: 'category';\n};\n\nexport type TurnIntoOptions = Array<\n TurnIntoBlockOptions | TurnIntoBlockCategory\n>;\n\nexport function useTurnIntoBlockOptions(editor: Editor) {\n return useEditorState({\n editor,\n selector: ({ editor }): TurnIntoOptions => [\n {\n type: 'category',\n label: 'Hierarchy',\n id: 'hierarchy',\n },\n {\n icon: PilcrowIcon,\n onClick: () =>\n editor.chain().focus().liftListItem('listItem').setParagraph().run(),\n id: 'paragraph',\n disabled: () => !editor.can().setParagraph(),\n isActive: () =>\n editor.isActive('paragraph') &&\n !editor.isActive('orderedList') &&\n !editor.isActive('bulletList') &&\n !editor.isActive('taskList'),\n label: 'Paragraph',\n type: 'option',\n },\n {\n icon: Heading1Icon,\n onClick: () =>\n editor\n .chain()\n .focus()\n .liftListItem('listItem')\n .setHeading({ level: 1 })\n .run(),\n id: 'heading1',\n disabled: () => !editor.can().setHeading({ level: 1 }),\n isActive: () => editor.isActive('heading', { level: 1 }),\n label: 'Heading 1',\n type: 'option',\n },\n {\n icon: Heading2Icon,\n onClick: () =>\n editor\n .chain()\n .focus()\n .liftListItem('listItem')\n .setHeading({ level: 2 })\n .run(),\n id: 'heading2',\n disabled: () => !editor.can().setHeading({ level: 2 }),\n isActive: () => editor.isActive('heading', { level: 2 }),\n label: 'Heading 2',\n type: 'option',\n },\n {\n icon: Heading3Icon,\n onClick: () =>\n editor\n .chain()\n .focus()\n .liftListItem('listItem')\n .setHeading({ level: 3 })\n .run(),\n id: 'heading3',\n disabled: () => !editor.can().setHeading({ level: 3 }),\n isActive: () => editor.isActive('heading', { level: 3 }),\n label: 'Heading 3',\n type: 'option',\n },\n {\n id: 'footer',\n type: 'option',\n label: 'Footer',\n icon: FootprintsIcon,\n onClick: () => {\n editor.chain().focus().liftListItem('listItem').setFooter().run();\n },\n disabled: () => !editor.can().setFooter(),\n isActive: () => editor.isActive('footer'),\n },\n {\n type: 'category',\n label: 'Lists',\n id: 'lists',\n },\n {\n icon: ListIcon,\n onClick: () => editor.chain().focus().toggleBulletList().run(),\n id: 'bulletList',\n disabled: () => !editor.can().toggleBulletList(),\n isActive: () => editor.isActive('bulletList'),\n label: 'Bullet list',\n type: 'option',\n },\n {\n icon: ListOrderedIcon,\n onClick: () => editor.chain().focus().toggleOrderedList().run(),\n id: 'orderedList',\n disabled: () => !editor.can().toggleOrderedList(),\n isActive: () => editor.isActive('orderedList'),\n label: 'Numbered list',\n type: 'option',\n },\n ],\n });\n}\n","import { AnyExtension } from '@tiptap/core';\nimport { getVariableSuggestions } from '../nodes/variable/variable-suggestions';\nimport { MailyContextType } from '../provider';\nimport { MailyKit } from './maily-kit';\nimport { SlashCommandExtension } from './slash-command/slash-command';\nimport { getSlashCommandSuggestions } from './slash-command/slash-command-view';\nimport { VariableExtension } from '@/extensions';\nimport { HTMLCodeBlockExtension } from '../nodes/html/html';\nimport { InlineImageExtension } from '../nodes/inline-image/inline-image';\nimport { PlaceholderExtension } from './placeholder';\n\ntype ExtensionsProps = Partial<MailyContextType> & {\n extensions?: AnyExtension[];\n};\n\nexport function extensions(props: ExtensionsProps) {\n const {\n variables,\n blocks,\n variableTriggerCharacter,\n extensions = [],\n } = props;\n\n const defaultExtensions = [\n MailyKit,\n SlashCommandExtension.configure({\n suggestion: getSlashCommandSuggestions(blocks),\n }),\n VariableExtension.configure({\n suggestion: getVariableSuggestions(variables, variableTriggerCharacter),\n }),\n HTMLCodeBlockExtension,\n InlineImageExtension,\n PlaceholderExtension,\n ].filter((ext) => {\n return !extensions.some((e) => e.name === ext.name);\n });\n\n return [...defaultExtensions, ...extensions];\n}\n","import { BubbleMenu } from '@tiptap/react';\nimport { sticky } from 'tippy.js';\nimport { TextBubbleContent } from '../text-menu/text-bubble-content';\nimport { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { TooltipProvider } from '../ui/tooltip';\n\nexport function VariableBubbleMenu(props: EditorBubbleMenuProps) {\n const { editor, appendTo } = props;\n if (!editor) {\n return null;\n }\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n pluginKey: 'variable-menu',\n shouldShow: ({ editor }) => {\n return editor.isActive('variable') && !editor.storage.variable?.popover;\n },\n tippyOptions: {\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: false }],\n },\n plugins: [sticky],\n sticky: 'popper',\n maxWidth: '100%',\n appendTo: () => appendTo?.current || 'parent',\n placement: 'top-start',\n },\n };\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-gap-0.5 mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n <TextBubbleContent showListMenu={false} editor={editor} />\n </TooltipProvider>\n </BubbleMenu>\n );\n}\n","import { JSONContent } from '@tiptap/core';\nimport { spacing } from './spacing';\nimport { DEFAULT_SPACER_HEIGHT } from '@/extensions';\n\n/**\n * To replace deprecated node type or attributes\n * to avoid breaking changes, we can replace the deprecated node type or attributes\n * with the new one in the JSON content object.\n * @param json - previous JSON content object\n * @returns JSONContent - new JSON content object\n */\nexport function replaceDeprecatedNode(json: JSONContent) {\n const stack = [json];\n\n while (stack.length) {\n const node = stack.pop();\n if (!node) {\n continue;\n }\n\n if (node.type === 'for') {\n node.type = 'repeat';\n }\n\n if (node.type === 'spacer') {\n let height = node.attrs?.height;\n if (\n typeof height === 'string' &&\n ['sm', 'md', 'lg', 'xl'].includes(height)\n ) {\n height =\n spacing.find((s) => s.short === height)?.value ||\n DEFAULT_SPACER_HEIGHT;\n }\n\n node.attrs = {\n ...node.attrs,\n height,\n };\n }\n\n if (node.content) {\n stack.push(...node.content);\n }\n }\n\n return json;\n}\n","import { cn } from '@/editor/utils/classname';\nimport { BubbleMenu } from '@tiptap/react';\nimport { CodeXmlIcon, ViewIcon } from 'lucide-react';\nimport { useCallback } from 'react';\nimport { sticky } from 'tippy.js';\nimport { getRenderContainer } from '../../utils/get-render-container';\nimport { ShowPopover } from '../show-popover';\nimport { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { Divider } from '../ui/divider';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '../ui/tooltip';\nimport { useHtmlState } from './use-html-state';\n\nexport function HTMLBubbleMenu(props: EditorBubbleMenuProps) {\n const { appendTo, editor } = props;\n if (!editor) {\n return null;\n }\n\n const state = useHtmlState(editor);\n\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor!, 'htmlCodeBlock');\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n shouldShow: ({ editor }) => {\n return editor.isActive('htmlCodeBlock');\n },\n tippyOptions: {\n offset: [0, 8],\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: false }],\n },\n getReferenceClientRect,\n appendTo: () => appendTo?.current,\n plugins: [sticky],\n sticky: 'popper',\n maxWidth: 'auto',\n },\n pluginKey: 'htmlCodeBlockBubbleMenu',\n };\n\n const { activeTab = 'code' } = state;\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-items-stretch mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n <div className=\"flex items-center mly-h-7 mly-rounded-md mly-bg-soft-gray mly-px-0.5\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n className={cn(\n 'mly-flex mly-size-6 mly-shrink-0 mly-items-center mly-justify-center mly-rounded 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 activeTab === 'code' && 'mly-bg-white'\n )}\n disabled={activeTab === 'code'}\n onClick={() => {\n editor?.commands?.updateHtmlCodeBlock({\n activeTab: 'code',\n });\n }}\n >\n <CodeXmlIcon className=\"mly-size-3 mly-shrink-0 mly-stroke-[2.5]\" />\n </button>\n </TooltipTrigger>\n <TooltipContent sideOffset={8}>HTML Code</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n className={cn(\n 'mly-flex mly-size-6 mly-shrink-0 mly-items-center mly-justify-center mly-rounded 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 activeTab === 'preview' && 'mly-bg-white'\n )}\n disabled={activeTab === 'preview'}\n onClick={() => {\n editor?.commands?.updateHtmlCodeBlock({\n activeTab: 'preview',\n });\n }}\n >\n <ViewIcon className=\"mly-size-3 mly-shrink-0 mly-stroke-[2.5]\" />\n </button>\n </TooltipTrigger>\n <TooltipContent sideOffset={8}>Preview</TooltipContent>\n </Tooltip>\n </div>\n <Divider />\n <ShowPopover\n showIfKey={state.currentShowIfKey}\n onShowIfKeyValueChange={(value) => {\n editor.commands.updateHtmlCodeBlock({\n showIfKey: value,\n });\n }}\n editor={editor}\n />\n </TooltipProvider>\n </BubbleMenu>\n );\n}\n","import { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const useHtmlState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n activeTab:\n ctx.editor.getAttributes('htmlCodeBlock')?.activeTab || 'code',\n currentShowIfKey:\n ctx.editor.getAttributes('htmlCodeBlock')?.showIfKey || '',\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\n};\n","import { BubbleMenu } from '@tiptap/react';\nimport { sticky } from 'tippy.js';\nimport { ImageSize } from '../image-menu/image-size';\nimport { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { TooltipProvider } from '../ui/tooltip';\nimport { useInlineImageState } from './use-inline-image-state';\nimport { LinkInputPopover } from '../ui/link-input-popover';\nimport { ImageDownIcon } from 'lucide-react';\nimport { isTextSelected } from '@/editor/utils/is-text-selected';\n\nexport function InlineImageBubbleMenu(props: EditorBubbleMenuProps) {\n const { editor, appendTo } = props;\n if (!editor) {\n return null;\n }\n\n const state = useInlineImageState(editor);\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n shouldShow: ({ editor }) => {\n if (!editor.isEditable) {\n return false;\n }\n\n return editor.isActive('inlineImage');\n },\n tippyOptions: {\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: false }],\n },\n plugins: [sticky],\n sticky: 'popper',\n maxWidth: '100%',\n },\n };\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n <div className=\"mly-flex mly-space-x-0.5\">\n <LinkInputPopover\n defaultValue={state?.src ?? ''}\n onValueChange={(value, isVariable) => {\n editor\n ?.chain()\n .updateAttributes('inlineImage', {\n src: value,\n isSrcVariable: isVariable ?? false,\n })\n .run();\n }}\n tooltip=\"Source URL\"\n icon={ImageDownIcon}\n editor={editor}\n isVariable={state.isSrcVariable}\n />\n\n <LinkInputPopover\n defaultValue={state?.imageExternalLink ?? ''}\n onValueChange={(value, isVariable) => {\n editor\n ?.chain()\n .updateAttributes('inlineImage', {\n externalLink: value,\n isExternalLinkVariable: isVariable ?? false,\n })\n .run();\n }}\n tooltip=\"External URL\"\n editor={editor}\n isVariable={state.isExternalLinkVariable}\n />\n\n <ImageSize\n dimension=\"height\"\n value={state?.height}\n onValueChange={(value) => {\n editor\n ?.chain()\n .updateAttributes('inlineImage', {\n width: value,\n height: value,\n })\n .run();\n }}\n />\n </div>\n </TooltipProvider>\n </BubbleMenu>\n );\n}\n","import {\n DEFAULT_INLINE_IMAGE_HEIGHT,\n DEFAULT_INLINE_IMAGE_WIDTH,\n} from '@/editor/nodes/inline-image/inline-image';\nimport { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const useInlineImageState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: ({ editor }) => {\n return {\n height:\n editor.getAttributes('inlineImage')?.height ||\n DEFAULT_INLINE_IMAGE_HEIGHT,\n width:\n editor.getAttributes('inlineImage')?.width ||\n DEFAULT_INLINE_IMAGE_WIDTH,\n src: editor.getAttributes('inlineImage')?.src || '',\n isSrcVariable:\n editor.getAttributes('inlineImage')?.isSrcVariable ?? false,\n imageExternalLink:\n editor.getAttributes('inlineImage')?.externalLink || '',\n isExternalLinkVariable:\n editor.getAttributes('inlineImage')?.isExternalLinkVariable ?? false,\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\n};\n"],"mappings":"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","names":["useMemo","useRef","useCallback","uuid","HTMLAttributes","uuid","jsx","React","jsx","jsx","jsx","useMemo","useRef","useState","FootprintsIcon","Heading1","jsx","jsx","TextSelection","jsx","editor","jsx","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","Heading1","FootprintsIcon","React","jsx","jsx","jsxs","updateAttributes","jsx","Braces","forwardRef","jsx","jsxs","useEffect","forwardRef","useRef","jsx","jsxs","forwardRef","useRef","jsx","jsxs","useState","useRef","useMemo","jsx","jsxs","value","jsx","jsxs","findParentNode","Fragment","jsx","jsxs","jsx","useCallback","editor","useCallback","useEffect","useState","useState","useRef","useEffect","Selection","Selection","t","e","o","element","n","r","i","s","d","jsx","useState","useRef","useEffect","jsx","jsxs","useState","useCallback","useEffect","useMemo","EraserIcon","jsx","useMemo","EraserIcon","index","BubbleMenu","InfoIcon","useCallback","useMemo","useRef","useState","sticky","useEditorState","deepEql","jsx","jsxs","useCallback","editor","sticky","useRef","useState","useMemo","BubbleMenu","InfoIcon","BubbleMenu","AlignCenter","AlignLeft","AlignRight","jsx","jsxs","AlignLeft","AlignCenter","AlignRight","ChevronDownIcon","useRef","useState","useMemo","Fragment","jsx","jsxs","useState","useRef","_a","protocol","ChevronDownIcon","isVariable","jsx","jsxs","mergeAttributes","Node","Node","HTMLAttributes","mergeAttributes","NodeViewWrapper","useEffect","useState","useCallback","useRef","NodeViewWrapper","BracesIcon","useEffect","useRef","useState","Fragment","jsx","jsxs","updateAttributes","useState","useRef","event","useEffect","NodeViewWrapper","BracesIcon","jsx","jsxs","useState","useEffect","NodeViewWrapper","useEditorState","deepEql","editor","sticky","Fragment","jsx","jsxs","editor","sticky","BubbleMenu","BubbleMenu","findChildren","Trash","useCallback","sticky","jsx","jsxs","jsx","jsx","jsx","jsxs","color","useEditorState","deepEql","Fragment","jsx","jsxs","useCallback","editor","findChildren","sticky","BubbleMenu","Trash","BubbleMenu","useEditorState","deepEql","useMemo","jsx","useMemo","editor","BubbleMenu","mergeAttributes","Node","uuid","Node","uuid","HTMLAttributes","mergeAttributes","Image","mergeAttributes","Node","Node","HTMLAttributes","mergeAttributes","mergeAttributes","Node","ReactNodeViewRenderer","NodeViewWrapper","React","jsx","React","jsx","jsx","jsxs","image","NodeViewWrapper","Node","HTMLAttributes","mergeAttributes","ReactNodeViewRenderer","mergeAttributes","Node","ReactNodeViewRenderer","NodeViewWrapper","useMemo","useState","useRef","jsx","jsxs","value","isVariable","useMemo","jsx","jsxs","updateAttributes","text","NodeViewWrapper","alignment","Node","HTMLAttributes","mergeAttributes","ReactNodeViewRenderer","mergeAttributes","Node","PluginKey","ReactNodeViewRenderer","PluginKey","Node","HTMLAttributes","mergeAttributes","ReactNodeViewRenderer","TiptapImage","ReactNodeViewRenderer","TiptapImage","ReactNodeViewRenderer","TextSelection","ReactNodeViewRenderer","NodeViewWrapper","useMemo","jsx","jsxs","updateAttributes","html","text","mergeAttributes","Node","HTMLAttributes","mergeAttributes","Node","ReactNodeViewRenderer","NodeViewWrapper","NodeViewContent","Repeat2","jsx","jsxs","Node","HTMLAttributes","mergeAttributes","ReactNodeViewRenderer","extensions","Extension","Suggestion","Extension","Suggestion","forwardRef","Fragment","useCallback","useEffect","useImperativeHandle","useLayoutEffect","useRef","useState","tippy","Fragment","jsx","jsxs","forwardRef","CommandList","useState","useCallback","useImperativeHandle","useEffect","useRef","useLayoutEffect","group","_a","editor","tippy","ReactRenderer","useRef","forwardRef","useImperativeHandle","tippy","jsx","forwardRef","useRef","useImperativeHandle","ReactRenderer","tippy","ReactNodeViewRenderer","TextSelection","mergeAttributes","Node","PluginKey","Plugin","HTMLAttributes","Image","BubbleMenu","BoldIcon","ItalicIcon","List","ListOrdered","StrikethroughIcon","UnderlineIcon","useEditorState","deepEql","Fragment","jsx","jsxs","BoldIcon","ItalicIcon","UnderlineIcon","StrikethroughIcon","List","ListOrdered","ChevronDownIcon","useMemo","jsx","jsxs","useMemo","ChevronDownIcon","useEditorState","FootprintsIcon","PilcrowIcon","editor","jsx","jsxs","editor","BubbleMenu","extensions","BubbleMenu","sticky","jsx","editor","sticky","BubbleMenu","BubbleMenu","CodeXmlIcon","useCallback","sticky","useEditorState","deepEql","jsx","jsxs","useCallback","editor","sticky","BubbleMenu","CodeXmlIcon","BubbleMenu","sticky","useEditorState","deepEql","editor","jsx","jsxs","editor","sticky","BubbleMenu","jsx","jsxs","Editor","extensions","useMemo","useRef","editor"]}
|
|
1
|
+
{"version":3,"sources":["#style-inject:#style-inject","../src/styles/index.css","../src/styles/preflight.css","../src/styles/tailwind.css","../src/editor/index.tsx","../src/editor/components/column-menu/columns-bubble-menu.tsx","../src/editor/utils/get-render-container.ts","../src/editor/utils/is-text-selected.ts","../src/editor/utils/columns.ts","../src/editor/utils/update-attribute.ts","../src/editor/nodes/columns/column.ts","../src/editor/components/column-menu/use-columns-state.tsx","../src/editor/utils/classname.ts","../src/editor/components/ui/divider.tsx","../src/editor/components/ui/tooltip.tsx","../src/editor/components/vertical-alignment-switch.tsx","../src/editor/components/base-button.tsx","../src/editor/components/bubble-menu-button.tsx","../src/editor/components/show-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/components/popover.tsx","../src/editor/utils/constants.ts","../src/editor/nodes/variable/variable-view.tsx","../src/editor/utils/variable.ts","../src/editor/nodes/variable/variable-popover.tsx","../src/editor/utils/use-outside-click.ts","../src/editor/components/ui/input-autocomplete.tsx","../src/editor/components/column-menu/columns-width-config.tsx","../src/editor/components/ui/select.tsx","../src/editor/components/column-menu/columns-bubble-menu-content.tsx","../src/editor/utils/delete-node.ts","../src/editor/utils/spacing.ts","../src/editor/components/content-menu.tsx","../src/editor/plugins/drag-handle/drag-handle.tsx","../src/editor/plugins/drag-handle/drag-handle-plugin.ts","../src/editor/components/editor-menu-bar.tsx","../src/editor/components/repeat-menu/repeat-bubble-menu.tsx","../src/editor/components/repeat-menu/use-repeat-state.ts","../src/editor/components/image-menu/image-bubble-menu.tsx","../src/editor/components/alignment-switch.tsx","../src/editor/components/ui/link-input-popover.tsx","../src/editor/components/image-menu/image-size.tsx","../src/editor/nodes/logo/logo.ts","../src/editor/nodes/section/section.ts","../src/editor/nodes/logo/logo-view.tsx","../src/editor/utils/use-event.ts","../src/editor/nodes/image/image-view.tsx","../src/editor/components/image-menu/use-image-state.tsx","../src/editor/components/section-menu/section-bubble-menu.tsx","../src/editor/components/icons/border-color.tsx","../src/editor/components/icons/margin-icon.tsx","../src/editor/components/icons/padding-icon.tsx","../src/editor/components/ui/color-picker.tsx","../src/editor/components/section-menu/use-section-state.tsx","../src/editor/components/spacer-menu/spacer-bubble-menu.tsx","../src/editor/components/spacer-menu/use-spacer-state.ts","../src/editor/nodes/columns/columns.ts","../src/editor/extensions/horizontal-rule.tsx","../src/editor/utils/is-custom-node-selected.ts","../src/editor/nodes/spacer.ts","../src/editor/extensions/link-card.ts","../src/editor/nodes/link-card.tsx","../src/editor/components/input.tsx","../src/editor/components/textarea.tsx","../src/editor/nodes/button/button.tsx","../src/editor/nodes/button/button-view.tsx","../src/editor/nodes/button/button-label-input.tsx","../src/editor/nodes/variable/variable.ts","../src/editor/nodes/image/image.ts","../src/editor/nodes/html/html.tsx","../src/editor/nodes/html/html-view.tsx","../src/editor/extensions/maily-kit.tsx","../src/editor/extensions/color.ts","../src/editor/nodes/footer.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-suggestions.tsx","../src/editor/extensions/placeholder.ts","../src/editor/nodes/inline-image/inline-image.tsx","../src/editor/components/text-menu/text-bubble-menu.tsx","../src/editor/components/text-menu/text-bubble-content.tsx","../src/editor/components/text-menu/use-text-menu-state.tsx","../src/editor/components/text-menu/turn-into-block.tsx","../src/editor/components/text-menu/use-turn-into-block-options.tsx","../src/editor/extensions/index.ts","../src/editor/components/variable-menu/variable-bubble-menu.tsx","../src/editor/utils/replace-deprecated.ts","../src/editor/components/html-menu/html-menu.tsx","../src/editor/components/html-menu/use-html-state.ts","../src/editor/components/inline-image-menu/inline-image-bubble-menu.tsx","../src/editor/components/inline-image-menu/use-inline-image-state.tsx"],"sourcesContent":["\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\":root {\\n --placeholder-color: #adb5bd;\\n --bg-color: #ffffff;\\n --variable-icon-size: 12px;\\n --variable-icon-gap: 4px;\\n --color-token-tag: #00c951;\\n --color-meta-string: #2b7fff;\\n --color-attribute: #ad46ff;\\n --color-tag: #313233;\\n --color-meta: #313233d6;\\n}\\n.mly-editor .mly-prose p:where([class~=text-sm]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-size: 16px;\\n}\\n.mly-editor .mly-prose :where(h1, h2, h3):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n margin-bottom: 12px;\\n}\\n.mly-editor .mly-prose :where(h1):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-size: 36px;\\n}\\n.mly-editor .mly-prose :where(h2):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-size: 30px;\\n}\\n.mly-editor .mly-prose :where(h3):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-size: 24px;\\n}\\n.mly-editor .mly-prose p:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-size: 15px;\\n margin-bottom: 20px;\\n}\\n.mly-editor .mly-prose :where(h1, h2, h3, hr, table) + p:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n}\\n.mly-editor .mly-prose :where(ol, ul):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n margin-bottom: 20px;\\n}\\n.mly-editor .mly-prose li:not(:last-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-bottom: 8px;\\n}\\n.mly-editor .mly-prose li > p:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin: 0;\\n}\\n.mly-editor .mly-prose :where(img, .node-logo):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n margin-bottom: 32px;\\n}\\n.mly-editor .mly-prose hr:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-block: 32px;\\n}\\n.mly-editor .mly-prose .footer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n display: block;\\n font-size: 13px;\\n margin-bottom: 20px;\\n color: rgb(100, 116, 139);\\n}\\n.mly-editor .mly-prose .spacer + *:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n}\\n.mly-editor .mly-prose p + .spacer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: -20px;\\n}\\n.mly-editor .mly-prose blockquote + .spacer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: -16px;\\n}\\n.mly-editor .mly-prose :where(h1, h2, h3) + .spacer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: -12px;\\n}\\n.mly-editor .mly-prose :where(ol, ul) + .spacer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: -20px;\\n}\\n.mly-editor .mly-prose :where(img, .node-logo) + .spacer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: -32px;\\n}\\n.mly-editor .mly-prose :where(.node-button, .node-linkCard, footer) + .spacer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: -20px;\\n}\\n.mly-editor .mly-prose :where(.node-button, .node-linkCard):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n margin-bottom: 20px;\\n}\\n.mly-editor .mly-prose .node-image:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n line-height: 0;\\n margin-top: 0;\\n margin-bottom: 32px;\\n outline: none;\\n}\\n.mly-editor .mly-prose .node-image + .spacer:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: -32px;\\n}\\n.mly-editor .mly-prose code::before,\\n.mly-editor .mly-prose code::after {\\n content: none;\\n}\\n.mly-no-scrollbar::-webkit-scrollbar {\\n display: none;\\n}\\n.mly-no-scrollbar {\\n -ms-overflow-style: none;\\n scrollbar-width: none;\\n}\\n.mly-editor .react-colorful__alpha {\\n border-radius: 0;\\n}\\n.mly-editor .react-colorful__saturation,\\n.mly-editor .react-colorful__hue,\\n.mly-editor .react-colorful__alpha {\\n border-radius: 8px;\\n}\\n.mly-editor .react-colorful__hue,\\n.mly-editor .react-colorful__alpha {\\n height: 16px;\\n}\\n.mly-editor .react-colorful__pointer {\\n width: 16px;\\n height: 16px;\\n}\\n.mly-editable .ProseMirror-selectednode::after {\\n content: \\\"\\\";\\n position: absolute;\\n inset: -2px;\\n pointer-events: none;\\n border-radius: 6px;\\n background: rgba(35, 131, 226, 0.14);\\n}\\n.mly-prose {\\n strong {\\n color: currentColor;\\n }\\n}\\n.ProseMirror {\\n position: relative;\\n word-wrap: break-word;\\n white-space: pre-wrap;\\n white-space: break-spaces;\\n font-variant-ligatures: none;\\n font-feature-settings: \\\"liga\\\" 0;\\n &:focus {\\n outline: none;\\n }\\n p:not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n }\\n h1 {\\n --variable-icon-size: 28px;\\n }\\n h2 {\\n --variable-icon-size: 24px;\\n }\\n h3 {\\n --variable-icon-size: 20px;\\n }\\n h1,\\n h2,\\n h3 {\\n --variable-icon-gap: 8px;\\n }\\n :where(.is-editor-empty:first-child, .is-empty):not(:where([data-type=\\\"columns\\\"], [data-type=\\\"section\\\"], ul, li, ol, ))::before {\\n content: attr(data-placeholder);\\n float: left;\\n color: var(--placeholder-color);\\n pointer-events: none;\\n height: 0;\\n }\\n .is-empty:where(.node-htmlCodeBlock):not([data-active-tab=preview])::before,\\n .is-editor-empty:first-child:where(.node-htmlCodeBlock):not([data-active-tab=preview])::before {\\n float: none !important;\\n position: absolute;\\n left: 9px;\\n top: 8px;\\n }\\n .is-empty:where(.node-htmlCodeBlock):not([data-active-tab=code])::before,\\n .is-editor-empty:first-child:where(.node-htmlCodeBlock):not([data-active-tab=code])::before {\\n content: \\\"\\\";\\n }\\n [data-type=columns] .is-empty::before,\\n [data-type=section] .is-empty::before {\\n --l-threshold: 0.66;\\n --diff: calc(var(--l-threshold) - l);\\n color: oklch(from var(--bg-color) clamp(0.05, max(min(var(--diff) * infinity, 1), 0), 0.95) c h) !important;\\n opacity: 0.6;\\n }\\n [data-type=columns] {\\n display: flex;\\n margin: 0;\\n padding: 0;\\n &.has-focus [data-type=column],\\n &:hover [data-type=column] {\\n outline: 1.5px solid #e9ecef;\\n outline-style: dashed;\\n }\\n [data-type=column].has-focus {\\n outline-style: solid;\\n }\\n }\\n [data-type=column] {\\n display: table-cell;\\n flex-basis: 0;\\n flex-grow: 1;\\n overflow: auto;\\n & > *:first-child {\\n margin-top: 0;\\n }\\n & > *:last-child {\\n margin-bottom: 0;\\n }\\n }\\n [data-type=section] {\\n margin: 0;\\n padding: 0;\\n [data-type=section-cell] {\\n padding: 0;\\n & > *:first-child {\\n margin-top: 0;\\n }\\n & > *:last-child {\\n margin-bottom: 0;\\n }\\n }\\n }\\n [data-type=repeat] {\\n [data-node-view-content] > div {\\n & > *:first-child {\\n margin-top: 0;\\n }\\n & > *:last-child {\\n margin-bottom: 0;\\n }\\n }\\n }\\n .node-repeat.has-focus [data-repeat-indicator] {\\n opacity: 1;\\n }\\n [data-type=show] {\\n [data-node-view-content] > div {\\n & > *:first-child {\\n margin-top: 0;\\n }\\n & > *:last-child {\\n margin-bottom: 0;\\n }\\n }\\n }\\n *:has(+ .ProseMirror-gapcursor) {\\n margin-bottom: 0 !important;\\n }\\n .ProseMirror-gapcursor {\\n &::after {\\n border: 1.5px solid gray;\\n width: 24px;\\n }\\n & + * {\\n margin-top: 0 !important;\\n }\\n }\\n pre {\\n code {\\n background: none;\\n color: inherit;\\n }\\n .hljs-comment,\\n .hljs-quote {\\n color: #616161;\\n }\\n .hljs-variable,\\n .hljs-template-variable,\\n .hljs-attribute,\\n .hljs-regexp,\\n .hljs-link,\\n .hljs-selector-id,\\n .hljs-selector-class {\\n color: var(--color-token-tag);\\n }\\n .hljs-tag {\\n color: var(--color-tag);\\n }\\n .hljs-name {\\n color: var(--color-token-tag);\\n }\\n .hljs-number,\\n .hljs-built_in,\\n .hljs-builtin-name,\\n .hljs-literal,\\n .hljs-type,\\n .hljs-params {\\n color: var(--color-meta-string);\\n }\\n .hljs-meta,\\n .hljs-keyword {\\n color: var(--color-meta);\\n }\\n .hljs-string,\\n .hljs-symbol,\\n .hljs-bullet {\\n color: var(--color-meta-string);\\n }\\n .hljs-title,\\n .hljs-section {\\n color: #faf594;\\n }\\n .hljs-emphasis {\\n font-style: italic;\\n }\\n .hljs-strong {\\n font-weight: 700;\\n }\\n .hljs-attr {\\n color: var(--color-attribute);\\n }\\n .hljs-selector-tag {\\n color: var(--color-meta-string);\\n }\\n }\\n}\\n.hide-number-controls {\\n &::-webkit-outer-spin-button,\\n &::-webkit-inner-spin-button {\\n -webkit-appearance: none;\\n margin: 0;\\n }\\n &[type=number] {\\n -moz-appearance: textfield;\\n }\\n}\\n.hide-scrollbars {\\n scrollbar-width: none;\\n -ms-overflow-style: none;\\n &::-webkit-scrollbar {\\n display: none;\\n }\\n}\\n\")","import styleInject from '#style-inject';styleInject(\":where(.mly-editor),\\n:where(.mly-editor) ::before,\\n:where(.mly-editor) ::after {\\n box-sizing: border-box;\\n border-width: 0;\\n border-style: solid;\\n border-color: #e5e7eb;\\n}\\n:where(.mly-editor) ::before,\\n:where(.mly-editor) ::after {\\n --tw-content: \\\"\\\";\\n}\\n:where(.mly-editor) html {\\n line-height: 1.5;\\n -webkit-text-size-adjust: 100%;\\n -moz-tab-size: 4;\\n -o-tab-size: 4;\\n tab-size: 4;\\n font-family:\\n ui-sans-serif,\\n system-ui,\\n sans-serif,\\n \\\"Apple Color Emoji\\\",\\n \\\"Segoe UI Emoji\\\",\\n \\\"Segoe UI Symbol\\\",\\n \\\"Noto Color Emoji\\\";\\n font-feature-settings: normal;\\n font-variation-settings: normal;\\n}\\n:where(.mly-editor) body {\\n margin: 0;\\n line-height: inherit;\\n}\\n:where(.mly-editor) hr {\\n height: 0;\\n color: inherit;\\n border-top-width: 1px;\\n}\\n:where(.mly-editor) abbr:where([title]) {\\n -webkit-text-decoration: underline dotted;\\n text-decoration: underline dotted;\\n}\\n:where(.mly-editor) h1,\\n:where(.mly-editor) h2,\\n:where(.mly-editor) h3,\\n:where(.mly-editor) h4,\\n:where(.mly-editor) h5,\\n:where(.mly-editor) h6 {\\n font-size: inherit;\\n font-weight: inherit;\\n}\\n:where(.mly-editor) a {\\n color: inherit;\\n text-decoration: inherit;\\n}\\n:where(.mly-editor) b,\\n:where(.mly-editor) strong {\\n font-weight: bolder;\\n}\\n:where(.mly-editor) code,\\n:where(.mly-editor) kbd,\\n:where(.mly-editor) samp,\\n:where(.mly-editor) pre {\\n font-family:\\n ui-monospace,\\n SFMono-Regular,\\n Menlo,\\n Monaco,\\n Consolas,\\n \\\"Liberation Mono\\\",\\n \\\"Courier New\\\",\\n monospace;\\n font-size: 1em;\\n}\\n:where(.mly-editor) small {\\n font-size: 80%;\\n}\\n:where(.mly-editor) sub,\\n:where(.mly-editor) sup {\\n font-size: 75%;\\n line-height: 0;\\n position: relative;\\n vertical-align: baseline;\\n}\\n:where(.mly-editor) sub {\\n bottom: -0.25em;\\n}\\n:where(.mly-editor) sup {\\n top: -0.5em;\\n}\\n:where(.mly-editor) table {\\n text-indent: 0;\\n border-color: inherit;\\n border-collapse: collapse;\\n}\\n:where(.mly-editor) button,\\n:where(.mly-editor) input,\\n:where(.mly-editor) optgroup,\\n:where(.mly-editor) select,\\n:where(.mly-editor) textarea {\\n font-family: inherit;\\n font-feature-settings: inherit;\\n font-variation-settings: inherit;\\n font-size: 100%;\\n font-weight: inherit;\\n line-height: inherit;\\n color: inherit;\\n margin: 0;\\n padding: 0;\\n}\\n:where(.mly-editor) button,\\n:where(.mly-editor) select {\\n text-transform: none;\\n}\\n:where(.mly-editor) button,\\n:where(.mly-editor) [type=button],\\n:where(.mly-editor) [type=reset],\\n:where(.mly-editor) [type=submit] {\\n -webkit-appearance: button;\\n background-image: none;\\n}\\n:where(.mly-editor) :-moz-focusring {\\n outline: auto;\\n}\\n:where(.mly-editor) :-moz-ui-invalid {\\n box-shadow: none;\\n}\\n:where(.mly-editor) progress {\\n vertical-align: baseline;\\n}\\n:where(.mly-editor) ::-webkit-inner-spin-button,\\n:where(.mly-editor) ::-webkit-outer-spin-button {\\n height: auto;\\n}\\n:where(.mly-editor) [type=search] {\\n -webkit-appearance: textfield;\\n outline-offset: -2px;\\n}\\n:where(.mly-editor) ::-webkit-search-decoration {\\n -webkit-appearance: none;\\n}\\n:where(.mly-editor) ::-webkit-file-upload-button {\\n -webkit-appearance: button;\\n font: inherit;\\n}\\n:where(.mly-editor) summary {\\n display: list-item;\\n}\\n:where(.mly-editor) blockquote,\\n:where(.mly-editor) dl,\\n:where(.mly-editor) dd,\\n:where(.mly-editor) h1,\\n:where(.mly-editor) h2,\\n:where(.mly-editor) h3,\\n:where(.mly-editor) h4,\\n:where(.mly-editor) h5,\\n:where(.mly-editor) h6,\\n:where(.mly-editor) hr,\\n:where(.mly-editor) figure,\\n:where(.mly-editor) p,\\n:where(.mly-editor) pre {\\n margin: 0;\\n}\\n:where(.mly-editor) fieldset {\\n margin: 0;\\n padding: 0;\\n}\\n:where(.mly-editor) legend {\\n padding: 0;\\n}\\n:where(.mly-editor) ol,\\n:where(.mly-editor) ul,\\n:where(.mly-editor) menu {\\n list-style: none;\\n margin: 0;\\n padding: 0;\\n}\\n:where(.mly-editor) dialog {\\n padding: 0;\\n}\\n:where(.mly-editor) textarea {\\n resize: vertical;\\n}\\n:where(.mly-editor) input::-moz-placeholder,\\n:where(.mly-editor) textarea::-moz-placeholder {\\n opacity: 1;\\n color: #9ca3af;\\n}\\n:where(.mly-editor) input::placeholder,\\n:where(.mly-editor) textarea::placeholder {\\n opacity: 1;\\n color: #9ca3af;\\n}\\n:where(.mly-editor) button,\\n:where(.mly-editor) [role=button] {\\n cursor: pointer;\\n}\\n:where(.mly-editor) :disabled {\\n cursor: default;\\n}\\n:where(.mly-editor) img,\\n:where(.mly-editor) svg,\\n:where(.mly-editor) video,\\n:where(.mly-editor) canvas,\\n:where(.mly-editor) audio,\\n:where(.mly-editor) iframe,\\n:where(.mly-editor) embed,\\n:where(.mly-editor) object {\\n display: block;\\n vertical-align: middle;\\n}\\n:where(.mly-editor) img,\\n:where(.mly-editor) video {\\n max-width: 100%;\\n height: auto;\\n}\\n:where(.mly-editor) [hidden] {\\n display: none;\\n}\\n\")","import styleInject from '#style-inject';styleInject(\"*,\\n::before,\\n::after {\\n --tw-border-spacing-x: 0;\\n --tw-border-spacing-y: 0;\\n --tw-translate-x: 0;\\n --tw-translate-y: 0;\\n --tw-rotate: 0;\\n --tw-skew-x: 0;\\n --tw-skew-y: 0;\\n --tw-scale-x: 1;\\n --tw-scale-y: 1;\\n --tw-pan-x: ;\\n --tw-pan-y: ;\\n --tw-pinch-zoom: ;\\n --tw-scroll-snap-strictness: proximity;\\n --tw-gradient-from-position: ;\\n --tw-gradient-via-position: ;\\n --tw-gradient-to-position: ;\\n --tw-ordinal: ;\\n --tw-slashed-zero: ;\\n --tw-numeric-figure: ;\\n --tw-numeric-spacing: ;\\n --tw-numeric-fraction: ;\\n --tw-ring-inset: ;\\n --tw-ring-offset-width: 0px;\\n --tw-ring-offset-color: #fff;\\n --tw-ring-color: rgb(59 130 246 / 0.5);\\n --tw-ring-offset-shadow: 0 0 #0000;\\n --tw-ring-shadow: 0 0 #0000;\\n --tw-shadow: 0 0 #0000;\\n --tw-shadow-colored: 0 0 #0000;\\n --tw-blur: ;\\n --tw-brightness: ;\\n --tw-contrast: ;\\n --tw-grayscale: ;\\n --tw-hue-rotate: ;\\n --tw-invert: ;\\n --tw-saturate: ;\\n --tw-sepia: ;\\n --tw-drop-shadow: ;\\n --tw-backdrop-blur: ;\\n --tw-backdrop-brightness: ;\\n --tw-backdrop-contrast: ;\\n --tw-backdrop-grayscale: ;\\n --tw-backdrop-hue-rotate: ;\\n --tw-backdrop-invert: ;\\n --tw-backdrop-opacity: ;\\n --tw-backdrop-saturate: ;\\n --tw-backdrop-sepia: ;\\n --tw-contain-size: ;\\n --tw-contain-layout: ;\\n --tw-contain-paint: ;\\n --tw-contain-style: ;\\n}\\n::backdrop {\\n --tw-border-spacing-x: 0;\\n --tw-border-spacing-y: 0;\\n --tw-translate-x: 0;\\n --tw-translate-y: 0;\\n --tw-rotate: 0;\\n --tw-skew-x: 0;\\n --tw-skew-y: 0;\\n --tw-scale-x: 1;\\n --tw-scale-y: 1;\\n --tw-pan-x: ;\\n --tw-pan-y: ;\\n --tw-pinch-zoom: ;\\n --tw-scroll-snap-strictness: proximity;\\n --tw-gradient-from-position: ;\\n --tw-gradient-via-position: ;\\n --tw-gradient-to-position: ;\\n --tw-ordinal: ;\\n --tw-slashed-zero: ;\\n --tw-numeric-figure: ;\\n --tw-numeric-spacing: ;\\n --tw-numeric-fraction: ;\\n --tw-ring-inset: ;\\n --tw-ring-offset-width: 0px;\\n --tw-ring-offset-color: #fff;\\n --tw-ring-color: rgb(59 130 246 / 0.5);\\n --tw-ring-offset-shadow: 0 0 #0000;\\n --tw-ring-shadow: 0 0 #0000;\\n --tw-shadow: 0 0 #0000;\\n --tw-shadow-colored: 0 0 #0000;\\n --tw-blur: ;\\n --tw-brightness: ;\\n --tw-contrast: ;\\n --tw-grayscale: ;\\n --tw-hue-rotate: ;\\n --tw-invert: ;\\n --tw-saturate: ;\\n --tw-sepia: ;\\n --tw-drop-shadow: ;\\n --tw-backdrop-blur: ;\\n --tw-backdrop-brightness: ;\\n --tw-backdrop-contrast: ;\\n --tw-backdrop-grayscale: ;\\n --tw-backdrop-hue-rotate: ;\\n --tw-backdrop-invert: ;\\n --tw-backdrop-opacity: ;\\n --tw-backdrop-saturate: ;\\n --tw-backdrop-sepia: ;\\n --tw-contain-size: ;\\n --tw-contain-layout: ;\\n --tw-contain-paint: ;\\n --tw-contain-style: ;\\n}\\n* {\\n scrollbar-color: initial;\\n scrollbar-width: initial;\\n}\\n.mly-prose {\\n color: var(--tw-prose-body);\\n max-width: 65ch;\\n}\\n.mly-prose :where(p):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 1.25em;\\n margin-bottom: 1.25em;\\n}\\n.mly-prose :where([class~=lead]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-lead);\\n font-size: 1.25em;\\n line-height: 1.6;\\n margin-top: 1.2em;\\n margin-bottom: 1.2em;\\n}\\n.mly-prose :where(a):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-links);\\n text-decoration: underline;\\n font-weight: 500;\\n}\\n.mly-prose :where(strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-bold);\\n font-weight: 600;\\n}\\n.mly-prose :where(a strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(blockquote strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(thead th strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(ol):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: decimal;\\n margin-top: 1.25em;\\n margin-bottom: 1.25em;\\n padding-inline-start: 1.625em;\\n}\\n.mly-prose :where(ol[type=A]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: upper-alpha;\\n}\\n.mly-prose :where(ol[type=a]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: lower-alpha;\\n}\\n.mly-prose :where(ol[type=A s]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: upper-alpha;\\n}\\n.mly-prose :where(ol[type=a s]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: lower-alpha;\\n}\\n.mly-prose :where(ol[type=I]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: upper-roman;\\n}\\n.mly-prose :where(ol[type=i]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: lower-roman;\\n}\\n.mly-prose :where(ol[type=I s]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: upper-roman;\\n}\\n.mly-prose :where(ol[type=i s]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: lower-roman;\\n}\\n.mly-prose :where(ol[type=\\\"1\\\"]):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: decimal;\\n}\\n.mly-prose :where(ul):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n list-style-type: disc;\\n margin-top: 1.25em;\\n margin-bottom: 1.25em;\\n padding-inline-start: 1.625em;\\n}\\n.mly-prose :where(ol > li):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::marker {\\n font-weight: 400;\\n color: var(--tw-prose-counters);\\n}\\n.mly-prose :where(ul > li):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::marker {\\n color: var(--tw-prose-bullets);\\n}\\n.mly-prose :where(dt):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-headings);\\n font-weight: 600;\\n margin-top: 1.25em;\\n}\\n.mly-prose :where(hr):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n border-color: var(--tw-prose-hr);\\n border-top-width: 1px;\\n margin-top: 3em;\\n margin-bottom: 3em;\\n}\\n.mly-prose :where(blockquote):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-weight: 500;\\n font-style: italic;\\n color: var(--tw-prose-quotes);\\n border-inline-start-width: 0.25rem;\\n border-inline-start-color: var(--tw-prose-quote-borders);\\n quotes: \\\"\\\\201c\\\"\\\"\\\\201d\\\"\\\"\\\\2018\\\"\\\"\\\\2019\\\";\\n margin-top: 1.6em;\\n margin-bottom: 1.6em;\\n padding-inline-start: 1em;\\n}\\n.mly-prose :where(blockquote p:first-of-type):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::before {\\n content: open-quote;\\n}\\n.mly-prose :where(blockquote p:last-of-type):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::after {\\n content: close-quote;\\n}\\n.mly-prose :where(h1):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-headings);\\n font-weight: 800;\\n font-size: 2.25em;\\n margin-top: 0;\\n margin-bottom: 0.8888889em;\\n line-height: 1.1111111;\\n}\\n.mly-prose :where(h1 strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-weight: 900;\\n color: inherit;\\n}\\n.mly-prose :where(h2):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-headings);\\n font-weight: 700;\\n font-size: 1.5em;\\n margin-top: 2em;\\n margin-bottom: 1em;\\n line-height: 1.3333333;\\n}\\n.mly-prose :where(h2 strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-weight: 800;\\n color: inherit;\\n}\\n.mly-prose :where(h3):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-headings);\\n font-weight: 600;\\n font-size: 1.25em;\\n margin-top: 1.6em;\\n margin-bottom: 0.6em;\\n line-height: 1.6;\\n}\\n.mly-prose :where(h3 strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-weight: 700;\\n color: inherit;\\n}\\n.mly-prose :where(h4):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-headings);\\n font-weight: 600;\\n margin-top: 1.5em;\\n margin-bottom: 0.5em;\\n line-height: 1.5;\\n}\\n.mly-prose :where(h4 strong):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-weight: 700;\\n color: inherit;\\n}\\n.mly-prose :where(img):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 2em;\\n margin-bottom: 2em;\\n}\\n.mly-prose :where(picture):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n display: block;\\n margin-top: 2em;\\n margin-bottom: 2em;\\n}\\n.mly-prose :where(video):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 2em;\\n margin-bottom: 2em;\\n}\\n.mly-prose :where(kbd):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n font-weight: 500;\\n font-family: inherit;\\n color: var(--tw-prose-kbd);\\n box-shadow: 0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%), 0 3px 0 rgb(var(--tw-prose-kbd-shadows) / 10%);\\n font-size: 0.875em;\\n border-radius: 0.3125rem;\\n padding-top: 0.1875em;\\n padding-inline-end: 0.375em;\\n padding-bottom: 0.1875em;\\n padding-inline-start: 0.375em;\\n}\\n.mly-prose :where(code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-code);\\n font-weight: 600;\\n font-size: 0.875em;\\n}\\n.mly-prose :where(code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::before {\\n content: \\\"`\\\";\\n}\\n.mly-prose :where(code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::after {\\n content: \\\"`\\\";\\n}\\n.mly-prose :where(a code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(h1 code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(h2 code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n font-size: 0.875em;\\n}\\n.mly-prose :where(h3 code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n font-size: 0.9em;\\n}\\n.mly-prose :where(h4 code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(blockquote code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(thead th code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: inherit;\\n}\\n.mly-prose :where(pre):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-pre-code);\\n background-color: var(--tw-prose-pre-bg);\\n overflow-x: auto;\\n font-weight: 400;\\n font-size: 0.875em;\\n line-height: 1.7142857;\\n margin-top: 1.7142857em;\\n margin-bottom: 1.7142857em;\\n border-radius: 0.375rem;\\n padding-top: 0.8571429em;\\n padding-inline-end: 1.1428571em;\\n padding-bottom: 0.8571429em;\\n padding-inline-start: 1.1428571em;\\n}\\n.mly-prose :where(pre code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n background-color: transparent;\\n border-width: 0;\\n border-radius: 0;\\n padding: 0;\\n font-weight: inherit;\\n color: inherit;\\n font-size: inherit;\\n font-family: inherit;\\n line-height: inherit;\\n}\\n.mly-prose :where(pre code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::before {\\n content: none;\\n}\\n.mly-prose :where(pre code):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *))::after {\\n content: none;\\n}\\n.mly-prose :where(table):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n width: 100%;\\n table-layout: auto;\\n margin-top: 2em;\\n margin-bottom: 2em;\\n font-size: 0.875em;\\n line-height: 1.7142857;\\n}\\n.mly-prose :where(thead):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n border-bottom-width: 1px;\\n border-bottom-color: var(--tw-prose-th-borders);\\n}\\n.mly-prose :where(thead th):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-headings);\\n font-weight: 600;\\n vertical-align: bottom;\\n padding-inline-end: 0.5714286em;\\n padding-bottom: 0.5714286em;\\n padding-inline-start: 0.5714286em;\\n}\\n.mly-prose :where(tbody tr):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n border-bottom-width: 1px;\\n border-bottom-color: var(--tw-prose-td-borders);\\n}\\n.mly-prose :where(tbody tr:last-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n border-bottom-width: 0;\\n}\\n.mly-prose :where(tbody td):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n vertical-align: baseline;\\n}\\n.mly-prose :where(tfoot):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n border-top-width: 1px;\\n border-top-color: var(--tw-prose-th-borders);\\n}\\n.mly-prose :where(tfoot td):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n vertical-align: top;\\n}\\n.mly-prose :where(th, td):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n text-align: start;\\n}\\n.mly-prose :where(figure > *):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n.mly-prose :where(figcaption):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n color: var(--tw-prose-captions);\\n font-size: 0.875em;\\n line-height: 1.4285714;\\n margin-top: 0.8571429em;\\n}\\n.mly-prose {\\n --tw-prose-body: #374151;\\n --tw-prose-headings: #111827;\\n --tw-prose-lead: #4b5563;\\n --tw-prose-links: #111827;\\n --tw-prose-bold: #111827;\\n --tw-prose-counters: #6b7280;\\n --tw-prose-bullets: #d1d5db;\\n --tw-prose-hr: #e5e7eb;\\n --tw-prose-quotes: #111827;\\n --tw-prose-quote-borders: #e5e7eb;\\n --tw-prose-captions: #6b7280;\\n --tw-prose-kbd: #111827;\\n --tw-prose-kbd-shadows: 17 24 39;\\n --tw-prose-code: #111827;\\n --tw-prose-pre-code: #e5e7eb;\\n --tw-prose-pre-bg: #1f2937;\\n --tw-prose-th-borders: #d1d5db;\\n --tw-prose-td-borders: #e5e7eb;\\n --tw-prose-invert-body: #d1d5db;\\n --tw-prose-invert-headings: #fff;\\n --tw-prose-invert-lead: #9ca3af;\\n --tw-prose-invert-links: #fff;\\n --tw-prose-invert-bold: #fff;\\n --tw-prose-invert-counters: #9ca3af;\\n --tw-prose-invert-bullets: #4b5563;\\n --tw-prose-invert-hr: #374151;\\n --tw-prose-invert-quotes: #f3f4f6;\\n --tw-prose-invert-quote-borders: #374151;\\n --tw-prose-invert-captions: #9ca3af;\\n --tw-prose-invert-kbd: #fff;\\n --tw-prose-invert-kbd-shadows: 255 255 255;\\n --tw-prose-invert-code: #fff;\\n --tw-prose-invert-pre-code: #d1d5db;\\n --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);\\n --tw-prose-invert-th-borders: #4b5563;\\n --tw-prose-invert-td-borders: #374151;\\n font-size: 1rem;\\n line-height: 1.75;\\n}\\n.mly-prose :where(picture > img):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n.mly-prose :where(li):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0.5em;\\n margin-bottom: 0.5em;\\n}\\n.mly-prose :where(ol > li):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n padding-inline-start: 0.375em;\\n}\\n.mly-prose :where(ul > li):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n padding-inline-start: 0.375em;\\n}\\n.mly-prose :where(.mly-prose > ul > li p):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0.75em;\\n margin-bottom: 0.75em;\\n}\\n.mly-prose :where(.mly-prose > ul > li > p:first-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 1.25em;\\n}\\n.mly-prose :where(.mly-prose > ul > li > p:last-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-bottom: 1.25em;\\n}\\n.mly-prose :where(.mly-prose > ol > li > p:first-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 1.25em;\\n}\\n.mly-prose :where(.mly-prose > ol > li > p:last-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-bottom: 1.25em;\\n}\\n.mly-prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0.75em;\\n margin-bottom: 0.75em;\\n}\\n.mly-prose :where(dl):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 1.25em;\\n margin-bottom: 1.25em;\\n}\\n.mly-prose :where(dd):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0.5em;\\n padding-inline-start: 1.625em;\\n}\\n.mly-prose :where(hr + *):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n}\\n.mly-prose :where(h2 + *):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n}\\n.mly-prose :where(h3 + *):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n}\\n.mly-prose :where(h4 + *):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n}\\n.mly-prose :where(thead th:first-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n padding-inline-start: 0;\\n}\\n.mly-prose :where(thead th:last-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n padding-inline-end: 0;\\n}\\n.mly-prose :where(tbody td, tfoot td):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n padding-top: 0.5714286em;\\n padding-inline-end: 0.5714286em;\\n padding-bottom: 0.5714286em;\\n padding-inline-start: 0.5714286em;\\n}\\n.mly-prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n padding-inline-start: 0;\\n}\\n.mly-prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n padding-inline-end: 0;\\n}\\n.mly-prose :where(figure):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 2em;\\n margin-bottom: 2em;\\n}\\n.mly-prose :where(.mly-prose > :first-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-top: 0;\\n}\\n.mly-prose :where(.mly-prose > :last-child):not(:where([class~=mly-not-prose], [class~=mly-not-prose] *)) {\\n margin-bottom: 0;\\n}\\n.mly-sr-only {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip: rect(0, 0, 0, 0);\\n white-space: nowrap;\\n border-width: 0;\\n}\\n.mly-pointer-events-none {\\n pointer-events: none;\\n}\\n.mly-visible {\\n visibility: visible;\\n}\\n.mly-absolute {\\n position: absolute;\\n}\\n.mly-relative {\\n position: relative;\\n}\\n.mly-inset-0 {\\n inset: 0px;\\n}\\n.mly-inset-y-0 {\\n top: 0px;\\n bottom: 0px;\\n}\\n.mly-left-0 {\\n left: 0px;\\n}\\n.mly-left-1\\\\.5 {\\n left: 0.375rem;\\n}\\n.mly-left-2 {\\n left: 0.5rem;\\n}\\n.mly-right-0 {\\n right: 0px;\\n}\\n.mly-right-1 {\\n right: 0.25rem;\\n}\\n.mly-top-0 {\\n top: 0px;\\n}\\n.mly-top-8 {\\n top: 2rem;\\n}\\n.mly-isolate {\\n isolation: isolate;\\n}\\n.mly-z-0 {\\n z-index: 0;\\n}\\n.mly-z-10 {\\n z-index: 10;\\n}\\n.mly-z-20 {\\n z-index: 20;\\n}\\n.mly-z-50 {\\n z-index: 50;\\n}\\n.mly-z-\\\\[1\\\\] {\\n z-index: 1;\\n}\\n.mly-z-\\\\[9999\\\\] {\\n z-index: 9999;\\n}\\n.\\\\!mly-my-0 {\\n margin-top: 0px !important;\\n margin-bottom: 0px !important;\\n}\\n.-mly-mx-4 {\\n margin-left: -1rem;\\n margin-right: -1rem;\\n}\\n.mly--mx-1 {\\n margin-left: -0.25rem;\\n margin-right: -0.25rem;\\n}\\n.mly-mx-0 {\\n margin-left: 0px;\\n margin-right: 0px;\\n}\\n.mly-mx-0\\\\.5 {\\n margin-left: 0.125rem;\\n margin-right: 0.125rem;\\n}\\n.mly-mx-1\\\\.5 {\\n margin-left: 0.375rem;\\n margin-right: 0.375rem;\\n}\\n.mly-my-0 {\\n margin-top: 0px;\\n margin-bottom: 0px;\\n}\\n.mly-my-0\\\\.5 {\\n margin-top: 0.125rem;\\n margin-bottom: 0.125rem;\\n}\\n.mly-my-1 {\\n margin-top: 0.25rem;\\n margin-bottom: 0.25rem;\\n}\\n.mly-my-2 {\\n margin-top: 0.5rem;\\n margin-bottom: 0.5rem;\\n}\\n.mly-my-4 {\\n margin-top: 1rem;\\n margin-bottom: 1rem;\\n}\\n.\\\\!mly-mb-0 {\\n margin-bottom: 0px !important;\\n}\\n.\\\\!mly-mb-1\\\\.5 {\\n margin-bottom: 0.375rem !important;\\n}\\n.-mly-ms-px {\\n margin-inline-start: -1px;\\n}\\n.mly-mb-1\\\\.5 {\\n margin-bottom: 0.375rem;\\n}\\n.mly-mb-2 {\\n margin-bottom: 0.5rem;\\n}\\n.mly-mb-4 {\\n margin-bottom: 1rem;\\n}\\n.mly-ml-1 {\\n margin-left: 0.25rem;\\n}\\n.mly-ml-auto {\\n margin-left: auto;\\n}\\n.mly-mt-1 {\\n margin-top: 0.25rem;\\n}\\n.mly-mt-2 {\\n margin-top: 0.5rem;\\n}\\n.mly-mt-4 {\\n margin-top: 1rem;\\n}\\n.mly-block {\\n display: block;\\n}\\n.mly-inline-block {\\n display: inline-block;\\n}\\n.mly-inline {\\n display: inline;\\n}\\n.mly-flex {\\n display: flex;\\n}\\n.mly-inline-flex {\\n display: inline-flex;\\n}\\n.mly-grid {\\n display: grid;\\n}\\n.mly-inline-grid {\\n display: inline-grid;\\n}\\n.mly-hidden {\\n display: none;\\n}\\n.mly-aspect-\\\\[2\\\\.5\\\\] {\\n aspect-ratio: 2.5;\\n}\\n.mly-aspect-square {\\n aspect-ratio: 1 / 1;\\n}\\n.\\\\!mly-size-5 {\\n width: 1.25rem !important;\\n height: 1.25rem !important;\\n}\\n.\\\\!mly-size-7 {\\n width: 1.75rem !important;\\n height: 1.75rem !important;\\n}\\n.mly-size-3 {\\n width: 0.75rem;\\n height: 0.75rem;\\n}\\n.mly-size-3\\\\.5 {\\n width: 0.875rem;\\n height: 0.875rem;\\n}\\n.mly-size-4 {\\n width: 1rem;\\n height: 1rem;\\n}\\n.mly-size-5 {\\n width: 1.25rem;\\n height: 1.25rem;\\n}\\n.mly-size-6 {\\n width: 1.5rem;\\n height: 1.5rem;\\n}\\n.mly-size-7 {\\n width: 1.75rem;\\n height: 1.75rem;\\n}\\n.mly-size-\\\\[15px\\\\] {\\n width: 15px;\\n height: 15px;\\n}\\n.mly-size-\\\\[var\\\\(--variable-icon-size\\\\)\\\\] {\\n width: var(--variable-icon-size);\\n height: var(--variable-icon-size);\\n}\\n.\\\\!mly-h-7 {\\n height: 1.75rem !important;\\n}\\n.mly-h-10 {\\n height: 2.5rem;\\n}\\n.mly-h-11 {\\n height: 2.75rem;\\n}\\n.mly-h-3 {\\n height: 0.75rem;\\n}\\n.mly-h-4 {\\n height: 1rem;\\n}\\n.mly-h-5 {\\n height: 1.25rem;\\n}\\n.mly-h-6 {\\n height: 1.5rem;\\n}\\n.mly-h-7 {\\n height: 1.75rem;\\n}\\n.mly-h-8 {\\n height: 2rem;\\n}\\n.mly-h-9 {\\n height: 2.25rem;\\n}\\n.mly-h-\\\\[2px\\\\] {\\n height: 2px;\\n}\\n.mly-h-auto {\\n height: auto;\\n}\\n.mly-h-full {\\n height: 100%;\\n}\\n.mly-h-px {\\n height: 1px;\\n}\\n.mly-max-h-52 {\\n max-height: 13rem;\\n}\\n.mly-max-h-\\\\[330px\\\\] {\\n max-height: 330px;\\n}\\n.mly-min-h-24 {\\n min-height: 6rem;\\n}\\n.mly-min-h-7 {\\n min-height: 1.75rem;\\n}\\n.mly-min-h-\\\\[42px\\\\] {\\n min-height: 42px;\\n}\\n.\\\\!mly-w-full {\\n width: 100% !important;\\n}\\n.mly-w-10 {\\n width: 2.5rem;\\n}\\n.mly-w-3 {\\n width: 0.75rem;\\n}\\n.mly-w-32 {\\n width: 8rem;\\n}\\n.mly-w-36 {\\n width: 9rem;\\n}\\n.mly-w-4 {\\n width: 1rem;\\n}\\n.mly-w-40 {\\n width: 10rem;\\n}\\n.mly-w-5 {\\n width: 1.25rem;\\n}\\n.mly-w-52 {\\n width: 13rem;\\n}\\n.mly-w-6 {\\n width: 1.5rem;\\n}\\n.mly-w-64 {\\n width: 16rem;\\n}\\n.mly-w-7 {\\n width: 1.75rem;\\n}\\n.mly-w-72 {\\n width: 18rem;\\n}\\n.mly-w-9 {\\n width: 2.25rem;\\n}\\n.mly-w-96 {\\n width: 24rem;\\n}\\n.mly-w-\\\\[1\\\\.5px\\\\] {\\n width: 1.5px;\\n}\\n.mly-w-\\\\[160px\\\\] {\\n width: 160px;\\n}\\n.mly-w-\\\\[300px\\\\] {\\n width: 300px;\\n}\\n.mly-w-fit {\\n width: -moz-fit-content;\\n width: fit-content;\\n}\\n.mly-w-full {\\n width: 100%;\\n}\\n.mly-w-max {\\n width: -moz-max-content;\\n width: max-content;\\n}\\n.mly-w-px {\\n width: 1px;\\n}\\n.mly-min-w-0 {\\n min-width: 0px;\\n}\\n.mly-min-w-28 {\\n min-width: 7rem;\\n}\\n.mly-min-w-\\\\[260px\\\\] {\\n min-width: 260px;\\n}\\n.mly-min-w-\\\\[8rem\\\\] {\\n min-width: 8rem;\\n}\\n.mly-min-w-full {\\n min-width: 100%;\\n}\\n.mly-max-w-12 {\\n max-width: 3rem;\\n}\\n.mly-max-w-20 {\\n max-width: 5rem;\\n}\\n.mly-max-w-28 {\\n max-width: 7rem;\\n}\\n.mly-max-w-\\\\[260px\\\\] {\\n max-width: 260px;\\n}\\n.mly-max-w-\\\\[285px\\\\] {\\n max-width: 285px;\\n}\\n.mly-max-w-max {\\n max-width: -moz-max-content;\\n max-width: max-content;\\n}\\n.mly-max-w-xs {\\n max-width: 20rem;\\n}\\n.mly-shrink-0 {\\n flex-shrink: 0;\\n}\\n.mly-grow {\\n flex-grow: 1;\\n}\\n.mly-table-fixed {\\n table-layout: fixed;\\n}\\n.mly-border-separate {\\n border-collapse: separate;\\n}\\n.mly-translate-x-full {\\n --tw-translate-x: 100%;\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.mly-transform {\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n@keyframes mly-spin {\\n to {\\n transform: rotate(360deg);\\n }\\n}\\n.mly-animate-spin {\\n animation: mly-spin 1s linear infinite;\\n}\\n.mly-cursor-default {\\n cursor: default;\\n}\\n.mly-cursor-grab {\\n cursor: grab;\\n}\\n.mly-cursor-pointer {\\n cursor: pointer;\\n}\\n.mly-select-none {\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.mly-appearance-none {\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n}\\n.mly-grid-cols-2 {\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n}\\n.mly-grid-cols-\\\\[12px_1fr\\\\] {\\n grid-template-columns: 12px 1fr;\\n}\\n.mly-flex-col {\\n flex-direction: column;\\n}\\n.mly-flex-wrap {\\n flex-wrap: wrap;\\n}\\n.mly-items-center {\\n align-items: center;\\n}\\n.mly-items-stretch {\\n align-items: stretch;\\n}\\n.mly-justify-start {\\n justify-content: flex-start;\\n}\\n.mly-justify-center {\\n justify-content: center;\\n}\\n.mly-justify-between {\\n justify-content: space-between;\\n}\\n.mly-gap-0\\\\.5 {\\n gap: 0.125rem;\\n}\\n.mly-gap-1 {\\n gap: 0.25rem;\\n}\\n.mly-gap-1\\\\.5 {\\n gap: 0.375rem;\\n}\\n.mly-gap-2 {\\n gap: 0.5rem;\\n}\\n.mly-gap-3 {\\n gap: 0.75rem;\\n}\\n.mly-gap-4 {\\n gap: 1rem;\\n}\\n.mly-gap-\\\\[1px\\\\] {\\n gap: 1px;\\n}\\n.mly-gap-\\\\[var\\\\(--variable-icon-gap\\\\)\\\\] {\\n gap: var(--variable-icon-gap);\\n}\\n.mly-space-x-0\\\\.5 > :not([hidden]) ~ :not([hidden]) {\\n --tw-space-x-reverse: 0;\\n margin-right: calc(0.125rem * var(--tw-space-x-reverse));\\n margin-left: calc(0.125rem * calc(1 - var(--tw-space-x-reverse)));\\n}\\n.mly-space-y-0\\\\.5 > :not([hidden]) ~ :not([hidden]) {\\n --tw-space-y-reverse: 0;\\n margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse)));\\n margin-bottom: calc(0.125rem * var(--tw-space-y-reverse));\\n}\\n.mly-space-y-1 > :not([hidden]) ~ :not([hidden]) {\\n --tw-space-y-reverse: 0;\\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\\n}\\n.mly-overflow-hidden {\\n overflow: hidden;\\n}\\n.mly-overflow-y-auto {\\n overflow-y: auto;\\n}\\n.mly-scroll-smooth {\\n scroll-behavior: smooth;\\n}\\n.mly-truncate {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.\\\\!mly-rounded {\\n border-radius: 0.25rem !important;\\n}\\n.\\\\!mly-rounded-full {\\n border-radius: 9999px !important;\\n}\\n.\\\\!mly-rounded-md {\\n border-radius: 0.375rem !important;\\n}\\n.\\\\!mly-rounded-none {\\n border-radius: 0px !important;\\n}\\n.mly-rounded {\\n border-radius: 0.25rem;\\n}\\n.mly-rounded-full {\\n border-radius: 9999px;\\n}\\n.mly-rounded-lg {\\n border-radius: 0.5rem;\\n}\\n.mly-rounded-md {\\n border-radius: 0.375rem;\\n}\\n.mly-rounded-none {\\n border-radius: 0px;\\n}\\n.mly-rounded-sm {\\n border-radius: 0.125rem;\\n}\\n.mly-rounded-xl {\\n border-radius: 0.75rem;\\n}\\n.mly-rounded-s-lg {\\n border-start-start-radius: 0.5rem;\\n border-end-start-radius: 0.5rem;\\n}\\n.mly-rounded-s-none {\\n border-start-start-radius: 0px;\\n border-end-start-radius: 0px;\\n}\\n.mly-rounded-t-lg {\\n border-top-left-radius: 0.5rem;\\n border-top-right-radius: 0.5rem;\\n}\\n.mly-border {\\n border-width: 1px;\\n}\\n.mly-border-0 {\\n border-width: 0px;\\n}\\n.mly-border-2 {\\n border-width: 2px;\\n}\\n.mly-border-\\\\[1\\\\.5px\\\\] {\\n border-width: 1.5px;\\n}\\n.mly-border-b {\\n border-bottom-width: 1px;\\n}\\n.mly-border-l-4 {\\n border-left-width: 4px;\\n}\\n.mly-border-t {\\n border-top-width: 1px;\\n}\\n.mly-border-none {\\n border-style: none;\\n}\\n.mly-border-\\\\[var\\\\(--button-var-border-color\\\\)\\\\] {\\n border-color: var(--button-var-border-color);\\n}\\n.mly-border-gray-200 {\\n --tw-border-opacity: 1;\\n border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));\\n}\\n.mly-border-gray-300 {\\n --tw-border-opacity: 1;\\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\\n}\\n.mly-border-gray-700 {\\n --tw-border-opacity: 1;\\n border-color: rgb(55 65 81 / var(--tw-border-opacity, 1));\\n}\\n.mly-border-rose-400 {\\n --tw-border-opacity: 1;\\n border-color: rgb(251 113 133 / var(--tw-border-opacity, 1));\\n}\\n.mly-border-slate-200 {\\n --tw-border-opacity: 1;\\n border-color: rgb(226 232 240 / var(--tw-border-opacity, 1));\\n}\\n.mly-border-white {\\n --tw-border-opacity: 1;\\n border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\\n}\\n.\\\\!mly-bg-transparent {\\n background-color: transparent !important;\\n}\\n.mly-bg-\\\\[\\\\#efefef\\\\] {\\n --tw-bg-opacity: 1;\\n background-color: rgb(239 239 239 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-gray-100 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-gray-200 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-gray-50 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-gray-900 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-red-100 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-red-500 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-rose-100 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(255 228 230 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-rose-300 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(253 164 175 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-rose-50 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(255 241 242 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-rose-500 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(244 63 94 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-soft-gray {\\n --tw-bg-opacity: 1;\\n background-color: rgb(244 245 246 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-soft-gray\\\\/40 {\\n background-color: rgb(244 245 246 / 0.4);\\n}\\n.mly-bg-soft-gray\\\\/60 {\\n background-color: rgb(244 245 246 / 0.6);\\n}\\n.mly-bg-transparent {\\n background-color: transparent;\\n}\\n.mly-bg-white {\\n --tw-bg-opacity: 1;\\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\\n}\\n.mly-bg-yellow-200 {\\n --tw-bg-opacity: 1;\\n background-color: rgb(254 240 138 / var(--tw-bg-opacity, 1));\\n}\\n.mly-stroke-midnight-gray {\\n stroke: #333333;\\n}\\n.mly-stroke-\\\\[1\\\\.2\\\\] {\\n stroke-width: 1.2;\\n}\\n.mly-stroke-\\\\[1\\\\] {\\n stroke-width: 1;\\n}\\n.mly-stroke-\\\\[2\\\\.5\\\\] {\\n stroke-width: 2.5;\\n}\\n.mly-object-cover {\\n -o-object-fit: cover;\\n object-fit: cover;\\n}\\n.\\\\!mly-p-0 {\\n padding: 0px !important;\\n}\\n.\\\\!mly-p-0\\\\.5 {\\n padding: 0.125rem !important;\\n}\\n.mly-p-0 {\\n padding: 0px;\\n}\\n.mly-p-0\\\\.5 {\\n padding: 0.125rem;\\n}\\n.mly-p-1 {\\n padding: 0.25rem;\\n}\\n.mly-p-2 {\\n padding: 0.5rem;\\n}\\n.mly-p-3 {\\n padding: 0.75rem;\\n}\\n.mly-p-4 {\\n padding: 1rem;\\n}\\n.mly-px-0\\\\.5 {\\n padding-left: 0.125rem;\\n padding-right: 0.125rem;\\n}\\n.mly-px-1 {\\n padding-left: 0.25rem;\\n padding-right: 0.25rem;\\n}\\n.mly-px-1\\\\.5 {\\n padding-left: 0.375rem;\\n padding-right: 0.375rem;\\n}\\n.mly-px-2 {\\n padding-left: 0.5rem;\\n padding-right: 0.5rem;\\n}\\n.mly-px-2\\\\.5 {\\n padding-left: 0.625rem;\\n padding-right: 0.625rem;\\n}\\n.mly-px-3 {\\n padding-left: 0.75rem;\\n padding-right: 0.75rem;\\n}\\n.mly-px-4 {\\n padding-left: 1rem;\\n padding-right: 1rem;\\n}\\n.mly-px-8 {\\n padding-left: 2rem;\\n padding-right: 2rem;\\n}\\n.mly-px-\\\\[26px\\\\] {\\n padding-left: 26px;\\n padding-right: 26px;\\n}\\n.mly-py-0\\\\.5 {\\n padding-top: 0.125rem;\\n padding-bottom: 0.125rem;\\n}\\n.mly-py-1 {\\n padding-top: 0.25rem;\\n padding-bottom: 0.25rem;\\n}\\n.mly-py-1\\\\.5 {\\n padding-top: 0.375rem;\\n padding-bottom: 0.375rem;\\n}\\n.mly-py-2 {\\n padding-top: 0.5rem;\\n padding-bottom: 0.5rem;\\n}\\n.mly-py-3 {\\n padding-top: 0.75rem;\\n padding-bottom: 0.75rem;\\n}\\n.mly-pe-8 {\\n padding-inline-end: 2rem;\\n}\\n.mly-pl-1 {\\n padding-left: 0.25rem;\\n}\\n.mly-pl-4 {\\n padding-left: 1rem;\\n}\\n.mly-pl-7 {\\n padding-left: 1.75rem;\\n}\\n.mly-pl-8 {\\n padding-left: 2rem;\\n}\\n.mly-pl-\\\\[26px\\\\] {\\n padding-left: 26px;\\n}\\n.mly-pr-1\\\\.5 {\\n padding-right: 0.375rem;\\n}\\n.mly-pr-6 {\\n padding-right: 1.5rem;\\n}\\n.mly-pr-7 {\\n padding-right: 1.75rem;\\n}\\n.mly-ps-3 {\\n padding-inline-start: 0.75rem;\\n}\\n.mly-text-left {\\n text-align: left;\\n}\\n.mly-text-center {\\n text-align: center;\\n}\\n.mly-font-mono {\\n font-family:\\n ui-monospace,\\n SFMono-Regular,\\n Menlo,\\n Monaco,\\n Consolas,\\n \\\"Liberation Mono\\\",\\n \\\"Courier New\\\",\\n monospace;\\n}\\n.\\\\!mly-text-base {\\n font-size: 1rem !important;\\n line-height: 1.5rem !important;\\n}\\n.\\\\!mly-text-lg {\\n font-size: 1.125rem !important;\\n line-height: 1.75rem !important;\\n}\\n.mly-text-\\\\[10px\\\\] {\\n font-size: 10px;\\n}\\n.mly-text-\\\\[13px\\\\] {\\n font-size: 13px;\\n}\\n.mly-text-sm {\\n font-size: 0.875rem;\\n line-height: 1.25rem;\\n}\\n.mly-text-xs {\\n font-size: 0.75rem;\\n line-height: 1rem;\\n}\\n.mly-font-medium {\\n font-weight: 500;\\n}\\n.mly-font-normal {\\n font-weight: 400;\\n}\\n.mly-font-semibold {\\n font-weight: 600;\\n}\\n.mly-uppercase {\\n text-transform: uppercase;\\n}\\n.mly-capitalize {\\n text-transform: capitalize;\\n}\\n.mly-tabular-nums {\\n --tw-numeric-spacing: tabular-nums;\\n font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);\\n}\\n.mly-leading-none {\\n line-height: 1;\\n}\\n.mly-tracking-normal {\\n letter-spacing: 0em;\\n}\\n.mly-tracking-widest {\\n letter-spacing: 0.1em;\\n}\\n.mly-text-black {\\n --tw-text-opacity: 1;\\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-gray-400 {\\n --tw-text-opacity: 1;\\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-gray-50 {\\n --tw-text-opacity: 1;\\n color: rgb(249 250 251 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-gray-500 {\\n --tw-text-opacity: 1;\\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-gray-600 {\\n --tw-text-opacity: 1;\\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-gray-700 {\\n --tw-text-opacity: 1;\\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-gray-900 {\\n --tw-text-opacity: 1;\\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-gray-950 {\\n --tw-text-opacity: 1;\\n color: rgb(3 7 18 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-midnight-gray {\\n --tw-text-opacity: 1;\\n color: rgb(51 51 51 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-midnight-gray\\\\/60 {\\n color: rgb(51 51 51 / 0.6);\\n}\\n.mly-text-red-500 {\\n --tw-text-opacity: 1;\\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-red-600 {\\n --tw-text-opacity: 1;\\n color: rgb(220 38 38 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-rose-600 {\\n --tw-text-opacity: 1;\\n color: rgb(225 29 72 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-rose-800 {\\n --tw-text-opacity: 1;\\n color: rgb(159 18 57 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-slate-400 {\\n --tw-text-opacity: 1;\\n color: rgb(148 163 184 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-slate-500 {\\n --tw-text-opacity: 1;\\n color: rgb(100 116 139 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-slate-600 {\\n --tw-text-opacity: 1;\\n color: rgb(71 85 105 / var(--tw-text-opacity, 1));\\n}\\n.mly-text-slate-700 {\\n --tw-text-opacity: 1;\\n color: rgb(51 65 85 / var(--tw-text-opacity, 1));\\n}\\n.mly-no-underline {\\n text-decoration-line: none;\\n}\\n.mly-underline-offset-4 {\\n text-underline-offset: 4px;\\n}\\n.mly-antialiased {\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n.mly-opacity-60 {\\n opacity: 0.6;\\n}\\n.mly-shadow {\\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.mly-shadow-lg {\\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.mly-shadow-md {\\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.mly-shadow-none {\\n --tw-shadow: 0 0 #0000;\\n --tw-shadow-colored: 0 0 #0000;\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.mly-shadow-sm {\\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.mly-outline-none {\\n outline: 2px solid transparent;\\n outline-offset: 2px;\\n}\\n.mly-ring-offset-white {\\n --tw-ring-offset-color: #fff;\\n}\\n.mly-drop-shadow-md {\\n --tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06));\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.mly-transition-all {\\n transition-property: all;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.mly-transition-colors {\\n transition-property:\\n color,\\n background-color,\\n border-color,\\n text-decoration-color,\\n fill,\\n stroke;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.mly-transition-shadow {\\n transition-property: box-shadow;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.mly-ease-out {\\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n}\\n@keyframes enter {\\n from {\\n opacity: var(--tw-enter-opacity, 1);\\n transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0));\\n }\\n}\\n@keyframes exit {\\n to {\\n opacity: var(--tw-exit-opacity, 1);\\n transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));\\n }\\n}\\n.mly-animate-in {\\n animation-name: enter;\\n animation-duration: 150ms;\\n --tw-enter-opacity: initial;\\n --tw-enter-scale: initial;\\n --tw-enter-rotate: initial;\\n --tw-enter-translate-x: initial;\\n --tw-enter-translate-y: initial;\\n}\\n.mly-fade-in-0 {\\n --tw-enter-opacity: 0;\\n}\\n.mly-zoom-in-95 {\\n --tw-enter-scale: .95;\\n}\\n.mly-ease-out {\\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-track {\\n background-color: var(--scrollbar-track);\\n border-radius: var(--scrollbar-track-radius);\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-track:hover {\\n background-color: var(--scrollbar-track-hover, var(--scrollbar-track));\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-track:active {\\n background-color: var(--scrollbar-track-active, var(--scrollbar-track-hover, var(--scrollbar-track)));\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-thumb {\\n background-color: var(--scrollbar-thumb);\\n border-radius: var(--scrollbar-thumb-radius);\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-thumb:hover {\\n background-color: var(--scrollbar-thumb-hover, var(--scrollbar-thumb));\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-thumb:active {\\n background-color: var(--scrollbar-thumb-active, var(--scrollbar-thumb-hover, var(--scrollbar-thumb)));\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-corner {\\n background-color: var(--scrollbar-corner);\\n border-radius: var(--scrollbar-corner-radius);\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-corner:hover {\\n background-color: var(--scrollbar-corner-hover, var(--scrollbar-corner));\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar-corner:active {\\n background-color: var(--scrollbar-corner-active, var(--scrollbar-corner-hover, var(--scrollbar-corner)));\\n}\\n.mly-scrollbar-thin {\\n scrollbar-width: thin;\\n scrollbar-color: var(--scrollbar-thumb, initial) var(--scrollbar-track, initial);\\n}\\n.mly-scrollbar-thin::-webkit-scrollbar {\\n display: block;\\n width: 8px;\\n height: 8px;\\n}\\n.mly-scrollbar-track-transparent {\\n --scrollbar-track: transparent !important;\\n}\\n.mly-scrollbar-thumb-gray-200 {\\n --scrollbar-thumb: #e5e7eb !important;\\n}\\n.\\\\[text-align\\\\:revert-layer\\\\] {\\n text-align: revert-layer;\\n}\\n.file\\\\:mly-border-0::file-selector-button {\\n border-width: 0px;\\n}\\n.file\\\\:mly-bg-transparent::file-selector-button {\\n background-color: transparent;\\n}\\n.file\\\\:mly-text-sm::file-selector-button {\\n font-size: 0.875rem;\\n line-height: 1.25rem;\\n}\\n.file\\\\:mly-font-medium::file-selector-button {\\n font-weight: 500;\\n}\\n.placeholder\\\\:mly-text-gray-400::-moz-placeholder {\\n --tw-text-opacity: 1;\\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\\n}\\n.placeholder\\\\:mly-text-gray-400::placeholder {\\n --tw-text-opacity: 1;\\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\\n}\\n.placeholder\\\\:mly-text-gray-500::-moz-placeholder {\\n --tw-text-opacity: 1;\\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\\n}\\n.placeholder\\\\:mly-text-gray-500::placeholder {\\n --tw-text-opacity: 1;\\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\\n}\\n.mly-peer:disabled ~ .peer-disabled\\\\:mly-opacity-50 {\\n opacity: 0.5;\\n}\\n.data-\\\\[disabled\\\\]\\\\:mly-pointer-events-none[data-disabled] {\\n pointer-events: none;\\n}\\n.data-\\\\[state\\\\=open\\\\]\\\\:mly-bg-rose-100[data-state=open] {\\n --tw-bg-opacity: 1;\\n background-color: rgb(255 228 230 / var(--tw-bg-opacity, 1));\\n}\\n.data-\\\\[state\\\\=open\\\\]\\\\:mly-bg-soft-gray[data-state=open] {\\n --tw-bg-opacity: 1;\\n background-color: rgb(244 245 246 / var(--tw-bg-opacity, 1));\\n}\\n.data-\\\\[state\\\\=true\\\\]\\\\:mly-bg-soft-gray[data-state=true] {\\n --tw-bg-opacity: 1;\\n background-color: rgb(244 245 246 / var(--tw-bg-opacity, 1));\\n}\\n.data-\\\\[state\\\\=true\\\\]\\\\:mly-text-gray-900[data-state=true] {\\n --tw-text-opacity: 1;\\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\\n}\\n.data-\\\\[disabled\\\\]\\\\:mly-opacity-50[data-disabled] {\\n opacity: 0.5;\\n}\\n.hover\\\\:mly-bg-gray-100:hover {\\n --tw-bg-opacity: 1;\\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\\n}\\n.hover\\\\:mly-bg-gray-100\\\\/80:hover {\\n background-color: rgb(243 244 246 / 0.8);\\n}\\n.hover\\\\:mly-bg-red-200:hover {\\n --tw-bg-opacity: 1;\\n background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));\\n}\\n.hover\\\\:mly-bg-red-500\\\\/90:hover {\\n background-color: rgb(239 68 68 / 0.9);\\n}\\n.hover\\\\:mly-bg-rose-100:hover {\\n --tw-bg-opacity: 1;\\n background-color: rgb(255 228 230 / var(--tw-bg-opacity, 1));\\n}\\n.hover\\\\:mly-bg-soft-gray:hover {\\n --tw-bg-opacity: 1;\\n background-color: rgb(244 245 246 / var(--tw-bg-opacity, 1));\\n}\\n.hover\\\\:mly-bg-soft-gray\\\\/60:hover {\\n background-color: rgb(244 245 246 / 0.6);\\n}\\n.hover\\\\:mly-text-black:hover {\\n --tw-text-opacity: 1;\\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\\n}\\n.hover\\\\:mly-text-gray-900:hover {\\n --tw-text-opacity: 1;\\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\\n}\\n.hover\\\\:mly-text-midnight-gray:hover {\\n --tw-text-opacity: 1;\\n color: rgb(51 51 51 / var(--tw-text-opacity, 1));\\n}\\n.hover\\\\:mly-underline:hover {\\n text-decoration-line: underline;\\n}\\n.focus\\\\:mly-z-10:focus {\\n z-index: 10;\\n}\\n.focus\\\\:mly-bg-gray-100:focus {\\n --tw-bg-opacity: 1;\\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\\n}\\n.focus\\\\:mly-bg-red-200:focus {\\n --tw-bg-opacity: 1;\\n background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));\\n}\\n.focus\\\\:mly-bg-soft-gray:focus {\\n --tw-bg-opacity: 1;\\n background-color: rgb(244 245 246 / var(--tw-bg-opacity, 1));\\n}\\n.focus\\\\:mly-outline-none:focus {\\n outline: 2px solid transparent;\\n outline-offset: 2px;\\n}\\n.focus\\\\:mly-ring-1:focus {\\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow),\\n var(--tw-ring-shadow),\\n var(--tw-shadow, 0 0 #0000);\\n}\\n.focus\\\\:mly-ring-midnight-gray\\\\/50:focus {\\n --tw-ring-color: rgb(51 51 51 / 0.5);\\n}\\n.focus-visible\\\\:mly-relative:focus-visible {\\n position: relative;\\n}\\n.focus-visible\\\\:mly-z-10:focus-visible {\\n z-index: 10;\\n}\\n.focus-visible\\\\:mly-border-gray-400:focus-visible {\\n --tw-border-opacity: 1;\\n border-color: rgb(156 163 175 / var(--tw-border-opacity, 1));\\n}\\n.focus-visible\\\\:mly-outline-none:focus-visible {\\n outline: 2px solid transparent;\\n outline-offset: 2px;\\n}\\n.focus-visible\\\\:mly-ring-2:focus-visible {\\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow),\\n var(--tw-ring-shadow),\\n var(--tw-shadow, 0 0 #0000);\\n}\\n.focus-visible\\\\:mly-ring-gray-400:focus-visible {\\n --tw-ring-opacity: 1;\\n --tw-ring-color: rgb(156 163 175 / var(--tw-ring-opacity, 1));\\n}\\n.focus-visible\\\\:mly-ring-offset-2:focus-visible {\\n --tw-ring-offset-width: 2px;\\n}\\n.active\\\\:mly-bg-soft-gray:active {\\n --tw-bg-opacity: 1;\\n background-color: rgb(244 245 246 / var(--tw-bg-opacity, 1));\\n}\\n.disabled\\\\:mly-pointer-events-none:disabled {\\n pointer-events: none;\\n}\\n.disabled\\\\:mly-cursor-not-allowed:disabled {\\n cursor: not-allowed;\\n}\\n.disabled\\\\:mly-opacity-50:disabled {\\n opacity: 0.5;\\n}\\n.\\\\[\\\\&_svg\\\\]\\\\:mly-pointer-events-none svg {\\n pointer-events: none;\\n}\\n\")","'use client';\n\nimport {\n AnyExtension,\n FocusPosition,\n Editor as TiptapEditor,\n} from '@tiptap/core';\nimport { EditorContent, JSONContent, useEditor } from '@tiptap/react';\n\nimport { useMemo, useRef } from 'react';\nimport { ColumnsBubbleMenu } from './components/column-menu/columns-bubble-menu';\nimport { ContentMenu } from './components/content-menu';\nimport { EditorMenuBar } from './components/editor-menu-bar';\nimport { RepeatBubbleMenu } from './components/repeat-menu/repeat-bubble-menu';\nimport { ImageBubbleMenu } from './components/image-menu/image-bubble-menu';\nimport { SectionBubbleMenu } from './components/section-menu/section-bubble-menu';\nimport { SpacerBubbleMenu } from './components/spacer-menu/spacer-bubble-menu';\nimport { TextBubbleMenu } from './components/text-menu/text-bubble-menu';\nimport { extensions as defaultExtensions } from './extensions';\nimport {\n DEFAULT_PLACEHOLDER_URL,\n DEFAULT_RENDER_VARIABLE_FUNCTION,\n DEFAULT_VARIABLE_TRIGGER_CHAR,\n DEFAULT_VARIABLES,\n MailyContextType,\n MailyProvider,\n} from './provider';\nimport { cn } from './utils/classname';\nimport { VariableBubbleMenu } from './components/variable-menu/variable-bubble-menu';\nimport { replaceDeprecatedNode } from './utils/replace-deprecated';\nimport { DEFAULT_SLASH_COMMANDS } from './extensions/slash-command/default-slash-commands';\nimport { HTMLBubbleMenu } from './components/html-menu/html-menu';\nimport { InlineImageBubbleMenu } from './components/inline-image-menu/inline-image-bubble-menu';\n\ntype ParitialMailContextType = Partial<MailyContextType>;\n\nexport type EditorProps = {\n contentHtml?: string;\n contentJson?: JSONContent;\n onUpdate?: (editor: TiptapEditor) => void;\n onCreate?: (editor: TiptapEditor) => void;\n extensions?: AnyExtension[];\n config?: {\n hasMenuBar?: boolean;\n spellCheck?: boolean;\n wrapClassName?: string;\n toolbarClassName?: string;\n contentClassName?: string;\n bodyClassName?: string;\n autofocus?: FocusPosition;\n immediatelyRender?: boolean;\n };\n\n editable?: boolean;\n} & ParitialMailContextType;\n\nexport function Editor(props: EditorProps) {\n const {\n config: {\n wrapClassName = '',\n contentClassName = '',\n bodyClassName = '',\n hasMenuBar = true,\n spellCheck = false,\n autofocus = 'end',\n immediatelyRender = false,\n } = {},\n onCreate,\n onUpdate,\n extensions,\n contentHtml,\n contentJson,\n blocks = DEFAULT_SLASH_COMMANDS,\n variables = DEFAULT_VARIABLES,\n variableTriggerCharacter = DEFAULT_VARIABLE_TRIGGER_CHAR,\n renderVariable = DEFAULT_RENDER_VARIABLE_FUNCTION,\n editable = true,\n placeholderUrl = DEFAULT_PLACEHOLDER_URL,\n } = props;\n\n const formattedContent = useMemo(() => {\n if (contentJson) {\n const json =\n contentJson?.type === 'doc'\n ? contentJson\n : ({\n type: 'doc',\n content: contentJson,\n } as JSONContent);\n\n return replaceDeprecatedNode(json);\n } else if (contentHtml) {\n return contentHtml;\n } else {\n return {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [],\n },\n ],\n };\n }\n }, [contentHtml, contentJson, replaceDeprecatedNode]);\n\n const menuContainerRef = useRef(null);\n const editor = useEditor({\n editorProps: {\n attributes: {\n class: cn(`mly-prose mly-w-full`, contentClassName),\n spellCheck: spellCheck ? 'true' : 'false',\n },\n },\n immediatelyRender,\n onCreate: ({ editor }) => {\n onCreate?.(editor);\n },\n onUpdate: ({ editor }) => {\n onUpdate?.(editor);\n },\n extensions: defaultExtensions({\n variables,\n variableTriggerCharacter,\n extensions,\n blocks,\n }),\n content: formattedContent,\n autofocus,\n editable,\n });\n\n if (!editor) {\n return null;\n }\n\n return (\n <MailyProvider\n variables={variables}\n variableTriggerCharacter={variableTriggerCharacter}\n renderVariable={renderVariable}\n placeholderUrl={placeholderUrl}\n >\n <div\n className={cn(\n 'mly-editor mly-antialiased',\n editor.isEditable ? 'mly-editable' : 'mly-not-editable',\n wrapClassName\n )}\n ref={menuContainerRef}\n >\n {hasMenuBar && <EditorMenuBar config={props.config} editor={editor} />}\n <div\n className={cn(\n 'mly-mt-4 mly-rounded mly-border mly-bg-white mly-p-4',\n bodyClassName\n )}\n >\n <TextBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <ImageBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <SpacerBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <EditorContent editor={editor} />\n <SectionBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <ColumnsBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <ContentMenu editor={editor} />\n <VariableBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <RepeatBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <HTMLBubbleMenu editor={editor} appendTo={menuContainerRef} />\n <InlineImageBubbleMenu editor={editor} appendTo={menuContainerRef} />\n </div>\n </div>\n </MailyProvider>\n );\n}\n","import { BubbleMenu } from '@tiptap/react';\nimport { useCallback } from 'react';\nimport { getRenderContainer } from '../../utils/get-render-container';\nimport { sticky } from 'tippy.js';\nimport { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { isTextSelected } from '@/editor/utils/is-text-selected';\nimport { ColumnsBubbleMenuContent } from './columns-bubble-menu-content';\n\nexport function ColumnsBubbleMenu(props: EditorBubbleMenuProps) {\n const { appendTo, editor } = props;\n if (!editor) {\n return null;\n }\n\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor!, 'columns');\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n shouldShow: ({ editor }) => {\n if (\n isTextSelected(editor) ||\n editor.isActive('section') ||\n editor.isActive('repeat') ||\n !editor.isEditable\n ) {\n return false;\n }\n\n return editor.isActive('columns');\n },\n tippyOptions: {\n offset: [0, 8],\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: false }],\n },\n getReferenceClientRect,\n appendTo: () => appendTo?.current,\n plugins: [sticky],\n sticky: 'popper',\n maxWidth: 'auto',\n },\n pluginKey: 'columnsBubbleMenu',\n };\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <ColumnsBubbleMenuContent editor={editor} />\n </BubbleMenu>\n );\n}\n","import { Editor } from '@tiptap/react';\n\nexport function getRenderContainer(editor: Editor, nodeType: string) {\n const {\n view,\n state: {\n selection: { from },\n },\n } = editor;\n\n const elements = document.querySelectorAll('.has-focus');\n const elementCount = elements.length;\n const innermostNode = elements[elementCount - 1];\n const element = innermostNode;\n\n if (\n (element &&\n element.getAttribute('data-type') &&\n element.getAttribute('data-type') === nodeType) ||\n (element &&\n element.classList &&\n (element.classList.contains(nodeType) ||\n element.classList.contains(`node-${nodeType}`)))\n ) {\n return element;\n }\n\n const node = view.domAtPos(from).node as HTMLElement;\n let container: HTMLElement | null = node;\n\n if (!container.tagName) {\n container = node.parentElement;\n }\n\n while (\n container &&\n !(\n container.getAttribute('data-type') &&\n container.getAttribute('data-type') === nodeType\n ) &&\n !container.classList.contains(nodeType)\n ) {\n container = container.parentElement;\n }\n\n return container;\n}\n","import { isTextSelection } from '@tiptap/core';\nimport { Editor } from '@tiptap/react';\n\nexport function isTextSelected(editor: Editor) {\n const {\n state: {\n doc,\n selection,\n selection: { empty, from, to },\n },\n } = editor;\n\n // Sometime check for `empty` is not enough.\n // Doubleclick an empty paragraph returns a node size of 2.\n // So we check also for an empty text size.\n const isEmptyTextBlock =\n !doc.textBetween(from, to).length && isTextSelection(selection);\n\n if (empty || isEmptyTextBlock || !editor.isEditable) {\n return false;\n }\n\n return true;\n}\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 { 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 { 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 { getColumnCount, getColumnWidths } from '@/editor/utils/columns';\nimport { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const useColumnsState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n isSectionActive: ctx.editor.isActive('section'),\n isColumnActive: ctx.editor.isActive('column'),\n\n currentVerticalAlignment:\n ctx.editor.getAttributes('column')?.verticalAlign || 'top',\n\n currentShowIfKey: ctx.editor.getAttributes('columns')?.showIfKey || '',\n\n columnsCount: getColumnCount(ctx.editor),\n columnWidths: getColumnWidths(ctx.editor).map((c) => c.width),\n\n currentColumnsGap: ctx.editor.getAttributes('columns')?.gap || 0,\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\n};\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","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","'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 {\n AlignVerticalDistributeCenter,\n AlignVerticalDistributeEnd,\n AlignVerticalDistributeStart,\n} from 'lucide-react';\nimport { BubbleMenuButton } from './bubble-menu-button';\nimport { AllowedColumnVerticalAlign } from '../nodes/columns/column';\n\ntype VerticalAlignmentSwitchProps = {\n alignment: AllowedColumnVerticalAlign;\n onAlignmentChange: (alignment: AllowedColumnVerticalAlign) => void;\n};\n\nexport function VerticalAlignmentSwitch(props: VerticalAlignmentSwitchProps) {\n const { alignment = 'top', onAlignmentChange } = props;\n\n const activeAlignment = {\n top: {\n icon: AlignVerticalDistributeStart,\n tooltip: 'Align Top',\n onClick: () => {\n onAlignmentChange('middle');\n },\n },\n middle: {\n icon: AlignVerticalDistributeCenter,\n tooltip: 'Align Center',\n onClick: () => {\n onAlignmentChange('bottom');\n },\n },\n bottom: {\n icon: AlignVerticalDistributeEnd,\n tooltip: 'Align Bottom',\n onClick: () => {\n onAlignmentChange('top');\n },\n },\n }[alignment];\n\n return (\n <BubbleMenuButton\n icon={activeAlignment.icon}\n tooltip={activeAlignment.tooltip}\n command={activeAlignment.onClick}\n />\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","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","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","'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","'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","export const AUTOCOMPLETE_PASSWORD_MANAGERS_OFF = Object.freeze({\n autoComplete: 'off',\n 'data-1p-ignore': true,\n 'data-form-type': 'other',\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, 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 { 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 { Columns2, SlidersVertical, Columns3 } from 'lucide-react';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\nimport { cn } from '@/editor/utils/classname';\nimport { AUTOCOMPLETE_PASSWORD_MANAGERS_OFF } from '@/editor/utils/constants';\n\ntype ColumnsWidthConfigProps = {\n columnsCount: number;\n onColumnsCountChange: (columns: number) => void;\n\n columnWidths: string[];\n onColumnWidthChange?: (column: number, width: string) => void;\n};\n\nexport function ColumnsWidthConfig(props: ColumnsWidthConfigProps) {\n const {\n columnsCount = 2,\n onColumnsCountChange,\n columnWidths,\n onColumnWidthChange,\n } = props;\n\n return (\n <Popover>\n <PopoverTrigger className=\"mly-flex mly-size-7 mly-items-center mly-justify-center mly-gap-1 mly-rounded-md mly-text-sm data-[state=open]:mly-bg-soft-gray hover:mly-bg-soft-gray\">\n <SlidersVertical className=\"mly-h-3 mly-w-3 mly-stroke-[2.5]\" />\n </PopoverTrigger>\n <PopoverContent\n className=\"mly-w-[300px] 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 <div className=\"mly-grid mly-grid-cols-2 mly-gap-1\">\n <SwitchButton\n onClick={() => onColumnsCountChange(2)}\n isActive={columnsCount === 2}\n >\n <Columns2 className=\"mly-h-4 mly-w-4 mly-stroke-[2.5]\" />\n <span>2 Columns</span>\n </SwitchButton>\n <SwitchButton\n onClick={() => onColumnsCountChange(3)}\n isActive={columnsCount === 3}\n >\n <Columns3 className=\"mly-h-4 mly-w-4 mly-stroke-[2.5]\" />\n <span>3 Columns</span>\n </SwitchButton>\n </div>\n\n <hr className=\"mly-my-0.5 mly-border-gray-200\" />\n\n <div\n className=\"mly-grid mly-gap-1 mly-p-1\"\n style={{ gridTemplateColumns: `repeat(${columnsCount}, 1fr)` }}\n >\n {Array.from({ length: columnsCount }).map((_, index) => {\n const value =\n columnWidths[index] === 'auto' ? '' : columnWidths[index];\n const label =\n columnsCount === 2\n ? index === 0\n ? 'Left'\n : 'Right'\n : index === 0\n ? 'Left'\n : index === 1\n ? 'Middle'\n : 'Right';\n\n return (\n <div className=\"mly-flex mly-flex-col mly-gap-1\" key={index}>\n <span className=\"mly-text-xs mly-text-gray-400\">{label}</span>\n\n <label className=\"mly-relative\">\n <input\n {...AUTOCOMPLETE_PASSWORD_MANAGERS_OFF}\n placeholder=\"auto\"\n min={1}\n max={90}\n type=\"number\"\n className=\"hide-number-controls mly-w-full mly-appearance-none mly-rounded-md mly-bg-soft-gray mly-px-1.5 mly-py-1 mly-pr-6 mly-text-sm mly-tabular-nums mly-outline-none focus:mly-bg-soft-gray focus:mly-outline-none focus:mly-ring-1 focus:mly-ring-midnight-gray/50\"\n value={value}\n onChange={(e) => {\n const value = e.target.value;\n onColumnWidthChange?.(index, value);\n }}\n />\n <span className=\"mly-absolute mly-inset-y-0 mly-right-0 mly-flex mly-aspect-square mly-items-center mly-justify-center mly-text-xs mly-tabular-nums mly-text-gray-500\">\n %\n </span>\n </label>\n </div>\n );\n })}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\ntype SwitchButtonProps = {\n isActive?: boolean;\n onClick?: () => void;\n children: React.ReactNode;\n};\n\nfunction SwitchButton(props: SwitchButtonProps) {\n const { onClick, isActive = false, children } = props;\n\n return (\n <button\n className={cn(\n 'mly-flex mly-h-7 mly-items-center mly-gap-1 mly-rounded-md mly-px-2 mly-text-sm mly-text-gray-500 hover:mly-bg-soft-gray hover:mly-text-midnight-gray',\n isActive && 'mly-bg-soft-gray mly-text-midnight-gray'\n )}\n onClick={onClick}\n >\n {children}\n </button>\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 { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { useColumnsState } from './use-columns-state';\nimport { Divider } from '../ui/divider';\nimport { TooltipProvider } from '../ui/tooltip';\nimport { VerticalAlignmentSwitch } from '../vertical-alignment-switch';\nimport {\n addColumnByIndex,\n removeColumnByIndex,\n updateColumnWidth,\n} from '@/editor/utils/columns';\nimport { ShowPopover } from '../show-popover';\nimport { ColumnsWidthConfig } from './columns-width-config';\nimport { Select } from '../ui/select';\nimport { Space, Trash } from 'lucide-react';\nimport { BubbleMenuButton } from '../bubble-menu-button';\nimport { deleteNode } from '@/editor/utils/delete-node';\nimport { spacing } from '@/editor/utils/spacing';\n\ntype ColumnsBubbleMenuProps = {\n editor: EditorBubbleMenuProps['editor'];\n};\n\nexport function ColumnsBubbleMenuContent(props: ColumnsBubbleMenuProps) {\n const { editor } = props;\n if (!editor) {\n return null;\n }\n\n const state = useColumnsState(editor);\n\n const currentColumnCount = state.columnsCount;\n\n return (\n <TooltipProvider>\n <div className=\"mly-flex mly-items-stretch\">\n {state.isColumnActive && (\n <>\n <ColumnsWidthConfig\n columnsCount={currentColumnCount}\n columnWidths={state.columnWidths}\n onColumnsCountChange={(count) => {\n if (count > currentColumnCount) {\n addColumnByIndex(editor);\n } else {\n removeColumnByIndex(editor);\n }\n }}\n onColumnWidthChange={(index, width) => {\n updateColumnWidth(editor, index, width);\n }}\n />\n\n <Divider />\n </>\n )}\n\n <VerticalAlignmentSwitch\n alignment={state.currentVerticalAlignment}\n onAlignmentChange={(value) => {\n editor.commands.updateColumn({\n verticalAlign: value,\n });\n }}\n />\n\n <Divider />\n\n <Select\n icon={Space}\n label=\"Columns Gap\"\n value={state.currentColumnsGap}\n options={[\n { value: '0', label: 'None' },\n ...spacing.map((space) => ({\n label: space.name,\n value: String(space.value),\n })),\n ]}\n onValueChange={(value) => {\n editor.commands.updateColumns({\n gap: +value,\n });\n }}\n tooltip=\"Columns Gap\"\n />\n\n <Divider />\n\n <BubbleMenuButton\n icon={Trash}\n tooltip=\"Delete Columns\"\n command={() => {\n deleteNode(editor, 'columns');\n }}\n />\n\n <Divider />\n\n <ShowPopover\n showIfKey={state.currentShowIfKey}\n onShowIfKeyValueChange={(value) => {\n editor.commands.updateColumns({\n showIfKey: value,\n });\n }}\n editor={editor}\n />\n </div>\n </TooltipProvider>\n );\n}\n","import { findParentNode, type Editor } from '@tiptap/core';\n\nexport function deleteNode(editor: Editor, nodeType: string) {\n const { state } = editor.view;\n const associatedNode = findParentNode((node) => node.type.name === nodeType)(\n state.selection\n );\n\n if (!associatedNode) {\n return;\n }\n\n const from = associatedNode.pos;\n const to = from + associatedNode.node.nodeSize;\n\n const { tr } = state;\n const transaction = tr.delete(from, to);\n editor.view.dispatch(transaction);\n}\n","export const spacing = [\n {\n name: 'Extra Small',\n short: 'xs',\n value: 4,\n },\n {\n name: 'Small',\n short: 'sm',\n value: 8,\n },\n {\n name: 'Medium',\n short: 'md',\n value: 16,\n },\n {\n name: 'Large',\n short: 'lg',\n value: 32,\n },\n {\n name: 'Extra Large',\n short: 'xl',\n value: 64,\n },\n];\n","import type { Editor } from '@tiptap/core';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport type { NodeSelection } from '@tiptap/pm/state';\n\nimport type { Node } from '@tiptap/pm/model';\nimport { Copy, GripVertical, Plus, Trash2 } from 'lucide-react';\nimport { BaseButton } from './base-button';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from './ui/tooltip';\nimport { Popover, PopoverContent, PopoverTrigger } from './popover';\nimport { Divider } from './ui/divider';\nimport { DragHandle } from '../plugins/drag-handle/drag-handle';\nimport { cn } from '../utils/classname';\n\nexport type ContentMenuProps = {\n editor: Editor;\n};\n\nexport function ContentMenu(props: ContentMenuProps) {\n const { editor } = props;\n\n const [menuOpen, setMenuOpen] = useState(false);\n const [currentNode, setCurrentNode] = useState<Node | null>(null);\n const [currentNodePos, setCurrentNodePos] = useState<number>(-1);\n\n const handleNodeChange = useCallback(\n (data: { node: Node | null; editor: Editor; pos: number }) => {\n if (data.node) {\n setCurrentNode(data.node);\n }\n\n setCurrentNodePos(data.pos);\n },\n [setCurrentNodePos, setCurrentNode]\n );\n\n function duplicateNode() {\n editor.commands.setNodeSelection(currentNodePos);\n const { $anchor } = editor.state.selection;\n const selectedNode =\n $anchor.node(1) || (editor.state.selection as NodeSelection).node;\n editor\n .chain()\n .setMeta('hideDragHandle', true)\n .insertContentAt(\n currentNodePos + (currentNode?.nodeSize || 0),\n selectedNode.toJSON()\n )\n .run();\n\n setMenuOpen(false);\n }\n\n function deleteCurrentNode() {\n editor\n .chain()\n .setMeta('hideDragHandle', true)\n .setNodeSelection(currentNodePos)\n .deleteSelection()\n .run();\n\n setMenuOpen(false);\n }\n\n function handleAddNewNode() {\n if (currentNodePos !== -1) {\n const currentNodeSize = currentNode?.nodeSize || 0;\n const insertPos = currentNodePos + currentNodeSize;\n const currentNodeIsEmptyParagraph =\n currentNode?.type.name === 'paragraph' &&\n currentNode?.content?.size === 0;\n const focusPos = currentNodeIsEmptyParagraph\n ? currentNodePos + 2\n : insertPos + 2;\n editor\n .chain()\n .command(({ dispatch, tr, state }: any) => {\n if (dispatch) {\n if (currentNodeIsEmptyParagraph) {\n tr.insertText('/', currentNodePos, currentNodePos + 1);\n } else {\n tr.insert(\n insertPos,\n state.schema.nodes.paragraph.create(null, [\n state.schema.text('/'),\n ])\n );\n }\n\n return dispatch(tr);\n }\n\n return true;\n })\n .focus(focusPos)\n .run();\n }\n }\n\n useEffect(() => {\n if (menuOpen) {\n editor.commands.setMeta('lockDragHandle', true);\n } else {\n editor.commands.setMeta('lockDragHandle', false);\n }\n\n return () => {\n editor.commands.setMeta('lockDragHandle', false);\n };\n }, [editor, menuOpen]);\n\n return (\n <DragHandle\n pluginKey=\"ContentMenu\"\n editor={editor}\n tippyOptions={{\n offset: [2, 0],\n zIndex: 99,\n }}\n onNodeChange={handleNodeChange}\n className={cn(editor.isEditable ? 'mly-visible' : 'mly-hidden')}\n >\n <TooltipProvider>\n <div className=\"mly-flex mly-items-center mly-pr-1.5\">\n <Tooltip>\n <TooltipTrigger asChild>\n <BaseButton\n variant=\"ghost\"\n size=\"icon\"\n className=\"!mly-size-5 mly-cursor-grab mly-text-gray-500 hover:mly-text-black\"\n onClick={handleAddNewNode}\n type=\"button\"\n >\n <Plus className=\"mly-size-3.5 mly-shrink-0\" />\n </BaseButton>\n </TooltipTrigger>\n <TooltipContent sideOffset={8}>Add new node</TooltipContent>\n </Tooltip>\n <Popover open={menuOpen} onOpenChange={setMenuOpen}>\n <div className=\"mly-relative mly-flex mly-flex-col\">\n <Tooltip>\n <TooltipTrigger asChild>\n <BaseButton\n variant=\"ghost\"\n size=\"icon\"\n className=\"mly-relative mly-z-[1] !mly-size-5 mly-cursor-grab mly-text-gray-500 hover:mly-text-black\"\n onClick={(e) => {\n e.preventDefault();\n setMenuOpen(true);\n editor.commands.setNodeSelection(currentNodePos);\n }}\n type=\"button\"\n >\n <GripVertical className=\"mly-size-3.5 mly-shrink-0\" />\n </BaseButton>\n </TooltipTrigger>\n <TooltipContent sideOffset={8}>Node actions</TooltipContent>\n </Tooltip>\n <PopoverTrigger className=\"mly-absolute mly-left-0 mly-top-0 mly-z-0 mly-h-5 mly-w-5\" />\n </div>\n\n <PopoverContent\n align=\"start\"\n side=\"bottom\"\n sideOffset={8}\n className=\"mly-flex mly-w-max mly-flex-col mly-rounded-md mly-p-1\"\n >\n <BaseButton\n variant=\"ghost\"\n onClick={duplicateNode}\n className=\"mly-h-auto mly-justify-start mly-gap-2 !mly-rounded mly-px-2 mly-py-1 mly-text-sm mly-font-normal\"\n >\n <Copy className=\"mly-size-[15px] mly-shrink-0\" />\n Duplicate\n </BaseButton>\n <Divider type=\"horizontal\" />\n <BaseButton\n onClick={deleteCurrentNode}\n className=\"mly-h-auto mly-justify-start mly-gap-2 !mly-rounded mly-bg-red-100 mly-px-2 mly-py-1 mly-text-sm mly-font-normal mly-text-red-600 hover:mly-bg-red-200 focus:mly-bg-red-200\"\n >\n <Trash2 className=\"mly-size-[15px] mly-shrink-0\" />\n Delete\n </BaseButton>\n </PopoverContent>\n </Popover>\n </div>\n </TooltipProvider>\n </DragHandle>\n );\n}\n","import React, { useState, useRef, useEffect } from 'react';\n\nimport { Node } from '@tiptap/pm/model';\nimport { ReactNode } from 'react';\nimport { Editor } from '@tiptap/core';\nimport { Props as TippyProps } from 'tippy.js';\nimport {\n DragHandlePlugin,\n dragHandlePluginDefaultKey,\n} from './drag-handle-plugin';\n\nexport type DragHandleProps = {\n editor: Editor;\n pluginKey?: string;\n className?: string;\n tippyOptions?: Partial<TippyProps>;\n onNodeChange?: (data: {\n node: Node | null;\n editor: Editor;\n pos: number;\n }) => void;\n children: ReactNode;\n};\n\nexport function DragHandle(props: DragHandleProps) {\n const {\n className = 'drag-handle',\n children,\n editor,\n pluginKey = dragHandlePluginDefaultKey,\n onNodeChange,\n tippyOptions = {},\n } = props;\n\n const [element, setElement] = useState<HTMLDivElement | null>(null);\n const pluginRef = useRef<ReturnType<typeof DragHandlePlugin> | null>(null);\n\n useEffect(() => {\n if (!element) {\n return () => {\n pluginRef.current = null;\n };\n }\n\n if (editor.isDestroyed) {\n return () => {\n pluginRef.current = null;\n };\n }\n\n if (!pluginRef.current) {\n pluginRef.current = DragHandlePlugin({\n editor,\n element,\n pluginKey,\n tippyOptions,\n onNodeChange,\n });\n\n editor.registerPlugin(pluginRef.current);\n }\n\n return () => {\n editor.unregisterPlugin(pluginKey);\n pluginRef.current = null;\n };\n }, [element, editor, onNodeChange, pluginKey]);\n\n return (\n <div className={className} ref={setElement}>\n {children}\n </div>\n );\n}\n","/**\n * This plugin is a modified version of the package\n * LINK: https://www.npmjs.com/package/echo-drag-handle-plugin.\n * The original package was not working as expected while migrating.\n *\n * I will be building a new version from scratch for the drag handle plugin\n * for better usability and compatibility for me.\n * Until then, I will be using this modified version.\n */\n\nimport {\n SelectionRange,\n Selection,\n PluginKey,\n Plugin,\n EditorState,\n} from '@tiptap/pm/state';\nimport tippy, { Instance, Tippy } from 'tippy.js';\nimport {\n ySyncPluginKey,\n absolutePositionToRelativePosition,\n} from 'y-prosemirror';\nimport { NodeRange } from '@tiptap/pm/model';\nimport { ResolvedPos, Node as TNode } from '@tiptap/pm/model';\nimport { Mapping } from '@tiptap/pm/transform';\nimport { Editor } from '@tiptap/core';\nimport { Props as TippyProps } from 'tippy.js';\n\nfunction getSelectionRanges(\n state: ResolvedPos,\n range: ResolvedPos,\n depth?: number\n): SelectionRange[] {\n const ranges: SelectionRange[] = [];\n const root = state.node(0);\n depth =\n typeof depth === 'number' && depth >= 0\n ? depth\n : state.sameParent(range)\n ? Math.max(0, state.sharedDepth(range.pos) - 1)\n : state.sharedDepth(range.pos);\n const nodeRange = new NodeRange(state, range, depth);\n const startIndex =\n nodeRange.depth === 0 ? 0 : root.resolve(nodeRange.start).posAtIndex(0);\n nodeRange.parent.forEach((size, offset) => {\n const from = startIndex + offset;\n const to = from + size.nodeSize;\n if (from < nodeRange.start || from >= nodeRange.end) return;\n const selectionRange = new SelectionRange(\n root.resolve(from),\n root.resolve(to)\n );\n ranges.push(selectionRange);\n });\n return ranges;\n}\n\nclass NodeRangeBookmark {\n anchor: number;\n head: number;\n constructor(anchor: number, head: number) {\n this.anchor = anchor;\n this.head = head;\n }\n map(mapping: Mapping) {\n return new NodeRangeBookmark(\n mapping.map(this.anchor),\n mapping.map(this.head)\n );\n }\n resolve(doc: TNode) {\n const e = doc.resolve(this.anchor);\n const o = doc.resolve(this.head);\n return new NodeRangeSelection(e, o);\n }\n}\n\nclass NodeRangeSelection extends Selection {\n depth: number | undefined;\n\n constructor(t: ResolvedPos, e: ResolvedPos, o?: number, s: number = 1) {\n const { doc: r } = t;\n const n = t === e;\n const i = t.pos === r.content.size && e.pos === r.content.size;\n const a = n && !i ? r.resolve(e.pos + (s > 0 ? 1 : -1)) : e;\n const c = n && i ? r.resolve(t.pos - (s > 0 ? 1 : -1)) : t;\n const d = getSelectionRanges(c.min(a), c.max(a), o);\n super(\n a.pos >= t.pos ? d[0].$from : d[d.length - 1].$to,\n a.pos >= t.pos ? d[d.length - 1].$to : d[0].$from,\n d\n );\n this.depth = o;\n }\n get $to() {\n return this.ranges[this.ranges.length - 1].$to;\n }\n eq(other: Selection): boolean {\n return (\n other instanceof NodeRangeSelection &&\n other.$from.pos === this.$from.pos &&\n other.$to.pos === this.$to.pos\n );\n }\n // @ts-ignore\n map(doc: TNode, mapping: Mapping) {\n const o = doc.resolve(mapping.map(this.anchor));\n const s = doc.resolve(mapping.map(this.head));\n return new NodeRangeSelection(o, s);\n }\n toJSON() {\n return { type: 'nodeRange', anchor: this.anchor, head: this.head };\n }\n get isForwards() {\n return this.head >= this.anchor;\n }\n get isBackwards() {\n return !this.isForwards;\n }\n extendBackwards() {\n const { doc: t } = this.$from;\n if (this.isForwards && this.ranges.length > 1) {\n const t = this.ranges.slice(0, -1);\n const e = t[0].$from;\n const o = t[t.length - 1].$to;\n return new NodeRangeSelection(e, o, this.depth);\n }\n const e = this.ranges[0];\n const o = t.resolve(Math.max(0, e.$from.pos - 1));\n return new NodeRangeSelection(this.$anchor, o, this.depth);\n }\n extendForwards() {\n const { doc: t } = this.$from;\n if (this.isBackwards && this.ranges.length > 1) {\n const t = this.ranges.slice(1);\n const e = t[0].$from;\n const o = t[t.length - 1].$to;\n return new NodeRangeSelection(o, e, this.depth);\n }\n const e = this.ranges[this.ranges.length - 1];\n const o = t.resolve(Math.min(t.content.size, e.$to.pos + 1));\n return new NodeRangeSelection(this.$anchor, o, this.depth);\n }\n static fromJSON(doc: TNode, json: any) {\n return new NodeRangeSelection(\n doc.resolve(json.anchor),\n doc.resolve(json.head)\n );\n }\n static create(\n doc: TNode,\n anchor: number,\n head: number,\n depth?: number,\n bias: number = 1\n ) {\n return new this(doc.resolve(anchor), doc.resolve(head), depth, bias);\n }\n // @ts-ignore\n getBookmark(): NodeRangeBookmark {\n return new NodeRangeBookmark(this.anchor, this.head);\n }\n}\n\nfunction cloneElement(node: HTMLElement) {\n const clonedNode = node.cloneNode(true) as HTMLElement;\n const originalElements = [\n node,\n ...Array.from(node.getElementsByTagName('*')),\n ];\n const clonedElements = [\n clonedNode,\n ...Array.from(clonedNode.getElementsByTagName('*')),\n ];\n\n originalElements.forEach((element, index) => {\n const clonedElement = clonedElements[index];\n\n if (\n clonedElement instanceof HTMLElement &&\n element instanceof HTMLElement\n ) {\n clonedElement.style.cssText = (function (element: HTMLElement) {\n let styles = '';\n const computedStyles = getComputedStyle(element);\n for (let i = 0; i < computedStyles.length; i += 1) {\n styles += `${computedStyles[i]}:${computedStyles.getPropertyValue(computedStyles[i])};`;\n }\n return styles;\n })(element);\n }\n });\n\n return clonedNode;\n}\n\nfunction getComputedStyles(node: Element, property: any) {\n return window.getComputedStyle(node)[property];\n}\nfunction minMax(value = 0, min = 0, max = 0) {\n return Math.min(Math.max(value, min), max);\n}\nfunction removeNode(node: HTMLElement) {\n if (node.parentNode !== null && node.parentNode !== undefined) {\n node.parentNode.removeChild(node);\n }\n}\n\nexport type FindElementNextToCoords = {\n x: number;\n y: number;\n direction?: 'left' | 'right';\n editor: Editor;\n};\n\nconst findElementNextToCoords = (options: FindElementNextToCoords) => {\n const { x, y, direction, editor } = options;\n let resultElement = null;\n let resultNode = null;\n let d = null;\n let l = x;\n for (; null === resultNode && l < window.innerWidth && l > 0; ) {\n const elements = document.elementsFromPoint(l, y);\n const index = elements.findIndex((el) =>\n el.classList.contains('ProseMirror')\n );\n const filteredElements = elements.slice(0, index);\n if (filteredElements.length > 0) {\n const element = filteredElements[0];\n resultElement = element;\n d = editor.view.posAtDOM(element, 0);\n if (d >= 0) {\n resultNode = editor.state.doc.nodeAt(Math.max(d - 1, 0));\n if (resultNode === null || resultNode.isText) {\n resultNode = editor.state.doc.nodeAt(Math.max(d - 1, 0));\n }\n if (!resultNode) {\n resultNode = editor.state.doc.nodeAt(Math.max(d, 0));\n }\n break;\n }\n }\n if (direction === 'left') {\n l -= 1;\n } else {\n l += 1;\n }\n }\n return { resultElement, resultNode, pos: d !== null ? d : null };\n};\n\nfunction getSelectionRangesNearCursor(e: MouseEvent, t: Editor) {\n const { doc: n } = t.view.state,\n o = findElementNextToCoords({\n editor: t,\n x: e.clientX,\n y: e.clientY,\n direction: 'right',\n });\n if (!o.resultNode || null === o.pos) return [];\n const r = e.clientX,\n i = (function (e, t, n) {\n const o = parseInt(getComputedStyles(e.dom, 'paddingLeft'), 10),\n r = parseInt(getComputedStyles(e.dom, 'paddingRight'), 10),\n i = parseInt(getComputedStyles(e.dom, 'borderLeftWidth'), 10),\n s = parseInt(getComputedStyles(e.dom, 'borderLeftWidth'), 10),\n d = e.dom.getBoundingClientRect();\n return { left: minMax(t, d.left + o + i, d.right - r - s), top: n };\n })(t.view, r, e.clientY),\n s = t.view.posAtCoords(i);\n if (!s) return [];\n const { pos: d } = s;\n if (!n.resolve(d).parent) return [];\n const a = n.resolve(o.pos),\n p = n.resolve(o.pos + 1);\n return getSelectionRanges(a, p, 0);\n}\nconst getPreviousNodeStartPosition = (e: TNode, t: number) => {\n const n = e.resolve(t),\n { depth: o } = n;\n if (0 === o) return t;\n return n.pos - n.parentOffset - 1;\n};\nconst getAncestorNodeAtDepth = (e: TNode, t: number) => {\n const n = e.nodeAt(t),\n o = e.resolve(t);\n let { depth: r } = o,\n i = n;\n for (; r > 0; ) {\n const e = o.node(r);\n (r -= 1), 0 === r && (i = e);\n }\n return i;\n};\nconst getOuterNode = (doc: EditorState, pos: number) => {\n const n = ySyncPluginKey.getState(doc);\n return n\n ? absolutePositionToRelativePosition(pos, n.type, n.binding.mapping)\n : null;\n};\n\n// @ts-ignore\nconst getOuterNodePos = (e, t) => {\n let n = t;\n for (; n && n.parentNode && n.parentNode !== e.dom; ) n = n.parentNode;\n return n;\n};\n\ntype DragHandlePluginOptions = {\n pluginKey?: PluginKey | string;\n element: HTMLElement;\n editor: Editor;\n tippyOptions?: Partial<TippyProps>;\n onNodeChange?: (data: {\n editor: Editor;\n node: TNode | null;\n pos: number;\n }) => void;\n};\n\nexport const dragHandlePluginDefaultKey = new PluginKey('dragHandle');\nexport function DragHandlePlugin(\n options: DragHandlePluginOptions\n): Plugin<{ locked: boolean }> {\n const {\n pluginKey: e = dragHandlePluginDefaultKey,\n element,\n editor,\n tippyOptions,\n onNodeChange,\n } = options;\n\n const container = document.createElement('div');\n let tippyInstance: Instance | null = null;\n let x = false;\n let currentNode: TNode | null = null;\n let lastNodePos = -1;\n element.addEventListener('dragstart', (e) => {\n const { view } = editor;\n if (!e.dataTransfer) return;\n const { empty, $from, $to } = view.state.selection;\n const s = getSelectionRangesNearCursor(e, editor);\n const d = getSelectionRanges($from, $to, 0);\n const c = d.some((e) =>\n s.find((t) => t.$from === e.$from && t.$to === e.$to)\n );\n const u = empty || !c ? s : d;\n if (!u.length) return;\n const { tr: g } = view.state;\n const h = document.createElement('div');\n const y = u[0].$from.pos;\n const v = u[u.length - 1].$to.pos;\n const C = NodeRangeSelection.create(view.state.doc, y, v);\n const E = C.content();\n u.forEach((e) => {\n const t = cloneElement(view?.nodeDOM(e.$from.pos) as HTMLElement);\n h.append(t);\n });\n h.style.position = 'absolute';\n h.style.top = '-10000px';\n document.body.append(h);\n e.dataTransfer.clearData();\n e.dataTransfer.setDragImage(h, 0, 0);\n view.dragging = { slice: E, move: true };\n g.setSelection(C as unknown as Selection);\n view.dispatch(g);\n document.addEventListener('drop', () => removeNode(h), { once: true });\n setTimeout(() => {\n element && (element.style.pointerEvents = 'none');\n }, 0);\n });\n element.addEventListener('dragend', () => {\n element && (element.style.pointerEvents = 'auto');\n });\n\n return new Plugin({\n key: typeof e === 'string' ? new PluginKey(e) : e,\n state: {\n init: () => ({ locked: false }) as { locked: boolean },\n apply(e, t, n, o) {\n const l = e.getMeta('lockDragHandle');\n const a = e.getMeta('hideDragHandle');\n if ((undefined !== l && (x = l), a && tippyInstance)) {\n return (\n tippyInstance?.hide(),\n (x = false),\n (currentNode = null),\n (lastNodePos = -1),\n null == onNodeChange ||\n onNodeChange({ editor: editor, node: null, pos: -1 }),\n t\n );\n }\n if (e.docChanged && -1 !== lastNodePos && element && tippyInstance) {\n const t = e.mapping.map(lastNodePos);\n t !== lastNodePos &&\n ((lastNodePos = t), getOuterNode(o, lastNodePos));\n }\n return t;\n },\n },\n view: (e) => {\n var t;\n return (\n (element.draggable = true),\n (element.style.pointerEvents = 'auto'),\n null === (t = editor.view.dom.parentElement) ||\n undefined === t ||\n t.appendChild(container),\n container.appendChild(element),\n (container.style.pointerEvents = 'none'),\n (container.style.position = 'absolute'),\n (container.style.top = '0'),\n (container.style.left = '0'),\n (tippyInstance = tippy(e.dom, {\n getReferenceClientRect: null,\n interactive: true,\n trigger: 'manual',\n placement: 'left-start',\n hideOnClick: false,\n duration: 100,\n zIndex: 10,\n popperOptions: {\n modifiers: [\n { name: 'flip', enabled: false },\n {\n name: 'preventOverflow',\n options: { rootBoundary: 'document', mainAxis: false },\n },\n ],\n },\n ...tippyOptions,\n appendTo: container,\n content: element,\n })),\n {\n update(t, n) {\n if (!element || !tippyInstance) return;\n if (\n ((element.draggable = !x),\n e.state.doc.eq(n.doc) || -1 === lastNodePos)\n )\n return;\n let o = e.nodeDOM(lastNodePos) as HTMLElement;\n if (((o = getOuterNodePos(e, o)), o === e.dom)) return;\n if (1 !== (null == o ? undefined : o.nodeType)) return;\n const r = e.posAtDOM(o, 0),\n s = getAncestorNodeAtDepth(editor.state.doc, r);\n if (s !== currentNode) {\n const t = getPreviousNodeStartPosition(editor.state.doc, r);\n (currentNode = s),\n (lastNodePos = t),\n getOuterNode(e.state, lastNodePos),\n null == onNodeChange ||\n onNodeChange({\n editor: editor,\n node: currentNode as TNode,\n pos: lastNodePos,\n }),\n tippyInstance.setProps({\n getReferenceClientRect: () => o?.getBoundingClientRect(),\n }),\n tippyInstance.show();\n }\n },\n destroy() {\n null == tippyInstance || tippyInstance.destroy(),\n element && removeNode(container);\n },\n }\n );\n },\n props: {\n handleDOMEvents: {\n mouseleave: (e, event) => (\n x ||\n (event.target &&\n !container.contains(event?.relatedTarget as Node) &&\n (null == tippyInstance || tippyInstance.hide(),\n (currentNode = null),\n (lastNodePos = -1),\n null == onNodeChange ||\n onNodeChange({ editor: editor, node: null, pos: -1 }))),\n false\n ),\n mousemove(e, t) {\n if (!element || !tippyInstance || x) return false;\n const n = findElementNextToCoords({\n x: t.clientX,\n y: t.clientY,\n direction: 'right',\n editor: editor,\n });\n if (!n.resultElement) return false;\n let o = n.resultElement;\n if (((o = getOuterNodePos(e, o)), o === e.dom)) return false;\n if (1 !== (null == o ? undefined : o.nodeType)) return false;\n const r = e.posAtDOM(o, 0),\n s = getAncestorNodeAtDepth(editor.state.doc, r);\n if (s !== currentNode) {\n const t = getPreviousNodeStartPosition(editor.state.doc, r);\n (currentNode = s),\n (lastNodePos = t),\n getOuterNode(e.state, lastNodePos),\n null == onNodeChange ||\n onNodeChange({\n editor: editor,\n node: currentNode,\n pos: lastNodePos,\n }),\n tippyInstance.setProps({\n getReferenceClientRect: () => o.getBoundingClientRect(),\n }),\n tippyInstance.show();\n }\n return false;\n },\n },\n },\n });\n}\n","import { useMemo } from 'react';\nimport { Editor as EditorType } from '@tiptap/core';\nimport {\n AlignCenter,\n AlignLeft,\n AlignRight,\n BoldIcon,\n EraserIcon,\n ItalicIcon,\n LinkIcon,\n SeparatorHorizontal,\n StrikethroughIcon,\n UnderlineIcon,\n} from 'lucide-react';\n\nimport { EditorProps } from '@/editor';\n\nimport { BubbleMenuButton } from './bubble-menu-button';\nimport { BubbleMenuItem } from './text-menu/text-bubble-menu';\n\ninterface EditorMenuItem extends BubbleMenuItem {\n group: 'alignment' | 'image' | 'mark' | 'custom' | 'email';\n}\n\ntype EditorMenuBarProps = {\n config: EditorProps['config'];\n editor: EditorType;\n};\n\nexport const EditorMenuBar = (props: EditorMenuBarProps) => {\n const { editor, config } = props;\n\n const items: EditorMenuItem[] = useMemo(\n () => [\n {\n name: 'bold',\n command: () => editor.chain().focus().toggleBold().run(),\n isActive: () => editor.isActive('bold'),\n group: 'mark',\n icon: BoldIcon,\n },\n {\n name: 'italic',\n command: () => editor.chain().focus().toggleItalic().run(),\n isActive: () => editor.isActive('italic'),\n group: 'mark',\n icon: ItalicIcon,\n },\n {\n name: 'underline',\n command: () => editor.chain().focus().toggleUnderline().run(),\n isActive: () => editor.isActive('underline'),\n group: 'mark',\n icon: UnderlineIcon,\n },\n {\n name: 'strike',\n command: () => editor.chain().focus().toggleStrike().run(),\n isActive: () => editor.isActive('strike'),\n group: 'mark',\n icon: StrikethroughIcon,\n },\n {\n name: 'delete-line',\n command: () =>\n editor.chain().focus().selectParentNode().deleteSelection().run(),\n isActive: () => false,\n group: 'mark',\n icon: EraserIcon,\n },\n {\n name: 'divider',\n command: () => editor.chain().focus().setHorizontalRule().run(),\n isActive: () => editor.isActive('horizontalRule'),\n group: 'custom',\n icon: SeparatorHorizontal,\n },\n {\n name: 'link',\n command: () => {\n const previousUrl = editor.getAttributes('link').href;\n const url = window.prompt('URL', previousUrl);\n // If the user cancels the prompt, we don't want to toggle the link\n if (url === null) return;\n // If the user deletes the URL entirely, we'll unlink the selected text\n if (url === '') {\n editor.chain().focus().extendMarkRange('link').unsetLink().run();\n return;\n }\n\n // Otherwise, we set the link to the given URL\n editor\n .chain()\n .focus()\n .extendMarkRange('link')\n .setLink({ href: url })\n .run();\n },\n isActive: () => editor.isActive('link'),\n group: 'custom',\n icon: LinkIcon,\n },\n {\n name: 'left',\n command: () => editor.chain().focus().setTextAlign('left').run(),\n isActive: () => editor.isActive({ textAlign: 'left' }),\n group: 'alignment',\n icon: AlignLeft,\n },\n {\n name: 'center',\n command: () => editor.chain().focus().setTextAlign('center').run(),\n isActive: () => editor.isActive({ textAlign: 'center' }),\n group: 'alignment',\n icon: AlignCenter,\n },\n {\n name: 'right',\n command: () => editor.chain().focus().setTextAlign('right').run(),\n isActive: () => editor.isActive({ textAlign: 'right' }),\n group: 'alignment',\n icon: AlignRight,\n },\n ],\n [editor]\n );\n\n const groups = useMemo(\n () =>\n items.reduce((acc, item) => {\n if (!acc.includes(item.group)) {\n acc.push(item.group);\n }\n return acc;\n }, [] as string[]),\n [items]\n );\n\n if (!editor) {\n return null;\n }\n\n return (\n <div\n className={`mly-flex mly-items-center mly-gap-3 ${config?.toolbarClassName}`}\n >\n {groups.map((group, index) => (\n <div\n key={index}\n className=\"mly-flex mly-items-center mly-gap-1 mly-rounded-md mly-border mly-bg-white mly-p-1\"\n >\n {items\n .filter((item) => item.group === group)\n .map((item, index) => (\n <BubbleMenuButton key={index} {...item} />\n ))}\n </div>\n ))}\n </div>\n );\n};\n","import {\n DEFAULT_RENDER_VARIABLE_FUNCTION,\n useMailyContext,\n} from '@/editor/provider';\nimport { cn } from '@/editor/utils/classname';\nimport { isTextSelected } from '@/editor/utils/is-text-selected';\nimport { BubbleMenu, findChildren } from '@tiptap/react';\nimport { InfoIcon } from 'lucide-react';\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport { sticky } from 'tippy.js';\nimport { getRenderContainer } from '../../utils/get-render-container';\nimport { ShowPopover } from '../show-popover';\nimport { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { Divider } from '../ui/divider';\nimport { InputAutocomplete } from '../ui/input-autocomplete';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '../ui/tooltip';\nimport { useRepeatState } from './use-repeat-state';\nimport { getClosestNodeByName } from '@/editor/utils/columns';\nimport { processVariables } from '@/editor/utils/variable';\n\nexport function RepeatBubbleMenu(props: EditorBubbleMenuProps) {\n const { appendTo, editor } = props;\n if (!editor) {\n return null;\n }\n\n const state = useRepeatState(editor);\n\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor!, 'repeat');\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n shouldShow: ({ editor }) => {\n const activeForNode = getClosestNodeByName(editor, 'repeat');\n const sectionNodeChildren = activeForNode\n ? findChildren(activeForNode?.node, (node) => {\n return node.type.name === 'section';\n })?.[0]\n : null;\n const hasActiveSectionNodeChildren =\n sectionNodeChildren && editor.isActive('section');\n\n if (\n isTextSelected(editor) ||\n hasActiveSectionNodeChildren ||\n !editor.isEditable\n ) {\n return false;\n }\n\n return editor.isActive('repeat');\n },\n tippyOptions: {\n offset: [0, 8],\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: false }],\n },\n getReferenceClientRect,\n appendTo: () => appendTo?.current,\n plugins: [sticky],\n sticky: 'popper',\n maxWidth: 'auto',\n },\n pluginKey: 'repeatBubbleMenu',\n };\n\n const { variables = [], renderVariable = DEFAULT_RENDER_VARIABLE_FUNCTION } =\n useMailyContext();\n const inputRef = useRef<HTMLInputElement>(null);\n const [isUpdatingKey, setIsUpdatingKey] = useState(false);\n\n const eachKey = state?.each || '';\n const autoCompleteOptions = useMemo(() => {\n return processVariables(variables, {\n query: eachKey || '',\n editor,\n from: 'repeat-variable',\n }).map((variable) => variable.name);\n }, [variables, eachKey, editor]);\n\n const isValidEachKey = eachKey;\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-items-stretch mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n <div className=\"mly-flex mly-items-center mly-gap-1.5 mly-px-1.5 mly-text-sm mly-leading-none\">\n Repeat\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-[260px]\"\n align=\"start\"\n >\n Ensure the selected variable is iterable, such as an array of\n objects.\n </TooltipContent>\n </Tooltip>\n </div>\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: state?.each,\n valid: isValidEachKey,\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 placeholder=\"ie. payload.items\"\n value={state?.each || ''}\n onValueChange={(value) => {\n editor.commands.updateRepeat({\n each: value,\n });\n }}\n onOutsideClick={() => {\n setIsUpdatingKey(false);\n }}\n onSelectOption={(value) => {\n editor.commands.updateRepeat({\n each: value,\n });\n setIsUpdatingKey(false);\n }}\n autoCompleteOptions={autoCompleteOptions}\n ref={inputRef}\n />\n </form>\n )}\n\n <Divider />\n <ShowPopover\n showIfKey={state.currentShowIfKey}\n onShowIfKeyValueChange={(value) => {\n editor.commands.updateRepeat({\n showIfKey: value,\n });\n }}\n editor={editor}\n />\n </TooltipProvider>\n </BubbleMenu>\n );\n}\n","import { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const useRepeatState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n each: ctx.editor.getAttributes('repeat')?.each,\n currentShowIfKey: ctx.editor.getAttributes('repeat')?.showIfKey || '',\n\n isSectionActive: ctx.editor.isActive('section'),\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\n};\n","import { BubbleMenu } from '@tiptap/react';\nimport { ArrowUpRight, ImageDown } from 'lucide-react';\nimport { AlignmentSwitch } from '../alignment-switch';\nimport { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { Divider } from '../ui/divider';\nimport { LinkInputPopover } from '../ui/link-input-popover';\nimport { Select } from '../ui/select';\nimport { TooltipProvider } from '../ui/tooltip';\nimport { ImageSize } from './image-size';\nimport { useImageState } from './use-image-state';\nimport { ShowPopover } from '../show-popover';\nimport { AllowedLogoSize, allowedLogoSize } from '@/editor/nodes/logo/logo';\nimport { sticky } from 'tippy.js';\n\nexport function ImageBubbleMenu(props: EditorBubbleMenuProps) {\n const { editor, appendTo } = props;\n if (!editor) {\n return null;\n }\n\n const state = useImageState(editor);\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n shouldShow: ({ editor }) => {\n if (!editor.isEditable) {\n return false;\n }\n\n return editor.isActive('logo') || editor.isActive('image');\n },\n tippyOptions: {\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: false }],\n },\n plugins: [sticky],\n sticky: 'popper',\n maxWidth: '100%',\n },\n };\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n {state.isLogoActive && state.imageSrc && (\n <>\n <Select\n label=\"Size\"\n tooltip=\"Size\"\n value={state.logoSize}\n options={allowedLogoSize.map((size) => ({\n value: size,\n label: size,\n }))}\n onValueChange={(value) => {\n editor\n ?.chain()\n .focus()\n .setLogoAttributes({ size: value as AllowedLogoSize })\n .run();\n }}\n />\n\n <Divider />\n </>\n )}\n\n <div className=\"mly-flex mly-space-x-0.5\">\n <AlignmentSwitch\n alignment={state.alignment}\n onAlignmentChange={(alignment) => {\n const isCurrentNodeImage = state.isImageActive;\n if (!isCurrentNodeImage) {\n editor?.chain().focus().setLogoAttributes({ alignment }).run();\n } else {\n editor\n ?.chain()\n .focus()\n .updateAttributes('image', { alignment })\n .run();\n }\n }}\n />\n\n <LinkInputPopover\n defaultValue={state?.imageSrc ?? ''}\n onValueChange={(value, isVariable) => {\n if (state.isLogoActive) {\n editor\n ?.chain()\n .setLogoAttributes({\n src: value,\n isSrcVariable: isVariable ?? false,\n })\n .run();\n } else {\n editor\n ?.chain()\n .updateAttributes('image', {\n src: value,\n isSrcVariable: isVariable ?? false,\n })\n .run();\n }\n }}\n tooltip=\"Source URL\"\n icon={ImageDown}\n editor={editor}\n isVariable={state.isSrcVariable}\n />\n\n {state.isImageActive && (\n <LinkInputPopover\n defaultValue={state?.imageExternalLink ?? ''}\n onValueChange={(value, isVariable) => {\n editor\n ?.chain()\n .updateAttributes('image', {\n externalLink: value,\n isExternalLinkVariable: isVariable ?? false,\n })\n .run();\n }}\n tooltip=\"External URL\"\n editor={editor}\n isVariable={state.isExternalLinkVariable}\n />\n )}\n </div>\n\n {state.isImageActive && state.imageSrc && (\n <>\n <Divider />\n\n <div className=\"mly-flex mly-space-x-0.5\">\n <ImageSize\n dimension=\"width\"\n value={state?.width ?? 0}\n onValueChange={(value) => {\n editor\n ?.chain()\n .updateAttributes('image', { width: value })\n .run();\n }}\n />\n <ImageSize\n dimension=\"height\"\n value={state?.height ?? 0}\n onValueChange={(value) => {\n editor\n ?.chain()\n .updateAttributes('image', { height: value })\n .run();\n }}\n />\n </div>\n </>\n )}\n\n <Divider />\n <ShowPopover\n showIfKey={state.currentShowIfKey}\n onShowIfKeyValueChange={(value) => {\n editor\n ?.chain()\n .updateAttributes(state.isLogoActive ? 'logo' : 'image', {\n showIfKey: value,\n })\n .run();\n }}\n editor={editor}\n />\n </TooltipProvider>\n </BubbleMenu>\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 {\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","import { AUTOCOMPLETE_PASSWORD_MANAGERS_OFF } from '@/editor/utils/constants';\n\ntype ImageSizeProps = {\n value: string;\n onValueChange: (value: string) => void;\n dimension: 'width' | 'height';\n};\n\nexport function ImageSize(props: ImageSizeProps) {\n const { value, onValueChange, dimension } = props;\n\n return (\n <label className=\"mly-relative mly-flex mly-items-center\">\n <span className=\"mly-absolute mly-inset-y-0 mly-left-2 mly-flex mly-items-center mly-text-xs mly-leading-none mly-text-gray-400\">\n {dimension === 'width' ? 'W' : 'H'}\n </span>\n <input\n {...AUTOCOMPLETE_PASSWORD_MANAGERS_OFF}\n className=\"hide-number-controls mly-h-auto mly-max-w-20 mly-appearance-none mly-border-0 mly-border-none mly-p-1 mly-px-[26px] mly-text-sm mly-uppercase mly-tabular-nums mly-outline-none focus-visible:mly-outline-none\"\n type=\"number\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n />\n <span className=\"mly-absolute mly-inset-y-0 mly-right-1 mly-flex mly-items-center mly-text-xs mly-leading-none mly-text-gray-400\">\n PX\n </span>\n </label>\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 { 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 { 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 { DEFAULT_LOGO_SIZE } from '@/editor/nodes/logo/logo';\nimport { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const useImageState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: ({ editor }) => {\n return {\n width: editor.getAttributes('image').width,\n height: editor.getAttributes('image').height,\n isImageActive: editor.isActive('image'),\n isLogoActive: editor.isActive('logo'),\n alignment:\n editor.getAttributes('image')?.alignment ||\n editor.getAttributes('logo')?.alignment,\n\n logoSize: editor.getAttributes('logo')?.size || DEFAULT_LOGO_SIZE,\n imageSrc:\n editor.getAttributes('image')?.src ||\n editor.getAttributes('logo')?.src ||\n '',\n isSrcVariable:\n editor.getAttributes('image')?.isSrcVariable ??\n editor.getAttributes('logo')?.isSrcVariable ??\n false,\n imageExternalLink: editor.getAttributes('image')?.externalLink || '',\n isExternalLinkVariable:\n editor.getAttributes('image')?.isExternalLinkVariable,\n\n currentShowIfKey:\n editor.getAttributes('image')?.showIfKey ||\n editor.getAttributes('logo')?.showIfKey ||\n '',\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\n};\n","import { deleteNode } from '@/editor/utils/delete-node';\nimport { isTextSelected } from '@/editor/utils/is-text-selected';\nimport { BubbleMenu, findChildren } from '@tiptap/react';\nimport { ChevronUp, Trash } from 'lucide-react';\nimport { useCallback } from 'react';\nimport { sticky } from 'tippy.js';\nimport { getRenderContainer } from '../../utils/get-render-container';\nimport { AlignmentSwitch } from '../alignment-switch';\nimport { BaseButton } from '../base-button';\nimport { BubbleMenuButton } from '../bubble-menu-button';\nimport { ColumnsBubbleMenuContent } from '../column-menu/columns-bubble-menu-content';\nimport { BorderColor } from '../icons/border-color';\nimport { MarginIcon } from '../icons/margin-icon';\nimport { PaddingIcon } from '../icons/padding-icon';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\nimport { ShowPopover } from '../show-popover';\nimport { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { ColorPicker } from '../ui/color-picker';\nimport { Divider } from '../ui/divider';\nimport { Select } from '../ui/select';\nimport { TooltipProvider } from '../ui/tooltip';\nimport { useSectionState } from './use-section-state';\nimport { getClosestNodeByName } from '@/editor/utils/columns';\nimport { spacing } from '@/editor/utils/spacing';\n\nexport function SectionBubbleMenu(props: EditorBubbleMenuProps) {\n const { appendTo, editor } = props;\n if (!editor) {\n return null;\n }\n\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor!, 'section');\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n shouldShow: ({ editor }) => {\n const activeSectionNode = getClosestNodeByName(editor, 'section');\n const repeatNodeChildren = activeSectionNode\n ? findChildren(activeSectionNode?.node, (node) => {\n return node.type.name === 'repeat';\n })?.[0]\n : null;\n const inlineImageNodeChildren = activeSectionNode\n ? findChildren(activeSectionNode?.node, (node) => {\n return node.type.name === 'inlineImage';\n })?.[0]\n : null;\n const hasActiveRepeatNodeChildren =\n repeatNodeChildren && editor.isActive('repeat');\n const hasActiveInlineImageNodeChildren =\n inlineImageNodeChildren && editor.isActive('inlineImage');\n\n if (\n isTextSelected(editor) ||\n hasActiveRepeatNodeChildren ||\n hasActiveInlineImageNodeChildren ||\n !editor.isEditable\n ) {\n return false;\n }\n\n return editor.isActive('section');\n },\n tippyOptions: {\n offset: [0, 8],\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: false }],\n },\n getReferenceClientRect,\n appendTo: () => appendTo?.current,\n plugins: [sticky],\n sticky: 'popper',\n maxWidth: 'auto',\n },\n pluginKey: 'sectionBubbleMenu',\n };\n\n const state = useSectionState(editor);\n\n const borderRadiusOptions = [\n { value: '0', label: 'Sharp' },\n { value: '6', label: 'Smooth' },\n { value: '9999', label: 'Round' },\n ];\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-items-stretch mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n <AlignmentSwitch\n alignment={state.currentAlignment}\n onAlignmentChange={(alignment) => {\n editor?.commands?.updateSection({\n align: alignment,\n });\n }}\n />\n\n <Divider />\n\n <div className=\"mly-flex mly-space-x-0.5\">\n <Select\n label=\"Border Radius\"\n value={String(state.currentBorderRadius)}\n options={borderRadiusOptions}\n onValueChange={(value) => {\n editor?.commands?.updateSection({\n borderRadius: Number(value),\n });\n }}\n tooltip=\"Border Radius\"\n className=\"mly-capitalize\"\n />\n\n <Select\n label=\"Border Width\"\n value={String(state.currentBorderWidth)}\n options={[\n { value: '0', label: 'None' },\n { value: '1', label: 'Thin' },\n { value: '2', label: 'Medium' },\n { value: '3', label: 'Thick' },\n ]}\n onValueChange={(value) => {\n editor?.commands?.updateSection({\n borderWidth: Number(value),\n });\n }}\n tooltip=\"Border Width\"\n className=\"mly-capitalize\"\n />\n </div>\n\n <Divider />\n\n <Select\n icon={MarginIcon}\n iconClassName=\"mly-stroke-[1.2] mly-size-3.5\"\n label=\"Margin\"\n value={String(state.currentMarginTop)}\n options={[\n { value: '0', label: 'None' },\n ...spacing.map((space) => ({\n label: space.name,\n value: String(space.value),\n })),\n ]}\n onValueChange={(_value) => {\n const value = Number(_value);\n editor?.commands?.updateSection({\n marginTop: value,\n marginRight: value,\n marginBottom: value,\n marginLeft: value,\n });\n }}\n tooltip=\"Margin\"\n className=\"mly-capitalize\"\n />\n\n <Divider />\n\n <Select\n icon={PaddingIcon}\n iconClassName=\"mly-stroke-[1]\"\n label=\"Padding\"\n value={String(state.currentPaddingTop)}\n options={[\n { value: '0', label: 'None' },\n ...spacing.map((space) => ({\n label: space.name,\n value: String(space.value),\n })),\n ]}\n onValueChange={(_value) => {\n const value = Number(_value);\n editor?.commands?.updateSection({\n paddingTop: value,\n paddingRight: value,\n paddingBottom: value,\n paddingLeft: value,\n });\n }}\n tooltip=\"Padding\"\n className=\"mly-capitalize\"\n />\n\n <Divider />\n\n <div className=\"mly-flex mly-space-x-0.5\">\n <ColorPicker\n color={state.currentBorderColor}\n onColorChange={(color) => {\n editor?.commands?.updateSection({\n borderColor: color,\n });\n }}\n tooltip=\"Border Color\"\n >\n <BaseButton\n variant=\"ghost\"\n className=\"!mly-size-7 mly-shrink-0\"\n size=\"sm\"\n type=\"button\"\n >\n <BorderColor\n className=\"mly-size-3 mly-shrink-0\"\n topBarClassName=\"mly-stroke-midnight-gray\"\n style={{\n color: state.currentBorderColor,\n }}\n />\n </BaseButton>\n </ColorPicker>\n <ColorPicker\n color={state.currentBackgroundColor}\n onColorChange={(color) => {\n editor?.commands?.updateSection({\n backgroundColor: color,\n });\n }}\n backgroundColor={state.currentBackgroundColor}\n tooltip=\"Background Color\"\n className=\"mly-rounded-full mly-border-[1.5px] mly-border-white mly-shadow\"\n />\n </div>\n\n <Divider />\n\n <BubbleMenuButton\n icon={Trash}\n tooltip=\"Delete Section\"\n command={() => {\n deleteNode(editor, 'section');\n }}\n />\n\n <Divider />\n\n <ShowPopover\n showIfKey={state.currentShowIfKey}\n onShowIfKeyValueChange={(value) => {\n editor.commands.updateSection({\n showIfKey: value,\n });\n }}\n editor={editor}\n />\n\n {state.isColumnsActive && (\n <>\n <Divider />\n <Popover>\n <PopoverTrigger className=\"mly-flex mly-items-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\">\n Column\n <ChevronUp className=\"mly-h-3 mly-w-3\" />\n </PopoverTrigger>\n <PopoverContent\n className=\"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 <ColumnsBubbleMenuContent editor={editor} />\n </PopoverContent>\n </Popover>\n </>\n )}\n </TooltipProvider>\n </BubbleMenu>\n );\n}\n","import { SVGProps } from 'react';\n\nexport function BorderColor(\n props: SVGProps<SVGSVGElement> & { topBarClassName?: string }\n) {\n const { topBarClassName, ...rest } = props;\n\n return (\n <svg\n width={11}\n height={12}\n viewBox=\"0 0 11 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path d=\"M0 11H10.6667\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M0.666504 9V6.33333C0.666504 3.38781 3.05432 1 5.99984 1H10.6665\"\n strokeWidth=\"1.5\"\n className={topBarClassName}\n />\n </svg>\n );\n}\n","import { SVGProps } from 'react';\n\nexport function MarginIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.5 10.499V1.49902M1.5 10.499V1.49902M4.5 5.99902C4.5 5.53308 4.5 5.30011 4.57612 5.11634C4.67761 4.87131 4.87229 4.67664 5.11732 4.57514C5.30109 4.49902 5.53406 4.49902 6 4.49902C6.46594 4.49902 6.69891 4.49902 6.88268 4.57514C7.12771 4.67664 7.32239 4.87131 7.42388 5.11634C7.5 5.30011 7.5 5.53308 7.5 5.99902C7.5 6.46496 7.5 6.69794 7.42388 6.88171C7.32239 7.12673 7.12771 7.32141 6.88268 7.4229C6.69891 7.49902 6.46594 7.49902 6 7.49902C5.53406 7.49902 5.30109 7.49902 5.11732 7.4229C4.87229 7.32141 4.67761 7.12673 4.57612 6.88171C4.5 6.69794 4.5 6.46496 4.5 5.99902Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import { SVGProps } from 'react';\n\nexport function PaddingIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width={10}\n height={10}\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M9.50244 0.501526L9.10244 0.501526C8.54239 0.501526 8.26236 0.501526 8.04845 0.610519C7.86029 0.706392 7.70731 0.859373 7.61144 1.04754C7.50244 1.26145 7.50244 1.54147 7.50244 2.10153V7.90153C7.50244 8.46158 7.50244 8.74161 7.61144 8.95552C7.70731 9.14368 7.86029 9.29666 8.04845 9.39253C8.26236 9.50153 8.54239 9.50153 9.10244 9.50153H9.50244M0.502441 0.501527L0.902441 0.501527C1.46249 0.501527 1.74252 0.501527 1.95643 0.61052C2.14459 0.706393 2.29757 0.859374 2.39345 1.04754C2.50244 1.26145 2.50244 1.54147 2.50244 2.10153L2.50244 7.90153C2.50244 8.46158 2.50244 8.74161 2.39345 8.95552C2.29757 9.14368 2.14459 9.29666 1.95643 9.39253C1.74252 9.50153 1.46249 9.50153 0.902442 9.50153H0.502442M4.99994 7.99903V1.99903\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\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 {\n DEFAULT_SECTION_BACKGROUND_COLOR,\n DEFAULT_SECTION_BORDER_COLOR,\n} from '@/editor/nodes/section/section';\nimport { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const useSectionState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n currentAlignment: ctx.editor.getAttributes('section')?.align || 'left',\n\n currentBorderRadius:\n Number(ctx.editor.getAttributes('section')?.borderRadius) || 0,\n currentBackgroundColor:\n ctx.editor.getAttributes('section')?.backgroundColor ||\n DEFAULT_SECTION_BACKGROUND_COLOR,\n\n currentBorderColor:\n ctx.editor.getAttributes('section')?.borderColor ||\n DEFAULT_SECTION_BORDER_COLOR,\n currentBorderWidth:\n Number(ctx.editor.getAttributes('section')?.borderWidth) || 0,\n\n currentMarginTop:\n Number(ctx.editor.getAttributes('section')?.marginTop) || 0,\n currentMarginRight:\n Number(ctx.editor.getAttributes('section')?.marginRight) || 0,\n currentMarginBottom:\n Number(ctx.editor.getAttributes('section')?.marginBottom) || 0,\n currentMarginLeft:\n Number(ctx.editor.getAttributes('section')?.marginLeft) || 0,\n\n currentPaddingTop:\n Number(ctx.editor.getAttributes('section')?.paddingTop) || 0,\n currentPaddingRight:\n Number(ctx.editor.getAttributes('section')?.paddingRight) || 0,\n currentPaddingBottom:\n Number(ctx.editor.getAttributes('section')?.paddingBottom) || 0,\n currentPaddingLeft:\n Number(ctx.editor.getAttributes('section')?.paddingLeft) || 0,\n\n isColumnsActive: ctx.editor.isActive('columns'),\n\n currentShowIfKey: ctx.editor.getAttributes('section')?.showIfKey || '',\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\n};\n","import { BubbleMenu } from '@tiptap/react';\n\nimport { BubbleMenuButton } from '../bubble-menu-button';\nimport {\n BubbleMenuItem,\n EditorBubbleMenuProps,\n} from '../text-menu/text-bubble-menu';\nimport { Divider } from '../ui/divider';\nimport { useSpacerState } from './use-spacer-state';\nimport { ShowPopover } from '../show-popover';\nimport { TooltipProvider } from '../ui/tooltip';\nimport { spacing } from '@/editor/utils/spacing';\nimport { useMemo } from 'react';\n\nexport function SpacerBubbleMenu(props: EditorBubbleMenuProps) {\n const { editor, appendTo } = props;\n if (!editor) {\n return null;\n }\n\n const items: BubbleMenuItem[] = useMemo(\n () =>\n spacing.map((space) => {\n const { value: height, short: name } = space;\n return {\n name,\n isActive: () => editor?.isActive('spacer', { height }),\n command: () => {\n editor?.chain().focus().setSpacer({ height }).run();\n },\n };\n }),\n [editor]\n );\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n shouldShow: ({ editor }) => {\n if (!editor.isEditable) {\n return false;\n }\n\n return editor.isActive('spacer');\n },\n tippyOptions: {\n maxWidth: '100%',\n moveTransition: 'mly-transform 0.15s mly-ease-out',\n },\n };\n\n const state = useSpacerState(editor);\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-gap-0.5 mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n {items.map((item, index) => (\n <BubbleMenuButton\n key={index}\n className=\"!mly-h-7 mly-w-7 mly-shrink-0 mly-p-0\"\n iconClassName=\"mly-w-3 mly-h-3\"\n nameClassName=\"mly-text-xs\"\n {...item}\n />\n ))}\n <Divider />\n <ShowPopover\n showIfKey={state.currentShowIfKey}\n onShowIfKeyValueChange={(value) => {\n editor.commands.setSpacerShowIfKey(value);\n }}\n editor={editor}\n />\n </TooltipProvider>\n </BubbleMenu>\n );\n}\n","import { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const useSpacerState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n currentShowIfKey: ctx.editor.getAttributes('spacer')?.showIfKey || '',\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\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 { 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 { Editor } from '@tiptap/core';\nimport { HorizontalRule } from '../extensions/horizontal-rule';\nimport Image from '@tiptap/extension-image';\nimport { Spacer } from '../nodes/spacer';\nimport { LinkCardExtension } from '../extensions/link-card';\nimport { ButtonExtension } from '../nodes/button/button';\nimport { VariableExtension } from '../nodes/variable/variable';\nimport { ImageExtension } from '../nodes/image/image';\nimport { LogoExtension } from '../nodes/logo/logo';\nimport { HTMLCodeBlockExtension } from '../nodes/html/html';\nimport { InlineImageExtension } from '../nodes/inline-image/inline-image';\n\nexport const isCustomNodeSelected = (editor: Editor, node: HTMLElement) => {\n const customNodes = [\n HorizontalRule.name,\n Image.name,\n Spacer.name,\n ImageExtension.name,\n VariableExtension.name,\n LinkCardExtension.name,\n LogoExtension.name,\n ButtonExtension.name,\n HTMLCodeBlockExtension.name,\n InlineImageExtension.name,\n ];\n\n return customNodes.some((type) => editor.isActive(type));\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 { 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 * 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 { 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 { 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 { 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 { 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 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 { updateAttributes } from '@/editor/utils/update-attribute';\nimport CodeBlockLowlight from '@tiptap/extension-code-block-lowlight';\nimport { TextSelection } from '@tiptap/pm/state';\nimport {\n NodeViewContent,\n NodeViewProps,\n NodeViewWrapper,\n ReactNodeViewRenderer,\n} from '@tiptap/react';\nimport html from 'highlight.js/lib/languages/xml';\nimport { createLowlight, common } from 'lowlight';\nimport { HTMLCodeBlockView } from './html-view';\nimport { DEFAULT_SECTION_SHOW_IF_KEY } from '@/extensions';\n\nconst lowlight = createLowlight(common);\nlowlight.register('html', html);\n\nexport type HtmlCodeBlockAttributes = {\n activeTab: string;\n showIfKey: string;\n language: string;\n};\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n htmlCodeBlock: {\n /**\n * Set a code block\n * @param attributes Code block attributes\n * @example editor.commands.setCodeBlock({ language: 'javascript' })\n */\n setHtmlCodeBlock: (attributes?: { language: string }) => ReturnType;\n /**\n * Toggle a code block\n * @param attributes Code block attributes\n * @example editor.commands.toggleCodeBlock({ language: 'javascript' })\n */\n toggleHtmlCodeBlock: (attributes?: { language: string }) => ReturnType;\n updateHtmlCodeBlock: (\n attrs: Partial<HtmlCodeBlockAttributes>\n ) => ReturnType;\n };\n }\n}\n\nexport const HTMLCodeBlockExtension = CodeBlockLowlight.extend({\n name: 'htmlCodeBlock',\n content: '(text|variable)*',\n\n addAttributes() {\n return {\n ...this.parent?.(),\n activeTab: 'code',\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 addNodeView() {\n return ReactNodeViewRenderer(HTMLCodeBlockView, {\n className: 'mly-relative',\n attrs: ({ node }) => ({\n 'data-active-tab': node?.attrs?.activeTab || 'code',\n }),\n });\n },\n\n addCommands() {\n return {\n setHtmlCodeBlock:\n (attributes) =>\n ({ commands }) => {\n return commands.setNode(this.name, attributes);\n },\n toggleHtmlCodeBlock:\n (attributes) =>\n ({ commands }) => {\n return commands.toggleNode(this.name, 'paragraph', attributes);\n },\n updateHtmlCodeBlock: (attrs) => updateAttributes(this.name, attrs),\n };\n },\n\n addKeyboardShortcuts() {\n return {\n ...this.parent?.(),\n 'Mod-a': ({ editor }) => {\n const { selection } = editor.state;\n const $pos = selection.$anchor;\n\n // resolve the position to the code block node\n // and check if the node is a code block\n const node = $pos.node($pos.depth);\n if (node.type.name !== this.name) {\n return false;\n }\n\n // find the depth of the code block node\n // to get the correct start and end position\n // usually when we are inside a code block\n // the depth is the same as the code block node\n let depth = $pos.depth;\n for (let d = depth; d > 0; d--) {\n if ($pos.node(d).type.name === this.name) {\n depth = d;\n break;\n }\n }\n\n // find the start and end position of the code block\n // and set the selection to the code block\n const start = $pos.before(depth) + 1; // +1 to move inside the code block\n const end = $pos.after(depth) - 1; // -1 to stay inside the code block\n\n const from = editor.state.doc.resolve(start);\n const to = editor.state.doc.resolve(end);\n if (from && to) {\n const transaction = editor.state.tr.setSelection(\n TextSelection.between(from, to)\n );\n editor.view.dispatch(transaction);\n return true;\n }\n\n return false;\n },\n };\n },\n}).configure({\n lowlight,\n});\n","import { cn } from '@/editor/utils/classname';\nimport { NodeViewProps } from '@tiptap/core';\nimport { NodeViewContent, NodeViewWrapper } from '@tiptap/react';\nimport { useMemo } from 'react';\nimport { HtmlCodeBlockAttributes } from './html';\n\nexport function HTMLCodeBlockView(props: NodeViewProps) {\n const { node, updateAttributes } = props;\n\n let { language, activeTab = 'code' } = node.attrs as HtmlCodeBlockAttributes;\n activeTab ||= 'code';\n\n const languageClass = language ? `language-${language}` : '';\n\n const html = useMemo(() => {\n const text = node.content.content.reduce((acc, cur) => {\n if (cur.type.name === 'text') {\n return acc + cur.text;\n } else if (cur.type.name === 'variable') {\n const { id: variable, fallback } = cur?.attrs || {};\n const formattedVariable = fallback\n ? `{{${variable},fallback=${fallback}}}`\n : `{{${variable}}}`;\n return acc + formattedVariable;\n }\n\n return acc;\n }, '');\n\n const htmlParser = new DOMParser();\n const htmlDoc = htmlParser.parseFromString(text, 'text/html');\n const body = htmlDoc.body;\n return body.innerHTML;\n }, [activeTab]);\n\n const isEmpty = html === '';\n\n return (\n <NodeViewWrapper\n draggable={false}\n data-drag-handle={false}\n data-type=\"htmlCodeBlock\"\n >\n {activeTab === 'code' && (\n <pre className=\"mly-my-0 mly-rounded-lg mly-border mly-border-gray-200 mly-bg-white mly-p-2 mly-text-black\">\n <NodeViewContent\n as=\"code\"\n className={cn('is-editable', languageClass)}\n />\n </pre>\n )}\n\n {activeTab === 'preview' && (\n <div\n className={cn(\n 'mly-not-prose mly-rounded-lg mly-border mly-border-gray-200 mly-p-2',\n isEmpty && 'mly-min-h-[42px]'\n )}\n dangerouslySetInnerHTML={{ __html: html }}\n contentEditable={false}\n onClick={() => {\n if (!isEmpty) {\n return;\n }\n\n updateAttributes({\n activeTab: 'code',\n });\n }}\n />\n )}\n </NodeViewWrapper>\n );\n}\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 { 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 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 {\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","import { mergeAttributes, Node } from '@tiptap/core';\nimport { PluginKey, Plugin } from '@tiptap/pm/state';\n\nexport interface InlineImageOptions {\n /**\n * HTML attributes to add to the image element.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record<string, any>;\n}\n\nexport interface InlineImageAttributes {\n src: string;\n alt?: string;\n title?: string;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n inlineImage: {\n setInlineImage: (options: InlineImageAttributes) => ReturnType;\n };\n }\n}\n\nexport const DEFAULT_INLINE_IMAGE_HEIGHT = 20;\nexport const DEFAULT_INLINE_IMAGE_WIDTH = 20;\n\nexport const InlineImageExtension = Node.create<InlineImageOptions>({\n name: 'inlineImage',\n inline: true,\n group: 'inline',\n selectable: false,\n\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n\n addAttributes() {\n return {\n height: {\n default: DEFAULT_INLINE_IMAGE_HEIGHT,\n },\n width: {\n default: DEFAULT_INLINE_IMAGE_WIDTH,\n },\n\n src: {\n default: null,\n },\n isSrcVariable: {\n default: false,\n renderHTML(attributes) {\n if (!attributes.isSrcVariable) {\n return {};\n }\n\n return {\n 'data-is-src-variable': 'true',\n };\n },\n },\n alt: {\n default: null,\n },\n title: {\n default: null,\n },\n\n externalLink: {\n default: null,\n renderHTML(attributes) {\n if (!attributes.externalLink) {\n return {};\n }\n\n return {\n 'data-external-link': attributes.externalLink,\n };\n },\n },\n isExternalLinkVariable: {\n default: false,\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 },\n\n parseHTML() {\n return [\n {\n tag: `img[data-type=\"${this.name}\"]`,\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n const attrs = mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n 'data-type': this.name,\n class: 'mly-inline mly-relative',\n style: `--mly-inline-image-height: ${HTMLAttributes.height}px; --mly-inline-image-width: ${HTMLAttributes.width}px; margin:0; vertical-align: middle;`,\n draggable: 'false',\n loading: 'lazy',\n });\n\n return ['img', attrs];\n },\n\n addCommands() {\n return {\n setInlineImage:\n (options) =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: options,\n });\n },\n };\n },\n\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('inlineImage'),\n props: {\n handleClickOn: (_, pos, node) => {\n if (node.type !== this.type) {\n return false;\n }\n\n const from = pos;\n const to = pos + node.nodeSize;\n\n this.editor.commands.setTextSelection({ from, to });\n return true;\n },\n },\n }),\n ];\n },\n});\n","import { ColumnExtension } from '@/editor/nodes/columns/column';\nimport { ColumnsExtension } from '@/editor/nodes/columns/columns';\nimport { SectionExtension } from '@/editor/nodes/section/section';\nimport { isCustomNodeSelected } from '@/editor/utils/is-custom-node-selected';\nimport { isTextSelected } from '@/editor/utils/is-text-selected';\nimport { BubbleMenu, BubbleMenuProps } from '@tiptap/react';\nimport { LucideIcon } from 'lucide-react';\nimport { SVGIcon } from '../icons/grid-lines';\nimport { Divider } from '../ui/divider';\nimport { TooltipProvider } from '../ui/tooltip';\nimport { TextBubbleContent } from './text-bubble-content';\nimport { RepeatExtension } from '@/editor/nodes/repeat/repeat';\nimport { TurnIntoBlock } from './turn-into-block';\nimport { useTurnIntoBlockOptions } from './use-turn-into-block-options';\n\nexport interface BubbleMenuItem {\n name?: string;\n isActive?: () => boolean;\n command?: () => void;\n shouldShow?: () => boolean;\n icon?: LucideIcon | SVGIcon;\n className?: string;\n iconClassName?: string;\n nameClassName?: string;\n disbabled?: boolean;\n\n tooltip?: string;\n}\n\nexport type EditorBubbleMenuProps = Omit<BubbleMenuProps, 'children'> & {\n appendTo?: React.RefObject<any>;\n};\n\nexport function TextBubbleMenu(props: EditorBubbleMenuProps) {\n const { editor, appendTo } = props;\n\n if (!editor) {\n return null;\n }\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n pluginKey: 'text-menu',\n shouldShow: ({ editor, from, view }) => {\n if (!view || editor.view.dragging) {\n return false;\n }\n\n const domAtPos = view.domAtPos(from || 0).node as HTMLElement;\n const nodeDOM = view.nodeDOM(from || 0) as HTMLElement;\n const node = nodeDOM || domAtPos;\n\n if (isCustomNodeSelected(editor, node) || !editor.isEditable) {\n return false;\n }\n\n const nestedNodes = [\n RepeatExtension.name,\n SectionExtension.name,\n ColumnsExtension.name,\n ColumnExtension.name,\n ];\n\n const isNestedNodeSelected =\n nestedNodes.some((name) => editor.isActive(name)) &&\n node?.classList?.contains('ProseMirror-selectednode');\n return isTextSelected(editor) && !isNestedNodeSelected;\n },\n tippyOptions: {\n popperOptions: {\n placement: 'top-start',\n modifiers: [\n {\n name: 'preventOverflow',\n options: {\n boundary: 'viewport',\n padding: 8,\n },\n },\n {\n name: 'flip',\n options: {\n fallbackPlacements: ['bottom-start', 'top-end', 'bottom-end'],\n },\n },\n ],\n },\n maxWidth: '100%',\n },\n };\n\n const turnIntoBlockOptions = useTurnIntoBlockOptions(editor);\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-gap-0.5 mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n <TurnIntoBlock options={turnIntoBlockOptions} />\n\n <Divider className=\"mly-mx-0\" />\n\n <TextBubbleContent editor={editor} />\n </TooltipProvider>\n </BubbleMenu>\n );\n}\n","import { Editor } from '@tiptap/core';\nimport { BubbleMenuItem } from './text-bubble-menu';\n\nimport {\n BoldIcon,\n CodeIcon,\n ItalicIcon,\n List,\n ListOrdered,\n LucideIcon,\n StrikethroughIcon,\n UnderlineIcon,\n} from 'lucide-react';\nimport { BubbleMenuButton } from '../bubble-menu-button';\nimport { AlignmentSwitch } from '../alignment-switch';\nimport { useTextMenuState } from './use-text-menu-state';\nimport { LinkInputPopover } from '../ui/link-input-popover';\nimport { Divider } from '../ui/divider';\nimport { ColorPicker } from '../ui/color-picker';\nimport { BaseButton } from '../base-button';\n\ntype TextBubbleContentProps = {\n editor: Editor;\n showListMenu?: boolean;\n};\n\nexport function TextBubbleContent(props: TextBubbleContentProps) {\n const { editor, showListMenu = true } = props;\n\n const state = useTextMenuState(editor);\n const colors = editor?.storage.color.colors as Set<string>;\n const suggestedColors = Array?.from(colors)?.reverse()?.slice(0, 6) ?? [];\n\n const items: BubbleMenuItem[] = [\n {\n name: 'bold',\n isActive: () => editor?.isActive('bold')!,\n command: () => editor?.chain().focus().toggleBold().run()!,\n icon: BoldIcon,\n tooltip: 'Bold',\n },\n {\n name: 'italic',\n isActive: () => editor?.isActive('italic')!,\n command: () => editor?.chain().focus().toggleItalic().run()!,\n icon: ItalicIcon,\n tooltip: 'Italic',\n },\n {\n name: 'underline',\n isActive: () => editor?.isActive('underline')!,\n command: () => editor?.chain().focus().toggleUnderline().run()!,\n icon: UnderlineIcon,\n tooltip: 'Underline',\n },\n {\n name: 'strike',\n isActive: () => editor?.isActive('strike')!,\n command: () => editor?.chain().focus().toggleStrike().run()!,\n icon: StrikethroughIcon,\n tooltip: 'Strikethrough',\n },\n {\n name: 'code',\n isActive: () => editor?.isActive('code')!,\n command: () => editor?.chain().focus().toggleCode().run()!,\n icon: CodeIcon,\n tooltip: 'Code',\n },\n ];\n\n return (\n <>\n {items.map((item, index) => (\n <BubbleMenuButton key={index} {...item} />\n ))}\n\n <AlignmentSwitch\n alignment={state.textAlign}\n onAlignmentChange={(alignment) => {\n editor?.chain().focus().setTextAlign(alignment).run();\n }}\n />\n\n {!state.isListActive && showListMenu && (\n <>\n <BubbleMenuButton\n icon={List}\n command={() => {\n editor.chain().focus().toggleBulletList().run();\n }}\n tooltip=\"Bullet List\"\n />\n <BubbleMenuButton\n icon={ListOrdered}\n command={() => {\n editor.chain().focus().toggleOrderedList().run();\n }}\n tooltip=\"Ordered List\"\n />\n </>\n )}\n\n <LinkInputPopover\n defaultValue={state?.linkUrl ?? ''}\n onValueChange={(value, isVariable) => {\n const defaultValueWithoutProtocol = value.replace(/https?:\\/\\//, '');\n\n if (!defaultValueWithoutProtocol) {\n editor\n ?.chain()\n .focus()\n .extendMarkRange('link')\n .unsetLink()\n .unsetUnderline()\n .run();\n return;\n }\n\n editor\n ?.chain()\n .extendMarkRange('link')\n .setLink({ href: value })\n .setIsUrlVariable(isVariable ?? false)\n .setUnderline()\n .run()!;\n }}\n tooltip=\"External URL\"\n editor={editor}\n isVariable={state.isUrlVariable}\n />\n\n <Divider />\n\n <ColorPicker\n color={state.currentTextColor}\n onColorChange={(color) => {\n editor?.chain().setColor(color).run();\n }}\n tooltip=\"Text Color\"\n suggestedColors={suggestedColors}\n >\n <BaseButton\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n className=\"!mly-h-7 mly-w-7 mly-shrink-0 mly-p-0\"\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-slate-700\">\n A\n </span>\n <div\n className=\"mly-h-[2px] mly-w-3\"\n style={{ backgroundColor: state.currentTextColor }}\n />\n </div>\n </BaseButton>\n </ColorPicker>\n </>\n );\n}\n","import { AllowedLogoAlignment } from '@/editor/nodes/logo/logo';\nimport { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const DEFAULT_TEXT_COLOR = '#374151';\n\nexport const useTextMenuState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n currentTextColor:\n ctx.editor.getAttributes('textStyle').color || DEFAULT_TEXT_COLOR,\n\n linkUrl: ctx.editor?.getAttributes('link').href,\n textAlign: (ctx.editor?.isActive({ textAlign: 'left' })\n ? 'left'\n : ctx.editor?.isActive({ textAlign: 'center' })\n ? 'center'\n : ctx.editor?.isActive({ textAlign: 'right' })\n ? 'right'\n : ctx.editor?.isActive({ textAlign: 'justify' })\n ? 'justify'\n : 'left') as AllowedLogoAlignment,\n\n isListActive:\n ctx.editor.isActive('bulletList') ||\n ctx.editor.isActive('orderedList'),\n isUrlVariable: ctx.editor.getAttributes('link').isUrlVariable ?? false,\n\n isHeadingActive: ctx.editor.isActive('heading'),\n headingShowIfKey: ctx.editor.getAttributes('heading')?.showIfKey || '',\n\n isParagraphActive: ctx.editor.isActive('paragraph'),\n paragraphShowIfKey:\n ctx.editor.getAttributes('paragraph')?.showIfKey || '',\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\n};\n","import { ChevronDownIcon, PilcrowIcon } from 'lucide-react';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\nimport {\n TurnIntoBlockCategory,\n TurnIntoBlockOptions,\n TurnIntoOptions,\n} from './use-turn-into-block-options';\nimport { useMemo } from 'react';\nimport { BaseButton } from '../base-button';\nimport { cn } from '@/editor/utils/classname';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';\n\ntype TurnIntoBlockProps = {\n options: TurnIntoOptions;\n};\n\nconst isOption = (\n option: TurnIntoOptions[number]\n): option is TurnIntoBlockOptions => option.type === 'option';\nconst isCategory = (\n option: TurnIntoOptions[number]\n): option is TurnIntoBlockCategory => option.type === 'category';\n\nexport function TurnIntoBlock(props: TurnIntoBlockProps) {\n const { options } = props;\n\n const activeItem = useMemo(\n () =>\n options.find((option) => option.type === 'option' && option.isActive()),\n [options]\n ) as TurnIntoBlockOptions | undefined;\n const { icon: ActiveIcon = PilcrowIcon } = activeItem || {};\n\n return (\n <Popover>\n <Tooltip>\n <TooltipTrigger asChild>\n <PopoverTrigger\n className={cn(\n 'mly-flex mly-aspect-square mly-h-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 <ActiveIcon className=\"mly-h-3 mly-w-3 mly-shrink-0 mly-stroke-[2.5]\" />\n <ChevronDownIcon className=\"mly-h-3 mly-w-3 mly-shrink-0 mly-stroke-[2.5]\" />\n </PopoverTrigger>\n </TooltipTrigger>\n <TooltipContent sideOffset={8}>Turn into</TooltipContent>\n </Tooltip>\n <PopoverContent\n align=\"start\"\n side=\"bottom\"\n sideOffset={8}\n className=\"mly-flex mly-w-[160px] mly-flex-col mly-rounded-md mly-p-1\"\n >\n {options.map((option, index) => {\n if (isOption(option)) {\n return (\n <BaseButton\n key={option.id}\n onClick={option.onClick}\n variant=\"ghost\"\n className=\"mly-h-auto mly-justify-start mly-gap-2 !mly-rounded mly-px-2 mly-py-1 mly-text-sm mly-font-normal mly-text-midnight-gray\"\n >\n <option.icon className=\"mly-size-[15px] mly-shrink-0\" />\n {option.label}\n </BaseButton>\n );\n } else if (isCategory(option)) {\n return (\n <label\n key={option.id}\n className={cn(\n 'mly-px-2 mly-text-xs mly-font-medium mly-text-midnight-gray/60',\n index === 0 ? 'mly-mb-2 mly-mt-1' : 'mly-my-2'\n )}\n >\n {option.label}\n </label>\n );\n }\n })}\n </PopoverContent>\n </Popover>\n );\n}\n","import { Editor, useEditorState } from '@tiptap/react';\nimport {\n FootprintsIcon,\n Heading1Icon,\n Heading2Icon,\n Heading3Icon,\n ListIcon,\n ListOrderedIcon,\n LucideIcon,\n PilcrowIcon,\n} from 'lucide-react';\n\nexport type TurnIntoBlockOptions = {\n label: string;\n id: string;\n type: 'option';\n disabled: () => boolean;\n isActive: () => boolean;\n onClick: () => void;\n icon: LucideIcon;\n};\n\nexport type TurnIntoBlockCategory = {\n label: string;\n id: string;\n type: 'category';\n};\n\nexport type TurnIntoOptions = Array<\n TurnIntoBlockOptions | TurnIntoBlockCategory\n>;\n\nexport function useTurnIntoBlockOptions(editor: Editor) {\n return useEditorState({\n editor,\n selector: ({ editor }): TurnIntoOptions => [\n {\n type: 'category',\n label: 'Hierarchy',\n id: 'hierarchy',\n },\n {\n icon: PilcrowIcon,\n onClick: () =>\n editor.chain().focus().liftListItem('listItem').setParagraph().run(),\n id: 'paragraph',\n disabled: () => !editor.can().setParagraph(),\n isActive: () =>\n editor.isActive('paragraph') &&\n !editor.isActive('orderedList') &&\n !editor.isActive('bulletList') &&\n !editor.isActive('taskList'),\n label: 'Paragraph',\n type: 'option',\n },\n {\n icon: Heading1Icon,\n onClick: () =>\n editor\n .chain()\n .focus()\n .liftListItem('listItem')\n .setHeading({ level: 1 })\n .run(),\n id: 'heading1',\n disabled: () => !editor.can().setHeading({ level: 1 }),\n isActive: () => editor.isActive('heading', { level: 1 }),\n label: 'Heading 1',\n type: 'option',\n },\n {\n icon: Heading2Icon,\n onClick: () =>\n editor\n .chain()\n .focus()\n .liftListItem('listItem')\n .setHeading({ level: 2 })\n .run(),\n id: 'heading2',\n disabled: () => !editor.can().setHeading({ level: 2 }),\n isActive: () => editor.isActive('heading', { level: 2 }),\n label: 'Heading 2',\n type: 'option',\n },\n {\n icon: Heading3Icon,\n onClick: () =>\n editor\n .chain()\n .focus()\n .liftListItem('listItem')\n .setHeading({ level: 3 })\n .run(),\n id: 'heading3',\n disabled: () => !editor.can().setHeading({ level: 3 }),\n isActive: () => editor.isActive('heading', { level: 3 }),\n label: 'Heading 3',\n type: 'option',\n },\n {\n type: 'category',\n label: 'Lists',\n id: 'lists',\n },\n {\n icon: ListIcon,\n onClick: () => editor.chain().focus().toggleBulletList().run(),\n id: 'bulletList',\n disabled: () => !editor.can().toggleBulletList(),\n isActive: () => editor.isActive('bulletList'),\n label: 'Bullet list',\n type: 'option',\n },\n {\n icon: ListOrderedIcon,\n onClick: () => editor.chain().focus().toggleOrderedList().run(),\n id: 'orderedList',\n disabled: () => !editor.can().toggleOrderedList(),\n isActive: () => editor.isActive('orderedList'),\n label: 'Numbered list',\n type: 'option',\n },\n ],\n });\n}\n","import { AnyExtension } from '@tiptap/core';\nimport { getVariableSuggestions } from '../nodes/variable/variable-suggestions';\nimport { MailyContextType } from '../provider';\nimport { MailyKit } from './maily-kit';\nimport { SlashCommandExtension } from './slash-command/slash-command';\nimport { getSlashCommandSuggestions } from './slash-command/slash-command-view';\nimport { VariableExtension } from '@/extensions';\nimport { HTMLCodeBlockExtension } from '../nodes/html/html';\nimport { InlineImageExtension } from '../nodes/inline-image/inline-image';\nimport { PlaceholderExtension } from './placeholder';\n\ntype ExtensionsProps = Partial<MailyContextType> & {\n extensions?: AnyExtension[];\n};\n\nexport function extensions(props: ExtensionsProps) {\n const {\n variables,\n blocks,\n variableTriggerCharacter,\n extensions = [],\n } = props;\n\n const defaultExtensions = [\n MailyKit,\n SlashCommandExtension.configure({\n suggestion: getSlashCommandSuggestions(blocks),\n }),\n VariableExtension.configure({\n suggestion: getVariableSuggestions(variables, variableTriggerCharacter),\n }),\n HTMLCodeBlockExtension,\n InlineImageExtension,\n PlaceholderExtension,\n ].filter((ext) => {\n return !extensions.some((e) => e.name === ext.name);\n });\n\n return [...defaultExtensions, ...extensions];\n}\n","import { BubbleMenu } from '@tiptap/react';\nimport { sticky } from 'tippy.js';\nimport { TextBubbleContent } from '../text-menu/text-bubble-content';\nimport { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { TooltipProvider } from '../ui/tooltip';\n\nexport function VariableBubbleMenu(props: EditorBubbleMenuProps) {\n const { editor, appendTo } = props;\n if (!editor) {\n return null;\n }\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n pluginKey: 'variable-menu',\n shouldShow: ({ editor }) => {\n return editor.isActive('variable') && !editor.storage.variable?.popover;\n },\n tippyOptions: {\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: false }],\n },\n plugins: [sticky],\n sticky: 'popper',\n maxWidth: '100%',\n appendTo: () => appendTo?.current || 'parent',\n placement: 'top-start',\n },\n };\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-gap-0.5 mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n <TextBubbleContent showListMenu={false} editor={editor} />\n </TooltipProvider>\n </BubbleMenu>\n );\n}\n","import { JSONContent } from '@tiptap/core';\nimport { spacing } from './spacing';\nimport { DEFAULT_SPACER_HEIGHT } from '@/extensions';\n\n/**\n * To replace deprecated node type or attributes\n * to avoid breaking changes, we can replace the deprecated node type or attributes\n * with the new one in the JSON content object.\n * @param json - previous JSON content object\n * @returns JSONContent - new JSON content object\n */\nexport function replaceDeprecatedNode(json: JSONContent) {\n const stack = [json];\n\n while (stack.length) {\n const node = stack.pop();\n if (!node) {\n continue;\n }\n\n if (node.type === 'for') {\n node.type = 'repeat';\n }\n\n if (node.type === 'spacer') {\n let height = node.attrs?.height;\n if (\n typeof height === 'string' &&\n ['sm', 'md', 'lg', 'xl'].includes(height)\n ) {\n height =\n spacing.find((s) => s.short === height)?.value ||\n DEFAULT_SPACER_HEIGHT;\n }\n\n node.attrs = {\n ...node.attrs,\n height,\n };\n }\n\n if (node.content) {\n stack.push(...node.content);\n }\n }\n\n return json;\n}\n","import { cn } from '@/editor/utils/classname';\nimport { BubbleMenu } from '@tiptap/react';\nimport { CodeXmlIcon, ViewIcon } from 'lucide-react';\nimport { useCallback } from 'react';\nimport { sticky } from 'tippy.js';\nimport { getRenderContainer } from '../../utils/get-render-container';\nimport { ShowPopover } from '../show-popover';\nimport { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { Divider } from '../ui/divider';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '../ui/tooltip';\nimport { useHtmlState } from './use-html-state';\n\nexport function HTMLBubbleMenu(props: EditorBubbleMenuProps) {\n const { appendTo, editor } = props;\n if (!editor) {\n return null;\n }\n\n const state = useHtmlState(editor);\n\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor!, 'htmlCodeBlock');\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n shouldShow: ({ editor }) => {\n return editor.isActive('htmlCodeBlock');\n },\n tippyOptions: {\n offset: [0, 8],\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: false }],\n },\n getReferenceClientRect,\n appendTo: () => appendTo?.current,\n plugins: [sticky],\n sticky: 'popper',\n maxWidth: 'auto',\n },\n pluginKey: 'htmlCodeBlockBubbleMenu',\n };\n\n const { activeTab = 'code' } = state;\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-items-stretch mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n <div className=\"flex items-center mly-h-7 mly-rounded-md mly-bg-soft-gray mly-px-0.5\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n className={cn(\n 'mly-flex mly-size-6 mly-shrink-0 mly-items-center mly-justify-center mly-rounded 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 activeTab === 'code' && 'mly-bg-white'\n )}\n disabled={activeTab === 'code'}\n onClick={() => {\n editor?.commands?.updateHtmlCodeBlock({\n activeTab: 'code',\n });\n }}\n >\n <CodeXmlIcon className=\"mly-size-3 mly-shrink-0 mly-stroke-[2.5]\" />\n </button>\n </TooltipTrigger>\n <TooltipContent sideOffset={8}>HTML Code</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n className={cn(\n 'mly-flex mly-size-6 mly-shrink-0 mly-items-center mly-justify-center mly-rounded 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 activeTab === 'preview' && 'mly-bg-white'\n )}\n disabled={activeTab === 'preview'}\n onClick={() => {\n editor?.commands?.updateHtmlCodeBlock({\n activeTab: 'preview',\n });\n }}\n >\n <ViewIcon className=\"mly-size-3 mly-shrink-0 mly-stroke-[2.5]\" />\n </button>\n </TooltipTrigger>\n <TooltipContent sideOffset={8}>Preview</TooltipContent>\n </Tooltip>\n </div>\n <Divider />\n <ShowPopover\n showIfKey={state.currentShowIfKey}\n onShowIfKeyValueChange={(value) => {\n editor.commands.updateHtmlCodeBlock({\n showIfKey: value,\n });\n }}\n editor={editor}\n />\n </TooltipProvider>\n </BubbleMenu>\n );\n}\n","import { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const useHtmlState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: (ctx) => {\n return {\n activeTab:\n ctx.editor.getAttributes('htmlCodeBlock')?.activeTab || 'code',\n currentShowIfKey:\n ctx.editor.getAttributes('htmlCodeBlock')?.showIfKey || '',\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\n};\n","import { BubbleMenu } from '@tiptap/react';\nimport { sticky } from 'tippy.js';\nimport { ImageSize } from '../image-menu/image-size';\nimport { EditorBubbleMenuProps } from '../text-menu/text-bubble-menu';\nimport { TooltipProvider } from '../ui/tooltip';\nimport { useInlineImageState } from './use-inline-image-state';\nimport { LinkInputPopover } from '../ui/link-input-popover';\nimport { ImageDownIcon } from 'lucide-react';\nimport { isTextSelected } from '@/editor/utils/is-text-selected';\n\nexport function InlineImageBubbleMenu(props: EditorBubbleMenuProps) {\n const { editor, appendTo } = props;\n if (!editor) {\n return null;\n }\n\n const state = useInlineImageState(editor);\n\n const bubbleMenuProps: EditorBubbleMenuProps = {\n ...props,\n ...(appendTo ? { appendTo: appendTo.current } : {}),\n shouldShow: ({ editor }) => {\n if (!editor.isEditable) {\n return false;\n }\n\n return editor.isActive('inlineImage');\n },\n tippyOptions: {\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: false }],\n },\n plugins: [sticky],\n sticky: 'popper',\n maxWidth: '100%',\n },\n };\n\n return (\n <BubbleMenu\n {...bubbleMenuProps}\n className=\"mly-flex mly-rounded-lg mly-border mly-border-slate-200 mly-bg-white mly-p-0.5 mly-shadow-md\"\n >\n <TooltipProvider>\n <div className=\"mly-flex mly-space-x-0.5\">\n <LinkInputPopover\n defaultValue={state?.src ?? ''}\n onValueChange={(value, isVariable) => {\n editor\n ?.chain()\n .updateAttributes('inlineImage', {\n src: value,\n isSrcVariable: isVariable ?? false,\n })\n .run();\n }}\n tooltip=\"Source URL\"\n icon={ImageDownIcon}\n editor={editor}\n isVariable={state.isSrcVariable}\n />\n\n <LinkInputPopover\n defaultValue={state?.imageExternalLink ?? ''}\n onValueChange={(value, isVariable) => {\n editor\n ?.chain()\n .updateAttributes('inlineImage', {\n externalLink: value,\n isExternalLinkVariable: isVariable ?? false,\n })\n .run();\n }}\n tooltip=\"External URL\"\n editor={editor}\n isVariable={state.isExternalLinkVariable}\n />\n\n <ImageSize\n dimension=\"height\"\n value={state?.height}\n onValueChange={(value) => {\n editor\n ?.chain()\n .updateAttributes('inlineImage', {\n width: value,\n height: value,\n })\n .run();\n }}\n />\n </div>\n </TooltipProvider>\n </BubbleMenu>\n );\n}\n","import {\n DEFAULT_INLINE_IMAGE_HEIGHT,\n DEFAULT_INLINE_IMAGE_WIDTH,\n} from '@/editor/nodes/inline-image/inline-image';\nimport { Editor, useEditorState } from '@tiptap/react';\nimport deepEql from 'fast-deep-equal';\n\nexport const useInlineImageState = (editor: Editor) => {\n const states = useEditorState({\n editor,\n selector: ({ editor }) => {\n return {\n height:\n editor.getAttributes('inlineImage')?.height ||\n DEFAULT_INLINE_IMAGE_HEIGHT,\n width:\n editor.getAttributes('inlineImage')?.width ||\n DEFAULT_INLINE_IMAGE_WIDTH,\n src: editor.getAttributes('inlineImage')?.src || '',\n isSrcVariable:\n editor.getAttributes('inlineImage')?.isSrcVariable ?? false,\n imageExternalLink:\n editor.getAttributes('inlineImage')?.externalLink || '',\n isExternalLinkVariable:\n editor.getAttributes('inlineImage')?.isExternalLinkVariable ?? false,\n };\n },\n equalityFn: deepEql,\n });\n\n return states;\n};\n"],"mappings":"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","names":["useMemo","useRef","useCallback","uuid","HTMLAttributes","uuid","jsx","React","jsx","jsx","jsx","useMemo","useRef","useState","FootprintsIcon","Heading1","jsx","jsx","TextSelection","jsx","editor","jsx","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","Heading1","FootprintsIcon","React","jsx","jsx","jsxs","updateAttributes","jsx","Braces","forwardRef","jsx","jsxs","useEffect","forwardRef","useRef","jsx","jsxs","forwardRef","useRef","jsx","jsxs","useState","useRef","useMemo","jsx","jsxs","value","jsx","jsxs","findParentNode","Fragment","jsx","jsxs","jsx","useCallback","editor","useCallback","useEffect","useState","useState","useRef","useEffect","Selection","Selection","t","e","o","element","n","r","i","s","d","jsx","useState","useRef","useEffect","jsx","jsxs","useState","useCallback","useEffect","useMemo","EraserIcon","jsx","useMemo","EraserIcon","index","BubbleMenu","InfoIcon","useCallback","useMemo","useRef","useState","sticky","useEditorState","deepEql","jsx","jsxs","useCallback","editor","sticky","useRef","useState","useMemo","BubbleMenu","InfoIcon","BubbleMenu","AlignCenter","AlignLeft","AlignRight","jsx","jsxs","AlignLeft","AlignCenter","AlignRight","ChevronDownIcon","useRef","useState","useMemo","Fragment","jsx","jsxs","useState","useRef","_a","protocol","ChevronDownIcon","isVariable","jsx","jsxs","mergeAttributes","Node","Node","HTMLAttributes","mergeAttributes","NodeViewWrapper","useEffect","useState","useCallback","useRef","NodeViewWrapper","BracesIcon","useEffect","useRef","useState","Fragment","jsx","jsxs","updateAttributes","useState","useRef","event","useEffect","NodeViewWrapper","BracesIcon","jsx","jsxs","useState","useEffect","NodeViewWrapper","useEditorState","deepEql","editor","sticky","Fragment","jsx","jsxs","editor","sticky","BubbleMenu","BubbleMenu","findChildren","Trash","useCallback","sticky","jsx","jsxs","jsx","jsx","jsx","jsxs","color","useEditorState","deepEql","Fragment","jsx","jsxs","useCallback","editor","findChildren","sticky","BubbleMenu","Trash","BubbleMenu","useEditorState","deepEql","useMemo","jsx","jsxs","useMemo","editor","BubbleMenu","mergeAttributes","Node","uuid","Node","uuid","HTMLAttributes","mergeAttributes","Image","mergeAttributes","Node","Node","HTMLAttributes","mergeAttributes","mergeAttributes","Node","ReactNodeViewRenderer","NodeViewWrapper","React","jsx","React","jsx","jsx","jsxs","image","NodeViewWrapper","Node","HTMLAttributes","mergeAttributes","ReactNodeViewRenderer","mergeAttributes","Node","ReactNodeViewRenderer","NodeViewWrapper","useMemo","useState","useRef","jsx","jsxs","value","isVariable","useMemo","jsx","jsxs","updateAttributes","text","NodeViewWrapper","alignment","Node","HTMLAttributes","mergeAttributes","ReactNodeViewRenderer","mergeAttributes","Node","PluginKey","ReactNodeViewRenderer","PluginKey","Node","HTMLAttributes","mergeAttributes","ReactNodeViewRenderer","TiptapImage","ReactNodeViewRenderer","TiptapImage","ReactNodeViewRenderer","TextSelection","ReactNodeViewRenderer","NodeViewWrapper","useMemo","jsx","jsxs","updateAttributes","html","text","mergeAttributes","Node","HTMLAttributes","mergeAttributes","Node","ReactNodeViewRenderer","NodeViewWrapper","NodeViewContent","Repeat2","jsx","jsxs","Node","HTMLAttributes","mergeAttributes","ReactNodeViewRenderer","extensions","Extension","Suggestion","Extension","Suggestion","forwardRef","Fragment","useCallback","useEffect","useImperativeHandle","useLayoutEffect","useRef","useState","tippy","Fragment","jsx","jsxs","forwardRef","CommandList","useState","useCallback","useImperativeHandle","useEffect","useRef","useLayoutEffect","group","_a","editor","tippy","ReactRenderer","useRef","forwardRef","useImperativeHandle","tippy","jsx","forwardRef","useRef","useImperativeHandle","ReactRenderer","tippy","ReactNodeViewRenderer","TextSelection","mergeAttributes","Node","PluginKey","Plugin","HTMLAttributes","Image","BubbleMenu","BoldIcon","ItalicIcon","List","ListOrdered","StrikethroughIcon","UnderlineIcon","useEditorState","deepEql","Fragment","jsx","jsxs","BoldIcon","ItalicIcon","UnderlineIcon","StrikethroughIcon","List","ListOrdered","ChevronDownIcon","useMemo","jsx","jsxs","useMemo","ChevronDownIcon","useEditorState","PilcrowIcon","editor","jsx","jsxs","editor","BubbleMenu","extensions","BubbleMenu","sticky","jsx","editor","sticky","BubbleMenu","BubbleMenu","CodeXmlIcon","useCallback","sticky","useEditorState","deepEql","jsx","jsxs","useCallback","editor","sticky","BubbleMenu","CodeXmlIcon","BubbleMenu","sticky","useEditorState","deepEql","editor","jsx","jsxs","editor","sticky","BubbleMenu","jsx","jsxs","Editor","extensions","useMemo","useRef","editor"]}
|