payload-richtext-tiptap 0.0.157 → 0.0.159

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 (30) hide show
  1. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/BlockquoteFigure.d.ts +1 -1
  2. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/BlockquoteFigure.d.ts.map +1 -1
  3. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/BlockquoteFigure.js +61 -15
  4. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/BlockquoteFigure.js.map +1 -1
  5. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/Quote/Quote.d.ts.map +1 -1
  6. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/Quote/Quote.js +1 -3
  7. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/Quote/Quote.js.map +1 -1
  8. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/QuoteCaption/QuoteCaption.js.map +1 -1
  9. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/GifPlayer.d.ts +12 -0
  10. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/GifPlayer.d.ts.map +1 -0
  11. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/GifPlayer.js +152 -0
  12. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/GifPlayer.js.map +1 -0
  13. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/SmartImage.d.ts +12 -0
  14. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/SmartImage.d.ts.map +1 -0
  15. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/SmartImage.js +55 -0
  16. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/SmartImage.js.map +1 -0
  17. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/TestImage.d.ts +4 -0
  18. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/TestImage.d.ts.map +1 -0
  19. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/TestImage.js +26 -0
  20. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/TestImage.js.map +1 -0
  21. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/utils/gifUtils.d.ts +31 -0
  22. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/utils/gifUtils.d.ts.map +1 -0
  23. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/utils/gifUtils.js +62 -0
  24. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/utils/gifUtils.js.map +1 -0
  25. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.d.ts +2 -2
  26. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.d.ts.map +1 -1
  27. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.js +63 -58
  28. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.js.map +1 -1
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/extensions/ImageBlock/utils/gifUtils.ts"],"sourcesContent":["/**\r\n * Utility functions for GIF handling\r\n */\r\n\r\n/**\r\n * Checks if a URL or file path points to a GIF file\r\n * @param src - The source URL or file path\r\n * @returns true if the source is a GIF file\r\n */\r\nexport const isGifFile = (src: string): boolean => {\r\n if (!src) return false\r\n\r\n // Check file extension\r\n const extension = src.toLowerCase().split('.').pop()\r\n if (extension === 'gif') {\r\n return true\r\n }\r\n\r\n // Check for GIF in URL path (even without extension)\r\n const urlPath = src.toLowerCase()\r\n if (urlPath.includes('.gif') || urlPath.includes('gif')) {\r\n return true\r\n }\r\n\r\n return false\r\n}\r\n\r\n/**\r\n * Checks if a URL is a data URL containing a GIF\r\n * @param src - The source URL\r\n * @returns true if the source is a data URL with GIF data\r\n */\r\nexport const isGifDataUrl = (src: string): boolean => {\r\n if (!src || !src.startsWith('data:')) return false\r\n\r\n // Check for GIF MIME type in data URL\r\n return src.includes('data:image/gif') || src.includes('image/gif')\r\n}\r\n\r\n/**\r\n * Determines if an image source should be rendered as a GIF\r\n * @param src - The image source URL\r\n * @returns true if the source should be rendered as a GIF\r\n */\r\nexport const shouldRenderAsGif = (src: string): boolean => {\r\n return isGifFile(src) || isGifDataUrl(src)\r\n}\r\n\r\n/**\r\n * Extracts dimensions from a GIF source for proper canvas sizing\r\n * @param src - The GIF source URL\r\n * @returns Promise resolving to width and height, or null if extraction fails\r\n */\r\nexport const getGifDimensions = async (\r\n src: string,\r\n): Promise<{ width: number; height: number } | null> => {\r\n try {\r\n const response = await fetch(src)\r\n if (!response.ok) return null\r\n\r\n const arrayBuffer = await response.arrayBuffer()\r\n const uint8Array = new Uint8Array(arrayBuffer)\r\n\r\n // Parse GIF header to get dimensions\r\n if (uint8Array.length < 10) return null\r\n\r\n // GIF header: 6 bytes signature + 2 bytes width + 2 bytes height\r\n const width = uint8Array[6] | (uint8Array[7] << 8)\r\n const height = uint8Array[8] | (uint8Array[9] << 8)\r\n\r\n return { width, height }\r\n } catch (error) {\r\n console.warn('Failed to extract GIF dimensions:', error)\r\n return null\r\n }\r\n}\r\n"],"names":["isGifFile","src","extension","toLowerCase","split","pop","urlPath","includes","isGifDataUrl","startsWith","shouldRenderAsGif","getGifDimensions","response","fetch","ok","arrayBuffer","uint8Array","Uint8Array","length","width","height","error","console","warn"],"mappings":"AAAA;;CAEC,GAED;;;;CAIC,GACD,OAAO,MAAMA,YAAY,CAACC;IACxB,IAAI,CAACA,KAAK,OAAO;IAEjB,uBAAuB;IACvB,MAAMC,YAAYD,IAAIE,WAAW,GAAGC,KAAK,CAAC,KAAKC,GAAG;IAClD,IAAIH,cAAc,OAAO;QACvB,OAAO;IACT;IAEA,qDAAqD;IACrD,MAAMI,UAAUL,IAAIE,WAAW;IAC/B,IAAIG,QAAQC,QAAQ,CAAC,WAAWD,QAAQC,QAAQ,CAAC,QAAQ;QACvD,OAAO;IACT;IAEA,OAAO;AACT,EAAC;AAED;;;;CAIC,GACD,OAAO,MAAMC,eAAe,CAACP;IAC3B,IAAI,CAACA,OAAO,CAACA,IAAIQ,UAAU,CAAC,UAAU,OAAO;IAE7C,sCAAsC;IACtC,OAAOR,IAAIM,QAAQ,CAAC,qBAAqBN,IAAIM,QAAQ,CAAC;AACxD,EAAC;AAED;;;;CAIC,GACD,OAAO,MAAMG,oBAAoB,CAACT;IAChC,OAAOD,UAAUC,QAAQO,aAAaP;AACxC,EAAC;AAED;;;;CAIC,GACD,OAAO,MAAMU,mBAAmB,OAC9BV;IAEA,IAAI;QACF,MAAMW,WAAW,MAAMC,MAAMZ;QAC7B,IAAI,CAACW,SAASE,EAAE,EAAE,OAAO;QAEzB,MAAMC,cAAc,MAAMH,SAASG,WAAW;QAC9C,MAAMC,aAAa,IAAIC,WAAWF;QAElC,qCAAqC;QACrC,IAAIC,WAAWE,MAAM,GAAG,IAAI,OAAO;QAEnC,iEAAiE;QACjE,MAAMC,QAAQH,UAAU,CAAC,EAAE,GAAIA,UAAU,CAAC,EAAE,IAAI;QAChD,MAAMI,SAASJ,UAAU,CAAC,EAAE,GAAIA,UAAU,CAAC,EAAE,IAAI;QAEjD,OAAO;YAAEG;YAAOC;QAAO;IACzB,EAAE,OAAOC,OAAO;QACdC,QAAQC,IAAI,CAAC,qCAAqCF;QAClD,OAAO;IACT;AACF,EAAC"}
@@ -1,7 +1,7 @@
1
- import { Editor } from "@tiptap/react";
1
+ import { Editor } from '@tiptap/react';
2
2
  export type TextMenuProps = {
3
3
  editor: Editor;
4
- dir: "rtl" | "ltr" | "auto";
4
+ dir: 'rtl' | 'ltr' | 'auto';
5
5
  };
6
6
  export declare const TextMenu: ({ editor, dir }: TextMenuProps) => import("react").JSX.Element;
7
7
  //# sourceMappingURL=TextMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAc,MAAM,EAAE,MAAM,eAAe,CAAC;AAyCnD,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,QAAQ,oBAAqB,aAAa,gCAmNtD,CAAC"}
1
+ {"version":3,"file":"TextMenu.d.ts","sourceRoot":"","sources":["../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAc,MAAM,EAAE,MAAM,eAAe,CAAA;AAuClD,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAA;CAC5B,CAAA;AAED,eAAO,MAAM,QAAQ,oBAAqB,aAAa,gCAgNtD,CAAA"}
@@ -1,20 +1,20 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import * as Popover from "@radix-ui/react-popover";
3
- import { BubbleMenu } from "@tiptap/react";
4
- import { AlignCenter, AlignJustify, AlignLeft, AlignRight, Bold, Italic, MoveVertical, RemoveFormatting, Sparkles, Strikethrough, Subscript, Superscript, Underline } from "lucide-react";
5
- import { memo, useState } from "react";
6
- import { AIEditorPanel } from "../../panels/AIEditorPanel/AIEditorPanel.js";
7
- import { ColorPicker } from "../../panels/index.js";
8
- import { Icon } from "../../ui/Icon.js";
9
- import { Toolbar } from "../../ui/Toolbar.js";
10
- import { ContentTypePicker } from "./components/ContentTypePicker.js";
11
- import { EditLinkPopover } from "./components/EditLinkPopover.js";
2
+ import * as Popover from '@radix-ui/react-popover';
3
+ import { BubbleMenu } from '@tiptap/react';
4
+ import { AlignCenter, AlignJustify, AlignLeft, AlignRight, Bold, Italic, MoveVertical, RemoveFormatting, Sparkles, Strikethrough, Subscript, Superscript, Underline } from 'lucide-react';
5
+ import { memo, useState } from 'react';
6
+ import { AIEditorPanel } from '../../panels/AIEditorPanel/AIEditorPanel.js';
7
+ import { ColorPicker } from '../../panels/index.js';
8
+ import { Icon } from '../../ui/Icon.js';
9
+ import { Toolbar } from '../../ui/Toolbar.js';
10
+ import { ContentTypePicker } from './components/ContentTypePicker.js';
11
+ import { EditLinkPopover } from './components/EditLinkPopover.js';
12
12
  // import { FontFamilyPicker } from "./components/FontFamilyPicker.js";
13
- import { FontSizePicker } from "./components/FontSizePicker.js";
14
- import { useTextmenuCommands } from "./hooks/useTextmenuCommands.js";
15
- import { useTextmenuContentTypes } from "./hooks/useTextmenuContentTypes.js";
16
- import { useTextmenuStates } from "./hooks/useTextmenuStates.js";
17
- import i18next from "i18next";
13
+ import i18next from 'i18next';
14
+ import { FontSizePicker } from './components/FontSizePicker.js';
15
+ import { useTextmenuCommands } from './hooks/useTextmenuCommands.js';
16
+ import { useTextmenuContentTypes } from './hooks/useTextmenuContentTypes.js';
17
+ import { useTextmenuStates } from './hooks/useTextmenuStates.js';
18
18
  // We memorize the button so each button is not rerendered
19
19
  // on every editor state change
20
20
  const MemoButton = /*#__PURE__*/ memo(Toolbar.Button);
@@ -29,18 +29,23 @@ export const TextMenu = ({ editor, dir })=>{
29
29
  const [openAi, setOpenAi] = useState(false);
30
30
  return /*#__PURE__*/ _jsx(BubbleMenu, {
31
31
  tippyOptions: {
32
- placement: "auto",
33
- popperOptions: {
34
- placement: "auto"
35
- },
32
+ placement: 'top-start',
36
33
  onHide: ()=>{
37
34
  setOpenAi(false);
35
+ },
36
+ popperOptions: {
37
+ modifiers: [
38
+ {
39
+ name: 'flip',
40
+ enabled: false
41
+ }
42
+ ]
38
43
  }
39
44
  },
40
45
  editor: editor,
41
46
  pluginKey: "textMenu",
42
47
  shouldShow: states.shouldShow,
43
- updateDelay: 100,
48
+ updateDelay: 200,
44
49
  children: openAi ? /*#__PURE__*/ _jsx(AIEditorPanel, {
45
50
  editor: editor,
46
51
  onOpenChange: (value)=>{
@@ -57,7 +62,7 @@ export const TextMenu = ({ editor, dir })=>{
57
62
  icon: Sparkles,
58
63
  className: "mr-1"
59
64
  }),
60
- i18next.t("aiTools") || "AI Tools",
65
+ i18next.t('aiTools') || 'AI Tools',
61
66
  /*#__PURE__*/ _jsx("span", {
62
67
  className: "text-xs ml-1 px-2 py-1 bg-purple-100 text-purple-700 rounded-full dark:bg-purple-700 dark:text-purple-100 align-baseline",
63
68
  children: "Beta"
@@ -71,10 +76,10 @@ export const TextMenu = ({ editor, dir })=>{
71
76
  /*#__PURE__*/ _jsx(Toolbar.Divider, {}),
72
77
  /*#__PURE__*/ _jsx(MemoButton, {
73
78
  type: "button",
74
- tooltip: i18next.t("boldText") || "Bold",
79
+ tooltip: i18next.t('boldText') || 'Bold',
75
80
  tooltipShortcut: [
76
- "Mod",
77
- "B"
81
+ 'Mod',
82
+ 'B'
78
83
  ],
79
84
  onClick: commands.onBold,
80
85
  active: states.isBold,
@@ -84,10 +89,10 @@ export const TextMenu = ({ editor, dir })=>{
84
89
  }),
85
90
  /*#__PURE__*/ _jsx(MemoButton, {
86
91
  type: "button",
87
- tooltip: i18next.t("italicText") || "Italic",
92
+ tooltip: i18next.t('italicText') || 'Italic',
88
93
  tooltipShortcut: [
89
- "Mod",
90
- "I"
94
+ 'Mod',
95
+ 'I'
91
96
  ],
92
97
  onClick: commands.onItalic,
93
98
  active: states.isItalic,
@@ -97,10 +102,10 @@ export const TextMenu = ({ editor, dir })=>{
97
102
  }),
98
103
  /*#__PURE__*/ _jsx(MemoButton, {
99
104
  type: "button",
100
- tooltip: i18next.t("underlineText") || "Underline",
105
+ tooltip: i18next.t('underlineText') || 'Underline',
101
106
  tooltipShortcut: [
102
- "Mod",
103
- "U"
107
+ 'Mod',
108
+ 'U'
104
109
  ],
105
110
  onClick: commands.onUnderline,
106
111
  active: states.isUnderline,
@@ -117,7 +122,7 @@ export const TextMenu = ({ editor, dir })=>{
117
122
  asChild: true,
118
123
  children: /*#__PURE__*/ _jsx(MemoButton, {
119
124
  type: "button",
120
- tooltip: i18next.t("moreOptions", "More options"),
125
+ tooltip: i18next.t('moreOptions', 'More options'),
121
126
  children: /*#__PURE__*/ _jsx(Icon, {
122
127
  icon: MoveVertical
123
128
  })
@@ -130,10 +135,10 @@ export const TextMenu = ({ editor, dir })=>{
130
135
  children: [
131
136
  /*#__PURE__*/ _jsx(MemoButton, {
132
137
  type: "button",
133
- tooltip: i18next.t("subscript", "Subscript"),
138
+ tooltip: i18next.t('subscript', 'Subscript'),
134
139
  tooltipShortcut: [
135
- "Mod",
136
- "."
140
+ 'Mod',
141
+ '.'
137
142
  ],
138
143
  onClick: commands.onSubscript,
139
144
  active: states.isSubscript,
@@ -143,10 +148,10 @@ export const TextMenu = ({ editor, dir })=>{
143
148
  }),
144
149
  /*#__PURE__*/ _jsx(MemoButton, {
145
150
  type: "button",
146
- tooltip: i18next.t("superscript", "Superscript"),
151
+ tooltip: i18next.t('superscript', 'Superscript'),
147
152
  tooltipShortcut: [
148
- "Mod",
149
- ","
153
+ 'Mod',
154
+ ','
150
155
  ],
151
156
  onClick: commands.onSuperscript,
152
157
  active: states.isSuperscript,
@@ -157,11 +162,11 @@ export const TextMenu = ({ editor, dir })=>{
157
162
  /*#__PURE__*/ _jsx(Toolbar.Divider, {}),
158
163
  /*#__PURE__*/ _jsx(MemoButton, {
159
164
  type: "button",
160
- tooltip: i18next.t("alignLeft") || "Align left",
165
+ tooltip: i18next.t('alignLeft') || 'Align left',
161
166
  tooltipShortcut: [
162
- "Shift",
163
- "Mod",
164
- "L"
167
+ 'Shift',
168
+ 'Mod',
169
+ 'L'
165
170
  ],
166
171
  onClick: commands.onAlignLeft,
167
172
  active: states.isAlignLeft,
@@ -171,11 +176,11 @@ export const TextMenu = ({ editor, dir })=>{
171
176
  }),
172
177
  /*#__PURE__*/ _jsx(MemoButton, {
173
178
  type: "button",
174
- tooltip: i18next.t("alignCenter") || "Align center",
179
+ tooltip: i18next.t('alignCenter') || 'Align center',
175
180
  tooltipShortcut: [
176
- "Shift",
177
- "Mod",
178
- "E"
181
+ 'Shift',
182
+ 'Mod',
183
+ 'E'
179
184
  ],
180
185
  onClick: commands.onAlignCenter,
181
186
  active: states.isAlignCenter,
@@ -185,11 +190,11 @@ export const TextMenu = ({ editor, dir })=>{
185
190
  }),
186
191
  /*#__PURE__*/ _jsx(MemoButton, {
187
192
  type: "button",
188
- tooltip: i18next.t("alignRight", "Align right"),
193
+ tooltip: i18next.t('alignRight', 'Align right'),
189
194
  tooltipShortcut: [
190
- "Shift",
191
- "Mod",
192
- "R"
195
+ 'Shift',
196
+ 'Mod',
197
+ 'R'
193
198
  ],
194
199
  onClick: commands.onAlignRight,
195
200
  active: states.isAlignRight,
@@ -199,11 +204,11 @@ export const TextMenu = ({ editor, dir })=>{
199
204
  }),
200
205
  /*#__PURE__*/ _jsx(MemoButton, {
201
206
  type: "button",
202
- tooltip: i18next.t("alignJustify") || "Justify",
207
+ tooltip: i18next.t('alignJustify') || 'Justify',
203
208
  tooltipShortcut: [
204
- "Shift",
205
- "Mod",
206
- "J"
209
+ 'Shift',
210
+ 'Mod',
211
+ 'J'
207
212
  ],
208
213
  onClick: commands.onAlignJustify,
209
214
  active: states.isAlignJustify,
@@ -213,11 +218,11 @@ export const TextMenu = ({ editor, dir })=>{
213
218
  }),
214
219
  /*#__PURE__*/ _jsx(MemoButton, {
215
220
  type: "button",
216
- tooltip: i18next.t("strikethrough", "Strikethrough"),
221
+ tooltip: i18next.t('strikethrough', 'Strikethrough'),
217
222
  tooltipShortcut: [
218
- "Mod",
219
- "Shift",
220
- "S"
223
+ 'Mod',
224
+ 'Shift',
225
+ 'S'
221
226
  ],
222
227
  onClick: commands.onStrike,
223
228
  active: states.isStrike,
@@ -227,7 +232,7 @@ export const TextMenu = ({ editor, dir })=>{
227
232
  }),
228
233
  /*#__PURE__*/ _jsx(MemoButton, {
229
234
  type: "button",
230
- tooltip: i18next.t("clearFormatting") || "Clear Formatting",
235
+ tooltip: i18next.t('clearFormatting') || 'Clear Formatting',
231
236
  onClick: commands.onClearFormatting,
232
237
  children: /*#__PURE__*/ _jsx(Icon, {
233
238
  icon: RemoveFormatting
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.tsx"],"sourcesContent":["import * as Popover from \"@radix-ui/react-popover\";\r\nimport { BubbleMenu, Editor } from \"@tiptap/react\";\r\nimport {\r\n AlignCenter,\r\n AlignJustify,\r\n AlignLeft,\r\n AlignRight,\r\n Bold,\r\n Highlighter,\r\n Italic,\r\n MoveVertical,\r\n Palette,\r\n RemoveFormatting,\r\n Sparkles,\r\n Strikethrough,\r\n Subscript,\r\n Superscript,\r\n Underline,\r\n} from \"lucide-react\";\r\nimport { memo, useState } from \"react\";\r\nimport { AIEditorPanel } from \"../../panels/AIEditorPanel/AIEditorPanel.js\";\r\nimport { ColorPicker } from \"../../panels/index.js\";\r\nimport { Icon } from \"../../ui/Icon.js\";\r\nimport { Surface } from \"../../ui/Surface.js\";\r\nimport { Toolbar } from \"../../ui/Toolbar.js\";\r\nimport { ContentTypePicker } from \"./components/ContentTypePicker.js\";\r\nimport { EditLinkPopover } from \"./components/EditLinkPopover.js\";\r\n// import { FontFamilyPicker } from \"./components/FontFamilyPicker.js\";\r\nimport { FontSizePicker } from \"./components/FontSizePicker.js\";\r\nimport { useTextmenuCommands } from \"./hooks/useTextmenuCommands.js\";\r\nimport { useTextmenuContentTypes } from \"./hooks/useTextmenuContentTypes.js\";\r\nimport { useTextmenuStates } from \"./hooks/useTextmenuStates.js\";\r\nimport i18next from \"i18next\";\r\n\r\n// We memorize the button so each button is not rerendered\r\n// on every editor state change\r\nconst MemoButton = memo(Toolbar.Button);\r\nconst MemoColorPicker = memo(ColorPicker);\r\n// const MemoFontFamilyPicker = memo(FontFamilyPicker);\r\nconst MemoFontSizePicker = memo(FontSizePicker);\r\nconst MemoContentTypePicker = memo(ContentTypePicker);\r\n\r\nexport type TextMenuProps = {\r\n editor: Editor;\r\n dir: \"rtl\" | \"ltr\" | \"auto\";\r\n};\r\n\r\nexport const TextMenu = ({ editor, dir }: TextMenuProps) => {\r\n const commands = useTextmenuCommands(editor);\r\n const states = useTextmenuStates(editor);\r\n const blockOptions = useTextmenuContentTypes(editor);\r\n const [openAi, setOpenAi] = useState(false);\r\n\r\n return (\r\n <BubbleMenu\r\n tippyOptions={{\r\n placement: \"auto\",\r\n popperOptions: {\r\n placement: \"auto\",\r\n },\r\n onHide: () => {\r\n setOpenAi(false);\r\n },\r\n }}\r\n editor={editor}\r\n pluginKey=\"textMenu\"\r\n shouldShow={states.shouldShow}\r\n updateDelay={100}\r\n >\r\n {openAi ? (\r\n <AIEditorPanel\r\n editor={editor}\r\n onOpenChange={(value) => {\r\n setOpenAi(value);\r\n }}\r\n />\r\n ) : (\r\n <Toolbar.Wrapper>\r\n <Toolbar.Button\r\n className=\"text-purple-500 hover:text-purple-600 active:text-purple-600 dark:text-purple-400 dark:hover:text-purple-300 dark:active:text-purple-400\"\r\n activeClassname=\"text-purple-600 hover:text-purple-600 dark:text-purple-400 dark:hover:text-purple-200\"\r\n onClick={() => setOpenAi(true)}\r\n >\r\n <Icon icon={Sparkles} className=\"mr-1\" />\r\n {i18next.t(\"aiTools\") || \"AI Tools\"}\r\n\r\n <span className=\"text-xs ml-1 px-2 py-1 bg-purple-100 text-purple-700 rounded-full dark:bg-purple-700 dark:text-purple-100 align-baseline\">\r\n Beta\r\n </span>\r\n </Toolbar.Button>\r\n <Toolbar.Divider />\r\n\r\n <MemoContentTypePicker options={blockOptions} />\r\n {/* <MemoFontFamilyPicker\r\n onChange={commands.onSetFont}\r\n value={states.currentFont || \"\"}\r\n /> */}\r\n {/* <MemoFontSizePicker\r\n onChange={commands.onSetFontSize}\r\n value={states.currentSize || \"\"}\r\n /> */}\r\n <Toolbar.Divider />\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t(\"boldText\") || \"Bold\"}\r\n tooltipShortcut={[\"Mod\", \"B\"]}\r\n onClick={commands.onBold}\r\n active={states.isBold}\r\n >\r\n <Icon icon={Bold} />\r\n </MemoButton>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t(\"italicText\") || \"Italic\"}\r\n tooltipShortcut={[\"Mod\", \"I\"]}\r\n onClick={commands.onItalic}\r\n active={states.isItalic}\r\n >\r\n <Icon icon={Italic} />\r\n </MemoButton>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t(\"underlineText\") || \"Underline\"}\r\n tooltipShortcut={[\"Mod\", \"U\"]}\r\n onClick={commands.onUnderline}\r\n active={states.isUnderline}\r\n >\r\n <Icon icon={Underline} />\r\n </MemoButton>\r\n\r\n <EditLinkPopover onSetLink={commands.onLink} />\r\n {/* <Popover.Root>\r\n <Popover.Trigger asChild>\r\n <MemoButton\r\n type=\"button\"\r\n active={!!states.currentHighlight}\r\n tooltip={i18next.t(\"highlightText\", \"Highlight text\")}\r\n >\r\n <Icon icon={Highlighter} />\r\n </MemoButton>\r\n </Popover.Trigger>\r\n <Popover.Content side=\"top\" sideOffset={8} asChild>\r\n <Surface className=\"p-1\">\r\n <MemoColorPicker\r\n color={states.currentHighlight}\r\n onChange={commands.onChangeHighlight}\r\n onClear={commands.onClearHighlight}\r\n />\r\n </Surface>\r\n </Popover.Content>\r\n </Popover.Root> */}\r\n {/* <Popover.Root>\r\n <Popover.Trigger asChild>\r\n <MemoButton\r\n type=\"button\"\r\n active={!!states.currentColor}\r\n tooltip={i18next.t(\"textColor\") || \"Text color\"}\r\n >\r\n <Icon icon={Palette} />\r\n </MemoButton>\r\n </Popover.Trigger>\r\n <Popover.Content side=\"top\" sideOffset={8} asChild>\r\n <Surface className=\"p-1\">\r\n <MemoColorPicker\r\n color={states.currentColor}\r\n onChange={commands.onChangeColor}\r\n onClear={commands.onClearColor}\r\n />\r\n </Surface>\r\n </Popover.Content>\r\n </Popover.Root> */}\r\n <Popover.Root>\r\n <Popover.Trigger asChild>\r\n <MemoButton type=\"button\" tooltip={i18next.t(\"moreOptions\", \"More options\")}>\r\n <Icon icon={MoveVertical} />\r\n </MemoButton>\r\n </Popover.Trigger>\r\n <Popover.Content side=\"top\" asChild>\r\n <Toolbar.Wrapper>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t(\"subscript\", \"Subscript\")}\r\n tooltipShortcut={[\"Mod\", \".\"]}\r\n onClick={commands.onSubscript}\r\n active={states.isSubscript}\r\n >\r\n <Icon icon={Subscript} />\r\n </MemoButton>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t(\"superscript\", \"Superscript\")}\r\n tooltipShortcut={[\"Mod\", \",\"]}\r\n onClick={commands.onSuperscript}\r\n active={states.isSuperscript}\r\n >\r\n <Icon icon={Superscript} />\r\n </MemoButton>\r\n <Toolbar.Divider />\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t(\"alignLeft\") || \"Align left\"}\r\n tooltipShortcut={[\"Shift\", \"Mod\", \"L\"]}\r\n onClick={commands.onAlignLeft}\r\n active={states.isAlignLeft}\r\n >\r\n <Icon icon={AlignLeft} />\r\n </MemoButton>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t(\"alignCenter\") || \"Align center\"}\r\n tooltipShortcut={[\"Shift\", \"Mod\", \"E\"]}\r\n onClick={commands.onAlignCenter}\r\n active={states.isAlignCenter}\r\n >\r\n <Icon icon={AlignCenter} />\r\n </MemoButton>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t(\"alignRight\", \"Align right\")}\r\n tooltipShortcut={[\"Shift\", \"Mod\", \"R\"]}\r\n onClick={commands.onAlignRight}\r\n active={states.isAlignRight}\r\n >\r\n <Icon icon={AlignRight} />\r\n </MemoButton>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t(\"alignJustify\") || \"Justify\"}\r\n tooltipShortcut={[\"Shift\", \"Mod\", \"J\"]}\r\n onClick={commands.onAlignJustify}\r\n active={states.isAlignJustify}\r\n >\r\n <Icon icon={AlignJustify} />\r\n </MemoButton>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t(\"strikethrough\", \"Strikethrough\")}\r\n tooltipShortcut={[\"Mod\", \"Shift\", \"S\"]}\r\n onClick={commands.onStrike}\r\n active={states.isStrike}\r\n >\r\n <Icon icon={Strikethrough} />\r\n </MemoButton>\r\n\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t(\"clearFormatting\") || \"Clear Formatting\"}\r\n onClick={commands.onClearFormatting}\r\n >\r\n <Icon icon={RemoveFormatting} />\r\n </MemoButton>\r\n </Toolbar.Wrapper>\r\n </Popover.Content>\r\n </Popover.Root>\r\n </Toolbar.Wrapper>\r\n )}\r\n </BubbleMenu>\r\n );\r\n};\r\n"],"names":["Popover","BubbleMenu","AlignCenter","AlignJustify","AlignLeft","AlignRight","Bold","Italic","MoveVertical","RemoveFormatting","Sparkles","Strikethrough","Subscript","Superscript","Underline","memo","useState","AIEditorPanel","ColorPicker","Icon","Toolbar","ContentTypePicker","EditLinkPopover","FontSizePicker","useTextmenuCommands","useTextmenuContentTypes","useTextmenuStates","i18next","MemoButton","Button","MemoColorPicker","MemoFontSizePicker","MemoContentTypePicker","TextMenu","editor","dir","commands","states","blockOptions","openAi","setOpenAi","tippyOptions","placement","popperOptions","onHide","pluginKey","shouldShow","updateDelay","onOpenChange","value","Wrapper","className","activeClassname","onClick","icon","t","span","Divider","options","type","tooltip","tooltipShortcut","onBold","active","isBold","onItalic","isItalic","onUnderline","isUnderline","onSetLink","onLink","Root","Trigger","asChild","Content","side","onSubscript","isSubscript","onSuperscript","isSuperscript","onAlignLeft","isAlignLeft","onAlignCenter","isAlignCenter","onAlignRight","isAlignRight","onAlignJustify","isAlignJustify","onStrike","isStrike","onClearFormatting"],"mappings":";AAAA,YAAYA,aAAa,0BAA0B;AACnD,SAASC,UAAU,QAAgB,gBAAgB;AACnD,SACEC,WAAW,EACXC,YAAY,EACZC,SAAS,EACTC,UAAU,EACVC,IAAI,EAEJC,MAAM,EACNC,YAAY,EAEZC,gBAAgB,EAChBC,QAAQ,EACRC,aAAa,EACbC,SAAS,EACTC,WAAW,EACXC,SAAS,QACJ,eAAe;AACtB,SAASC,IAAI,EAAEC,QAAQ,QAAQ,QAAQ;AACvC,SAASC,aAAa,QAAQ,8CAA8C;AAC5E,SAASC,WAAW,QAAQ,wBAAwB;AACpD,SAASC,IAAI,QAAQ,mBAAmB;AAExC,SAASC,OAAO,QAAQ,sBAAsB;AAC9C,SAASC,iBAAiB,QAAQ,oCAAoC;AACtE,SAASC,eAAe,QAAQ,kCAAkC;AAClE,uEAAuE;AACvE,SAASC,cAAc,QAAQ,iCAAiC;AAChE,SAASC,mBAAmB,QAAQ,iCAAiC;AACrE,SAASC,uBAAuB,QAAQ,qCAAqC;AAC7E,SAASC,iBAAiB,QAAQ,+BAA+B;AACjE,OAAOC,aAAa,UAAU;AAE9B,0DAA0D;AAC1D,+BAA+B;AAC/B,MAAMC,2BAAab,KAAKK,QAAQS,MAAM;AACtC,MAAMC,gCAAkBf,KAAKG;AAC7B,uDAAuD;AACvD,MAAMa,mCAAqBhB,KAAKQ;AAChC,MAAMS,sCAAwBjB,KAAKM;AAOnC,OAAO,MAAMY,WAAW,CAAC,EAAEC,MAAM,EAAEC,GAAG,EAAiB;IACrD,MAAMC,WAAWZ,oBAAoBU;IACrC,MAAMG,SAASX,kBAAkBQ;IACjC,MAAMI,eAAeb,wBAAwBS;IAC7C,MAAM,CAACK,QAAQC,UAAU,GAAGxB,SAAS;IAErC,qBACE,KAACf;QACCwC,cAAc;YACZC,WAAW;YACXC,eAAe;gBACbD,WAAW;YACb;YACAE,QAAQ;gBACNJ,UAAU;YACZ;QACF;QACAN,QAAQA;QACRW,WAAU;QACVC,YAAYT,OAAOS,UAAU;QAC7BC,aAAa;kBAEZR,uBACC,KAACtB;YACCiB,QAAQA;YACRc,cAAc,CAACC;gBACbT,UAAUS;YACZ;2BAGF,MAAC7B,QAAQ8B,OAAO;;8BACd,MAAC9B,QAAQS,MAAM;oBACbsB,WAAU;oBACVC,iBAAgB;oBAChBC,SAAS,IAAMb,UAAU;;sCAEzB,KAACrB;4BAAKmC,MAAM5C;4BAAUyC,WAAU;;wBAC/BxB,QAAQ4B,CAAC,CAAC,cAAc;sCAEzB,KAACC;4BAAKL,WAAU;sCAA2H;;;;8BAI7I,KAAC/B,QAAQqC,OAAO;8BAEhB,KAACzB;oBAAsB0B,SAASpB;;8BAShC,KAAClB,QAAQqC,OAAO;8BAChB,KAAC7B;oBACC+B,MAAK;oBACLC,SAASjC,QAAQ4B,CAAC,CAAC,eAAe;oBAClCM,iBAAiB;wBAAC;wBAAO;qBAAI;oBAC7BR,SAASjB,SAAS0B,MAAM;oBACxBC,QAAQ1B,OAAO2B,MAAM;8BAErB,cAAA,KAAC7C;wBAAKmC,MAAMhD;;;8BAEd,KAACsB;oBACC+B,MAAK;oBACLC,SAASjC,QAAQ4B,CAAC,CAAC,iBAAiB;oBACpCM,iBAAiB;wBAAC;wBAAO;qBAAI;oBAC7BR,SAASjB,SAAS6B,QAAQ;oBAC1BF,QAAQ1B,OAAO6B,QAAQ;8BAEvB,cAAA,KAAC/C;wBAAKmC,MAAM/C;;;8BAEd,KAACqB;oBACC+B,MAAK;oBACLC,SAASjC,QAAQ4B,CAAC,CAAC,oBAAoB;oBACvCM,iBAAiB;wBAAC;wBAAO;qBAAI;oBAC7BR,SAASjB,SAAS+B,WAAW;oBAC7BJ,QAAQ1B,OAAO+B,WAAW;8BAE1B,cAAA,KAACjD;wBAAKmC,MAAMxC;;;8BAGd,KAACQ;oBAAgB+C,WAAWjC,SAASkC,MAAM;;8BAyC3C,MAACtE,QAAQuE,IAAI;;sCACX,KAACvE,QAAQwE,OAAO;4BAACC,OAAO;sCACtB,cAAA,KAAC7C;gCAAW+B,MAAK;gCAASC,SAASjC,QAAQ4B,CAAC,CAAC,eAAe;0CAC1D,cAAA,KAACpC;oCAAKmC,MAAM9C;;;;sCAGhB,KAACR,QAAQ0E,OAAO;4BAACC,MAAK;4BAAMF,OAAO;sCACjC,cAAA,MAACrD,QAAQ8B,OAAO;;kDACd,KAACtB;wCACC+B,MAAK;wCACLC,SAASjC,QAAQ4B,CAAC,CAAC,aAAa;wCAChCM,iBAAiB;4CAAC;4CAAO;yCAAI;wCAC7BR,SAASjB,SAASwC,WAAW;wCAC7Bb,QAAQ1B,OAAOwC,WAAW;kDAE1B,cAAA,KAAC1D;4CAAKmC,MAAM1C;;;kDAEd,KAACgB;wCACC+B,MAAK;wCACLC,SAASjC,QAAQ4B,CAAC,CAAC,eAAe;wCAClCM,iBAAiB;4CAAC;4CAAO;yCAAI;wCAC7BR,SAASjB,SAAS0C,aAAa;wCAC/Bf,QAAQ1B,OAAO0C,aAAa;kDAE5B,cAAA,KAAC5D;4CAAKmC,MAAMzC;;;kDAEd,KAACO,QAAQqC,OAAO;kDAChB,KAAC7B;wCACC+B,MAAK;wCACLC,SAASjC,QAAQ4B,CAAC,CAAC,gBAAgB;wCACnCM,iBAAiB;4CAAC;4CAAS;4CAAO;yCAAI;wCACtCR,SAASjB,SAAS4C,WAAW;wCAC7BjB,QAAQ1B,OAAO4C,WAAW;kDAE1B,cAAA,KAAC9D;4CAAKmC,MAAMlD;;;kDAEd,KAACwB;wCACC+B,MAAK;wCACLC,SAASjC,QAAQ4B,CAAC,CAAC,kBAAkB;wCACrCM,iBAAiB;4CAAC;4CAAS;4CAAO;yCAAI;wCACtCR,SAASjB,SAAS8C,aAAa;wCAC/BnB,QAAQ1B,OAAO8C,aAAa;kDAE5B,cAAA,KAAChE;4CAAKmC,MAAMpD;;;kDAEd,KAAC0B;wCACC+B,MAAK;wCACLC,SAASjC,QAAQ4B,CAAC,CAAC,cAAc;wCACjCM,iBAAiB;4CAAC;4CAAS;4CAAO;yCAAI;wCACtCR,SAASjB,SAASgD,YAAY;wCAC9BrB,QAAQ1B,OAAOgD,YAAY;kDAE3B,cAAA,KAAClE;4CAAKmC,MAAMjD;;;kDAEd,KAACuB;wCACC+B,MAAK;wCACLC,SAASjC,QAAQ4B,CAAC,CAAC,mBAAmB;wCACtCM,iBAAiB;4CAAC;4CAAS;4CAAO;yCAAI;wCACtCR,SAASjB,SAASkD,cAAc;wCAChCvB,QAAQ1B,OAAOkD,cAAc;kDAE7B,cAAA,KAACpE;4CAAKmC,MAAMnD;;;kDAEd,KAACyB;wCACC+B,MAAK;wCACLC,SAASjC,QAAQ4B,CAAC,CAAC,iBAAiB;wCACpCM,iBAAiB;4CAAC;4CAAO;4CAAS;yCAAI;wCACtCR,SAASjB,SAASoD,QAAQ;wCAC1BzB,QAAQ1B,OAAOoD,QAAQ;kDAEvB,cAAA,KAACtE;4CAAKmC,MAAM3C;;;kDAGd,KAACiB;wCACC+B,MAAK;wCACLC,SAASjC,QAAQ4B,CAAC,CAAC,sBAAsB;wCACzCF,SAASjB,SAASsD,iBAAiB;kDAEnC,cAAA,KAACvE;4CAAKmC,MAAM7C;;;;;;;;;;;AAS9B,EAAE"}
1
+ {"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.tsx"],"sourcesContent":["import * as Popover from '@radix-ui/react-popover'\r\nimport { BubbleMenu, Editor } from '@tiptap/react'\r\n\r\nimport {\r\n AlignCenter,\r\n AlignJustify,\r\n AlignLeft,\r\n AlignRight,\r\n Bold,\r\n Italic,\r\n MoveVertical,\r\n RemoveFormatting,\r\n Sparkles,\r\n Strikethrough,\r\n Subscript,\r\n Superscript,\r\n Underline,\r\n} from 'lucide-react'\r\nimport { memo, useState } from 'react'\r\nimport { AIEditorPanel } from '../../panels/AIEditorPanel/AIEditorPanel.js'\r\nimport { ColorPicker } from '../../panels/index.js'\r\nimport { Icon } from '../../ui/Icon.js'\r\nimport { Toolbar } from '../../ui/Toolbar.js'\r\nimport { ContentTypePicker } from './components/ContentTypePicker.js'\r\nimport { EditLinkPopover } from './components/EditLinkPopover.js'\r\n// import { FontFamilyPicker } from \"./components/FontFamilyPicker.js\";\r\nimport i18next from 'i18next'\r\nimport { FontSizePicker } from './components/FontSizePicker.js'\r\nimport { useTextmenuCommands } from './hooks/useTextmenuCommands.js'\r\nimport { useTextmenuContentTypes } from './hooks/useTextmenuContentTypes.js'\r\nimport { useTextmenuStates } from './hooks/useTextmenuStates.js'\r\n\r\n// We memorize the button so each button is not rerendered\r\n// on every editor state change\r\nconst MemoButton = memo(Toolbar.Button)\r\nconst MemoColorPicker = memo(ColorPicker)\r\n// const MemoFontFamilyPicker = memo(FontFamilyPicker);\r\nconst MemoFontSizePicker = memo(FontSizePicker)\r\nconst MemoContentTypePicker = memo(ContentTypePicker)\r\n\r\nexport type TextMenuProps = {\r\n editor: Editor\r\n dir: 'rtl' | 'ltr' | 'auto'\r\n}\r\n\r\nexport const TextMenu = ({ editor, dir }: TextMenuProps) => {\r\n const commands = useTextmenuCommands(editor)\r\n const states = useTextmenuStates(editor)\r\n const blockOptions = useTextmenuContentTypes(editor)\r\n const [openAi, setOpenAi] = useState(false)\r\n\r\n return (\r\n <BubbleMenu\r\n tippyOptions={{\r\n placement: 'top-start',\r\n onHide: () => {\r\n setOpenAi(false)\r\n },\r\n popperOptions: {\r\n modifiers: [{ name: 'flip', enabled: false }],\r\n },\r\n }}\r\n editor={editor}\r\n pluginKey=\"textMenu\"\r\n shouldShow={states.shouldShow}\r\n updateDelay={200}\r\n >\r\n {openAi ? (\r\n <AIEditorPanel\r\n editor={editor}\r\n onOpenChange={(value) => {\r\n setOpenAi(value)\r\n }}\r\n />\r\n ) : (\r\n <Toolbar.Wrapper>\r\n <Toolbar.Button\r\n className=\"text-purple-500 hover:text-purple-600 active:text-purple-600 dark:text-purple-400 dark:hover:text-purple-300 dark:active:text-purple-400\"\r\n activeClassname=\"text-purple-600 hover:text-purple-600 dark:text-purple-400 dark:hover:text-purple-200\"\r\n onClick={() => setOpenAi(true)}\r\n >\r\n <Icon icon={Sparkles} className=\"mr-1\" />\r\n {i18next.t('aiTools') || 'AI Tools'}\r\n <span className=\"text-xs ml-1 px-2 py-1 bg-purple-100 text-purple-700 rounded-full dark:bg-purple-700 dark:text-purple-100 align-baseline\">\r\n Beta\r\n </span>\r\n </Toolbar.Button>\r\n <Toolbar.Divider />\r\n <MemoContentTypePicker options={blockOptions} />\r\n {/* <MemoFontFamilyPicker\r\n onChange={commands.onSetFont}\r\n value={states.currentFont || \"\"}\r\n /> */}\r\n {/* <MemoFontSizePicker\r\n onChange={commands.onSetFontSize}\r\n value={states.currentSize || \"\"}\r\n /> */}\r\n <Toolbar.Divider />\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t('boldText') || 'Bold'}\r\n tooltipShortcut={['Mod', 'B']}\r\n onClick={commands.onBold}\r\n active={states.isBold}\r\n >\r\n <Icon icon={Bold} />\r\n </MemoButton>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t('italicText') || 'Italic'}\r\n tooltipShortcut={['Mod', 'I']}\r\n onClick={commands.onItalic}\r\n active={states.isItalic}\r\n >\r\n <Icon icon={Italic} />\r\n </MemoButton>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t('underlineText') || 'Underline'}\r\n tooltipShortcut={['Mod', 'U']}\r\n onClick={commands.onUnderline}\r\n active={states.isUnderline}\r\n >\r\n <Icon icon={Underline} />\r\n </MemoButton>\r\n <EditLinkPopover onSetLink={commands.onLink} />\r\n {/* <Popover.Root>\r\n <Popover.Trigger asChild>\r\n <MemoButton\r\n type=\"button\"\r\n active={!!states.currentHighlight}\r\n tooltip={i18next.t(\"highlightText\", \"Highlight text\")}\r\n >\r\n <Icon icon={Highlighter} />\r\n </MemoButton>\r\n </Popover.Trigger>\r\n <Popover.Content side=\"top\" sideOffset={8} asChild>\r\n <Surface className=\"p-1\">\r\n <MemoColorPicker\r\n color={states.currentHighlight}\r\n onChange={commands.onChangeHighlight}\r\n onClear={commands.onClearHighlight}\r\n />\r\n </Surface>\r\n </Popover.Content>\r\n </Popover.Root> */}\r\n {/* <Popover.Root>\r\n <Popover.Trigger asChild>\r\n <MemoButton\r\n type=\"button\"\r\n active={!!states.currentColor}\r\n tooltip={i18next.t(\"textColor\") || \"Text color\"}\r\n >\r\n <Icon icon={Palette} />\r\n </MemoButton>\r\n </Popover.Trigger>\r\n <Popover.Content side=\"top\" sideOffset={8} asChild>\r\n <Surface className=\"p-1\">\r\n <MemoColorPicker\r\n color={states.currentColor}\r\n onChange={commands.onChangeColor}\r\n onClear={commands.onClearColor}\r\n />\r\n </Surface>\r\n </Popover.Content>\r\n </Popover.Root> */}\r\n <Popover.Root>\r\n <Popover.Trigger asChild>\r\n <MemoButton type=\"button\" tooltip={i18next.t('moreOptions', 'More options')}>\r\n <Icon icon={MoveVertical} />\r\n </MemoButton>\r\n </Popover.Trigger>\r\n <Popover.Content side=\"top\" asChild>\r\n <Toolbar.Wrapper>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t('subscript', 'Subscript')}\r\n tooltipShortcut={['Mod', '.']}\r\n onClick={commands.onSubscript}\r\n active={states.isSubscript}\r\n >\r\n <Icon icon={Subscript} />\r\n </MemoButton>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t('superscript', 'Superscript')}\r\n tooltipShortcut={['Mod', ',']}\r\n onClick={commands.onSuperscript}\r\n active={states.isSuperscript}\r\n >\r\n <Icon icon={Superscript} />\r\n </MemoButton>\r\n <Toolbar.Divider />\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t('alignLeft') || 'Align left'}\r\n tooltipShortcut={['Shift', 'Mod', 'L']}\r\n onClick={commands.onAlignLeft}\r\n active={states.isAlignLeft}\r\n >\r\n <Icon icon={AlignLeft} />\r\n </MemoButton>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t('alignCenter') || 'Align center'}\r\n tooltipShortcut={['Shift', 'Mod', 'E']}\r\n onClick={commands.onAlignCenter}\r\n active={states.isAlignCenter}\r\n >\r\n <Icon icon={AlignCenter} />\r\n </MemoButton>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t('alignRight', 'Align right')}\r\n tooltipShortcut={['Shift', 'Mod', 'R']}\r\n onClick={commands.onAlignRight}\r\n active={states.isAlignRight}\r\n >\r\n <Icon icon={AlignRight} />\r\n </MemoButton>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t('alignJustify') || 'Justify'}\r\n tooltipShortcut={['Shift', 'Mod', 'J']}\r\n onClick={commands.onAlignJustify}\r\n active={states.isAlignJustify}\r\n >\r\n <Icon icon={AlignJustify} />\r\n </MemoButton>\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t('strikethrough', 'Strikethrough')}\r\n tooltipShortcut={['Mod', 'Shift', 'S']}\r\n onClick={commands.onStrike}\r\n active={states.isStrike}\r\n >\r\n <Icon icon={Strikethrough} />\r\n </MemoButton>\r\n\r\n <MemoButton\r\n type=\"button\"\r\n tooltip={i18next.t('clearFormatting') || 'Clear Formatting'}\r\n onClick={commands.onClearFormatting}\r\n >\r\n <Icon icon={RemoveFormatting} />\r\n </MemoButton>\r\n </Toolbar.Wrapper>\r\n </Popover.Content>\r\n </Popover.Root>\r\n </Toolbar.Wrapper>\r\n )}\r\n </BubbleMenu>\r\n )\r\n}\r\n"],"names":["Popover","BubbleMenu","AlignCenter","AlignJustify","AlignLeft","AlignRight","Bold","Italic","MoveVertical","RemoveFormatting","Sparkles","Strikethrough","Subscript","Superscript","Underline","memo","useState","AIEditorPanel","ColorPicker","Icon","Toolbar","ContentTypePicker","EditLinkPopover","i18next","FontSizePicker","useTextmenuCommands","useTextmenuContentTypes","useTextmenuStates","MemoButton","Button","MemoColorPicker","MemoFontSizePicker","MemoContentTypePicker","TextMenu","editor","dir","commands","states","blockOptions","openAi","setOpenAi","tippyOptions","placement","onHide","popperOptions","modifiers","name","enabled","pluginKey","shouldShow","updateDelay","onOpenChange","value","Wrapper","className","activeClassname","onClick","icon","t","span","Divider","options","type","tooltip","tooltipShortcut","onBold","active","isBold","onItalic","isItalic","onUnderline","isUnderline","onSetLink","onLink","Root","Trigger","asChild","Content","side","onSubscript","isSubscript","onSuperscript","isSuperscript","onAlignLeft","isAlignLeft","onAlignCenter","isAlignCenter","onAlignRight","isAlignRight","onAlignJustify","isAlignJustify","onStrike","isStrike","onClearFormatting"],"mappings":"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"}