@andreagiugni/tailwind-dashboard-ui 1.0.3 → 1.0.5

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 CHANGED
@@ -203,7 +203,7 @@ Legend: **(+native)** = also extends the element's native HTML attributes.
203
203
  | `MultiSelect` | `options`, `selected` / `defaultSelected`, `onChange`, `placeholder`, `disabled` |
204
204
  | `Checkbox` | `label`, `checked`, `onChange(checked)`, `disabled`, `checkedColor?` |
205
205
  | `Radio` / `RadioSm` | `id`, `name`, `value`, `checked`, `label`, `onChange(value)`, `disabled` |
206
- | `Switch` | `label`, `checked` / `defaultChecked`, `onChange(checked)`, `color` (blue/gray), `disabled` |
206
+ | `Switch` | `label?`, `checked` / `defaultChecked`, `onChange(checked)`, `color` (blue/gray), `disabled` |
207
207
  | `TextArea` | `value`, `onChange`, `rows`, `success`, `error`, `hint`, `disabled` |
208
208
  | `FileInput` | `onChange`, `accept`, `multiple`, (+native input) |
209
209
  | `PasswordInput` | password field with a show/hide eye toggle, (+native input attrs) |
@@ -45,85 +45,85 @@ var DEFAULT_TOOLBAR = [
45
45
  ];
46
46
  var BUILTINS = {
47
47
  bold: {
48
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bold, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
48
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bold, { className: "size-4", "aria-hidden": "true" }),
49
49
  title: "Bold",
50
50
  onClick: (e) => e.chain().focus().toggleBold().run(),
51
51
  isActive: (e) => e.isActive("bold")
52
52
  },
53
53
  italic: {
54
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Italic, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
54
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Italic, { className: "size-4", "aria-hidden": "true" }),
55
55
  title: "Italic",
56
56
  onClick: (e) => e.chain().focus().toggleItalic().run(),
57
57
  isActive: (e) => e.isActive("italic")
58
58
  },
59
59
  strike: {
60
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Strikethrough, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
60
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Strikethrough, { className: "size-4", "aria-hidden": "true" }),
61
61
  title: "Strikethrough",
62
62
  onClick: (e) => e.chain().focus().toggleStrike().run(),
63
63
  isActive: (e) => e.isActive("strike")
64
64
  },
65
65
  code: {
66
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Code, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
66
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Code, { className: "size-4", "aria-hidden": "true" }),
67
67
  title: "Inline code",
68
68
  onClick: (e) => e.chain().focus().toggleCode().run(),
69
69
  isActive: (e) => e.isActive("code")
70
70
  },
71
71
  superscript: {
72
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Superscript, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
72
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Superscript, { className: "size-4", "aria-hidden": "true" }),
73
73
  title: "Superscript",
74
74
  onClick: (e) => e.chain().focus().toggleSuperscript().run(),
75
75
  isActive: (e) => e.isActive("superscript")
76
76
  },
77
77
  subscript: {
78
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Subscript, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
78
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Subscript, { className: "size-4", "aria-hidden": "true" }),
79
79
  title: "Subscript",
80
80
  onClick: (e) => e.chain().focus().toggleSubscript().run(),
81
81
  isActive: (e) => e.isActive("subscript")
82
82
  },
83
83
  heading1: {
84
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading1, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
84
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading1, { className: "size-4", "aria-hidden": "true" }),
85
85
  title: "Heading 1",
86
86
  onClick: (e) => e.chain().focus().toggleHeading({ level: 1 }).run(),
87
87
  isActive: (e) => e.isActive("heading", { level: 1 })
88
88
  },
89
89
  heading2: {
90
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading2, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
90
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading2, { className: "size-4", "aria-hidden": "true" }),
91
91
  title: "Heading 2",
92
92
  onClick: (e) => e.chain().focus().toggleHeading({ level: 2 }).run(),
93
93
  isActive: (e) => e.isActive("heading", { level: 2 })
94
94
  },
95
95
  heading3: {
96
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading3, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
96
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading3, { className: "size-4", "aria-hidden": "true" }),
97
97
  title: "Heading 3",
98
98
  onClick: (e) => e.chain().focus().toggleHeading({ level: 3 }).run(),
99
99
  isActive: (e) => e.isActive("heading", { level: 3 })
100
100
  },
101
101
  bulletList: {
102
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.List, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
102
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.List, { className: "size-4", "aria-hidden": "true" }),
103
103
  title: "Bullet list",
104
104
  onClick: (e) => e.chain().focus().toggleBulletList().run(),
105
105
  isActive: (e) => e.isActive("bulletList")
106
106
  },
107
107
  orderedList: {
108
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ListOrdered, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
108
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ListOrdered, { className: "size-4", "aria-hidden": "true" }),
109
109
  title: "Ordered list",
110
110
  onClick: (e) => e.chain().focus().toggleOrderedList().run(),
111
111
  isActive: (e) => e.isActive("orderedList")
112
112
  },
113
113
  blockquote: {
114
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Quote, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
114
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Quote, { className: "size-4", "aria-hidden": "true" }),
115
115
  title: "Blockquote",
116
116
  onClick: (e) => e.chain().focus().toggleBlockquote().run(),
117
117
  isActive: (e) => e.isActive("blockquote")
118
118
  },
119
119
  codeBlock: {
120
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CodeXml, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
120
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CodeXml, { className: "size-4", "aria-hidden": "true" }),
121
121
  title: "Code block",
122
122
  onClick: (e) => e.chain().focus().toggleCodeBlock().run(),
123
123
  isActive: (e) => e.isActive("codeBlock")
124
124
  },
125
125
  link: {
126
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Link, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
126
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Link, { className: "size-4", "aria-hidden": "true" }),
127
127
  title: "Link",
128
128
  // Minimal UX: window.prompt for the URL (no extra UI deps). Empty input
129
129
  // clears any existing link on the selection.
@@ -140,13 +140,13 @@ var BUILTINS = {
140
140
  isActive: (e) => e.isActive("link")
141
141
  },
142
142
  undo: {
143
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Undo2, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
143
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Undo2, { className: "size-4", "aria-hidden": "true" }),
144
144
  title: "Undo",
145
145
  onClick: (e) => e.chain().focus().undo().run(),
146
146
  isDisabled: (e) => !e.can().undo()
147
147
  },
148
148
  redo: {
149
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Redo2, { className: "h-[18px] w-[18px]", "aria-hidden": "true" }),
149
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Redo2, { className: "size-4", "aria-hidden": "true" }),
150
150
  title: "Redo",
151
151
  onClick: (e) => e.chain().focus().redo().run(),
152
152
  isDisabled: (e) => !e.can().redo()
