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,456 @@
1
+ import { DEFAULT_CHART_SETTINGS } from './chunk-CJQQFNEY.js';
2
+ import { useDataLayer, Button, cn } from './chunk-JNO7OXCC.js';
3
+ import { FileText, 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 } from 'lucide-react';
4
+ import { Color } from '@tiptap/extension-color';
5
+ import ListItem from '@tiptap/extension-list-item';
6
+ import TextStyle from '@tiptap/extension-text-style';
7
+ import { EditorProvider, useCurrentEditor } from '@tiptap/react';
8
+ import StarterKit from '@tiptap/starter-kit';
9
+ import * as React from 'react';
10
+ import { useState } from 'react';
11
+ import * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';
12
+ import '@radix-ui/react-toggle';
13
+ import { cva } from 'class-variance-authority';
14
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
15
+
16
+ var toggleVariants = cva(
17
+ "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]",
18
+ {
19
+ variants: {
20
+ variant: {
21
+ default: "bg-transparent",
22
+ outline: "border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground"
23
+ },
24
+ size: {
25
+ default: "h-9 px-2 min-w-9",
26
+ sm: "h-8 px-1.5 min-w-8",
27
+ lg: "h-10 px-2.5 min-w-10"
28
+ }
29
+ },
30
+ defaultVariants: {
31
+ variant: "default",
32
+ size: "default"
33
+ }
34
+ }
35
+ );
36
+ var ToggleGroupContext = React.createContext({
37
+ size: "default",
38
+ variant: "default"
39
+ });
40
+ function ToggleGroup({
41
+ className,
42
+ variant,
43
+ size,
44
+ children,
45
+ ...props
46
+ }) {
47
+ return /* @__PURE__ */ jsx(
48
+ ToggleGroupPrimitive.Root,
49
+ {
50
+ "data-slot": "toggle-group",
51
+ "data-variant": variant,
52
+ "data-size": size,
53
+ className: cn(
54
+ "group/toggle-group flex items-center justify-center rounded-md data-[variant=outline]:shadow-xs",
55
+ className
56
+ ),
57
+ ...props,
58
+ children: /* @__PURE__ */ jsx(ToggleGroupContext.Provider, { value: { variant, size }, children })
59
+ }
60
+ );
61
+ }
62
+ function ToggleGroupItem({
63
+ className,
64
+ children,
65
+ variant,
66
+ size,
67
+ ...props
68
+ }) {
69
+ const context = React.useContext(ToggleGroupContext);
70
+ return /* @__PURE__ */ jsx(
71
+ ToggleGroupPrimitive.Item,
72
+ {
73
+ "data-slot": "toggle-group-item",
74
+ "data-variant": context.variant || variant,
75
+ "data-size": context.size || size,
76
+ className: cn(
77
+ toggleVariants({
78
+ variant: context.variant || variant,
79
+ size: context.size || size
80
+ }),
81
+ "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",
82
+ className
83
+ ),
84
+ ...props,
85
+ children
86
+ }
87
+ );
88
+ }
89
+ function MenuBar() {
90
+ const { editor } = useCurrentEditor();
91
+ const [showControls, setShowControls] = useState(false);
92
+ const [displayMode, setDisplayMode] = useState("icon");
93
+ if (!editor) {
94
+ return null;
95
+ }
96
+ const renderContent = (icon, text) => {
97
+ if (displayMode === "icon") {
98
+ return icon;
99
+ }
100
+ if (displayMode === "text") {
101
+ return text;
102
+ }
103
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
104
+ icon,
105
+ /* @__PURE__ */ jsx("span", { className: "ml-2", children: text })
106
+ ] });
107
+ };
108
+ return /* @__PURE__ */ jsxs("div", { className: "control-group", children: [
109
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2 mb-2", children: [
110
+ /* @__PURE__ */ jsx(
111
+ Button,
112
+ {
113
+ variant: "outline",
114
+ size: "sm",
115
+ onClick: () => setShowControls(!showControls),
116
+ tooltip: showControls ? "Hide toolbar controls" : "Show toolbar controls",
117
+ "aria-label": showControls ? "Hide toolbar controls" : "Show toolbar controls",
118
+ children: showControls ? /* @__PURE__ */ jsxs(Fragment, { children: [
119
+ "Hide Controls ",
120
+ /* @__PURE__ */ jsx(ChevronUp, { className: "ml-2 h-4 w-4" })
121
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
122
+ "Show Controls ",
123
+ /* @__PURE__ */ jsx(ChevronDown, { className: "ml-2 h-4 w-4" })
124
+ ] })
125
+ }
126
+ ),
127
+ showControls && /* @__PURE__ */ jsxs(
128
+ ToggleGroup,
129
+ {
130
+ type: "single",
131
+ value: displayMode,
132
+ onValueChange: (value) => value && setDisplayMode(value),
133
+ children: [
134
+ /* @__PURE__ */ jsxs(ToggleGroupItem, { value: "icon", "aria-label": "Show icons only", children: [
135
+ /* @__PURE__ */ jsx(Eye, { className: "h-4 w-4" }),
136
+ /* @__PURE__ */ jsx("span", { className: "ml-2", children: "Icons Only" })
137
+ ] }),
138
+ /* @__PURE__ */ jsxs(ToggleGroupItem, { value: "text", "aria-label": "Show text only", children: [
139
+ /* @__PURE__ */ jsx(Type, { className: "h-4 w-4" }),
140
+ /* @__PURE__ */ jsx("span", { className: "ml-2", children: "Text Only" })
141
+ ] }),
142
+ /* @__PURE__ */ jsxs(ToggleGroupItem, { value: "both", "aria-label": "Show both icons and text", children: [
143
+ /* @__PURE__ */ jsx(Monitor, { className: "h-4 w-4" }),
144
+ /* @__PURE__ */ jsx("span", { className: "ml-2", children: "Icons & Text" })
145
+ ] })
146
+ ]
147
+ }
148
+ )
149
+ ] }),
150
+ showControls && /* @__PURE__ */ jsxs("div", { className: "button-group flex flex-wrap gap-2", children: [
151
+ /* @__PURE__ */ jsx(
152
+ Button,
153
+ {
154
+ size: "sm",
155
+ onClick: () => editor.chain().focus().toggleBold().run(),
156
+ disabled: !editor.can().chain().focus().toggleBold().run(),
157
+ className: editor.isActive("bold") ? "is-active" : "",
158
+ tooltip: "Toggle bold text",
159
+ "aria-label": "Toggle bold text",
160
+ children: renderContent(/* @__PURE__ */ jsx(Bold, { className: "h-4 w-4" }), "Bold")
161
+ }
162
+ ),
163
+ /* @__PURE__ */ jsx(
164
+ Button,
165
+ {
166
+ size: "sm",
167
+ onClick: () => editor.chain().focus().toggleItalic().run(),
168
+ disabled: !editor.can().chain().focus().toggleItalic().run(),
169
+ className: editor.isActive("italic") ? "is-active" : "",
170
+ tooltip: "Toggle italic text",
171
+ "aria-label": "Toggle italic text",
172
+ children: renderContent(/* @__PURE__ */ jsx(Italic, { className: "h-4 w-4" }), "Italic")
173
+ }
174
+ ),
175
+ /* @__PURE__ */ jsx(
176
+ Button,
177
+ {
178
+ size: "sm",
179
+ onClick: () => editor.chain().focus().toggleStrike().run(),
180
+ disabled: !editor.can().chain().focus().toggleStrike().run(),
181
+ className: editor.isActive("strike") ? "is-active" : "",
182
+ tooltip: "Toggle strikethrough text",
183
+ "aria-label": "Toggle strikethrough text",
184
+ children: renderContent(/* @__PURE__ */ jsx(Strikethrough, { className: "h-4 w-4" }), "Strike")
185
+ }
186
+ ),
187
+ /* @__PURE__ */ jsx(
188
+ Button,
189
+ {
190
+ size: "sm",
191
+ onClick: () => editor.chain().focus().toggleCode().run(),
192
+ disabled: !editor.can().chain().focus().toggleCode().run(),
193
+ className: editor.isActive("code") ? "is-active" : "",
194
+ tooltip: "Toggle inline code",
195
+ "aria-label": "Toggle inline code",
196
+ children: renderContent(/* @__PURE__ */ jsx(Code, { className: "h-4 w-4" }), "Code")
197
+ }
198
+ ),
199
+ /* @__PURE__ */ jsx(
200
+ Button,
201
+ {
202
+ size: "sm",
203
+ onClick: () => editor.chain().focus().unsetAllMarks().run(),
204
+ tooltip: "Clear all text formatting",
205
+ "aria-label": "Clear all text formatting",
206
+ children: renderContent(/* @__PURE__ */ jsx(X, { className: "h-4 w-4" }), "Clear marks")
207
+ }
208
+ ),
209
+ /* @__PURE__ */ jsx(
210
+ Button,
211
+ {
212
+ size: "sm",
213
+ onClick: () => editor.chain().focus().clearNodes().run(),
214
+ tooltip: "Clear all block formatting",
215
+ "aria-label": "Clear all block formatting",
216
+ children: renderContent(/* @__PURE__ */ jsx(Trash2, { className: "h-4 w-4" }), "Clear nodes")
217
+ }
218
+ ),
219
+ /* @__PURE__ */ jsx(
220
+ Button,
221
+ {
222
+ size: "sm",
223
+ onClick: () => editor.chain().focus().setParagraph().run(),
224
+ className: editor.isActive("paragraph") ? "is-active" : "",
225
+ tooltip: "Convert to paragraph",
226
+ "aria-label": "Convert to paragraph",
227
+ children: renderContent(/* @__PURE__ */ jsx(PilcrowSquare, { className: "h-4 w-4" }), "Paragraph")
228
+ }
229
+ ),
230
+ /* @__PURE__ */ jsx(
231
+ Button,
232
+ {
233
+ size: "sm",
234
+ onClick: () => editor.chain().focus().toggleHeading({ level: 1 }).run(),
235
+ className: editor.isActive("heading", { level: 1 }) ? "is-active" : "",
236
+ tooltip: "Toggle heading 1",
237
+ "aria-label": "Toggle heading 1",
238
+ children: renderContent(/* @__PURE__ */ jsx(Heading1, { className: "h-4 w-4" }), "H1")
239
+ }
240
+ ),
241
+ /* @__PURE__ */ jsx(
242
+ Button,
243
+ {
244
+ size: "sm",
245
+ onClick: () => editor.chain().focus().toggleHeading({ level: 2 }).run(),
246
+ className: editor.isActive("heading", { level: 2 }) ? "is-active" : "",
247
+ tooltip: "Toggle heading 2",
248
+ "aria-label": "Toggle heading 2",
249
+ children: renderContent(/* @__PURE__ */ jsx(Heading2, { className: "h-4 w-4" }), "H2")
250
+ }
251
+ ),
252
+ /* @__PURE__ */ jsx(
253
+ Button,
254
+ {
255
+ size: "sm",
256
+ onClick: () => editor.chain().focus().toggleHeading({ level: 3 }).run(),
257
+ className: editor.isActive("heading", { level: 3 }) ? "is-active" : "",
258
+ tooltip: "Toggle heading 3",
259
+ "aria-label": "Toggle heading 3",
260
+ children: renderContent(/* @__PURE__ */ jsx(Heading3, { className: "h-4 w-4" }), "H3")
261
+ }
262
+ ),
263
+ /* @__PURE__ */ jsx(
264
+ Button,
265
+ {
266
+ size: "sm",
267
+ onClick: () => editor.chain().focus().toggleHeading({ level: 4 }).run(),
268
+ className: editor.isActive("heading", { level: 4 }) ? "is-active" : "",
269
+ tooltip: "Toggle heading 4",
270
+ "aria-label": "Toggle heading 4",
271
+ children: renderContent(/* @__PURE__ */ jsx(Heading4, { className: "h-4 w-4" }), "H4")
272
+ }
273
+ ),
274
+ /* @__PURE__ */ jsx(
275
+ Button,
276
+ {
277
+ size: "sm",
278
+ onClick: () => editor.chain().focus().toggleHeading({ level: 5 }).run(),
279
+ className: editor.isActive("heading", { level: 5 }) ? "is-active" : "",
280
+ tooltip: "Toggle heading 5",
281
+ "aria-label": "Toggle heading 5",
282
+ children: renderContent(/* @__PURE__ */ jsx(Heading5, { className: "h-4 w-4" }), "H5")
283
+ }
284
+ ),
285
+ /* @__PURE__ */ jsx(
286
+ Button,
287
+ {
288
+ size: "sm",
289
+ onClick: () => editor.chain().focus().toggleHeading({ level: 6 }).run(),
290
+ className: editor.isActive("heading", { level: 6 }) ? "is-active" : "",
291
+ tooltip: "Toggle heading 6",
292
+ "aria-label": "Toggle heading 6",
293
+ children: renderContent(/* @__PURE__ */ jsx(Heading6, { className: "h-4 w-4" }), "H6")
294
+ }
295
+ ),
296
+ /* @__PURE__ */ jsx(
297
+ Button,
298
+ {
299
+ size: "sm",
300
+ onClick: () => editor.chain().focus().toggleBulletList().run(),
301
+ className: editor.isActive("bulletList") ? "is-active" : "",
302
+ tooltip: "Toggle bullet list",
303
+ "aria-label": "Toggle bullet list",
304
+ children: renderContent(/* @__PURE__ */ jsx(List, { className: "h-4 w-4" }), "Bullet list")
305
+ }
306
+ ),
307
+ /* @__PURE__ */ jsx(
308
+ Button,
309
+ {
310
+ size: "sm",
311
+ onClick: () => editor.chain().focus().toggleOrderedList().run(),
312
+ className: editor.isActive("orderedList") ? "is-active" : "",
313
+ tooltip: "Toggle ordered list",
314
+ "aria-label": "Toggle ordered list",
315
+ children: renderContent(/* @__PURE__ */ jsx(ListOrdered, { className: "h-4 w-4" }), "Ordered list")
316
+ }
317
+ ),
318
+ /* @__PURE__ */ jsx(
319
+ Button,
320
+ {
321
+ size: "sm",
322
+ onClick: () => editor.chain().focus().toggleCodeBlock().run(),
323
+ className: editor.isActive("codeBlock") ? "is-active" : "",
324
+ tooltip: "Toggle code block",
325
+ "aria-label": "Toggle code block",
326
+ children: renderContent(/* @__PURE__ */ jsx(Code, { className: "h-4 w-4" }), "Code block")
327
+ }
328
+ ),
329
+ /* @__PURE__ */ jsx(
330
+ Button,
331
+ {
332
+ size: "sm",
333
+ onClick: () => editor.chain().focus().toggleBlockquote().run(),
334
+ className: editor.isActive("blockquote") ? "is-active" : "",
335
+ tooltip: "Toggle blockquote",
336
+ "aria-label": "Toggle blockquote",
337
+ children: renderContent(/* @__PURE__ */ jsx(Quote, { className: "h-4 w-4" }), "Blockquote")
338
+ }
339
+ ),
340
+ /* @__PURE__ */ jsx(
341
+ Button,
342
+ {
343
+ size: "sm",
344
+ onClick: () => editor.chain().focus().setHorizontalRule().run(),
345
+ tooltip: "Insert horizontal rule",
346
+ "aria-label": "Insert horizontal rule",
347
+ children: renderContent(/* @__PURE__ */ jsx(Minus, { className: "h-4 w-4" }), "Horizontal rule")
348
+ }
349
+ ),
350
+ /* @__PURE__ */ jsx(
351
+ Button,
352
+ {
353
+ size: "sm",
354
+ onClick: () => editor.chain().focus().setHardBreak().run(),
355
+ tooltip: "Insert hard break",
356
+ "aria-label": "Insert hard break",
357
+ children: renderContent(/* @__PURE__ */ jsx(WrapText, { className: "h-4 w-4" }), "Hard break")
358
+ }
359
+ ),
360
+ /* @__PURE__ */ jsx(
361
+ Button,
362
+ {
363
+ size: "sm",
364
+ onClick: () => editor.chain().focus().undo().run(),
365
+ disabled: !editor.can().chain().focus().undo().run(),
366
+ tooltip: "Undo last change",
367
+ "aria-label": "Undo last change",
368
+ children: renderContent(/* @__PURE__ */ jsx(Undo2, { className: "h-4 w-4" }), "Undo")
369
+ }
370
+ ),
371
+ /* @__PURE__ */ jsx(
372
+ Button,
373
+ {
374
+ size: "sm",
375
+ onClick: () => editor.chain().focus().redo().run(),
376
+ disabled: !editor.can().chain().focus().redo().run(),
377
+ tooltip: "Redo last change",
378
+ "aria-label": "Redo last change",
379
+ children: renderContent(/* @__PURE__ */ jsx(Redo2, { className: "h-4 w-4" }), "Redo")
380
+ }
381
+ ),
382
+ /* @__PURE__ */ jsx(
383
+ Button,
384
+ {
385
+ size: "sm",
386
+ onClick: () => editor.chain().focus().setColor("#958DF1").run(),
387
+ className: editor.isActive("textStyle", { color: "#958DF1" }) ? "is-active" : "",
388
+ tooltip: "Set text color to purple",
389
+ "aria-label": "Set text color to purple",
390
+ children: renderContent(/* @__PURE__ */ jsx(Palette, { className: "h-4 w-4" }), "Purple")
391
+ }
392
+ )
393
+ ] })
394
+ ] });
395
+ }
396
+ function Markdown({
397
+ settings,
398
+ width,
399
+ height
400
+ }) {
401
+ const updateChart = useDataLayer((s) => s.updateChart);
402
+ return /* @__PURE__ */ jsx("div", { style: { width, height }, className: "flex flex-col overflow-auto p-1", children: /* @__PURE__ */ jsx(
403
+ EditorProvider,
404
+ {
405
+ slotBefore: /* @__PURE__ */ jsx(MenuBar, {}),
406
+ extensions,
407
+ content: settings.content,
408
+ onUpdate: (value) => {
409
+ updateChart(settings.id, {
410
+ ...settings,
411
+ content: value.editor.getHTML()
412
+ });
413
+ }
414
+ }
415
+ ) });
416
+ }
417
+ var extensions = [
418
+ Color.configure({ types: [TextStyle.name, ListItem.name] }),
419
+ TextStyle,
420
+ StarterKit.configure({
421
+ bulletList: {
422
+ keepMarks: true,
423
+ keepAttributes: false
424
+ },
425
+ orderedList: {
426
+ keepMarks: true,
427
+ keepAttributes: false
428
+ }
429
+ })
430
+ ];
431
+
432
+ // src/components/charts/Markdown/definition.ts
433
+ var markdownDefinition = {
434
+ type: "markdown",
435
+ name: "Markdown",
436
+ description: "A markdown editor for rich text content",
437
+ icon: FileText,
438
+ component: Markdown,
439
+ settingsPanel: () => null,
440
+ createDefaultSettings: (layout) => ({
441
+ ...DEFAULT_CHART_SETTINGS,
442
+ id: crypto.randomUUID(),
443
+ type: "markdown",
444
+ content: "",
445
+ layout
446
+ }),
447
+ validateSettings: (settings) => {
448
+ return settings.type === "markdown";
449
+ },
450
+ getFilterFunction: () => () => true
451
+ // No filtering for markdown
452
+ };
453
+
454
+ export { markdownDefinition };
455
+ //# sourceMappingURL=chunk-5LH6NSNL.js.map
456
+ //# sourceMappingURL=chunk-5LH6NSNL.js.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":["jsx"],"mappings":"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","file":"chunk-5LH6NSNL.js","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"]}