@andreagiugni/tailwind-dashboard-ui 0.1.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 (66) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +282 -0
  3. package/dist/Editor-uOYxR3HX.d.cts +53 -0
  4. package/dist/Editor-uOYxR3HX.d.ts +53 -0
  5. package/dist/chunk-4OETC46A.js +353 -0
  6. package/dist/chunk-4OETC46A.js.map +1 -0
  7. package/dist/chunk-7OWZKV75.js +420 -0
  8. package/dist/chunk-7OWZKV75.js.map +1 -0
  9. package/dist/chunk-BGA7AECV.cjs +152 -0
  10. package/dist/chunk-BGA7AECV.cjs.map +1 -0
  11. package/dist/chunk-HT7SQXRF.cjs +85 -0
  12. package/dist/chunk-HT7SQXRF.cjs.map +1 -0
  13. package/dist/chunk-HZQZC5CK.js +124 -0
  14. package/dist/chunk-HZQZC5CK.js.map +1 -0
  15. package/dist/chunk-MEU4PMP5.js +146 -0
  16. package/dist/chunk-MEU4PMP5.js.map +1 -0
  17. package/dist/chunk-MYOOZFHK.cjs +430 -0
  18. package/dist/chunk-MYOOZFHK.cjs.map +1 -0
  19. package/dist/chunk-OSIOO5AE.cjs +130 -0
  20. package/dist/chunk-OSIOO5AE.cjs.map +1 -0
  21. package/dist/chunk-R66LONPQ.js +83 -0
  22. package/dist/chunk-R66LONPQ.js.map +1 -0
  23. package/dist/chunk-W7SNEBD7.cjs +362 -0
  24. package/dist/chunk-W7SNEBD7.cjs.map +1 -0
  25. package/dist/chunk-YERNSNT4.cjs +13 -0
  26. package/dist/chunk-YERNSNT4.cjs.map +1 -0
  27. package/dist/chunk-ZLIYUUA4.js +11 -0
  28. package/dist/chunk-ZLIYUUA4.js.map +1 -0
  29. package/dist/components/Calendar/Calendar.cjs +14 -0
  30. package/dist/components/Calendar/Calendar.cjs.map +1 -0
  31. package/dist/components/Calendar/Calendar.d.cts +12 -0
  32. package/dist/components/Calendar/Calendar.d.ts +12 -0
  33. package/dist/components/Calendar/Calendar.js +5 -0
  34. package/dist/components/Calendar/Calendar.js.map +1 -0
  35. package/dist/components/Charts/BarChart.cjs +13 -0
  36. package/dist/components/Charts/BarChart.cjs.map +1 -0
  37. package/dist/components/Charts/BarChart.d.cts +13 -0
  38. package/dist/components/Charts/BarChart.d.ts +13 -0
  39. package/dist/components/Charts/BarChart.js +4 -0
  40. package/dist/components/Charts/BarChart.js.map +1 -0
  41. package/dist/components/Charts/LineChart.cjs +13 -0
  42. package/dist/components/Charts/LineChart.cjs.map +1 -0
  43. package/dist/components/Charts/LineChart.d.cts +13 -0
  44. package/dist/components/Charts/LineChart.d.ts +13 -0
  45. package/dist/components/Charts/LineChart.js +4 -0
  46. package/dist/components/Charts/LineChart.js.map +1 -0
  47. package/dist/components/Editor/Editor.cjs +14 -0
  48. package/dist/components/Editor/Editor.cjs.map +1 -0
  49. package/dist/components/Editor/Editor.d.cts +3 -0
  50. package/dist/components/Editor/Editor.d.ts +3 -0
  51. package/dist/components/Editor/Editor.js +5 -0
  52. package/dist/components/Editor/Editor.js.map +1 -0
  53. package/dist/components/Map/CountryMap.cjs +13 -0
  54. package/dist/components/Map/CountryMap.cjs.map +1 -0
  55. package/dist/components/Map/CountryMap.d.cts +13 -0
  56. package/dist/components/Map/CountryMap.d.ts +13 -0
  57. package/dist/components/Map/CountryMap.js +4 -0
  58. package/dist/components/Map/CountryMap.js.map +1 -0
  59. package/dist/index.cjs +2896 -0
  60. package/dist/index.cjs.map +1 -0
  61. package/dist/index.d.cts +573 -0
  62. package/dist/index.d.ts +573 -0
  63. package/dist/index.js +2816 -0
  64. package/dist/index.js.map +1 -0
  65. package/package.json +134 -0
  66. package/src/theme.css +784 -0
