@react-email/editor 0.0.0-experimental.37 → 0.0.0-experimental.39

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.
Files changed (41) hide show
  1. package/dist/{extension-XZBBjuHO.mjs → extension-CnC8y63H.mjs} +3 -7
  2. package/dist/extension-CnC8y63H.mjs.map +1 -0
  3. package/dist/{extension-B8yvCdun.cjs → extension-dGpPpEvD.cjs} +2 -6
  4. package/dist/index-C4KcMQ0R.d.cts.map +1 -1
  5. package/dist/index-CxX7W63O.d.mts.map +1 -1
  6. package/dist/index.cjs +7 -7
  7. package/dist/index.css +27 -54
  8. package/dist/index.css.map +1 -1
  9. package/dist/index.d.cts +4 -4
  10. package/dist/index.d.cts.map +1 -1
  11. package/dist/index.d.mts +2 -2
  12. package/dist/index.d.mts.map +1 -1
  13. package/dist/index.mjs +7 -7
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/plugins/index.cjs +1 -1
  16. package/dist/plugins/index.d.cts.map +1 -1
  17. package/dist/plugins/index.d.mts.map +1 -1
  18. package/dist/plugins/index.mjs +1 -1
  19. package/dist/{root-BMxsq1NF.mjs → root-CkYaJZpj.mjs} +645 -730
  20. package/dist/root-CkYaJZpj.mjs.map +1 -0
  21. package/dist/{root-CNVO39XG.cjs → root-Gu08xybW.cjs} +723 -832
  22. package/dist/{set-text-alignment-GMXOPMlJ.mjs → set-text-alignment-OA8IMWmO.mjs} +1 -1
  23. package/dist/{set-text-alignment-GMXOPMlJ.mjs.map → set-text-alignment-OA8IMWmO.mjs.map} +1 -1
  24. package/dist/ui/bubble-menu/bubble-menu.css +139 -0
  25. package/dist/ui/index.cjs +32 -57
  26. package/dist/ui/index.d.cts +280 -364
  27. package/dist/ui/index.d.cts.map +1 -1
  28. package/dist/ui/index.d.mts +280 -364
  29. package/dist/ui/index.d.mts.map +1 -1
  30. package/dist/ui/index.mjs +17 -35
  31. package/dist/ui/index.mjs.map +1 -1
  32. package/dist/ui/themes/default.css +27 -54
  33. package/dist/utils/index.cjs +1 -1
  34. package/dist/utils/index.mjs +1 -1
  35. package/package.json +1 -1
  36. package/dist/extension-XZBBjuHO.mjs.map +0 -1
  37. package/dist/root-BMxsq1NF.mjs.map +0 -1
  38. package/dist/ui/button-bubble-menu/button-bubble-menu.css +0 -63
  39. package/dist/ui/image-bubble-menu/image-bubble-menu.css +0 -29
  40. package/dist/ui/link-bubble-menu/link-bubble-menu.css +0 -68
  41. /package/dist/{set-text-alignment-aNb7Ml9N.cjs → set-text-alignment-Cv72txmv.cjs} +0 -0
