exploreda 0.0.6 → 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 (208) hide show
  1. package/README.md +144 -0
  2. package/dist/ExplorEda.cjs +4608 -11288
  3. package/dist/ExplorEda.cjs.map +1 -1
  4. package/dist/ExplorEda.css +2282 -1689
  5. package/dist/ExplorEda.css.map +1 -1
  6. package/dist/ExplorEda.d.cts +124 -278
  7. package/dist/ExplorEda.d.ts +124 -278
  8. package/dist/ExplorEda.js +4479 -11166
  9. package/dist/ExplorEda.js.map +1 -1
  10. package/dist/calculations.cjs +18 -0
  11. package/dist/calculations.cjs.map +1 -0
  12. package/dist/calculations.d.cts +63 -0
  13. package/dist/calculations.d.ts +63 -0
  14. package/dist/calculations.js +3 -0
  15. package/dist/calculations.js.map +1 -0
  16. package/dist/charts/bar.cjs +27 -0
  17. package/dist/charts/bar.cjs.map +1 -0
  18. package/dist/charts/bar.d.cts +2 -0
  19. package/dist/charts/bar.d.ts +2 -0
  20. package/dist/charts/bar.js +18 -0
  21. package/dist/charts/bar.js.map +1 -0
  22. package/dist/charts/box-plot.cjs +26 -0
  23. package/dist/charts/box-plot.cjs.map +1 -0
  24. package/dist/charts/box-plot.d.cts +2 -0
  25. package/dist/charts/box-plot.d.ts +2 -0
  26. package/dist/charts/box-plot.js +17 -0
  27. package/dist/charts/box-plot.js.map +1 -0
  28. package/dist/charts/color-legend.cjs +22 -0
  29. package/dist/charts/color-legend.cjs.map +1 -0
  30. package/dist/charts/color-legend.d.cts +2 -0
  31. package/dist/charts/color-legend.d.ts +2 -0
  32. package/dist/charts/color-legend.js +13 -0
  33. package/dist/charts/color-legend.js.map +1 -0
  34. package/dist/charts/data-table.cjs +22 -0
  35. package/dist/charts/data-table.cjs.map +1 -0
  36. package/dist/charts/data-table.d.cts +2 -0
  37. package/dist/charts/data-table.d.ts +2 -0
  38. package/dist/charts/data-table.js +13 -0
  39. package/dist/charts/data-table.js.map +1 -0
  40. package/dist/charts/line.cjs +30 -0
  41. package/dist/charts/line.cjs.map +1 -0
  42. package/dist/charts/line.d.cts +2 -0
  43. package/dist/charts/line.d.ts +2 -0
  44. package/dist/charts/line.js +17 -0
  45. package/dist/charts/line.js.map +1 -0
  46. package/dist/charts/markdown.cjs +16 -0
  47. package/dist/charts/markdown.cjs.map +1 -0
  48. package/dist/charts/markdown.css +77 -0
  49. package/dist/charts/markdown.css.map +1 -0
  50. package/dist/charts/markdown.d.cts +2 -0
  51. package/dist/charts/markdown.d.ts +2 -0
  52. package/dist/charts/markdown.js +7 -0
  53. package/dist/charts/markdown.js.map +1 -0
  54. package/dist/charts/pivot-table.cjs +23 -0
  55. package/dist/charts/pivot-table.cjs.map +1 -0
  56. package/dist/charts/pivot-table.d.cts +2 -0
  57. package/dist/charts/pivot-table.d.ts +2 -0
  58. package/dist/charts/pivot-table.js +14 -0
  59. package/dist/charts/pivot-table.js.map +1 -0
  60. package/dist/charts/row.cjs +27 -0
  61. package/dist/charts/row.cjs.map +1 -0
  62. package/dist/charts/row.d.cts +6 -0
  63. package/dist/charts/row.d.ts +6 -0
  64. package/dist/charts/row.js +18 -0
  65. package/dist/charts/row.js.map +1 -0
  66. package/dist/charts/scatter.cjs +24 -0
  67. package/dist/charts/scatter.cjs.map +1 -0
  68. package/dist/charts/scatter.d.cts +2 -0
  69. package/dist/charts/scatter.d.ts +2 -0
  70. package/dist/charts/scatter.js +15 -0
  71. package/dist/charts/scatter.js.map +1 -0
  72. package/dist/charts/summary-table.cjs +19 -0
  73. package/dist/charts/summary-table.cjs.map +1 -0
  74. package/dist/charts/summary-table.d.cts +2 -0
  75. package/dist/charts/summary-table.d.ts +2 -0
  76. package/dist/charts/summary-table.js +10 -0
  77. package/dist/charts/summary-table.js.map +1 -0
  78. package/dist/charts/three-d-scatter.cjs +24 -0
  79. package/dist/charts/three-d-scatter.cjs.map +1 -0
  80. package/dist/charts/three-d-scatter.d.cts +6 -0
  81. package/dist/charts/three-d-scatter.d.ts +6 -0
  82. package/dist/charts/three-d-scatter.js +15 -0
  83. package/dist/charts/three-d-scatter.js.map +1 -0
  84. package/dist/chunk-3PGYFLE3.cjs +499 -0
  85. package/dist/chunk-3PGYFLE3.cjs.map +1 -0
  86. package/dist/chunk-4HNDKMWF.js +167 -0
  87. package/dist/chunk-4HNDKMWF.js.map +1 -0
  88. package/dist/chunk-4QNENKTV.cjs +1214 -0
  89. package/dist/chunk-4QNENKTV.cjs.map +1 -0
  90. package/dist/chunk-54M32JJB.js +132 -0
  91. package/dist/chunk-54M32JJB.js.map +1 -0
  92. package/dist/chunk-5B23JVH3.cjs +2238 -0
  93. package/dist/chunk-5B23JVH3.cjs.map +1 -0
  94. package/dist/chunk-5LH6NSNL.js +456 -0
  95. package/dist/chunk-5LH6NSNL.js.map +1 -0
  96. package/dist/chunk-6DOKKCJ5.cjs +313 -0
  97. package/dist/chunk-6DOKKCJ5.cjs.map +1 -0
  98. package/dist/chunk-6HZX5CBT.cjs +1074 -0
  99. package/dist/chunk-6HZX5CBT.cjs.map +1 -0
  100. package/dist/chunk-6U5DOIQM.js +1071 -0
  101. package/dist/chunk-6U5DOIQM.js.map +1 -0
  102. package/dist/chunk-7GBZIK2R.cjs +80 -0
  103. package/dist/chunk-7GBZIK2R.cjs.map +1 -0
  104. package/dist/chunk-7PTJNIOD.js +520 -0
  105. package/dist/chunk-7PTJNIOD.js.map +1 -0
  106. package/dist/chunk-AHZYQ7FN.js +319 -0
  107. package/dist/chunk-AHZYQ7FN.js.map +1 -0
  108. package/dist/chunk-AOODAOL4.cjs +55 -0
  109. package/dist/chunk-AOODAOL4.cjs.map +1 -0
  110. package/dist/chunk-ASKFIRMC.cjs +165 -0
  111. package/dist/chunk-ASKFIRMC.cjs.map +1 -0
  112. package/dist/chunk-B7OQUBH4.cjs +171 -0
  113. package/dist/chunk-B7OQUBH4.cjs.map +1 -0
  114. package/dist/chunk-BIMEHDLB.js +72 -0
  115. package/dist/chunk-BIMEHDLB.js.map +1 -0
  116. package/dist/chunk-C62KHV7S.js +1225 -0
  117. package/dist/chunk-C62KHV7S.js.map +1 -0
  118. package/dist/chunk-C7GQT65O.cjs +1119 -0
  119. package/dist/chunk-C7GQT65O.cjs.map +1 -0
  120. package/dist/chunk-CGDWDV4Z.js +1211 -0
  121. package/dist/chunk-CGDWDV4Z.js.map +1 -0
  122. package/dist/chunk-CJQQFNEY.js +69 -0
  123. package/dist/chunk-CJQQFNEY.js.map +1 -0
  124. package/dist/chunk-DHYLSXNR.js +964 -0
  125. package/dist/chunk-DHYLSXNR.js.map +1 -0
  126. package/dist/chunk-DKFA4KOJ.cjs +87 -0
  127. package/dist/chunk-DKFA4KOJ.cjs.map +1 -0
  128. package/dist/chunk-DS5BS7PP.cjs +357 -0
  129. package/dist/chunk-DS5BS7PP.cjs.map +1 -0
  130. package/dist/chunk-EGMFQSGK.js +909 -0
  131. package/dist/chunk-EGMFQSGK.js.map +1 -0
  132. package/dist/chunk-EU5EFHO5.cjs +53 -0
  133. package/dist/chunk-EU5EFHO5.cjs.map +1 -0
  134. package/dist/chunk-FM46QSDM.js +837 -0
  135. package/dist/chunk-FM46QSDM.js.map +1 -0
  136. package/dist/chunk-GV2LRR32.cjs +843 -0
  137. package/dist/chunk-GV2LRR32.cjs.map +1 -0
  138. package/dist/chunk-H3XKFSA5.cjs +322 -0
  139. package/dist/chunk-H3XKFSA5.cjs.map +1 -0
  140. package/dist/chunk-H5AVMMCE.js +347 -0
  141. package/dist/chunk-H5AVMMCE.js.map +1 -0
  142. package/dist/chunk-JDMUN4VK.cjs +986 -0
  143. package/dist/chunk-JDMUN4VK.cjs.map +1 -0
  144. package/dist/chunk-JNO7OXCC.js +2171 -0
  145. package/dist/chunk-JNO7OXCC.js.map +1 -0
  146. package/dist/chunk-JQMG4ZR7.js +111 -0
  147. package/dist/chunk-JQMG4ZR7.js.map +1 -0
  148. package/dist/chunk-L2Q2R43U.cjs +118 -0
  149. package/dist/chunk-L2Q2R43U.cjs.map +1 -0
  150. package/dist/chunk-LBTZVERO.js +466 -0
  151. package/dist/chunk-LBTZVERO.js.map +1 -0
  152. package/dist/chunk-LUUGGTTK.cjs +1227 -0
  153. package/dist/chunk-LUUGGTTK.cjs.map +1 -0
  154. package/dist/chunk-MEEPH7ZC.cjs +911 -0
  155. package/dist/chunk-MEEPH7ZC.cjs.map +1 -0
  156. package/dist/chunk-MJPDJ5AS.js +184 -0
  157. package/dist/chunk-MJPDJ5AS.js.map +1 -0
  158. package/dist/chunk-MJROUIDZ.cjs +219 -0
  159. package/dist/chunk-MJROUIDZ.cjs.map +1 -0
  160. package/dist/chunk-MUWSBYJS.js +528 -0
  161. package/dist/chunk-MUWSBYJS.js.map +1 -0
  162. package/dist/chunk-NDF5LCST.js +1088 -0
  163. package/dist/chunk-NDF5LCST.js.map +1 -0
  164. package/dist/chunk-NGWTPED4.js +311 -0
  165. package/dist/chunk-NGWTPED4.js.map +1 -0
  166. package/dist/chunk-PP4VCONW.js +739 -0
  167. package/dist/chunk-PP4VCONW.js.map +1 -0
  168. package/dist/chunk-PRMC2A6P.cjs +488 -0
  169. package/dist/chunk-PRMC2A6P.cjs.map +1 -0
  170. package/dist/chunk-PST6UU6S.cjs +742 -0
  171. package/dist/chunk-PST6UU6S.cjs.map +1 -0
  172. package/dist/chunk-Q7LK2UWH.js +33 -0
  173. package/dist/chunk-Q7LK2UWH.js.map +1 -0
  174. package/dist/chunk-SFV5LZPD.js +162 -0
  175. package/dist/chunk-SFV5LZPD.js.map +1 -0
  176. package/dist/chunk-SKXGYJJG.cjs +370 -0
  177. package/dist/chunk-SKXGYJJG.cjs.map +1 -0
  178. package/dist/chunk-SWLNKY6R.js +477 -0
  179. package/dist/chunk-SWLNKY6R.js.map +1 -0
  180. package/dist/chunk-TGVLNHUB.cjs +483 -0
  181. package/dist/chunk-TGVLNHUB.cjs.map +1 -0
  182. package/dist/chunk-TLLRW6S3.js +74 -0
  183. package/dist/chunk-TLLRW6S3.js.map +1 -0
  184. package/dist/chunk-TRAIXZ6M.cjs +140 -0
  185. package/dist/chunk-TRAIXZ6M.cjs.map +1 -0
  186. package/dist/chunk-U74A5VK5.cjs +74 -0
  187. package/dist/chunk-U74A5VK5.cjs.map +1 -0
  188. package/dist/chunk-UAVDLBTA.cjs +74 -0
  189. package/dist/chunk-UAVDLBTA.cjs.map +1 -0
  190. package/dist/chunk-UJWS6TRV.js +354 -0
  191. package/dist/chunk-UJWS6TRV.js.map +1 -0
  192. package/dist/chunk-UUJMUPB3.cjs +531 -0
  193. package/dist/chunk-UUJMUPB3.cjs.map +1 -0
  194. package/dist/chunk-VTKHZIJB.cjs +549 -0
  195. package/dist/chunk-VTKHZIJB.cjs.map +1 -0
  196. package/dist/chunk-YXPAWUXO.js +51 -0
  197. package/dist/chunk-YXPAWUXO.js.map +1 -0
  198. package/dist/chunk-ZD64SCZB.js +80 -0
  199. package/dist/chunk-ZD64SCZB.js.map +1 -0
  200. package/dist/core.cjs +28 -0
  201. package/dist/core.cjs.map +1 -0
  202. package/dist/core.d.cts +22 -0
  203. package/dist/core.d.ts +22 -0
  204. package/dist/core.js +3 -0
  205. package/dist/core.js.map +1 -0
  206. package/dist/dataLayerState-B4XmQjQN.d.cts +258 -0
  207. package/dist/dataLayerState-B4XmQjQN.d.ts +258 -0
  208. package/package.json +30 -52
