@melv1c/ui-kit 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +65 -0
  2. package/dist/base.css +49 -0
  3. package/dist/chunk-2ZWQNZEN.cjs +63 -0
  4. package/dist/chunk-2ZWQNZEN.cjs.map +1 -0
  5. package/dist/chunk-4H5OSMBC.js +52 -0
  6. package/dist/chunk-4H5OSMBC.js.map +1 -0
  7. package/dist/chunk-GQ6Z5A4R.cjs +262 -0
  8. package/dist/chunk-GQ6Z5A4R.cjs.map +1 -0
  9. package/dist/chunk-I7WHASOO.cjs +13 -0
  10. package/dist/chunk-I7WHASOO.cjs.map +1 -0
  11. package/dist/chunk-PYHBC3IQ.js +17 -0
  12. package/dist/chunk-PYHBC3IQ.js.map +1 -0
  13. package/dist/chunk-PZ5AY32C.js +9 -0
  14. package/dist/chunk-PZ5AY32C.js.map +1 -0
  15. package/dist/chunk-Q4GFV3J3.cjs +19 -0
  16. package/dist/chunk-Q4GFV3J3.cjs.map +1 -0
  17. package/dist/chunk-Q7SFCCGT.cjs +11 -0
  18. package/dist/chunk-Q7SFCCGT.cjs.map +1 -0
  19. package/dist/chunk-QV4CTFLS.cjs +60 -0
  20. package/dist/chunk-QV4CTFLS.cjs.map +1 -0
  21. package/dist/chunk-RZJFYAJW.js +60 -0
  22. package/dist/chunk-RZJFYAJW.js.map +1 -0
  23. package/dist/chunk-WTLIXI2B.js +225 -0
  24. package/dist/chunk-WTLIXI2B.js.map +1 -0
  25. package/dist/chunk-WZ2GOU2J.js +11 -0
  26. package/dist/chunk-WZ2GOU2J.js.map +1 -0
  27. package/dist/code-diff-editor-IT2RMVDC.js +73 -0
  28. package/dist/code-diff-editor-IT2RMVDC.js.map +1 -0
  29. package/dist/code-diff-editor-J24VGXHL.cjs +75 -0
  30. package/dist/code-diff-editor-J24VGXHL.cjs.map +1 -0
  31. package/dist/code-editor-DK64HVFQ.cjs +84 -0
  32. package/dist/code-editor-DK64HVFQ.cjs.map +1 -0
  33. package/dist/code-editor-EJIJXZLN.js +82 -0
  34. package/dist/code-editor-EJIJXZLN.js.map +1 -0
  35. package/dist/index.cjs +4196 -0
  36. package/dist/index.cjs.map +1 -0
  37. package/dist/index.d.cts +623 -0
  38. package/dist/index.d.ts +623 -0
  39. package/dist/index.js +3870 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/locales/index.cjs +33 -0
  42. package/dist/locales/index.cjs.map +1 -0
  43. package/dist/locales/index.d.cts +43 -0
  44. package/dist/locales/index.d.ts +43 -0
  45. package/dist/locales/index.js +4 -0
  46. package/dist/locales/index.js.map +1 -0
  47. package/dist/rich-text-editor-JUERRDHQ.js +442 -0
  48. package/dist/rich-text-editor-JUERRDHQ.js.map +1 -0
  49. package/dist/rich-text-editor-MOJDWQTI.cjs +451 -0
  50. package/dist/rich-text-editor-MOJDWQTI.cjs.map +1 -0
  51. package/dist/themes/claude.css +125 -0
  52. package/dist/themes/default.css +70 -0
  53. package/dist/themes/doom64.css +117 -0
  54. package/dist/themes/t3chat.css +125 -0
  55. package/dist/themes/twitter.css +127 -0
  56. package/dist/themes/vercel.css +117 -0
  57. package/package.json +166 -0
  58. package/styles.css +120 -0