@@ -308,5 +308,5 @@ var Editor = ({
308
308
  };
309
309
 
310
310
  exports.Editor = Editor;
311
- //# sourceMappingURL=chunk-YBVFFVZT.cjs.map
312
- //# sourceMappingURL=chunk-YBVFFVZT.cjs.map
311
+ //# sourceMappingURL=chunk-ETOOIXCY.cjs.map
312
+ //# sourceMappingURL=chunk-ETOOIXCY.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Editor/Editor.tsx"],"names":["jsx","Bold","Italic","Strikethrough","Code","SuperscriptIcon","SubscriptIcon","Heading1","Heading2","Heading3","List","ListOrdered","Quote","CodeXml","LinkIcon","Undo2","Redo2","cn","useEditor","StarterKit","Link","Placeholder","Superscript","Subscript","editor","React","jsxs","active","EditorContent"],"mappings":"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","file":"chunk-ETOOIXCY.cjs","sourcesContent":["\"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 {\n Bold,\n Code,\n CodeXml,\n Heading1,\n Heading2,\n Heading3,\n Italic,\n Link as LinkIcon,\n List,\n ListOrdered,\n Quote,\n Redo2,\n Strikethrough,\n Subscript as SubscriptIcon,\n Superscript as SuperscriptIcon,\n Undo2,\n} from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { type ColorOverrideProps } from \"../../lib/styleOverride\";\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 /** Minimum visible text rows. Drives the editor content height. Default: 8. */\n rows?: number;\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: <Bold className=\"size-4\" aria-hidden=\"true\" />,\n title: \"Bold\",\n onClick: (e) => e.chain().focus().toggleBold().run(),\n isActive: (e) => e.isActive(\"bold\"),\n },\n italic: {\n icon: <Italic className=\"size-4\" aria-hidden=\"true\" />,\n title: \"Italic\",\n onClick: (e) => e.chain().focus().toggleItalic().run(),\n isActive: (e) => e.isActive(\"italic\"),\n },\n strike: {\n icon: <Strikethrough className=\"size-4\" aria-hidden=\"true\" />,\n title: \"Strikethrough\",\n onClick: (e) => e.chain().focus().toggleStrike().run(),\n isActive: (e) => e.isActive(\"strike\"),\n },\n code: {\n icon: <Code className=\"size-4\" aria-hidden=\"true\" />,\n title: \"Inline code\",\n onClick: (e) => e.chain().focus().toggleCode().run(),\n isActive: (e) => e.isActive(\"code\"),\n },\n superscript: {\n icon: <SuperscriptIcon className=\"size-4\" aria-hidden=\"true\" />,\n title: \"Superscript\",\n onClick: (e) => e.chain().focus().toggleSuperscript().run(),\n isActive: (e) => e.isActive(\"superscript\"),\n },\n subscript: {\n icon: <SubscriptIcon className=\"size-4\" aria-hidden=\"true\" />,\n title: \"Subscript\",\n onClick: (e) => e.chain().focus().toggleSubscript().run(),\n isActive: (e) => e.isActive(\"subscript\"),\n },\n heading1: {\n icon: <Heading1 className=\"size-4\" aria-hidden=\"true\" />,\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: <Heading2 className=\"size-4\" aria-hidden=\"true\" />,\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: <Heading3 className=\"size-4\" aria-hidden=\"true\" />,\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: <List className=\"size-4\" aria-hidden=\"true\" />,\n title: \"Bullet list\",\n onClick: (e) => e.chain().focus().toggleBulletList().run(),\n isActive: (e) => e.isActive(\"bulletList\"),\n },\n orderedList: {\n icon: <ListOrdered className=\"size-4\" aria-hidden=\"true\" />,\n title: \"Ordered list\",\n onClick: (e) => e.chain().focus().toggleOrderedList().run(),\n isActive: (e) => e.isActive(\"orderedList\"),\n },\n blockquote: {\n icon: <Quote className=\"size-4\" aria-hidden=\"true\" />,\n title: \"Blockquote\",\n onClick: (e) => e.chain().focus().toggleBlockquote().run(),\n isActive: (e) => e.isActive(\"blockquote\"),\n },\n codeBlock: {\n icon: <CodeXml className=\"size-4\" aria-hidden=\"true\" />,\n title: \"Code block\",\n onClick: (e) => e.chain().focus().toggleCodeBlock().run(),\n isActive: (e) => e.isActive(\"codeBlock\"),\n },\n link: {\n icon: <LinkIcon className=\"size-4\" aria-hidden=\"true\" />,\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: <Undo2 className=\"size-4\" aria-hidden=\"true\" />,\n title: \"Undo\",\n onClick: (e) => e.chain().focus().undo().run(),\n isDisabled: (e) => !e.can().undo(),\n },\n redo: {\n icon: <Redo2 className=\"size-4\" aria-hidden=\"true\" />,\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 rows = 8,\n className,\n editorClassName,\n}) => {\n const visibleRows = Math.max(1, Math.floor(rows));\n const minHeight = `${visibleRows * 1.5}rem`;\n const editorHeightStyle = {\n \"--tdui-editor-min-height\": minHeight,\n } as React.CSSProperties;\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\n className=\"min-h-[var(--tdui-editor-min-height)] animate-pulse bg-gray-50/50 dark:bg-white/[0.01]\"\n style={editorHeightStyle}\n />\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 style={editorHeightStyle}\n className={cn(\n \"min-h-[var(--tdui-editor-min-height)] 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-[var(--tdui-editor-min-height)] [&_.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]:mb-2 [&_p]:mt-0 [&_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"]}
@@ -305,7 +305,7 @@ var Modal = ({
305
305
  "z-99 flex h-9.5 w-9.5 shrink-0 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white sm:h-11 sm:w-11",
306
306
  !isInline && "absolute right-3 top-3 sm:right-6 sm:top-6"
307
307
  ),
308
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-6 w-6", "aria-hidden": "true" })
308
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-4", "aria-hidden": "true" })
309
309
  }
310
310
  );
