exploreda 0.0.5 → 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.
- package/README.md +144 -0
- package/dist/ExplorEda.cjs +4608 -10858
- package/dist/ExplorEda.cjs.map +1 -1
- package/dist/ExplorEda.css +2332 -1653
- package/dist/ExplorEda.css.map +1 -1
- package/dist/ExplorEda.d.cts +125 -278
- package/dist/ExplorEda.d.ts +125 -278
- package/dist/ExplorEda.js +4521 -10782
- package/dist/ExplorEda.js.map +1 -1
- package/dist/calculations.cjs +18 -0
- package/dist/calculations.cjs.map +1 -0
- package/dist/calculations.d.cts +63 -0
- package/dist/calculations.d.ts +63 -0
- package/dist/calculations.js +3 -0
- package/dist/calculations.js.map +1 -0
- package/dist/charts/bar.cjs +27 -0
- package/dist/charts/bar.cjs.map +1 -0
- package/dist/charts/bar.d.cts +2 -0
- package/dist/charts/bar.d.ts +2 -0
- package/dist/charts/bar.js +18 -0
- package/dist/charts/bar.js.map +1 -0
- package/dist/charts/box-plot.cjs +26 -0
- package/dist/charts/box-plot.cjs.map +1 -0
- package/dist/charts/box-plot.d.cts +2 -0
- package/dist/charts/box-plot.d.ts +2 -0
- package/dist/charts/box-plot.js +17 -0
- package/dist/charts/box-plot.js.map +1 -0
- package/dist/charts/color-legend.cjs +22 -0
- package/dist/charts/color-legend.cjs.map +1 -0
- package/dist/charts/color-legend.d.cts +2 -0
- package/dist/charts/color-legend.d.ts +2 -0
- package/dist/charts/color-legend.js +13 -0
- package/dist/charts/color-legend.js.map +1 -0
- package/dist/charts/data-table.cjs +22 -0
- package/dist/charts/data-table.cjs.map +1 -0
- package/dist/charts/data-table.d.cts +2 -0
- package/dist/charts/data-table.d.ts +2 -0
- package/dist/charts/data-table.js +13 -0
- package/dist/charts/data-table.js.map +1 -0
- package/dist/charts/line.cjs +30 -0
- package/dist/charts/line.cjs.map +1 -0
- package/dist/charts/line.d.cts +2 -0
- package/dist/charts/line.d.ts +2 -0
- package/dist/charts/line.js +17 -0
- package/dist/charts/line.js.map +1 -0
- package/dist/charts/markdown.cjs +16 -0
- package/dist/charts/markdown.cjs.map +1 -0
- package/dist/charts/markdown.css +77 -0
- package/dist/charts/markdown.css.map +1 -0
- package/dist/charts/markdown.d.cts +2 -0
- package/dist/charts/markdown.d.ts +2 -0
- package/dist/charts/markdown.js +7 -0
- package/dist/charts/markdown.js.map +1 -0
- package/dist/charts/pivot-table.cjs +23 -0
- package/dist/charts/pivot-table.cjs.map +1 -0
- package/dist/charts/pivot-table.d.cts +2 -0
- package/dist/charts/pivot-table.d.ts +2 -0
- package/dist/charts/pivot-table.js +14 -0
- package/dist/charts/pivot-table.js.map +1 -0
- package/dist/charts/row.cjs +27 -0
- package/dist/charts/row.cjs.map +1 -0
- package/dist/charts/row.d.cts +6 -0
- package/dist/charts/row.d.ts +6 -0
- package/dist/charts/row.js +18 -0
- package/dist/charts/row.js.map +1 -0
- package/dist/charts/scatter.cjs +24 -0
- package/dist/charts/scatter.cjs.map +1 -0
- package/dist/charts/scatter.d.cts +2 -0
- package/dist/charts/scatter.d.ts +2 -0
- package/dist/charts/scatter.js +15 -0
- package/dist/charts/scatter.js.map +1 -0
- package/dist/charts/summary-table.cjs +19 -0
- package/dist/charts/summary-table.cjs.map +1 -0
- package/dist/charts/summary-table.d.cts +2 -0
- package/dist/charts/summary-table.d.ts +2 -0
- package/dist/charts/summary-table.js +10 -0
- package/dist/charts/summary-table.js.map +1 -0
- package/dist/charts/three-d-scatter.cjs +24 -0
- package/dist/charts/three-d-scatter.cjs.map +1 -0
- package/dist/charts/three-d-scatter.d.cts +6 -0
- package/dist/charts/three-d-scatter.d.ts +6 -0
- package/dist/charts/three-d-scatter.js +15 -0
- package/dist/charts/three-d-scatter.js.map +1 -0
- package/dist/chunk-3PGYFLE3.cjs +499 -0
- package/dist/chunk-3PGYFLE3.cjs.map +1 -0
- package/dist/chunk-4HNDKMWF.js +167 -0
- package/dist/chunk-4HNDKMWF.js.map +1 -0
- package/dist/chunk-4QNENKTV.cjs +1214 -0
- package/dist/chunk-4QNENKTV.cjs.map +1 -0
- package/dist/chunk-54M32JJB.js +132 -0
- package/dist/chunk-54M32JJB.js.map +1 -0
- package/dist/chunk-5B23JVH3.cjs +2238 -0
- package/dist/chunk-5B23JVH3.cjs.map +1 -0
- package/dist/chunk-5LH6NSNL.js +456 -0
- package/dist/chunk-5LH6NSNL.js.map +1 -0
- package/dist/chunk-6DOKKCJ5.cjs +313 -0
- package/dist/chunk-6DOKKCJ5.cjs.map +1 -0
- package/dist/chunk-6HZX5CBT.cjs +1074 -0
- package/dist/chunk-6HZX5CBT.cjs.map +1 -0
- package/dist/chunk-6U5DOIQM.js +1071 -0
- package/dist/chunk-6U5DOIQM.js.map +1 -0
- package/dist/chunk-7GBZIK2R.cjs +80 -0
- package/dist/chunk-7GBZIK2R.cjs.map +1 -0
- package/dist/chunk-7PTJNIOD.js +520 -0
- package/dist/chunk-7PTJNIOD.js.map +1 -0
- package/dist/chunk-AHZYQ7FN.js +319 -0
- package/dist/chunk-AHZYQ7FN.js.map +1 -0
- package/dist/chunk-AOODAOL4.cjs +55 -0
- package/dist/chunk-AOODAOL4.cjs.map +1 -0
- package/dist/chunk-ASKFIRMC.cjs +165 -0
- package/dist/chunk-ASKFIRMC.cjs.map +1 -0
- package/dist/chunk-B7OQUBH4.cjs +171 -0
- package/dist/chunk-B7OQUBH4.cjs.map +1 -0
- package/dist/chunk-BIMEHDLB.js +72 -0
- package/dist/chunk-BIMEHDLB.js.map +1 -0
- package/dist/chunk-C62KHV7S.js +1225 -0
- package/dist/chunk-C62KHV7S.js.map +1 -0
- package/dist/chunk-C7GQT65O.cjs +1119 -0
- package/dist/chunk-C7GQT65O.cjs.map +1 -0
- package/dist/chunk-CGDWDV4Z.js +1211 -0
- package/dist/chunk-CGDWDV4Z.js.map +1 -0
- package/dist/chunk-CJQQFNEY.js +69 -0
- package/dist/chunk-CJQQFNEY.js.map +1 -0
- package/dist/chunk-DHYLSXNR.js +964 -0
- package/dist/chunk-DHYLSXNR.js.map +1 -0
- package/dist/chunk-DKFA4KOJ.cjs +87 -0
- package/dist/chunk-DKFA4KOJ.cjs.map +1 -0
- package/dist/chunk-DS5BS7PP.cjs +357 -0
- package/dist/chunk-DS5BS7PP.cjs.map +1 -0
- package/dist/chunk-EGMFQSGK.js +909 -0
- package/dist/chunk-EGMFQSGK.js.map +1 -0
- package/dist/chunk-EU5EFHO5.cjs +53 -0
- package/dist/chunk-EU5EFHO5.cjs.map +1 -0
- package/dist/chunk-FM46QSDM.js +837 -0
- package/dist/chunk-FM46QSDM.js.map +1 -0
- package/dist/chunk-GV2LRR32.cjs +843 -0
- package/dist/chunk-GV2LRR32.cjs.map +1 -0
- package/dist/chunk-H3XKFSA5.cjs +322 -0
- package/dist/chunk-H3XKFSA5.cjs.map +1 -0
- package/dist/chunk-H5AVMMCE.js +347 -0
- package/dist/chunk-H5AVMMCE.js.map +1 -0
- package/dist/chunk-JDMUN4VK.cjs +986 -0
- package/dist/chunk-JDMUN4VK.cjs.map +1 -0
- package/dist/chunk-JNO7OXCC.js +2171 -0
- package/dist/chunk-JNO7OXCC.js.map +1 -0
- package/dist/chunk-JQMG4ZR7.js +111 -0
- package/dist/chunk-JQMG4ZR7.js.map +1 -0
- package/dist/chunk-L2Q2R43U.cjs +118 -0
- package/dist/chunk-L2Q2R43U.cjs.map +1 -0
- package/dist/chunk-LBTZVERO.js +466 -0
- package/dist/chunk-LBTZVERO.js.map +1 -0
- package/dist/chunk-LUUGGTTK.cjs +1227 -0
- package/dist/chunk-LUUGGTTK.cjs.map +1 -0
- package/dist/chunk-MEEPH7ZC.cjs +911 -0
- package/dist/chunk-MEEPH7ZC.cjs.map +1 -0
- package/dist/chunk-MJPDJ5AS.js +184 -0
- package/dist/chunk-MJPDJ5AS.js.map +1 -0
- package/dist/chunk-MJROUIDZ.cjs +219 -0
- package/dist/chunk-MJROUIDZ.cjs.map +1 -0
- package/dist/chunk-MUWSBYJS.js +528 -0
- package/dist/chunk-MUWSBYJS.js.map +1 -0
- package/dist/chunk-NDF5LCST.js +1088 -0
- package/dist/chunk-NDF5LCST.js.map +1 -0
- package/dist/chunk-NGWTPED4.js +311 -0
- package/dist/chunk-NGWTPED4.js.map +1 -0
- package/dist/chunk-PP4VCONW.js +739 -0
- package/dist/chunk-PP4VCONW.js.map +1 -0
- package/dist/chunk-PRMC2A6P.cjs +488 -0
- package/dist/chunk-PRMC2A6P.cjs.map +1 -0
- package/dist/chunk-PST6UU6S.cjs +742 -0
- package/dist/chunk-PST6UU6S.cjs.map +1 -0
- package/dist/chunk-Q7LK2UWH.js +33 -0
- package/dist/chunk-Q7LK2UWH.js.map +1 -0
- package/dist/chunk-SFV5LZPD.js +162 -0
- package/dist/chunk-SFV5LZPD.js.map +1 -0
- package/dist/chunk-SKXGYJJG.cjs +370 -0
- package/dist/chunk-SKXGYJJG.cjs.map +1 -0
- package/dist/chunk-SWLNKY6R.js +477 -0
- package/dist/chunk-SWLNKY6R.js.map +1 -0
- package/dist/chunk-TGVLNHUB.cjs +483 -0
- package/dist/chunk-TGVLNHUB.cjs.map +1 -0
- package/dist/chunk-TLLRW6S3.js +74 -0
- package/dist/chunk-TLLRW6S3.js.map +1 -0
- package/dist/chunk-TRAIXZ6M.cjs +140 -0
- package/dist/chunk-TRAIXZ6M.cjs.map +1 -0
- package/dist/chunk-U74A5VK5.cjs +74 -0
- package/dist/chunk-U74A5VK5.cjs.map +1 -0
- package/dist/chunk-UAVDLBTA.cjs +74 -0
- package/dist/chunk-UAVDLBTA.cjs.map +1 -0
- package/dist/chunk-UJWS6TRV.js +354 -0
- package/dist/chunk-UJWS6TRV.js.map +1 -0
- package/dist/chunk-UUJMUPB3.cjs +531 -0
- package/dist/chunk-UUJMUPB3.cjs.map +1 -0
- package/dist/chunk-VTKHZIJB.cjs +549 -0
- package/dist/chunk-VTKHZIJB.cjs.map +1 -0
- package/dist/chunk-YXPAWUXO.js +51 -0
- package/dist/chunk-YXPAWUXO.js.map +1 -0
- package/dist/chunk-ZD64SCZB.js +80 -0
- package/dist/chunk-ZD64SCZB.js.map +1 -0
- package/dist/core.cjs +28 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.cts +22 -0
- package/dist/core.d.ts +22 -0
- package/dist/core.js +3 -0
- package/dist/core.js.map +1 -0
- package/dist/dataLayerState-B4XmQjQN.d.cts +258 -0
- package/dist/dataLayerState-B4XmQjQN.d.ts +258 -0
- package/package.json +32 -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,IAAM,cAAiB,GAAAA,0BAAA;AAAA,EACrB,ggBAAA;AAAA,EACA;AAAA,IACE,QAAU,EAAA;AAAA,MACR,OAAS,EAAA;AAAA,QACP,OAAS,EAAA,gBAAA;AAAA,QACT,OACE,EAAA;AAAA,OACJ;AAAA,MACA,IAAM,EAAA;AAAA,QACJ,OAAS,EAAA,kBAAA;AAAA,QACT,EAAI,EAAA,oBAAA;AAAA,QACJ,EAAI,EAAA;AAAA;AACN,KACF;AAAA,IACA,eAAiB,EAAA;AAAA,MACf,OAAS,EAAA,SAAA;AAAA,MACT,IAAM,EAAA;AAAA;AACR;AAEJ,CAAA;ACrBA,IAAM,qBAA2BC,gBAE/B,CAAA,aAAA,CAAA;AAAA,EACA,IAAM,EAAA,SAAA;AAAA,EACN,OAAS,EAAA;AACX,CAAC,CAAA;AAED,SAAS,WAAY,CAAA;AAAA,EACnB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CACuC,EAAA;AACrC,EAAA,uBACEC,cAAAA;AAAA,IAAsBC,+BAAA,CAAA,IAAA;AAAA,IAArB;AAAA,MACC,WAAU,EAAA,cAAA;AAAA,MACV,cAAc,EAAA,OAAA;AAAA,MACd,WAAW,EAAA,IAAA;AAAA,MACX,SAAW,EAAAC,oBAAA;AAAA,QACT,iGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAF,cAAC,CAAA,kBAAA,CAAmB,QAAnB,EAAA,EAA4B,OAAO,EAAE,OAAA,EAAS,IAAK,EAAA,EACjD,QACH,EAAA;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,eAAgB,CAAA;AAAA,EACvB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAG;AACL,CACuC,EAAA;AACrC,EAAM,MAAA,OAAA,GAAgBD,4BAAW,kBAAkB,CAAA;AAEnD,EAAA,uBACEC,cAAAA;AAAA,IAAsBC,+BAAA,CAAA,IAAA;AAAA,IAArB;AAAA,MACC,WAAU,EAAA,mBAAA;AAAA,MACV,cAAA,EAAc,QAAQ,OAAW,IAAA,OAAA;AAAA,MACjC,WAAA,EAAW,QAAQ,IAAQ,IAAA,IAAA;AAAA,MAC3B,SAAW,EAAAC,oBAAA;AAAA,QACT,cAAe,CAAA;AAAA,UACb,OAAA,EAAS,QAAQ,OAAW,IAAA,OAAA;AAAA,UAC5B,IAAA,EAAM,QAAQ,IAAQ,IAAA;AAAA,SACvB,CAAA;AAAA,QACD,sLAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;ACjCO,SAAS,OAAU,GAAA;AACxB,EAAM,MAAA,EAAE,MAAO,EAAA,GAAIC,sBAAiB,EAAA;AACpC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,eAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAsB,MAAM,CAAA;AAElE,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAO,OAAA,IAAA;AAAA;AAGT,EAAM,MAAA,aAAA,GAAgB,CAAC,IAAA,EAAuB,IAAiB,KAAA;AAC7D,IAAA,IAAI,gBAAgB,MAAQ,EAAA;AAC1B,MAAO,OAAA,IAAA;AAAA;AAET,IAAA,IAAI,gBAAgB,MAAQ,EAAA;AAC1B,MAAO,OAAA,IAAA;AAAA;AAET,IAAA,uBAEKC,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA;AAAA,MAAA,IAAA;AAAA,sBACDN,cAAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAU,QAAQ,QAAK,EAAA,IAAA,EAAA;AAAA,KAC/B,EAAA,CAAA;AAAA,GAEJ;AAEA,EACE,uBAAAK,eAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,eACb,EAAA,QAAA,EAAA;AAAA,oBAACA,eAAA,CAAA,KAAA,EAAA,EAAI,WAAU,iBACb,EAAA,QAAA,EAAA;AAAA,sBAAAL,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,OAAQ,EAAA,SAAA;AAAA,UACR,IAAK,EAAA,IAAA;AAAA,UACL,OAAS,EAAA,MAAM,eAAgB,CAAA,CAAC,YAAY,CAAA;AAAA,UAC5C,OAAA,EACE,eAAe,uBAA0B,GAAA,uBAAA;AAAA,UAE3C,YAAA,EACE,eAAe,uBAA0B,GAAA,uBAAA;AAAA,UAG1C,yCACGF,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA;AAAA,YAAA,gBAAA;AAAA,4BACcN,cAAAA,CAACQ,qBAAU,EAAA,EAAA,SAAA,EAAU,cAAe,EAAA;AAAA,WAAA,EACpD,oBAEEH,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA;AAAA,YAAA,gBAAA;AAAA,4BACcN,cAAAA,CAACS,uBAAY,EAAA,EAAA,SAAA,EAAU,cAAe,EAAA;AAAA,WACtD,EAAA;AAAA;AAAA,OAEJ;AAAA,MACC,YACC,oBAAAJ,eAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,QAAA;AAAA,UACL,KAAO,EAAA,WAAA;AAAA,UACP,aAAe,EAAA,CAAC,KACd,KAAA,KAAA,IAAS,eAAe,KAAoB,CAAA;AAAA,UAG9C,QAAA,EAAA;AAAA,4BAAAA,eAAA,CAAC,eAAgB,EAAA,EAAA,KAAA,EAAM,MAAO,EAAA,YAAA,EAAW,iBACvC,EAAA,QAAA,EAAA;AAAA,8BAAAL,cAAAA,CAACU,eAAI,EAAA,EAAA,SAAA,EAAU,SAAU,EAAA,CAAA;AAAA,8BACzBV,cAAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAU,QAAO,QAAU,EAAA,YAAA,EAAA;AAAA,aACnC,EAAA,CAAA;AAAA,4BACCK,eAAA,CAAA,eAAA,EAAA,EAAgB,KAAM,EAAA,MAAA,EAAO,cAAW,gBACvC,EAAA,QAAA,EAAA;AAAA,8BAAAL,cAAAA,CAACW,gBAAK,EAAA,EAAA,SAAA,EAAU,SAAU,EAAA,CAAA;AAAA,8BAC1BX,cAAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAU,QAAO,QAAS,EAAA,WAAA,EAAA;AAAA,aAClC,EAAA,CAAA;AAAA,4BACCK,eAAA,CAAA,eAAA,EAAA,EAAgB,KAAM,EAAA,MAAA,EAAO,cAAW,0BACvC,EAAA,QAAA,EAAA;AAAA,8BAAAL,cAAAA,CAACY,mBAAQ,EAAA,EAAA,SAAA,EAAU,SAAU,EAAA,CAAA;AAAA,8BAC7BZ,cAAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAU,QAAO,QAAY,EAAA,cAAA,EAAA;AAAA,aACrC,EAAA;AAAA;AAAA;AAAA;AACF,KAEJ,EAAA,CAAA;AAAA,IACC,YACC,oBAAAK,eAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,mCACb,EAAA,QAAA,EAAA;AAAA,sBAAAL,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,UAAW,EAAA,CAAE,GAAI,EAAA;AAAA,UACvD,QAAA,EAAU,CAAC,MAAA,CAAO,GAAI,EAAA,CAAE,KAAM,EAAA,CAAE,KAAM,EAAA,CAAE,UAAW,EAAA,CAAE,GAAI,EAAA;AAAA,UACzD,SAAW,EAAA,MAAA,CAAO,QAAS,CAAA,MAAM,IAAI,WAAc,GAAA,EAAA;AAAA,UACnD,OAAQ,EAAA,kBAAA;AAAA,UACR,YAAW,EAAA,kBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACa,oBAAK,SAAU,EAAA,SAAA,EAAU,GAAI,MAAM;AAAA;AAAA,OACrD;AAAA,sBACAb,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,YAAa,EAAA,CAAE,GAAI,EAAA;AAAA,UACzD,QAAA,EAAU,CAAC,MAAA,CAAO,GAAI,EAAA,CAAE,KAAM,EAAA,CAAE,KAAM,EAAA,CAAE,YAAa,EAAA,CAAE,GAAI,EAAA;AAAA,UAC3D,SAAW,EAAA,MAAA,CAAO,QAAS,CAAA,QAAQ,IAAI,WAAc,GAAA,EAAA;AAAA,UACrD,OAAQ,EAAA,oBAAA;AAAA,UACR,YAAW,EAAA,oBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACc,sBAAO,SAAU,EAAA,SAAA,EAAU,GAAI,QAAQ;AAAA;AAAA,OACzD;AAAA,sBACAd,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,YAAa,EAAA,CAAE,GAAI,EAAA;AAAA,UACzD,QAAA,EAAU,CAAC,MAAA,CAAO,GAAI,EAAA,CAAE,KAAM,EAAA,CAAE,KAAM,EAAA,CAAE,YAAa,EAAA,CAAE,GAAI,EAAA;AAAA,UAC3D,SAAW,EAAA,MAAA,CAAO,QAAS,CAAA,QAAQ,IAAI,WAAc,GAAA,EAAA;AAAA,UACrD,OAAQ,EAAA,2BAAA;AAAA,UACR,YAAW,EAAA,2BAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACe,6BAAc,SAAU,EAAA,SAAA,EAAU,GAAI,QAAQ;AAAA;AAAA,OAChE;AAAA,sBACAf,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,UAAW,EAAA,CAAE,GAAI,EAAA;AAAA,UACvD,QAAA,EAAU,CAAC,MAAA,CAAO,GAAI,EAAA,CAAE,KAAM,EAAA,CAAE,KAAM,EAAA,CAAE,UAAW,EAAA,CAAE,GAAI,EAAA;AAAA,UACzD,SAAW,EAAA,MAAA,CAAO,QAAS,CAAA,MAAM,IAAI,WAAc,GAAA,EAAA;AAAA,UACnD,OAAQ,EAAA,oBAAA;AAAA,UACR,YAAW,EAAA,oBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACgB,oBAAK,SAAU,EAAA,SAAA,EAAU,GAAI,MAAM;AAAA;AAAA,OACrD;AAAA,sBACAhB,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,aAAc,EAAA,CAAE,GAAI,EAAA;AAAA,UAC1D,OAAQ,EAAA,2BAAA;AAAA,UACR,YAAW,EAAA,2BAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACiB,iBAAE,SAAU,EAAA,SAAA,EAAU,GAAI,aAAa;AAAA;AAAA,OACzD;AAAA,sBACAjB,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,UAAW,EAAA,CAAE,GAAI,EAAA;AAAA,UACvD,OAAQ,EAAA,4BAAA;AAAA,UACR,YAAW,EAAA,4BAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACkB,sBAAO,SAAU,EAAA,SAAA,EAAU,GAAI,aAAa;AAAA;AAAA,OAC9D;AAAA,sBACAlB,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,YAAa,EAAA,CAAE,GAAI,EAAA;AAAA,UACzD,SAAW,EAAA,MAAA,CAAO,QAAS,CAAA,WAAW,IAAI,WAAc,GAAA,EAAA;AAAA,UACxD,OAAQ,EAAA,sBAAA;AAAA,UACR,YAAW,EAAA,sBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACmB,6BAAc,SAAU,EAAA,SAAA,EAAU,GAAI,WAAW;AAAA;AAAA,OACnE;AAAA,sBACAnB,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAS,EAAA,MACP,MAAO,CAAA,KAAA,EAAQ,CAAA,KAAA,EAAQ,CAAA,aAAA,CAAc,EAAE,KAAA,EAAO,CAAE,EAAC,EAAE,GAAI,EAAA;AAAA,UAEzD,SAAA,EACE,OAAO,QAAS,CAAA,SAAA,EAAW,EAAE,KAAO,EAAA,CAAA,EAAG,CAAA,GAAI,WAAc,GAAA,EAAA;AAAA,UAE3D,OAAQ,EAAA,kBAAA;AAAA,UACR,YAAW,EAAA,kBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACoB,wBAAS,SAAU,EAAA,SAAA,EAAU,GAAI,IAAI;AAAA;AAAA,OACvD;AAAA,sBACApB,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAS,EAAA,MACP,MAAO,CAAA,KAAA,EAAQ,CAAA,KAAA,EAAQ,CAAA,aAAA,CAAc,EAAE,KAAA,EAAO,CAAE,EAAC,EAAE,GAAI,EAAA;AAAA,UAEzD,SAAA,EACE,OAAO,QAAS,CAAA,SAAA,EAAW,EAAE,KAAO,EAAA,CAAA,EAAG,CAAA,GAAI,WAAc,GAAA,EAAA;AAAA,UAE3D,OAAQ,EAAA,kBAAA;AAAA,UACR,YAAW,EAAA,kBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACqB,wBAAS,SAAU,EAAA,SAAA,EAAU,GAAI,IAAI;AAAA;AAAA,OACvD;AAAA,sBACArB,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAS,EAAA,MACP,MAAO,CAAA,KAAA,EAAQ,CAAA,KAAA,EAAQ,CAAA,aAAA,CAAc,EAAE,KAAA,EAAO,CAAE,EAAC,EAAE,GAAI,EAAA;AAAA,UAEzD,SAAA,EACE,OAAO,QAAS,CAAA,SAAA,EAAW,EAAE,KAAO,EAAA,CAAA,EAAG,CAAA,GAAI,WAAc,GAAA,EAAA;AAAA,UAE3D,OAAQ,EAAA,kBAAA;AAAA,UACR,YAAW,EAAA,kBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACsB,wBAAS,SAAU,EAAA,SAAA,EAAU,GAAI,IAAI;AAAA;AAAA,OACvD;AAAA,sBACAtB,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAS,EAAA,MACP,MAAO,CAAA,KAAA,EAAQ,CAAA,KAAA,EAAQ,CAAA,aAAA,CAAc,EAAE,KAAA,EAAO,CAAE,EAAC,EAAE,GAAI,EAAA;AAAA,UAEzD,SAAA,EACE,OAAO,QAAS,CAAA,SAAA,EAAW,EAAE,KAAO,EAAA,CAAA,EAAG,CAAA,GAAI,WAAc,GAAA,EAAA;AAAA,UAE3D,OAAQ,EAAA,kBAAA;AAAA,UACR,YAAW,EAAA,kBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACuB,wBAAS,SAAU,EAAA,SAAA,EAAU,GAAI,IAAI;AAAA;AAAA,OACvD;AAAA,sBACAvB,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAS,EAAA,MACP,MAAO,CAAA,KAAA,EAAQ,CAAA,KAAA,EAAQ,CAAA,aAAA,CAAc,EAAE,KAAA,EAAO,CAAE,EAAC,EAAE,GAAI,EAAA;AAAA,UAEzD,SAAA,EACE,OAAO,QAAS,CAAA,SAAA,EAAW,EAAE,KAAO,EAAA,CAAA,EAAG,CAAA,GAAI,WAAc,GAAA,EAAA;AAAA,UAE3D,OAAQ,EAAA,kBAAA;AAAA,UACR,YAAW,EAAA,kBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACwB,wBAAS,SAAU,EAAA,SAAA,EAAU,GAAI,IAAI;AAAA;AAAA,OACvD;AAAA,sBACAxB,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAS,EAAA,MACP,MAAO,CAAA,KAAA,EAAQ,CAAA,KAAA,EAAQ,CAAA,aAAA,CAAc,EAAE,KAAA,EAAO,CAAE,EAAC,EAAE,GAAI,EAAA;AAAA,UAEzD,SAAA,EACE,OAAO,QAAS,CAAA,SAAA,EAAW,EAAE,KAAO,EAAA,CAAA,EAAG,CAAA,GAAI,WAAc,GAAA,EAAA;AAAA,UAE3D,OAAQ,EAAA,kBAAA;AAAA,UACR,YAAW,EAAA,kBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACyB,wBAAS,SAAU,EAAA,SAAA,EAAU,GAAI,IAAI;AAAA;AAAA,OACvD;AAAA,sBACAzB,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,gBAAiB,EAAA,CAAE,GAAI,EAAA;AAAA,UAC7D,SAAW,EAAA,MAAA,CAAO,QAAS,CAAA,YAAY,IAAI,WAAc,GAAA,EAAA;AAAA,UACzD,OAAQ,EAAA,oBAAA;AAAA,UACR,YAAW,EAAA,oBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAAC0B,oBAAK,SAAU,EAAA,SAAA,EAAU,GAAI,aAAa;AAAA;AAAA,OAC5D;AAAA,sBACA1B,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,iBAAkB,EAAA,CAAE,GAAI,EAAA;AAAA,UAC9D,SAAW,EAAA,MAAA,CAAO,QAAS,CAAA,aAAa,IAAI,WAAc,GAAA,EAAA;AAAA,UAC1D,OAAQ,EAAA,qBAAA;AAAA,UACR,YAAW,EAAA,qBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAAC2B,2BAAY,SAAU,EAAA,SAAA,EAAU,GAAI,cAAc;AAAA;AAAA,OACpE;AAAA,sBACA3B,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,eAAgB,EAAA,CAAE,GAAI,EAAA;AAAA,UAC5D,SAAW,EAAA,MAAA,CAAO,QAAS,CAAA,WAAW,IAAI,WAAc,GAAA,EAAA;AAAA,UACxD,OAAQ,EAAA,mBAAA;AAAA,UACR,YAAW,EAAA,mBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACgB,oBAAK,SAAU,EAAA,SAAA,EAAU,GAAI,YAAY;AAAA;AAAA,OAC3D;AAAA,sBACAhB,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,gBAAiB,EAAA,CAAE,GAAI,EAAA;AAAA,UAC7D,SAAW,EAAA,MAAA,CAAO,QAAS,CAAA,YAAY,IAAI,WAAc,GAAA,EAAA;AAAA,UACzD,OAAQ,EAAA,mBAAA;AAAA,UACR,YAAW,EAAA,mBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAAC4B,qBAAM,SAAU,EAAA,SAAA,EAAU,GAAI,YAAY;AAAA;AAAA,OAC5D;AAAA,sBACA5B,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,iBAAkB,EAAA,CAAE,GAAI,EAAA;AAAA,UAC9D,OAAQ,EAAA,wBAAA;AAAA,UACR,YAAW,EAAA,wBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAAC6B,qBAAM,SAAU,EAAA,SAAA,EAAU,GAAI,iBAAiB;AAAA;AAAA,OACjE;AAAA,sBACA7B,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,YAAa,EAAA,CAAE,GAAI,EAAA;AAAA,UACzD,OAAQ,EAAA,mBAAA;AAAA,UACR,YAAW,EAAA,mBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAAC8B,wBAAS,SAAU,EAAA,SAAA,EAAU,GAAI,YAAY;AAAA;AAAA,OAC/D;AAAA,sBACA9B,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,IAAK,EAAA,CAAE,GAAI,EAAA;AAAA,UACjD,QAAA,EAAU,CAAC,MAAA,CAAO,GAAI,EAAA,CAAE,KAAM,EAAA,CAAE,KAAM,EAAA,CAAE,IAAK,EAAA,CAAE,GAAI,EAAA;AAAA,UACnD,OAAQ,EAAA,kBAAA;AAAA,UACR,YAAW,EAAA,kBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAAC+B,qBAAM,SAAU,EAAA,SAAA,EAAU,GAAI,MAAM;AAAA;AAAA,OACtD;AAAA,sBACA/B,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAO,CAAA,KAAA,GAAQ,KAAM,EAAA,CAAE,IAAK,EAAA,CAAE,GAAI,EAAA;AAAA,UACjD,QAAA,EAAU,CAAC,MAAA,CAAO,GAAI,EAAA,CAAE,KAAM,EAAA,CAAE,KAAM,EAAA,CAAE,IAAK,EAAA,CAAE,GAAI,EAAA;AAAA,UACnD,OAAQ,EAAA,kBAAA;AAAA,UACR,YAAW,EAAA,kBAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACgC,qBAAM,SAAU,EAAA,SAAA,EAAU,GAAI,MAAM;AAAA;AAAA,OACtD;AAAA,sBACAhC,cAAAA;AAAA,QAACO,wBAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,MAAA,CAAO,KAAM,EAAA,CAAE,OAAQ,CAAA,QAAA,CAAS,SAAS,CAAA,CAAE,GAAI,EAAA;AAAA,UAC9D,SAAA,EACE,OAAO,QAAS,CAAA,WAAA,EAAa,EAAE,KAAO,EAAA,SAAA,EAAW,CAAA,GAC7C,WACA,GAAA,EAAA;AAAA,UAEN,OAAQ,EAAA,0BAAA;AAAA,UACR,YAAW,EAAA,0BAAA;AAAA,UAEV,wCAAcP,cAAAA,CAACiC,uBAAQ,SAAU,EAAA,SAAA,EAAU,GAAI,QAAQ;AAAA;AAAA;AAC1D,KACF,EAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ;ACpUO,SAAS,QAAS,CAAA;AAAA,EACvB,QAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAqC,EAAA;AACnC,EAAA,MAAM,WAAc,GAAAC,8BAAA,CAAa,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AAErD,EACE,uBAAAlC,cAAC,CAAA,KAAA,EAAA,EAAI,KAAO,EAAA,EAAE,OAAO,MAAO,EAAA,EAAG,SAAU,EAAA,iCAAA,EACvC,QAAAA,kBAAAA,cAAAA;AAAA,IAACmC,oBAAA;AAAA,IAAA;AAAA,MACC,UAAA,kBAAYnC,cAAAA,CAAC,OAAQ,EAAA,EAAA,CAAA;AAAA,MACrB,UAAA;AAAA,MACA,SAAS,QAAS,CAAA,OAAA;AAAA,MAClB,QAAA,EAAU,CAAC,KAAU,KAAA;AACnB,QAAA,WAAA,CAAY,SAAS,EAAI,EAAA;AAAA,UACvB,GAAG,QAAA;AAAA,UACH,OAAA,EAAS,KAAM,CAAA,MAAA,CAAO,OAAQ;AAAA,SAC/B,CAAA;AAAA;AACH;AAAA,GAEJ,EAAA,CAAA;AAEJ;AAEA,IAAM,UAAa,GAAA;AAAA,EACjBoC,oBAAA,CAAM,SAAU,CAAA,EAAE,KAAO,EAAA,CAACC,2BAAU,IAAM,EAAAC,yBAAA,CAAS,IAAI,CAAA,EAAG,CAAA;AAAA,EAC1DD,0BAAA;AAAA,EACAE,4BAAW,SAAU,CAAA;AAAA,IACnB,UAAY,EAAA;AAAA,MACV,SAAW,EAAA,IAAA;AAAA,MACX,cAAgB,EAAA;AAAA,KAClB;AAAA,IACA,WAAa,EAAA;AAAA,MACX,SAAW,EAAA,IAAA;AAAA,MACX,cAAgB,EAAA;AAAA;AAClB,GACD;AACH,CAAA;;;ACzCO,IAAM,kBAAwD,GAAA;AAAA,EACnE,IAAM,EAAA,UAAA;AAAA,EACN,IAAM,EAAA,UAAA;AAAA,EACN,WAAa,EAAA,yCAAA;AAAA,EACb,IAAM,EAAAC,oBAAA;AAAA,EAEN,SAAW,EAAA,QAAA;AAAA,EACX,eAAe,MAAM,IAAA;AAAA,EAErB,qBAAA,EAAuB,CAAC,MAAY,MAAA;AAAA,IAClC,GAAGC,wCAAA;AAAA,IACH,EAAA,EAAI,OAAO,UAAW,EAAA;AAAA,IACtB,IAAM,EAAA,UAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,IACT;AAAA,GACF,CAAA;AAAA,EAEA,gBAAA,EAAkB,CAAC,QAAa,KAAA;AAC9B,IAAA,OAAO,SAAS,IAAS,KAAA,UAAA;AAAA,GAC3B;AAAA,EAEA,iBAAA,EAAmB,MAAM,MAAM;AAAA;AACjC","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"]}
|