@@ -0,0 +1,451 @@
1
+ 'use strict';
2
+
3
+ var chunkGQ6Z5A4R_cjs = require('./chunk-GQ6Z5A4R.cjs');
4
+ var chunkI7WHASOO_cjs = require('./chunk-I7WHASOO.cjs');
5
+ require('./chunk-Q7SFCCGT.cjs');
6
+ var Link = require('@tiptap/extension-link');
7
+ var Placeholder = require('@tiptap/extension-placeholder');
8
+ var Underline = require('@tiptap/extension-underline');
9
+ var react = require('@tiptap/react');
10
+ var StarterKit = require('@tiptap/starter-kit');
11
+ var lucideReact = require('lucide-react');
12
+ var classVarianceAuthority = require('class-variance-authority');
13
+ var react$1 = require('react');
14
+ var jsxRuntime = require('react/jsx-runtime');
15
+
16
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
17
+
18
+ var Link__default = /*#__PURE__*/_interopDefault(Link);
19
+ var Placeholder__default = /*#__PURE__*/_interopDefault(Placeholder);
20
+ var Underline__default = /*#__PURE__*/_interopDefault(Underline);
21
+ var StarterKit__default = /*#__PURE__*/_interopDefault(StarterKit);
22
+
23
+ var richTextEditorVariants = classVarianceAuthority.cva(
24
+ "relative overflow-hidden rounded-md border transition-[color,box-shadow] outline-none focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]",
25
+ {
26
+ variants: {
27
+ variant: {
28
+ default: "border-input bg-transparent",
29
+ ghost: "border-transparent bg-transparent",
30
+ card: "border-border bg-card shadow-sm"
31
+ },
32
+ size: {
33
+ default: "min-h-[200px]",
34
+ sm: "min-h-[120px]",
35
+ lg: "min-h-[350px]"
36
+ }
37
+ },
38
+ defaultVariants: {
39
+ variant: "default",
40
+ size: "default"
41
+ }
42
+ }
43
+ );
44
+ var toolbarVariants = classVarianceAuthority.cva(
45
+ "flex flex-wrap items-center gap-1 border-b p-2",
46
+ {
47
+ variants: {
48
+ variant: {
49
+ default: "border-input bg-muted/30",
50
+ ghost: "border-transparent bg-transparent",
51
+ card: "border-border bg-muted/50"
52
+ }
53
+ },
54
+ defaultVariants: {
55
+ variant: "default"
56
+ }
57
+ }
58
+ );
59
+ var editorContentVariants = classVarianceAuthority.cva(
60
+ "prose prose-sm dark:prose-invert max-w-none p-4 focus:outline-none",
61
+ {
62
+ variants: {
63
+ size: {
64
+ default: "min-h-[150px]",
65
+ sm: "min-h-[80px]",
66
+ lg: "min-h-[300px]"
67
+ }
68
+ },
69
+ defaultVariants: {
70
+ size: "default"
71
+ }
72
+ }
73
+ );
74
+ function LinkPopover({ editor, disabled }) {
75
+ const [isOpen, setIsOpen] = react$1.useState(false);
76
+ const [url, setUrl] = react$1.useState("");
77
+ const inputRef = react$1.useRef(null);
78
+ const handleOpen = react$1.useCallback(
79
+ (open) => {
80
+ if (open) {
81
+ const previousUrl = editor.getAttributes("link").href || "";
82
+ setUrl(previousUrl);
83
+ }
84
+ setIsOpen(open);
85
+ },
86
+ [editor]
87
+ );
88
+ const handleSetLink = react$1.useCallback(() => {
89
+ if (url === "") {
90
+ editor.chain().focus().extendMarkRange("link").unsetLink().run();
91
+ } else {
92
+ editor.chain().focus().extendMarkRange("link").setLink({ href: url, target: "_blank" }).run();
93
+ }
94
+ setIsOpen(false);
95
+ setUrl("");
96
+ }, [editor, url]);
97
+ const handleUnsetLink = react$1.useCallback(() => {
98
+ editor.chain().focus().unsetLink().run();
99
+ setIsOpen(false);
100
+ setUrl("");
101
+ }, [editor]);
102
+ const isActive = editor.isActive("link");
103
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkGQ6Z5A4R_cjs.Popover, { open: isOpen, onOpenChange: handleOpen, children: [
104
+ /* @__PURE__ */ jsxRuntime.jsx(chunkGQ6Z5A4R_cjs.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
105
+ chunkGQ6Z5A4R_cjs.Toggle,
106
+ {
107
+ size: "sm",
108
+ pressed: isActive,
109
+ disabled,
110
+ "aria-label": isActive ? "Edit link" : "Add link",
111
+ variant: "outline",
112
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Link, { className: "size-4" })
113
+ }
114
+ ) }),
115
+ /* @__PURE__ */ jsxRuntime.jsx(chunkGQ6Z5A4R_cjs.PopoverContent, { className: "w-80 p-3", align: "start", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3", children: [
116
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm font-medium", children: isActive ? "Edit Link" : "Insert Link" }),
117
+ /* @__PURE__ */ jsxRuntime.jsx(
118
+ chunkGQ6Z5A4R_cjs.Input,
119
+ {
120
+ ref: inputRef,
121
+ type: "url",
122
+ placeholder: "https://example.com",
123
+ value: url,
124
+ onChange: (e) => setUrl(e.target.value),
125
+ onKeyDown: (e) => {
126
+ if (e.key === "Enter") {
127
+ e.preventDefault();
128
+ handleSetLink();
129
+ }
130
+ if (e.key === "Escape") {
131
+ setIsOpen(false);
132
+ }
133
+ }
134
+ }
135
+ ),
136
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
137
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-1", children: [
138
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkGQ6Z5A4R_cjs.Button, { type: "button", size: "sm", onClick: handleSetLink, children: [
139
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-3.5" }),
140
+ isActive ? "Update" : "Insert"
141
+ ] }),
142
+ /* @__PURE__ */ jsxRuntime.jsxs(
143
+ chunkGQ6Z5A4R_cjs.Button,
144
+ {
145
+ type: "button",
146
+ variant: "outline",
147
+ size: "sm",
148
+ onClick: () => {
149
+ setIsOpen(false);
150
+ setUrl("");
151
+ },
152
+ children: [
153
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-3.5" }),
154
+ "Cancel"
155
+ ]
156
+ }
157
+ )
158
+ ] }),
159
+ isActive && /* @__PURE__ */ jsxRuntime.jsxs(
160
+ chunkGQ6Z5A4R_cjs.Button,
161
+ {
162
+ type: "button",
163
+ variant: "ghost",
164
+ size: "sm",
165
+ onClick: handleUnsetLink,
166
+ className: "text-destructive hover:text-destructive",
167
+ children: [
168
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Unlink, { className: "size-3.5" }),
169
+ "Remove"
170
+ ]
171
+ }
172
+ )
173
+ ] })
174
+ ] }) })
175
+ ] });
176
+ }
177
+ var defaultOptions = {
178
+ headings: true,
179
+ bold: true,
180
+ italic: true,
181
+ underline: true,
182
+ strikethrough: true,
183
+ bulletList: true,
184
+ orderedList: true,
185
+ link: true
186
+ };
187
+ function EditorToolbar({
188
+ editor,
189
+ variant,
190
+ disabled,
191
+ className,
192
+ options
193
+ }) {
194
+ const opts = { ...defaultOptions, ...options };
195
+ const showHeadings = opts.headings;
196
+ const showFormatting = opts.bold || opts.italic || opts.underline || opts.strikethrough;
197
+ const showLists = opts.bulletList || opts.orderedList;
198
+ const showLink = opts.link;
199
+ const activeGroups = [showHeadings, showFormatting, showLists, showLink];
200
+ const needsSeparatorAfter = (groupIndex) => {
201
+ return activeGroups.slice(groupIndex + 1).some(Boolean);
202
+ };
203
+ return /* @__PURE__ */ jsxRuntime.jsxs(
204
+ "div",
205
+ {
206
+ "data-slot": "rich-text-editor-toolbar",
207
+ className: chunkI7WHASOO_cjs.cn(toolbarVariants({ variant }), className),
208
+ children: [
209
+ showHeadings && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
210
+ /* @__PURE__ */ jsxRuntime.jsxs(
211
+ chunkGQ6Z5A4R_cjs.ToggleGroup,
212
+ {
213
+ type: "single",
214
+ value: editor?.isActive("heading", { level: 1 }) ? "h1" : editor?.isActive("heading", { level: 2 }) ? "h2" : editor?.isActive("heading", { level: 3 }) ? "h3" : "",
215
+ size: "sm",
216
+ variant: "outline",
217
+ children: [
218
+ /* @__PURE__ */ jsxRuntime.jsx(
219
+ chunkGQ6Z5A4R_cjs.ToggleGroupItem,
220
+ {
221
+ value: "h1",
222
+ "aria-label": "Heading 1",
223
+ disabled: disabled || !editor?.can().chain().focus().toggleHeading({ level: 1 }).run(),
224
+ onClick: () => editor?.chain().focus().toggleHeading({ level: 1 }).run(),
225
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading1, { className: "size-4" })
226
+ }
227
+ ),
228
+ /* @__PURE__ */ jsxRuntime.jsx(
229
+ chunkGQ6Z5A4R_cjs.ToggleGroupItem,
230
+ {
231
+ value: "h2",
232
+ "aria-label": "Heading 2",
233
+ disabled: disabled || !editor?.can().chain().focus().toggleHeading({ level: 2 }).run(),
234
+ onClick: () => editor?.chain().focus().toggleHeading({ level: 2 }).run(),
235
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading2, { className: "size-4" })
236
+ }
237
+ ),
238
+ /* @__PURE__ */ jsxRuntime.jsx(
239
+ chunkGQ6Z5A4R_cjs.ToggleGroupItem,
240
+ {
241
+ value: "h3",
242
+ "aria-label": "Heading 3",
243
+ disabled: disabled || !editor?.can().chain().focus().toggleHeading({ level: 3 }).run(),
244
+ onClick: () => editor?.chain().focus().toggleHeading({ level: 3 }).run(),
245
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading3, { className: "size-4" })
246
+ }
247
+ )
248
+ ]
249
+ }
250
+ ),
251
+ needsSeparatorAfter(0) && /* @__PURE__ */ jsxRuntime.jsx(chunkGQ6Z5A4R_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" })
252
+ ] }),
253
+ showFormatting && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
254
+ /* @__PURE__ */ jsxRuntime.jsxs(
255
+ chunkGQ6Z5A4R_cjs.ToggleGroup,
256
+ {
257
+ type: "multiple",
258
+ value: ["bold", "italic", "underline", "strike"].filter(
259
+ (format) => editor?.isActive(format)
260
+ ),
261
+ size: "sm",
262
+ variant: "outline",
263
+ children: [
264
+ opts.bold && /* @__PURE__ */ jsxRuntime.jsx(
265
+ chunkGQ6Z5A4R_cjs.ToggleGroupItem,
266
+ {
267
+ value: "bold",
268
+ "aria-label": "Bold",
269
+ disabled: disabled || !editor.can().chain().focus().toggleBold().run(),
270
+ onClick: () => editor.chain().focus().toggleBold().run(),
271
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bold, { className: "size-4" })
272
+ }
273
+ ),
274
+ opts.italic && /* @__PURE__ */ jsxRuntime.jsx(
275
+ chunkGQ6Z5A4R_cjs.ToggleGroupItem,
276
+ {
277
+ value: "italic",
278
+ "aria-label": "Italic",
279
+ disabled: disabled || !editor.can().chain().focus().toggleItalic().run(),
280
+ onClick: () => editor.chain().focus().toggleItalic().run(),
281
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Italic, { className: "size-4" })
282
+ }
283
+ ),
284
+ opts.underline && /* @__PURE__ */ jsxRuntime.jsx(
285
+ chunkGQ6Z5A4R_cjs.ToggleGroupItem,
286
+ {
287
+ value: "underline",
288
+ "aria-label": "Underline",
289
+ disabled: disabled || !editor.can().chain().focus().toggleUnderline().run(),
290
+ onClick: () => editor.chain().focus().toggleUnderline().run(),
291
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Underline, { className: "size-4" })
292
+ }
293
+ ),
294
+ opts.strikethrough && /* @__PURE__ */ jsxRuntime.jsx(
295
+ chunkGQ6Z5A4R_cjs.ToggleGroupItem,
296
+ {
297
+ value: "strike",
298
+ "aria-label": "Strikethrough",
299
+ disabled: disabled || !editor.can().chain().focus().toggleStrike().run(),
300
+ onClick: () => editor.chain().focus().toggleStrike().run(),
301
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Strikethrough, { className: "size-4" })
302
+ }
303
+ )
304
+ ]
305
+ }
306
+ ),
307
+ needsSeparatorAfter(1) && /* @__PURE__ */ jsxRuntime.jsx(chunkGQ6Z5A4R_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" })
308
+ ] }),
309
+ showLists && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
310
+ /* @__PURE__ */ jsxRuntime.jsxs(
311
+ chunkGQ6Z5A4R_cjs.ToggleGroup,
312
+ {
313
+ type: "single",
314
+ value: editor.isActive("bulletList") ? "bulletList" : editor.isActive("orderedList") ? "orderedList" : "",
315
+ size: "sm",
316
+ variant: "outline",
317
+ children: [
318
+ opts.bulletList && /* @__PURE__ */ jsxRuntime.jsx(
319
+ chunkGQ6Z5A4R_cjs.ToggleGroupItem,
320
+ {
321
+ value: "bulletList",
322
+ "aria-label": "Bullet list",
323
+ disabled,
324
+ onClick: () => editor.chain().focus().toggleBulletList().run(),
325
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.List, { className: "size-4" })
326
+ }
327
+ ),
328
+ opts.orderedList && /* @__PURE__ */ jsxRuntime.jsx(
329
+ chunkGQ6Z5A4R_cjs.ToggleGroupItem,
330
+ {
331
+ value: "orderedList",
332
+ "aria-label": "Ordered list",
333
+ disabled,
334
+ onClick: () => editor.chain().focus().toggleOrderedList().run(),
335
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ListOrdered, { className: "size-4" })
336
+ }
337
+ )
338
+ ]
339
+ }
340
+ ),
341
+ needsSeparatorAfter(2) && /* @__PURE__ */ jsxRuntime.jsx(chunkGQ6Z5A4R_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" })
342
+ ] }),
343
+ showLink && /* @__PURE__ */ jsxRuntime.jsx(LinkPopover, { editor, disabled })
344
+ ]
345
+ }
346
+ );
347
+ }
348
+ function RichTextEditor({
349
+ value,
350
+ onChange,
351
+ placeholder = "Start typing...",
352
+ readOnly = false,
353
+ disabled = false,
354
+ multiline = true,
355
+ className,
356
+ variant,
357
+ size,
358
+ contentClassName,
359
+ toolbarClassName,
360
+ toolbarOptions,
361
+ ...props
362
+ }) {
363
+ const editor = react.useEditor({
364
+ extensions: [
365
+ StarterKit__default.default.configure({
366
+ heading: {
367
+ levels: [1, 2, 3]
368
+ },
369
+ codeBlock: false,
370
+ blockquote: false
371
+ }),
372
+ Underline__default.default,
373
+ Link__default.default.configure({
374
+ openOnClick: false,
375
+ HTMLAttributes: {
376
+ class: "text-primary underline underline-offset-2 cursor-pointer"
377
+ }
378
+ }),
379
+ Placeholder__default.default.configure({
380
+ placeholder,
381
+ emptyEditorClass: "before:content-[attr(data-placeholder)] before:text-muted-foreground before:float-left before:h-0 before:pointer-events-none"
382
+ })
383
+ ],
384
+ content: value,
385
+ onUpdate: ({ editor: editor2 }) => {
386
+ onChange(editor2.isEmpty ? "" : editor2.getHTML());
387
+ },
388
+ editable: !readOnly && !disabled,
389
+ shouldRerenderOnTransaction: true,
390
+ // Force a re-render when a transaction is made
391
+ editorProps: {
392
+ attributes: {
393
+ class: chunkI7WHASOO_cjs.cn(
394
+ editorContentVariants({ size: multiline ? size : void 0 }),
395
+ "[&_h1]:text-2xl [&_h1]:font-bold [&_h1]:mb-2",
396
+ "[&_h2]:text-xl [&_h2]:font-semibold [&_h2]:mb-2",
397
+ "[&_h3]:text-lg [&_h3]:font-medium [&_h3]:mb-1",
398
+ "[&_ul]:list-disc [&_ul]:ml-4 [&_ol]:list-decimal [&_ol]:ml-4",
399
+ "[&_a]:text-primary [&_a]:underline [&_a]:underline-offset-2",
400
+ !multiline && "min-h-0 py-2"
401
+ )
402
+ },
403
+ handleKeyDown: (_, event) => {
404
+ if (!multiline && event.key === "Enter") {
405
+ return true;
406
+ }
407
+ return false;
408
+ }
409
+ }
410
+ });
411
+ return /* @__PURE__ */ jsxRuntime.jsxs(
412
+ "div",
413
+ {
414
+ "data-slot": "rich-text-editor",
415
+ className: chunkI7WHASOO_cjs.cn(
416
+ richTextEditorVariants({ variant, size: multiline ? size : void 0 }),
417
+ !multiline && "min-h-0",
418
+ disabled && "cursor-not-allowed opacity-50",
419
+ className
420
+ ),
421
+ ...props,
422
+ children: [
423
+ !readOnly && /* @__PURE__ */ jsxRuntime.jsx(
424
+ EditorToolbar,
425
+ {
426
+ editor,
427
+ variant,
428
+ disabled,
429
+ className: toolbarClassName,
430
+ options: toolbarOptions
431
+ }
432
+ ),
433
+ /* @__PURE__ */ jsxRuntime.jsx(
434
+ react.EditorContent,
435
+ {
436
+ editor,
437
+ className: chunkI7WHASOO_cjs.cn(
438
+ "w-full",
439
+ disabled && "pointer-events-none",
440
+ contentClassName
441
+ )
442
+ }
443
+ )
444
+ ]
445
+ }
446
+ );
447
+ }
448
+
449
+ exports.RichTextEditor = RichTextEditor;
450
+ //# sourceMappingURL=rich-text-editor-MOJDWQTI.cjs.map
451
+ //# sourceMappingURL=rich-text-editor-MOJDWQTI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/editors/rich-text/variants.ts","../src/components/editors/rich-text/toolbar/link-popover.tsx","../src/components/editors/rich-text/toolbar/editor-toolbar.tsx","../src/components/editors/rich-text/rich-text-editor.tsx"],"names":["cva","useState","useRef","useCallback","jsxs","Popover","jsx","PopoverTrigger","Toggle","LinkIcon","PopoverContent","Input","Button","Check","X","Unlink","cn","Fragment","ToggleGroup","ToggleGroupItem","Heading1","Heading2","Heading3","Separator","Bold","Italic","UnderlineIcon","Strikethrough","List","ListOrdered","useEditor","StarterKit","Underline","Link","Placeholder","editor","EditorContent"],"mappings":"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","file":"rich-text-editor-MOJDWQTI.cjs","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const richTextEditorVariants = cva(\n \"relative overflow-hidden rounded-md border transition-[color,box-shadow] outline-none focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]\",\n {\n variants: {\n variant: {\n default: \"border-input bg-transparent\",\n ghost: \"border-transparent bg-transparent\",\n card: \"border-border bg-card shadow-sm\",\n },\n size: {\n default: \"min-h-[200px]\",\n sm: \"min-h-[120px]\",\n lg: \"min-h-[350px]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport const toolbarVariants = cva(\n \"flex flex-wrap items-center gap-1 border-b p-2\",\n {\n variants: {\n variant: {\n default: \"border-input bg-muted/30\",\n ghost: \"border-transparent bg-transparent\",\n card: \"border-border bg-muted/50\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport const editorContentVariants = cva(\n \"prose prose-sm dark:prose-invert max-w-none p-4 focus:outline-none\",\n {\n variants: {\n size: {\n default: \"min-h-[150px]\",\n sm: \"min-h-[80px]\",\n lg: \"min-h-[300px]\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n },\n);\n","import { Check, Link as LinkIcon, Unlink, X } from \"lucide-react\";\nimport { useCallback, useRef, useState } from \"react\";\nimport { Button } from \"@/components/base/button\";\nimport { Input } from \"@/components/base/input\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/base/popover\";\nimport { Toggle } from \"@/components/base/toggle\";\nimport type { LinkPopoverProps } from \"../types\";\n\nfunction LinkPopover({ editor, disabled }: LinkPopoverProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [url, setUrl] = useState(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleOpen = useCallback(\n (open: boolean) => {\n if (open) {\n const previousUrl = editor.getAttributes(\"link\").href || \"\";\n setUrl(previousUrl);\n }\n setIsOpen(open);\n },\n [editor],\n );\n\n const handleSetLink = useCallback(() => {\n if (url === \"\") {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n } else {\n editor\n .chain()\n .focus()\n .extendMarkRange(\"link\")\n .setLink({ href: url, target: \"_blank\" })\n .run();\n }\n setIsOpen(false);\n setUrl(\"\");\n }, [editor, url]);\n\n const handleUnsetLink = useCallback(() => {\n editor.chain().focus().unsetLink().run();\n setIsOpen(false);\n setUrl(\"\");\n }, [editor]);\n\n const isActive = editor.isActive(\"link\");\n\n return (\n <Popover open={isOpen} onOpenChange={handleOpen}>\n <PopoverTrigger asChild>\n <Toggle\n size=\"sm\"\n pressed={isActive}\n disabled={disabled}\n aria-label={isActive ? \"Edit link\" : \"Add link\"}\n variant=\"outline\"\n >\n <LinkIcon className=\"size-4\" />\n </Toggle>\n </PopoverTrigger>\n <PopoverContent className=\"w-80 p-3\" align=\"start\">\n <div className=\"flex flex-col gap-3\">\n <div className=\"text-sm font-medium\">\n {isActive ? \"Edit Link\" : \"Insert Link\"}\n </div>\n <Input\n ref={inputRef}\n type=\"url\"\n placeholder=\"https://example.com\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleSetLink();\n }\n if (e.key === \"Escape\") {\n setIsOpen(false);\n }\n }}\n />\n <div className=\"flex items-center justify-between\">\n <div className=\"flex gap-1\">\n <Button type=\"button\" size=\"sm\" onClick={handleSetLink}>\n <Check className=\"size-3.5\" />\n {isActive ? \"Update\" : \"Insert\"}\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n setIsOpen(false);\n setUrl(\"\");\n }}\n >\n <X className=\"size-3.5\" />\n Cancel\n </Button>\n </div>\n {isActive && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleUnsetLink}\n className=\"text-destructive hover:text-destructive\"\n >\n <Unlink className=\"size-3.5\" />\n Remove\n </Button>\n )}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { LinkPopover };\n","import {\n Bold,\n Heading1,\n Heading2,\n Heading3,\n Italic,\n List,\n ListOrdered,\n Strikethrough,\n Underline as UnderlineIcon,\n} from \"lucide-react\";\nimport { Separator } from \"@/components/base/separator\";\nimport { ToggleGroup, ToggleGroupItem } from \"@/components/base/toggle-group\";\nimport { cn } from \"@/lib/utils\";\nimport type { EditorToolbarProps, ToolbarOptions } from \"../types\";\nimport { toolbarVariants } from \"../variants\";\nimport { LinkPopover } from \"./link-popover\";\n\nconst defaultOptions: Required<ToolbarOptions> = {\n headings: true,\n bold: true,\n italic: true,\n underline: true,\n strikethrough: true,\n bulletList: true,\n orderedList: true,\n link: true,\n};\n\nfunction EditorToolbar({\n editor,\n variant,\n disabled,\n className,\n options,\n}: EditorToolbarProps) {\n const opts = { ...defaultOptions, ...options };\n\n const showHeadings = opts.headings;\n const showFormatting =\n opts.bold || opts.italic || opts.underline || opts.strikethrough;\n const showLists = opts.bulletList || opts.orderedList;\n const showLink = opts.link;\n\n // Determine which separators to show based on active groups\n const activeGroups = [showHeadings, showFormatting, showLists, showLink];\n const needsSeparatorAfter = (groupIndex: number): boolean => {\n // Show separator if there's at least one active group after this one\n return activeGroups.slice(groupIndex + 1).some(Boolean);\n };\n\n return (\n <div\n data-slot=\"rich-text-editor-toolbar\"\n className={cn(toolbarVariants({ variant }), className)}\n >\n {/* Heading Group */}\n {showHeadings && (\n <>\n <ToggleGroup\n type=\"single\"\n value={\n editor?.isActive(\"heading\", { level: 1 })\n ? \"h1\"\n : editor?.isActive(\"heading\", { level: 2 })\n ? \"h2\"\n : editor?.isActive(\"heading\", { level: 3 })\n ? \"h3\"\n : \"\"\n }\n size=\"sm\"\n variant=\"outline\"\n >\n <ToggleGroupItem\n value=\"h1\"\n aria-label=\"Heading 1\"\n disabled={\n disabled ||\n !editor?.can().chain().focus().toggleHeading({ level: 1 }).run()\n }\n onClick={() =>\n editor?.chain().focus().toggleHeading({ level: 1 }).run()\n }\n >\n <Heading1 className=\"size-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem\n value=\"h2\"\n aria-label=\"Heading 2\"\n disabled={\n disabled ||\n !editor?.can().chain().focus().toggleHeading({ level: 2 }).run()\n }\n onClick={() =>\n editor?.chain().focus().toggleHeading({ level: 2 }).run()\n }\n >\n <Heading2 className=\"size-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem\n value=\"h3\"\n aria-label=\"Heading 3\"\n disabled={\n disabled ||\n !editor?.can().chain().focus().toggleHeading({ level: 3 }).run()\n }\n onClick={() =>\n editor?.chain().focus().toggleHeading({ level: 3 }).run()\n }\n >\n <Heading3 className=\"size-4\" />\n </ToggleGroupItem>\n </ToggleGroup>\n {needsSeparatorAfter(0) && (\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n )}\n </>\n )}\n\n {/* Text Formatting Group */}\n {showFormatting && (\n <>\n <ToggleGroup\n type=\"multiple\"\n value={[\"bold\", \"italic\", \"underline\", \"strike\"].filter((format) =>\n editor?.isActive(format),\n )}\n size=\"sm\"\n variant=\"outline\"\n >\n {opts.bold && (\n <ToggleGroupItem\n value=\"bold\"\n aria-label=\"Bold\"\n disabled={\n disabled || !editor.can().chain().focus().toggleBold().run()\n }\n onClick={() => editor.chain().focus().toggleBold().run()}\n >\n <Bold className=\"size-4\" />\n </ToggleGroupItem>\n )}\n {opts.italic && (\n <ToggleGroupItem\n value=\"italic\"\n aria-label=\"Italic\"\n disabled={\n disabled || !editor.can().chain().focus().toggleItalic().run()\n }\n onClick={() => editor.chain().focus().toggleItalic().run()}\n >\n <Italic className=\"size-4\" />\n </ToggleGroupItem>\n )}\n {opts.underline && (\n <ToggleGroupItem\n value=\"underline\"\n aria-label=\"Underline\"\n disabled={\n disabled ||\n !editor.can().chain().focus().toggleUnderline().run()\n }\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n >\n <UnderlineIcon className=\"size-4\" />\n </ToggleGroupItem>\n )}\n {opts.strikethrough && (\n <ToggleGroupItem\n value=\"strike\"\n aria-label=\"Strikethrough\"\n disabled={\n disabled || !editor.can().chain().focus().toggleStrike().run()\n }\n onClick={() => editor.chain().focus().toggleStrike().run()}\n >\n <Strikethrough className=\"size-4\" />\n </ToggleGroupItem>\n )}\n </ToggleGroup>\n {needsSeparatorAfter(1) && (\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n )}\n </>\n )}\n\n {/* List Group */}\n {showLists && (\n <>\n <ToggleGroup\n type=\"single\"\n value={\n editor.isActive(\"bulletList\")\n ? \"bulletList\"\n : editor.isActive(\"orderedList\")\n ? \"orderedList\"\n : \"\"\n }\n size=\"sm\"\n variant=\"outline\"\n >\n {opts.bulletList && (\n <ToggleGroupItem\n value=\"bulletList\"\n aria-label=\"Bullet list\"\n disabled={disabled}\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n >\n <List className=\"size-4\" />\n </ToggleGroupItem>\n )}\n {opts.orderedList && (\n <ToggleGroupItem\n value=\"orderedList\"\n aria-label=\"Ordered list\"\n disabled={disabled}\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n >\n <ListOrdered className=\"size-4\" />\n </ToggleGroupItem>\n )}\n </ToggleGroup>\n {needsSeparatorAfter(2) && (\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n )}\n </>\n )}\n\n {/* Link */}\n {showLink && <LinkPopover editor={editor} disabled={disabled} />}\n </div>\n );\n}\n\nexport { EditorToolbar };\n","import Link from \"@tiptap/extension-link\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport Underline from \"@tiptap/extension-underline\";\nimport { EditorContent, useEditor } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { cn } from \"@/lib/utils\";\nimport { EditorToolbar } from \"./toolbar\";\nimport type { RichTextEditorProps } from \"./types\";\nimport { editorContentVariants, richTextEditorVariants } from \"./variants\";\n\nfunction RichTextEditor({\n value,\n onChange,\n placeholder = \"Start typing...\",\n readOnly = false,\n disabled = false,\n multiline = true,\n className,\n variant,\n size,\n contentClassName,\n toolbarClassName,\n toolbarOptions,\n ...props\n}: RichTextEditorProps) {\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: {\n levels: [1, 2, 3],\n },\n codeBlock: false,\n blockquote: false,\n }),\n Underline,\n Link.configure({\n openOnClick: false,\n HTMLAttributes: {\n class: \"text-primary underline underline-offset-2 cursor-pointer\",\n },\n }),\n Placeholder.configure({\n placeholder,\n emptyEditorClass:\n \"before:content-[attr(data-placeholder)] before:text-muted-foreground before:float-left before:h-0 before:pointer-events-none\",\n }),\n ],\n content: value,\n onUpdate: ({ editor }) => {\n onChange(editor.isEmpty ? \"\" : editor.getHTML());\n },\n editable: !readOnly && !disabled,\n shouldRerenderOnTransaction: true, // Force a re-render when a transaction is made\n editorProps: {\n attributes: {\n class: cn(\n editorContentVariants({ size: multiline ? size : undefined }),\n \"[&_h1]:text-2xl [&_h1]:font-bold [&_h1]:mb-2\",\n \"[&_h2]:text-xl [&_h2]:font-semibold [&_h2]:mb-2\",\n \"[&_h3]:text-lg [&_h3]:font-medium [&_h3]:mb-1\",\n \"[&_ul]:list-disc [&_ul]:ml-4 [&_ol]:list-decimal [&_ol]:ml-4\",\n \"[&_a]:text-primary [&_a]:underline [&_a]:underline-offset-2\",\n !multiline && \"min-h-0 py-2\",\n ),\n },\n handleKeyDown: (_, event) => {\n // Prevent Enter key when multiline is disabled\n if (!multiline && event.key === \"Enter\") {\n return true;\n }\n return false;\n },\n },\n });\n\n return (\n <div\n data-slot=\"rich-text-editor\"\n className={cn(\n richTextEditorVariants({ variant, size: multiline ? size : undefined }),\n !multiline && \"min-h-0\",\n disabled && \"cursor-not-allowed opacity-50\",\n className,\n )}\n {...props}\n >\n {!readOnly && (\n <EditorToolbar\n editor={editor}\n variant={variant}\n disabled={disabled}\n className={toolbarClassName}\n options={toolbarOptions}\n />\n )}\n <EditorContent\n editor={editor}\n className={cn(\n \"w-full\",\n disabled && \"pointer-events-none\",\n contentClassName,\n )}\n />\n </div>\n );\n}\n\nexport { RichTextEditor, type RichTextEditorProps };\n"]}
@@ -0,0 +1,125 @@
1
+ :root {
2
+ --background: #faf9f5;
3
+ --foreground: #3d3929;
4
+ --card: #faf9f5;
5
+ --card-foreground: #141413;
6
+ --popover: #ffffff;
7
+ --popover-foreground: #28261b;
8
+ --primary: #c96442;
9
+ --primary-foreground: #ffffff;
10
+ --secondary: #e9e6dc;
11
+ --secondary-foreground: #535146;
12
+ --muted: #ede9de;
13
+ --muted-foreground: #83827d;
14
+ --accent: #e9e6dc;
15
+ --accent-foreground: #28261b;
16
+ --destructive: #141413;
17
+ --destructive-foreground: #ffffff;
18
+ --border: #dad9d4;
19
+ --input: #b4b2a7;
20
+ --ring: #c96442;
21
+ --chart-1: #b05730;
22
+ --chart-2: #9c87f5;
23
+ --chart-3: #ded8c4;
24
+ --chart-4: #dbd3f0;
25
+ --chart-5: #b4552d;
26
+ --sidebar: #f5f4ee;
27
+ --sidebar-foreground: #3d3d3a;
28
+ --sidebar-primary: #c96442;
29
+ --sidebar-primary-foreground: #fbfbfb;
30
+ --sidebar-accent: #e9e6dc;
31
+ --sidebar-accent-foreground: #343434;
32
+ --sidebar-border: #ebebeb;
33
+ --sidebar-ring: #b5b5b5;
34
+ --font-sans:
35
+ ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
36
+ Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif,
37
+ "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
38
+ --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
39
+ --font-mono:
40
+ ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
41
+ "Courier New", monospace;
42
+ --radius: 0.5rem;
43
+ --shadow-x: 0;
44
+ --shadow-y: 1px;
45
+ --shadow-blur: 3px;
46
+ --shadow-spread: 0px;
47
+ --shadow-opacity: 0.1;
48
+ --shadow-color: oklch(0 0 0);
49
+ --shadow-2xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05);
50
+ --shadow-xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05);
51
+ --shadow-sm:
52
+ 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 1px 2px -1px hsl(0 0% 0% / 0.1);
53
+ --shadow: 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 1px 2px -1px hsl(0 0% 0% / 0.1);
54
+ --shadow-md:
55
+ 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 2px 4px -1px hsl(0 0% 0% / 0.1);
56
+ --shadow-lg:
57
+ 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 4px 6px -1px hsl(0 0% 0% / 0.1);
58
+ --shadow-xl:
59
+ 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 8px 10px -1px hsl(0 0% 0% / 0.1);
60
+ --shadow-2xl: 0 1px 3px 0px hsl(0 0% 0% / 0.25);
61
+ --tracking-normal: 0em;
62
+ --spacing: 0.25rem;
63
+ }
64
+
65
+ .dark {
66
+ --background: #262624;
67
+ --foreground: #c3c0b6;
68
+ --card: #262624;
69
+ --card-foreground: #faf9f5;
70
+ --popover: #30302e;
71
+ --popover-foreground: #e5e5e2;
72
+ --primary: #d97757;
73
+ --primary-foreground: #ffffff;
74
+ --secondary: #faf9f5;
75
+ --secondary-foreground: #30302e;
76
+ --muted: #1b1b19;
77
+ --muted-foreground: #b7b5a9;
78
+ --accent: #1a1915;
79
+ --accent-foreground: #f5f4ee;
80
+ --destructive: #ef4444;
81
+ --destructive-foreground: #ffffff;
82
+ --border: #3e3e38;
83
+ --input: #52514a;
84
+ --ring: #d97757;
85
+ --chart-1: #b05730;
86
+ --chart-2: #9c87f5;
87
+ --chart-3: #1a1915;
88
+ --chart-4: #2f2b48;
89
+ --chart-5: #b4552d;
90
+ --sidebar: #1f1e1d;
91
+ --sidebar-foreground: #c3c0b6;
92
+ --sidebar-primary: #343434;
93
+ --sidebar-primary-foreground: #fbfbfb;
94
+ --sidebar-accent: #0f0f0e;
95
+ --sidebar-accent-foreground: #c3c0b6;
96
+ --sidebar-border: #ebebeb;
97
+ --sidebar-ring: #b5b5b5;
98
+ --font-sans:
99
+ ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
100
+ Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif,
101
+ "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
102
+ --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
103
+ --font-mono:
104
+ ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
105
+ "Courier New", monospace;
106
+ --radius: 0.5rem;
107
+ --shadow-x: 0;
108
+ --shadow-y: 1px;
109
+ --shadow-blur: 3px;
110
+ --shadow-spread: 0px;
111
+ --shadow-opacity: 0.1;
112
+ --shadow-color: oklch(0 0 0);
113
+ --shadow-2xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05);
114
+ --shadow-xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05);
115
+ --shadow-sm:
116
+ 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 1px 2px -1px hsl(0 0% 0% / 0.1);
117
+ --shadow: 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 1px 2px -1px hsl(0 0% 0% / 0.1);
118
+ --shadow-md:
119
+ 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 2px 4px -1px hsl(0 0% 0% / 0.1);
120
+ --shadow-lg:
121
+ 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 4px 6px -1px hsl(0 0% 0% / 0.1);
122
+ --shadow-xl:
123
+ 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 8px 10px -1px hsl(0 0% 0% / 0.1);
124
+ --shadow-2xl: 0 1px 3px 0px hsl(0 0% 0% / 0.25);
125
+ }