@@ -43,7 +43,7 @@ function injectThemeCss(styles, options = {}) {
43
43
  const prefix = ".node-";
44
44
  const styleId = options.styleId ?? "tiptap-extended-theme-css";
45
45
  const css = Object.entries(styles).reduce((acc, [key, value]) => {
46
- return `${acc}${`${container} ${prefix}${key}`}{${Object.entries(value).reduce((acc$1, [prop, val]) => {
46
+ return `${acc}${key === "body" ? container : `${container} ${prefix}${key}`}{${Object.entries(value).reduce((acc$1, [prop, val]) => {
47
47
  return `${acc$1}${prop.replace(/([A-Z])/g, "-$1").toLowerCase()}:${val};`;
48
48
  }, "")}}`;
49
49
  }, "");
@@ -1087,13 +1087,10 @@ const EmailTheming = Extension.create({
1087
1087
  if (styles !== prevStyles || theme !== prevTheme) {
1088
1088
  prevStyles = styles;
1089
1089
  prevTheme = theme;
1090
- const mergedCssJs = getMergedCssJs(theme, resolvedStyles);
1091
- injectThemeCss(mergedCssJs, {
1090
+ injectThemeCss(getMergedCssJs(theme, resolvedStyles), {
1092
1091
  scopeSelector,
1093
1092
  styleId: themeStyleId
1094
1093
  });
1095
- const bodyBg = mergedCssJs.body?.backgroundColor;
1096
- view.dom.style.backgroundColor = typeof bodyBg === "string" ? bodyBg : "";
1097
1094
  }
1098
1095
  if (css !== prevCss) {
1099
1096
  prevCss = css;
@@ -1109,7 +1106,6 @@ const EmailTheming = Extension.create({
1109
1106
  destroy() {
1110
1107
  document.getElementById(themeStyleId)?.remove();
1111
1108
  document.getElementById(globalStyleId)?.remove();
1112
- view.dom.style.backgroundColor = "";
1113
1109
  view.dom.removeAttribute(scopeAttribute);
1114
1110
  }
1115
1111
  };
@@ -1120,4 +1116,4 @@ const EmailTheming = Extension.create({
1120
1116
 
1121
1117
  //#endregion
1122
1118
  export { resolveResetValue as _, setCurrentTheme as a, mergeCssJs as b, stylesToCss as c, EDITOR_THEMES as d, INBOX_EMAIL_DEFAULTS as f, getThemeBodyFontSizePx as g, getPanelTitle as h, getThemeComponentKey as i, useEmailTheming as l, SUPPORTED_CSS_PROPERTIES as m, getMergedCssJs as n, setGlobalCssInjected as o, RESET_THEMES as p, getResolvedNodeStyles as r, setGlobalStyles as s, EmailTheming as t, DEFAULT_INBOX_FONT_SIZE_PX as u, injectGlobalPlainCss as v, transformToCssJs as x, injectThemeCss as y };
1123
- //# sourceMappingURL=extension-XZBBjuHO.mjs.map
1119
+ //# sourceMappingURL=extension-CnC8y63H.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-CnC8y63H.mjs","names":["acc"],"sources":["../src/plugins/email-theming/css-transforms.ts","../src/plugins/email-theming/themes.ts","../src/plugins/email-theming/normalization.ts","../src/plugins/email-theming/extension.tsx"],"sourcesContent":["import { ensureBorderStyleFallback } from '../../utils/styles';\nimport type { CssJs, PanelGroup } from './types';\n\nexport function transformToCssJs(\n styleArray: PanelGroup[],\n baseFontSize: number,\n): CssJs {\n const cssJS = {} as CssJs;\n\n if (!Array.isArray(styleArray)) {\n return cssJS;\n }\n\n for (const style of styleArray) {\n for (const input of style.inputs) {\n let value = input.value;\n\n // If there's a unit property, append it to the value\n if (input.unit && typeof value === 'number') {\n // if font size prop convert px unit to em to adjust size in mobile\n if (input.prop === 'fontSize') {\n value = `${value / baseFontSize}em`;\n } else {\n value = `${value}${input.unit}`;\n }\n }\n\n if (!input.classReference) {\n continue;\n }\n\n if (!cssJS[input.classReference]) {\n cssJS[input.classReference] = {};\n }\n\n // @ts-expect-error -- backward compatibility: 'h-padding' is a legacy prop not in KnownCssProperties\n if (input.prop === 'h-padding') {\n cssJS[input.classReference].paddingLeft = value;\n cssJS[input.classReference].paddingRight = value;\n\n continue;\n }\n\n // @ts-expect-error -- input.prop is KnownCssProperties but CssJs values are React.CSSProperties; dynamic assignment is intentional\n cssJS[input.classReference][input.prop] = value;\n }\n }\n\n for (const key of Object.keys(cssJS)) {\n ensureBorderStyleFallback(\n cssJS[key as keyof CssJs] as Record<string, string | number>,\n );\n }\n\n return cssJS;\n}\n\nexport function mergeCssJs(original: CssJs, newCssJs: CssJs) {\n const merged = { ...original };\n\n for (const key in newCssJs) {\n const keyType = key as keyof CssJs;\n\n if (\n Object.hasOwn(merged, key) &&\n typeof merged[keyType] === 'object' &&\n !Array.isArray(merged[keyType])\n ) {\n merged[keyType] = {\n ...merged[keyType],\n ...newCssJs[keyType],\n };\n } else {\n merged[keyType] = newCssJs[keyType];\n }\n }\n\n return merged;\n}\n\nexport function injectThemeCss(\n styles: CssJs,\n options: { styleId?: string; scopeSelector?: string } = {},\n) {\n const container =\n options.scopeSelector ?? '.tiptap-extended .tiptap.ProseMirror';\n const prefix = '.node-';\n const styleId = options.styleId ?? 'tiptap-extended-theme-css';\n\n const css = Object.entries(styles).reduce((acc, [key, value]) => {\n const className =\n key === 'body' ? container : `${container} ${prefix}${key}`;\n\n const cssString = Object.entries(value).reduce((acc, [prop, val]) => {\n const normalizeProp = prop.replace(/([A-Z])/g, '-$1').toLowerCase();\n\n return `${acc}${normalizeProp}:${val};`;\n }, '');\n\n return `${acc}${className}{${cssString}}`;\n }, '');\n\n let styleTag = document.getElementById(styleId) as HTMLStyleElement;\n\n if (!styleTag) {\n styleTag = document.createElement('style');\n styleTag.textContent = css;\n styleTag.id = styleId;\n\n document.head.appendChild(styleTag);\n\n return;\n }\n\n styleTag.textContent = css;\n}\n\nexport function injectGlobalPlainCss(\n css?: string | null,\n options: { styleId?: string; scopeSelector?: string } = {},\n) {\n if (!css) {\n return;\n }\n\n const styleId = options.styleId ?? 'global-editor-style';\n const container = options.scopeSelector ?? '.tiptap-extended .ProseMirror';\n let styleElement = document.getElementById(styleId);\n\n if (!styleElement) {\n styleElement = document.createElement('style');\n styleElement.id = styleId;\n document.head.appendChild(styleElement);\n }\n\n // Remove CSS within @media (prefers-color-scheme: dark) blocks\n const cleanedCSS = css.replace(\n /@media\\s?\\(prefers-color-scheme:\\s?dark\\)\\s?{([\\s\\S]+?})\\s*}/g,\n '',\n );\n\n // TODO: Figure out a way to extract the body and apply the styles out of the nested .tiptap-extended\n styleElement.textContent = `${container} { ${cleanedCSS} }`;\n}\n","import type {\n EditorTheme,\n PanelGroup,\n PanelSectionId,\n ResetTheme,\n SupportedCssProperties,\n} from './types';\n\n/**\n * Single source of truth for panel section display titles.\n * Titles are resolved from here at render time via `getPanelTitle`,\n * so they never depend on what's persisted in the DB.\n */\nconst PANEL_SECTION_TITLES: Record<PanelSectionId, string> = {\n body: 'Background',\n container: 'Body',\n typography: 'Text',\n h1: 'Title',\n h2: 'Subtitle',\n h3: 'Heading',\n link: 'Link',\n image: 'Image',\n button: 'Button',\n 'code-block': 'Code Block',\n 'inline-code': 'Inline Code',\n};\n\n/**\n * Resolves the display title for a panel group.\n * Uses the `id` lookup when available, falls back to the\n * DB-persisted `title` for backwards compatibility.\n */\nexport function getPanelTitle(group: PanelGroup): string {\n if (group.id && group.id in PANEL_SECTION_TITLES) {\n return PANEL_SECTION_TITLES[group.id];\n }\n return group.title;\n}\n\nconst THEME_BASIC: PanelGroup[] = [\n {\n id: 'body',\n title: 'Background',\n classReference: 'body',\n inputs: [],\n },\n {\n id: 'container',\n title: 'Content',\n classReference: 'container',\n inputs: [\n {\n label: 'Align',\n type: 'select',\n value: 'left',\n options: {\n left: 'Left',\n center: 'Center',\n right: 'Right',\n },\n prop: 'align',\n classReference: 'container',\n },\n {\n label: 'Width',\n type: 'number',\n value: 600,\n unit: 'px',\n prop: 'width',\n classReference: 'container',\n },\n {\n label: 'Padding Left',\n type: 'number',\n value: 0,\n unit: 'px',\n prop: 'paddingLeft',\n classReference: 'container',\n },\n {\n label: 'Padding Right',\n type: 'number',\n value: 0,\n unit: 'px',\n prop: 'paddingRight',\n classReference: 'container',\n },\n ],\n },\n {\n id: 'typography',\n title: 'Text',\n classReference: 'body',\n inputs: [\n {\n label: 'Font size',\n type: 'number',\n value: 14,\n unit: 'px',\n prop: 'fontSize',\n classReference: 'body',\n },\n {\n label: 'Line Height',\n type: 'number',\n value: 155,\n unit: '%',\n prop: 'lineHeight',\n classReference: 'container',\n },\n ],\n },\n {\n id: 'h1',\n title: 'Title',\n category: 'Text',\n classReference: 'h1',\n inputs: [],\n },\n {\n id: 'h2',\n title: 'Subtitle',\n category: 'Text',\n classReference: 'h2',\n inputs: [],\n },\n {\n id: 'h3',\n title: 'Heading',\n category: 'Text',\n classReference: 'h3',\n inputs: [],\n },\n {\n id: 'link',\n title: 'Link',\n classReference: 'link',\n inputs: [\n {\n label: 'Color',\n type: 'color',\n value: '#0670DB',\n prop: 'color',\n classReference: 'link',\n },\n {\n label: 'Decoration',\n type: 'select',\n value: 'underline',\n prop: 'textDecoration',\n options: {\n underline: 'Underline',\n none: 'None',\n },\n classReference: 'link',\n },\n ],\n },\n {\n id: 'image',\n title: 'Image',\n classReference: 'image',\n inputs: [\n {\n label: 'Border radius',\n type: 'number',\n value: 8,\n unit: 'px',\n prop: 'borderRadius',\n classReference: 'image',\n },\n ],\n },\n {\n id: 'button',\n title: 'Button',\n classReference: 'button',\n inputs: [\n {\n label: 'Background',\n type: 'color',\n value: '#000000',\n prop: 'backgroundColor',\n classReference: 'button',\n },\n {\n label: 'Text color',\n type: 'color',\n value: '#ffffff',\n prop: 'color',\n classReference: 'button',\n },\n {\n label: 'Radius',\n type: 'number',\n value: 4,\n unit: 'px',\n prop: 'borderRadius',\n classReference: 'button',\n },\n {\n label: 'Padding Top',\n type: 'number',\n value: 7,\n unit: 'px',\n prop: 'paddingTop',\n classReference: 'button',\n },\n {\n label: 'Padding Right',\n type: 'number',\n value: 12,\n unit: 'px',\n prop: 'paddingRight',\n classReference: 'button',\n },\n {\n label: 'Padding Bottom',\n type: 'number',\n value: 7,\n unit: 'px',\n prop: 'paddingBottom',\n classReference: 'button',\n },\n {\n label: 'Padding Left',\n type: 'number',\n value: 12,\n unit: 'px',\n prop: 'paddingLeft',\n classReference: 'button',\n },\n ],\n },\n {\n id: 'code-block',\n title: 'Code Block',\n classReference: 'codeBlock',\n inputs: [\n {\n label: 'Border Radius',\n type: 'number',\n value: 4,\n unit: 'px',\n prop: 'borderRadius',\n classReference: 'codeBlock',\n },\n {\n label: 'Padding Top',\n type: 'number',\n value: 12,\n unit: 'px',\n prop: 'paddingTop',\n classReference: 'codeBlock',\n },\n {\n label: 'Padding Bottom',\n type: 'number',\n value: 12,\n unit: 'px',\n prop: 'paddingBottom',\n classReference: 'codeBlock',\n },\n {\n label: 'Padding Left',\n type: 'number',\n value: 16,\n unit: 'px',\n prop: 'paddingLeft',\n classReference: 'codeBlock',\n },\n {\n label: 'Padding Right',\n type: 'number',\n value: 16,\n unit: 'px',\n prop: 'paddingRight',\n classReference: 'codeBlock',\n },\n ],\n },\n {\n id: 'inline-code',\n title: 'Inline Code',\n classReference: 'inlineCode',\n inputs: [\n {\n label: 'Background',\n type: 'color',\n value: '#e5e7eb',\n prop: 'backgroundColor',\n classReference: 'inlineCode',\n },\n {\n label: 'Text color',\n type: 'color',\n value: '#1e293b',\n prop: 'color',\n classReference: 'inlineCode',\n },\n {\n label: 'Radius',\n type: 'number',\n value: 4,\n unit: 'px',\n prop: 'borderRadius',\n classReference: 'inlineCode',\n },\n ],\n },\n];\n\nconst THEME_MINIMAL = THEME_BASIC.map((item) => ({ ...item, inputs: [] }));\n\nconst RESET_BASIC: ResetTheme = {\n reset: {\n margin: '0',\n padding: '0',\n },\n body: {\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\",\n fontSize: '14px',\n minHeight: '100%',\n lineHeight: '155%',\n },\n container: {},\n h1: {\n fontSize: '2.25em',\n lineHeight: '1.44em',\n paddingTop: '0.389em',\n fontWeight: 600,\n },\n h2: {\n fontSize: '1.8em',\n lineHeight: '1.44em',\n paddingTop: '0.389em',\n fontWeight: 600,\n },\n h3: {\n fontSize: '1.4em',\n lineHeight: '1.08em',\n paddingTop: '0.389em',\n fontWeight: 600,\n },\n paragraph: {\n fontSize: '1em',\n paddingTop: '0.5em',\n paddingBottom: '0.5em',\n },\n list: {\n paddingLeft: '1.1em',\n paddingBottom: '1em',\n },\n nestedList: {\n paddingLeft: '1.1em',\n paddingBottom: '0',\n },\n listItem: {\n marginLeft: '1em',\n marginBottom: '0.3em',\n marginTop: '0.3em',\n },\n listParagraph: { padding: '0', margin: '0' },\n blockquote: {\n borderLeft: '3px solid #acb3be',\n color: '#7e8a9a',\n marginLeft: 0,\n paddingLeft: '0.8em',\n fontSize: '1.1em',\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\",\n },\n link: { textDecoration: 'underline' },\n footer: {\n fontSize: '0.8em',\n },\n hr: {\n paddingBottom: '1em',\n borderWidth: '2px',\n },\n image: {\n maxWidth: '100%',\n },\n button: {\n lineHeight: '100%',\n display: 'inline-block',\n },\n inlineCode: {\n paddingTop: '0.25em',\n paddingBottom: '0.25em',\n paddingLeft: '0.4em',\n paddingRight: '0.4em',\n background: '#e5e7eb',\n color: '#1e293b',\n borderRadius: '4px',\n },\n codeBlock: {\n fontFamily: 'monospace',\n fontWeight: '500',\n fontSize: '.92em',\n },\n codeTag: {\n lineHeight: '130%',\n fontFamily: 'monospace',\n fontSize: '.92em',\n },\n section: {\n padding: '10px 20px 10px 20px',\n boxSizing: 'border-box' as const,\n },\n};\n\nconst RESET_MINIMAL: ResetTheme = {\n ...Object.keys(RESET_BASIC).reduce<ResetTheme>((acc, key) => {\n acc[key as keyof ResetTheme] = {};\n return acc;\n }, {} as ResetTheme),\n reset: RESET_BASIC.reset,\n};\n\nexport const RESET_THEMES: Record<EditorTheme, ResetTheme> = {\n basic: RESET_BASIC,\n minimal: RESET_MINIMAL,\n};\n\nexport function resolveResetValue(\n value: string | number | undefined,\n targetUnit: 'px' | '%',\n bodyFontSizePx: number,\n): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const str = String(value);\n const num = Number.parseFloat(str);\n if (Number.isNaN(num)) {\n return undefined;\n }\n if (str.endsWith('em')) {\n return targetUnit === 'px' ? Math.floor(num * bodyFontSizePx) : num * 100;\n }\n return num;\n}\n\nexport const EDITOR_THEMES: Record<EditorTheme, PanelGroup[]> = {\n minimal: THEME_MINIMAL,\n basic: THEME_BASIC,\n};\n\nexport function getThemeBodyFontSizePx(theme: EditorTheme): number {\n for (const group of EDITOR_THEMES[theme]) {\n if (group.classReference !== 'body') {\n continue;\n }\n for (const input of group.inputs) {\n if (input.prop === 'fontSize' && typeof input.value === 'number') {\n return input.value;\n }\n }\n }\n return 14;\n}\n\n/**\n * Use to make the preview nicer once the theme might miss some\n * important properties to make layout accurate\n */\nexport const DEFAULT_INBOX_FONT_SIZE_PX = 14;\nexport const INBOX_EMAIL_DEFAULTS: Partial<ResetTheme> = {\n body: {\n color: '#000000',\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\",\n fontSize: `${DEFAULT_INBOX_FONT_SIZE_PX}px`,\n lineHeight: '155%',\n },\n container: {\n width: 600,\n },\n};\n\nexport const SUPPORTED_CSS_PROPERTIES: SupportedCssProperties = {\n align: {\n label: 'Align',\n type: 'select',\n options: {\n left: 'Left',\n center: 'Center',\n right: 'Right',\n },\n defaultValue: 'left',\n category: 'layout',\n },\n backgroundColor: {\n label: 'Background',\n type: 'color',\n excludeNodes: ['image', 'youtube'],\n defaultValue: '#ffffff',\n category: 'appearance',\n },\n color: {\n label: 'Text color',\n type: 'color',\n excludeNodes: ['image', 'youtube'],\n defaultValue: '#000000',\n category: 'typography',\n },\n fontSize: {\n label: 'Font size',\n type: 'number',\n unit: 'px',\n excludeNodes: ['image', 'youtube'],\n defaultValue: 14,\n category: 'typography',\n },\n fontWeight: {\n label: 'Font weight',\n type: 'select',\n options: {\n 300: 'Light',\n 400: 'Normal',\n 600: 'Semi Bold',\n 700: 'Bold',\n 800: 'Extra Bold',\n },\n excludeNodes: ['image', 'youtube'],\n defaultValue: 400,\n category: 'typography',\n },\n letterSpacing: {\n label: 'Letter spacing',\n type: 'number',\n unit: 'px',\n excludeNodes: ['image', 'youtube'],\n defaultValue: 0,\n category: 'typography',\n },\n lineHeight: {\n label: 'Line height',\n type: 'number',\n unit: '%',\n defaultValue: 155,\n category: 'typography',\n },\n textDecoration: {\n label: 'Text decoration',\n type: 'select',\n options: {\n none: 'None',\n underline: 'Underline',\n 'line-through': 'Line-through',\n },\n defaultValue: 'none',\n category: 'typography',\n },\n borderRadius: {\n label: 'Border Radius',\n type: 'number',\n unit: 'px',\n defaultValue: 8,\n category: 'appearance',\n },\n borderTopLeftRadius: {\n label: 'Border Radius (Top-Left)',\n type: 'number',\n unit: 'px',\n defaultValue: 8,\n category: 'appearance',\n },\n borderTopRightRadius: {\n label: 'Border Radius (Top-Right)',\n type: 'number',\n unit: 'px',\n defaultValue: 8,\n category: 'appearance',\n },\n borderBottomLeftRadius: {\n label: 'Border Radius (Bottom-Left)',\n type: 'number',\n unit: 'px',\n defaultValue: 8,\n category: 'appearance',\n },\n borderBottomRightRadius: {\n label: 'Border Radius (Bottom-Right)',\n type: 'number',\n unit: 'px',\n defaultValue: 8,\n category: 'appearance',\n },\n borderWidth: {\n label: 'Border Width',\n type: 'number',\n unit: 'px',\n defaultValue: 1,\n category: 'appearance',\n },\n borderTopWidth: {\n label: 'Border Top Width',\n type: 'number',\n unit: 'px',\n defaultValue: 1,\n category: 'appearance',\n },\n borderRightWidth: {\n label: 'Border Right Width',\n type: 'number',\n unit: 'px',\n defaultValue: 1,\n category: 'appearance',\n },\n borderBottomWidth: {\n label: 'Border Bottom Width',\n type: 'number',\n unit: 'px',\n defaultValue: 1,\n category: 'appearance',\n },\n borderLeftWidth: {\n label: 'Border Left Width',\n type: 'number',\n unit: 'px',\n defaultValue: 1,\n category: 'appearance',\n },\n borderStyle: {\n label: 'Border Style',\n type: 'select',\n options: {\n solid: 'Solid',\n dashed: 'Dashed',\n dotted: 'Dotted',\n },\n defaultValue: 'solid',\n category: 'appearance',\n },\n borderTopStyle: {\n label: 'Border Top Style',\n type: 'select',\n options: {\n solid: 'Solid',\n dashed: 'Dashed',\n dotted: 'Dotted',\n },\n defaultValue: 'solid',\n category: 'appearance',\n },\n borderRightStyle: {\n label: 'Border Right Style',\n type: 'select',\n options: {\n solid: 'Solid',\n dashed: 'Dashed',\n dotted: 'Dotted',\n },\n defaultValue: 'solid',\n category: 'appearance',\n },\n borderBottomStyle: {\n label: 'Border Bottom Style',\n type: 'select',\n options: {\n solid: 'Solid',\n dashed: 'Dashed',\n dotted: 'Dotted',\n },\n defaultValue: 'solid',\n category: 'appearance',\n },\n borderLeftStyle: {\n label: 'Border Left Style',\n type: 'select',\n options: {\n solid: 'Solid',\n dashed: 'Dashed',\n dotted: 'Dotted',\n },\n defaultValue: 'solid',\n category: 'appearance',\n },\n borderColor: {\n label: 'Border Color',\n type: 'color',\n defaultValue: '#000000',\n category: 'appearance',\n },\n borderTopColor: {\n label: 'Border Top Color',\n type: 'color',\n defaultValue: '#000000',\n category: 'appearance',\n },\n borderRightColor: {\n label: 'Border Right Color',\n type: 'color',\n defaultValue: '#000000',\n category: 'appearance',\n },\n borderBottomColor: {\n label: 'Border Bottom Color',\n type: 'color',\n defaultValue: '#000000',\n category: 'appearance',\n },\n borderLeftColor: {\n label: 'Border Left Color',\n type: 'color',\n defaultValue: '#000000',\n category: 'appearance',\n },\n padding: {\n label: 'Padding',\n type: 'number',\n unit: 'px',\n defaultValue: 8,\n category: 'layout',\n },\n paddingTop: {\n label: 'Padding Top',\n type: 'number',\n unit: 'px',\n defaultValue: 8,\n category: 'layout',\n },\n paddingLeft: {\n label: 'Padding Left',\n type: 'number',\n unit: 'px',\n defaultValue: 8,\n category: 'layout',\n },\n paddingBottom: {\n label: 'Padding Bottom',\n type: 'number',\n unit: 'px',\n defaultValue: 8,\n category: 'layout',\n },\n paddingRight: {\n label: 'Padding Right',\n type: 'number',\n unit: 'px',\n defaultValue: 8,\n category: 'layout',\n },\n width: {\n label: 'Width',\n type: 'number',\n unit: 'px',\n defaultValue: 600,\n category: 'layout',\n },\n height: {\n label: 'Height',\n type: 'number',\n unit: 'px',\n defaultValue: 400,\n category: 'layout',\n },\n};\n","import { EDITOR_THEMES } from './themes';\nimport type {\n EditorTheme,\n KnownThemeComponents,\n PanelGroup,\n PanelSectionId,\n} from './types';\n\nconst PANEL_SECTION_IDS = new Set<PanelSectionId>([\n 'body',\n 'container',\n 'typography',\n 'link',\n 'image',\n 'button',\n 'code-block',\n 'inline-code',\n]);\n\nconst PANEL_SECTION_IDS_BY_TITLE: Record<string, PanelSectionId> = {\n background: 'body',\n body: 'body',\n content: 'container',\n container: 'container',\n typography: 'typography',\n link: 'link',\n image: 'image',\n button: 'button',\n 'code block': 'code-block',\n 'inline code': 'inline-code',\n};\n\nconst PANEL_SECTION_IDS_BY_CLASS_REFERENCE: Partial<\n Record<KnownThemeComponents, PanelSectionId>\n> = {\n container: 'container',\n link: 'link',\n image: 'image',\n button: 'button',\n codeBlock: 'code-block',\n inlineCode: 'inline-code',\n};\n\nfunction isPanelSectionId(value: unknown): value is PanelSectionId {\n return (\n typeof value === 'string' && PANEL_SECTION_IDS.has(value as PanelSectionId)\n );\n}\n\nfunction normalizeTitle(title: string | undefined): string {\n return title?.trim().toLowerCase().replace(/\\s+/g, ' ') ?? '';\n}\n\nfunction resolvePanelSectionId(group: PanelGroup): PanelSectionId | null {\n if (isPanelSectionId(group.id)) {\n return group.id;\n }\n\n const normalizedTitle = normalizeTitle(group.title);\n\n if (group.classReference === 'body') {\n if (normalizedTitle === 'typography') {\n return 'typography';\n }\n\n return 'body';\n }\n\n if (\n group.classReference &&\n PANEL_SECTION_IDS_BY_CLASS_REFERENCE[group.classReference]\n ) {\n return PANEL_SECTION_IDS_BY_CLASS_REFERENCE[group.classReference] ?? null;\n }\n\n return PANEL_SECTION_IDS_BY_TITLE[normalizedTitle] ?? null;\n}\n\nfunction normalizePanelInputs(\n inputs: PanelGroup['inputs'],\n defaultInputs: PanelGroup['inputs'],\n fallbackClassReference?: KnownThemeComponents,\n): PanelGroup['inputs'] {\n if (!Array.isArray(inputs)) {\n return [];\n }\n\n return inputs.map((input) => {\n const defaultInput = defaultInputs.find(\n (candidate) => candidate.prop === input.prop,\n );\n\n return {\n ...defaultInput,\n ...input,\n classReference:\n input.classReference ??\n defaultInput?.classReference ??\n fallbackClassReference,\n };\n });\n}\n\nexport function inferThemeFromPanelStyles(\n panelStyles: PanelGroup[] | null | undefined,\n): EditorTheme | null {\n if (!Array.isArray(panelStyles) || panelStyles.length === 0) {\n return null;\n }\n\n let finalTheme: EditorTheme | null = null;\n for (const group of panelStyles) {\n if (!Array.isArray(group?.inputs)) {\n finalTheme = null;\n break;\n }\n\n if (group.inputs.length !== 0) {\n finalTheme = 'basic';\n break;\n }\n\n finalTheme = 'minimal';\n }\n\n return finalTheme;\n}\n\nexport function normalizeThemePanelStyles(\n theme: EditorTheme,\n panelStyles: PanelGroup[] | null | undefined,\n): PanelGroup[] | null {\n if (!Array.isArray(panelStyles)) {\n return null;\n }\n\n return panelStyles.map((group) => {\n const panelId = resolvePanelSectionId(group);\n\n if (!panelId) {\n return group;\n }\n\n const defaultGroup = EDITOR_THEMES[theme].find(\n (candidate) => candidate.id === panelId,\n );\n\n if (!defaultGroup) {\n return group;\n }\n\n return {\n ...group,\n id: panelId,\n title: defaultGroup.title,\n classReference: defaultGroup.classReference,\n inputs: normalizePanelInputs(\n group.inputs,\n defaultGroup.inputs,\n defaultGroup.classReference,\n ),\n };\n });\n}\n","import { Body, Head, Html, Preview, Section } from '@react-email/components';\nimport type { Editor, JSONContent } from '@tiptap/core';\nimport { Extension } from '@tiptap/core';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport { useEditorState } from '@tiptap/react';\nimport type * as React from 'react';\nimport type { SerializerPlugin } from '../../core/serializer/serializer-plugin';\nimport { getGlobalContent } from '../../extensions/global-content';\nimport {\n injectGlobalPlainCss,\n injectThemeCss,\n mergeCssJs,\n transformToCssJs,\n} from './css-transforms';\nimport {\n inferThemeFromPanelStyles,\n normalizeThemePanelStyles,\n} from './normalization';\nimport {\n DEFAULT_INBOX_FONT_SIZE_PX,\n EDITOR_THEMES,\n RESET_THEMES,\n} from './themes';\nimport type {\n CssJs,\n EditorTheme,\n KnownThemeComponents,\n PanelGroup,\n} from './types';\n\n/**\n * Maps a document node (type + attrs) to the theme component key used for style lookup.\n * Centralizes all node-type → theme-component knowledge.\n */\nexport function getThemeComponentKey(\n nodeType: string,\n depth: number,\n attrs: Record<string, unknown> = {},\n): KnownThemeComponents | null {\n switch (nodeType) {\n case 'paragraph':\n if (depth > 0) {\n return 'listParagraph';\n }\n return 'paragraph';\n case 'heading': {\n const level = attrs.level as number | undefined;\n return `h${level ?? 1}` as KnownThemeComponents;\n }\n case 'blockquote':\n return 'blockquote';\n case 'button':\n return 'button';\n case 'section':\n return 'section';\n case 'footer':\n return 'footer';\n case 'image':\n return 'image';\n case 'youtube':\n case 'twitter':\n return 'image';\n case 'orderedList':\n case 'bulletList':\n if (depth > 0) {\n return 'nestedList';\n }\n return 'list';\n case 'listItem':\n return 'listItem';\n case 'codeBlock':\n return 'codeBlock';\n case 'code':\n return 'inlineCode';\n case 'link':\n return 'link';\n case 'horizontalRule':\n return 'hr';\n default:\n return null;\n }\n}\n\n/**\n * Returns merged theme styles (reset + panel styles) for the given editor.\n * Use when you have editor access and need the full CssJs map.\n */\nexport function getMergedCssJs(\n theme: EditorTheme,\n panelStyles: PanelGroup[] | undefined,\n): CssJs {\n const panels: PanelGroup[] =\n normalizeThemePanelStyles(theme, panelStyles) ?? EDITOR_THEMES[theme];\n const parsed = transformToCssJs(panels, DEFAULT_INBOX_FONT_SIZE_PX);\n const merged = mergeCssJs(RESET_THEMES[theme], parsed);\n\n return merged;\n}\n\n/**\n * Returns resolved React.CSSProperties for a node when you already have merged CssJs\n * (e.g. in the serializer where there is no editor). Centralizes which theme keys\n * apply to which node type.\n */\nconst RESET_NODE_TYPES = new Set([\n 'body',\n 'bulletList',\n 'button',\n 'columns',\n 'div',\n 'h1',\n 'h2',\n 'h3',\n 'list',\n 'listItem',\n 'listParagraph',\n 'nestedList',\n 'orderedList',\n 'table',\n 'paragraph',\n 'tableCell',\n 'tableHeader',\n 'tableRow',\n 'youtube',\n]);\n\nexport function getResolvedNodeStyles(\n node: JSONContent,\n depth: number,\n mergedCssJs: CssJs,\n): React.CSSProperties {\n const key = getThemeComponentKey(node.type ?? '', depth, node.attrs ?? {});\n if (!key) {\n if (RESET_NODE_TYPES.has(node.type ?? '')) {\n return mergedCssJs.reset ?? {};\n }\n return {};\n }\n const component = mergedCssJs[key] ?? {};\n const shouldReset =\n RESET_NODE_TYPES.has(key) || RESET_NODE_TYPES.has(node.type ?? '');\n if (shouldReset) {\n const reset = mergedCssJs.reset ?? {};\n return { ...reset, ...component };\n }\n return { ...component };\n}\n\nexport function stylesToCss(\n styles: PanelGroup[],\n theme: EditorTheme,\n): Record<KnownThemeComponents, React.CSSProperties> {\n const parsed = transformToCssJs(\n normalizeThemePanelStyles(theme, styles) ?? EDITOR_THEMES[theme],\n DEFAULT_INBOX_FONT_SIZE_PX,\n );\n return mergeCssJs(RESET_THEMES[theme], parsed);\n}\n\nfunction getEmailTheming(editor: Editor) {\n const theme = getEmailTheme(editor);\n const normalizedStyles =\n normalizeThemePanelStyles(theme, getEmailStyles(editor)) ??\n EDITOR_THEMES[theme];\n\n return {\n styles: normalizedStyles,\n theme,\n css: getEmailCss(editor),\n };\n}\n\nexport function useEmailTheming(editor: Editor | null) {\n return useEditorState({\n editor,\n selector({ editor: ed }) {\n if (!ed) {\n return null;\n }\n return getEmailTheming(ed);\n },\n });\n}\n\nfunction getEmailStyles(editor: Editor) {\n return getGlobalContent('styles', editor) as PanelGroup[] | null;\n}\n\n/**\n * Sets the global panel styles on the editor document.\n * Persists into the `GlobalContent` node under the `'styles'` key.\n */\nexport function setGlobalStyles(editor: Editor, styles: PanelGroup[]): boolean {\n return editor.commands.setGlobalContent('styles', styles);\n}\n\n/**\n * Sets the current email theme on the editor document.\n * Persists into the `GlobalContent` node under the `'theme'` key.\n */\nexport function setCurrentTheme(editor: Editor, theme: EditorTheme): boolean {\n return editor.commands.setGlobalContent('theme', theme);\n}\n\n/**\n * Sets the global CSS string injected into the email `<head>`.\n * Persists into the `GlobalContent` node under the `'css'` key.\n */\nexport function setGlobalCssInjected(editor: Editor, css: string): boolean {\n return editor.commands.setGlobalContent('css', css);\n}\n\nfunction getEmailTheme(editor: Editor) {\n const extensionTheme = (\n editor.extensionManager.extensions.find(\n (extension) => extension.name === 'theming',\n ) as { options?: { theme?: EditorTheme } }\n )?.options?.theme;\n if (extensionTheme === 'basic' || extensionTheme === 'minimal') {\n return extensionTheme;\n }\n\n const globalTheme = getGlobalContent('theme', editor) as EditorTheme | null;\n if (globalTheme === 'basic' || globalTheme === 'minimal') {\n return globalTheme;\n }\n\n const inferredTheme = inferThemeFromPanelStyles(getEmailStyles(editor));\n if (inferredTheme) {\n return inferredTheme;\n }\n\n return 'basic';\n}\n\nfunction getEmailCss(editor: Editor) {\n return getGlobalContent('css', editor) as string | null;\n}\n\nexport const EmailTheming = Extension.create<{\n theme?: EditorTheme;\n serializerPlugin: SerializerPlugin;\n}>({\n name: 'theming',\n\n addOptions() {\n return {\n theme: undefined as EditorTheme | undefined,\n serializerPlugin: {\n getNodeStyles(\n node: JSONContent,\n depth: number,\n editor: Editor,\n ): React.CSSProperties {\n const theming = getEmailTheming(editor);\n\n return getResolvedNodeStyles(\n node,\n depth,\n getMergedCssJs(theming.theme, theming.styles),\n );\n },\n BaseTemplate({\n previewText,\n children,\n editor,\n }: {\n previewText: string | null;\n children: React.ReactNode;\n editor: Editor;\n }) {\n const { css: globalCss, styles, theme } = getEmailTheming(editor);\n const mergedStyles = getMergedCssJs(theme, styles);\n\n return (\n <Html>\n <Head>\n <meta content=\"width=device-width\" name=\"viewport\" />\n <meta content=\"IE=edge\" httpEquiv=\"X-UA-Compatible\" />\n <meta name=\"x-apple-disable-message-reformatting\" />\n <meta\n content=\"telephone=no,address=no,email=no,date=no,url=no\"\n name=\"format-detection\"\n />\n\n {globalCss && <style>{globalCss}</style>}\n </Head>\n {previewText && previewText !== '' && (\n <Preview>{previewText}</Preview>\n )}\n\n <Body>\n <Section width=\"100%\" align=\"center\" style={mergedStyles.body}>\n <Section\n align={mergedStyles.container?.align}\n style={{\n ...mergedStyles.container,\n width: '100%',\n maxWidth: mergedStyles.container?.width,\n fontFamily: mergedStyles.body?.fontFamily,\n }}\n >\n {children}\n </Section>\n </Section>\n </Body>\n </Html>\n );\n },\n } satisfies SerializerPlugin,\n };\n },\n\n addProseMirrorPlugins() {\n const { editor } = this;\n const scopeId = `tiptap-theme-${Math.random().toString(36).slice(2, 10)}`;\n const scopeAttribute = 'data-editor-theme-scope';\n const scopeSelector = `.tiptap.ProseMirror[${scopeAttribute}=\"${scopeId}\"]`;\n const themeStyleId = `${scopeId}-theme`;\n const globalStyleId = `${scopeId}-global`;\n\n return [\n new Plugin({\n key: new PluginKey('themingStyleInjector'),\n view(view) {\n let prevStyles: PanelGroup[] | null = null;\n let prevTheme: EditorTheme | null = null;\n let prevCss: string | null = null;\n\n view.dom.setAttribute(scopeAttribute, scopeId);\n\n const sync = () => {\n const theme = getEmailTheme(editor);\n const styles = getEmailStyles(editor);\n const resolvedStyles = styles ?? EDITOR_THEMES[theme];\n const css = getEmailCss(editor);\n\n if (styles !== prevStyles || theme !== prevTheme) {\n prevStyles = styles as PanelGroup[] | null;\n prevTheme = theme;\n const mergedCssJs = getMergedCssJs(theme, resolvedStyles);\n injectThemeCss(mergedCssJs, {\n scopeSelector,\n styleId: themeStyleId,\n });\n }\n\n if (css !== prevCss) {\n prevCss = css;\n injectGlobalPlainCss(css, {\n scopeSelector,\n styleId: globalStyleId,\n });\n }\n };\n\n sync();\n\n return {\n update: sync,\n destroy() {\n document.getElementById(themeStyleId)?.remove();\n document.getElementById(globalStyleId)?.remove();\n view.dom.removeAttribute(scopeAttribute);\n },\n };\n },\n }),\n ];\n },\n});\n"],"mappings":"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AAQ,CACN;GACE,OAAO;GACP,MAAM;GACN,OAAO;GACP,MAAM;GACN,MAAM;GACN,gBAAgB;GACjB,EACD;GACE,OAAO;GACP,MAAM;GACN,OAAO;GACP,MAAM;GACN,MAAM;GACN,gBAAgB;GACjB,CACF;EACF;CACD;EACE,IAAI;EACJ,OAAO;EACP,UAAU;EACV,gBAAgB;EAChB,QAAQ,EAAE;EACX;CACD;EACE,IAAI;EACJ,OAAO;EACP,UAAU;EACV,gBAAgB;EAChB,QAAQ,EAAE;EACX;CACD;EACE,IAAI;EACJ,OAAO;EACP,UAAU;EACV,gBAAgB;EAChB,QAAQ,EAAE;EACX;CACD;EACE,IAAI;EACJ,OAAO;EACP,gBAAgB;EAChB,QAAQ,CACN;GACE,OAAO;GACP,MAAM;GACN,OAAO;GACP,MAAM;GACN,gBAAgB;GACjB,EACD;GACE,OAAO;GACP,MAAM;GACN,OAAO;GACP,MAAM;GACN,SAAS;IACP,WAAW;IACX,MAAM;IACP;GACD,gBAAgB;GACjB,CACF;EACF;CACD;EACE,IAAI;EACJ,OAAO;EACP,gBAAgB;EAChB,QAAQ,CACN;GACE,OAAO;GACP,MAAM;GACN,OAAO;GACP,MAAM;GACN,MAAM;GACN,gBAAgB;GACjB,CACF;EACF;CACD;EACE,IAAI;EACJ,OAAO;EACP,gBAAgB;EAChB,QAAQ;GACN;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,gBAAgB;IACjB;GACD;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,gBAAgB;IACjB;GACD;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,gBAAgB;IACjB;GACD;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,gBAAgB;IACjB;GACD;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,gBAAgB;IACjB;GACD;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,gBAAgB;IACjB;GACD;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,gBAAgB;IACjB;GACF;EACF;CACD;EACE,IAAI;EACJ,OAAO;EACP,gBAAgB;EAChB,QAAQ;GACN;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,gBAAgB;IACjB;GACD;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,gBAAgB;IACjB;GACD;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,gBAAgB;IACjB;GACD;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,gBAAgB;IACjB;GACD;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,gBAAgB;IACjB;GACF;EACF;CACD;EACE,IAAI;EACJ,OAAO;EACP,gBAAgB;EAChB,QAAQ;GACN;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,gBAAgB;IACjB;GACD;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,gBAAgB;IACjB;GACD;IACE,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,gBAAgB;IACjB;GACF;EACF;CACF;AAED,MAAM,gBAAgB,YAAY,KAAK,UAAU;CAAE,GAAG;CAAM,QAAQ,EAAE;CAAE,EAAE;AAE1E,MAAM,cAA0B;CAC9B,OAAO;EACL,QAAQ;EACR,SAAS;EACV;CACD,MAAM;EACJ,YACE;EACF,UAAU;EACV,WAAW;EACX,YAAY;EACb;CACD,WAAW,EAAE;CACb,IAAI;EACF,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY;EACb;CACD,IAAI;EACF,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY;EACb;CACD,IAAI;EACF,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY;EACb;CACD,WAAW;EACT,UAAU;EACV,YAAY;EACZ,eAAe;EAChB;CACD,MAAM;EACJ,aAAa;EACb,eAAe;EAChB;CACD,YAAY;EACV,aAAa;EACb,eAAe;EAChB;CACD,UAAU;EACR,YAAY;EACZ,cAAc;EACd,WAAW;EACZ;CACD,eAAe;EAAE,SAAS;EAAK,QAAQ;EAAK;CAC5C,YAAY;EACV,YAAY;EACZ,OAAO;EACP,YAAY;EACZ,aAAa;EACb,UAAU;EACV,YACE;EACH;CACD,MAAM,EAAE,gBAAgB,aAAa;CACrC,QAAQ,EACN,UAAU,SACX;CACD,IAAI;EACF,eAAe;EACf,aAAa;EACd;CACD,OAAO,EACL,UAAU,QACX;CACD,QAAQ;EACN,YAAY;EACZ,SAAS;EACV;CACD,YAAY;EACV,YAAY;EACZ,eAAe;EACf,aAAa;EACb,cAAc;EACd,YAAY;EACZ,OAAO;EACP,cAAc;EACf;CACD,WAAW;EACT,YAAY;EACZ,YAAY;EACZ,UAAU;EACX;CACD,SAAS;EACP,YAAY;EACZ,YAAY;EACZ,UAAU;EACX;CACD,SAAS;EACP,SAAS;EACT,WAAW;EACZ;CACF;AAED,MAAM,gBAA4B;CAChC,GAAG,OAAO,KAAK,YAAY,CAAC,QAAoB,KAAK,QAAQ;AAC3D,MAAI,OAA2B,EAAE;AACjC,SAAO;IACN,EAAE,CAAe;CACpB,OAAO,YAAY;CACpB;AAED,MAAa,eAAgD;CAC3D,OAAO;CACP,SAAS;CACV;AAED,SAAgB,kBACd,OACA,YACA,gBACoB;AACpB,KAAI,UAAU,OACZ;CAEF,MAAM,MAAM,OAAO,MAAM;CACzB,MAAM,MAAM,OAAO,WAAW,IAAI;AAClC,KAAI,OAAO,MAAM,IAAI,CACnB;AAEF,KAAI,IAAI,SAAS,KAAK,CACpB,QAAO,eAAe,OAAO,KAAK,MAAM,MAAM,eAAe,GAAG,MAAM;AAExE,QAAO;;AAGT,MAAa,gBAAmD;CAC9D,SAAS;CACT,OAAO;CACR;AAED,SAAgB,uBAAuB,OAA4B;AACjE,MAAK,MAAM,SAAS,cAAc,QAAQ;AACxC,MAAI,MAAM,mBAAmB,OAC3B;AAEF,OAAK,MAAM,SAAS,MAAM,OACxB,KAAI,MAAM,SAAS,cAAc,OAAO,MAAM,UAAU,SACtD,QAAO,MAAM;;AAInB,QAAO;;;;;;AAOT,MAAa,6BAA6B;AAC1C,MAAa,uBAA4C;CACvD,MAAM;EACJ,OAAO;EACP,YACE;EACF,UAAU,GAAG,2BAA2B;EACxC,YAAY;EACb;CACD,WAAW,EACT,OAAO,KACR;CACF;AAED,MAAa,2BAAmD;CAC9D,OAAO;EACL,OAAO;EACP,MAAM;EACN,SAAS;GACP,MAAM;GACN,QAAQ;GACR,OAAO;GACR;EACD,cAAc;EACd,UAAU;EACX;CACD,iBAAiB;EACf,OAAO;EACP,MAAM;EACN,cAAc,CAAC,SAAS,UAAU;EAClC,cAAc;EACd,UAAU;EACX;CACD,OAAO;EACL,OAAO;EACP,MAAM;EACN,cAAc,CAAC,SAAS,UAAU;EAClC,cAAc;EACd,UAAU;EACX;CACD,UAAU;EACR,OAAO;EACP,MAAM;EACN,MAAM;EACN,cAAc,CAAC,SAAS,UAAU;EAClC,cAAc;EACd,UAAU;EACX;CACD,YAAY;EACV,OAAO;EACP,MAAM;EACN,SAAS;GACP,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACN;EACD,cAAc,CAAC,SAAS,UAAU;EAClC,cAAc;EACd,UAAU;EACX;CACD,eAAe;EACb,OAAO;EACP,MAAM;EACN,MAAM;EACN,cAAc,CAAC,SAAS,UAAU;EAClC,cAAc;EACd,UAAU;EACX;CACD,YAAY;EACV,OAAO;EACP,MAAM;EACN,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,gBAAgB;EACd,OAAO;EACP,MAAM;EACN,SAAS;GACP,MAAM;GACN,WAAW;GACX,gBAAgB;GACjB;EACD,cAAc;EACd,UAAU;EACX;CACD,cAAc;EACZ,OAAO;EACP,MAAM;EACN,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,qBAAqB;EACnB,OAAO;EACP,MAAM;EACN,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,sBAAsB;EACpB,OAAO;EACP,MAAM;EACN,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,wBAAwB;EACtB,OAAO;EACP,MAAM;EACN,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,yBAAyB;EACvB,OAAO;EACP,MAAM;EACN,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,aAAa;EACX,OAAO;EACP,MAAM;EACN,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,gBAAgB;EACd,OAAO;EACP,MAAM;EACN,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,kBAAkB;EAChB,OAAO;EACP,MAAM;EACN,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,mBAAmB;EACjB,OAAO;EACP,MAAM;EACN,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,iBAAiB;EACf,OAAO;EACP,MAAM;EACN,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,aAAa;EACX,OAAO;EACP,MAAM;EACN,SAAS;GACP,OAAO;GACP,QAAQ;GACR,QAAQ;GACT;EACD,cAAc;EACd,UAAU;EACX;CACD,gBAAgB;EACd,OAAO;EACP,MAAM;EACN,SAAS;GACP,OAAO;GACP,QAAQ;GACR,QAAQ;GACT;EACD,cAAc;EACd,UAAU;EACX;CACD,kBAAkB;EAChB,OAAO;EACP,MAAM;EACN,SAAS;GACP,OAAO;GACP,QAAQ;GACR,QAAQ;GACT;EACD,cAAc;EACd,UAAU;EACX;CACD,mBAAmB;EACjB,OAAO;EACP,MAAM;EACN,SAAS;GACP,OAAO;GACP,QAAQ;GACR,QAAQ;GACT;EACD,cAAc;EACd,UAAU;EACX;CACD,iBAAiB;EACf,OAAO;EACP,MAAM;EACN,SAAS;GACP,OAAO;GACP,QAAQ;GACR,QAAQ;GACT;EACD,cAAc;EACd,UAAU;EACX;CACD,aAAa;EACX,OAAO;EACP,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,gBAAgB;EACd,OAAO;EACP,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,kBAAkB;EAChB,OAAO;EACP,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,mBAAmB;EACjB,OAAO;EACP,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,iBAAiB;EACf,OAAO;EACP,MAAM;EACN,cAAc;EACd,UAAU;EACX;CACD,SAAS;EACP,OAAO;EACP,MAAM;EACN,MAAM;EACN,c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"}
@@ -44,7 +44,7 @@ function injectThemeCss(styles, options = {}) {
44
44
  const prefix = ".node-";
45
45
  const styleId = options.styleId ?? "tiptap-extended-theme-css";
46
46
  const css = Object.entries(styles).reduce((acc, [key, value]) => {
47
- return `${acc}${`${container} ${prefix}${key}`}{${Object.entries(value).reduce((acc$1, [prop, val]) => {
47
+ return `${acc}${key === "body" ? container : `${container} ${prefix}${key}`}{${Object.entries(value).reduce((acc$1, [prop, val]) => {
48
48
  return `${acc$1}${prop.replace(/([A-Z])/g, "-$1").toLowerCase()}:${val};`;
49
49
  }, "")}}`;
50
50
  }, "");
@@ -1088,13 +1088,10 @@ const EmailTheming = _tiptap_core.Extension.create({
1088
1088
  if (styles !== prevStyles || theme !== prevTheme) {
1089
1089
  prevStyles = styles;
1090
1090
  prevTheme = theme;
1091
- const mergedCssJs = getMergedCssJs(theme, resolvedStyles);
1092
- injectThemeCss(mergedCssJs, {
1091
+ injectThemeCss(getMergedCssJs(theme, resolvedStyles), {
1093
1092
  scopeSelector,
1094
1093
  styleId: themeStyleId
1095
1094
  });
1096
- const bodyBg = mergedCssJs.body?.backgroundColor;
1097
- view.dom.style.backgroundColor = typeof bodyBg === "string" ? bodyBg : "";
1098
1095
  }
1099
1096
  if (css !== prevCss) {
1100
1097
  prevCss = css;
@@ -1110,7 +1107,6 @@ const EmailTheming = _tiptap_core.Extension.create({
1110
1107
  destroy() {
1111
1108
  document.getElementById(themeStyleId)?.remove();
1112
1109
  document.getElementById(globalStyleId)?.remove();
1113
- view.dom.style.backgroundColor = "";
1114
1110
  view.dom.removeAttribute(scopeAttribute);
1115
1111
  }
1116
1112
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index-C4KcMQ0R.d.cts","names":[],"sources":["../src/core/event-bus.ts","../src/core/is-document-visually-empty.ts","../src/core/serializer/compose-react-email.tsx","../src/core/serializer/email-mark.ts","../src/core/serializer/email-node.ts","../src/core/use-editor.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index-C4KcMQ0R.d.cts","names":[],"sources":["../src/core/event-bus.ts","../src/core/is-document-visually-empty.ts","../src/core/serializer/compose-react-email.tsx","../src/core/serializer/email-mark.ts","../src/core/serializer/email-node.ts","../src/core/use-editor.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index-CxX7W63O.d.mts","names":[],"sources":["../src/core/event-bus.ts","../src/core/is-document-visually-empty.ts","../src/core/serializer/compose-react-email.tsx","../src/core/serializer/email-mark.ts","../src/core/serializer/email-node.ts","../src/core/use-editor.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index-CxX7W63O.d.mts","names":[],"sources":["../src/core/event-bus.ts","../src/core/is-document-visually-empty.ts","../src/core/serializer/compose-react-email.tsx","../src/core/serializer/email-mark.ts","../src/core/serializer/email-node.ts","../src/core/use-editor.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  const require_event_bus = require('./event-bus-fb8U7hrl.cjs');
2
2
  const require_extensions = require('./extensions-aMMnHcs9.cjs');
3
- const require_extension = require('./extension-B8yvCdun.cjs');
4
- const require_root = require('./root-CNVO39XG.cjs');
3
+ const require_extension = require('./extension-dGpPpEvD.cjs');
4
+ const require_root = require('./root-Gu08xybW.cjs');
5
5
  let _tiptap_extensions = require("@tiptap/extensions");
6
6
  let _tiptap_react = require("@tiptap/react");
7
7
  let react = require("react");
@@ -58,12 +58,12 @@ const EmailEditor = (0, react.forwardRef)(({ content, onChange, onUploadImage, o
58
58
  children: [
59
59
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RefBridge, { editorRef: ref }),
60
60
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_root.BubbleMenuDefault, {
61
- excludeNodes: bubbleMenu?.excludeNodes ?? ["button"],
62
- excludeMarks: bubbleMenu?.excludeMarks ?? ["link"]
61
+ hideWhenActiveNodes: bubbleMenu?.hideWhenActiveNodes ?? ["button"],
62
+ hideWhenActiveMarks: bubbleMenu?.hideWhenActiveMarks ?? ["link"]
63
63
  }),
64
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_root.LinkBubbleMenuDefault, {}),
65
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_root.ButtonBubbleMenuDefault, {}),
66
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_root.ImageBubbleMenuDefault, {}),
64
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_root.BubbleMenuLinkDefault, {}),
65
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_root.BubbleMenuButtonDefault, {}),
66
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_root.BubbleMenuImageDefault, {}),
67
67
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_root.SlashCommandRoot, {})
68
68
  ]
69
69
  }, theme);
package/dist/index.css CHANGED
@@ -145,22 +145,14 @@
145
145
  height: 0.875rem;
146
146
  }
147
147
 
148
- /* Minimal functional styles for LinkBubbleMenu compound components.
149
- * Layout and positioning only - no visual design.
150
- * Import optionally: import '@react-email/editor/styles/link-bubble-menu.css';
151
- */
148
+ /* Button bubble menu */
152
149
 
153
- [data-re-link-bm] {
154
- display: flex;
155
- align-items: center;
156
- }
157
-
158
- [data-re-link-bm-toolbar] {
150
+ [data-re-btn-bm-toolbar] {
159
151
  display: flex;
160
152
  align-items: center;
161
153
  }
162
154
 
163
- [data-re-link-bm-item] {
155
+ [data-re-btn-bm-item] {
164
156
  display: inline-flex;
165
157
  align-items: center;
166
158
  justify-content: center;
@@ -170,17 +162,12 @@
170
162
  padding: 0.375rem;
171
163
  }
172
164
 
173
- [data-re-link-bm-item] svg {
165
+ [data-re-btn-bm-item] svg {
174
166
  width: 0.875rem;
175
167
  height: 0.875rem;
176
168
  }
177
169
 
178
- a[data-re-link-bm-item] {
179
- text-decoration: none;
180
- color: inherit;
181
- }
182
-
183
- [data-re-link-bm-form] {
170
+ [data-re-btn-bm-form] {
184
171
  display: flex;
185
172
  align-items: center;
186
173
  gap: 0.25rem;
@@ -188,7 +175,7 @@ a[data-re-link-bm-item] {
188
175
  padding: 0.25rem;
189
176
  }
190
177
 
191
- [data-re-link-bm-input] {
178
+ [data-re-btn-bm-input] {
192
179
  flex: 1;
193
180
  border: none;
194
181
  outline: none;
@@ -197,8 +184,8 @@ a[data-re-link-bm-item] {
197
184
  background: transparent;
198
185
  }
199
186
 
200
- [data-re-link-bm-apply],
201
- [data-re-link-bm-unlink] {
187
+ [data-re-btn-bm-apply],
188
+ [data-re-btn-bm-unlink] {
202
189
  display: inline-flex;
203
190
  align-items: center;
204
191
  justify-content: center;
@@ -208,28 +195,20 @@ a[data-re-link-bm-item] {
208
195
  padding: 0.25rem;
209
196
  }
210
197
 
211
- [data-re-link-bm-apply] svg,
212
- [data-re-link-bm-unlink] svg {
198
+ [data-re-btn-bm-apply] svg,
199
+ [data-re-btn-bm-unlink] svg {
213
200
  width: 0.875rem;
214
201
  height: 0.875rem;
215
202
  }
216
203
 
217
- /* Minimal functional styles for ButtonBubbleMenu compound components.
218
- * Layout and positioning only - no visual design.
219
- * Import optionally: import '@react-email/editor/styles/button-bubble-menu.css';
220
- */
204
+ /* Link bubble menu */
221
205
 
222
- [data-re-btn-bm] {
223
- display: flex;
224
- align-items: center;
225
- }
226
-
227
- [data-re-btn-bm-toolbar] {
206
+ [data-re-link-bm-toolbar] {
228
207
  display: flex;
229
208
  align-items: center;
230
209
  }
231
210
 
232
- [data-re-btn-bm-item] {
211
+ [data-re-link-bm-item] {
233
212
  display: inline-flex;
234
213
  align-items: center;
235
214
  justify-content: center;
@@ -239,12 +218,17 @@ a[data-re-link-bm-item] {
239
218
  padding: 0.375rem;
240
219
  }
241
220
 
242
- [data-re-btn-bm-item] svg {
221
+ [data-re-link-bm-item] svg {
243
222
  width: 0.875rem;
244
223
  height: 0.875rem;
245
224
  }
246
225
 
247
- [data-re-btn-bm-form] {
226
+ a[data-re-link-bm-item] {
227
+ text-decoration: none;
228
+ color: inherit;
229
+ }
230
+
231
+ [data-re-link-bm-form] {
248
232
  display: flex;
249
233
  align-items: center;
250
234
  gap: 0.25rem;
@@ -252,7 +236,7 @@ a[data-re-link-bm-item] {
252
236
  padding: 0.25rem;
253
237
  }
254
238
 
255
- [data-re-btn-bm-input] {
239
+ [data-re-link-bm-input] {
256
240
  flex: 1;
257
241
  border: none;
258
242
  outline: none;
@@ -261,8 +245,8 @@ a[data-re-link-bm-item] {
261
245
  background: transparent;
262
246
  }
263
247
 
264
- [data-re-btn-bm-apply],
265
- [data-re-btn-bm-unlink] {
248
+ [data-re-link-bm-apply],
249
+ [data-re-link-bm-unlink] {
266
250
  display: inline-flex;
267
251
  align-items: center;
268
252
  justify-content: center;
@@ -272,21 +256,13 @@ a[data-re-link-bm-item] {
272
256
  padding: 0.25rem;
273
257
  }
274
258
 
275
- [data-re-btn-bm-apply] svg,
276
- [data-re-btn-bm-unlink] svg {
259
+ [data-re-link-bm-apply] svg,
260
+ [data-re-link-bm-unlink] svg {
277
261
  width: 0.875rem;
278
262
  height: 0.875rem;
279
263
  }
280
264
 
281
- /* Minimal functional styles for ImageBubbleMenu compound components.
282
- * Layout and positioning only - no visual design.
283
- * Import optionally: import '@react-email/editor/styles/image-bubble-menu.css';
284
- */
285
-
286
- [data-re-img-bm] {
287
- display: flex;
288
- align-items: center;
289
- }
265
+ /* Image bubble menu */
290
266
 
291
267
  [data-re-img-bm-toolbar] {
292
268
  display: flex;
@@ -428,10 +404,7 @@ a[data-re-link-bm-item] {
428
404
  * Root containers
429
405
  * ---------------------------------------------------------------- */
430
406
 
431
- [data-re-bubble-menu],
432
- [data-re-link-bm],
433
- [data-re-btn-bm],
434
- [data-re-img-bm] {
407
+ [data-re-bubble-menu] {
435
408
  background: var(--re-bg);
436
409
  border: 1px solid var(--re-border);
437
410
  border-radius: var(--re-radius);
@@ -1 +1 @@
1
- {"version":3,"file":"index.css","names":[],"sources":["../src/ui/bubble-menu/bubble-menu.css","../src/ui/link-bubble-menu/link-bubble-menu.css","../src/ui/button-bubble-menu/button-bubble-menu.css","../src/ui/image-bubble-menu/image-bubble-menu.css","../src/ui/slash-command/slash-command.css","../src/ui/themes/default.css"],"sourcesContent":["/* Minimal functional styles for BubbleMenu compound components.\n * This file handles layout and positioning only - no visual design.\n * Import this optionally: import '@react-email/editor/styles/bubble-menu.css';\n */\n\n[data-re-bubble-menu] {\n display: flex;\n align-items: center;\n gap: 0.125rem;\n}\n\n[data-re-bubble-menu-group] {\n display: flex;\n align-items: center;\n gap: 0.125rem;\n padding: 0 0.125rem;\n border: none;\n margin: 0;\n min-width: 0;\n}\n\n[data-re-bubble-menu-separator] {\n align-self: stretch;\n width: 1px;\n margin: 0.25rem 0;\n}\n\n[data-re-bubble-menu-item] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.375rem;\n}\n\n[data-re-bubble-menu-item] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n[data-re-node-selector] {\n position: relative;\n}\n\n[data-re-node-selector-trigger] {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n cursor: pointer;\n border: none;\n background: none;\n white-space: nowrap;\n font-size: 0.8125rem;\n padding: 0.375rem 0.5rem;\n}\n\n[data-re-node-selector-trigger] svg {\n width: 0.75rem;\n height: 0.75rem;\n opacity: 0.5;\n}\n\n[data-re-node-selector-content] {\n display: flex;\n flex-direction: column;\n min-width: 10rem;\n}\n\n[data-re-node-selector-item] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.375rem 0.5rem;\n font-size: 0.8125rem;\n width: 100%;\n text-align: left;\n}\n\n[data-re-node-selector-item] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n[data-re-link-selector] {\n display: flex;\n position: relative;\n}\n\n[data-re-link-selector-trigger] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.375rem;\n}\n\n[data-re-link-selector-trigger] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n[data-re-link-selector-form] {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 0.25rem;\n width: max-content;\n min-width: 16rem;\n padding: 0.25rem;\n}\n\n[data-re-link-selector-input] {\n flex: 1;\n border: none;\n outline: none;\n font-size: 0.8125rem;\n padding: 0.25rem;\n background: transparent;\n}\n\n[data-re-link-selector-apply],\n[data-re-link-selector-unlink] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.25rem;\n}\n\n[data-re-link-selector-apply] svg,\n[data-re-link-selector-unlink] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n","/* Minimal functional styles for LinkBubbleMenu compound components.\n * Layout and positioning only - no visual design.\n * Import optionally: import '@react-email/editor/styles/link-bubble-menu.css';\n */\n\n[data-re-link-bm] {\n display: flex;\n align-items: center;\n}\n\n[data-re-link-bm-toolbar] {\n display: flex;\n align-items: center;\n}\n\n[data-re-link-bm-item] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.375rem;\n}\n\n[data-re-link-bm-item] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n\na[data-re-link-bm-item] {\n text-decoration: none;\n color: inherit;\n}\n\n[data-re-link-bm-form] {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n min-width: 16rem;\n padding: 0.25rem;\n}\n\n[data-re-link-bm-input] {\n flex: 1;\n border: none;\n outline: none;\n font-size: 0.8125rem;\n padding: 0.25rem;\n background: transparent;\n}\n\n[data-re-link-bm-apply],\n[data-re-link-bm-unlink] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.25rem;\n}\n\n[data-re-link-bm-apply] svg,\n[data-re-link-bm-unlink] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n","/* Minimal functional styles for ButtonBubbleMenu compound components.\n * Layout and positioning only - no visual design.\n * Import optionally: import '@react-email/editor/styles/button-bubble-menu.css';\n */\n\n[data-re-btn-bm] {\n display: flex;\n align-items: center;\n}\n\n[data-re-btn-bm-toolbar] {\n display: flex;\n align-items: center;\n}\n\n[data-re-btn-bm-item] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.375rem;\n}\n\n[data-re-btn-bm-item] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n[data-re-btn-bm-form] {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n min-width: 16rem;\n padding: 0.25rem;\n}\n\n[data-re-btn-bm-input] {\n flex: 1;\n border: none;\n outline: none;\n font-size: 0.8125rem;\n padding: 0.25rem;\n background: transparent;\n}\n\n[data-re-btn-bm-apply],\n[data-re-btn-bm-unlink] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.25rem;\n}\n\n[data-re-btn-bm-apply] svg,\n[data-re-btn-bm-unlink] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n","/* Minimal functional styles for ImageBubbleMenu compound components.\n * Layout and positioning only - no visual design.\n * Import optionally: import '@react-email/editor/styles/image-bubble-menu.css';\n */\n\n[data-re-img-bm] {\n display: flex;\n align-items: center;\n}\n\n[data-re-img-bm-toolbar] {\n display: flex;\n align-items: center;\n}\n\n[data-re-img-bm-item] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.5rem;\n}\n\n[data-re-img-bm-item] svg {\n width: 1rem;\n height: 1rem;\n}\n","/* Minimal functional styles for SlashCommand components.\n * Layout and positioning only - no visual design.\n * Import optionally: import '@react-email/editor/styles/slash-command.css';\n */\n\n[data-re-slash-command] {\n max-height: 330px;\n overflow-y: auto;\n width: 256px;\n padding: 0.25rem;\n}\n\n[data-re-slash-command-item] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n width: 100%;\n padding: 0.375rem 0.5rem;\n border: none;\n border-radius: 0.375rem;\n background: none;\n cursor: pointer;\n font-size: 0.875rem;\n line-height: 1.25rem;\n text-align: left;\n}\n\n[data-re-slash-command-item] svg {\n flex-shrink: 0;\n}\n\n[data-re-slash-command-category] {\n font-size: 0.6875rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: 0.5rem 0.5rem 0.25rem;\n}\n\n[data-re-slash-command-empty] {\n padding: 0.75rem 0.5rem;\n font-size: 0.875rem;\n text-align: center;\n}\n","/* Default theme for @react-email/editor bubble menu primitives.\n *\n * Opt-in: import '@react-email/editor/themes/default.css';\n *\n * Override any variable on a parent element:\n * .my-editor { --re-bg: #1a1a1a; --re-border: #333; }\n */\n\n/* Layer 0: layout (inlined at build time via postcss-import) */\n@import \"../bubble-menu/bubble-menu.css\";\n@import \"../link-bubble-menu/link-bubble-menu.css\";\n@import \"../button-bubble-menu/button-bubble-menu.css\";\n@import \"../image-bubble-menu/image-bubble-menu.css\";\n@import \"../slash-command/slash-command.css\";\n\n/* ----------------------------------------------------------------\n * CSS custom properties — light defaults\n * ---------------------------------------------------------------- */\n\n:root {\n --re-bg: #fff;\n --re-border: #e5e5e5;\n --re-text: #1c1c1c;\n --re-text-muted: #6b6b6b;\n --re-hover: rgba(0, 0, 0, 0.04);\n --re-active: rgba(0, 0, 0, 0.06);\n --re-pressed: rgba(0, 0, 0, 0.06);\n --re-separator: #e5e5e5;\n --re-radius: 0.75rem;\n --re-radius-sm: 0.5rem;\n --re-shadow:\n 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);\n --re-danger: #dc2626;\n --re-danger-hover: rgba(220, 38, 38, 0.1);\n}\n\n/* ----------------------------------------------------------------\n * Dark mode — prefers-color-scheme\n * ---------------------------------------------------------------- */\n\n@media (prefers-color-scheme: dark) {\n :root {\n --re-bg: #1c1c1c;\n --re-border: #2e2e2e;\n --re-text: #ececec;\n --re-text-muted: #a0a0a0;\n --re-hover: rgba(255, 255, 255, 0.06);\n --re-active: rgba(255, 255, 255, 0.09);\n --re-pressed: rgba(255, 255, 255, 0.09);\n --re-separator: #2e2e2e;\n --re-shadow:\n 0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -4px rgba(0, 0, 0, 0.3);\n --re-danger: #f87171;\n --re-danger-hover: rgba(248, 113, 113, 0.15);\n }\n}\n\n/* ----------------------------------------------------------------\n * Dark mode — .dark class override\n * ---------------------------------------------------------------- */\n\n.dark {\n --re-bg: #1c1c1c;\n --re-border: #2e2e2e;\n --re-text: #ececec;\n --re-text-muted: #a0a0a0;\n --re-hover: rgba(255, 255, 255, 0.06);\n --re-active: rgba(255, 255, 255, 0.09);\n --re-pressed: rgba(255, 255, 255, 0.09);\n --re-separator: #2e2e2e;\n --re-shadow:\n 0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -4px rgba(0, 0, 0, 0.3);\n --re-danger: #f87171;\n --re-danger-hover: rgba(248, 113, 113, 0.15);\n}\n\n/* ----------------------------------------------------------------\n * Root containers\n * ---------------------------------------------------------------- */\n\n[data-re-bubble-menu],\n[data-re-link-bm],\n[data-re-btn-bm],\n[data-re-img-bm] {\n background: var(--re-bg);\n border: 1px solid var(--re-border);\n border-radius: var(--re-radius);\n box-shadow: var(--re-shadow);\n z-index: 50;\n padding: 0.125rem;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 0.8125rem;\n line-height: 1;\n}\n\n/* ----------------------------------------------------------------\n * Toolbars (link, button, image bubble menus)\n * ---------------------------------------------------------------- */\n\n[data-re-img-bm-toolbar] > * + * {\n border-left: 1px solid var(--re-border);\n}\n\n/* ----------------------------------------------------------------\n * Item buttons (all bubble menus)\n * ---------------------------------------------------------------- */\n\n[data-re-bubble-menu-item],\n[data-re-link-bm-item],\n[data-re-btn-bm-item],\n[data-re-img-bm-item] {\n color: var(--re-text-muted);\n border-radius: var(--re-radius-sm);\n transition:\n background-color 0.15s,\n color 0.15s;\n}\n\n[data-re-bubble-menu-item]:hover,\n[data-re-link-bm-item]:hover,\n[data-re-btn-bm-item]:hover,\n[data-re-img-bm-item]:hover {\n background: var(--re-hover);\n color: var(--re-text);\n}\n\n[data-re-bubble-menu-item]:active,\n[data-re-link-bm-item]:active,\n[data-re-btn-bm-item]:active,\n[data-re-img-bm-item]:active {\n background: var(--re-active);\n}\n\n/* Active / pressed state */\n[data-re-bubble-menu-item][data-active],\n[data-re-bubble-menu-item][aria-pressed=\"true\"] {\n background: var(--re-pressed);\n color: var(--re-text);\n}\n\n/* ----------------------------------------------------------------\n * Separator (text bubble menu)\n * ---------------------------------------------------------------- */\n\n[data-re-bubble-menu-separator] {\n background: var(--re-separator);\n}\n\n/* ----------------------------------------------------------------\n * Node Selector\n * ---------------------------------------------------------------- */\n\n[data-re-node-selector-trigger] {\n color: var(--re-text);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n font-weight: 500;\n}\n\n[data-re-node-selector-trigger]:hover {\n background: var(--re-hover);\n}\n\n[data-re-node-selector-trigger]:active {\n background: var(--re-active);\n}\n\n[data-re-node-selector-content] {\n background: var(--re-bg);\n border: 1px solid var(--re-border);\n border-radius: var(--re-radius);\n box-shadow: var(--re-shadow);\n padding: 0.25rem;\n margin-top: 0.25rem;\n z-index: 50;\n}\n\n[data-re-node-selector-item] {\n color: var(--re-text-muted);\n border-radius: var(--re-radius-sm);\n transition:\n background-color 0.15s,\n color 0.15s;\n}\n\n[data-re-node-selector-item]:hover {\n background: var(--re-hover);\n color: var(--re-text);\n}\n\n[data-re-node-selector-item][data-active] {\n color: var(--re-text);\n}\n\n/* ----------------------------------------------------------------\n * Link Selector (text bubble menu)\n * ---------------------------------------------------------------- */\n\n[data-re-link-selector-trigger] {\n color: var(--re-text-muted);\n border-radius: var(--re-radius-sm);\n transition:\n background-color 0.15s,\n color 0.15s;\n}\n\n[data-re-link-selector-trigger]:hover {\n background: var(--re-hover);\n color: var(--re-text);\n}\n\n[data-re-link-selector-trigger][aria-pressed=\"true\"] {\n background: var(--re-pressed);\n}\n\n[data-re-link-selector-form] {\n background: var(--re-bg);\n border: 1px solid var(--re-border);\n border-radius: var(--re-radius);\n box-shadow: var(--re-shadow);\n padding: 0.25rem;\n}\n\n[data-re-link-selector-input] {\n color: var(--re-text);\n}\n\n[data-re-link-selector-input]::placeholder {\n color: var(--re-text-muted);\n}\n\n[data-re-link-selector-apply] {\n color: var(--re-text);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n}\n\n[data-re-link-selector-apply]:hover {\n background: var(--re-hover);\n}\n\n[data-re-link-selector-unlink] {\n color: var(--re-danger);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n}\n\n[data-re-link-selector-unlink]:hover {\n background: var(--re-danger-hover);\n}\n\n/* ----------------------------------------------------------------\n * Link Bubble Menu Form\n * ---------------------------------------------------------------- */\n\n[data-re-link-bm-form] {\n background: var(--re-bg);\n padding: 0.25rem;\n}\n\n[data-re-link-bm-input] {\n color: var(--re-text);\n}\n\n[data-re-link-bm-input]::placeholder {\n color: var(--re-text-muted);\n}\n\n[data-re-link-bm-apply] {\n color: var(--re-text);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n}\n\n[data-re-link-bm-apply]:hover {\n background: var(--re-hover);\n}\n\n[data-re-link-bm-unlink] {\n color: var(--re-danger);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n}\n\n[data-re-link-bm-unlink]:hover {\n background: var(--re-danger-hover);\n}\n\n/* ----------------------------------------------------------------\n * Button Bubble Menu Form\n * ---------------------------------------------------------------- */\n\n[data-re-btn-bm-form] {\n background: var(--re-bg);\n padding: 0.25rem;\n}\n\n[data-re-btn-bm-input] {\n color: var(--re-text);\n}\n\n[data-re-btn-bm-input]::placeholder {\n color: var(--re-text-muted);\n}\n\n[data-re-btn-bm-apply] {\n color: var(--re-text);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n}\n\n[data-re-btn-bm-apply]:hover {\n background: var(--re-hover);\n}\n\n[data-re-btn-bm-unlink] {\n color: var(--re-danger);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n}\n\n[data-re-btn-bm-unlink]:hover {\n background: var(--re-danger-hover);\n}\n\n/* ----------------------------------------------------------------\n * Slash Command\n * ---------------------------------------------------------------- */\n\n[data-re-slash-command] {\n background: var(--re-bg);\n border: 1px solid var(--re-border);\n border-radius: var(--re-radius);\n box-shadow: var(--re-shadow);\n font-family: system-ui, -apple-system, sans-serif;\n}\n\n[data-re-slash-command-item] {\n color: var(--re-text);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n}\n\n[data-re-slash-command-item]:hover {\n background: var(--re-hover);\n}\n\n[data-re-slash-command-item][data-selected] {\n background: var(--re-hover);\n}\n\n[data-re-slash-command-item]:active {\n background: var(--re-active);\n}\n\n[data-re-slash-command-item] svg {\n color: var(--re-text-muted);\n}\n\n[data-re-slash-command-category] {\n color: var(--re-text-muted);\n}\n\n[data-re-slash-command-empty] {\n color: var(--re-text-muted);\n}\n\n/* ----------------------------------------------------------------\n * Editor content — alignment attribute\n * ---------------------------------------------------------------- */\n\n.tiptap [alignment=\"left\"] {\n text-align: left;\n}\n\n.tiptap [alignment=\"center\"] {\n text-align: center;\n}\n\n.tiptap [alignment=\"right\"] {\n text-align: right;\n}\n\n.tiptap [alignment=\"justify\"] {\n text-align: justify;\n}\n\n/* ----------------------------------------------------------------\n * Editor content — columns\n * ---------------------------------------------------------------- */\n\n.tiptap .node-columns {\n display: flex;\n gap: 0.5rem;\n width: 100%;\n}\n\n.tiptap .node-column {\n flex: 1;\n min-width: 0;\n}\n\n/* ----------------------------------------------------------------\n * Editor content — base typography\n * ---------------------------------------------------------------- */\n\n.tiptap {\n outline: none;\n color: var(--re-text);\n}\n\n.tiptap p {\n margin: 0.25em 0;\n}\n\n.tiptap h1,\n.tiptap h2,\n.tiptap h3 {\n margin: 0.5em 0 0.25em;\n font-weight: 700;\n}\n\n.tiptap h1 {\n font-size: 2em;\n}\n\n.tiptap h2 {\n font-size: 1.5em;\n}\n\n.tiptap h3 {\n font-size: 1.17em;\n}\n\n.tiptap a:not(.node-button) {\n color: #2563eb;\n text-decoration: underline;\n text-underline-offset: 2px;\n cursor: text;\n}\n\n.tiptap .node-button {\n display: inline-block;\n padding: 0.625em 1.25em;\n background-color: #000;\n color: #fff;\n border-radius: 0.375em;\n font-weight: 500;\n font-size: 0.875em;\n text-decoration: none;\n text-align: center;\n cursor: text;\n}\n\n.tiptap blockquote {\n border-left: 3px solid var(--re-border);\n margin: 0.5em 0;\n padding-left: 1em;\n color: var(--re-text-muted);\n}\n\n.tiptap hr {\n border: none;\n border-top: 1px solid var(--re-border);\n margin: 1em 0;\n}\n\n.tiptap code {\n background: var(--re-hover);\n border-radius: 0.25rem;\n padding: 0.125rem 0.375rem;\n font-size: 0.875em;\n}\n\n.tiptap pre {\n background: var(--re-hover);\n border-radius: var(--re-radius-sm);\n padding: 0.75rem 1rem;\n overflow-x: auto;\n}\n\n.tiptap pre code {\n background: none;\n padding: 0;\n border-radius: 0;\n}\n\n.tiptap ul {\n list-style-type: disc;\n padding-left: 1.5em;\n margin: 0.25em 0;\n}\n\n.tiptap ol {\n list-style-type: decimal;\n padding-left: 1.5em;\n margin: 0.25em 0;\n}\n\n.tiptap .node-placeholder::before {\n color: var(--re-text-muted);\n content: attr(data-placeholder);\n float: left;\n height: 0;\n pointer-events: none;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;ACjJA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAOA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA"}
1
+ {"version":3,"file":"index.css","names":[],"sources":["../src/ui/bubble-menu/bubble-menu.css","../src/ui/slash-command/slash-command.css","../src/ui/themes/default.css"],"sourcesContent":["/* Minimal functional styles for BubbleMenu compound components.\n * This file handles layout and positioning only - no visual design.\n * Import this optionally: import '@react-email/editor/styles/bubble-menu.css';\n */\n\n[data-re-bubble-menu] {\n display: flex;\n align-items: center;\n gap: 0.125rem;\n}\n\n[data-re-bubble-menu-group] {\n display: flex;\n align-items: center;\n gap: 0.125rem;\n padding: 0 0.125rem;\n border: none;\n margin: 0;\n min-width: 0;\n}\n\n[data-re-bubble-menu-separator] {\n align-self: stretch;\n width: 1px;\n margin: 0.25rem 0;\n}\n\n[data-re-bubble-menu-item] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.375rem;\n}\n\n[data-re-bubble-menu-item] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n[data-re-node-selector] {\n position: relative;\n}\n\n[data-re-node-selector-trigger] {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n cursor: pointer;\n border: none;\n background: none;\n white-space: nowrap;\n font-size: 0.8125rem;\n padding: 0.375rem 0.5rem;\n}\n\n[data-re-node-selector-trigger] svg {\n width: 0.75rem;\n height: 0.75rem;\n opacity: 0.5;\n}\n\n[data-re-node-selector-content] {\n display: flex;\n flex-direction: column;\n min-width: 10rem;\n}\n\n[data-re-node-selector-item] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.375rem 0.5rem;\n font-size: 0.8125rem;\n width: 100%;\n text-align: left;\n}\n\n[data-re-node-selector-item] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n[data-re-link-selector] {\n display: flex;\n position: relative;\n}\n\n[data-re-link-selector-trigger] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.375rem;\n}\n\n[data-re-link-selector-trigger] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n[data-re-link-selector-form] {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 0.25rem;\n width: max-content;\n min-width: 16rem;\n padding: 0.25rem;\n}\n\n[data-re-link-selector-input] {\n flex: 1;\n border: none;\n outline: none;\n font-size: 0.8125rem;\n padding: 0.25rem;\n background: transparent;\n}\n\n[data-re-link-selector-apply],\n[data-re-link-selector-unlink] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.25rem;\n}\n\n[data-re-link-selector-apply] svg,\n[data-re-link-selector-unlink] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n/* Button bubble menu */\n\n[data-re-btn-bm-toolbar] {\n display: flex;\n align-items: center;\n}\n\n[data-re-btn-bm-item] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.375rem;\n}\n\n[data-re-btn-bm-item] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n[data-re-btn-bm-form] {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n min-width: 16rem;\n padding: 0.25rem;\n}\n\n[data-re-btn-bm-input] {\n flex: 1;\n border: none;\n outline: none;\n font-size: 0.8125rem;\n padding: 0.25rem;\n background: transparent;\n}\n\n[data-re-btn-bm-apply],\n[data-re-btn-bm-unlink] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.25rem;\n}\n\n[data-re-btn-bm-apply] svg,\n[data-re-btn-bm-unlink] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n/* Link bubble menu */\n\n[data-re-link-bm-toolbar] {\n display: flex;\n align-items: center;\n}\n\n[data-re-link-bm-item] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.375rem;\n}\n\n[data-re-link-bm-item] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n\na[data-re-link-bm-item] {\n text-decoration: none;\n color: inherit;\n}\n\n[data-re-link-bm-form] {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n min-width: 16rem;\n padding: 0.25rem;\n}\n\n[data-re-link-bm-input] {\n flex: 1;\n border: none;\n outline: none;\n font-size: 0.8125rem;\n padding: 0.25rem;\n background: transparent;\n}\n\n[data-re-link-bm-apply],\n[data-re-link-bm-unlink] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.25rem;\n}\n\n[data-re-link-bm-apply] svg,\n[data-re-link-bm-unlink] svg {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n/* Image bubble menu */\n\n[data-re-img-bm-toolbar] {\n display: flex;\n align-items: center;\n}\n\n[data-re-img-bm-item] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: none;\n background: none;\n padding: 0.5rem;\n}\n\n[data-re-img-bm-item] svg {\n width: 1rem;\n height: 1rem;\n}\n","/* Minimal functional styles for SlashCommand components.\n * Layout and positioning only - no visual design.\n * Import optionally: import '@react-email/editor/styles/slash-command.css';\n */\n\n[data-re-slash-command] {\n max-height: 330px;\n overflow-y: auto;\n width: 256px;\n padding: 0.25rem;\n}\n\n[data-re-slash-command-item] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n width: 100%;\n padding: 0.375rem 0.5rem;\n border: none;\n border-radius: 0.375rem;\n background: none;\n cursor: pointer;\n font-size: 0.875rem;\n line-height: 1.25rem;\n text-align: left;\n}\n\n[data-re-slash-command-item] svg {\n flex-shrink: 0;\n}\n\n[data-re-slash-command-category] {\n font-size: 0.6875rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: 0.5rem 0.5rem 0.25rem;\n}\n\n[data-re-slash-command-empty] {\n padding: 0.75rem 0.5rem;\n font-size: 0.875rem;\n text-align: center;\n}\n","/* Default theme for @react-email/editor bubble menu primitives.\n *\n * Opt-in: import '@react-email/editor/themes/default.css';\n *\n * Override any variable on a parent element:\n * .my-editor { --re-bg: #1a1a1a; --re-border: #333; }\n */\n\n/* Layer 0: layout (inlined at build time via postcss-import) */\n@import \"../bubble-menu/bubble-menu.css\";\n@import \"../slash-command/slash-command.css\";\n\n/* ----------------------------------------------------------------\n * CSS custom properties — light defaults\n * ---------------------------------------------------------------- */\n\n:root {\n --re-bg: #fff;\n --re-border: #e5e5e5;\n --re-text: #1c1c1c;\n --re-text-muted: #6b6b6b;\n --re-hover: rgba(0, 0, 0, 0.04);\n --re-active: rgba(0, 0, 0, 0.06);\n --re-pressed: rgba(0, 0, 0, 0.06);\n --re-separator: #e5e5e5;\n --re-radius: 0.75rem;\n --re-radius-sm: 0.5rem;\n --re-shadow:\n 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);\n --re-danger: #dc2626;\n --re-danger-hover: rgba(220, 38, 38, 0.1);\n}\n\n/* ----------------------------------------------------------------\n * Dark mode — prefers-color-scheme\n * ---------------------------------------------------------------- */\n\n@media (prefers-color-scheme: dark) {\n :root {\n --re-bg: #1c1c1c;\n --re-border: #2e2e2e;\n --re-text: #ececec;\n --re-text-muted: #a0a0a0;\n --re-hover: rgba(255, 255, 255, 0.06);\n --re-active: rgba(255, 255, 255, 0.09);\n --re-pressed: rgba(255, 255, 255, 0.09);\n --re-separator: #2e2e2e;\n --re-shadow:\n 0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -4px rgba(0, 0, 0, 0.3);\n --re-danger: #f87171;\n --re-danger-hover: rgba(248, 113, 113, 0.15);\n }\n}\n\n/* ----------------------------------------------------------------\n * Dark mode — .dark class override\n * ---------------------------------------------------------------- */\n\n.dark {\n --re-bg: #1c1c1c;\n --re-border: #2e2e2e;\n --re-text: #ececec;\n --re-text-muted: #a0a0a0;\n --re-hover: rgba(255, 255, 255, 0.06);\n --re-active: rgba(255, 255, 255, 0.09);\n --re-pressed: rgba(255, 255, 255, 0.09);\n --re-separator: #2e2e2e;\n --re-shadow:\n 0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -4px rgba(0, 0, 0, 0.3);\n --re-danger: #f87171;\n --re-danger-hover: rgba(248, 113, 113, 0.15);\n}\n\n/* ----------------------------------------------------------------\n * Root containers\n * ---------------------------------------------------------------- */\n\n[data-re-bubble-menu] {\n background: var(--re-bg);\n border: 1px solid var(--re-border);\n border-radius: var(--re-radius);\n box-shadow: var(--re-shadow);\n z-index: 50;\n padding: 0.125rem;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 0.8125rem;\n line-height: 1;\n}\n\n/* ----------------------------------------------------------------\n * Toolbars (link, button, image bubble menus)\n * ---------------------------------------------------------------- */\n\n[data-re-img-bm-toolbar] > * + * {\n border-left: 1px solid var(--re-border);\n}\n\n/* ----------------------------------------------------------------\n * Item buttons (all bubble menus)\n * ---------------------------------------------------------------- */\n\n[data-re-bubble-menu-item],\n[data-re-link-bm-item],\n[data-re-btn-bm-item],\n[data-re-img-bm-item] {\n color: var(--re-text-muted);\n border-radius: var(--re-radius-sm);\n transition:\n background-color 0.15s,\n color 0.15s;\n}\n\n[data-re-bubble-menu-item]:hover,\n[data-re-link-bm-item]:hover,\n[data-re-btn-bm-item]:hover,\n[data-re-img-bm-item]:hover {\n background: var(--re-hover);\n color: var(--re-text);\n}\n\n[data-re-bubble-menu-item]:active,\n[data-re-link-bm-item]:active,\n[data-re-btn-bm-item]:active,\n[data-re-img-bm-item]:active {\n background: var(--re-active);\n}\n\n/* Active / pressed state */\n[data-re-bubble-menu-item][data-active],\n[data-re-bubble-menu-item][aria-pressed=\"true\"] {\n background: var(--re-pressed);\n color: var(--re-text);\n}\n\n/* ----------------------------------------------------------------\n * Separator (text bubble menu)\n * ---------------------------------------------------------------- */\n\n[data-re-bubble-menu-separator] {\n background: var(--re-separator);\n}\n\n/* ----------------------------------------------------------------\n * Node Selector\n * ---------------------------------------------------------------- */\n\n[data-re-node-selector-trigger] {\n color: var(--re-text);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n font-weight: 500;\n}\n\n[data-re-node-selector-trigger]:hover {\n background: var(--re-hover);\n}\n\n[data-re-node-selector-trigger]:active {\n background: var(--re-active);\n}\n\n[data-re-node-selector-content] {\n background: var(--re-bg);\n border: 1px solid var(--re-border);\n border-radius: var(--re-radius);\n box-shadow: var(--re-shadow);\n padding: 0.25rem;\n margin-top: 0.25rem;\n z-index: 50;\n}\n\n[data-re-node-selector-item] {\n color: var(--re-text-muted);\n border-radius: var(--re-radius-sm);\n transition:\n background-color 0.15s,\n color 0.15s;\n}\n\n[data-re-node-selector-item]:hover {\n background: var(--re-hover);\n color: var(--re-text);\n}\n\n[data-re-node-selector-item][data-active] {\n color: var(--re-text);\n}\n\n/* ----------------------------------------------------------------\n * Link Selector (text bubble menu)\n * ---------------------------------------------------------------- */\n\n[data-re-link-selector-trigger] {\n color: var(--re-text-muted);\n border-radius: var(--re-radius-sm);\n transition:\n background-color 0.15s,\n color 0.15s;\n}\n\n[data-re-link-selector-trigger]:hover {\n background: var(--re-hover);\n color: var(--re-text);\n}\n\n[data-re-link-selector-trigger][aria-pressed=\"true\"] {\n background: var(--re-pressed);\n}\n\n[data-re-link-selector-form] {\n background: var(--re-bg);\n border: 1px solid var(--re-border);\n border-radius: var(--re-radius);\n box-shadow: var(--re-shadow);\n padding: 0.25rem;\n}\n\n[data-re-link-selector-input] {\n color: var(--re-text);\n}\n\n[data-re-link-selector-input]::placeholder {\n color: var(--re-text-muted);\n}\n\n[data-re-link-selector-apply] {\n color: var(--re-text);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n}\n\n[data-re-link-selector-apply]:hover {\n background: var(--re-hover);\n}\n\n[data-re-link-selector-unlink] {\n color: var(--re-danger);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n}\n\n[data-re-link-selector-unlink]:hover {\n background: var(--re-danger-hover);\n}\n\n/* ----------------------------------------------------------------\n * Link Bubble Menu Form\n * ---------------------------------------------------------------- */\n\n[data-re-link-bm-form] {\n background: var(--re-bg);\n padding: 0.25rem;\n}\n\n[data-re-link-bm-input] {\n color: var(--re-text);\n}\n\n[data-re-link-bm-input]::placeholder {\n color: var(--re-text-muted);\n}\n\n[data-re-link-bm-apply] {\n color: var(--re-text);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n}\n\n[data-re-link-bm-apply]:hover {\n background: var(--re-hover);\n}\n\n[data-re-link-bm-unlink] {\n color: var(--re-danger);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n}\n\n[data-re-link-bm-unlink]:hover {\n background: var(--re-danger-hover);\n}\n\n/* ----------------------------------------------------------------\n * Button Bubble Menu Form\n * ---------------------------------------------------------------- */\n\n[data-re-btn-bm-form] {\n background: var(--re-bg);\n padding: 0.25rem;\n}\n\n[data-re-btn-bm-input] {\n color: var(--re-text);\n}\n\n[data-re-btn-bm-input]::placeholder {\n color: var(--re-text-muted);\n}\n\n[data-re-btn-bm-apply] {\n color: var(--re-text);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n}\n\n[data-re-btn-bm-apply]:hover {\n background: var(--re-hover);\n}\n\n[data-re-btn-bm-unlink] {\n color: var(--re-danger);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n}\n\n[data-re-btn-bm-unlink]:hover {\n background: var(--re-danger-hover);\n}\n\n/* ----------------------------------------------------------------\n * Slash Command\n * ---------------------------------------------------------------- */\n\n[data-re-slash-command] {\n background: var(--re-bg);\n border: 1px solid var(--re-border);\n border-radius: var(--re-radius);\n box-shadow: var(--re-shadow);\n font-family: system-ui, -apple-system, sans-serif;\n}\n\n[data-re-slash-command-item] {\n color: var(--re-text);\n border-radius: var(--re-radius-sm);\n transition: background-color 0.15s;\n}\n\n[data-re-slash-command-item]:hover {\n background: var(--re-hover);\n}\n\n[data-re-slash-command-item][data-selected] {\n background: var(--re-hover);\n}\n\n[data-re-slash-command-item]:active {\n background: var(--re-active);\n}\n\n[data-re-slash-command-item] svg {\n color: var(--re-text-muted);\n}\n\n[data-re-slash-command-category] {\n color: var(--re-text-muted);\n}\n\n[data-re-slash-command-empty] {\n color: var(--re-text-muted);\n}\n\n/* ----------------------------------------------------------------\n * Editor content — alignment attribute\n * ---------------------------------------------------------------- */\n\n.tiptap [alignment=\"left\"] {\n text-align: left;\n}\n\n.tiptap [alignment=\"center\"] {\n text-align: center;\n}\n\n.tiptap [alignment=\"right\"] {\n text-align: right;\n}\n\n.tiptap [alignment=\"justify\"] {\n text-align: justify;\n}\n\n/* ----------------------------------------------------------------\n * Editor content — columns\n * ---------------------------------------------------------------- */\n\n.tiptap .node-columns {\n display: flex;\n gap: 0.5rem;\n width: 100%;\n}\n\n.tiptap .node-column {\n flex: 1;\n min-width: 0;\n}\n\n/* ----------------------------------------------------------------\n * Editor content — base typography\n * ---------------------------------------------------------------- */\n\n.tiptap {\n outline: none;\n color: var(--re-text);\n}\n\n.tiptap p {\n margin: 0.25em 0;\n}\n\n.tiptap h1,\n.tiptap h2,\n.tiptap h3 {\n margin: 0.5em 0 0.25em;\n font-weight: 700;\n}\n\n.tiptap h1 {\n font-size: 2em;\n}\n\n.tiptap h2 {\n font-size: 1.5em;\n}\n\n.tiptap h3 {\n font-size: 1.17em;\n}\n\n.tiptap a:not(.node-button) {\n color: #2563eb;\n text-decoration: underline;\n text-underline-offset: 2px;\n cursor: text;\n}\n\n.tiptap .node-button {\n display: inline-block;\n padding: 0.625em 1.25em;\n background-color: #000;\n color: #fff;\n border-radius: 0.375em;\n font-weight: 500;\n font-size: 0.875em;\n text-decoration: none;\n text-align: center;\n cursor: text;\n}\n\n.tiptap blockquote {\n border-left: 3px solid var(--re-border);\n margin: 0.5em 0;\n padding-left: 1em;\n color: var(--re-text-muted);\n}\n\n.tiptap hr {\n border: none;\n border-top: 1px solid var(--re-border);\n margin: 1em 0;\n}\n\n.tiptap code {\n background: var(--re-hover);\n border-radius: 0.25rem;\n padding: 0.125rem 0.375rem;\n font-size: 0.875em;\n}\n\n.tiptap pre {\n background: var(--re-hover);\n border-radius: var(--re-radius-sm);\n padding: 0.75rem 1rem;\n overflow-x: auto;\n}\n\n.tiptap pre code {\n background: none;\n padding: 0;\n border-radius: 0;\n}\n\n.tiptap ul {\n list-style-type: disc;\n padding-left: 1.5em;\n margin: 0.25em 0;\n}\n\n.tiptap ol {\n list-style-type: decimal;\n padding-left: 1.5em;\n margin: 0.25em 0;\n}\n\n.tiptap .node-placeholder::before {\n color: var(--re-text-muted);\n content: attr(data-placeholder);\n float: left;\n height: 0;\n pointer-events: none;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AC5RA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA"}
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { n as UploadImageHandler } from "./create-paste-handler-B8BtjBk3.cjs";
2
2
  import { Content, Editor, Extensions, JSONContent } from "@tiptap/core";
3
- import * as react0 from "react";
3
+ import * as react21 from "react";
4
4
 
5
5
  //#region src/email-editor/email-editor.d.ts
6
6
  interface EmailEditorRef {
@@ -21,13 +21,13 @@ interface EmailEditorProps {
21
21
  editable?: boolean;
22
22
  placeholder?: string;
23
23
  bubbleMenu?: {
24
- excludeNodes?: string[];
25
- excludeMarks?: string[];
24
+ hideWhenActiveNodes?: string[];
25
+ hideWhenActiveMarks?: string[];
26
26
  };
27
27
  extensions?: Extensions;
28
28
  className?: string;
29
29
  }
30
- declare const EmailEditor: react0.ForwardRefExoticComponent<EmailEditorProps & react0.RefAttributes<EmailEditorRef>>;
30
+ declare const EmailEditor: react21.ForwardRefExoticComponent<EmailEditorProps & react21.RefAttributes<EmailEditorRef>>;
31
31
  //#endregion
32
32
  export { EmailEditor, type EmailEditorProps, type EmailEditorRef };
33
33
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/email-editor/email-editor.tsx"],"sourcesContent":[],"mappings":";;;;;UAuBiB,cAAA;gBACD;IADC,IAAA,EAAA,MAAA;IACD,IAAA,EAAA,MAAA;EACC,CAAA,CAAA;EAEP,OAAA,EAAA,GAAA,GAFO,WAEP;EAAM,OAAA,EAAA,GAAA,GAAA,MAAA;EAGC,MAAA,EAHP,MAGO,GAAA,IAAgB;;AAEX,UAFL,gBAAA,CAEK;EACJ,OAAA,CAAA,EAFN,OAEM;EACG,QAAA,CAAA,EAAA,CAAA,MAAA,EAFC,MAED,EAAA,GAAA,IAAA;EAQN,aAAA,CAAA,EATG,kBASH;EAAU,OAAA,CAAA,EAAA,CAAA,MAAA,EARJ,MAQI,EAAA,GAAA,IAAA;EA0BZ,KAAA,CAAA,EAAA,OAmEZ,GAAA,SAAA;EAnEuB,QAAA,CAAA,EAAA,OAAA;EAAA,WAAA,CAAA,EAAA,MAAA;EAAA,UAAA,CAAA,EAAA;IAAA,YAAA,CAAA,EAAA,MAAA,EAAA;IAAA,YAAA,CAAA,EAAA,MAAA,EAAA;;eA1BT;;;cA0BF,aAAW,MAAA,CAAA,0BAAA,mBAAA,MAAA,CAAA,cAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/email-editor/email-editor.tsx"],"sourcesContent":[],"mappings":";;;;;UAuBiB,cAAA;gBACD;IADC,IAAA,EAAA,MAAA;IACD,IAAA,EAAA,MAAA;EACC,CAAA,CAAA;EAEP,OAAA,EAAA,GAAA,GAFO,WAEP;EAAM,OAAA,EAAA,GAAA,GAAA,MAAA;EAGC,MAAA,EAHP,MAGO,GAAA,IAAgB;;AAEX,UAFL,gBAAA,CAEK;EACJ,OAAA,CAAA,EAFN,OAEM;EACG,QAAA,CAAA,EAAA,CAAA,MAAA,EAFC,MAED,EAAA,GAAA,IAAA;EAQN,aAAA,CAAA,EATG,kBASH;EAAU,OAAA,CAAA,EAAA,CAAA,MAAA,EARJ,MAQI,EAAA,GAAA,IAAA;EA0BZ,KAAA,CAAA,EAAA,OAmEZ,GAAA,SAAA;EAnEuB,QAAA,CAAA,EAAA,OAAA;EAAA,WAAA,CAAA,EAAA,MAAA;EAAA,UAAA,CAAA,EAAA;IAAA,mBAAA,CAAA,EAAA,MAAA,EAAA;IAAA,mBAAA,CAAA,EAAA,MAAA,EAAA;;eA1BT;;;cA0BF,aAAW,OAAA,CAAA,0BAAA,mBAAA,OAAA,CAAA,cAAA"}
package/dist/index.d.mts CHANGED
@@ -21,8 +21,8 @@ interface EmailEditorProps {
21
21
  editable?: boolean;
22
22
  placeholder?: string;
23
23
  bubbleMenu?: {
24
- excludeNodes?: string[];
25
- excludeMarks?: string[];
24
+ hideWhenActiveNodes?: string[];
25
+ hideWhenActiveMarks?: string[];
26
26
  };
27
27
  extensions?: Extensions;
28
28
  className?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/email-editor/email-editor.tsx"],"sourcesContent":[],"mappings":";;;;;UAuBiB,cAAA;gBACD;IADC,IAAA,EAAA,MAAA;IACD,IAAA,EAAA,MAAA;EACC,CAAA,CAAA;EAEP,OAAA,EAAA,GAAA,GAFO,WAEP;EAAM,OAAA,EAAA,GAAA,GAAA,MAAA;EAGC,MAAA,EAHP,MAGO,GAAA,IAAgB;;AAEX,UAFL,gBAAA,CAEK;EACJ,OAAA,CAAA,EAFN,OAEM;EACG,QAAA,CAAA,EAAA,CAAA,MAAA,EAFC,MAED,EAAA,GAAA,IAAA;EAQN,aAAA,CAAA,EATG,kBASH;EAAU,OAAA,CAAA,EAAA,CAAA,MAAA,EARJ,MAQI,EAAA,GAAA,IAAA;EA0BZ,KAAA,CAAA,EAAA,OAmEZ,GAAA,SAAA;EAnEuB,QAAA,CAAA,EAAA,OAAA;EAAA,WAAA,CAAA,EAAA,MAAA;EAAA,UAAA,CAAA,EAAA;IAAA,YAAA,CAAA,EAAA,MAAA,EAAA;IAAA,YAAA,CAAA,EAAA,MAAA,EAAA;;eA1BT;;;cA0BF,aAAW,MAAA,CAAA,0BAAA,mBAAA,MAAA,CAAA,cAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/email-editor/email-editor.tsx"],"sourcesContent":[],"mappings":";;;;;UAuBiB,cAAA;gBACD;IADC,IAAA,EAAA,MAAA;IACD,IAAA,EAAA,MAAA;EACC,CAAA,CAAA;EAEP,OAAA,EAAA,GAAA,GAFO,WAEP;EAAM,OAAA,EAAA,GAAA,GAAA,MAAA;EAGC,MAAA,EAHP,MAGO,GAAA,IAAgB;;AAEX,UAFL,gBAAA,CAEK;EACJ,OAAA,CAAA,EAFN,OAEM;EACG,QAAA,CAAA,EAAA,CAAA,MAAA,EAFC,MAED,EAAA,GAAA,IAAA;EAQN,aAAA,CAAA,EATG,kBASH;EAAU,OAAA,CAAA,EAAA,CAAA,MAAA,EARJ,MAQI,EAAA,GAAA,IAAA;EA0BZ,KAAA,CAAA,EAAA,OAmEZ,GAAA,SAAA;EAnEuB,QAAA,CAAA,EAAA,OAAA;EAAA,WAAA,CAAA,EAAA,MAAA;EAAA,UAAA,CAAA,EAAA;IAAA,mBAAA,CAAA,EAAA,MAAA,EAAA;IAAA,mBAAA,CAAA,EAAA,MAAA,EAAA;;eA1BT;;;cA0BF,aAAW,MAAA,CAAA,0BAAA,mBAAA,MAAA,CAAA,cAAA"}