@@ -0,0 +1,483 @@
1
+ 'use strict';
2
+
3
+ var chunkU74A5VK5_cjs = require('./chunk-U74A5VK5.cjs');
4
+ var chunk5B23JVH3_cjs = require('./chunk-5B23JVH3.cjs');
5
+ var lucideReact = require('lucide-react');
6
+ var extensionColor = require('@tiptap/extension-color');
7
+ var ListItem = require('@tiptap/extension-list-item');
8
+ var TextStyle = require('@tiptap/extension-text-style');
9
+ var react = require('@tiptap/react');
10
+ var StarterKit = require('@tiptap/starter-kit');
11
+ var React = require('react');
12
+ var ToggleGroupPrimitive = require('@radix-ui/react-toggle-group');
13
+ require('@radix-ui/react-toggle');
14
+ var classVarianceAuthority = require('class-variance-authority');
15
+ var jsxRuntime = require('react/jsx-runtime');
16
+
17
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
18
+
19
+ function _interopNamespace(e) {
20
+ if (e && e.__esModule) return e;
21
+ var n = Object.create(null);
22
+ if (e) {
23
+ Object.keys(e).forEach(function (k) {
24
+ if (k !== 'default') {
25
+ var d = Object.getOwnPropertyDescriptor(e, k);
26
+ Object.defineProperty(n, k, d.get ? d : {
27
+ enumerable: true,
28
+ get: function () { return e[k]; }
29
+ });
30
+ }
31
+ });
32
+ }
33
+ n.default = e;
34
+ return Object.freeze(n);
35
+ }
36
+
37
+ var ListItem__default = /*#__PURE__*/_interopDefault(ListItem);
38
+ var TextStyle__default = /*#__PURE__*/_interopDefault(TextStyle);
39
+ var StarterKit__default = /*#__PURE__*/_interopDefault(StarterKit);
40
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
41
+ var ToggleGroupPrimitive__namespace = /*#__PURE__*/_interopNamespace(ToggleGroupPrimitive);
42
+
43
+ var toggleVariants = classVarianceAuthority.cva(
44
+ "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 focus-visible:ring-4 focus-visible:outline-1 aria-invalid:focus-visible:ring-0 transition-[color,box-shadow]",
45
+ {
46
+ variants: {
47
+ variant: {
48
+ default: "bg-transparent",
49
+ outline: "border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground"
50
+ },
51
+ size: {
52
+ default: "h-9 px-2 min-w-9",
53
+ sm: "h-8 px-1.5 min-w-8",
54
+ lg: "h-10 px-2.5 min-w-10"
55
+ }
56
+ },
57
+ defaultVariants: {
58
+ variant: "default",
59
+ size: "default"
60
+ }
61
+ }
62
+ );
63
+ var ToggleGroupContext = React__namespace.createContext({
64
+ size: "default",
65
+ variant: "default"
66
+ });
67
+ function ToggleGroup({
68
+ className,
69
+ variant,
70
+ size,
71
+ children,
72
+ ...props
73
+ }) {
74
+ return /* @__PURE__ */ jsxRuntime.jsx(
75
+ ToggleGroupPrimitive__namespace.Root,
76
+ {
77
+ "data-slot": "toggle-group",
78
+ "data-variant": variant,
79
+ "data-size": size,
80
+ className: chunk5B23JVH3_cjs.cn(
81
+ "group/toggle-group flex items-center justify-center rounded-md data-[variant=outline]:shadow-xs",
82
+ className
83
+ ),
84
+ ...props,
85
+ children: /* @__PURE__ */ jsxRuntime.jsx(ToggleGroupContext.Provider, { value: { variant, size }, children })
86
+ }
87
+ );
88
+ }
89
+ function ToggleGroupItem({
90
+ className,
91
+ children,
92
+ variant,
93
+ size,
94
+ ...props
95
+ }) {
96
+ const context = React__namespace.useContext(ToggleGroupContext);
97
+ return /* @__PURE__ */ jsxRuntime.jsx(
98
+ ToggleGroupPrimitive__namespace.Item,
99
+ {
100
+ "data-slot": "toggle-group-item",
101
+ "data-variant": context.variant || variant,
102
+ "data-size": context.size || size,
103
+ className: chunk5B23JVH3_cjs.cn(
104
+ toggleVariants({
105
+ variant: context.variant || variant,
106
+ size: context.size || size
107
+ }),
108
+ "min-w-0 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l",
109
+ className
110
+ ),
111
+ ...props,
112
+ children
113
+ }
114
+ );
115
+ }
116
+ function MenuBar() {
117
+ const { editor } = react.useCurrentEditor();
118
+ const [showControls, setShowControls] = React.useState(false);
119
+ const [displayMode, setDisplayMode] = React.useState("icon");
120
+ if (!editor) {
121
+ return null;
122
+ }
123
+ const renderContent = (icon, text) => {
124
+ if (displayMode === "icon") {
125
+ return icon;
126
+ }
127
+ if (displayMode === "text") {
128
+ return text;
129
+ }
130
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
131
+ icon,
132
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2", children: text })
133
+ ] });
134
+ };
135
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "control-group", children: [
136
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2 mb-2", children: [
137
+ /* @__PURE__ */ jsxRuntime.jsx(
138
+ chunk5B23JVH3_cjs.Button,
139
+ {
140
+ variant: "outline",
141
+ size: "sm",
142
+ onClick: () => setShowControls(!showControls),
143
+ tooltip: showControls ? "Hide toolbar controls" : "Show toolbar controls",
144
+ "aria-label": showControls ? "Hide toolbar controls" : "Show toolbar controls",
145
+ children: showControls ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
146
+ "Hide Controls ",
147
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { className: "ml-2 h-4 w-4" })
148
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
149
+ "Show Controls ",
150
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "ml-2 h-4 w-4" })
151
+ ] })
152
+ }
153
+ ),
154
+ showControls && /* @__PURE__ */ jsxRuntime.jsxs(
155
+ ToggleGroup,
156
+ {
157
+ type: "single",
158
+ value: displayMode,
159
+ onValueChange: (value) => value && setDisplayMode(value),
160
+ children: [
161
+ /* @__PURE__ */ jsxRuntime.jsxs(ToggleGroupItem, { value: "icon", "aria-label": "Show icons only", children: [
162
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "h-4 w-4" }),
163
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2", children: "Icons Only" })
164
+ ] }),
165
+ /* @__PURE__ */ jsxRuntime.jsxs(ToggleGroupItem, { value: "text", "aria-label": "Show text only", children: [
166
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Type, { className: "h-4 w-4" }),
167
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2", children: "Text Only" })
168
+ ] }),
169
+ /* @__PURE__ */ jsxRuntime.jsxs(ToggleGroupItem, { value: "both", "aria-label": "Show both icons and text", children: [
170
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Monitor, { className: "h-4 w-4" }),
171
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2", children: "Icons & Text" })
172
+ ] })
173
+ ]
174
+ }
175
+ )
176
+ ] }),
177
+ showControls && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "button-group flex flex-wrap gap-2", children: [
178
+ /* @__PURE__ */ jsxRuntime.jsx(
179
+ chunk5B23JVH3_cjs.Button,
180
+ {
181
+ size: "sm",
182
+ onClick: () => editor.chain().focus().toggleBold().run(),
183
+ disabled: !editor.can().chain().focus().toggleBold().run(),
184
+ className: editor.isActive("bold") ? "is-active" : "",
185
+ tooltip: "Toggle bold text",
186
+ "aria-label": "Toggle bold text",
187
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bold, { className: "h-4 w-4" }), "Bold")
188
+ }
189
+ ),
190
+ /* @__PURE__ */ jsxRuntime.jsx(
191
+ chunk5B23JVH3_cjs.Button,
192
+ {
193
+ size: "sm",
194
+ onClick: () => editor.chain().focus().toggleItalic().run(),
195
+ disabled: !editor.can().chain().focus().toggleItalic().run(),
196
+ className: editor.isActive("italic") ? "is-active" : "",
197
+ tooltip: "Toggle italic text",
198
+ "aria-label": "Toggle italic text",
199
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Italic, { className: "h-4 w-4" }), "Italic")
200
+ }
201
+ ),
202
+ /* @__PURE__ */ jsxRuntime.jsx(
203
+ chunk5B23JVH3_cjs.Button,
204
+ {
205
+ size: "sm",
206
+ onClick: () => editor.chain().focus().toggleStrike().run(),
207
+ disabled: !editor.can().chain().focus().toggleStrike().run(),
208
+ className: editor.isActive("strike") ? "is-active" : "",
209
+ tooltip: "Toggle strikethrough text",
210
+ "aria-label": "Toggle strikethrough text",
211
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Strikethrough, { className: "h-4 w-4" }), "Strike")
212
+ }
213
+ ),
214
+ /* @__PURE__ */ jsxRuntime.jsx(
215
+ chunk5B23JVH3_cjs.Button,
216
+ {
217
+ size: "sm",
218
+ onClick: () => editor.chain().focus().toggleCode().run(),
219
+ disabled: !editor.can().chain().focus().toggleCode().run(),
220
+ className: editor.isActive("code") ? "is-active" : "",
221
+ tooltip: "Toggle inline code",
222
+ "aria-label": "Toggle inline code",
223
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Code, { className: "h-4 w-4" }), "Code")
224
+ }
225
+ ),
226
+ /* @__PURE__ */ jsxRuntime.jsx(
227
+ chunk5B23JVH3_cjs.Button,
228
+ {
229
+ size: "sm",
230
+ onClick: () => editor.chain().focus().unsetAllMarks().run(),
231
+ tooltip: "Clear all text formatting",
232
+ "aria-label": "Clear all text formatting",
233
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4" }), "Clear marks")
234
+ }
235
+ ),
236
+ /* @__PURE__ */ jsxRuntime.jsx(
237
+ chunk5B23JVH3_cjs.Button,
238
+ {
239
+ size: "sm",
240
+ onClick: () => editor.chain().focus().clearNodes().run(),
241
+ tooltip: "Clear all block formatting",
242
+ "aria-label": "Clear all block formatting",
243
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "h-4 w-4" }), "Clear nodes")
244
+ }
245
+ ),
246
+ /* @__PURE__ */ jsxRuntime.jsx(
247
+ chunk5B23JVH3_cjs.Button,
248
+ {
249
+ size: "sm",
250
+ onClick: () => editor.chain().focus().setParagraph().run(),
251
+ className: editor.isActive("paragraph") ? "is-active" : "",
252
+ tooltip: "Convert to paragraph",
253
+ "aria-label": "Convert to paragraph",
254
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.PilcrowSquare, { className: "h-4 w-4" }), "Paragraph")
255
+ }
256
+ ),
257
+ /* @__PURE__ */ jsxRuntime.jsx(
258
+ chunk5B23JVH3_cjs.Button,
259
+ {
260
+ size: "sm",
261
+ onClick: () => editor.chain().focus().toggleHeading({ level: 1 }).run(),
262
+ className: editor.isActive("heading", { level: 1 }) ? "is-active" : "",
263
+ tooltip: "Toggle heading 1",
264
+ "aria-label": "Toggle heading 1",
265
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading1, { className: "h-4 w-4" }), "H1")
266
+ }
267
+ ),
268
+ /* @__PURE__ */ jsxRuntime.jsx(
269
+ chunk5B23JVH3_cjs.Button,
270
+ {
271
+ size: "sm",
272
+ onClick: () => editor.chain().focus().toggleHeading({ level: 2 }).run(),
273
+ className: editor.isActive("heading", { level: 2 }) ? "is-active" : "",
274
+ tooltip: "Toggle heading 2",
275
+ "aria-label": "Toggle heading 2",
276
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading2, { className: "h-4 w-4" }), "H2")
277
+ }
278
+ ),
279
+ /* @__PURE__ */ jsxRuntime.jsx(
280
+ chunk5B23JVH3_cjs.Button,
281
+ {
282
+ size: "sm",
283
+ onClick: () => editor.chain().focus().toggleHeading({ level: 3 }).run(),
284
+ className: editor.isActive("heading", { level: 3 }) ? "is-active" : "",
285
+ tooltip: "Toggle heading 3",
286
+ "aria-label": "Toggle heading 3",
287
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading3, { className: "h-4 w-4" }), "H3")
288
+ }
289
+ ),
290
+ /* @__PURE__ */ jsxRuntime.jsx(
291
+ chunk5B23JVH3_cjs.Button,
292
+ {
293
+ size: "sm",
294
+ onClick: () => editor.chain().focus().toggleHeading({ level: 4 }).run(),
295
+ className: editor.isActive("heading", { level: 4 }) ? "is-active" : "",
296
+ tooltip: "Toggle heading 4",
297
+ "aria-label": "Toggle heading 4",
298
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading4, { className: "h-4 w-4" }), "H4")
299
+ }
300
+ ),
301
+ /* @__PURE__ */ jsxRuntime.jsx(
302
+ chunk5B23JVH3_cjs.Button,
303
+ {
304
+ size: "sm",
305
+ onClick: () => editor.chain().focus().toggleHeading({ level: 5 }).run(),
306
+ className: editor.isActive("heading", { level: 5 }) ? "is-active" : "",
307
+ tooltip: "Toggle heading 5",
308
+ "aria-label": "Toggle heading 5",
309
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading5, { className: "h-4 w-4" }), "H5")
310
+ }
311
+ ),
312
+ /* @__PURE__ */ jsxRuntime.jsx(
313
+ chunk5B23JVH3_cjs.Button,
314
+ {
315
+ size: "sm",
316
+ onClick: () => editor.chain().focus().toggleHeading({ level: 6 }).run(),
317
+ className: editor.isActive("heading", { level: 6 }) ? "is-active" : "",
318
+ tooltip: "Toggle heading 6",
319
+ "aria-label": "Toggle heading 6",
320
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Heading6, { className: "h-4 w-4" }), "H6")
321
+ }
322
+ ),
323
+ /* @__PURE__ */ jsxRuntime.jsx(
324
+ chunk5B23JVH3_cjs.Button,
325
+ {
326
+ size: "sm",
327
+ onClick: () => editor.chain().focus().toggleBulletList().run(),
328
+ className: editor.isActive("bulletList") ? "is-active" : "",
329
+ tooltip: "Toggle bullet list",
330
+ "aria-label": "Toggle bullet list",
331
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.List, { className: "h-4 w-4" }), "Bullet list")
332
+ }
333
+ ),
334
+ /* @__PURE__ */ jsxRuntime.jsx(
335
+ chunk5B23JVH3_cjs.Button,
336
+ {
337
+ size: "sm",
338
+ onClick: () => editor.chain().focus().toggleOrderedList().run(),
339
+ className: editor.isActive("orderedList") ? "is-active" : "",
340
+ tooltip: "Toggle ordered list",
341
+ "aria-label": "Toggle ordered list",
342
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ListOrdered, { className: "h-4 w-4" }), "Ordered list")
343
+ }
344
+ ),
345
+ /* @__PURE__ */ jsxRuntime.jsx(
346
+ chunk5B23JVH3_cjs.Button,
347
+ {
348
+ size: "sm",
349
+ onClick: () => editor.chain().focus().toggleCodeBlock().run(),
350
+ className: editor.isActive("codeBlock") ? "is-active" : "",
351
+ tooltip: "Toggle code block",
352
+ "aria-label": "Toggle code block",
353
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Code, { className: "h-4 w-4" }), "Code block")
354
+ }
355
+ ),
356
+ /* @__PURE__ */ jsxRuntime.jsx(
357
+ chunk5B23JVH3_cjs.Button,
358
+ {
359
+ size: "sm",
360
+ onClick: () => editor.chain().focus().toggleBlockquote().run(),
361
+ className: editor.isActive("blockquote") ? "is-active" : "",
362
+ tooltip: "Toggle blockquote",
363
+ "aria-label": "Toggle blockquote",
364
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Quote, { className: "h-4 w-4" }), "Blockquote")
365
+ }
366
+ ),
367
+ /* @__PURE__ */ jsxRuntime.jsx(
368
+ chunk5B23JVH3_cjs.Button,
369
+ {
370
+ size: "sm",
371
+ onClick: () => editor.chain().focus().setHorizontalRule().run(),
372
+ tooltip: "Insert horizontal rule",
373
+ "aria-label": "Insert horizontal rule",
374
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minus, { className: "h-4 w-4" }), "Horizontal rule")
375
+ }
376
+ ),
377
+ /* @__PURE__ */ jsxRuntime.jsx(
378
+ chunk5B23JVH3_cjs.Button,
379
+ {
380
+ size: "sm",
381
+ onClick: () => editor.chain().focus().setHardBreak().run(),
382
+ tooltip: "Insert hard break",
383
+ "aria-label": "Insert hard break",
384
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.WrapText, { className: "h-4 w-4" }), "Hard break")
385
+ }
386
+ ),
387
+ /* @__PURE__ */ jsxRuntime.jsx(
388
+ chunk5B23JVH3_cjs.Button,
389
+ {
390
+ size: "sm",
391
+ onClick: () => editor.chain().focus().undo().run(),
392
+ disabled: !editor.can().chain().focus().undo().run(),
393
+ tooltip: "Undo last change",
394
+ "aria-label": "Undo last change",
395
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Undo2, { className: "h-4 w-4" }), "Undo")
396
+ }
397
+ ),
398
+ /* @__PURE__ */ jsxRuntime.jsx(
399
+ chunk5B23JVH3_cjs.Button,
400
+ {
401
+ size: "sm",
402
+ onClick: () => editor.chain().focus().redo().run(),
403
+ disabled: !editor.can().chain().focus().redo().run(),
404
+ tooltip: "Redo last change",
405
+ "aria-label": "Redo last change",
406
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Redo2, { className: "h-4 w-4" }), "Redo")
407
+ }
408
+ ),
409
+ /* @__PURE__ */ jsxRuntime.jsx(
410
+ chunk5B23JVH3_cjs.Button,
411
+ {
412
+ size: "sm",
413
+ onClick: () => editor.chain().focus().setColor("#958DF1").run(),
414
+ className: editor.isActive("textStyle", { color: "#958DF1" }) ? "is-active" : "",
415
+ tooltip: "Set text color to purple",
416
+ "aria-label": "Set text color to purple",
417
+ children: renderContent(/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Palette, { className: "h-4 w-4" }), "Purple")
418
+ }
419
+ )
420
+ ] })
421
+ ] });
422
+ }
423
+ function Markdown({
424
+ settings,
425
+ width,
426
+ height
427
+ }) {
428
+ const updateChart = chunk5B23JVH3_cjs.useDataLayer((s) => s.updateChart);
429
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { width, height }, className: "flex flex-col overflow-auto p-1", children: /* @__PURE__ */ jsxRuntime.jsx(
430
+ react.EditorProvider,
431
+ {
432
+ slotBefore: /* @__PURE__ */ jsxRuntime.jsx(MenuBar, {}),
433
+ extensions,
434
+ content: settings.content,
435
+ onUpdate: (value) => {
436
+ updateChart(settings.id, {
437
+ ...settings,
438
+ content: value.editor.getHTML()
439
+ });
440
+ }
441
+ }
442
+ ) });
443
+ }
444
+ var extensions = [
445
+ extensionColor.Color.configure({ types: [TextStyle__default.default.name, ListItem__default.default.name] }),
446
+ TextStyle__default.default,
447
+ StarterKit__default.default.configure({
448
+ bulletList: {
449
+ keepMarks: true,
450
+ keepAttributes: false
451
+ },
452
+ orderedList: {
453
+ keepMarks: true,
454
+ keepAttributes: false
455
+ }
456
+ })
457
+ ];
458
+
459
+ // src/components/charts/Markdown/definition.ts
460
+ var markdownDefinition = {
461
+ type: "markdown",
462
+ name: "Markdown",
463
+ description: "A markdown editor for rich text content",
464
+ icon: lucideReact.FileText,
465
+ component: Markdown,
466
+ settingsPanel: () => null,
467
+ createDefaultSettings: (layout) => ({
468
+ ...chunkU74A5VK5_cjs.DEFAULT_CHART_SETTINGS,
469
+ id: crypto.randomUUID(),
470
+ type: "markdown",
471
+ content: "",
472
+ layout
473
+ }),
474
+ validateSettings: (settings) => {
475
+ return settings.type === "markdown";
476
+ },
477
+ getFilterFunction: () => () => true
478
+ // No filtering for markdown
479
+ };
480
+
481
+ exports.markdownDefinition = markdownDefinition;
482
+ //# sourceMappingURL=chunk-TGVLNHUB.cjs.map
483
+ //# sourceMappingURL=chunk-TGVLNHUB.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/toggle.tsx","../src/components/ui/toggle-group.tsx","../src/components/charts/Markdown/MenuBar.tsx","../src/components/charts/Markdown/Markdown.tsx","../src/components/charts/Markdown/definition.ts"],"names":["cva","React","jsx","ToggleGroupPrimitive","cn","useCurrentEditor","useState","jsxs","Fragment","Button","ChevronUp","ChevronDown","Eye","Type","Monitor","Bold","Italic","Strikethrough","Code","X","Trash2","PilcrowSquare","Heading1","Heading2","Heading3","Heading4","Heading5","Heading6","List","ListOrdered","Quote","Minus","WrapText","Undo2","Redo2","Palette","useDataLayer","EditorProvider","Color","TextStyle","ListItem","StarterKit","FileText","DEFAULT_CHART_SETTINGS"],"mappings":"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","file":"chunk-TGVLNHUB.cjs","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 focus-visible:ring-4 focus-visible:outline-1 aria-invalid:focus-visible:ring-0 transition-[color,box-shadow]\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline:\n \"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n lg: \"h-10 px-2.5 min-w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Toggle, toggleVariants };\n","import * as React from \"react\";\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport { type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\nimport { toggleVariants } from \"@/components/ui/toggle\";\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants>\n>({\n size: \"default\",\n variant: \"default\",\n});\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n className={cn(\n \"group/toggle-group flex items-center justify-center rounded-md data-[variant=outline]:shadow-xs\",\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n );\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext);\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n data-variant={context.variant || variant}\n data-size={context.size || size}\n className={cn(\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n \"min-w-0 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l\",\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n );\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n","import { useCurrentEditor } from \"@tiptap/react\";\nimport { useState } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { ToggleGroup, ToggleGroupItem } from \"@/components/ui/toggle-group\";\nimport {\n ChevronDown,\n ChevronUp,\n Bold,\n Italic,\n Strikethrough,\n Code,\n X,\n Trash2,\n PilcrowSquare,\n Heading1,\n Heading2,\n Heading3,\n Heading4,\n Heading5,\n Heading6,\n List,\n ListOrdered,\n Quote,\n Minus,\n WrapText,\n Undo2,\n Redo2,\n Palette,\n Eye,\n Type,\n Monitor,\n} from \"lucide-react\";\n\ntype DisplayMode = \"icon\" | \"text\" | \"both\";\n\nexport function MenuBar() {\n const { editor } = useCurrentEditor();\n const [showControls, setShowControls] = useState(false);\n const [displayMode, setDisplayMode] = useState<DisplayMode>(\"icon\");\n\n if (!editor) {\n return null;\n }\n\n const renderContent = (icon: React.ReactNode, text: string) => {\n if (displayMode === \"icon\") {\n return icon;\n }\n if (displayMode === \"text\") {\n return text;\n }\n return (\n <>\n {icon}\n <span className=\"ml-2\">{text}</span>\n </>\n );\n };\n\n return (\n <div className=\"control-group\">\n <div className=\"flex gap-2 mb-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setShowControls(!showControls)}\n tooltip={\n showControls ? \"Hide toolbar controls\" : \"Show toolbar controls\"\n }\n aria-label={\n showControls ? \"Hide toolbar controls\" : \"Show toolbar controls\"\n }\n >\n {showControls ? (\n <>\n Hide Controls <ChevronUp className=\"ml-2 h-4 w-4\" />\n </>\n ) : (\n <>\n Show Controls <ChevronDown className=\"ml-2 h-4 w-4\" />\n </>\n )}\n </Button>\n {showControls && (\n <ToggleGroup\n type=\"single\"\n value={displayMode}\n onValueChange={(value) =>\n value && setDisplayMode(value as DisplayMode)\n }\n >\n <ToggleGroupItem value=\"icon\" aria-label=\"Show icons only\">\n <Eye className=\"h-4 w-4\" />\n <span className=\"ml-2\">Icons Only</span>\n </ToggleGroupItem>\n <ToggleGroupItem value=\"text\" aria-label=\"Show text only\">\n <Type className=\"h-4 w-4\" />\n <span className=\"ml-2\">Text Only</span>\n </ToggleGroupItem>\n <ToggleGroupItem value=\"both\" aria-label=\"Show both icons and text\">\n <Monitor className=\"h-4 w-4\" />\n <span className=\"ml-2\">Icons & Text</span>\n </ToggleGroupItem>\n </ToggleGroup>\n )}\n </div>\n {showControls && (\n <div className=\"button-group flex flex-wrap gap-2\">\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().toggleBold().run()}\n disabled={!editor.can().chain().focus().toggleBold().run()}\n className={editor.isActive(\"bold\") ? \"is-active\" : \"\"}\n tooltip=\"Toggle bold text\"\n aria-label=\"Toggle bold text\"\n >\n {renderContent(<Bold className=\"h-4 w-4\" />, \"Bold\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().toggleItalic().run()}\n disabled={!editor.can().chain().focus().toggleItalic().run()}\n className={editor.isActive(\"italic\") ? \"is-active\" : \"\"}\n tooltip=\"Toggle italic text\"\n aria-label=\"Toggle italic text\"\n >\n {renderContent(<Italic className=\"h-4 w-4\" />, \"Italic\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().toggleStrike().run()}\n disabled={!editor.can().chain().focus().toggleStrike().run()}\n className={editor.isActive(\"strike\") ? \"is-active\" : \"\"}\n tooltip=\"Toggle strikethrough text\"\n aria-label=\"Toggle strikethrough text\"\n >\n {renderContent(<Strikethrough className=\"h-4 w-4\" />, \"Strike\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().toggleCode().run()}\n disabled={!editor.can().chain().focus().toggleCode().run()}\n className={editor.isActive(\"code\") ? \"is-active\" : \"\"}\n tooltip=\"Toggle inline code\"\n aria-label=\"Toggle inline code\"\n >\n {renderContent(<Code className=\"h-4 w-4\" />, \"Code\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().unsetAllMarks().run()}\n tooltip=\"Clear all text formatting\"\n aria-label=\"Clear all text formatting\"\n >\n {renderContent(<X className=\"h-4 w-4\" />, \"Clear marks\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().clearNodes().run()}\n tooltip=\"Clear all block formatting\"\n aria-label=\"Clear all block formatting\"\n >\n {renderContent(<Trash2 className=\"h-4 w-4\" />, \"Clear nodes\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().setParagraph().run()}\n className={editor.isActive(\"paragraph\") ? \"is-active\" : \"\"}\n tooltip=\"Convert to paragraph\"\n aria-label=\"Convert to paragraph\"\n >\n {renderContent(<PilcrowSquare className=\"h-4 w-4\" />, \"Paragraph\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() =>\n editor.chain().focus().toggleHeading({ level: 1 }).run()\n }\n className={\n editor.isActive(\"heading\", { level: 1 }) ? \"is-active\" : \"\"\n }\n tooltip=\"Toggle heading 1\"\n aria-label=\"Toggle heading 1\"\n >\n {renderContent(<Heading1 className=\"h-4 w-4\" />, \"H1\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() =>\n editor.chain().focus().toggleHeading({ level: 2 }).run()\n }\n className={\n editor.isActive(\"heading\", { level: 2 }) ? \"is-active\" : \"\"\n }\n tooltip=\"Toggle heading 2\"\n aria-label=\"Toggle heading 2\"\n >\n {renderContent(<Heading2 className=\"h-4 w-4\" />, \"H2\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() =>\n editor.chain().focus().toggleHeading({ level: 3 }).run()\n }\n className={\n editor.isActive(\"heading\", { level: 3 }) ? \"is-active\" : \"\"\n }\n tooltip=\"Toggle heading 3\"\n aria-label=\"Toggle heading 3\"\n >\n {renderContent(<Heading3 className=\"h-4 w-4\" />, \"H3\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() =>\n editor.chain().focus().toggleHeading({ level: 4 }).run()\n }\n className={\n editor.isActive(\"heading\", { level: 4 }) ? \"is-active\" : \"\"\n }\n tooltip=\"Toggle heading 4\"\n aria-label=\"Toggle heading 4\"\n >\n {renderContent(<Heading4 className=\"h-4 w-4\" />, \"H4\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() =>\n editor.chain().focus().toggleHeading({ level: 5 }).run()\n }\n className={\n editor.isActive(\"heading\", { level: 5 }) ? \"is-active\" : \"\"\n }\n tooltip=\"Toggle heading 5\"\n aria-label=\"Toggle heading 5\"\n >\n {renderContent(<Heading5 className=\"h-4 w-4\" />, \"H5\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() =>\n editor.chain().focus().toggleHeading({ level: 6 }).run()\n }\n className={\n editor.isActive(\"heading\", { level: 6 }) ? \"is-active\" : \"\"\n }\n tooltip=\"Toggle heading 6\"\n aria-label=\"Toggle heading 6\"\n >\n {renderContent(<Heading6 className=\"h-4 w-4\" />, \"H6\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n className={editor.isActive(\"bulletList\") ? \"is-active\" : \"\"}\n tooltip=\"Toggle bullet list\"\n aria-label=\"Toggle bullet list\"\n >\n {renderContent(<List className=\"h-4 w-4\" />, \"Bullet list\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n className={editor.isActive(\"orderedList\") ? \"is-active\" : \"\"}\n tooltip=\"Toggle ordered list\"\n aria-label=\"Toggle ordered list\"\n >\n {renderContent(<ListOrdered className=\"h-4 w-4\" />, \"Ordered list\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().toggleCodeBlock().run()}\n className={editor.isActive(\"codeBlock\") ? \"is-active\" : \"\"}\n tooltip=\"Toggle code block\"\n aria-label=\"Toggle code block\"\n >\n {renderContent(<Code className=\"h-4 w-4\" />, \"Code block\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n className={editor.isActive(\"blockquote\") ? \"is-active\" : \"\"}\n tooltip=\"Toggle blockquote\"\n aria-label=\"Toggle blockquote\"\n >\n {renderContent(<Quote className=\"h-4 w-4\" />, \"Blockquote\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().setHorizontalRule().run()}\n tooltip=\"Insert horizontal rule\"\n aria-label=\"Insert horizontal rule\"\n >\n {renderContent(<Minus className=\"h-4 w-4\" />, \"Horizontal rule\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().setHardBreak().run()}\n tooltip=\"Insert hard break\"\n aria-label=\"Insert hard break\"\n >\n {renderContent(<WrapText className=\"h-4 w-4\" />, \"Hard break\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().chain().focus().undo().run()}\n tooltip=\"Undo last change\"\n aria-label=\"Undo last change\"\n >\n {renderContent(<Undo2 className=\"h-4 w-4\" />, \"Undo\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().chain().focus().redo().run()}\n tooltip=\"Redo last change\"\n aria-label=\"Redo last change\"\n >\n {renderContent(<Redo2 className=\"h-4 w-4\" />, \"Redo\")}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => editor.chain().focus().setColor(\"#958DF1\").run()}\n className={\n editor.isActive(\"textStyle\", { color: \"#958DF1\" })\n ? \"is-active\"\n : \"\"\n }\n tooltip=\"Set text color to purple\"\n aria-label=\"Set text color to purple\"\n >\n {renderContent(<Palette className=\"h-4 w-4\" />, \"Purple\")}\n </Button>\n </div>\n )}\n </div>\n );\n}\n","import \"./styles.css\";\n\nimport { Color } from \"@tiptap/extension-color\";\nimport ListItem from \"@tiptap/extension-list-item\";\nimport TextStyle from \"@tiptap/extension-text-style\";\nimport { EditorProvider } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\n\nimport { BaseChartProps } from \"@/types/ChartTypes\";\nimport { MarkdownSettings } from \"./definition\";\n\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport { MenuBar } from \"./MenuBar\";\n\nexport function Markdown({\n settings,\n width,\n height,\n}: BaseChartProps<MarkdownSettings>) {\n const updateChart = useDataLayer((s) => s.updateChart);\n\n return (\n <div style={{ width, height }} className=\"flex flex-col overflow-auto p-1\">\n <EditorProvider\n slotBefore={<MenuBar />}\n extensions={extensions}\n content={settings.content}\n onUpdate={(value) => {\n updateChart(settings.id, {\n ...settings,\n content: value.editor.getHTML(),\n });\n }}\n />\n </div>\n );\n}\n\nconst extensions = [\n Color.configure({ types: [TextStyle.name, ListItem.name] }),\n TextStyle,\n StarterKit.configure({\n bulletList: {\n keepMarks: true,\n keepAttributes: false,\n },\n orderedList: {\n keepMarks: true,\n keepAttributes: false,\n },\n }),\n];\n","import { BaseChartSettings, ChartDefinition } from \"@/types/ChartTypes\";\nimport { DEFAULT_CHART_SETTINGS } from \"@/utils/defaultSettings\";\nimport { FileText } from \"lucide-react\";\nimport { Markdown } from \"./Markdown\";\n\nexport interface MarkdownSettings extends BaseChartSettings {\n type: \"markdown\";\n content: string;\n}\n\nexport const markdownDefinition: ChartDefinition<MarkdownSettings> = {\n type: \"markdown\",\n name: \"Markdown\",\n description: \"A markdown editor for rich text content\",\n icon: FileText,\n\n component: Markdown,\n settingsPanel: () => null,\n\n createDefaultSettings: (layout) => ({\n ...DEFAULT_CHART_SETTINGS,\n id: crypto.randomUUID(),\n type: \"markdown\",\n content: \"\",\n layout,\n }),\n\n validateSettings: (settings) => {\n return settings.type === \"markdown\";\n },\n\n getFilterFunction: () => () => true, // No filtering for markdown\n};\n"]}
@@ -0,0 +1,74 @@
1
+ import { createElement } from 'react';
2
+
3
+ // src/charts/registry.ts
4
+ function isSettingsForType(settings, type) {
5
+ return settings.type === type;
6
+ }
7
+ function registerable(definition) {
8
+ const component = (props) => {
9
+ if (!isSettingsForType(props.settings, definition.type)) {
10
+ return null;
11
+ }
12
+ return createElement(definition.component, {
13
+ ...props,
14
+ settings: props.settings
15
+ });
16
+ };
17
+ const settingsPanel = (props) => {
18
+ if (!isSettingsForType(props.settings, definition.type)) {
19
+ return null;
20
+ }
21
+ return createElement(definition.settingsPanel, {
22
+ ...props,
23
+ settings: props.settings
24
+ });
25
+ };
26
+ return {
27
+ ...definition,
28
+ component,
29
+ settingsPanel,
30
+ createDefaultSettings: definition.createDefaultSettings,
31
+ validateSettings: (settings) => isSettingsForType(settings, definition.type) && definition.validateSettings(settings),
32
+ getFilterFunction: (settings, fieldGetter) => isSettingsForType(settings, definition.type) ? definition.getFilterFunction(settings, fieldGetter) : () => false
33
+ };
34
+ }
35
+ var ChartRegistryImpl = class {
36
+ definitions = /* @__PURE__ */ new Map();
37
+ register(definition) {
38
+ if (this.definitions.has(definition.type)) {
39
+ return;
40
+ }
41
+ this.definitions.set(definition.type, registerable(definition));
42
+ }
43
+ get(type) {
44
+ return this.definitions.get(type);
45
+ }
46
+ getAll() {
47
+ return Array.from(this.definitions.values());
48
+ }
49
+ has(type) {
50
+ return this.definitions.has(type);
51
+ }
52
+ };
53
+ var chartRegistry = new ChartRegistryImpl();
54
+ function registerChart(definition) {
55
+ chartRegistry.register(definition);
56
+ }
57
+ function getChartDefinition(type) {
58
+ const def = chartRegistry.get(type);
59
+ if (!def) {
60
+ throw new Error(`Chart type ${type} not registered`);
61
+ }
62
+ return def;
63
+ }
64
+ function useChartDefinition(type) {
65
+ const definition = chartRegistry.get(type);
66
+ if (!definition) {
67
+ throw new Error(`Chart type ${type} not registered`);
68
+ }
69
+ return definition;
70
+ }
71
+
72
+ export { ChartRegistryImpl, chartRegistry, getChartDefinition, registerChart, useChartDefinition };
73
+ //# sourceMappingURL=chunk-TLLRW6S3.js.map
74
+ //# sourceMappingURL=chunk-TLLRW6S3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/charts/registry.ts"],"names":[],"mappings":"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","file":"chunk-TLLRW6S3.js","sourcesContent":["import {\n ChartDefinition,\n ChartSettings,\n ChartType,\n ChartSettingsPanelProps,\n BaseChartProps,\n} from \"@/types/ChartTypes\";\nimport { createElement } from \"react\";\n\nfunction isSettingsForType<T extends ChartSettings>(\n settings: ChartSettings,\n type: T[\"type\"]\n): settings is T {\n return settings.type === type;\n}\n\nfunction registerable<T extends ChartSettings>(\n definition: ChartDefinition<T>\n): ChartDefinition<ChartSettings> {\n const component = (props: BaseChartProps<ChartSettings>) => {\n if (!isSettingsForType<T>(props.settings, definition.type)) {\n return null;\n }\n return createElement(definition.component, {\n ...props,\n settings: props.settings,\n });\n };\n const settingsPanel = (props: ChartSettingsPanelProps<ChartSettings>) => {\n if (!isSettingsForType<T>(props.settings, definition.type)) {\n return null;\n }\n return createElement(definition.settingsPanel, {\n ...props,\n settings: props.settings,\n });\n };\n\n return {\n ...definition,\n component,\n settingsPanel,\n createDefaultSettings: definition.createDefaultSettings,\n validateSettings: (settings) =>\n isSettingsForType<T>(settings, definition.type) &&\n definition.validateSettings(settings),\n getFilterFunction: (settings, fieldGetter) =>\n isSettingsForType<T>(settings, definition.type)\n ? definition.getFilterFunction(settings, fieldGetter)\n : () => false,\n };\n}\n\nexport interface ChartRegistry {\n register<TSettings extends ChartSettings>(\n definition: ChartDefinition<TSettings>\n ): void;\n get(type: ChartType): ChartDefinition<ChartSettings> | undefined;\n getAll(): ChartDefinition<ChartSettings>[];\n has(type: ChartType): boolean;\n}\n\nexport class ChartRegistryImpl implements ChartRegistry {\n private definitions = new Map<ChartType, ChartDefinition<ChartSettings>>();\n\n register<TSettings extends ChartSettings>(\n definition: ChartDefinition<TSettings>\n ): void {\n if (this.definitions.has(definition.type)) {\n return;\n }\n this.definitions.set(definition.type, registerable(definition));\n }\n\n get(type: ChartType): ChartDefinition<ChartSettings> | undefined {\n return this.definitions.get(type);\n }\n\n getAll(): ChartDefinition<ChartSettings>[] {\n return Array.from(this.definitions.values());\n }\n\n has(type: ChartType): boolean {\n return this.definitions.has(type);\n }\n}\n\n// Singleton instance\nexport const chartRegistry = new ChartRegistryImpl();\n\n// Helper functions\nexport function registerChart<TSettings extends ChartSettings>(\n definition: ChartDefinition<TSettings>\n): void {\n chartRegistry.register(definition);\n}\n\nexport function getChartDefinition(\n type: ChartType\n): ChartDefinition<ChartSettings> {\n const def = chartRegistry.get(type);\n if (!def) {\n throw new Error(`Chart type ${type} not registered`);\n }\n return def;\n}\n\nexport function useChartDefinition(type: ChartType) {\n const definition = chartRegistry.get(type);\n\n if (!definition) {\n throw new Error(`Chart type ${type} not registered`);\n }\n\n return definition;\n}\n"]}