payload-richtext-tiptap 0.0.158 → 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.
- package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/BlockquoteFigure.d.ts +1 -1
- package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/BlockquoteFigure.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/BlockquoteFigure.js +61 -15
- package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/BlockquoteFigure.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/Quote/Quote.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/Quote/Quote.js +1 -3
- package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/Quote/Quote.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/QuoteCaption/QuoteCaption.js.map +1 -1
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/GifPlayer.d.ts +12 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/GifPlayer.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/GifPlayer.js +152 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/GifPlayer.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/SmartImage.d.ts +12 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/SmartImage.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/SmartImage.js +55 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/SmartImage.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/TestImage.d.ts +4 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/TestImage.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/TestImage.js +26 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/TestImage.js.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/utils/gifUtils.d.ts +31 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/utils/gifUtils.d.ts.map +1 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/utils/gifUtils.js +62 -0
- package/dist/src/fields/TiptapEditor/extensions/ImageBlock/utils/gifUtils.js.map +1 -0
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.d.ts +2 -2
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.d.ts.map +1 -1
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.js +55 -61
- package/dist/src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- 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
|
|
1
|
+
import { Editor } from '@tiptap/react';
|
|
2
2
|
export type TextMenuProps = {
|
|
3
3
|
editor: Editor;
|
|
4
|
-
dir:
|
|
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,
|
|
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
|
|
3
|
-
import { BubbleMenu } from
|
|
4
|
-
import { AlignCenter, AlignJustify, AlignLeft, AlignRight, Bold, Italic, MoveVertical, RemoveFormatting, Sparkles, Strikethrough, Subscript, Superscript, Underline } from
|
|
5
|
-
import { memo, useState } from
|
|
6
|
-
import { AIEditorPanel } from
|
|
7
|
-
import { ColorPicker } from
|
|
8
|
-
import { Icon } from
|
|
9
|
-
import { Toolbar } from
|
|
10
|
-
import { ContentTypePicker } from
|
|
11
|
-
import { EditLinkPopover } from
|
|
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
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import
|
|
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,14 +29,14 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
29
29
|
const [openAi, setOpenAi] = useState(false);
|
|
30
30
|
return /*#__PURE__*/ _jsx(BubbleMenu, {
|
|
31
31
|
tippyOptions: {
|
|
32
|
-
placement:
|
|
32
|
+
placement: 'top-start',
|
|
33
33
|
onHide: ()=>{
|
|
34
34
|
setOpenAi(false);
|
|
35
35
|
},
|
|
36
36
|
popperOptions: {
|
|
37
37
|
modifiers: [
|
|
38
38
|
{
|
|
39
|
-
name:
|
|
39
|
+
name: 'flip',
|
|
40
40
|
enabled: false
|
|
41
41
|
}
|
|
42
42
|
]
|
|
@@ -53,12 +53,6 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
53
53
|
}
|
|
54
54
|
}) : /*#__PURE__*/ _jsxs(Toolbar.Wrapper, {
|
|
55
55
|
children: [
|
|
56
|
-
/*#__PURE__*/ _jsx(Toolbar.Button, {
|
|
57
|
-
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",
|
|
58
|
-
activeClassname: "text-purple-600 hover:text-purple-600 dark:text-purple-400 dark:hover:text-purple-200",
|
|
59
|
-
onClick: ()=>setOpenAi(true),
|
|
60
|
-
children: "1"
|
|
61
|
-
}),
|
|
62
56
|
/*#__PURE__*/ _jsxs(Toolbar.Button, {
|
|
63
57
|
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",
|
|
64
58
|
activeClassname: "text-purple-600 hover:text-purple-600 dark:text-purple-400 dark:hover:text-purple-200",
|
|
@@ -68,7 +62,7 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
68
62
|
icon: Sparkles,
|
|
69
63
|
className: "mr-1"
|
|
70
64
|
}),
|
|
71
|
-
i18next.t(
|
|
65
|
+
i18next.t('aiTools') || 'AI Tools',
|
|
72
66
|
/*#__PURE__*/ _jsx("span", {
|
|
73
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",
|
|
74
68
|
children: "Beta"
|
|
@@ -82,10 +76,10 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
82
76
|
/*#__PURE__*/ _jsx(Toolbar.Divider, {}),
|
|
83
77
|
/*#__PURE__*/ _jsx(MemoButton, {
|
|
84
78
|
type: "button",
|
|
85
|
-
tooltip: i18next.t(
|
|
79
|
+
tooltip: i18next.t('boldText') || 'Bold',
|
|
86
80
|
tooltipShortcut: [
|
|
87
|
-
|
|
88
|
-
|
|
81
|
+
'Mod',
|
|
82
|
+
'B'
|
|
89
83
|
],
|
|
90
84
|
onClick: commands.onBold,
|
|
91
85
|
active: states.isBold,
|
|
@@ -95,10 +89,10 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
95
89
|
}),
|
|
96
90
|
/*#__PURE__*/ _jsx(MemoButton, {
|
|
97
91
|
type: "button",
|
|
98
|
-
tooltip: i18next.t(
|
|
92
|
+
tooltip: i18next.t('italicText') || 'Italic',
|
|
99
93
|
tooltipShortcut: [
|
|
100
|
-
|
|
101
|
-
|
|
94
|
+
'Mod',
|
|
95
|
+
'I'
|
|
102
96
|
],
|
|
103
97
|
onClick: commands.onItalic,
|
|
104
98
|
active: states.isItalic,
|
|
@@ -108,10 +102,10 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
108
102
|
}),
|
|
109
103
|
/*#__PURE__*/ _jsx(MemoButton, {
|
|
110
104
|
type: "button",
|
|
111
|
-
tooltip: i18next.t(
|
|
105
|
+
tooltip: i18next.t('underlineText') || 'Underline',
|
|
112
106
|
tooltipShortcut: [
|
|
113
|
-
|
|
114
|
-
|
|
107
|
+
'Mod',
|
|
108
|
+
'U'
|
|
115
109
|
],
|
|
116
110
|
onClick: commands.onUnderline,
|
|
117
111
|
active: states.isUnderline,
|
|
@@ -128,7 +122,7 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
128
122
|
asChild: true,
|
|
129
123
|
children: /*#__PURE__*/ _jsx(MemoButton, {
|
|
130
124
|
type: "button",
|
|
131
|
-
tooltip: i18next.t(
|
|
125
|
+
tooltip: i18next.t('moreOptions', 'More options'),
|
|
132
126
|
children: /*#__PURE__*/ _jsx(Icon, {
|
|
133
127
|
icon: MoveVertical
|
|
134
128
|
})
|
|
@@ -141,10 +135,10 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
141
135
|
children: [
|
|
142
136
|
/*#__PURE__*/ _jsx(MemoButton, {
|
|
143
137
|
type: "button",
|
|
144
|
-
tooltip: i18next.t(
|
|
138
|
+
tooltip: i18next.t('subscript', 'Subscript'),
|
|
145
139
|
tooltipShortcut: [
|
|
146
|
-
|
|
147
|
-
|
|
140
|
+
'Mod',
|
|
141
|
+
'.'
|
|
148
142
|
],
|
|
149
143
|
onClick: commands.onSubscript,
|
|
150
144
|
active: states.isSubscript,
|
|
@@ -154,10 +148,10 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
154
148
|
}),
|
|
155
149
|
/*#__PURE__*/ _jsx(MemoButton, {
|
|
156
150
|
type: "button",
|
|
157
|
-
tooltip: i18next.t(
|
|
151
|
+
tooltip: i18next.t('superscript', 'Superscript'),
|
|
158
152
|
tooltipShortcut: [
|
|
159
|
-
|
|
160
|
-
|
|
153
|
+
'Mod',
|
|
154
|
+
','
|
|
161
155
|
],
|
|
162
156
|
onClick: commands.onSuperscript,
|
|
163
157
|
active: states.isSuperscript,
|
|
@@ -168,11 +162,11 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
168
162
|
/*#__PURE__*/ _jsx(Toolbar.Divider, {}),
|
|
169
163
|
/*#__PURE__*/ _jsx(MemoButton, {
|
|
170
164
|
type: "button",
|
|
171
|
-
tooltip: i18next.t(
|
|
165
|
+
tooltip: i18next.t('alignLeft') || 'Align left',
|
|
172
166
|
tooltipShortcut: [
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
167
|
+
'Shift',
|
|
168
|
+
'Mod',
|
|
169
|
+
'L'
|
|
176
170
|
],
|
|
177
171
|
onClick: commands.onAlignLeft,
|
|
178
172
|
active: states.isAlignLeft,
|
|
@@ -182,11 +176,11 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
182
176
|
}),
|
|
183
177
|
/*#__PURE__*/ _jsx(MemoButton, {
|
|
184
178
|
type: "button",
|
|
185
|
-
tooltip: i18next.t(
|
|
179
|
+
tooltip: i18next.t('alignCenter') || 'Align center',
|
|
186
180
|
tooltipShortcut: [
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
181
|
+
'Shift',
|
|
182
|
+
'Mod',
|
|
183
|
+
'E'
|
|
190
184
|
],
|
|
191
185
|
onClick: commands.onAlignCenter,
|
|
192
186
|
active: states.isAlignCenter,
|
|
@@ -196,11 +190,11 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
196
190
|
}),
|
|
197
191
|
/*#__PURE__*/ _jsx(MemoButton, {
|
|
198
192
|
type: "button",
|
|
199
|
-
tooltip: i18next.t(
|
|
193
|
+
tooltip: i18next.t('alignRight', 'Align right'),
|
|
200
194
|
tooltipShortcut: [
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
195
|
+
'Shift',
|
|
196
|
+
'Mod',
|
|
197
|
+
'R'
|
|
204
198
|
],
|
|
205
199
|
onClick: commands.onAlignRight,
|
|
206
200
|
active: states.isAlignRight,
|
|
@@ -210,11 +204,11 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
210
204
|
}),
|
|
211
205
|
/*#__PURE__*/ _jsx(MemoButton, {
|
|
212
206
|
type: "button",
|
|
213
|
-
tooltip: i18next.t(
|
|
207
|
+
tooltip: i18next.t('alignJustify') || 'Justify',
|
|
214
208
|
tooltipShortcut: [
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
209
|
+
'Shift',
|
|
210
|
+
'Mod',
|
|
211
|
+
'J'
|
|
218
212
|
],
|
|
219
213
|
onClick: commands.onAlignJustify,
|
|
220
214
|
active: states.isAlignJustify,
|
|
@@ -224,11 +218,11 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
224
218
|
}),
|
|
225
219
|
/*#__PURE__*/ _jsx(MemoButton, {
|
|
226
220
|
type: "button",
|
|
227
|
-
tooltip: i18next.t(
|
|
221
|
+
tooltip: i18next.t('strikethrough', 'Strikethrough'),
|
|
228
222
|
tooltipShortcut: [
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
223
|
+
'Mod',
|
|
224
|
+
'Shift',
|
|
225
|
+
'S'
|
|
232
226
|
],
|
|
233
227
|
onClick: commands.onStrike,
|
|
234
228
|
active: states.isStrike,
|
|
@@ -238,7 +232,7 @@ export const TextMenu = ({ editor, dir })=>{
|
|
|
238
232
|
}),
|
|
239
233
|
/*#__PURE__*/ _jsx(MemoButton, {
|
|
240
234
|
type: "button",
|
|
241
|
-
tooltip: i18next.t(
|
|
235
|
+
tooltip: i18next.t('clearFormatting') || 'Clear Formatting',
|
|
242
236
|
onClick: commands.onClearFormatting,
|
|
243
237
|
children: /*#__PURE__*/ _jsx(Icon, {
|
|
244
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\n\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: \"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 1\r\n </Toolbar.Button>\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 <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\r\n type=\"button\"\r\n tooltip={i18next.t(\"moreOptions\", \"More options\")}\r\n >\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","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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"}
|
|
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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"}
|