@andreagiugni/tailwind-dashboard-ui 0.5.2 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/{Editor-uOYxR3HX.d.cts → Editor-CHBOfOWf.d.cts} +1 -1
- package/dist/{Editor-uOYxR3HX.d.ts → Editor-CHBOfOWf.d.ts} +1 -1
- package/dist/{chunk-4OETC46A.js → chunk-DXUWFHPF.js} +31 -3
- package/dist/chunk-DXUWFHPF.js.map +1 -0
- package/dist/{chunk-W7SNEBD7.cjs → chunk-S4ADL5B7.cjs} +33 -3
- package/dist/chunk-S4ADL5B7.cjs.map +1 -0
- package/dist/components/Editor/Editor.cjs +2 -2
- package/dist/components/Editor/Editor.d.cts +1 -1
- package/dist/components/Editor/Editor.d.ts +1 -1
- package/dist/components/Editor/Editor.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/package.json +11 -1
- package/dist/chunk-4OETC46A.js.map +0 -1
- package/dist/chunk-W7SNEBD7.cjs.map +0 -1
package/README.md
CHANGED
|
@@ -32,13 +32,13 @@ data-viz component:
|
|
|
32
32
|
| `BarChart`, `LineChart` | `apexcharts`, `react-apexcharts` |
|
|
33
33
|
| `Calendar` | `@fullcalendar/core`, `@fullcalendar/react`, `@fullcalendar/daygrid`, `@fullcalendar/timegrid`, `@fullcalendar/list`, `@fullcalendar/interaction` |
|
|
34
34
|
| `CountryMap` | `@react-jvectormap/core`, `@react-jvectormap/world` |
|
|
35
|
-
| `Editor` (WYSIWYG) | `@tiptap/react`, `@tiptap/pm`, `@tiptap/starter-kit`, `@tiptap/extension-link`, `@tiptap/extension-placeholder` |
|
|
35
|
+
| `Editor` (WYSIWYG) | `@tiptap/react`, `@tiptap/pm`, `@tiptap/starter-kit`, `@tiptap/extension-link`, `@tiptap/extension-placeholder`, `@tiptap/extension-superscript`, `@tiptap/extension-subscript` |
|
|
36
36
|
|
|
37
37
|
Install only the ones for the components you use, e.g.:
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
40
|
npm i apexcharts react-apexcharts # for BarChart / LineChart
|
|
41
|
-
npm i @tiptap/react @tiptap/pm @tiptap/starter-kit @tiptap/extension-link @tiptap/extension-placeholder # for Editor
|
|
41
|
+
npm i @tiptap/react @tiptap/pm @tiptap/starter-kit @tiptap/extension-link @tiptap/extension-placeholder @tiptap/extension-superscript @tiptap/extension-subscript # for Editor
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
> **SSR note:** the data-viz components and the `Editor` touch `window`/the DOM at render time.
|
|
@@ -226,8 +226,8 @@ in [Peer dependencies](#peer-dependencies)).
|
|
|
226
226
|
|
|
227
227
|
The `Editor` is a Tiptap-powered rich-text editor with a fully customizable toolbar. Pass an
|
|
228
228
|
ordered `toolbar` array of built-in tool ids (`"bold" | "italic" | "strike" | "code" |
|
|
229
|
-
"
|
|
230
|
-
"codeBlock" | "link" | "undo" | "redo" | "divider"`) or custom `{ id, icon, title, onClick,
|
|
229
|
+
"superscript" | "subscript" | "heading1" | "heading2" | "heading3" | "bulletList" |
|
|
230
|
+
"orderedList" | "blockquote" | "codeBlock" | "link" | "undo" | "redo" | "divider"`) or custom `{ id, icon, title, onClick,
|
|
231
231
|
isActive? }` button objects. Set `editable={false}` for a read-only view (toolbar hidden).
|
|
232
232
|
|
|
233
233
|
```tsx
|
|
@@ -12,7 +12,7 @@ interface ColorOverrideProps {
|
|
|
12
12
|
declare function styleOverride({ bgColor, textColor, borderColor, }: ColorOverrideProps): CSSProperties;
|
|
13
13
|
|
|
14
14
|
/** Built-in toolbar tool ids. */
|
|
15
|
-
type ToolbarItemId = "bold" | "italic" | "strike" | "code" | "heading1" | "heading2" | "heading3" | "bulletList" | "orderedList" | "blockquote" | "codeBlock" | "link" | "undo" | "redo" | "divider";
|
|
15
|
+
type ToolbarItemId = "bold" | "italic" | "strike" | "code" | "superscript" | "subscript" | "heading1" | "heading2" | "heading3" | "bulletList" | "orderedList" | "blockquote" | "codeBlock" | "link" | "undo" | "redo" | "divider";
|
|
16
16
|
/** A fully custom toolbar button. */
|
|
17
17
|
interface CustomToolbarItem {
|
|
18
18
|
id: string;
|
|
@@ -12,7 +12,7 @@ interface ColorOverrideProps {
|
|
|
12
12
|
declare function styleOverride({ bgColor, textColor, borderColor, }: ColorOverrideProps): CSSProperties;
|
|
13
13
|
|
|
14
14
|
/** Built-in toolbar tool ids. */
|
|
15
|
-
type ToolbarItemId = "bold" | "italic" | "strike" | "code" | "heading1" | "heading2" | "heading3" | "bulletList" | "orderedList" | "blockquote" | "codeBlock" | "link" | "undo" | "redo" | "divider";
|
|
15
|
+
type ToolbarItemId = "bold" | "italic" | "strike" | "code" | "superscript" | "subscript" | "heading1" | "heading2" | "heading3" | "bulletList" | "orderedList" | "blockquote" | "codeBlock" | "link" | "undo" | "redo" | "divider";
|
|
16
16
|
/** A fully custom toolbar button. */
|
|
17
17
|
interface CustomToolbarItem {
|
|
18
18
|
id: string;
|
|
@@ -5,6 +5,8 @@ import { useEditor, EditorContent } from '@tiptap/react';
|
|
|
5
5
|
import StarterKit from '@tiptap/starter-kit';
|
|
6
6
|
import Link from '@tiptap/extension-link';
|
|
7
7
|
import Placeholder from '@tiptap/extension-placeholder';
|
|
8
|
+
import Superscript from '@tiptap/extension-superscript';
|
|
9
|
+
import Subscript from '@tiptap/extension-subscript';
|
|
8
10
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
9
11
|
|
|
10
12
|
var base = {
|
|
@@ -91,11 +93,23 @@ var RedoIcon = () => /* @__PURE__ */ jsxs("svg", { ...base, children: [
|
|
|
91
93
|
/* @__PURE__ */ jsx("path", { d: "M21 7v6h-6" }),
|
|
92
94
|
/* @__PURE__ */ jsx("path", { d: "M21 13a9 9 0 1 1-3-7.7L21 8" })
|
|
93
95
|
] });
|
|
96
|
+
var SuperscriptIcon = () => /* @__PURE__ */ jsxs("svg", { ...base, children: [
|
|
97
|
+
/* @__PURE__ */ jsx("path", { d: "m4 19 8-10" }),
|
|
98
|
+
/* @__PURE__ */ jsx("path", { d: "m12 19-8-10" }),
|
|
99
|
+
/* @__PURE__ */ jsx("path", { d: "M20 9h-4c0-1.5.44-2 1.5-2.5S20 5.6 20 4.5C20 3.7 19.3 3 18.5 3S17 3.7 17 4.5" })
|
|
100
|
+
] });
|
|
101
|
+
var SubscriptIcon = () => /* @__PURE__ */ jsxs("svg", { ...base, children: [
|
|
102
|
+
/* @__PURE__ */ jsx("path", { d: "m4 5 8 10" }),
|
|
103
|
+
/* @__PURE__ */ jsx("path", { d: "m12 5-8 10" }),
|
|
104
|
+
/* @__PURE__ */ jsx("path", { d: "M20 21h-4c0-1.5.44-2 1.5-2.5S20 17.6 20 16.5c0-.8-.7-1.5-1.5-1.5s-1.5.7-1.5 1.5" })
|
|
105
|
+
] });
|
|
94
106
|
var DEFAULT_TOOLBAR = [
|
|
95
107
|
"bold",
|
|
96
108
|
"italic",
|
|
97
109
|
"strike",
|
|
98
110
|
"code",
|
|
111
|
+
"superscript",
|
|
112
|
+
"subscript",
|
|
99
113
|
"divider",
|
|
100
114
|
"heading1",
|
|
101
115
|
"heading2",
|
|
@@ -136,6 +150,18 @@ var BUILTINS = {
|
|
|
136
150
|
onClick: (e) => e.chain().focus().toggleCode().run(),
|
|
137
151
|
isActive: (e) => e.isActive("code")
|
|
138
152
|
},
|
|
153
|
+
superscript: {
|
|
154
|
+
icon: /* @__PURE__ */ jsx(SuperscriptIcon, {}),
|
|
155
|
+
title: "Superscript",
|
|
156
|
+
onClick: (e) => e.chain().focus().toggleSuperscript().run(),
|
|
157
|
+
isActive: (e) => e.isActive("superscript")
|
|
158
|
+
},
|
|
159
|
+
subscript: {
|
|
160
|
+
icon: /* @__PURE__ */ jsx(SubscriptIcon, {}),
|
|
161
|
+
title: "Subscript",
|
|
162
|
+
onClick: (e) => e.chain().focus().toggleSubscript().run(),
|
|
163
|
+
isActive: (e) => e.isActive("subscript")
|
|
164
|
+
},
|
|
139
165
|
heading1: {
|
|
140
166
|
icon: /* @__PURE__ */ jsx(Heading1Icon, {}),
|
|
141
167
|
title: "Heading 1",
|
|
@@ -234,7 +260,9 @@ var Editor = ({
|
|
|
234
260
|
extensions: [
|
|
235
261
|
StarterKit,
|
|
236
262
|
Link.configure({ openOnClick: false }),
|
|
237
|
-
Placeholder.configure({ placeholder })
|
|
263
|
+
Placeholder.configure({ placeholder }),
|
|
264
|
+
Superscript,
|
|
265
|
+
Subscript
|
|
238
266
|
],
|
|
239
267
|
content,
|
|
240
268
|
editable,
|
|
@@ -349,5 +377,5 @@ var Editor = ({
|
|
|
349
377
|
};
|
|
350
378
|
|
|
351
379
|
export { Editor };
|
|
352
|
-
//# sourceMappingURL=chunk-
|
|
353
|
-
//# sourceMappingURL=chunk-
|
|
380
|
+
//# sourceMappingURL=chunk-DXUWFHPF.js.map
|
|
381
|
+
//# sourceMappingURL=chunk-DXUWFHPF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Editor/icons.tsx","../src/components/Editor/Editor.tsx"],"names":["jsx","editor","jsxs","active"],"mappings":"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","file":"chunk-DXUWFHPF.js","sourcesContent":["import React from \"react\";\n\n/**\n * Small inline stroke icons (16–18px) for the editor toolbar.\n * They inherit color via `stroke=\"currentColor\"` so the active/inactive\n * button states drive their appearance.\n */\n\nconst base = {\n width: 18,\n height: 18,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n xmlns: \"http://www.w3.org/2000/svg\",\n};\n\nexport const BoldIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M6 4h7a4 4 0 0 1 0 8H6z\" />\n <path d=\"M6 12h8a4 4 0 0 1 0 8H6z\" />\n </svg>\n);\n\nexport const ItalicIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"19\" y1=\"4\" x2=\"10\" y2=\"4\" />\n <line x1=\"14\" y1=\"20\" x2=\"5\" y2=\"20\" />\n <line x1=\"15\" y1=\"4\" x2=\"9\" y2=\"20\" />\n </svg>\n);\n\nexport const StrikeIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M16 4H9a3 3 0 0 0-2.83 4\" />\n <path d=\"M14 12a4 4 0 0 1 0 8H6\" />\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" />\n </svg>\n);\n\nexport const CodeIcon: React.FC = () => (\n <svg {...base}>\n <polyline points=\"16 18 22 12 16 6\" />\n <polyline points=\"8 6 2 12 8 18\" />\n </svg>\n);\n\nexport const Heading1Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 12l3-2v8\" />\n </svg>\n);\n\nexport const Heading2Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 10c2 0 3 1 3 2.5S18 15 17 16l-2 2h5\" />\n </svg>\n);\n\nexport const Heading3Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 10c2.5-1 3.5 1 2.5 2c1 1 0.5 4-2.5 3\" />\n </svg>\n);\n\nexport const BulletListIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"9\" y1=\"6\" x2=\"20\" y2=\"6\" />\n <line x1=\"9\" y1=\"12\" x2=\"20\" y2=\"12\" />\n <line x1=\"9\" y1=\"18\" x2=\"20\" y2=\"18\" />\n <circle cx=\"4\" cy=\"6\" r=\"1\" />\n <circle cx=\"4\" cy=\"12\" r=\"1\" />\n <circle cx=\"4\" cy=\"18\" r=\"1\" />\n </svg>\n);\n\nexport const OrderedListIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"10\" y1=\"6\" x2=\"20\" y2=\"6\" />\n <line x1=\"10\" y1=\"12\" x2=\"20\" y2=\"12\" />\n <line x1=\"10\" y1=\"18\" x2=\"20\" y2=\"18\" />\n <path d=\"M4 6V3.5L3 4\" />\n <path d=\"M3 12h2l-2 3h2\" />\n <path d=\"M3 17h2v3H3\" />\n </svg>\n);\n\nexport const BlockquoteIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M3 21c3 0 7-1 7-8V5H3v7h4\" />\n <path d=\"M14 21c3 0 7-1 7-8V5h-7v7h4\" />\n </svg>\n);\n\nexport const CodeBlockIcon: React.FC = () => (\n <svg {...base}>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" />\n <polyline points=\"9 9 7 12 9 15\" />\n <polyline points=\"15 9 17 12 15 15\" />\n </svg>\n);\n\nexport const LinkIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M10 13a5 5 0 0 0 7 0l3-3a5 5 0 0 0-7-7l-1 1\" />\n <path d=\"M14 11a5 5 0 0 0-7 0l-3 3a5 5 0 0 0 7 7l1-1\" />\n </svg>\n);\n\nexport const UndoIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M3 7v6h6\" />\n <path d=\"M3 13a9 9 0 1 0 3-7.7L3 8\" />\n </svg>\n);\n\nexport const RedoIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M21 7v6h-6\" />\n <path d=\"M21 13a9 9 0 1 1-3-7.7L21 8\" />\n </svg>\n);\n\nexport const SuperscriptIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"m4 19 8-10\" />\n <path d=\"m12 19-8-10\" />\n <path d=\"M20 9h-4c0-1.5.44-2 1.5-2.5S20 5.6 20 4.5C20 3.7 19.3 3 18.5 3S17 3.7 17 4.5\" />\n </svg>\n);\n\nexport const SubscriptIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"m4 5 8 10\" />\n <path d=\"m12 5-8 10\" />\n <path d=\"M20 21h-4c0-1.5.44-2 1.5-2.5S20 17.6 20 16.5c0-.8-.7-1.5-1.5-1.5s-1.5.7-1.5 1.5\" />\n </svg>\n);\n","\"use client\";\nimport React from \"react\";\nimport { useEditor, EditorContent, type Editor as TiptapEditor } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport Superscript from \"@tiptap/extension-superscript\";\nimport Subscript from \"@tiptap/extension-subscript\";\nimport { cn } from \"../../lib/cn\";\nimport { type ColorOverrideProps } from \"../../lib/styleOverride\";\nimport {\n BoldIcon,\n ItalicIcon,\n StrikeIcon,\n CodeIcon,\n Heading1Icon,\n Heading2Icon,\n Heading3Icon,\n BulletListIcon,\n OrderedListIcon,\n BlockquoteIcon,\n CodeBlockIcon,\n LinkIcon,\n UndoIcon,\n RedoIcon,\n SuperscriptIcon,\n SubscriptIcon,\n} from \"./icons\";\n\n/** Built-in toolbar tool ids. */\nexport type ToolbarItemId =\n | \"bold\"\n | \"italic\"\n | \"strike\"\n | \"code\"\n | \"superscript\"\n | \"subscript\"\n | \"heading1\"\n | \"heading2\"\n | \"heading3\"\n | \"bulletList\"\n | \"orderedList\"\n | \"blockquote\"\n | \"codeBlock\"\n | \"link\"\n | \"undo\"\n | \"redo\"\n | \"divider\";\n\n/** A fully custom toolbar button. */\nexport interface CustomToolbarItem {\n id: string;\n icon: React.ReactNode;\n title: string;\n onClick: (editor: TiptapEditor) => void;\n isActive?: (editor: TiptapEditor) => boolean;\n}\n\n/** A toolbar entry: either a built-in id or a custom button object. */\nexport type EditorToolItem = ToolbarItemId | CustomToolbarItem;\n\n/** @deprecated Alias kept for naming flexibility. Use `EditorToolItem`. */\nexport type ToolbarItem = EditorToolItem;\n\nexport interface EditorProps extends ColorOverrideProps {\n /** Initial HTML content. */\n content?: string;\n /** Fires with the current HTML whenever the document changes. */\n onChange?: (html: string) => void;\n /** Placeholder shown when the document is empty. */\n placeholder?: string;\n /** When false the editor is read-only and the toolbar is hidden. */\n editable?: boolean;\n /** Ordered toolbar configuration. Defaults to a sensible full set. */\n toolbar?: EditorToolItem[];\n /** Wrapper class. */\n className?: string;\n /** Class for the prose content area. */\n editorClassName?: string;\n}\n\nconst DEFAULT_TOOLBAR: EditorToolItem[] = [\n \"bold\",\n \"italic\",\n \"strike\",\n \"code\",\n \"superscript\",\n \"subscript\",\n \"divider\",\n \"heading1\",\n \"heading2\",\n \"heading3\",\n \"divider\",\n \"bulletList\",\n \"orderedList\",\n \"blockquote\",\n \"codeBlock\",\n \"divider\",\n \"link\",\n \"divider\",\n \"undo\",\n \"redo\",\n];\n\ninterface BuiltInDef {\n icon: React.ReactNode;\n title: string;\n onClick: (editor: TiptapEditor) => void;\n isActive?: (editor: TiptapEditor) => boolean;\n /** Disable callback (used for undo/redo). */\n isDisabled?: (editor: TiptapEditor) => boolean;\n}\n\nconst BUILTINS: Record<Exclude<ToolbarItemId, \"divider\">, BuiltInDef> = {\n bold: {\n icon: <BoldIcon />,\n title: \"Bold\",\n onClick: (e) => e.chain().focus().toggleBold().run(),\n isActive: (e) => e.isActive(\"bold\"),\n },\n italic: {\n icon: <ItalicIcon />,\n title: \"Italic\",\n onClick: (e) => e.chain().focus().toggleItalic().run(),\n isActive: (e) => e.isActive(\"italic\"),\n },\n strike: {\n icon: <StrikeIcon />,\n title: \"Strikethrough\",\n onClick: (e) => e.chain().focus().toggleStrike().run(),\n isActive: (e) => e.isActive(\"strike\"),\n },\n code: {\n icon: <CodeIcon />,\n title: \"Inline code\",\n onClick: (e) => e.chain().focus().toggleCode().run(),\n isActive: (e) => e.isActive(\"code\"),\n },\n superscript: {\n icon: <SuperscriptIcon />,\n title: \"Superscript\",\n onClick: (e) => e.chain().focus().toggleSuperscript().run(),\n isActive: (e) => e.isActive(\"superscript\"),\n },\n subscript: {\n icon: <SubscriptIcon />,\n title: \"Subscript\",\n onClick: (e) => e.chain().focus().toggleSubscript().run(),\n isActive: (e) => e.isActive(\"subscript\"),\n },\n heading1: {\n icon: <Heading1Icon />,\n title: \"Heading 1\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 1 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 1 }),\n },\n heading2: {\n icon: <Heading2Icon />,\n title: \"Heading 2\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 2 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 2 }),\n },\n heading3: {\n icon: <Heading3Icon />,\n title: \"Heading 3\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 3 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 3 }),\n },\n bulletList: {\n icon: <BulletListIcon />,\n title: \"Bullet list\",\n onClick: (e) => e.chain().focus().toggleBulletList().run(),\n isActive: (e) => e.isActive(\"bulletList\"),\n },\n orderedList: {\n icon: <OrderedListIcon />,\n title: \"Ordered list\",\n onClick: (e) => e.chain().focus().toggleOrderedList().run(),\n isActive: (e) => e.isActive(\"orderedList\"),\n },\n blockquote: {\n icon: <BlockquoteIcon />,\n title: \"Blockquote\",\n onClick: (e) => e.chain().focus().toggleBlockquote().run(),\n isActive: (e) => e.isActive(\"blockquote\"),\n },\n codeBlock: {\n icon: <CodeBlockIcon />,\n title: \"Code block\",\n onClick: (e) => e.chain().focus().toggleCodeBlock().run(),\n isActive: (e) => e.isActive(\"codeBlock\"),\n },\n link: {\n icon: <LinkIcon />,\n title: \"Link\",\n // Minimal UX: window.prompt for the URL (no extra UI deps). Empty input\n // clears any existing link on the selection.\n onClick: (e) => {\n const prev = (e.getAttributes(\"link\") as { href?: string }).href ?? \"\";\n const url =\n typeof window !== \"undefined\"\n ? window.prompt(\"Enter URL\", prev)\n : null;\n if (url === null) return; // cancelled\n if (url === \"\") {\n e.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n return;\n }\n e.chain().focus().extendMarkRange(\"link\").setLink({ href: url }).run();\n },\n isActive: (e) => e.isActive(\"link\"),\n },\n undo: {\n icon: <UndoIcon />,\n title: \"Undo\",\n onClick: (e) => e.chain().focus().undo().run(),\n isDisabled: (e) => !e.can().undo(),\n },\n redo: {\n icon: <RedoIcon />,\n title: \"Redo\",\n onClick: (e) => e.chain().focus().redo().run(),\n isDisabled: (e) => !e.can().redo(),\n },\n};\n\nconst toolButtonClass = (active: boolean) =>\n cn(\n \"inline-flex h-8 w-8 items-center justify-center rounded-lg text-gray-600 transition\",\n \"hover:bg-gray-100 hover:text-gray-800 disabled:cursor-not-allowed disabled:opacity-40\",\n \"dark:text-gray-400 dark:hover:bg-white/[0.06] dark:hover:text-gray-200\",\n active &&\n \"bg-brand-50 text-brand-600 hover:bg-brand-50 hover:text-brand-600 dark:bg-brand-500/15 dark:text-brand-400 dark:hover:bg-brand-500/15 dark:hover:text-brand-400\"\n );\n\nconst Divider: React.FC = () => (\n <span\n aria-hidden\n className=\"mx-1 h-5 w-px self-center bg-gray-200 dark:bg-gray-700\"\n />\n);\n\n/**\n * Tiptap-powered WYSIWYG editor.\n *\n * Heavy, optional peer-dependency component (`@tiptap/*`). It is a client\n * component and touches the DOM at import time, so in SSR frameworks render it\n * client-only (e.g. next/dynamic with `ssr:false`), like the charts.\n */\nexport const Editor: React.FC<EditorProps> = ({\n content,\n onChange,\n placeholder = \"Start writing…\",\n editable = true,\n toolbar = DEFAULT_TOOLBAR,\n className,\n editorClassName,\n}) => {\n const editor = useEditor({\n extensions: [\n StarterKit,\n Link.configure({ openOnClick: false }),\n Placeholder.configure({ placeholder }),\n Superscript,\n Subscript,\n ],\n content,\n editable,\n immediatelyRender: false,\n editorProps: {\n attributes: {\n class: \"focus:outline-none\",\n },\n },\n onUpdate: ({ editor }) => onChange?.(editor.getHTML()),\n });\n\n // Keep editability in sync if the prop changes after mount.\n React.useEffect(() => {\n editor?.setEditable(editable);\n }, [editor, editable]);\n\n // Not yet mounted (SSR / first paint): render a skeleton placeholder.\n if (!editor) {\n return (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-xl border border-gray-200 dark:border-gray-800\",\n className\n )}\n >\n {editable && (\n <div className=\"h-12 border-b border-gray-200 bg-gray-50 dark:border-gray-800 dark:bg-white/[0.02]\" />\n )}\n <div className=\"min-h-[200px] animate-pulse bg-gray-50/50 dark:bg-white/[0.01]\" />\n </div>\n );\n }\n\n const renderToolbar = () => {\n let dividerKey = 0;\n return toolbar.map((item, index) => {\n // Custom button object.\n if (typeof item === \"object\") {\n const active = item.isActive?.(editor) ?? false;\n return (\n <button\n key={item.id || `custom-${index}`}\n type=\"button\"\n title={item.title}\n aria-label={item.title}\n aria-pressed={active}\n onClick={() => item.onClick(editor)}\n className={toolButtonClass(active)}\n >\n {item.icon}\n </button>\n );\n }\n\n if (item === \"divider\") {\n return <Divider key={`divider-${dividerKey++}`} />;\n }\n\n const def = BUILTINS[item];\n if (!def) return null;\n const active = def.isActive?.(editor) ?? false;\n const disabled = def.isDisabled?.(editor) ?? false;\n return (\n <button\n key={item}\n type=\"button\"\n title={def.title}\n aria-label={def.title}\n aria-pressed={active}\n disabled={disabled}\n onClick={() => def.onClick(editor)}\n className={toolButtonClass(active)}\n >\n {def.icon}\n </button>\n );\n });\n };\n\n return (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-xl border border-gray-200 bg-white shadow-theme-xs dark:border-gray-800 dark:bg-white/[0.02]\",\n className\n )}\n >\n {editable && (\n <div className=\"flex flex-wrap items-center gap-0.5 border-b border-gray-200 bg-gray-50 px-2 py-1.5 dark:border-gray-800 dark:bg-white/[0.02]\">\n {renderToolbar()}\n </div>\n )}\n <EditorContent\n editor={editor}\n className={cn(\n \"min-h-[200px] px-4 py-3 text-sm text-gray-700 dark:text-gray-300\",\n \"rounded-b-xl\",\n // Explicit element styling (no @tailwindcss/typography assumed).\n \"[&_.ProseMirror]:min-h-[180px] [&_.ProseMirror]:outline-none\",\n \"[&_h1]:mb-3 [&_h1]:mt-4 [&_h1]:text-2xl [&_h1]:font-semibold [&_h1]:text-gray-900 dark:[&_h1]:text-white/90\",\n \"[&_h2]:mb-2 [&_h2]:mt-4 [&_h2]:text-xl [&_h2]:font-semibold [&_h2]:text-gray-900 dark:[&_h2]:text-white/90\",\n \"[&_h3]:mb-2 [&_h3]:mt-3 [&_h3]:text-lg [&_h3]:font-semibold [&_h3]:text-gray-900 dark:[&_h3]:text-white/90\",\n \"[&_p]:my-2 [&_p]:leading-relaxed\",\n \"[&_ul]:my-2 [&_ul]:list-disc [&_ul]:pl-6\",\n \"[&_ol]:my-2 [&_ol]:list-decimal [&_ol]:pl-6\",\n \"[&_li]:my-1 [&_li>p]:my-0\",\n \"[&_a]:text-brand-500 [&_a]:underline hover:[&_a]:text-brand-600 dark:[&_a]:text-brand-400\",\n \"[&_blockquote]:my-3 [&_blockquote]:border-l-4 [&_blockquote]:border-gray-300 [&_blockquote]:pl-4 [&_blockquote]:italic [&_blockquote]:text-gray-600 dark:[&_blockquote]:border-gray-700 dark:[&_blockquote]:text-gray-400\",\n \"[&_code]:rounded [&_code]:bg-gray-100 [&_code]:px-1.5 [&_code]:py-0.5 [&_code]:font-mono [&_code]:text-[0.85em] [&_code]:text-brand-600 dark:[&_code]:bg-white/[0.06] dark:[&_code]:text-brand-400\",\n \"[&_pre]:my-3 [&_pre]:overflow-x-auto [&_pre]:rounded-lg [&_pre]:bg-gray-900 [&_pre]:p-4 [&_pre]:font-mono [&_pre]:text-sm [&_pre]:text-gray-100 dark:[&_pre]:bg-black/40\",\n \"[&_pre_code]:bg-transparent [&_pre_code]:p-0 [&_pre_code]:text-inherit\",\n \"[&_hr]:my-4 [&_hr]:border-gray-200 dark:[&_hr]:border-gray-800\",\n // Placeholder styling for the empty-document first node.\n \"[&_.is-editor-empty:first-child::before]:pointer-events-none [&_.is-editor-empty:first-child::before]:float-left [&_.is-editor-empty:first-child::before]:h-0 [&_.is-editor-empty:first-child::before]:text-gray-400 [&_.is-editor-empty:first-child::before]:content-[attr(data-placeholder)] dark:[&_.is-editor-empty:first-child::before]:text-gray-600\",\n editorClassName\n )}\n />\n </div>\n );\n};\n"]}
|
|
@@ -7,6 +7,8 @@ var react = require('@tiptap/react');
|
|
|
7
7
|
var StarterKit = require('@tiptap/starter-kit');
|
|
8
8
|
var Link = require('@tiptap/extension-link');
|
|
9
9
|
var Placeholder = require('@tiptap/extension-placeholder');
|
|
10
|
+
var Superscript = require('@tiptap/extension-superscript');
|
|
11
|
+
var Subscript = require('@tiptap/extension-subscript');
|
|
10
12
|
var jsxRuntime = require('react/jsx-runtime');
|
|
11
13
|
|
|
12
14
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -15,6 +17,8 @@ var React__default = /*#__PURE__*/_interopDefault(React);
|
|
|
15
17
|
var StarterKit__default = /*#__PURE__*/_interopDefault(StarterKit);
|
|
16
18
|
var Link__default = /*#__PURE__*/_interopDefault(Link);
|
|
17
19
|
var Placeholder__default = /*#__PURE__*/_interopDefault(Placeholder);
|
|
20
|
+
var Superscript__default = /*#__PURE__*/_interopDefault(Superscript);
|
|
21
|
+
var Subscript__default = /*#__PURE__*/_interopDefault(Subscript);
|
|
18
22
|
|
|
19
23
|
var base = {
|
|
20
24
|
width: 18,
|
|
@@ -100,11 +104,23 @@ var RedoIcon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children:
|
|
|
100
104
|
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 7v6h-6" }),
|
|
101
105
|
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 13a9 9 0 1 1-3-7.7L21 8" })
|
|
102
106
|
] });
|
|
107
|
+
var SuperscriptIcon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
|
|
108
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m4 19 8-10" }),
|
|
109
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m12 19-8-10" }),
|
|
110
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 9h-4c0-1.5.44-2 1.5-2.5S20 5.6 20 4.5C20 3.7 19.3 3 18.5 3S17 3.7 17 4.5" })
|
|
111
|
+
] });
|
|
112
|
+
var SubscriptIcon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
|
|
113
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m4 5 8 10" }),
|
|
114
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m12 5-8 10" }),
|
|
115
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 21h-4c0-1.5.44-2 1.5-2.5S20 17.6 20 16.5c0-.8-.7-1.5-1.5-1.5s-1.5.7-1.5 1.5" })
|
|
116
|
+
] });
|
|
103
117
|
var DEFAULT_TOOLBAR = [
|
|
104
118
|
"bold",
|
|
105
119
|
"italic",
|
|
106
120
|
"strike",
|
|
107
121
|
"code",
|
|
122
|
+
"superscript",
|
|
123
|
+
"subscript",
|
|
108
124
|
"divider",
|
|
109
125
|
"heading1",
|
|
110
126
|
"heading2",
|
|
@@ -145,6 +161,18 @@ var BUILTINS = {
|
|
|
145
161
|
onClick: (e) => e.chain().focus().toggleCode().run(),
|
|
146
162
|
isActive: (e) => e.isActive("code")
|
|
147
163
|
},
|
|
164
|
+
superscript: {
|
|
165
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(SuperscriptIcon, {}),
|
|
166
|
+
title: "Superscript",
|
|
167
|
+
onClick: (e) => e.chain().focus().toggleSuperscript().run(),
|
|
168
|
+
isActive: (e) => e.isActive("superscript")
|
|
169
|
+
},
|
|
170
|
+
subscript: {
|
|
171
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(SubscriptIcon, {}),
|
|
172
|
+
title: "Subscript",
|
|
173
|
+
onClick: (e) => e.chain().focus().toggleSubscript().run(),
|
|
174
|
+
isActive: (e) => e.isActive("subscript")
|
|
175
|
+
},
|
|
148
176
|
heading1: {
|
|
149
177
|
icon: /* @__PURE__ */ jsxRuntime.jsx(Heading1Icon, {}),
|
|
150
178
|
title: "Heading 1",
|
|
@@ -243,7 +271,9 @@ var Editor = ({
|
|
|
243
271
|
extensions: [
|
|
244
272
|
StarterKit__default.default,
|
|
245
273
|
Link__default.default.configure({ openOnClick: false }),
|
|
246
|
-
Placeholder__default.default.configure({ placeholder })
|
|
274
|
+
Placeholder__default.default.configure({ placeholder }),
|
|
275
|
+
Superscript__default.default,
|
|
276
|
+
Subscript__default.default
|
|
247
277
|
],
|
|
248
278
|
content,
|
|
249
279
|
editable,
|
|
@@ -358,5 +388,5 @@ var Editor = ({
|
|
|
358
388
|
};
|
|
359
389
|
|
|
360
390
|
exports.Editor = Editor;
|
|
361
|
-
//# sourceMappingURL=chunk-
|
|
362
|
-
//# sourceMappingURL=chunk-
|
|
391
|
+
//# sourceMappingURL=chunk-S4ADL5B7.cjs.map
|
|
392
|
+
//# sourceMappingURL=chunk-S4ADL5B7.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Editor/icons.tsx","../src/components/Editor/Editor.tsx"],"names":["jsxs","jsx","cn","useEditor","StarterKit","Link","Placeholder","Superscript","Subscript","editor","React","active","EditorContent"],"mappings":"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","file":"chunk-S4ADL5B7.cjs","sourcesContent":["import React from \"react\";\n\n/**\n * Small inline stroke icons (16–18px) for the editor toolbar.\n * They inherit color via `stroke=\"currentColor\"` so the active/inactive\n * button states drive their appearance.\n */\n\nconst base = {\n width: 18,\n height: 18,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n xmlns: \"http://www.w3.org/2000/svg\",\n};\n\nexport const BoldIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M6 4h7a4 4 0 0 1 0 8H6z\" />\n <path d=\"M6 12h8a4 4 0 0 1 0 8H6z\" />\n </svg>\n);\n\nexport const ItalicIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"19\" y1=\"4\" x2=\"10\" y2=\"4\" />\n <line x1=\"14\" y1=\"20\" x2=\"5\" y2=\"20\" />\n <line x1=\"15\" y1=\"4\" x2=\"9\" y2=\"20\" />\n </svg>\n);\n\nexport const StrikeIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M16 4H9a3 3 0 0 0-2.83 4\" />\n <path d=\"M14 12a4 4 0 0 1 0 8H6\" />\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" />\n </svg>\n);\n\nexport const CodeIcon: React.FC = () => (\n <svg {...base}>\n <polyline points=\"16 18 22 12 16 6\" />\n <polyline points=\"8 6 2 12 8 18\" />\n </svg>\n);\n\nexport const Heading1Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 12l3-2v8\" />\n </svg>\n);\n\nexport const Heading2Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 10c2 0 3 1 3 2.5S18 15 17 16l-2 2h5\" />\n </svg>\n);\n\nexport const Heading3Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 10c2.5-1 3.5 1 2.5 2c1 1 0.5 4-2.5 3\" />\n </svg>\n);\n\nexport const BulletListIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"9\" y1=\"6\" x2=\"20\" y2=\"6\" />\n <line x1=\"9\" y1=\"12\" x2=\"20\" y2=\"12\" />\n <line x1=\"9\" y1=\"18\" x2=\"20\" y2=\"18\" />\n <circle cx=\"4\" cy=\"6\" r=\"1\" />\n <circle cx=\"4\" cy=\"12\" r=\"1\" />\n <circle cx=\"4\" cy=\"18\" r=\"1\" />\n </svg>\n);\n\nexport const OrderedListIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"10\" y1=\"6\" x2=\"20\" y2=\"6\" />\n <line x1=\"10\" y1=\"12\" x2=\"20\" y2=\"12\" />\n <line x1=\"10\" y1=\"18\" x2=\"20\" y2=\"18\" />\n <path d=\"M4 6V3.5L3 4\" />\n <path d=\"M3 12h2l-2 3h2\" />\n <path d=\"M3 17h2v3H3\" />\n </svg>\n);\n\nexport const BlockquoteIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M3 21c3 0 7-1 7-8V5H3v7h4\" />\n <path d=\"M14 21c3 0 7-1 7-8V5h-7v7h4\" />\n </svg>\n);\n\nexport const CodeBlockIcon: React.FC = () => (\n <svg {...base}>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" />\n <polyline points=\"9 9 7 12 9 15\" />\n <polyline points=\"15 9 17 12 15 15\" />\n </svg>\n);\n\nexport const LinkIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M10 13a5 5 0 0 0 7 0l3-3a5 5 0 0 0-7-7l-1 1\" />\n <path d=\"M14 11a5 5 0 0 0-7 0l-3 3a5 5 0 0 0 7 7l1-1\" />\n </svg>\n);\n\nexport const UndoIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M3 7v6h6\" />\n <path d=\"M3 13a9 9 0 1 0 3-7.7L3 8\" />\n </svg>\n);\n\nexport const RedoIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M21 7v6h-6\" />\n <path d=\"M21 13a9 9 0 1 1-3-7.7L21 8\" />\n </svg>\n);\n\nexport const SuperscriptIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"m4 19 8-10\" />\n <path d=\"m12 19-8-10\" />\n <path d=\"M20 9h-4c0-1.5.44-2 1.5-2.5S20 5.6 20 4.5C20 3.7 19.3 3 18.5 3S17 3.7 17 4.5\" />\n </svg>\n);\n\nexport const SubscriptIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"m4 5 8 10\" />\n <path d=\"m12 5-8 10\" />\n <path d=\"M20 21h-4c0-1.5.44-2 1.5-2.5S20 17.6 20 16.5c0-.8-.7-1.5-1.5-1.5s-1.5.7-1.5 1.5\" />\n </svg>\n);\n","\"use client\";\nimport React from \"react\";\nimport { useEditor, EditorContent, type Editor as TiptapEditor } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport Superscript from \"@tiptap/extension-superscript\";\nimport Subscript from \"@tiptap/extension-subscript\";\nimport { cn } from \"../../lib/cn\";\nimport { type ColorOverrideProps } from \"../../lib/styleOverride\";\nimport {\n BoldIcon,\n ItalicIcon,\n StrikeIcon,\n CodeIcon,\n Heading1Icon,\n Heading2Icon,\n Heading3Icon,\n BulletListIcon,\n OrderedListIcon,\n BlockquoteIcon,\n CodeBlockIcon,\n LinkIcon,\n UndoIcon,\n RedoIcon,\n SuperscriptIcon,\n SubscriptIcon,\n} from \"./icons\";\n\n/** Built-in toolbar tool ids. */\nexport type ToolbarItemId =\n | \"bold\"\n | \"italic\"\n | \"strike\"\n | \"code\"\n | \"superscript\"\n | \"subscript\"\n | \"heading1\"\n | \"heading2\"\n | \"heading3\"\n | \"bulletList\"\n | \"orderedList\"\n | \"blockquote\"\n | \"codeBlock\"\n | \"link\"\n | \"undo\"\n | \"redo\"\n | \"divider\";\n\n/** A fully custom toolbar button. */\nexport interface CustomToolbarItem {\n id: string;\n icon: React.ReactNode;\n title: string;\n onClick: (editor: TiptapEditor) => void;\n isActive?: (editor: TiptapEditor) => boolean;\n}\n\n/** A toolbar entry: either a built-in id or a custom button object. */\nexport type EditorToolItem = ToolbarItemId | CustomToolbarItem;\n\n/** @deprecated Alias kept for naming flexibility. Use `EditorToolItem`. */\nexport type ToolbarItem = EditorToolItem;\n\nexport interface EditorProps extends ColorOverrideProps {\n /** Initial HTML content. */\n content?: string;\n /** Fires with the current HTML whenever the document changes. */\n onChange?: (html: string) => void;\n /** Placeholder shown when the document is empty. */\n placeholder?: string;\n /** When false the editor is read-only and the toolbar is hidden. */\n editable?: boolean;\n /** Ordered toolbar configuration. Defaults to a sensible full set. */\n toolbar?: EditorToolItem[];\n /** Wrapper class. */\n className?: string;\n /** Class for the prose content area. */\n editorClassName?: string;\n}\n\nconst DEFAULT_TOOLBAR: EditorToolItem[] = [\n \"bold\",\n \"italic\",\n \"strike\",\n \"code\",\n \"superscript\",\n \"subscript\",\n \"divider\",\n \"heading1\",\n \"heading2\",\n \"heading3\",\n \"divider\",\n \"bulletList\",\n \"orderedList\",\n \"blockquote\",\n \"codeBlock\",\n \"divider\",\n \"link\",\n \"divider\",\n \"undo\",\n \"redo\",\n];\n\ninterface BuiltInDef {\n icon: React.ReactNode;\n title: string;\n onClick: (editor: TiptapEditor) => void;\n isActive?: (editor: TiptapEditor) => boolean;\n /** Disable callback (used for undo/redo). */\n isDisabled?: (editor: TiptapEditor) => boolean;\n}\n\nconst BUILTINS: Record<Exclude<ToolbarItemId, \"divider\">, BuiltInDef> = {\n bold: {\n icon: <BoldIcon />,\n title: \"Bold\",\n onClick: (e) => e.chain().focus().toggleBold().run(),\n isActive: (e) => e.isActive(\"bold\"),\n },\n italic: {\n icon: <ItalicIcon />,\n title: \"Italic\",\n onClick: (e) => e.chain().focus().toggleItalic().run(),\n isActive: (e) => e.isActive(\"italic\"),\n },\n strike: {\n icon: <StrikeIcon />,\n title: \"Strikethrough\",\n onClick: (e) => e.chain().focus().toggleStrike().run(),\n isActive: (e) => e.isActive(\"strike\"),\n },\n code: {\n icon: <CodeIcon />,\n title: \"Inline code\",\n onClick: (e) => e.chain().focus().toggleCode().run(),\n isActive: (e) => e.isActive(\"code\"),\n },\n superscript: {\n icon: <SuperscriptIcon />,\n title: \"Superscript\",\n onClick: (e) => e.chain().focus().toggleSuperscript().run(),\n isActive: (e) => e.isActive(\"superscript\"),\n },\n subscript: {\n icon: <SubscriptIcon />,\n title: \"Subscript\",\n onClick: (e) => e.chain().focus().toggleSubscript().run(),\n isActive: (e) => e.isActive(\"subscript\"),\n },\n heading1: {\n icon: <Heading1Icon />,\n title: \"Heading 1\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 1 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 1 }),\n },\n heading2: {\n icon: <Heading2Icon />,\n title: \"Heading 2\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 2 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 2 }),\n },\n heading3: {\n icon: <Heading3Icon />,\n title: \"Heading 3\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 3 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 3 }),\n },\n bulletList: {\n icon: <BulletListIcon />,\n title: \"Bullet list\",\n onClick: (e) => e.chain().focus().toggleBulletList().run(),\n isActive: (e) => e.isActive(\"bulletList\"),\n },\n orderedList: {\n icon: <OrderedListIcon />,\n title: \"Ordered list\",\n onClick: (e) => e.chain().focus().toggleOrderedList().run(),\n isActive: (e) => e.isActive(\"orderedList\"),\n },\n blockquote: {\n icon: <BlockquoteIcon />,\n title: \"Blockquote\",\n onClick: (e) => e.chain().focus().toggleBlockquote().run(),\n isActive: (e) => e.isActive(\"blockquote\"),\n },\n codeBlock: {\n icon: <CodeBlockIcon />,\n title: \"Code block\",\n onClick: (e) => e.chain().focus().toggleCodeBlock().run(),\n isActive: (e) => e.isActive(\"codeBlock\"),\n },\n link: {\n icon: <LinkIcon />,\n title: \"Link\",\n // Minimal UX: window.prompt for the URL (no extra UI deps). Empty input\n // clears any existing link on the selection.\n onClick: (e) => {\n const prev = (e.getAttributes(\"link\") as { href?: string }).href ?? \"\";\n const url =\n typeof window !== \"undefined\"\n ? window.prompt(\"Enter URL\", prev)\n : null;\n if (url === null) return; // cancelled\n if (url === \"\") {\n e.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n return;\n }\n e.chain().focus().extendMarkRange(\"link\").setLink({ href: url }).run();\n },\n isActive: (e) => e.isActive(\"link\"),\n },\n undo: {\n icon: <UndoIcon />,\n title: \"Undo\",\n onClick: (e) => e.chain().focus().undo().run(),\n isDisabled: (e) => !e.can().undo(),\n },\n redo: {\n icon: <RedoIcon />,\n title: \"Redo\",\n onClick: (e) => e.chain().focus().redo().run(),\n isDisabled: (e) => !e.can().redo(),\n },\n};\n\nconst toolButtonClass = (active: boolean) =>\n cn(\n \"inline-flex h-8 w-8 items-center justify-center rounded-lg text-gray-600 transition\",\n \"hover:bg-gray-100 hover:text-gray-800 disabled:cursor-not-allowed disabled:opacity-40\",\n \"dark:text-gray-400 dark:hover:bg-white/[0.06] dark:hover:text-gray-200\",\n active &&\n \"bg-brand-50 text-brand-600 hover:bg-brand-50 hover:text-brand-600 dark:bg-brand-500/15 dark:text-brand-400 dark:hover:bg-brand-500/15 dark:hover:text-brand-400\"\n );\n\nconst Divider: React.FC = () => (\n <span\n aria-hidden\n className=\"mx-1 h-5 w-px self-center bg-gray-200 dark:bg-gray-700\"\n />\n);\n\n/**\n * Tiptap-powered WYSIWYG editor.\n *\n * Heavy, optional peer-dependency component (`@tiptap/*`). It is a client\n * component and touches the DOM at import time, so in SSR frameworks render it\n * client-only (e.g. next/dynamic with `ssr:false`), like the charts.\n */\nexport const Editor: React.FC<EditorProps> = ({\n content,\n onChange,\n placeholder = \"Start writing…\",\n editable = true,\n toolbar = DEFAULT_TOOLBAR,\n className,\n editorClassName,\n}) => {\n const editor = useEditor({\n extensions: [\n StarterKit,\n Link.configure({ openOnClick: false }),\n Placeholder.configure({ placeholder }),\n Superscript,\n Subscript,\n ],\n content,\n editable,\n immediatelyRender: false,\n editorProps: {\n attributes: {\n class: \"focus:outline-none\",\n },\n },\n onUpdate: ({ editor }) => onChange?.(editor.getHTML()),\n });\n\n // Keep editability in sync if the prop changes after mount.\n React.useEffect(() => {\n editor?.setEditable(editable);\n }, [editor, editable]);\n\n // Not yet mounted (SSR / first paint): render a skeleton placeholder.\n if (!editor) {\n return (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-xl border border-gray-200 dark:border-gray-800\",\n className\n )}\n >\n {editable && (\n <div className=\"h-12 border-b border-gray-200 bg-gray-50 dark:border-gray-800 dark:bg-white/[0.02]\" />\n )}\n <div className=\"min-h-[200px] animate-pulse bg-gray-50/50 dark:bg-white/[0.01]\" />\n </div>\n );\n }\n\n const renderToolbar = () => {\n let dividerKey = 0;\n return toolbar.map((item, index) => {\n // Custom button object.\n if (typeof item === \"object\") {\n const active = item.isActive?.(editor) ?? false;\n return (\n <button\n key={item.id || `custom-${index}`}\n type=\"button\"\n title={item.title}\n aria-label={item.title}\n aria-pressed={active}\n onClick={() => item.onClick(editor)}\n className={toolButtonClass(active)}\n >\n {item.icon}\n </button>\n );\n }\n\n if (item === \"divider\") {\n return <Divider key={`divider-${dividerKey++}`} />;\n }\n\n const def = BUILTINS[item];\n if (!def) return null;\n const active = def.isActive?.(editor) ?? false;\n const disabled = def.isDisabled?.(editor) ?? false;\n return (\n <button\n key={item}\n type=\"button\"\n title={def.title}\n aria-label={def.title}\n aria-pressed={active}\n disabled={disabled}\n onClick={() => def.onClick(editor)}\n className={toolButtonClass(active)}\n >\n {def.icon}\n </button>\n );\n });\n };\n\n return (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-xl border border-gray-200 bg-white shadow-theme-xs dark:border-gray-800 dark:bg-white/[0.02]\",\n className\n )}\n >\n {editable && (\n <div className=\"flex flex-wrap items-center gap-0.5 border-b border-gray-200 bg-gray-50 px-2 py-1.5 dark:border-gray-800 dark:bg-white/[0.02]\">\n {renderToolbar()}\n </div>\n )}\n <EditorContent\n editor={editor}\n className={cn(\n \"min-h-[200px] px-4 py-3 text-sm text-gray-700 dark:text-gray-300\",\n \"rounded-b-xl\",\n // Explicit element styling (no @tailwindcss/typography assumed).\n \"[&_.ProseMirror]:min-h-[180px] [&_.ProseMirror]:outline-none\",\n \"[&_h1]:mb-3 [&_h1]:mt-4 [&_h1]:text-2xl [&_h1]:font-semibold [&_h1]:text-gray-900 dark:[&_h1]:text-white/90\",\n \"[&_h2]:mb-2 [&_h2]:mt-4 [&_h2]:text-xl [&_h2]:font-semibold [&_h2]:text-gray-900 dark:[&_h2]:text-white/90\",\n \"[&_h3]:mb-2 [&_h3]:mt-3 [&_h3]:text-lg [&_h3]:font-semibold [&_h3]:text-gray-900 dark:[&_h3]:text-white/90\",\n \"[&_p]:my-2 [&_p]:leading-relaxed\",\n \"[&_ul]:my-2 [&_ul]:list-disc [&_ul]:pl-6\",\n \"[&_ol]:my-2 [&_ol]:list-decimal [&_ol]:pl-6\",\n \"[&_li]:my-1 [&_li>p]:my-0\",\n \"[&_a]:text-brand-500 [&_a]:underline hover:[&_a]:text-brand-600 dark:[&_a]:text-brand-400\",\n \"[&_blockquote]:my-3 [&_blockquote]:border-l-4 [&_blockquote]:border-gray-300 [&_blockquote]:pl-4 [&_blockquote]:italic [&_blockquote]:text-gray-600 dark:[&_blockquote]:border-gray-700 dark:[&_blockquote]:text-gray-400\",\n \"[&_code]:rounded [&_code]:bg-gray-100 [&_code]:px-1.5 [&_code]:py-0.5 [&_code]:font-mono [&_code]:text-[0.85em] [&_code]:text-brand-600 dark:[&_code]:bg-white/[0.06] dark:[&_code]:text-brand-400\",\n \"[&_pre]:my-3 [&_pre]:overflow-x-auto [&_pre]:rounded-lg [&_pre]:bg-gray-900 [&_pre]:p-4 [&_pre]:font-mono [&_pre]:text-sm [&_pre]:text-gray-100 dark:[&_pre]:bg-black/40\",\n \"[&_pre_code]:bg-transparent [&_pre_code]:p-0 [&_pre_code]:text-inherit\",\n \"[&_hr]:my-4 [&_hr]:border-gray-200 dark:[&_hr]:border-gray-800\",\n // Placeholder styling for the empty-document first node.\n \"[&_.is-editor-empty:first-child::before]:pointer-events-none [&_.is-editor-empty:first-child::before]:float-left [&_.is-editor-empty:first-child::before]:h-0 [&_.is-editor-empty:first-child::before]:text-gray-400 [&_.is-editor-empty:first-child::before]:content-[attr(data-placeholder)] dark:[&_.is-editor-empty:first-child::before]:text-gray-600\",\n editorClassName\n )}\n />\n </div>\n );\n};\n"]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkS4ADL5B7_cjs = require('../../chunk-S4ADL5B7.cjs');
|
|
5
5
|
require('../../chunk-YERNSNT4.cjs');
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
Object.defineProperty(exports, "Editor", {
|
|
10
10
|
enumerable: true,
|
|
11
|
-
get: function () { return
|
|
11
|
+
get: function () { return chunkS4ADL5B7_cjs.Editor; }
|
|
12
12
|
});
|
|
13
13
|
//# sourceMappingURL=Editor.cjs.map
|
|
14
14
|
//# sourceMappingURL=Editor.cjs.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import 'react';
|
|
2
2
|
import '@tiptap/react';
|
|
3
|
-
export { c as CustomToolbarItem, E as Editor, a as EditorProps, b as EditorToolItem, T as ToolbarItem, d as ToolbarItemId } from '../../Editor-
|
|
3
|
+
export { c as CustomToolbarItem, E as Editor, a as EditorProps, b as EditorToolItem, T as ToolbarItem, d as ToolbarItemId } from '../../Editor-CHBOfOWf.cjs';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import 'react';
|
|
2
2
|
import '@tiptap/react';
|
|
3
|
-
export { c as CustomToolbarItem, E as Editor, a as EditorProps, b as EditorToolItem, T as ToolbarItem, d as ToolbarItemId } from '../../Editor-
|
|
3
|
+
export { c as CustomToolbarItem, E as Editor, a as EditorProps, b as EditorToolItem, T as ToolbarItem, d as ToolbarItemId } from '../../Editor-CHBOfOWf.js';
|
package/dist/index.cjs
CHANGED
|
@@ -5,7 +5,7 @@ var chunk2C5QY3Z2_cjs = require('./chunk-2C5QY3Z2.cjs');
|
|
|
5
5
|
var chunk3EE6CPHW_cjs = require('./chunk-3EE6CPHW.cjs');
|
|
6
6
|
var chunkMQOXJGGO_cjs = require('./chunk-MQOXJGGO.cjs');
|
|
7
7
|
var chunkHT7SQXRF_cjs = require('./chunk-HT7SQXRF.cjs');
|
|
8
|
-
var
|
|
8
|
+
var chunkS4ADL5B7_cjs = require('./chunk-S4ADL5B7.cjs');
|
|
9
9
|
var chunkMYN5LDMO_cjs = require('./chunk-MYN5LDMO.cjs');
|
|
10
10
|
var chunkYERNSNT4_cjs = require('./chunk-YERNSNT4.cjs');
|
|
11
11
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -3157,7 +3157,7 @@ Object.defineProperty(exports, "CountryMap", {
|
|
|
3157
3157
|
});
|
|
3158
3158
|
Object.defineProperty(exports, "Editor", {
|
|
3159
3159
|
enumerable: true,
|
|
3160
|
-
get: function () { return
|
|
3160
|
+
get: function () { return chunkS4ADL5B7_cjs.Editor; }
|
|
3161
3161
|
});
|
|
3162
3162
|
Object.defineProperty(exports, "ColorPicker", {
|
|
3163
3163
|
enumerable: true,
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ClassValue } from 'clsx';
|
|
2
|
-
import { C as ColorOverrideProps } from './Editor-
|
|
3
|
-
export { E as Editor, a as EditorProps, b as EditorToolItem, s as styleOverride } from './Editor-
|
|
2
|
+
import { C as ColorOverrideProps } from './Editor-CHBOfOWf.cjs';
|
|
3
|
+
export { E as Editor, a as EditorProps, b as EditorToolItem, s as styleOverride } from './Editor-CHBOfOWf.cjs';
|
|
4
4
|
import React, { FormEvent } from 'react';
|
|
5
5
|
import flatpickr from 'flatpickr';
|
|
6
6
|
export { BarChart, BarChartProps } from './components/Charts/BarChart.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ClassValue } from 'clsx';
|
|
2
|
-
import { C as ColorOverrideProps } from './Editor-
|
|
3
|
-
export { E as Editor, a as EditorProps, b as EditorToolItem, s as styleOverride } from './Editor-
|
|
2
|
+
import { C as ColorOverrideProps } from './Editor-CHBOfOWf.js';
|
|
3
|
+
export { E as Editor, a as EditorProps, b as EditorToolItem, s as styleOverride } from './Editor-CHBOfOWf.js';
|
|
4
4
|
import React, { FormEvent } from 'react';
|
|
5
5
|
import flatpickr from 'flatpickr';
|
|
6
6
|
export { BarChart, BarChartProps } from './components/Charts/BarChart.js';
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ export { BarChart } from './chunk-YAKIMPXZ.js';
|
|
|
3
3
|
export { LineChart } from './chunk-NWIOJGF7.js';
|
|
4
4
|
export { Calendar, Modal } from './chunk-GIAGOO72.js';
|
|
5
5
|
export { CountryMap } from './chunk-R66LONPQ.js';
|
|
6
|
-
export { Editor } from './chunk-
|
|
6
|
+
export { Editor } from './chunk-DXUWFHPF.js';
|
|
7
7
|
export { ColorPicker } from './chunk-P7LI2FSR.js';
|
|
8
8
|
import { cn } from './chunk-ZLIYUUA4.js';
|
|
9
9
|
export { cn } from './chunk-ZLIYUUA4.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@andreagiugni/tailwind-dashboard-ui",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.3",
|
|
4
4
|
"description": "Reusable React + Tailwind CSS v4 dashboard components extracted from TailAdmin.",
|
|
5
5
|
"author": "Andrea Giugni",
|
|
6
6
|
"license": "MIT",
|
|
@@ -47,6 +47,8 @@
|
|
|
47
47
|
"@react-jvectormap/world": "^1",
|
|
48
48
|
"@tiptap/extension-link": "^2",
|
|
49
49
|
"@tiptap/extension-placeholder": "^2",
|
|
50
|
+
"@tiptap/extension-subscript": "^2",
|
|
51
|
+
"@tiptap/extension-superscript": "^2",
|
|
50
52
|
"@tiptap/pm": "^2",
|
|
51
53
|
"@tiptap/react": "^2",
|
|
52
54
|
"@tiptap/starter-kit": "^2",
|
|
@@ -101,6 +103,12 @@
|
|
|
101
103
|
},
|
|
102
104
|
"@tiptap/extension-placeholder": {
|
|
103
105
|
"optional": true
|
|
106
|
+
},
|
|
107
|
+
"@tiptap/extension-subscript": {
|
|
108
|
+
"optional": true
|
|
109
|
+
},
|
|
110
|
+
"@tiptap/extension-superscript": {
|
|
111
|
+
"optional": true
|
|
104
112
|
}
|
|
105
113
|
},
|
|
106
114
|
"devDependencies": {
|
|
@@ -117,6 +125,8 @@
|
|
|
117
125
|
"@testing-library/react": "^16.0.0",
|
|
118
126
|
"@tiptap/extension-link": "^2.27.2",
|
|
119
127
|
"@tiptap/extension-placeholder": "^2.27.2",
|
|
128
|
+
"@tiptap/extension-subscript": "^2.27.2",
|
|
129
|
+
"@tiptap/extension-superscript": "^2.27.2",
|
|
120
130
|
"@tiptap/pm": "^2.27.2",
|
|
121
131
|
"@tiptap/react": "^2.27.2",
|
|
122
132
|
"@tiptap/starter-kit": "^2.27.2",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Editor/icons.tsx","../src/components/Editor/Editor.tsx"],"names":["jsx","editor","jsxs","active"],"mappings":"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","file":"chunk-4OETC46A.js","sourcesContent":["import React from \"react\";\n\n/**\n * Small inline stroke icons (16–18px) for the editor toolbar.\n * They inherit color via `stroke=\"currentColor\"` so the active/inactive\n * button states drive their appearance.\n */\n\nconst base = {\n width: 18,\n height: 18,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n xmlns: \"http://www.w3.org/2000/svg\",\n};\n\nexport const BoldIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M6 4h7a4 4 0 0 1 0 8H6z\" />\n <path d=\"M6 12h8a4 4 0 0 1 0 8H6z\" />\n </svg>\n);\n\nexport const ItalicIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"19\" y1=\"4\" x2=\"10\" y2=\"4\" />\n <line x1=\"14\" y1=\"20\" x2=\"5\" y2=\"20\" />\n <line x1=\"15\" y1=\"4\" x2=\"9\" y2=\"20\" />\n </svg>\n);\n\nexport const StrikeIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M16 4H9a3 3 0 0 0-2.83 4\" />\n <path d=\"M14 12a4 4 0 0 1 0 8H6\" />\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" />\n </svg>\n);\n\nexport const CodeIcon: React.FC = () => (\n <svg {...base}>\n <polyline points=\"16 18 22 12 16 6\" />\n <polyline points=\"8 6 2 12 8 18\" />\n </svg>\n);\n\nexport const Heading1Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 12l3-2v8\" />\n </svg>\n);\n\nexport const Heading2Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 10c2 0 3 1 3 2.5S18 15 17 16l-2 2h5\" />\n </svg>\n);\n\nexport const Heading3Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 10c2.5-1 3.5 1 2.5 2c1 1 0.5 4-2.5 3\" />\n </svg>\n);\n\nexport const BulletListIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"9\" y1=\"6\" x2=\"20\" y2=\"6\" />\n <line x1=\"9\" y1=\"12\" x2=\"20\" y2=\"12\" />\n <line x1=\"9\" y1=\"18\" x2=\"20\" y2=\"18\" />\n <circle cx=\"4\" cy=\"6\" r=\"1\" />\n <circle cx=\"4\" cy=\"12\" r=\"1\" />\n <circle cx=\"4\" cy=\"18\" r=\"1\" />\n </svg>\n);\n\nexport const OrderedListIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"10\" y1=\"6\" x2=\"20\" y2=\"6\" />\n <line x1=\"10\" y1=\"12\" x2=\"20\" y2=\"12\" />\n <line x1=\"10\" y1=\"18\" x2=\"20\" y2=\"18\" />\n <path d=\"M4 6V3.5L3 4\" />\n <path d=\"M3 12h2l-2 3h2\" />\n <path d=\"M3 17h2v3H3\" />\n </svg>\n);\n\nexport const BlockquoteIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M3 21c3 0 7-1 7-8V5H3v7h4\" />\n <path d=\"M14 21c3 0 7-1 7-8V5h-7v7h4\" />\n </svg>\n);\n\nexport const CodeBlockIcon: React.FC = () => (\n <svg {...base}>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" />\n <polyline points=\"9 9 7 12 9 15\" />\n <polyline points=\"15 9 17 12 15 15\" />\n </svg>\n);\n\nexport const LinkIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M10 13a5 5 0 0 0 7 0l3-3a5 5 0 0 0-7-7l-1 1\" />\n <path d=\"M14 11a5 5 0 0 0-7 0l-3 3a5 5 0 0 0 7 7l1-1\" />\n </svg>\n);\n\nexport const UndoIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M3 7v6h6\" />\n <path d=\"M3 13a9 9 0 1 0 3-7.7L3 8\" />\n </svg>\n);\n\nexport const RedoIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M21 7v6h-6\" />\n <path d=\"M21 13a9 9 0 1 1-3-7.7L21 8\" />\n </svg>\n);\n","\"use client\";\nimport React from \"react\";\nimport { useEditor, EditorContent, type Editor as TiptapEditor } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { cn } from \"../../lib/cn\";\nimport { type ColorOverrideProps } from \"../../lib/styleOverride\";\nimport {\n BoldIcon,\n ItalicIcon,\n StrikeIcon,\n CodeIcon,\n Heading1Icon,\n Heading2Icon,\n Heading3Icon,\n BulletListIcon,\n OrderedListIcon,\n BlockquoteIcon,\n CodeBlockIcon,\n LinkIcon,\n UndoIcon,\n RedoIcon,\n} from \"./icons\";\n\n/** Built-in toolbar tool ids. */\nexport type ToolbarItemId =\n | \"bold\"\n | \"italic\"\n | \"strike\"\n | \"code\"\n | \"heading1\"\n | \"heading2\"\n | \"heading3\"\n | \"bulletList\"\n | \"orderedList\"\n | \"blockquote\"\n | \"codeBlock\"\n | \"link\"\n | \"undo\"\n | \"redo\"\n | \"divider\";\n\n/** A fully custom toolbar button. */\nexport interface CustomToolbarItem {\n id: string;\n icon: React.ReactNode;\n title: string;\n onClick: (editor: TiptapEditor) => void;\n isActive?: (editor: TiptapEditor) => boolean;\n}\n\n/** A toolbar entry: either a built-in id or a custom button object. */\nexport type EditorToolItem = ToolbarItemId | CustomToolbarItem;\n\n/** @deprecated Alias kept for naming flexibility. Use `EditorToolItem`. */\nexport type ToolbarItem = EditorToolItem;\n\nexport interface EditorProps extends ColorOverrideProps {\n /** Initial HTML content. */\n content?: string;\n /** Fires with the current HTML whenever the document changes. */\n onChange?: (html: string) => void;\n /** Placeholder shown when the document is empty. */\n placeholder?: string;\n /** When false the editor is read-only and the toolbar is hidden. */\n editable?: boolean;\n /** Ordered toolbar configuration. Defaults to a sensible full set. */\n toolbar?: EditorToolItem[];\n /** Wrapper class. */\n className?: string;\n /** Class for the prose content area. */\n editorClassName?: string;\n}\n\nconst DEFAULT_TOOLBAR: EditorToolItem[] = [\n \"bold\",\n \"italic\",\n \"strike\",\n \"code\",\n \"divider\",\n \"heading1\",\n \"heading2\",\n \"heading3\",\n \"divider\",\n \"bulletList\",\n \"orderedList\",\n \"blockquote\",\n \"codeBlock\",\n \"divider\",\n \"link\",\n \"divider\",\n \"undo\",\n \"redo\",\n];\n\ninterface BuiltInDef {\n icon: React.ReactNode;\n title: string;\n onClick: (editor: TiptapEditor) => void;\n isActive?: (editor: TiptapEditor) => boolean;\n /** Disable callback (used for undo/redo). */\n isDisabled?: (editor: TiptapEditor) => boolean;\n}\n\nconst BUILTINS: Record<Exclude<ToolbarItemId, \"divider\">, BuiltInDef> = {\n bold: {\n icon: <BoldIcon />,\n title: \"Bold\",\n onClick: (e) => e.chain().focus().toggleBold().run(),\n isActive: (e) => e.isActive(\"bold\"),\n },\n italic: {\n icon: <ItalicIcon />,\n title: \"Italic\",\n onClick: (e) => e.chain().focus().toggleItalic().run(),\n isActive: (e) => e.isActive(\"italic\"),\n },\n strike: {\n icon: <StrikeIcon />,\n title: \"Strikethrough\",\n onClick: (e) => e.chain().focus().toggleStrike().run(),\n isActive: (e) => e.isActive(\"strike\"),\n },\n code: {\n icon: <CodeIcon />,\n title: \"Inline code\",\n onClick: (e) => e.chain().focus().toggleCode().run(),\n isActive: (e) => e.isActive(\"code\"),\n },\n heading1: {\n icon: <Heading1Icon />,\n title: \"Heading 1\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 1 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 1 }),\n },\n heading2: {\n icon: <Heading2Icon />,\n title: \"Heading 2\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 2 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 2 }),\n },\n heading3: {\n icon: <Heading3Icon />,\n title: \"Heading 3\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 3 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 3 }),\n },\n bulletList: {\n icon: <BulletListIcon />,\n title: \"Bullet list\",\n onClick: (e) => e.chain().focus().toggleBulletList().run(),\n isActive: (e) => e.isActive(\"bulletList\"),\n },\n orderedList: {\n icon: <OrderedListIcon />,\n title: \"Ordered list\",\n onClick: (e) => e.chain().focus().toggleOrderedList().run(),\n isActive: (e) => e.isActive(\"orderedList\"),\n },\n blockquote: {\n icon: <BlockquoteIcon />,\n title: \"Blockquote\",\n onClick: (e) => e.chain().focus().toggleBlockquote().run(),\n isActive: (e) => e.isActive(\"blockquote\"),\n },\n codeBlock: {\n icon: <CodeBlockIcon />,\n title: \"Code block\",\n onClick: (e) => e.chain().focus().toggleCodeBlock().run(),\n isActive: (e) => e.isActive(\"codeBlock\"),\n },\n link: {\n icon: <LinkIcon />,\n title: \"Link\",\n // Minimal UX: window.prompt for the URL (no extra UI deps). Empty input\n // clears any existing link on the selection.\n onClick: (e) => {\n const prev = (e.getAttributes(\"link\") as { href?: string }).href ?? \"\";\n const url =\n typeof window !== \"undefined\"\n ? window.prompt(\"Enter URL\", prev)\n : null;\n if (url === null) return; // cancelled\n if (url === \"\") {\n e.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n return;\n }\n e.chain().focus().extendMarkRange(\"link\").setLink({ href: url }).run();\n },\n isActive: (e) => e.isActive(\"link\"),\n },\n undo: {\n icon: <UndoIcon />,\n title: \"Undo\",\n onClick: (e) => e.chain().focus().undo().run(),\n isDisabled: (e) => !e.can().undo(),\n },\n redo: {\n icon: <RedoIcon />,\n title: \"Redo\",\n onClick: (e) => e.chain().focus().redo().run(),\n isDisabled: (e) => !e.can().redo(),\n },\n};\n\nconst toolButtonClass = (active: boolean) =>\n cn(\n \"inline-flex h-8 w-8 items-center justify-center rounded-lg text-gray-600 transition\",\n \"hover:bg-gray-100 hover:text-gray-800 disabled:cursor-not-allowed disabled:opacity-40\",\n \"dark:text-gray-400 dark:hover:bg-white/[0.06] dark:hover:text-gray-200\",\n active &&\n \"bg-brand-50 text-brand-600 hover:bg-brand-50 hover:text-brand-600 dark:bg-brand-500/15 dark:text-brand-400 dark:hover:bg-brand-500/15 dark:hover:text-brand-400\"\n );\n\nconst Divider: React.FC = () => (\n <span\n aria-hidden\n className=\"mx-1 h-5 w-px self-center bg-gray-200 dark:bg-gray-700\"\n />\n);\n\n/**\n * Tiptap-powered WYSIWYG editor.\n *\n * Heavy, optional peer-dependency component (`@tiptap/*`). It is a client\n * component and touches the DOM at import time, so in SSR frameworks render it\n * client-only (e.g. next/dynamic with `ssr:false`), like the charts.\n */\nexport const Editor: React.FC<EditorProps> = ({\n content,\n onChange,\n placeholder = \"Start writing…\",\n editable = true,\n toolbar = DEFAULT_TOOLBAR,\n className,\n editorClassName,\n}) => {\n const editor = useEditor({\n extensions: [\n StarterKit,\n Link.configure({ openOnClick: false }),\n Placeholder.configure({ placeholder }),\n ],\n content,\n editable,\n immediatelyRender: false,\n editorProps: {\n attributes: {\n class: \"focus:outline-none\",\n },\n },\n onUpdate: ({ editor }) => onChange?.(editor.getHTML()),\n });\n\n // Keep editability in sync if the prop changes after mount.\n React.useEffect(() => {\n editor?.setEditable(editable);\n }, [editor, editable]);\n\n // Not yet mounted (SSR / first paint): render a skeleton placeholder.\n if (!editor) {\n return (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-xl border border-gray-200 dark:border-gray-800\",\n className\n )}\n >\n {editable && (\n <div className=\"h-12 border-b border-gray-200 bg-gray-50 dark:border-gray-800 dark:bg-white/[0.02]\" />\n )}\n <div className=\"min-h-[200px] animate-pulse bg-gray-50/50 dark:bg-white/[0.01]\" />\n </div>\n );\n }\n\n const renderToolbar = () => {\n let dividerKey = 0;\n return toolbar.map((item, index) => {\n // Custom button object.\n if (typeof item === \"object\") {\n const active = item.isActive?.(editor) ?? false;\n return (\n <button\n key={item.id || `custom-${index}`}\n type=\"button\"\n title={item.title}\n aria-label={item.title}\n aria-pressed={active}\n onClick={() => item.onClick(editor)}\n className={toolButtonClass(active)}\n >\n {item.icon}\n </button>\n );\n }\n\n if (item === \"divider\") {\n return <Divider key={`divider-${dividerKey++}`} />;\n }\n\n const def = BUILTINS[item];\n if (!def) return null;\n const active = def.isActive?.(editor) ?? false;\n const disabled = def.isDisabled?.(editor) ?? false;\n return (\n <button\n key={item}\n type=\"button\"\n title={def.title}\n aria-label={def.title}\n aria-pressed={active}\n disabled={disabled}\n onClick={() => def.onClick(editor)}\n className={toolButtonClass(active)}\n >\n {def.icon}\n </button>\n );\n });\n };\n\n return (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-xl border border-gray-200 bg-white shadow-theme-xs dark:border-gray-800 dark:bg-white/[0.02]\",\n className\n )}\n >\n {editable && (\n <div className=\"flex flex-wrap items-center gap-0.5 border-b border-gray-200 bg-gray-50 px-2 py-1.5 dark:border-gray-800 dark:bg-white/[0.02]\">\n {renderToolbar()}\n </div>\n )}\n <EditorContent\n editor={editor}\n className={cn(\n \"min-h-[200px] px-4 py-3 text-sm text-gray-700 dark:text-gray-300\",\n \"rounded-b-xl\",\n // Explicit element styling (no @tailwindcss/typography assumed).\n \"[&_.ProseMirror]:min-h-[180px] [&_.ProseMirror]:outline-none\",\n \"[&_h1]:mb-3 [&_h1]:mt-4 [&_h1]:text-2xl [&_h1]:font-semibold [&_h1]:text-gray-900 dark:[&_h1]:text-white/90\",\n \"[&_h2]:mb-2 [&_h2]:mt-4 [&_h2]:text-xl [&_h2]:font-semibold [&_h2]:text-gray-900 dark:[&_h2]:text-white/90\",\n \"[&_h3]:mb-2 [&_h3]:mt-3 [&_h3]:text-lg [&_h3]:font-semibold [&_h3]:text-gray-900 dark:[&_h3]:text-white/90\",\n \"[&_p]:my-2 [&_p]:leading-relaxed\",\n \"[&_ul]:my-2 [&_ul]:list-disc [&_ul]:pl-6\",\n \"[&_ol]:my-2 [&_ol]:list-decimal [&_ol]:pl-6\",\n \"[&_li]:my-1 [&_li>p]:my-0\",\n \"[&_a]:text-brand-500 [&_a]:underline hover:[&_a]:text-brand-600 dark:[&_a]:text-brand-400\",\n \"[&_blockquote]:my-3 [&_blockquote]:border-l-4 [&_blockquote]:border-gray-300 [&_blockquote]:pl-4 [&_blockquote]:italic [&_blockquote]:text-gray-600 dark:[&_blockquote]:border-gray-700 dark:[&_blockquote]:text-gray-400\",\n \"[&_code]:rounded [&_code]:bg-gray-100 [&_code]:px-1.5 [&_code]:py-0.5 [&_code]:font-mono [&_code]:text-[0.85em] [&_code]:text-brand-600 dark:[&_code]:bg-white/[0.06] dark:[&_code]:text-brand-400\",\n \"[&_pre]:my-3 [&_pre]:overflow-x-auto [&_pre]:rounded-lg [&_pre]:bg-gray-900 [&_pre]:p-4 [&_pre]:font-mono [&_pre]:text-sm [&_pre]:text-gray-100 dark:[&_pre]:bg-black/40\",\n \"[&_pre_code]:bg-transparent [&_pre_code]:p-0 [&_pre_code]:text-inherit\",\n \"[&_hr]:my-4 [&_hr]:border-gray-200 dark:[&_hr]:border-gray-800\",\n // Placeholder styling for the empty-document first node.\n \"[&_.is-editor-empty:first-child::before]:pointer-events-none [&_.is-editor-empty:first-child::before]:float-left [&_.is-editor-empty:first-child::before]:h-0 [&_.is-editor-empty:first-child::before]:text-gray-400 [&_.is-editor-empty:first-child::before]:content-[attr(data-placeholder)] dark:[&_.is-editor-empty:first-child::before]:text-gray-600\",\n editorClassName\n )}\n />\n </div>\n );\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Editor/icons.tsx","../src/components/Editor/Editor.tsx"],"names":["jsxs","jsx","cn","useEditor","StarterKit","Link","Placeholder","editor","React","active","EditorContent"],"mappings":"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","file":"chunk-W7SNEBD7.cjs","sourcesContent":["import React from \"react\";\n\n/**\n * Small inline stroke icons (16–18px) for the editor toolbar.\n * They inherit color via `stroke=\"currentColor\"` so the active/inactive\n * button states drive their appearance.\n */\n\nconst base = {\n width: 18,\n height: 18,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n xmlns: \"http://www.w3.org/2000/svg\",\n};\n\nexport const BoldIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M6 4h7a4 4 0 0 1 0 8H6z\" />\n <path d=\"M6 12h8a4 4 0 0 1 0 8H6z\" />\n </svg>\n);\n\nexport const ItalicIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"19\" y1=\"4\" x2=\"10\" y2=\"4\" />\n <line x1=\"14\" y1=\"20\" x2=\"5\" y2=\"20\" />\n <line x1=\"15\" y1=\"4\" x2=\"9\" y2=\"20\" />\n </svg>\n);\n\nexport const StrikeIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M16 4H9a3 3 0 0 0-2.83 4\" />\n <path d=\"M14 12a4 4 0 0 1 0 8H6\" />\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" />\n </svg>\n);\n\nexport const CodeIcon: React.FC = () => (\n <svg {...base}>\n <polyline points=\"16 18 22 12 16 6\" />\n <polyline points=\"8 6 2 12 8 18\" />\n </svg>\n);\n\nexport const Heading1Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 12l3-2v8\" />\n </svg>\n);\n\nexport const Heading2Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 10c2 0 3 1 3 2.5S18 15 17 16l-2 2h5\" />\n </svg>\n);\n\nexport const Heading3Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 10c2.5-1 3.5 1 2.5 2c1 1 0.5 4-2.5 3\" />\n </svg>\n);\n\nexport const BulletListIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"9\" y1=\"6\" x2=\"20\" y2=\"6\" />\n <line x1=\"9\" y1=\"12\" x2=\"20\" y2=\"12\" />\n <line x1=\"9\" y1=\"18\" x2=\"20\" y2=\"18\" />\n <circle cx=\"4\" cy=\"6\" r=\"1\" />\n <circle cx=\"4\" cy=\"12\" r=\"1\" />\n <circle cx=\"4\" cy=\"18\" r=\"1\" />\n </svg>\n);\n\nexport const OrderedListIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"10\" y1=\"6\" x2=\"20\" y2=\"6\" />\n <line x1=\"10\" y1=\"12\" x2=\"20\" y2=\"12\" />\n <line x1=\"10\" y1=\"18\" x2=\"20\" y2=\"18\" />\n <path d=\"M4 6V3.5L3 4\" />\n <path d=\"M3 12h2l-2 3h2\" />\n <path d=\"M3 17h2v3H3\" />\n </svg>\n);\n\nexport const BlockquoteIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M3 21c3 0 7-1 7-8V5H3v7h4\" />\n <path d=\"M14 21c3 0 7-1 7-8V5h-7v7h4\" />\n </svg>\n);\n\nexport const CodeBlockIcon: React.FC = () => (\n <svg {...base}>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" />\n <polyline points=\"9 9 7 12 9 15\" />\n <polyline points=\"15 9 17 12 15 15\" />\n </svg>\n);\n\nexport const LinkIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M10 13a5 5 0 0 0 7 0l3-3a5 5 0 0 0-7-7l-1 1\" />\n <path d=\"M14 11a5 5 0 0 0-7 0l-3 3a5 5 0 0 0 7 7l1-1\" />\n </svg>\n);\n\nexport const UndoIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M3 7v6h6\" />\n <path d=\"M3 13a9 9 0 1 0 3-7.7L3 8\" />\n </svg>\n);\n\nexport const RedoIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M21 7v6h-6\" />\n <path d=\"M21 13a9 9 0 1 1-3-7.7L21 8\" />\n </svg>\n);\n","\"use client\";\nimport React from \"react\";\nimport { useEditor, EditorContent, type Editor as TiptapEditor } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { cn } from \"../../lib/cn\";\nimport { type ColorOverrideProps } from \"../../lib/styleOverride\";\nimport {\n BoldIcon,\n ItalicIcon,\n StrikeIcon,\n CodeIcon,\n Heading1Icon,\n Heading2Icon,\n Heading3Icon,\n BulletListIcon,\n OrderedListIcon,\n BlockquoteIcon,\n CodeBlockIcon,\n LinkIcon,\n UndoIcon,\n RedoIcon,\n} from \"./icons\";\n\n/** Built-in toolbar tool ids. */\nexport type ToolbarItemId =\n | \"bold\"\n | \"italic\"\n | \"strike\"\n | \"code\"\n | \"heading1\"\n | \"heading2\"\n | \"heading3\"\n | \"bulletList\"\n | \"orderedList\"\n | \"blockquote\"\n | \"codeBlock\"\n | \"link\"\n | \"undo\"\n | \"redo\"\n | \"divider\";\n\n/** A fully custom toolbar button. */\nexport interface CustomToolbarItem {\n id: string;\n icon: React.ReactNode;\n title: string;\n onClick: (editor: TiptapEditor) => void;\n isActive?: (editor: TiptapEditor) => boolean;\n}\n\n/** A toolbar entry: either a built-in id or a custom button object. */\nexport type EditorToolItem = ToolbarItemId | CustomToolbarItem;\n\n/** @deprecated Alias kept for naming flexibility. Use `EditorToolItem`. */\nexport type ToolbarItem = EditorToolItem;\n\nexport interface EditorProps extends ColorOverrideProps {\n /** Initial HTML content. */\n content?: string;\n /** Fires with the current HTML whenever the document changes. */\n onChange?: (html: string) => void;\n /** Placeholder shown when the document is empty. */\n placeholder?: string;\n /** When false the editor is read-only and the toolbar is hidden. */\n editable?: boolean;\n /** Ordered toolbar configuration. Defaults to a sensible full set. */\n toolbar?: EditorToolItem[];\n /** Wrapper class. */\n className?: string;\n /** Class for the prose content area. */\n editorClassName?: string;\n}\n\nconst DEFAULT_TOOLBAR: EditorToolItem[] = [\n \"bold\",\n \"italic\",\n \"strike\",\n \"code\",\n \"divider\",\n \"heading1\",\n \"heading2\",\n \"heading3\",\n \"divider\",\n \"bulletList\",\n \"orderedList\",\n \"blockquote\",\n \"codeBlock\",\n \"divider\",\n \"link\",\n \"divider\",\n \"undo\",\n \"redo\",\n];\n\ninterface BuiltInDef {\n icon: React.ReactNode;\n title: string;\n onClick: (editor: TiptapEditor) => void;\n isActive?: (editor: TiptapEditor) => boolean;\n /** Disable callback (used for undo/redo). */\n isDisabled?: (editor: TiptapEditor) => boolean;\n}\n\nconst BUILTINS: Record<Exclude<ToolbarItemId, \"divider\">, BuiltInDef> = {\n bold: {\n icon: <BoldIcon />,\n title: \"Bold\",\n onClick: (e) => e.chain().focus().toggleBold().run(),\n isActive: (e) => e.isActive(\"bold\"),\n },\n italic: {\n icon: <ItalicIcon />,\n title: \"Italic\",\n onClick: (e) => e.chain().focus().toggleItalic().run(),\n isActive: (e) => e.isActive(\"italic\"),\n },\n strike: {\n icon: <StrikeIcon />,\n title: \"Strikethrough\",\n onClick: (e) => e.chain().focus().toggleStrike().run(),\n isActive: (e) => e.isActive(\"strike\"),\n },\n code: {\n icon: <CodeIcon />,\n title: \"Inline code\",\n onClick: (e) => e.chain().focus().toggleCode().run(),\n isActive: (e) => e.isActive(\"code\"),\n },\n heading1: {\n icon: <Heading1Icon />,\n title: \"Heading 1\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 1 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 1 }),\n },\n heading2: {\n icon: <Heading2Icon />,\n title: \"Heading 2\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 2 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 2 }),\n },\n heading3: {\n icon: <Heading3Icon />,\n title: \"Heading 3\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 3 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 3 }),\n },\n bulletList: {\n icon: <BulletListIcon />,\n title: \"Bullet list\",\n onClick: (e) => e.chain().focus().toggleBulletList().run(),\n isActive: (e) => e.isActive(\"bulletList\"),\n },\n orderedList: {\n icon: <OrderedListIcon />,\n title: \"Ordered list\",\n onClick: (e) => e.chain().focus().toggleOrderedList().run(),\n isActive: (e) => e.isActive(\"orderedList\"),\n },\n blockquote: {\n icon: <BlockquoteIcon />,\n title: \"Blockquote\",\n onClick: (e) => e.chain().focus().toggleBlockquote().run(),\n isActive: (e) => e.isActive(\"blockquote\"),\n },\n codeBlock: {\n icon: <CodeBlockIcon />,\n title: \"Code block\",\n onClick: (e) => e.chain().focus().toggleCodeBlock().run(),\n isActive: (e) => e.isActive(\"codeBlock\"),\n },\n link: {\n icon: <LinkIcon />,\n title: \"Link\",\n // Minimal UX: window.prompt for the URL (no extra UI deps). Empty input\n // clears any existing link on the selection.\n onClick: (e) => {\n const prev = (e.getAttributes(\"link\") as { href?: string }).href ?? \"\";\n const url =\n typeof window !== \"undefined\"\n ? window.prompt(\"Enter URL\", prev)\n : null;\n if (url === null) return; // cancelled\n if (url === \"\") {\n e.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n return;\n }\n e.chain().focus().extendMarkRange(\"link\").setLink({ href: url }).run();\n },\n isActive: (e) => e.isActive(\"link\"),\n },\n undo: {\n icon: <UndoIcon />,\n title: \"Undo\",\n onClick: (e) => e.chain().focus().undo().run(),\n isDisabled: (e) => !e.can().undo(),\n },\n redo: {\n icon: <RedoIcon />,\n title: \"Redo\",\n onClick: (e) => e.chain().focus().redo().run(),\n isDisabled: (e) => !e.can().redo(),\n },\n};\n\nconst toolButtonClass = (active: boolean) =>\n cn(\n \"inline-flex h-8 w-8 items-center justify-center rounded-lg text-gray-600 transition\",\n \"hover:bg-gray-100 hover:text-gray-800 disabled:cursor-not-allowed disabled:opacity-40\",\n \"dark:text-gray-400 dark:hover:bg-white/[0.06] dark:hover:text-gray-200\",\n active &&\n \"bg-brand-50 text-brand-600 hover:bg-brand-50 hover:text-brand-600 dark:bg-brand-500/15 dark:text-brand-400 dark:hover:bg-brand-500/15 dark:hover:text-brand-400\"\n );\n\nconst Divider: React.FC = () => (\n <span\n aria-hidden\n className=\"mx-1 h-5 w-px self-center bg-gray-200 dark:bg-gray-700\"\n />\n);\n\n/**\n * Tiptap-powered WYSIWYG editor.\n *\n * Heavy, optional peer-dependency component (`@tiptap/*`). It is a client\n * component and touches the DOM at import time, so in SSR frameworks render it\n * client-only (e.g. next/dynamic with `ssr:false`), like the charts.\n */\nexport const Editor: React.FC<EditorProps> = ({\n content,\n onChange,\n placeholder = \"Start writing…\",\n editable = true,\n toolbar = DEFAULT_TOOLBAR,\n className,\n editorClassName,\n}) => {\n const editor = useEditor({\n extensions: [\n StarterKit,\n Link.configure({ openOnClick: false }),\n Placeholder.configure({ placeholder }),\n ],\n content,\n editable,\n immediatelyRender: false,\n editorProps: {\n attributes: {\n class: \"focus:outline-none\",\n },\n },\n onUpdate: ({ editor }) => onChange?.(editor.getHTML()),\n });\n\n // Keep editability in sync if the prop changes after mount.\n React.useEffect(() => {\n editor?.setEditable(editable);\n }, [editor, editable]);\n\n // Not yet mounted (SSR / first paint): render a skeleton placeholder.\n if (!editor) {\n return (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-xl border border-gray-200 dark:border-gray-800\",\n className\n )}\n >\n {editable && (\n <div className=\"h-12 border-b border-gray-200 bg-gray-50 dark:border-gray-800 dark:bg-white/[0.02]\" />\n )}\n <div className=\"min-h-[200px] animate-pulse bg-gray-50/50 dark:bg-white/[0.01]\" />\n </div>\n );\n }\n\n const renderToolbar = () => {\n let dividerKey = 0;\n return toolbar.map((item, index) => {\n // Custom button object.\n if (typeof item === \"object\") {\n const active = item.isActive?.(editor) ?? false;\n return (\n <button\n key={item.id || `custom-${index}`}\n type=\"button\"\n title={item.title}\n aria-label={item.title}\n aria-pressed={active}\n onClick={() => item.onClick(editor)}\n className={toolButtonClass(active)}\n >\n {item.icon}\n </button>\n );\n }\n\n if (item === \"divider\") {\n return <Divider key={`divider-${dividerKey++}`} />;\n }\n\n const def = BUILTINS[item];\n if (!def) return null;\n const active = def.isActive?.(editor) ?? false;\n const disabled = def.isDisabled?.(editor) ?? false;\n return (\n <button\n key={item}\n type=\"button\"\n title={def.title}\n aria-label={def.title}\n aria-pressed={active}\n disabled={disabled}\n onClick={() => def.onClick(editor)}\n className={toolButtonClass(active)}\n >\n {def.icon}\n </button>\n );\n });\n };\n\n return (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-xl border border-gray-200 bg-white shadow-theme-xs dark:border-gray-800 dark:bg-white/[0.02]\",\n className\n )}\n >\n {editable && (\n <div className=\"flex flex-wrap items-center gap-0.5 border-b border-gray-200 bg-gray-50 px-2 py-1.5 dark:border-gray-800 dark:bg-white/[0.02]\">\n {renderToolbar()}\n </div>\n )}\n <EditorContent\n editor={editor}\n className={cn(\n \"min-h-[200px] px-4 py-3 text-sm text-gray-700 dark:text-gray-300\",\n \"rounded-b-xl\",\n // Explicit element styling (no @tailwindcss/typography assumed).\n \"[&_.ProseMirror]:min-h-[180px] [&_.ProseMirror]:outline-none\",\n \"[&_h1]:mb-3 [&_h1]:mt-4 [&_h1]:text-2xl [&_h1]:font-semibold [&_h1]:text-gray-900 dark:[&_h1]:text-white/90\",\n \"[&_h2]:mb-2 [&_h2]:mt-4 [&_h2]:text-xl [&_h2]:font-semibold [&_h2]:text-gray-900 dark:[&_h2]:text-white/90\",\n \"[&_h3]:mb-2 [&_h3]:mt-3 [&_h3]:text-lg [&_h3]:font-semibold [&_h3]:text-gray-900 dark:[&_h3]:text-white/90\",\n \"[&_p]:my-2 [&_p]:leading-relaxed\",\n \"[&_ul]:my-2 [&_ul]:list-disc [&_ul]:pl-6\",\n \"[&_ol]:my-2 [&_ol]:list-decimal [&_ol]:pl-6\",\n \"[&_li]:my-1 [&_li>p]:my-0\",\n \"[&_a]:text-brand-500 [&_a]:underline hover:[&_a]:text-brand-600 dark:[&_a]:text-brand-400\",\n \"[&_blockquote]:my-3 [&_blockquote]:border-l-4 [&_blockquote]:border-gray-300 [&_blockquote]:pl-4 [&_blockquote]:italic [&_blockquote]:text-gray-600 dark:[&_blockquote]:border-gray-700 dark:[&_blockquote]:text-gray-400\",\n \"[&_code]:rounded [&_code]:bg-gray-100 [&_code]:px-1.5 [&_code]:py-0.5 [&_code]:font-mono [&_code]:text-[0.85em] [&_code]:text-brand-600 dark:[&_code]:bg-white/[0.06] dark:[&_code]:text-brand-400\",\n \"[&_pre]:my-3 [&_pre]:overflow-x-auto [&_pre]:rounded-lg [&_pre]:bg-gray-900 [&_pre]:p-4 [&_pre]:font-mono [&_pre]:text-sm [&_pre]:text-gray-100 dark:[&_pre]:bg-black/40\",\n \"[&_pre_code]:bg-transparent [&_pre_code]:p-0 [&_pre_code]:text-inherit\",\n \"[&_hr]:my-4 [&_hr]:border-gray-200 dark:[&_hr]:border-gray-800\",\n // Placeholder styling for the empty-document first node.\n \"[&_.is-editor-empty:first-child::before]:pointer-events-none [&_.is-editor-empty:first-child::before]:float-left [&_.is-editor-empty:first-child::before]:h-0 [&_.is-editor-empty:first-child::before]:text-gray-400 [&_.is-editor-empty:first-child::before]:content-[attr(data-placeholder)] dark:[&_.is-editor-empty:first-child::before]:text-gray-600\",\n editorClassName\n )}\n />\n </div>\n );\n};\n"]}
|