311
311
  return reactDom.createPortal(
@@ -616,5 +616,5 @@ var renderEventContent = (eventInfo) => {
616
616
 
617
617
  exports.Calendar = Calendar;
618
618
  exports.Modal = Modal;
619
- //# sourceMappingURL=chunk-5DEBWZY7.cjs.map
620
- //# sourceMappingURL=chunk-5DEBWZY7.cjs.map
619
+ //# sourceMappingURL=chunk-GBQCVSZU.cjs.map
620
+ //# sourceMappingURL=chunk-GBQCVSZU.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Modal/Modal.tsx","../src/components/Calendar/Calendar.tsx"],"names":["cn","jsx","jsxs","Fragment","useRef","useState","useEffect","X","createPortal","layers","FullCalendar","dayGridPlugin","timeGridPlugin","interactionPlugin"],"mappings":"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","file":"chunk-5DEBWZY7.cjs","sourcesContent":["\"use client\";\nimport React, { useRef, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { layers } from \"../../lib/layers\";\n\n/** Must match the exit animation duration in theme.css (tdui-modal-*-out). */\nconst EXIT_DURATION = 220;\n\nexport type ModalVariant = \"confirm\" | \"error\" | \"warning\";\n\nexport interface ModalProps extends React.HTMLAttributes<HTMLDivElement> {\n isOpen: boolean;\n onClose: () => void;\n showCloseButton?: boolean;\n isFullscreen?: boolean;\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n /** Render a preset alert layout (decorative icon + title + message + action button). */\n variant?: ModalVariant;\n /** Header title for a standard modal, or the alert heading when `variant` is set. */\n title?: string;\n /** Alert body text — used when `variant` is set. */\n description?: string;\n /** Action button label. Default: \"Okay, Got It\". */\n actionText?: string;\n /** Action button handler. Defaults to `onClose`. */\n onAction?: () => void;\n}\n\nconst VARIANTS: Record<\n ModalVariant,\n {\n halo: string;\n stroke: string;\n fill: string;\n button: string;\n }\n> = {\n confirm: {\n halo: \"bg-success-500/10 text-success-500 dark:bg-success-500/15\",\n stroke: \"stroke-success-500\",\n fill: \"fill-success-500\",\n button: \"bg-success-500 hover:bg-success-600\",\n },\n warning: {\n halo: \"bg-warning-500/10 text-warning-500 dark:bg-warning-500/15 dark:text-orange-400\",\n stroke: \"stroke-warning-500 dark:stroke-orange-400\",\n fill: \"fill-warning-500 dark:fill-orange-400\",\n button: \"bg-warning-500 hover:bg-warning-600\",\n },\n error: {\n halo: \"bg-error-500/10 text-error-500 dark:bg-error-500/15\",\n stroke: \"stroke-error-500\",\n fill: \"fill-error-500\",\n button: \"bg-error-500 hover:bg-error-600\",\n },\n};\n\nconst AnimatedAlertIcon: React.FC<{ variant: ModalVariant }> = ({ variant }) => {\n const v = VARIANTS[variant];\n const commonStroke = cn(\n \"fill-none stroke-[4] [stroke-linecap:round] [stroke-linejoin:round]\",\n v.stroke\n );\n\n return (\n <span\n className={cn(\n \"relative inline-flex h-[92px] w-[92px] items-center justify-center rounded-full\",\n v.halo\n )}\n data-modal-alert-icon={variant}\n aria-hidden=\"true\"\n >\n <svg\n className=\"h-[72px] w-[72px]\"\n viewBox=\"0 0 72 72\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <style>\n {`\n @keyframes tdui-alert-draw {\n to { stroke-dashoffset: 0; }\n }\n @keyframes tdui-alert-pop {\n 0% { opacity: 0; transform: scale(.82); }\n 70% { opacity: 1; transform: scale(1.08); }\n 100% { opacity: 1; transform: scale(1); }\n }\n .tdui-alert-draw {\n animation: tdui-alert-draw .72s cubic-bezier(.22,1,.36,1) forwards;\n }\n .tdui-alert-pop {\n opacity: 0;\n transform-origin: center;\n animation: tdui-alert-pop .34s cubic-bezier(.22,1,.36,1) forwards;\n }\n @media (prefers-reduced-motion: reduce) {\n .tdui-alert-draw {\n animation: none;\n stroke-dashoffset: 0;\n }\n .tdui-alert-pop {\n animation: none;\n opacity: 1;\n transform: none;\n }\n }\n `}\n </style>\n\n {variant === \"confirm\" && (\n <>\n <circle\n className={commonStroke}\n cx=\"36\"\n cy=\"36\"\n r=\"27\"\n style={{\n strokeDasharray: 170,\n strokeDashoffset: 170,\n animation: \"tdui-alert-draw .72s cubic-bezier(.22,1,.36,1) forwards\",\n }}\n />\n <path\n className={commonStroke}\n d=\"M23 37.5 31.5 46 50 27\"\n style={{\n strokeDasharray: 44,\n strokeDashoffset: 44,\n animation: \"tdui-alert-draw .48s cubic-bezier(.22,1,.36,1) .42s forwards\",\n }}\n />\n </>\n )}\n\n {variant === \"error\" && (\n <>\n <circle\n className={commonStroke}\n cx=\"36\"\n cy=\"36\"\n r=\"27\"\n style={{\n strokeDasharray: 170,\n strokeDashoffset: 170,\n animation: \"tdui-alert-draw .62s cubic-bezier(.22,1,.36,1) forwards\",\n }}\n />\n <path\n className={commonStroke}\n d=\"M27 27 45 45\"\n style={{\n strokeDasharray: 26,\n strokeDashoffset: 26,\n animation: \"tdui-alert-draw .3s cubic-bezier(.22,1,.36,1) .38s forwards\",\n }}\n />\n <path\n className={commonStroke}\n d=\"M45 27 27 45\"\n style={{\n strokeDasharray: 26,\n strokeDashoffset: 26,\n animation: \"tdui-alert-draw .3s cubic-bezier(.22,1,.36,1) .52s forwards\",\n }}\n />\n </>\n )}\n\n {variant === \"warning\" && (\n <>\n <path\n className={commonStroke}\n d=\"M36 10 64 60H8L36 10Z\"\n style={{\n strokeDasharray: 174,\n strokeDashoffset: 174,\n animation: \"tdui-alert-draw .7s cubic-bezier(.22,1,.36,1) forwards\",\n }}\n />\n <path\n className={commonStroke}\n d=\"M36 29V42\"\n style={{\n strokeDasharray: 13,\n strokeDashoffset: 13,\n animation: \"tdui-alert-draw .28s cubic-bezier(.22,1,.36,1) .42s forwards\",\n }}\n />\n <circle\n className={cn(\"tdui-alert-pop\", v.fill)}\n cx=\"36\"\n cy=\"51\"\n r=\"2.6\"\n style={{ animationDelay: \".64s\" }}\n />\n </>\n )}\n </svg>\n </span>\n );\n};\n\nconst ModalAlert: React.FC<{\n variant: ModalVariant;\n title?: string;\n description?: string;\n actionText: string;\n onAction: () => void;\n}> = ({ variant, title, description, actionText, onAction }) => {\n const v = VARIANTS[variant];\n return (\n <div className=\"text-center\">\n <div className=\"relative z-1 mb-7 flex items-center justify-center\">\n <AnimatedAlertIcon variant={variant} />\n </div>\n {title && (\n <h4 className=\"mb-2 text-2xl font-semibold text-gray-800 dark:text-white/90\">\n {title}\n </h4>\n )}\n {description && (\n <p className=\"text-sm leading-6 text-gray-500 dark:text-gray-400\">{description}</p>\n )}\n <div className=\"mt-7 flex w-full items-center justify-center gap-3\">\n <button\n type=\"button\"\n onClick={onAction}\n className={cn(\n \"flex w-full justify-center rounded-lg px-4 py-3 text-sm font-medium text-white shadow-theme-xs sm:w-auto\",\n v.button\n )}\n >\n {actionText}\n </button>\n </div>\n </div>\n );\n};\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n children,\n className,\n showCloseButton = true,\n isFullscreen = false,\n closeOnBackdrop = true,\n closeOnEsc = true,\n variant,\n title,\n description,\n actionText = \"Okay, Got It\",\n onAction,\n ...rest\n}) => {\n const modalRef = useRef<HTMLDivElement>(null);\n // Keep the modal mounted while the close (fade-out) animation plays.\n const [render, setRender] = useState(isOpen);\n const [closing, setClosing] = useState(false);\n const exitTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n useEffect(() => {\n if (isOpen) {\n if (exitTimer.current) clearTimeout(exitTimer.current);\n setRender(true);\n setClosing(false);\n } else {\n // Only animate out if it was actually showing.\n setRender((wasRendered) => {\n if (!wasRendered) return false;\n setClosing(true);\n if (exitTimer.current) clearTimeout(exitTimer.current);\n exitTimer.current = setTimeout(() => {\n setRender(false);\n setClosing(false);\n }, EXIT_DURATION);\n return true;\n });\n }\n return () => {\n if (exitTimer.current) clearTimeout(exitTimer.current);\n };\n }, [isOpen]);\n\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose();\n }\n };\n\n if (isOpen && closeOnEsc) {\n document.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [isOpen, onClose, closeOnEsc]);\n\n useEffect(() => {\n if (render) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"unset\";\n }\n\n return () => {\n document.body.style.overflow = \"unset\";\n };\n }, [render]);\n\n if (!render || typeof document === \"undefined\") return null;\n\n const isAlert = !!variant;\n const popAnim = closing ? \"tdui-modal-pop-out\" : \"tdui-modal-pop\";\n const fadeAnim = closing ? \"tdui-modal-fade-out\" : \"tdui-modal-fade\";\n const contentClasses = isFullscreen\n ? cn(\"w-full h-full\", fadeAnim)\n : cn(\n \"relative w-full rounded-3xl bg-white dark:bg-gray-900\",\n popAnim,\n isAlert && \"max-w-[600px] p-5 lg:p-10\"\n );\n\n const closeButton = (isInline: boolean) => (\n <button\n type=\"button\"\n aria-label=\"Close modal\"\n onClick={onClose}\n className={cn(\n \"z-99 flex h-9.5 w-9.5 shrink-0 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white sm:h-11 sm:w-11\",\n !isInline && \"absolute right-3 top-3 sm:right-6 sm:top-6\"\n )}\n >\n <X className=\"h-6 w-6\" aria-hidden=\"true\" />\n </button>\n );\n\n return createPortal(\n <div\n className={cn(\n \"modal fixed inset-0 isolate flex items-center justify-center overflow-y-auto\",\n layers.overlay\n )}\n >\n {!isFullscreen && (\n <div\n className={cn(\n \"fixed inset-0 z-0 h-full w-full bg-gray-400/50 backdrop-blur-[32px]\",\n fadeAnim\n )}\n onClick={closeOnBackdrop ? onClose : undefined}\n ></div>\n )}\n <div\n ref={modalRef}\n className={cn(\"z-1\", contentClasses, className)}\n onClick={(e) => e.stopPropagation()}\n {...rest}\n >\n {!isAlert && title && (\n <div className=\"flex items-start gap-4\">\n <h2 className=\"min-w-0 flex-1 break-words pt-1 text-xl font-semibold text-gray-800 dark:text-white/90\">\n {title}\n </h2>\n {showCloseButton && closeButton(true)}\n </div>\n )}\n {showCloseButton && (isAlert || !title) && closeButton(false)}\n {isAlert ? (\n <ModalAlert\n variant={variant}\n title={title}\n description={description}\n actionText={actionText}\n onAction={onAction ?? onClose}\n />\n ) : (\n <div className={cn(title && \"mt-4\")}>\n {children}\n </div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n","\"use client\";\nimport React, { useState, useRef, useEffect } from \"react\";\nimport FullCalendar from \"@fullcalendar/react\";\nimport dayGridPlugin from \"@fullcalendar/daygrid\";\nimport timeGridPlugin from \"@fullcalendar/timegrid\";\nimport interactionPlugin from \"@fullcalendar/interaction\";\nimport {\n EventInput,\n DateSelectArg,\n EventClickArg,\n EventContentArg,\n} from \"@fullcalendar/core\";\nimport { Modal } from \"../Modal/Modal\";\n\ninterface CalendarEvent extends EventInput {\n extendedProps: {\n calendar: string;\n };\n}\n\nexport interface CalendarProps {\n events?: EventInput[];\n initialView?: string;\n onEventClick?: (arg: EventClickArg) => void;\n onDateSelect?: (arg: DateSelectArg) => void;\n}\n\nconst defaultEvents: CalendarEvent[] = [\n {\n id: \"1\",\n title: \"Event Conf.\",\n start: new Date().toISOString().split(\"T\")[0],\n extendedProps: { calendar: \"Danger\" },\n },\n {\n id: \"2\",\n title: \"Meeting\",\n start: new Date(Date.now() + 86400000).toISOString().split(\"T\")[0],\n extendedProps: { calendar: \"Success\" },\n },\n {\n id: \"3\",\n title: \"Workshop\",\n start: new Date(Date.now() + 172800000).toISOString().split(\"T\")[0],\n end: new Date(Date.now() + 259200000).toISOString().split(\"T\")[0],\n extendedProps: { calendar: \"Primary\" },\n },\n];\n\nexport const Calendar: React.FC<CalendarProps> = ({\n events: eventsProp,\n initialView = \"dayGridMonth\",\n onEventClick,\n onDateSelect,\n}) => {\n const [selectedEvent, setSelectedEvent] = useState<CalendarEvent | null>(\n null\n );\n const [eventTitle, setEventTitle] = useState(\"\");\n const [eventStartDate, setEventStartDate] = useState(\"\");\n const [eventEndDate, setEventEndDate] = useState(\"\");\n const [eventLevel, setEventLevel] = useState(\"\");\n const [events, setEvents] = useState<EventInput[]>(eventsProp ?? []);\n const [isOpen, setIsOpen] = useState(false);\n const calendarRef = useRef<FullCalendar>(null);\n\n const openModal = () => setIsOpen(true);\n const closeModal = () => setIsOpen(false);\n\n const calendarsEvents = {\n Danger: \"danger\",\n Success: \"success\",\n Primary: \"primary\",\n Warning: \"warning\",\n };\n\n useEffect(() => {\n // Initialize with provided events, or fall back to the demo events.\n setEvents(eventsProp ?? defaultEvents);\n }, [eventsProp]);\n\n const handleDateSelect = (selectInfo: DateSelectArg) => {\n onDateSelect?.(selectInfo);\n resetModalFields();\n setEventStartDate(selectInfo.startStr);\n setEventEndDate(selectInfo.endStr || selectInfo.startStr);\n openModal();\n };\n\n const handleEventClick = (clickInfo: EventClickArg) => {\n onEventClick?.(clickInfo);\n const event = clickInfo.event;\n setSelectedEvent(event as unknown as CalendarEvent);\n setEventTitle(event.title);\n setEventStartDate(event.start?.toISOString().split(\"T\")[0] || \"\");\n setEventEndDate(event.end?.toISOString().split(\"T\")[0] || \"\");\n setEventLevel(event.extendedProps.calendar);\n openModal();\n };\n\n const handleAddOrUpdateEvent = () => {\n if (selectedEvent) {\n // Update existing event\n setEvents((prevEvents) =>\n prevEvents.map((event) =>\n event.id === selectedEvent.id\n ? {\n ...event,\n title: eventTitle,\n start: eventStartDate,\n end: eventEndDate,\n extendedProps: { calendar: eventLevel },\n }\n : event\n )\n );\n } else {\n // Add new event\n const newEvent: CalendarEvent = {\n id: Date.now().toString(),\n title: eventTitle,\n start: eventStartDate,\n end: eventEndDate,\n allDay: true,\n extendedProps: { calendar: eventLevel },\n };\n setEvents((prevEvents) => [...prevEvents, newEvent]);\n }\n closeModal();\n resetModalFields();\n };\n\n const resetModalFields = () => {\n setEventTitle(\"\");\n setEventStartDate(\"\");\n setEventEndDate(\"\");\n setEventLevel(\"\");\n setSelectedEvent(null);\n };\n\n return (\n <div className=\"rounded-2xl border border-gray-200 bg-white dark:border-gray-800 dark:bg-white/[0.03]\">\n <div className=\"custom-calendar\">\n <FullCalendar\n ref={calendarRef}\n plugins={[dayGridPlugin, timeGridPlugin, interactionPlugin]}\n initialView={initialView}\n headerToolbar={{\n left: \"prev,next addEventButton\",\n center: \"title\",\n right: \"dayGridMonth,timeGridWeek,timeGridDay\",\n }}\n events={events}\n selectable={true}\n select={handleDateSelect}\n eventClick={handleEventClick}\n eventContent={renderEventContent}\n customButtons={{\n addEventButton: {\n text: \"Add Event +\",\n click: openModal,\n },\n }}\n />\n </div>\n <Modal\n isOpen={isOpen}\n onClose={closeModal}\n className=\"max-w-[700px] p-6 lg:p-10\"\n >\n <div className=\"flex flex-col px-2 overflow-y-auto custom-scrollbar\">\n <div>\n <h5 className=\"mb-2 font-semibold text-gray-800 modal-title text-theme-xl dark:text-white/90 lg:text-2xl\">\n {selectedEvent ? \"Edit Event\" : \"Add Event\"}\n </h5>\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n Plan your next big moment: schedule or edit an event to stay on\n track\n </p>\n </div>\n <div className=\"mt-8\">\n <div>\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400\">\n Event Title\n </label>\n <input\n id=\"event-title\"\n type=\"text\"\n value={eventTitle}\n onChange={(e) => setEventTitle(e.target.value)}\n className=\"dark:bg-dark-900 h-11 w-full rounded-lg border border-gray-300 bg-transparent px-4 py-2.5 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\"\n />\n </div>\n </div>\n <div className=\"mt-6\">\n <label className=\"block mb-4 text-sm font-medium text-gray-700 dark:text-gray-400\">\n Event Color\n </label>\n <div className=\"flex flex-wrap items-center gap-4 sm:gap-5\">\n {Object.entries(calendarsEvents).map(([key, value]) => (\n <div key={key} className=\"n-chk\">\n <div\n className={`form-check form-check-${value} form-check-inline`}\n >\n <label\n className=\"flex items-center text-sm text-gray-700 form-check-label dark:text-gray-400\"\n htmlFor={`modal${key}`}\n >\n <span className=\"relative\">\n <input\n className=\"sr-only form-check-input\"\n type=\"radio\"\n name=\"event-level\"\n value={key}\n id={`modal${key}`}\n checked={eventLevel === key}\n onChange={() => setEventLevel(key)}\n />\n <span className=\"flex items-center justify-center w-5 h-5 mr-2 border border-gray-300 rounded-full box dark:border-gray-700\">\n <span\n className={`h-2 w-2 rounded-full bg-white ${\n eventLevel === key ? \"block\" : \"hidden\"\n }`}\n ></span>\n </span>\n </span>\n {key}\n </label>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"mt-6\">\n <label className=\"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400\">\n Enter Start Date\n </label>\n <div className=\"relative\">\n <input\n id=\"event-start-date\"\n type=\"date\"\n value={eventStartDate}\n onChange={(e) => setEventStartDate(e.target.value)}\n className=\"dark:bg-dark-900 h-11 w-full appearance-none rounded-lg border border-gray-300 bg-transparent bg-none px-4 py-2.5 pl-4 pr-11 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\"\n />\n </div>\n </div>\n\n <div className=\"mt-6\">\n <label className=\"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400\">\n Enter End Date\n </label>\n <div className=\"relative\">\n <input\n id=\"event-end-date\"\n type=\"date\"\n value={eventEndDate}\n onChange={(e) => setEventEndDate(e.target.value)}\n className=\"dark:bg-dark-900 h-11 w-full appearance-none rounded-lg border border-gray-300 bg-transparent bg-none px-4 py-2.5 pl-4 pr-11 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\"\n />\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-3 mt-6 modal-footer sm:justify-end\">\n <button\n onClick={closeModal}\n type=\"button\"\n className=\"flex w-full justify-center rounded-lg border border-gray-300 bg-white px-4 py-2.5 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-white/[0.03] sm:w-auto\"\n >\n Close\n </button>\n <button\n onClick={handleAddOrUpdateEvent}\n type=\"button\"\n className=\"btn btn-success btn-update-event flex w-full justify-center rounded-lg bg-brand-500 px-4 py-2.5 text-sm font-medium text-white hover:bg-brand-600 sm:w-auto\"\n >\n {selectedEvent ? \"Update Changes\" : \"Add Event\"}\n </button>\n </div>\n </div>\n </Modal>\n </div>\n );\n};\n\nconst renderEventContent = (eventInfo: EventContentArg) => {\n const colorClass = `fc-bg-${eventInfo.event.extendedProps.calendar.toLowerCase()}`;\n return (\n <div\n className={`event-fc-color flex fc-event-main ${colorClass} p-1 rounded-sm`}\n >\n <div className=\"fc-daygrid-event-dot\"></div>\n <div className=\"fc-event-time\">{eventInfo.timeText}</div>\n <div className=\"fc-event-title\">{eventInfo.event.title}</div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Modal/Modal.tsx","../src/components/Calendar/Calendar.tsx"],"names":["cn","jsx","jsxs","Fragment","useRef","useState","useEffect","X","createPortal","layers","FullCalendar","dayGridPlugin","timeGridPlugin","interactionPlugin"],"mappings":"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","file":"chunk-GBQCVSZU.cjs","sourcesContent":["\"use client\";\nimport React, { useRef, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { layers } from \"../../lib/layers\";\n\n/** Must match the exit animation duration in theme.css (tdui-modal-*-out). */\nconst EXIT_DURATION = 220;\n\nexport type ModalVariant = \"confirm\" | \"error\" | \"warning\";\n\nexport interface ModalProps extends React.HTMLAttributes<HTMLDivElement> {\n isOpen: boolean;\n onClose: () => void;\n showCloseButton?: boolean;\n isFullscreen?: boolean;\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n /** Render a preset alert layout (decorative icon + title + message + action button). */\n variant?: ModalVariant;\n /** Header title for a standard modal, or the alert heading when `variant` is set. */\n title?: string;\n /** Alert body text — used when `variant` is set. */\n description?: string;\n /** Action button label. Default: \"Okay, Got It\". */\n actionText?: string;\n /** Action button handler. Defaults to `onClose`. */\n onAction?: () => void;\n}\n\nconst VARIANTS: Record<\n ModalVariant,\n {\n halo: string;\n stroke: string;\n fill: string;\n button: string;\n }\n> = {\n confirm: {\n halo: \"bg-success-500/10 text-success-500 dark:bg-success-500/15\",\n stroke: \"stroke-success-500\",\n fill: \"fill-success-500\",\n button: \"bg-success-500 hover:bg-success-600\",\n },\n warning: {\n halo: \"bg-warning-500/10 text-warning-500 dark:bg-warning-500/15 dark:text-orange-400\",\n stroke: \"stroke-warning-500 dark:stroke-orange-400\",\n fill: \"fill-warning-500 dark:fill-orange-400\",\n button: \"bg-warning-500 hover:bg-warning-600\",\n },\n error: {\n halo: \"bg-error-500/10 text-error-500 dark:bg-error-500/15\",\n stroke: \"stroke-error-500\",\n fill: \"fill-error-500\",\n button: \"bg-error-500 hover:bg-error-600\",\n },\n};\n\nconst AnimatedAlertIcon: React.FC<{ variant: ModalVariant }> = ({ variant }) => {\n const v = VARIANTS[variant];\n const commonStroke = cn(\n \"fill-none stroke-[4] [stroke-linecap:round] [stroke-linejoin:round]\",\n v.stroke\n );\n\n return (\n <span\n className={cn(\n \"relative inline-flex h-[92px] w-[92px] items-center justify-center rounded-full\",\n v.halo\n )}\n data-modal-alert-icon={variant}\n aria-hidden=\"true\"\n >\n <svg\n className=\"h-[72px] w-[72px]\"\n viewBox=\"0 0 72 72\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <style>\n {`\n @keyframes tdui-alert-draw {\n to { stroke-dashoffset: 0; }\n }\n @keyframes tdui-alert-pop {\n 0% { opacity: 0; transform: scale(.82); }\n 70% { opacity: 1; transform: scale(1.08); }\n 100% { opacity: 1; transform: scale(1); }\n }\n .tdui-alert-draw {\n animation: tdui-alert-draw .72s cubic-bezier(.22,1,.36,1) forwards;\n }\n .tdui-alert-pop {\n opacity: 0;\n transform-origin: center;\n animation: tdui-alert-pop .34s cubic-bezier(.22,1,.36,1) forwards;\n }\n @media (prefers-reduced-motion: reduce) {\n .tdui-alert-draw {\n animation: none;\n stroke-dashoffset: 0;\n }\n .tdui-alert-pop {\n animation: none;\n opacity: 1;\n transform: none;\n }\n }\n `}\n </style>\n\n {variant === \"confirm\" && (\n <>\n <circle\n className={commonStroke}\n cx=\"36\"\n cy=\"36\"\n r=\"27\"\n style={{\n strokeDasharray: 170,\n strokeDashoffset: 170,\n animation: \"tdui-alert-draw .72s cubic-bezier(.22,1,.36,1) forwards\",\n }}\n />\n <path\n className={commonStroke}\n d=\"M23 37.5 31.5 46 50 27\"\n style={{\n strokeDasharray: 44,\n strokeDashoffset: 44,\n animation: \"tdui-alert-draw .48s cubic-bezier(.22,1,.36,1) .42s forwards\",\n }}\n />\n </>\n )}\n\n {variant === \"error\" && (\n <>\n <circle\n className={commonStroke}\n cx=\"36\"\n cy=\"36\"\n r=\"27\"\n style={{\n strokeDasharray: 170,\n strokeDashoffset: 170,\n animation: \"tdui-alert-draw .62s cubic-bezier(.22,1,.36,1) forwards\",\n }}\n />\n <path\n className={commonStroke}\n d=\"M27 27 45 45\"\n style={{\n strokeDasharray: 26,\n strokeDashoffset: 26,\n animation: \"tdui-alert-draw .3s cubic-bezier(.22,1,.36,1) .38s forwards\",\n }}\n />\n <path\n className={commonStroke}\n d=\"M45 27 27 45\"\n style={{\n strokeDasharray: 26,\n strokeDashoffset: 26,\n animation: \"tdui-alert-draw .3s cubic-bezier(.22,1,.36,1) .52s forwards\",\n }}\n />\n </>\n )}\n\n {variant === \"warning\" && (\n <>\n <path\n className={commonStroke}\n d=\"M36 10 64 60H8L36 10Z\"\n style={{\n strokeDasharray: 174,\n strokeDashoffset: 174,\n animation: \"tdui-alert-draw .7s cubic-bezier(.22,1,.36,1) forwards\",\n }}\n />\n <path\n className={commonStroke}\n d=\"M36 29V42\"\n style={{\n strokeDasharray: 13,\n strokeDashoffset: 13,\n animation: \"tdui-alert-draw .28s cubic-bezier(.22,1,.36,1) .42s forwards\",\n }}\n />\n <circle\n className={cn(\"tdui-alert-pop\", v.fill)}\n cx=\"36\"\n cy=\"51\"\n r=\"2.6\"\n style={{ animationDelay: \".64s\" }}\n />\n </>\n )}\n </svg>\n </span>\n );\n};\n\nconst ModalAlert: React.FC<{\n variant: ModalVariant;\n title?: string;\n description?: string;\n actionText: string;\n onAction: () => void;\n}> = ({ variant, title, description, actionText, onAction }) => {\n const v = VARIANTS[variant];\n return (\n <div className=\"text-center\">\n <div className=\"relative z-1 mb-7 flex items-center justify-center\">\n <AnimatedAlertIcon variant={variant} />\n </div>\n {title && (\n <h4 className=\"mb-2 text-2xl font-semibold text-gray-800 dark:text-white/90\">\n {title}\n </h4>\n )}\n {description && (\n <p className=\"text-sm leading-6 text-gray-500 dark:text-gray-400\">{description}</p>\n )}\n <div className=\"mt-7 flex w-full items-center justify-center gap-3\">\n <button\n type=\"button\"\n onClick={onAction}\n className={cn(\n \"flex w-full justify-center rounded-lg px-4 py-3 text-sm font-medium text-white shadow-theme-xs sm:w-auto\",\n v.button\n )}\n >\n {actionText}\n </button>\n </div>\n </div>\n );\n};\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n children,\n className,\n showCloseButton = true,\n isFullscreen = false,\n closeOnBackdrop = true,\n closeOnEsc = true,\n variant,\n title,\n description,\n actionText = \"Okay, Got It\",\n onAction,\n ...rest\n}) => {\n const modalRef = useRef<HTMLDivElement>(null);\n // Keep the modal mounted while the close (fade-out) animation plays.\n const [render, setRender] = useState(isOpen);\n const [closing, setClosing] = useState(false);\n const exitTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n useEffect(() => {\n if (isOpen) {\n if (exitTimer.current) clearTimeout(exitTimer.current);\n setRender(true);\n setClosing(false);\n } else {\n // Only animate out if it was actually showing.\n setRender((wasRendered) => {\n if (!wasRendered) return false;\n setClosing(true);\n if (exitTimer.current) clearTimeout(exitTimer.current);\n exitTimer.current = setTimeout(() => {\n setRender(false);\n setClosing(false);\n }, EXIT_DURATION);\n return true;\n });\n }\n return () => {\n if (exitTimer.current) clearTimeout(exitTimer.current);\n };\n }, [isOpen]);\n\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose();\n }\n };\n\n if (isOpen && closeOnEsc) {\n document.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [isOpen, onClose, closeOnEsc]);\n\n useEffect(() => {\n if (render) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"unset\";\n }\n\n return () => {\n document.body.style.overflow = \"unset\";\n };\n }, [render]);\n\n if (!render || typeof document === \"undefined\") return null;\n\n const isAlert = !!variant;\n const popAnim = closing ? \"tdui-modal-pop-out\" : \"tdui-modal-pop\";\n const fadeAnim = closing ? \"tdui-modal-fade-out\" : \"tdui-modal-fade\";\n const contentClasses = isFullscreen\n ? cn(\"w-full h-full\", fadeAnim)\n : cn(\n \"relative w-full rounded-3xl bg-white dark:bg-gray-900\",\n popAnim,\n isAlert && \"max-w-[600px] p-5 lg:p-10\"\n );\n\n const closeButton = (isInline: boolean) => (\n <button\n type=\"button\"\n aria-label=\"Close modal\"\n onClick={onClose}\n className={cn(\n \"z-99 flex h-9.5 w-9.5 shrink-0 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white sm:h-11 sm:w-11\",\n !isInline && \"absolute right-3 top-3 sm:right-6 sm:top-6\"\n )}\n >\n <X className=\"size-4\" aria-hidden=\"true\" />\n </button>\n );\n\n return createPortal(\n <div\n className={cn(\n \"modal fixed inset-0 isolate flex items-center justify-center overflow-y-auto\",\n layers.overlay\n )}\n >\n {!isFullscreen && (\n <div\n className={cn(\n \"fixed inset-0 z-0 h-full w-full bg-gray-400/50 backdrop-blur-[32px]\",\n fadeAnim\n )}\n onClick={closeOnBackdrop ? onClose : undefined}\n ></div>\n )}\n <div\n ref={modalRef}\n className={cn(\"z-1\", contentClasses, className)}\n onClick={(e) => e.stopPropagation()}\n {...rest}\n >\n {!isAlert && title && (\n <div className=\"flex items-start gap-4\">\n <h2 className=\"min-w-0 flex-1 break-words pt-1 text-xl font-semibold text-gray-800 dark:text-white/90\">\n {title}\n </h2>\n {showCloseButton && closeButton(true)}\n </div>\n )}\n {showCloseButton && (isAlert || !title) && closeButton(false)}\n {isAlert ? (\n <ModalAlert\n variant={variant}\n title={title}\n description={description}\n actionText={actionText}\n onAction={onAction ?? onClose}\n />\n ) : (\n <div className={cn(title && \"mt-4\")}>\n {children}\n </div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n","\"use client\";\nimport React, { useState, useRef, useEffect } from \"react\";\nimport FullCalendar from \"@fullcalendar/react\";\nimport dayGridPlugin from \"@fullcalendar/daygrid\";\nimport timeGridPlugin from \"@fullcalendar/timegrid\";\nimport interactionPlugin from \"@fullcalendar/interaction\";\nimport {\n EventInput,\n DateSelectArg,\n EventClickArg,\n EventContentArg,\n} from \"@fullcalendar/core\";\nimport { Modal } from \"../Modal/Modal\";\n\ninterface CalendarEvent extends EventInput {\n extendedProps: {\n calendar: string;\n };\n}\n\nexport interface CalendarProps {\n events?: EventInput[];\n initialView?: string;\n onEventClick?: (arg: EventClickArg) => void;\n onDateSelect?: (arg: DateSelectArg) => void;\n}\n\nconst defaultEvents: CalendarEvent[] = [\n {\n id: \"1\",\n title: \"Event Conf.\",\n start: new Date().toISOString().split(\"T\")[0],\n extendedProps: { calendar: \"Danger\" },\n },\n {\n id: \"2\",\n title: \"Meeting\",\n start: new Date(Date.now() + 86400000).toISOString().split(\"T\")[0],\n extendedProps: { calendar: \"Success\" },\n },\n {\n id: \"3\",\n title: \"Workshop\",\n start: new Date(Date.now() + 172800000).toISOString().split(\"T\")[0],\n end: new Date(Date.now() + 259200000).toISOString().split(\"T\")[0],\n extendedProps: { calendar: \"Primary\" },\n },\n];\n\nexport const Calendar: React.FC<CalendarProps> = ({\n events: eventsProp,\n initialView = \"dayGridMonth\",\n onEventClick,\n onDateSelect,\n}) => {\n const [selectedEvent, setSelectedEvent] = useState<CalendarEvent | null>(\n null\n );\n const [eventTitle, setEventTitle] = useState(\"\");\n const [eventStartDate, setEventStartDate] = useState(\"\");\n const [eventEndDate, setEventEndDate] = useState(\"\");\n const [eventLevel, setEventLevel] = useState(\"\");\n const [events, setEvents] = useState<EventInput[]>(eventsProp ?? []);\n const [isOpen, setIsOpen] = useState(false);\n const calendarRef = useRef<FullCalendar>(null);\n\n const openModal = () => setIsOpen(true);\n const closeModal = () => setIsOpen(false);\n\n const calendarsEvents = {\n Danger: \"danger\",\n Success: \"success\",\n Primary: \"primary\",\n Warning: \"warning\",\n };\n\n useEffect(() => {\n // Initialize with provided events, or fall back to the demo events.\n setEvents(eventsProp ?? defaultEvents);\n }, [eventsProp]);\n\n const handleDateSelect = (selectInfo: DateSelectArg) => {\n onDateSelect?.(selectInfo);\n resetModalFields();\n setEventStartDate(selectInfo.startStr);\n setEventEndDate(selectInfo.endStr || selectInfo.startStr);\n openModal();\n };\n\n const handleEventClick = (clickInfo: EventClickArg) => {\n onEventClick?.(clickInfo);\n const event = clickInfo.event;\n setSelectedEvent(event as unknown as CalendarEvent);\n setEventTitle(event.title);\n setEventStartDate(event.start?.toISOString().split(\"T\")[0] || \"\");\n setEventEndDate(event.end?.toISOString().split(\"T\")[0] || \"\");\n setEventLevel(event.extendedProps.calendar);\n openModal();\n };\n\n const handleAddOrUpdateEvent = () => {\n if (selectedEvent) {\n // Update existing event\n setEvents((prevEvents) =>\n prevEvents.map((event) =>\n event.id === selectedEvent.id\n ? {\n ...event,\n title: eventTitle,\n start: eventStartDate,\n end: eventEndDate,\n extendedProps: { calendar: eventLevel },\n }\n : event\n )\n );\n } else {\n // Add new event\n const newEvent: CalendarEvent = {\n id: Date.now().toString(),\n title: eventTitle,\n start: eventStartDate,\n end: eventEndDate,\n allDay: true,\n extendedProps: { calendar: eventLevel },\n };\n setEvents((prevEvents) => [...prevEvents, newEvent]);\n }\n closeModal();\n resetModalFields();\n };\n\n const resetModalFields = () => {\n setEventTitle(\"\");\n setEventStartDate(\"\");\n setEventEndDate(\"\");\n setEventLevel(\"\");\n setSelectedEvent(null);\n };\n\n return (\n <div className=\"rounded-2xl border border-gray-200 bg-white dark:border-gray-800 dark:bg-white/[0.03]\">\n <div className=\"custom-calendar\">\n <FullCalendar\n ref={calendarRef}\n plugins={[dayGridPlugin, timeGridPlugin, interactionPlugin]}\n initialView={initialView}\n headerToolbar={{\n left: \"prev,next addEventButton\",\n center: \"title\",\n right: \"dayGridMonth,timeGridWeek,timeGridDay\",\n }}\n events={events}\n selectable={true}\n select={handleDateSelect}\n eventClick={handleEventClick}\n eventContent={renderEventContent}\n customButtons={{\n addEventButton: {\n text: \"Add Event +\",\n click: openModal,\n },\n }}\n />\n </div>\n <Modal\n isOpen={isOpen}\n onClose={closeModal}\n className=\"max-w-[700px] p-6 lg:p-10\"\n >\n <div className=\"flex flex-col px-2 overflow-y-auto custom-scrollbar\">\n <div>\n <h5 className=\"mb-2 font-semibold text-gray-800 modal-title text-theme-xl dark:text-white/90 lg:text-2xl\">\n {selectedEvent ? \"Edit Event\" : \"Add Event\"}\n </h5>\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n Plan your next big moment: schedule or edit an event to stay on\n track\n </p>\n </div>\n <div className=\"mt-8\">\n <div>\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400\">\n Event Title\n </label>\n <input\n id=\"event-title\"\n type=\"text\"\n value={eventTitle}\n onChange={(e) => setEventTitle(e.target.value)}\n className=\"dark:bg-dark-900 h-11 w-full rounded-lg border border-gray-300 bg-transparent px-4 py-2.5 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\"\n />\n </div>\n </div>\n <div className=\"mt-6\">\n <label className=\"block mb-4 text-sm font-medium text-gray-700 dark:text-gray-400\">\n Event Color\n </label>\n <div className=\"flex flex-wrap items-center gap-4 sm:gap-5\">\n {Object.entries(calendarsEvents).map(([key, value]) => (\n <div key={key} className=\"n-chk\">\n <div\n className={`form-check form-check-${value} form-check-inline`}\n >\n <label\n className=\"flex items-center text-sm text-gray-700 form-check-label dark:text-gray-400\"\n htmlFor={`modal${key}`}\n >\n <span className=\"relative\">\n <input\n className=\"sr-only form-check-input\"\n type=\"radio\"\n name=\"event-level\"\n value={key}\n id={`modal${key}`}\n checked={eventLevel === key}\n onChange={() => setEventLevel(key)}\n />\n <span className=\"flex items-center justify-center w-5 h-5 mr-2 border border-gray-300 rounded-full box dark:border-gray-700\">\n <span\n className={`h-2 w-2 rounded-full bg-white ${\n eventLevel === key ? \"block\" : \"hidden\"\n }`}\n ></span>\n </span>\n </span>\n {key}\n </label>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"mt-6\">\n <label className=\"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400\">\n Enter Start Date\n </label>\n <div className=\"relative\">\n <input\n id=\"event-start-date\"\n type=\"date\"\n value={eventStartDate}\n onChange={(e) => setEventStartDate(e.target.value)}\n className=\"dark:bg-dark-900 h-11 w-full appearance-none rounded-lg border border-gray-300 bg-transparent bg-none px-4 py-2.5 pl-4 pr-11 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\"\n />\n </div>\n </div>\n\n <div className=\"mt-6\">\n <label className=\"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400\">\n Enter End Date\n </label>\n <div className=\"relative\">\n <input\n id=\"event-end-date\"\n type=\"date\"\n value={eventEndDate}\n onChange={(e) => setEventEndDate(e.target.value)}\n className=\"dark:bg-dark-900 h-11 w-full appearance-none rounded-lg border border-gray-300 bg-transparent bg-none px-4 py-2.5 pl-4 pr-11 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\"\n />\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-3 mt-6 modal-footer sm:justify-end\">\n <button\n onClick={closeModal}\n type=\"button\"\n className=\"flex w-full justify-center rounded-lg border border-gray-300 bg-white px-4 py-2.5 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-white/[0.03] sm:w-auto\"\n >\n Close\n </button>\n <button\n onClick={handleAddOrUpdateEvent}\n type=\"button\"\n className=\"btn btn-success btn-update-event flex w-full justify-center rounded-lg bg-brand-500 px-4 py-2.5 text-sm font-medium text-white hover:bg-brand-600 sm:w-auto\"\n >\n {selectedEvent ? \"Update Changes\" : \"Add Event\"}\n </button>\n </div>\n </div>\n </Modal>\n </div>\n );\n};\n\nconst renderEventContent = (eventInfo: EventContentArg) => {\n const colorClass = `fc-bg-${eventInfo.event.extendedProps.calendar.toLowerCase()}`;\n return (\n <div\n className={`event-fc-color flex fc-event-main ${colorClass} p-1 rounded-sm`}\n >\n <div className=\"fc-daygrid-event-dot\"></div>\n <div className=\"fc-event-time\">{eventInfo.timeText}</div>\n <div className=\"fc-event-title\">{eventInfo.event.title}</div>\n </div>\n );\n};\n"]}
@@ -296,7 +296,7 @@ var Modal = ({
296
296
  "z-99 flex h-9.5 w-9.5 shrink-0 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white sm:h-11 sm:w-11",
297
297
  !isInline && "absolute right-3 top-3 sm:right-6 sm:top-6"
298
298
  ),
299
- children: /* @__PURE__ */ jsx(X, { className: "h-6 w-6", "aria-hidden": "true" })
299
+ children: /* @__PURE__ */ jsx(X, { className: "size-4", "aria-hidden": "true" })
300
300
  }
301
301
  );
302
302
  return createPortal(
@@ -606,5 +606,5 @@ var renderEventContent = (eventInfo) => {
606
606
  };
607
607
 
608
608
  export { Calendar, Modal };
609
- //# sourceMappingURL=chunk-PYZG7RY7.js.map
610
- //# sourceMappingURL=chunk-PYZG7RY7.js.map
609
+ //# sourceMappingURL=chunk-NJBVRPWW.js.map
610
+ //# sourceMappingURL=chunk-NJBVRPWW.js.map