@@ -0,0 +1,83 @@
1
+ "use client";
2
+ import { VectorMap } from '@react-jvectormap/core';
3
+ import { worldMill } from '@react-jvectormap/world';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var defaultMarkers = [
7
+ { latLng: [37.2580397, -104.657039], name: "United States" },
8
+ { latLng: [20.7504374, 73.7276105], name: "India" },
9
+ { latLng: [53.613, -11.6368], name: "United Kingdom" },
10
+ { latLng: [-25.0304388, 115.2092761], name: "Sweden" }
11
+ ];
12
+ var CountryMap = ({
13
+ markers = defaultMarkers,
14
+ markerColor = "#465FFF",
15
+ mapColor
16
+ }) => {
17
+ const mappedMarkers = markers.map((marker) => ({
18
+ latLng: marker.latLng,
19
+ name: marker.name,
20
+ style: {
21
+ fill: markerColor,
22
+ borderWidth: 1,
23
+ borderColor: "white"
24
+ }
25
+ }));
26
+ return /* @__PURE__ */ jsx(
27
+ VectorMap,
28
+ {
29
+ map: worldMill,
30
+ backgroundColor: "transparent",
31
+ markerStyle: {
32
+ initial: {
33
+ fill: markerColor,
34
+ r: 4
35
+ // Custom radius for markers
36
+ }
37
+ // Type assertion to bypass strict CSS property checks
38
+ },
39
+ markersSelectable: true,
40
+ markers: mappedMarkers,
41
+ zoomOnScroll: false,
42
+ zoomMax: 12,
43
+ zoomMin: 1,
44
+ zoomAnimate: true,
45
+ zoomStep: 1.5,
46
+ regionStyle: {
47
+ initial: {
48
+ fill: mapColor || "#D0D5DD",
49
+ fillOpacity: 1,
50
+ fontFamily: "Outfit",
51
+ stroke: "none",
52
+ strokeWidth: 0,
53
+ strokeOpacity: 0
54
+ },
55
+ hover: {
56
+ fillOpacity: 0.7,
57
+ cursor: "pointer",
58
+ fill: markerColor,
59
+ stroke: "none"
60
+ },
61
+ selected: {
62
+ fill: markerColor
63
+ },
64
+ selectedHover: {}
65
+ },
66
+ regionLabelStyle: {
67
+ initial: {
68
+ fill: "#35373e",
69
+ fontWeight: 500,
70
+ fontSize: "13px",
71
+ stroke: "none"
72
+ },
73
+ hover: {},
74
+ selected: {},
75
+ selectedHover: {}
76
+ }
77
+ }
78
+ );
79
+ };
80
+
81
+ export { CountryMap };
82
+ //# sourceMappingURL=chunk-R66LONPQ.js.map
83
+ //# sourceMappingURL=chunk-R66LONPQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Map/CountryMap.tsx"],"names":[],"mappings":";;;;AA8BA,IAAM,cAAA,GAA+D;AAAA,EACnE,EAAE,MAAA,EAAQ,CAAC,YAAY,WAAW,CAAA,EAAG,MAAM,eAAA,EAAgB;AAAA,EAC3D,EAAE,MAAA,EAAQ,CAAC,YAAY,UAAU,CAAA,EAAG,MAAM,OAAA,EAAQ;AAAA,EAClD,EAAE,MAAA,EAAQ,CAAC,QAAQ,QAAQ,CAAA,EAAG,MAAM,gBAAA,EAAiB;AAAA,EACrD,EAAE,MAAA,EAAQ,CAAC,aAAa,WAAW,CAAA,EAAG,MAAM,QAAA;AAC9C,CAAA;AAEO,IAAM,aAAwC,CAAC;AAAA,EACpD,OAAA,GAAU,cAAA;AAAA,EACV,WAAA,GAAc,SAAA;AAAA,EACd;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,aAAA,GAA0B,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,IACvD,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,WAAA,EAAa,CAAA;AAAA,MACb,WAAA,EAAa;AAAA;AACf,GACF,CAAE,CAAA;AAEF,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,SAAA;AAAA,MACL,eAAA,EAAgB,aAAA;AAAA,MAChB,WAAA,EACE;AAAA,QACE,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,WAAA;AAAA,UACN,CAAA,EAAG;AAAA;AAAA;AACL;AAAA,OACF;AAAA,MAEF,iBAAA,EAAmB,IAAA;AAAA,MACnB,OAAA,EAAS,aAAA;AAAA,MACT,YAAA,EAAc,KAAA;AAAA,MACd,OAAA,EAAS,EAAA;AAAA,MACT,OAAA,EAAS,CAAA;AAAA,MACT,WAAA,EAAa,IAAA;AAAA,MACb,QAAA,EAAU,GAAA;AAAA,MACV,WAAA,EAAa;AAAA,QACX,OAAA,EAAS;AAAA,UACP,MAAM,QAAA,IAAY,SAAA;AAAA,UAClB,WAAA,EAAa,CAAA;AAAA,UACb,UAAA,EAAY,QAAA;AAAA,UACZ,MAAA,EAAQ,MAAA;AAAA,UACR,WAAA,EAAa,CAAA;AAAA,UACb,aAAA,EAAe;AAAA,SACjB;AAAA,QACA,KAAA,EAAO;AAAA,UACL,WAAA,EAAa,GAAA;AAAA,UACb,MAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAM,WAAA;AAAA,UACN,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAU;AAAA,UACR,IAAA,EAAM;AAAA,SACR;AAAA,QACA,eAAe;AAAC,OAClB;AAAA,MACA,gBAAA,EAAkB;AAAA,QAChB,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,SAAA;AAAA,UACN,UAAA,EAAY,GAAA;AAAA,UACZ,QAAA,EAAU,MAAA;AAAA,UACV,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAO,EAAC;AAAA,QACR,UAAU,EAAC;AAAA,QACX,eAAe;AAAC;AAClB;AAAA,GACF;AAEJ","file":"chunk-R66LONPQ.js","sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { VectorMap } from \"@react-jvectormap/core\";\nimport { worldMill } from \"@react-jvectormap/world\";\n\ntype MarkerStyle = {\n initial: {\n fill: string;\n r: number; // Radius for markers\n };\n};\n\ntype Marker = {\n latLng: [number, number];\n name: string;\n style?: {\n fill: string;\n borderWidth: number;\n borderColor: string;\n stroke?: string;\n strokeOpacity?: number;\n };\n};\n\nexport interface CountryMapProps {\n markers?: { latLng: [number, number]; name: string }[];\n markerColor?: string;\n mapColor?: string;\n}\n\nconst defaultMarkers: { latLng: [number, number]; name: string }[] = [\n { latLng: [37.2580397, -104.657039], name: \"United States\" },\n { latLng: [20.7504374, 73.7276105], name: \"India\" },\n { latLng: [53.613, -11.6368], name: \"United Kingdom\" },\n { latLng: [-25.0304388, 115.2092761], name: \"Sweden\" },\n];\n\nexport const CountryMap: React.FC<CountryMapProps> = ({\n markers = defaultMarkers,\n markerColor = \"#465FFF\",\n mapColor,\n}) => {\n const mappedMarkers: Marker[] = markers.map((marker) => ({\n latLng: marker.latLng,\n name: marker.name,\n style: {\n fill: markerColor,\n borderWidth: 1,\n borderColor: \"white\",\n },\n }));\n\n return (\n <VectorMap\n map={worldMill}\n backgroundColor=\"transparent\"\n markerStyle={\n {\n initial: {\n fill: markerColor,\n r: 4, // Custom radius for markers\n }, // Type assertion to bypass strict CSS property checks\n } as MarkerStyle\n }\n markersSelectable={true}\n markers={mappedMarkers}\n zoomOnScroll={false}\n zoomMax={12}\n zoomMin={1}\n zoomAnimate={true}\n zoomStep={1.5}\n regionStyle={{\n initial: {\n fill: mapColor || \"#D0D5DD\",\n fillOpacity: 1,\n fontFamily: \"Outfit\",\n stroke: \"none\",\n strokeWidth: 0,\n strokeOpacity: 0,\n },\n hover: {\n fillOpacity: 0.7,\n cursor: \"pointer\",\n fill: markerColor,\n stroke: \"none\",\n },\n selected: {\n fill: markerColor,\n },\n selectedHover: {},\n }}\n regionLabelStyle={{\n initial: {\n fill: \"#35373e\",\n fontWeight: 500,\n fontSize: \"13px\",\n stroke: \"none\",\n },\n hover: {},\n selected: {},\n selectedHover: {},\n }}\n />\n );\n};\n"]}
@@ -0,0 +1,362 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkYERNSNT4_cjs = require('./chunk-YERNSNT4.cjs');
5
+ var React = require('react');
6
+ var react = require('@tiptap/react');
7
+ var StarterKit = require('@tiptap/starter-kit');
8
+ var Link = require('@tiptap/extension-link');
9
+ var Placeholder = require('@tiptap/extension-placeholder');
10
+ var jsxRuntime = require('react/jsx-runtime');
11
+
12
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
+
14
+ var React__default = /*#__PURE__*/_interopDefault(React);
15
+ var StarterKit__default = /*#__PURE__*/_interopDefault(StarterKit);
16
+ var Link__default = /*#__PURE__*/_interopDefault(Link);
17
+ var Placeholder__default = /*#__PURE__*/_interopDefault(Placeholder);
18
+
19
+ var base = {
20
+ width: 18,
21
+ height: 18,
22
+ viewBox: "0 0 24 24",
23
+ fill: "none",
24
+ stroke: "currentColor",
25
+ strokeWidth: 2,
26
+ strokeLinecap: "round",
27
+ strokeLinejoin: "round",
28
+ xmlns: "http://www.w3.org/2000/svg"
29
+ };
30
+ var BoldIcon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
31
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 4h7a4 4 0 0 1 0 8H6z" }),
32
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 12h8a4 4 0 0 1 0 8H6z" })
33
+ ] });
34
+ var ItalicIcon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
35
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "19", y1: "4", x2: "10", y2: "4" }),
36
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "14", y1: "20", x2: "5", y2: "20" }),
37
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "15", y1: "4", x2: "9", y2: "20" })
38
+ ] });
39
+ var StrikeIcon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
40
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 4H9a3 3 0 0 0-2.83 4" }),
41
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14 12a4 4 0 0 1 0 8H6" }),
42
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "4", y1: "12", x2: "20", y2: "12" })
43
+ ] });
44
+ var CodeIcon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
45
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "16 18 22 12 16 6" }),
46
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "8 6 2 12 8 18" })
47
+ ] });
48
+ var Heading1Icon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
49
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 12h8" }),
50
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 18V6" }),
51
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 18V6" }),
52
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 12l3-2v8" })
53
+ ] });
54
+ var Heading2Icon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
55
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 12h8" }),
56
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 18V6" }),
57
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 18V6" }),
58
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 10c2 0 3 1 3 2.5S18 15 17 16l-2 2h5" })
59
+ ] });
60
+ var Heading3Icon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
61
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 12h8" }),
62
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 18V6" }),
63
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 18V6" }),
64
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 10c2.5-1 3.5 1 2.5 2c1 1 0.5 4-2.5 3" })
65
+ ] });
66
+ var BulletListIcon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
67
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "9", y1: "6", x2: "20", y2: "6" }),
68
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "9", y1: "12", x2: "20", y2: "12" }),
69
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "9", y1: "18", x2: "20", y2: "18" }),
70
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "4", cy: "6", r: "1" }),
71
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "4", cy: "12", r: "1" }),
72
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "4", cy: "18", r: "1" })
73
+ ] });
74
+ var OrderedListIcon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
75
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "10", y1: "6", x2: "20", y2: "6" }),
76
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "10", y1: "12", x2: "20", y2: "12" }),
77
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "10", y1: "18", x2: "20", y2: "18" }),
78
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 6V3.5L3 4" }),
79
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 12h2l-2 3h2" }),
80
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 17h2v3H3" })
81
+ ] });
82
+ var BlockquoteIcon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
83
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 21c3 0 7-1 7-8V5H3v7h4" }),
84
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14 21c3 0 7-1 7-8V5h-7v7h4" })
85
+ ] });
86
+ var CodeBlockIcon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
87
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "4", width: "18", height: "16", rx: "2" }),
88
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "9 9 7 12 9 15" }),
89
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "15 9 17 12 15 15" })
90
+ ] });
91
+ var LinkIcon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
92
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 13a5 5 0 0 0 7 0l3-3a5 5 0 0 0-7-7l-1 1" }),
93
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14 11a5 5 0 0 0-7 0l-3 3a5 5 0 0 0 7 7l1-1" })
94
+ ] });
95
+ var UndoIcon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
96
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 7v6h6" }),
97
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 13a9 9 0 1 0 3-7.7L3 8" })
98
+ ] });
99
+ var RedoIcon = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { ...base, children: [
100
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 7v6h-6" }),
101
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 13a9 9 0 1 1-3-7.7L21 8" })
102
+ ] });
103
+ var DEFAULT_TOOLBAR = [
104
+ "bold",
105
+ "italic",
106
+ "strike",
107
+ "code",
108
+ "divider",
109
+ "heading1",
110
+ "heading2",
111
+ "heading3",
112
+ "divider",
113
+ "bulletList",
114
+ "orderedList",
115
+ "blockquote",
116
+ "codeBlock",
117
+ "divider",
118
+ "link",
119
+ "divider",
120
+ "undo",
121
+ "redo"
122
+ ];
123
+ var BUILTINS = {
124
+ bold: {
125
+ icon: /* @__PURE__ */ jsxRuntime.jsx(BoldIcon, {}),
126
+ title: "Bold",
127
+ onClick: (e) => e.chain().focus().toggleBold().run(),
128
+ isActive: (e) => e.isActive("bold")
129
+ },
130
+ italic: {
131
+ icon: /* @__PURE__ */ jsxRuntime.jsx(ItalicIcon, {}),
132
+ title: "Italic",
133
+ onClick: (e) => e.chain().focus().toggleItalic().run(),
134
+ isActive: (e) => e.isActive("italic")
135
+ },
136
+ strike: {
137
+ icon: /* @__PURE__ */ jsxRuntime.jsx(StrikeIcon, {}),
138
+ title: "Strikethrough",
139
+ onClick: (e) => e.chain().focus().toggleStrike().run(),
140
+ isActive: (e) => e.isActive("strike")
141
+ },
142
+ code: {
143
+ icon: /* @__PURE__ */ jsxRuntime.jsx(CodeIcon, {}),
144
+ title: "Inline code",
145
+ onClick: (e) => e.chain().focus().toggleCode().run(),
146
+ isActive: (e) => e.isActive("code")
147
+ },
148
+ heading1: {
149
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Heading1Icon, {}),
150
+ title: "Heading 1",
151
+ onClick: (e) => e.chain().focus().toggleHeading({ level: 1 }).run(),
152
+ isActive: (e) => e.isActive("heading", { level: 1 })
153
+ },
154
+ heading2: {
155
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Heading2Icon, {}),
156
+ title: "Heading 2",
157
+ onClick: (e) => e.chain().focus().toggleHeading({ level: 2 }).run(),
158
+ isActive: (e) => e.isActive("heading", { level: 2 })
159
+ },
160
+ heading3: {
161
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Heading3Icon, {}),
162
+ title: "Heading 3",
163
+ onClick: (e) => e.chain().focus().toggleHeading({ level: 3 }).run(),
164
+ isActive: (e) => e.isActive("heading", { level: 3 })
165
+ },
166
+ bulletList: {
167
+ icon: /* @__PURE__ */ jsxRuntime.jsx(BulletListIcon, {}),
168
+ title: "Bullet list",
169
+ onClick: (e) => e.chain().focus().toggleBulletList().run(),
170
+ isActive: (e) => e.isActive("bulletList")
171
+ },
172
+ orderedList: {
173
+ icon: /* @__PURE__ */ jsxRuntime.jsx(OrderedListIcon, {}),
174
+ title: "Ordered list",
175
+ onClick: (e) => e.chain().focus().toggleOrderedList().run(),
176
+ isActive: (e) => e.isActive("orderedList")
177
+ },
178
+ blockquote: {
179
+ icon: /* @__PURE__ */ jsxRuntime.jsx(BlockquoteIcon, {}),
180
+ title: "Blockquote",
181
+ onClick: (e) => e.chain().focus().toggleBlockquote().run(),
182
+ isActive: (e) => e.isActive("blockquote")
183
+ },
184
+ codeBlock: {
185
+ icon: /* @__PURE__ */ jsxRuntime.jsx(CodeBlockIcon, {}),
186
+ title: "Code block",
187
+ onClick: (e) => e.chain().focus().toggleCodeBlock().run(),
188
+ isActive: (e) => e.isActive("codeBlock")
189
+ },
190
+ link: {
191
+ icon: /* @__PURE__ */ jsxRuntime.jsx(LinkIcon, {}),
192
+ title: "Link",
193
+ // Minimal UX: window.prompt for the URL (no extra UI deps). Empty input
194
+ // clears any existing link on the selection.
195
+ onClick: (e) => {
196
+ const prev = e.getAttributes("link").href ?? "";
197
+ const url = typeof window !== "undefined" ? window.prompt("Enter URL", prev) : null;
198
+ if (url === null) return;
199
+ if (url === "") {
200
+ e.chain().focus().extendMarkRange("link").unsetLink().run();
201
+ return;
202
+ }
203
+ e.chain().focus().extendMarkRange("link").setLink({ href: url }).run();
204
+ },
205
+ isActive: (e) => e.isActive("link")
206
+ },
207
+ undo: {
208
+ icon: /* @__PURE__ */ jsxRuntime.jsx(UndoIcon, {}),
209
+ title: "Undo",
210
+ onClick: (e) => e.chain().focus().undo().run(),
211
+ isDisabled: (e) => !e.can().undo()
212
+ },
213
+ redo: {
214
+ icon: /* @__PURE__ */ jsxRuntime.jsx(RedoIcon, {}),
215
+ title: "Redo",
216
+ onClick: (e) => e.chain().focus().redo().run(),
217
+ isDisabled: (e) => !e.can().redo()
218
+ }
219
+ };
220
+ var toolButtonClass = (active) => chunkYERNSNT4_cjs.cn(
221
+ "inline-flex h-8 w-8 items-center justify-center rounded-lg text-gray-600 transition",
222
+ "hover:bg-gray-100 hover:text-gray-800 disabled:cursor-not-allowed disabled:opacity-40",
223
+ "dark:text-gray-400 dark:hover:bg-white/[0.06] dark:hover:text-gray-200",
224
+ active && "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"
225
+ );
226
+ var Divider = () => /* @__PURE__ */ jsxRuntime.jsx(
227
+ "span",
228
+ {
229
+ "aria-hidden": true,
230
+ className: "mx-1 h-5 w-px self-center bg-gray-200 dark:bg-gray-700"
231
+ }
232
+ );
233
+ var Editor = ({
234
+ content,
235
+ onChange,
236
+ placeholder = "Start writing\u2026",
237
+ editable = true,
238
+ toolbar = DEFAULT_TOOLBAR,
239
+ className,
240
+ editorClassName
241
+ }) => {
242
+ const editor = react.useEditor({
243
+ extensions: [
244
+ StarterKit__default.default,
245
+ Link__default.default.configure({ openOnClick: false }),
246
+ Placeholder__default.default.configure({ placeholder })
247
+ ],
248
+ content,
249
+ editable,
250
+ immediatelyRender: false,
251
+ editorProps: {
252
+ attributes: {
253
+ class: "focus:outline-none"
254
+ }
255
+ },
256
+ onUpdate: ({ editor: editor2 }) => onChange?.(editor2.getHTML())
257
+ });
258
+ React__default.default.useEffect(() => {
259
+ editor?.setEditable(editable);
260
+ }, [editor, editable]);
261
+ if (!editor) {
262
+ return /* @__PURE__ */ jsxRuntime.jsxs(
263
+ "div",
264
+ {
265
+ className: chunkYERNSNT4_cjs.cn(
266
+ "w-full overflow-hidden rounded-xl border border-gray-200 dark:border-gray-800",
267
+ className
268
+ ),
269
+ children: [
270
+ editable && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-12 border-b border-gray-200 bg-gray-50 dark:border-gray-800 dark:bg-white/[0.02]" }),
271
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-[200px] animate-pulse bg-gray-50/50 dark:bg-white/[0.01]" })
272
+ ]
273
+ }
274
+ );
275
+ }
276
+ const renderToolbar = () => {
277
+ let dividerKey = 0;
278
+ return toolbar.map((item, index) => {
279
+ if (typeof item === "object") {
280
+ const active2 = item.isActive?.(editor) ?? false;
281
+ return /* @__PURE__ */ jsxRuntime.jsx(
282
+ "button",
283
+ {
284
+ type: "button",
285
+ title: item.title,
286
+ "aria-label": item.title,
287
+ "aria-pressed": active2,
288
+ onClick: () => item.onClick(editor),
289
+ className: toolButtonClass(active2),
290
+ children: item.icon
291
+ },
292
+ item.id || `custom-${index}`
293
+ );
294
+ }
295
+ if (item === "divider") {
296
+ return /* @__PURE__ */ jsxRuntime.jsx(Divider, {}, `divider-${dividerKey++}`);
297
+ }
298
+ const def = BUILTINS[item];
299
+ if (!def) return null;
300
+ const active = def.isActive?.(editor) ?? false;
301
+ const disabled = def.isDisabled?.(editor) ?? false;
302
+ return /* @__PURE__ */ jsxRuntime.jsx(
303
+ "button",
304
+ {
305
+ type: "button",
306
+ title: def.title,
307
+ "aria-label": def.title,
308
+ "aria-pressed": active,
309
+ disabled,
310
+ onClick: () => def.onClick(editor),
311
+ className: toolButtonClass(active),
312
+ children: def.icon
313
+ },
314
+ item
315
+ );
316
+ });
317
+ };
318
+ return /* @__PURE__ */ jsxRuntime.jsxs(
319
+ "div",
320
+ {
321
+ className: chunkYERNSNT4_cjs.cn(
322
+ "w-full overflow-hidden rounded-xl border border-gray-200 bg-white shadow-theme-xs dark:border-gray-800 dark:bg-white/[0.02]",
323
+ className
324
+ ),
325
+ children: [
326
+ editable && /* @__PURE__ */ jsxRuntime.jsx("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]", children: renderToolbar() }),
327
+ /* @__PURE__ */ jsxRuntime.jsx(
328
+ react.EditorContent,
329
+ {
330
+ editor,
331
+ className: chunkYERNSNT4_cjs.cn(
332
+ "min-h-[200px] px-4 py-3 text-sm text-gray-700 dark:text-gray-300",
333
+ "rounded-b-xl",
334
+ // Explicit element styling (no @tailwindcss/typography assumed).
335
+ "[&_.ProseMirror]:min-h-[180px] [&_.ProseMirror]:outline-none",
336
+ "[&_h1]:mb-3 [&_h1]:mt-4 [&_h1]:text-2xl [&_h1]:font-semibold [&_h1]:text-gray-900 dark:[&_h1]:text-white/90",
337
+ "[&_h2]:mb-2 [&_h2]:mt-4 [&_h2]:text-xl [&_h2]:font-semibold [&_h2]:text-gray-900 dark:[&_h2]:text-white/90",
338
+ "[&_h3]:mb-2 [&_h3]:mt-3 [&_h3]:text-lg [&_h3]:font-semibold [&_h3]:text-gray-900 dark:[&_h3]:text-white/90",
339
+ "[&_p]:my-2 [&_p]:leading-relaxed",
340
+ "[&_ul]:my-2 [&_ul]:list-disc [&_ul]:pl-6",
341
+ "[&_ol]:my-2 [&_ol]:list-decimal [&_ol]:pl-6",
342
+ "[&_li]:my-1 [&_li>p]:my-0",
343
+ "[&_a]:text-brand-500 [&_a]:underline hover:[&_a]:text-brand-600 dark:[&_a]:text-brand-400",
344
+ "[&_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",
345
+ "[&_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",
346
+ "[&_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",
347
+ "[&_pre_code]:bg-transparent [&_pre_code]:p-0 [&_pre_code]:text-inherit",
348
+ "[&_hr]:my-4 [&_hr]:border-gray-200 dark:[&_hr]:border-gray-800",
349
+ // Placeholder styling for the empty-document first node.
350
+ "[&_.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",
351
+ editorClassName
352
+ )
353
+ }
354
+ )
355
+ ]
356
+ }
357
+ );
358
+ };
359
+
360
+ exports.Editor = Editor;
361
+ //# sourceMappingURL=chunk-W7SNEBD7.cjs.map
362
+ //# sourceMappingURL=chunk-W7SNEBD7.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Editor/icons.tsx","../src/components/Editor/Editor.tsx"],"names":["jsxs","jsx","cn","useEditor","StarterKit","Link","Placeholder","editor","React","active","EditorContent"],"mappings":"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","file":"chunk-W7SNEBD7.cjs","sourcesContent":["import React from \"react\";\n\n/**\n * Small inline stroke icons (16–18px) for the editor toolbar.\n * They inherit color via `stroke=\"currentColor\"` so the active/inactive\n * button states drive their appearance.\n */\n\nconst base = {\n width: 18,\n height: 18,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n xmlns: \"http://www.w3.org/2000/svg\",\n};\n\nexport const BoldIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M6 4h7a4 4 0 0 1 0 8H6z\" />\n <path d=\"M6 12h8a4 4 0 0 1 0 8H6z\" />\n </svg>\n);\n\nexport const ItalicIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"19\" y1=\"4\" x2=\"10\" y2=\"4\" />\n <line x1=\"14\" y1=\"20\" x2=\"5\" y2=\"20\" />\n <line x1=\"15\" y1=\"4\" x2=\"9\" y2=\"20\" />\n </svg>\n);\n\nexport const StrikeIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M16 4H9a3 3 0 0 0-2.83 4\" />\n <path d=\"M14 12a4 4 0 0 1 0 8H6\" />\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" />\n </svg>\n);\n\nexport const CodeIcon: React.FC = () => (\n <svg {...base}>\n <polyline points=\"16 18 22 12 16 6\" />\n <polyline points=\"8 6 2 12 8 18\" />\n </svg>\n);\n\nexport const Heading1Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 12l3-2v8\" />\n </svg>\n);\n\nexport const Heading2Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 10c2 0 3 1 3 2.5S18 15 17 16l-2 2h5\" />\n </svg>\n);\n\nexport const Heading3Icon: React.FC = () => (\n <svg {...base}>\n <path d=\"M4 12h8\" />\n <path d=\"M4 18V6\" />\n <path d=\"M12 18V6\" />\n <path d=\"M17 10c2.5-1 3.5 1 2.5 2c1 1 0.5 4-2.5 3\" />\n </svg>\n);\n\nexport const BulletListIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"9\" y1=\"6\" x2=\"20\" y2=\"6\" />\n <line x1=\"9\" y1=\"12\" x2=\"20\" y2=\"12\" />\n <line x1=\"9\" y1=\"18\" x2=\"20\" y2=\"18\" />\n <circle cx=\"4\" cy=\"6\" r=\"1\" />\n <circle cx=\"4\" cy=\"12\" r=\"1\" />\n <circle cx=\"4\" cy=\"18\" r=\"1\" />\n </svg>\n);\n\nexport const OrderedListIcon: React.FC = () => (\n <svg {...base}>\n <line x1=\"10\" y1=\"6\" x2=\"20\" y2=\"6\" />\n <line x1=\"10\" y1=\"12\" x2=\"20\" y2=\"12\" />\n <line x1=\"10\" y1=\"18\" x2=\"20\" y2=\"18\" />\n <path d=\"M4 6V3.5L3 4\" />\n <path d=\"M3 12h2l-2 3h2\" />\n <path d=\"M3 17h2v3H3\" />\n </svg>\n);\n\nexport const BlockquoteIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M3 21c3 0 7-1 7-8V5H3v7h4\" />\n <path d=\"M14 21c3 0 7-1 7-8V5h-7v7h4\" />\n </svg>\n);\n\nexport const CodeBlockIcon: React.FC = () => (\n <svg {...base}>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" />\n <polyline points=\"9 9 7 12 9 15\" />\n <polyline points=\"15 9 17 12 15 15\" />\n </svg>\n);\n\nexport const LinkIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M10 13a5 5 0 0 0 7 0l3-3a5 5 0 0 0-7-7l-1 1\" />\n <path d=\"M14 11a5 5 0 0 0-7 0l-3 3a5 5 0 0 0 7 7l1-1\" />\n </svg>\n);\n\nexport const UndoIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M3 7v6h6\" />\n <path d=\"M3 13a9 9 0 1 0 3-7.7L3 8\" />\n </svg>\n);\n\nexport const RedoIcon: React.FC = () => (\n <svg {...base}>\n <path d=\"M21 7v6h-6\" />\n <path d=\"M21 13a9 9 0 1 1-3-7.7L21 8\" />\n </svg>\n);\n","\"use client\";\nimport React from \"react\";\nimport { useEditor, EditorContent, type Editor as TiptapEditor } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { cn } from \"../../lib/cn\";\nimport { type ColorOverrideProps } from \"../../lib/styleOverride\";\nimport {\n BoldIcon,\n ItalicIcon,\n StrikeIcon,\n CodeIcon,\n Heading1Icon,\n Heading2Icon,\n Heading3Icon,\n BulletListIcon,\n OrderedListIcon,\n BlockquoteIcon,\n CodeBlockIcon,\n LinkIcon,\n UndoIcon,\n RedoIcon,\n} from \"./icons\";\n\n/** Built-in toolbar tool ids. */\nexport type ToolbarItemId =\n | \"bold\"\n | \"italic\"\n | \"strike\"\n | \"code\"\n | \"heading1\"\n | \"heading2\"\n | \"heading3\"\n | \"bulletList\"\n | \"orderedList\"\n | \"blockquote\"\n | \"codeBlock\"\n | \"link\"\n | \"undo\"\n | \"redo\"\n | \"divider\";\n\n/** A fully custom toolbar button. */\nexport interface CustomToolbarItem {\n id: string;\n icon: React.ReactNode;\n title: string;\n onClick: (editor: TiptapEditor) => void;\n isActive?: (editor: TiptapEditor) => boolean;\n}\n\n/** A toolbar entry: either a built-in id or a custom button object. */\nexport type EditorToolItem = ToolbarItemId | CustomToolbarItem;\n\n/** @deprecated Alias kept for naming flexibility. Use `EditorToolItem`. */\nexport type ToolbarItem = EditorToolItem;\n\nexport interface EditorProps extends ColorOverrideProps {\n /** Initial HTML content. */\n content?: string;\n /** Fires with the current HTML whenever the document changes. */\n onChange?: (html: string) => void;\n /** Placeholder shown when the document is empty. */\n placeholder?: string;\n /** When false the editor is read-only and the toolbar is hidden. */\n editable?: boolean;\n /** Ordered toolbar configuration. Defaults to a sensible full set. */\n toolbar?: EditorToolItem[];\n /** Wrapper class. */\n className?: string;\n /** Class for the prose content area. */\n editorClassName?: string;\n}\n\nconst DEFAULT_TOOLBAR: EditorToolItem[] = [\n \"bold\",\n \"italic\",\n \"strike\",\n \"code\",\n \"divider\",\n \"heading1\",\n \"heading2\",\n \"heading3\",\n \"divider\",\n \"bulletList\",\n \"orderedList\",\n \"blockquote\",\n \"codeBlock\",\n \"divider\",\n \"link\",\n \"divider\",\n \"undo\",\n \"redo\",\n];\n\ninterface BuiltInDef {\n icon: React.ReactNode;\n title: string;\n onClick: (editor: TiptapEditor) => void;\n isActive?: (editor: TiptapEditor) => boolean;\n /** Disable callback (used for undo/redo). */\n isDisabled?: (editor: TiptapEditor) => boolean;\n}\n\nconst BUILTINS: Record<Exclude<ToolbarItemId, \"divider\">, BuiltInDef> = {\n bold: {\n icon: <BoldIcon />,\n title: \"Bold\",\n onClick: (e) => e.chain().focus().toggleBold().run(),\n isActive: (e) => e.isActive(\"bold\"),\n },\n italic: {\n icon: <ItalicIcon />,\n title: \"Italic\",\n onClick: (e) => e.chain().focus().toggleItalic().run(),\n isActive: (e) => e.isActive(\"italic\"),\n },\n strike: {\n icon: <StrikeIcon />,\n title: \"Strikethrough\",\n onClick: (e) => e.chain().focus().toggleStrike().run(),\n isActive: (e) => e.isActive(\"strike\"),\n },\n code: {\n icon: <CodeIcon />,\n title: \"Inline code\",\n onClick: (e) => e.chain().focus().toggleCode().run(),\n isActive: (e) => e.isActive(\"code\"),\n },\n heading1: {\n icon: <Heading1Icon />,\n title: \"Heading 1\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 1 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 1 }),\n },\n heading2: {\n icon: <Heading2Icon />,\n title: \"Heading 2\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 2 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 2 }),\n },\n heading3: {\n icon: <Heading3Icon />,\n title: \"Heading 3\",\n onClick: (e) => e.chain().focus().toggleHeading({ level: 3 }).run(),\n isActive: (e) => e.isActive(\"heading\", { level: 3 }),\n },\n bulletList: {\n icon: <BulletListIcon />,\n title: \"Bullet list\",\n onClick: (e) => e.chain().focus().toggleBulletList().run(),\n isActive: (e) => e.isActive(\"bulletList\"),\n },\n orderedList: {\n icon: <OrderedListIcon />,\n title: \"Ordered list\",\n onClick: (e) => e.chain().focus().toggleOrderedList().run(),\n isActive: (e) => e.isActive(\"orderedList\"),\n },\n blockquote: {\n icon: <BlockquoteIcon />,\n title: \"Blockquote\",\n onClick: (e) => e.chain().focus().toggleBlockquote().run(),\n isActive: (e) => e.isActive(\"blockquote\"),\n },\n codeBlock: {\n icon: <CodeBlockIcon />,\n title: \"Code block\",\n onClick: (e) => e.chain().focus().toggleCodeBlock().run(),\n isActive: (e) => e.isActive(\"codeBlock\"),\n },\n link: {\n icon: <LinkIcon />,\n title: \"Link\",\n // Minimal UX: window.prompt for the URL (no extra UI deps). Empty input\n // clears any existing link on the selection.\n onClick: (e) => {\n const prev = (e.getAttributes(\"link\") as { href?: string }).href ?? \"\";\n const url =\n typeof window !== \"undefined\"\n ? window.prompt(\"Enter URL\", prev)\n : null;\n if (url === null) return; // cancelled\n if (url === \"\") {\n e.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n return;\n }\n e.chain().focus().extendMarkRange(\"link\").setLink({ href: url }).run();\n },\n isActive: (e) => e.isActive(\"link\"),\n },\n undo: {\n icon: <UndoIcon />,\n title: \"Undo\",\n onClick: (e) => e.chain().focus().undo().run(),\n isDisabled: (e) => !e.can().undo(),\n },\n redo: {\n icon: <RedoIcon />,\n title: \"Redo\",\n onClick: (e) => e.chain().focus().redo().run(),\n isDisabled: (e) => !e.can().redo(),\n },\n};\n\nconst toolButtonClass = (active: boolean) =>\n cn(\n \"inline-flex h-8 w-8 items-center justify-center rounded-lg text-gray-600 transition\",\n \"hover:bg-gray-100 hover:text-gray-800 disabled:cursor-not-allowed disabled:opacity-40\",\n \"dark:text-gray-400 dark:hover:bg-white/[0.06] dark:hover:text-gray-200\",\n active &&\n \"bg-brand-50 text-brand-600 hover:bg-brand-50 hover:text-brand-600 dark:bg-brand-500/15 dark:text-brand-400 dark:hover:bg-brand-500/15 dark:hover:text-brand-400\"\n );\n\nconst Divider: React.FC = () => (\n <span\n aria-hidden\n className=\"mx-1 h-5 w-px self-center bg-gray-200 dark:bg-gray-700\"\n />\n);\n\n/**\n * Tiptap-powered WYSIWYG editor.\n *\n * Heavy, optional peer-dependency component (`@tiptap/*`). It is a client\n * component and touches the DOM at import time, so in SSR frameworks render it\n * client-only (e.g. next/dynamic with `ssr:false`), like the charts.\n */\nexport const Editor: React.FC<EditorProps> = ({\n content,\n onChange,\n placeholder = \"Start writing…\",\n editable = true,\n toolbar = DEFAULT_TOOLBAR,\n className,\n editorClassName,\n}) => {\n const editor = useEditor({\n extensions: [\n StarterKit,\n Link.configure({ openOnClick: false }),\n Placeholder.configure({ placeholder }),\n ],\n content,\n editable,\n immediatelyRender: false,\n editorProps: {\n attributes: {\n class: \"focus:outline-none\",\n },\n },\n onUpdate: ({ editor }) => onChange?.(editor.getHTML()),\n });\n\n // Keep editability in sync if the prop changes after mount.\n React.useEffect(() => {\n editor?.setEditable(editable);\n }, [editor, editable]);\n\n // Not yet mounted (SSR / first paint): render a skeleton placeholder.\n if (!editor) {\n return (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-xl border border-gray-200 dark:border-gray-800\",\n className\n )}\n >\n {editable && (\n <div className=\"h-12 border-b border-gray-200 bg-gray-50 dark:border-gray-800 dark:bg-white/[0.02]\" />\n )}\n <div className=\"min-h-[200px] animate-pulse bg-gray-50/50 dark:bg-white/[0.01]\" />\n </div>\n );\n }\n\n const renderToolbar = () => {\n let dividerKey = 0;\n return toolbar.map((item, index) => {\n // Custom button object.\n if (typeof item === \"object\") {\n const active = item.isActive?.(editor) ?? false;\n return (\n <button\n key={item.id || `custom-${index}`}\n type=\"button\"\n title={item.title}\n aria-label={item.title}\n aria-pressed={active}\n onClick={() => item.onClick(editor)}\n className={toolButtonClass(active)}\n >\n {item.icon}\n </button>\n );\n }\n\n if (item === \"divider\") {\n return <Divider key={`divider-${dividerKey++}`} />;\n }\n\n const def = BUILTINS[item];\n if (!def) return null;\n const active = def.isActive?.(editor) ?? false;\n const disabled = def.isDisabled?.(editor) ?? false;\n return (\n <button\n key={item}\n type=\"button\"\n title={def.title}\n aria-label={def.title}\n aria-pressed={active}\n disabled={disabled}\n onClick={() => def.onClick(editor)}\n className={toolButtonClass(active)}\n >\n {def.icon}\n </button>\n );\n });\n };\n\n return (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-xl border border-gray-200 bg-white shadow-theme-xs dark:border-gray-800 dark:bg-white/[0.02]\",\n className\n )}\n >\n {editable && (\n <div className=\"flex flex-wrap items-center gap-0.5 border-b border-gray-200 bg-gray-50 px-2 py-1.5 dark:border-gray-800 dark:bg-white/[0.02]\">\n {renderToolbar()}\n </div>\n )}\n <EditorContent\n editor={editor}\n className={cn(\n \"min-h-[200px] px-4 py-3 text-sm text-gray-700 dark:text-gray-300\",\n \"rounded-b-xl\",\n // Explicit element styling (no @tailwindcss/typography assumed).\n \"[&_.ProseMirror]:min-h-[180px] [&_.ProseMirror]:outline-none\",\n \"[&_h1]:mb-3 [&_h1]:mt-4 [&_h1]:text-2xl [&_h1]:font-semibold [&_h1]:text-gray-900 dark:[&_h1]:text-white/90\",\n \"[&_h2]:mb-2 [&_h2]:mt-4 [&_h2]:text-xl [&_h2]:font-semibold [&_h2]:text-gray-900 dark:[&_h2]:text-white/90\",\n \"[&_h3]:mb-2 [&_h3]:mt-3 [&_h3]:text-lg [&_h3]:font-semibold [&_h3]:text-gray-900 dark:[&_h3]:text-white/90\",\n \"[&_p]:my-2 [&_p]:leading-relaxed\",\n \"[&_ul]:my-2 [&_ul]:list-disc [&_ul]:pl-6\",\n \"[&_ol]:my-2 [&_ol]:list-decimal [&_ol]:pl-6\",\n \"[&_li]:my-1 [&_li>p]:my-0\",\n \"[&_a]:text-brand-500 [&_a]:underline hover:[&_a]:text-brand-600 dark:[&_a]:text-brand-400\",\n \"[&_blockquote]:my-3 [&_blockquote]:border-l-4 [&_blockquote]:border-gray-300 [&_blockquote]:pl-4 [&_blockquote]:italic [&_blockquote]:text-gray-600 dark:[&_blockquote]:border-gray-700 dark:[&_blockquote]:text-gray-400\",\n \"[&_code]:rounded [&_code]:bg-gray-100 [&_code]:px-1.5 [&_code]:py-0.5 [&_code]:font-mono [&_code]:text-[0.85em] [&_code]:text-brand-600 dark:[&_code]:bg-white/[0.06] dark:[&_code]:text-brand-400\",\n \"[&_pre]:my-3 [&_pre]:overflow-x-auto [&_pre]:rounded-lg [&_pre]:bg-gray-900 [&_pre]:p-4 [&_pre]:font-mono [&_pre]:text-sm [&_pre]:text-gray-100 dark:[&_pre]:bg-black/40\",\n \"[&_pre_code]:bg-transparent [&_pre_code]:p-0 [&_pre_code]:text-inherit\",\n \"[&_hr]:my-4 [&_hr]:border-gray-200 dark:[&_hr]:border-gray-800\",\n // Placeholder styling for the empty-document first node.\n \"[&_.is-editor-empty:first-child::before]:pointer-events-none [&_.is-editor-empty:first-child::before]:float-left [&_.is-editor-empty:first-child::before]:h-0 [&_.is-editor-empty:first-child::before]:text-gray-400 [&_.is-editor-empty:first-child::before]:content-[attr(data-placeholder)] dark:[&_.is-editor-empty:first-child::before]:text-gray-600\",\n editorClassName\n )}\n />\n </div>\n );\n};\n"]}
@@ -0,0 +1,13 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var clsx = require('clsx');
5
+ var tailwindMerge = require('tailwind-merge');
6
+
7
+ function cn(...inputs) {
8
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
9
+ }
10
+
11
+ exports.cn = cn;
12
+ //# sourceMappingURL=chunk-YERNSNT4.cjs.map
13
+ //# sourceMappingURL=chunk-YERNSNT4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/cn.ts"],"names":["twMerge","clsx"],"mappings":";;;;;AAGO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B","file":"chunk-YERNSNT4.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"]}
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import { clsx } from 'clsx';
3
+ import { twMerge } from 'tailwind-merge';
4
+
5
+ function cn(...inputs) {
6
+ return twMerge(clsx(inputs));
7
+ }
8
+
9
+ export { cn };
10
+ //# sourceMappingURL=chunk-ZLIYUUA4.js.map
11
+ //# sourceMappingURL=chunk-ZLIYUUA4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/cn.ts"],"names":[],"mappings":";;;AAGO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B","file":"chunk-ZLIYUUA4.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"]}
@@ -0,0 +1,14 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkMYOOZFHK_cjs = require('../../chunk-MYOOZFHK.cjs');
5
+ require('../../chunk-YERNSNT4.cjs');
6
+
7
+
8
+
9
+ Object.defineProperty(exports, "Calendar", {
10
+ enumerable: true,
11
+ get: function () { return chunkMYOOZFHK_cjs.Calendar; }
12
+ });
13
+ //# sourceMappingURL=Calendar.cjs.map
14
+ //# sourceMappingURL=Calendar.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"Calendar.cjs"}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { EventInput, EventClickArg, DateSelectArg } from '@fullcalendar/core';
3
+
4
+ interface CalendarProps {
5
+ events?: EventInput[];
6
+ initialView?: string;
7
+ onEventClick?: (arg: EventClickArg) => void;
8
+ onDateSelect?: (arg: DateSelectArg) => void;
9
+ }
10
+ declare const Calendar: React.FC<CalendarProps>;
11
+
12
+ export { Calendar, type CalendarProps };
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { EventInput, EventClickArg, DateSelectArg } from '@fullcalendar/core';
3
+
4
+ interface CalendarProps {
5
+ events?: EventInput[];
6
+ initialView?: string;
7
+ onEventClick?: (arg: EventClickArg) => void;
8
+ onDateSelect?: (arg: DateSelectArg) => void;
9
+ }
10
+ declare const Calendar: React.FC<CalendarProps>;
11
+
12
+ export { Calendar, type CalendarProps };
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ export { Calendar } from '../../chunk-7OWZKV75.js';
3
+ import '../../chunk-ZLIYUUA4.js';
4
+ //# sourceMappingURL=Calendar.js.map
5
+ //# sourceMappingURL=Calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"Calendar.js"}
@@ -0,0 +1,13 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkOSIOO5AE_cjs = require('../../chunk-OSIOO5AE.cjs');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "BarChart", {
9
+ enumerable: true,
10
+ get: function () { return chunkOSIOO5AE_cjs.BarChart; }
11
+ });
12
+ //# sourceMappingURL=BarChart.cjs.map
13
+ //# sourceMappingURL=BarChart.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"BarChart.cjs"}
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { ApexOptions } from 'apexcharts';
3
+
4
+ interface BarChartProps {
5
+ series?: ApexAxisChartSeries;
6
+ categories?: string[];
7
+ colors?: string[];
8
+ height?: number;
9
+ options?: ApexOptions;
10
+ }
11
+ declare const BarChart: React.FC<BarChartProps>;
12
+
13
+ export { BarChart, type BarChartProps };