semaphor 0.0.47 → 0.0.49

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.
@@ -0,0 +1,4326 @@
1
+ import { P as E, b as k, j as e, Q as xs, R as ps, U as z, V as Ps, W as fs, X as gs, Y as js, Z as bs, _ as B, $ as ae, a0 as Us, J as Gs, O as Ee, a1 as qa, a2 as Va, a3 as Ra, a4 as _a, a5 as Ha, a6 as Ba, a7 as As, a8 as _e, a9 as Ke, aa as We, T as ys, e as Js, g as vs, ab as Oe, ac as Me, f as Y, ad as Te, ae as Ae, af as He, ag as Le, ah as X, ai as Ns, G as r, aj as Pe, ak as Ue, al as $a, am as Ge, w as Qs, v as Ws, t as he, an as Ka, r as Pa, N as Ys, s as Ua, ao as Ga, B as Ja, ap as Xs, aq as Qa, L as Be, S as Cs, z as Wa, n as Es, ar as cs, A as ds, u as es, as as Ce, at as ze, au as Zs, av as ea, aw as sa, ax as aa, ay as ta, az as Ya, aA as Xa, aB as na, aC as Za, aD as et, aE as st, aF as at, aG as tt, aH as hs, aI as nt, aJ as Re, aK as ms, aL as Fe, aM as us, aN as Ls, aO as lt, aP as rt, aQ as it, aR as ot, aS as ct, aT as ls, aU as dt, aV as Ds, aW as ht, aX as Is, aY as mt, aZ as ut, a_ as xt, a$ as la, l as pt, C as ft, E as qs, d as gt, h as jt, i as bt, o as yt, b0 as vt, m as Nt, H as Ct, b1 as St, b2 as kt, b3 as wt, b4 as rs, b5 as zt, b6 as is, b7 as Vs, K as Ft, b8 as Ss, b9 as Ot, ba as ra, bb as Ye, bc as ia, bd as Mt, be as Tt, bf as At, bg as Et, bh as Lt, bi as Dt, bj as Se, bk as V, bl as R, bm as ks, bn as _, bo as Rs, bp as It, bq as qt, br as Vt, bs as Rt, bt as _s, bu as _t, bv as Ht, bw as Bt, bx as $t, by as Kt, bz as Pt } from "./index-qjDx7Ig8.js";
2
+ import me, { useState as T, useEffect as K, useMemo as Ut, useRef as $e } from "react";
3
+ /**
4
+ * @license lucide-react v0.379.0 - ISC
5
+ *
6
+ * This source code is licensed under the ISC license.
7
+ * See the LICENSE file in the root directory of this source tree.
8
+ */
9
+ const Gt = E("Activity", [
10
+ [
11
+ "path",
12
+ {
13
+ d: "M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",
14
+ key: "169zse"
15
+ }
16
+ ]
17
+ ]);
18
+ /**
19
+ * @license lucide-react v0.379.0 - ISC
20
+ *
21
+ * This source code is licensed under the ISC license.
22
+ * See the LICENSE file in the root directory of this source tree.
23
+ */
24
+ const Jt = E("AreaChart", [
25
+ ["path", { d: "M3 3v18h18", key: "1s2lah" }],
26
+ ["path", { d: "M7 12v5h12V8l-5 5-4-4Z", key: "zxz28u" }]
27
+ ]);
28
+ /**
29
+ * @license lucide-react v0.379.0 - ISC
30
+ *
31
+ * This source code is licensed under the ISC license.
32
+ * See the LICENSE file in the root directory of this source tree.
33
+ */
34
+ const ws = E("BarChart4", [
35
+ ["path", { d: "M3 3v18h18", key: "1s2lah" }],
36
+ ["path", { d: "M13 17V9", key: "1fwyjl" }],
37
+ ["path", { d: "M18 17V5", key: "sfb6ij" }],
38
+ ["path", { d: "M8 17v-3", key: "17ska0" }]
39
+ ]);
40
+ /**
41
+ * @license lucide-react v0.379.0 - ISC
42
+ *
43
+ * This source code is licensed under the ISC license.
44
+ * See the LICENSE file in the root directory of this source tree.
45
+ */
46
+ const Qt = E("CircleX", [
47
+ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
48
+ ["path", { d: "m15 9-6 6", key: "1uzhvr" }],
49
+ ["path", { d: "m9 9 6 6", key: "z0biqf" }]
50
+ ]);
51
+ /**
52
+ * @license lucide-react v0.379.0 - ISC
53
+ *
54
+ * This source code is licensed under the ISC license.
55
+ * See the LICENSE file in the root directory of this source tree.
56
+ */
57
+ const Wt = E("Database", [
58
+ ["ellipse", { cx: "12", cy: "5", rx: "9", ry: "3", key: "msslwz" }],
59
+ ["path", { d: "M3 5V19A9 3 0 0 0 21 19V5", key: "1wlel7" }],
60
+ ["path", { d: "M3 12A9 3 0 0 0 21 12", key: "mv7ke4" }]
61
+ ]);
62
+ /**
63
+ * @license lucide-react v0.379.0 - ISC
64
+ *
65
+ * This source code is licensed under the ISC license.
66
+ * See the LICENSE file in the root directory of this source tree.
67
+ */
68
+ const Yt = E("Eraser", [
69
+ [
70
+ "path",
71
+ {
72
+ d: "m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21",
73
+ key: "182aya"
74
+ }
75
+ ],
76
+ ["path", { d: "M22 21H7", key: "t4ddhn" }],
77
+ ["path", { d: "m5 11 9 9", key: "1mo9qw" }]
78
+ ]);
79
+ /**
80
+ * @license lucide-react v0.379.0 - ISC
81
+ *
82
+ * This source code is licensed under the ISC license.
83
+ * See the LICENSE file in the root directory of this source tree.
84
+ */
85
+ const oa = E("Filter", [
86
+ ["polygon", { points: "22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3", key: "1yg77f" }]
87
+ ]);
88
+ /**
89
+ * @license lucide-react v0.379.0 - ISC
90
+ *
91
+ * This source code is licensed under the ISC license.
92
+ * See the LICENSE file in the root directory of this source tree.
93
+ */
94
+ const ca = E("GanttChart", [
95
+ ["path", { d: "M8 6h10", key: "9lnwnk" }],
96
+ ["path", { d: "M6 12h9", key: "1g9pqf" }],
97
+ ["path", { d: "M11 18h7", key: "c8dzvl" }]
98
+ ]);
99
+ /**
100
+ * @license lucide-react v0.379.0 - ISC
101
+ *
102
+ * This source code is licensed under the ISC license.
103
+ * See the LICENSE file in the root directory of this source tree.
104
+ */
105
+ const Xt = E("Glasses", [
106
+ ["circle", { cx: "6", cy: "15", r: "4", key: "vux9w4" }],
107
+ ["circle", { cx: "18", cy: "15", r: "4", key: "18o8ve" }],
108
+ ["path", { d: "M14 15a2 2 0 0 0-2-2 2 2 0 0 0-2 2", key: "1ag4bs" }],
109
+ ["path", { d: "M2.5 13 5 7c.7-1.3 1.4-2 3-2", key: "1hm1gs" }],
110
+ ["path", { d: "M21.5 13 19 7c-.7-1.3-1.5-2-3-2", key: "1r31ai" }]
111
+ ]);
112
+ /**
113
+ * @license lucide-react v0.379.0 - ISC
114
+ *
115
+ * This source code is licensed under the ISC license.
116
+ * See the LICENSE file in the root directory of this source tree.
117
+ */
118
+ const Zt = E("Hammer", [
119
+ ["path", { d: "m15 12-8.373 8.373a1 1 0 1 1-3-3L12 9", key: "eefl8a" }],
120
+ ["path", { d: "m18 15 4-4", key: "16gjal" }],
121
+ [
122
+ "path",
123
+ {
124
+ d: "m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172V7l-2.26-2.26a6 6 0 0 0-4.202-1.756L9 2.96l.92.82A6.18 6.18 0 0 1 12 8.4V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5",
125
+ key: "b7pghm"
126
+ }
127
+ ]
128
+ ]);
129
+ /**
130
+ * @license lucide-react v0.379.0 - ISC
131
+ *
132
+ * This source code is licensed under the ISC license.
133
+ * See the LICENSE file in the root directory of this source tree.
134
+ */
135
+ const en = E("Hash", [
136
+ ["line", { x1: "4", x2: "20", y1: "9", y2: "9", key: "4lhtct" }],
137
+ ["line", { x1: "4", x2: "20", y1: "15", y2: "15", key: "vyu0kd" }],
138
+ ["line", { x1: "10", x2: "8", y1: "3", y2: "21", key: "1ggp8o" }],
139
+ ["line", { x1: "16", x2: "14", y1: "3", y2: "21", key: "weycgp" }]
140
+ ]);
141
+ /**
142
+ * @license lucide-react v0.379.0 - ISC
143
+ *
144
+ * This source code is licensed under the ISC license.
145
+ * See the LICENSE file in the root directory of this source tree.
146
+ */
147
+ const sn = E("Key", [
148
+ ["path", { d: "m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4", key: "g0fldk" }],
149
+ ["path", { d: "m21 2-9.6 9.6", key: "1j0ho8" }],
150
+ ["circle", { cx: "7.5", cy: "15.5", r: "5.5", key: "yqb3hr" }]
151
+ ]);
152
+ /**
153
+ * @license lucide-react v0.379.0 - ISC
154
+ *
155
+ * This source code is licensed under the ISC license.
156
+ * See the LICENSE file in the root directory of this source tree.
157
+ */
158
+ const zs = E("LineChart", [
159
+ ["path", { d: "M3 3v18h18", key: "1s2lah" }],
160
+ ["path", { d: "m19 9-5 5-4-4-3 3", key: "2osh9i" }]
161
+ ]);
162
+ /**
163
+ * @license lucide-react v0.379.0 - ISC
164
+ *
165
+ * This source code is licensed under the ISC license.
166
+ * See the LICENSE file in the root directory of this source tree.
167
+ */
168
+ const an = E("ListEnd", [
169
+ ["path", { d: "M16 12H3", key: "1a2rj7" }],
170
+ ["path", { d: "M16 6H3", key: "1wxfjs" }],
171
+ ["path", { d: "M10 18H3", key: "13769t" }],
172
+ ["path", { d: "M21 6v10a2 2 0 0 1-2 2h-5", key: "ilrcs8" }],
173
+ ["path", { d: "m16 16-2 2 2 2", key: "kkc6pm" }]
174
+ ]);
175
+ /**
176
+ * @license lucide-react v0.379.0 - ISC
177
+ *
178
+ * This source code is licensed under the ISC license.
179
+ * See the LICENSE file in the root directory of this source tree.
180
+ */
181
+ const tn = E("ListStart", [
182
+ ["path", { d: "M16 12H3", key: "1a2rj7" }],
183
+ ["path", { d: "M16 18H3", key: "12xzn7" }],
184
+ ["path", { d: "M10 6H3", key: "lf8lx7" }],
185
+ ["path", { d: "M21 18V8a2 2 0 0 0-2-2h-5", key: "1hghli" }],
186
+ ["path", { d: "m16 8-2-2 2-2", key: "160uvd" }]
187
+ ]);
188
+ /**
189
+ * @license lucide-react v0.379.0 - ISC
190
+ *
191
+ * This source code is licensed under the ISC license.
192
+ * See the LICENSE file in the root directory of this source tree.
193
+ */
194
+ const nn = E("ListX", [
195
+ ["path", { d: "M11 12H3", key: "51ecnj" }],
196
+ ["path", { d: "M16 6H3", key: "1wxfjs" }],
197
+ ["path", { d: "M16 18H3", key: "12xzn7" }],
198
+ ["path", { d: "m19 10-4 4", key: "1tz659" }],
199
+ ["path", { d: "m15 10 4 4", key: "1n7nei" }]
200
+ ]);
201
+ /**
202
+ * @license lucide-react v0.379.0 - ISC
203
+ *
204
+ * This source code is licensed under the ISC license.
205
+ * See the LICENSE file in the root directory of this source tree.
206
+ */
207
+ const ln = E("MessageSquareMore", [
208
+ ["path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z", key: "1lielz" }],
209
+ ["path", { d: "M8 10h.01", key: "19clt8" }],
210
+ ["path", { d: "M12 10h.01", key: "1nrarc" }],
211
+ ["path", { d: "M16 10h.01", key: "1m94wz" }]
212
+ ]);
213
+ /**
214
+ * @license lucide-react v0.379.0 - ISC
215
+ *
216
+ * This source code is licensed under the ISC license.
217
+ * See the LICENSE file in the root directory of this source tree.
218
+ */
219
+ const rn = E("Network", [
220
+ ["rect", { x: "16", y: "16", width: "6", height: "6", rx: "1", key: "4q2zg0" }],
221
+ ["rect", { x: "2", y: "16", width: "6", height: "6", rx: "1", key: "8cvhb9" }],
222
+ ["rect", { x: "9", y: "2", width: "6", height: "6", rx: "1", key: "1egb70" }],
223
+ ["path", { d: "M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3", key: "1jsf9p" }],
224
+ ["path", { d: "M12 12V8", key: "2874zd" }]
225
+ ]);
226
+ /**
227
+ * @license lucide-react v0.379.0 - ISC
228
+ *
229
+ * This source code is licensed under the ISC license.
230
+ * See the LICENSE file in the root directory of this source tree.
231
+ */
232
+ const da = E("Pencil", [
233
+ ["path", { d: "M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z", key: "5qss01" }],
234
+ ["path", { d: "m15 5 4 4", key: "1mk7zo" }]
235
+ ]);
236
+ /**
237
+ * @license lucide-react v0.379.0 - ISC
238
+ *
239
+ * This source code is licensed under the ISC license.
240
+ * See the LICENSE file in the root directory of this source tree.
241
+ */
242
+ const ha = E("PieChart", [
243
+ ["path", { d: "M21.21 15.89A10 10 0 1 1 8 2.83", key: "k2fpak" }],
244
+ ["path", { d: "M22 12A10 10 0 0 0 12 2v10z", key: "1rfc4y" }]
245
+ ]);
246
+ /**
247
+ * @license lucide-react v0.379.0 - ISC
248
+ *
249
+ * This source code is licensed under the ISC license.
250
+ * See the LICENSE file in the root directory of this source tree.
251
+ */
252
+ const on = E("Play", [
253
+ ["polygon", { points: "6 3 20 12 6 21 6 3", key: "1oa8hb" }]
254
+ ]);
255
+ /**
256
+ * @license lucide-react v0.379.0 - ISC
257
+ *
258
+ * This source code is licensed under the ISC license.
259
+ * See the LICENSE file in the root directory of this source tree.
260
+ */
261
+ const cn = E("Plug2", [
262
+ ["path", { d: "M9 2v6", key: "17ngun" }],
263
+ ["path", { d: "M15 2v6", key: "s7yy2p" }],
264
+ ["path", { d: "M12 17v5", key: "bb1du9" }],
265
+ ["path", { d: "M5 8h14", key: "pcz4l3" }],
266
+ ["path", { d: "M6 11V8h12v3a6 6 0 1 1-12 0v0Z", key: "nd4hoy" }]
267
+ ]);
268
+ /**
269
+ * @license lucide-react v0.379.0 - ISC
270
+ *
271
+ * This source code is licensed under the ISC license.
272
+ * See the LICENSE file in the root directory of this source tree.
273
+ */
274
+ const dn = E("Save", [
275
+ [
276
+ "path",
277
+ {
278
+ d: "M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",
279
+ key: "1c8476"
280
+ }
281
+ ],
282
+ ["path", { d: "M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7", key: "1ydtos" }],
283
+ ["path", { d: "M7 3v4a1 1 0 0 0 1 1h7", key: "t51u73" }]
284
+ ]);
285
+ /**
286
+ * @license lucide-react v0.379.0 - ISC
287
+ *
288
+ * This source code is licensed under the ISC license.
289
+ * See the LICENSE file in the root directory of this source tree.
290
+ */
291
+ const ma = E("ScatterChart", [
292
+ ["circle", { cx: "7.5", cy: "7.5", r: ".5", fill: "currentColor", key: "kqv944" }],
293
+ ["circle", { cx: "18.5", cy: "5.5", r: ".5", fill: "currentColor", key: "lysivs" }],
294
+ ["circle", { cx: "11.5", cy: "11.5", r: ".5", fill: "currentColor", key: "byv1b8" }],
295
+ ["circle", { cx: "7.5", cy: "16.5", r: ".5", fill: "currentColor", key: "nkw3mc" }],
296
+ ["circle", { cx: "17.5", cy: "14.5", r: ".5", fill: "currentColor", key: "1gjh6j" }],
297
+ ["path", { d: "M3 3v18h18", key: "1s2lah" }]
298
+ ]);
299
+ /**
300
+ * @license lucide-react v0.379.0 - ISC
301
+ *
302
+ * This source code is licensed under the ISC license.
303
+ * See the LICENSE file in the root directory of this source tree.
304
+ */
305
+ const hn = E("ShieldQuestion", [
306
+ [
307
+ "path",
308
+ {
309
+ d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
310
+ key: "oel41y"
311
+ }
312
+ ],
313
+ ["path", { d: "M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3", key: "mhlwft" }],
314
+ ["path", { d: "M12 17h.01", key: "p32p05" }]
315
+ ]);
316
+ /**
317
+ * @license lucide-react v0.379.0 - ISC
318
+ *
319
+ * This source code is licensed under the ISC license.
320
+ * See the LICENSE file in the root directory of this source tree.
321
+ */
322
+ const mn = E("Sigma", [
323
+ ["path", { d: "M18 7V4H6l6 8-6 8h12v-3", key: "zis8ev" }]
324
+ ]);
325
+ /**
326
+ * @license lucide-react v0.379.0 - ISC
327
+ *
328
+ * This source code is licensed under the ISC license.
329
+ * See the LICENSE file in the root directory of this source tree.
330
+ */
331
+ const un = E("SwatchBook", [
332
+ ["path", { d: "M11 17a4 4 0 0 1-8 0V5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2Z", key: "1ldrpk" }],
333
+ ["path", { d: "M16.7 13H19a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2H7", key: "11i5po" }],
334
+ ["path", { d: "M 7 17h0.01", key: "10821z" }],
335
+ [
336
+ "path",
337
+ {
338
+ d: "m11 8 2.3-2.3a2.4 2.4 0 0 1 3.404.004L18.6 7.6a2.4 2.4 0 0 1 .026 3.434L9.9 19.8",
339
+ key: "o2gii7"
340
+ }
341
+ ]
342
+ ]);
343
+ /**
344
+ * @license lucide-react v0.379.0 - ISC
345
+ *
346
+ * This source code is licensed under the ISC license.
347
+ * See the LICENSE file in the root directory of this source tree.
348
+ */
349
+ const xn = E("Tag", [
350
+ [
351
+ "path",
352
+ {
353
+ d: "M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",
354
+ key: "vktsd0"
355
+ }
356
+ ],
357
+ ["circle", { cx: "7.5", cy: "7.5", r: ".5", fill: "currentColor", key: "kqv944" }]
358
+ ]);
359
+ /**
360
+ * @license lucide-react v0.379.0 - ISC
361
+ *
362
+ * This source code is licensed under the ISC license.
363
+ * See the LICENSE file in the root directory of this source tree.
364
+ */
365
+ const pn = E("ToggleLeft", [
366
+ ["rect", { width: "20", height: "12", x: "2", y: "6", rx: "6", ry: "6", key: "f2vt7d" }],
367
+ ["circle", { cx: "8", cy: "12", r: "2", key: "1nvbw3" }]
368
+ ]);
369
+ /**
370
+ * @license lucide-react v0.379.0 - ISC
371
+ *
372
+ * This source code is licensed under the ISC license.
373
+ * See the LICENSE file in the root directory of this source tree.
374
+ */
375
+ const fn = E("Type", [
376
+ ["polyline", { points: "4 7 4 4 20 4 20 7", key: "1nosan" }],
377
+ ["line", { x1: "9", x2: "15", y1: "20", y2: "20", key: "swin9y" }],
378
+ ["line", { x1: "12", x2: "12", y1: "4", y2: "20", key: "1tx1rr" }]
379
+ ]);
380
+ /**
381
+ * @license lucide-react v0.379.0 - ISC
382
+ *
383
+ * This source code is licensed under the ISC license.
384
+ * See the LICENSE file in the root directory of this source tree.
385
+ */
386
+ const gn = E("User", [
387
+ ["path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2", key: "975kel" }],
388
+ ["circle", { cx: "12", cy: "7", r: "4", key: "17ys0d" }]
389
+ ]);
390
+ function jn() {
391
+ const [s, n] = T(""), [a, t] = T(!1), [i, o] = T(!1), l = k((h) => h.dashboard);
392
+ function c() {
393
+ const h = Gs(l), g = Ee(l.id), m = JSON.parse(localStorage.getItem(g) || "[]");
394
+ if (m.some(
395
+ (N) => N.name === s
396
+ )) {
397
+ t(!0);
398
+ return;
399
+ }
400
+ m.push({
401
+ name: s,
402
+ template: h
403
+ }), localStorage.setItem(g, JSON.stringify(m)), o(!1);
404
+ }
405
+ return /* @__PURE__ */ e.jsxs(xs, { open: i, onOpenChange: o, children: [
406
+ /* @__PURE__ */ e.jsx(ps, { asChild: !0, children: /* @__PURE__ */ e.jsxs(
407
+ z,
408
+ {
409
+ variant: "outline",
410
+ className: "h-7 p-2",
411
+ size: "sm",
412
+ children: [
413
+ /* @__PURE__ */ e.jsx(Ps, { className: " mr-2 h-4 w-4", strokeWidth: 1.5 }),
414
+ "Add Lens"
415
+ ]
416
+ }
417
+ ) }),
418
+ /* @__PURE__ */ e.jsxs(fs, { className: "sm:max-w-[425px]", children: [
419
+ /* @__PURE__ */ e.jsxs(gs, { children: [
420
+ /* @__PURE__ */ e.jsx(js, { children: "Add a Lens" }),
421
+ /* @__PURE__ */ e.jsx(bs, { children: "Lenses are private by default and are only visible to you." })
422
+ ] }),
423
+ /* @__PURE__ */ e.jsx("div", { className: "grid gap-4 py-4", children: /* @__PURE__ */ e.jsxs("div", { className: "grid grid-cols-8 items-center gap-4", children: [
424
+ /* @__PURE__ */ e.jsx(B, { className: "text-right", children: "Name" }),
425
+ /* @__PURE__ */ e.jsx(
426
+ ae,
427
+ {
428
+ value: s,
429
+ onChange: (h) => {
430
+ a && t(!1), n(h.target.value);
431
+ },
432
+ id: "name",
433
+ className: "col-span-7 focus-visible:ring-0 focus-visible:ring-ring focus-visible:ring-offset-0"
434
+ }
435
+ )
436
+ ] }) }),
437
+ a && /* @__PURE__ */ e.jsx("p", { className: "text-sm", children: "The bookmark name already exists. Use a differnet name." }),
438
+ /* @__PURE__ */ e.jsx(Us, { children: /* @__PURE__ */ e.jsx(
439
+ z,
440
+ {
441
+ variant: "outline",
442
+ type: "submit",
443
+ disabled: !s,
444
+ onClick: c,
445
+ children: "Save"
446
+ }
447
+ ) })
448
+ ] })
449
+ ] });
450
+ }
451
+ function bn() {
452
+ const [s, n] = T(!1), [a, t] = T(""), i = k((d) => d.dashboard), o = k((d) => d.bookmarkKey), [l, c] = T([]), h = k((d) => d.actions.setDashboard), g = k(
453
+ (d) => d.actions.setFilterValues
454
+ ), m = k(
455
+ (d) => d.actions.setBookmarkKey
456
+ );
457
+ K(() => {
458
+ const d = Ee(i.id), x = JSON.parse(localStorage.getItem(d) || "[]");
459
+ c(x);
460
+ const f = x.find(
461
+ (w) => w.default
462
+ );
463
+ f && f.name === o && t(f.name);
464
+ }, [s, i, o]);
465
+ function u(d) {
466
+ if (d === a)
467
+ return;
468
+ const x = l.find((w) => w.name === d), f = x == null ? void 0 : x.template;
469
+ f && (h(f), g(x.filterValues || []), m(d === "Original" ? "" : d)), t(d);
470
+ }
471
+ function N(d) {
472
+ const x = Ee(i.id), w = JSON.parse(localStorage.getItem(x) || "[]").filter(
473
+ (b) => b.name !== d
474
+ );
475
+ localStorage.setItem(x, JSON.stringify(w)), c(w);
476
+ }
477
+ return /* @__PURE__ */ e.jsxs(qa, { open: s, onOpenChange: n, children: [
478
+ /* @__PURE__ */ e.jsx(Va, { asChild: !0, children: /* @__PURE__ */ e.jsx(z, { variant: "outline", className: "h-7 p-2", children: /* @__PURE__ */ e.jsx(Xt, { className: "h-4 w-4", strokeWidth: 1.5 }) }) }),
479
+ /* @__PURE__ */ e.jsxs(Ra, { className: "w-56", children: [
480
+ /* @__PURE__ */ e.jsx(_a, { children: "Lenses" }),
481
+ /* @__PURE__ */ e.jsx(Ha, {}),
482
+ /* @__PURE__ */ e.jsxs(
483
+ Ba,
484
+ {
485
+ value: a,
486
+ onValueChange: u,
487
+ children: [
488
+ /* @__PURE__ */ e.jsx(As, { value: "Original", children: "Original" }),
489
+ l.filter((d) => d.name != "Original").map((d, x) => /* @__PURE__ */ e.jsxs(
490
+ As,
491
+ {
492
+ className: "xbg-red-100 flex justify-between",
493
+ value: d.name,
494
+ defaultChecked: d.name === o,
495
+ children: [
496
+ /* @__PURE__ */ e.jsx("p", { children: d.name }),
497
+ /* @__PURE__ */ e.jsx(
498
+ _e,
499
+ {
500
+ onClick: (f) => {
501
+ f.preventDefault(), N(d.name);
502
+ },
503
+ className: "h-3 w-3 hover:cursor-pointer",
504
+ strokeWidth: 1.5
505
+ }
506
+ )
507
+ ]
508
+ },
509
+ x
510
+ ))
511
+ ]
512
+ }
513
+ )
514
+ ] })
515
+ ] });
516
+ }
517
+ function yn() {
518
+ const [s, n] = T(!1), a = k((o) => o.dashboard), t = k((o) => o.bookmarkKey);
519
+ K(() => {
520
+ if (!t) {
521
+ n(!1);
522
+ return;
523
+ }
524
+ const o = Ee(a.id), c = JSON.parse(
525
+ localStorage.getItem(o) || "[]"
526
+ ).find(
527
+ (h) => h.name === t
528
+ );
529
+ n(c ? c.default : !1);
530
+ }, [t, a.id]);
531
+ function i(o) {
532
+ if (n(o), !t)
533
+ return;
534
+ const l = Ee(a.id), h = JSON.parse(
535
+ localStorage.getItem(l) || "[]"
536
+ ).map((g) => (g.name === t ? g.default = o : g.default = !1, g));
537
+ console.log(h), localStorage.setItem(l, JSON.stringify(h));
538
+ }
539
+ return /* @__PURE__ */ e.jsxs("div", { className: "flex items-center space-x-2", children: [
540
+ /* @__PURE__ */ e.jsx(
541
+ Ke,
542
+ {
543
+ checked: s,
544
+ onCheckedChange: i,
545
+ id: "terms"
546
+ }
547
+ ),
548
+ /* @__PURE__ */ e.jsx(
549
+ "label",
550
+ {
551
+ htmlFor: "terms",
552
+ className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
553
+ children: "Set as default"
554
+ }
555
+ )
556
+ ] });
557
+ }
558
+ function vn() {
559
+ const s = k((b) => b.bookmarkKey), n = k((b) => b.dashboard);
560
+ k((b) => b.selectedSheetId);
561
+ const a = k(
562
+ (b) => b.isDashboardEditing
563
+ ), t = k((b) => b.filterValues), i = k((b) => b.isVisualEditing), o = k((b) => b.showFilters);
564
+ k(
565
+ (b) => b.showDashboardJSON
566
+ );
567
+ const l = k((b) => b.onSaveFunction), c = k(
568
+ (b) => b.actions.setShowFilters
569
+ ), { addFrame: h, setSelectedFrameId: g } = k(
570
+ (b) => b.actions
571
+ ), { getSelectedSheet: m, setIsDashboardEditing: u, setShowDashboardJSON: N } = k((b) => b.actions), d = m(), x = () => {
572
+ if (!a || !d)
573
+ return;
574
+ const b = {
575
+ id: We(),
576
+ title: "Title",
577
+ description: "Description",
578
+ preferences: {
579
+ onClickFilter: [
580
+ {
581
+ columnIndex: 0,
582
+ expression: ""
583
+ }
584
+ ]
585
+ },
586
+ type: "bar",
587
+ sql: "select COUNT(*) from YOUR_TABLE",
588
+ data: []
589
+ }, L = {
590
+ id: We(),
591
+ cards: [b],
592
+ activeCardId: b.id
593
+ };
594
+ h(d.id, L), g(L.id);
595
+ }, f = () => {
596
+ u(!0);
597
+ };
598
+ function w() {
599
+ if (!s || s === "")
600
+ return;
601
+ const b = Gs(n), L = Ee(n.id), C = JSON.parse(localStorage.getItem(L) || "[]"), O = C.findIndex(
602
+ (j) => j.name === s
603
+ );
604
+ O !== -1 ? C[O] = {
605
+ name: s,
606
+ template: b,
607
+ default: C[O].default,
608
+ filterValues: t
609
+ } : C.push({
610
+ name: s,
611
+ template: b,
612
+ filterValues: t
613
+ }), localStorage.setItem(L, JSON.stringify(C)), l == null || l(b);
614
+ }
615
+ return i ? null : /* @__PURE__ */ e.jsxs(
616
+ "div",
617
+ {
618
+ className: "flex items-center justify-between gap-2 border-b bg-muted/50 px-2 py-2",
619
+ role: "dashboard-controls",
620
+ children: [
621
+ !i && /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-3", children: [
622
+ /* @__PURE__ */ e.jsx(B, { children: s }),
623
+ !!s && /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
624
+ /* @__PURE__ */ e.jsx("span", { className: "text-muted-foreground", children: "|" }),
625
+ /* @__PURE__ */ e.jsx(yn, {})
626
+ ] })
627
+ ] }),
628
+ /* @__PURE__ */ e.jsxs("div", { className: "flex gap-2", children: [
629
+ a && !i && /* @__PURE__ */ e.jsx(jn, {}),
630
+ !i && /* @__PURE__ */ e.jsx(bn, {}),
631
+ a && !i && /* @__PURE__ */ e.jsxs(
632
+ z,
633
+ {
634
+ variant: "outline",
635
+ className: "h-7 p-2",
636
+ size: "sm",
637
+ disabled: !a,
638
+ onClick: x,
639
+ children: [
640
+ /* @__PURE__ */ e.jsx(Ps, { className: "mr-2 h-4 w-4", strokeWidth: 1.5 }),
641
+ "Add Frame"
642
+ ]
643
+ }
644
+ ),
645
+ !a && /* @__PURE__ */ e.jsx(
646
+ z,
647
+ {
648
+ variant: "outline",
649
+ className: "h-7 p-2",
650
+ onClick: f,
651
+ size: "sm",
652
+ children: /* @__PURE__ */ e.jsx(da, { className: "h-4 w-4", strokeWidth: 1.5 })
653
+ }
654
+ ),
655
+ a && !i && /* @__PURE__ */ e.jsx(
656
+ z,
657
+ {
658
+ variant: "outline",
659
+ role: "close",
660
+ className: "h-7 p-2",
661
+ onClick: () => {
662
+ u(!1), N(!1);
663
+ },
664
+ size: "sm",
665
+ children: /* @__PURE__ */ e.jsx(_e, { className: "h-4 w-4", strokeWidth: 1.5 })
666
+ }
667
+ ),
668
+ a && !i && /* @__PURE__ */ e.jsx(
669
+ z,
670
+ {
671
+ className: "h-7 p-2",
672
+ variant: "outline",
673
+ onClick: w,
674
+ size: "sm",
675
+ children: /* @__PURE__ */ e.jsx(dn, { className: "h-4 w-4", strokeWidth: 1.5 })
676
+ }
677
+ ),
678
+ !o && !i && a && /* @__PURE__ */ e.jsx(
679
+ z,
680
+ {
681
+ className: "h-7 p-2",
682
+ variant: "outline",
683
+ onClick: () => c(!0),
684
+ size: "sm",
685
+ children: /* @__PURE__ */ e.jsx(oa, { className: "h-4 w-4", strokeWidth: 1.5 })
686
+ }
687
+ ),
688
+ !i && a && !1,
689
+ !i && !1
690
+ ] })
691
+ ]
692
+ }
693
+ );
694
+ }
695
+ function Qe({
696
+ title: s,
697
+ items: n,
698
+ value: a,
699
+ isLoading: t,
700
+ isError: i,
701
+ connectionTooltip: o,
702
+ onChange: l,
703
+ className: c,
704
+ showIcon: h = !0,
705
+ disabled: g = !1
706
+ }) {
707
+ const m = t ? "Loading..." : i ? "Error" : a;
708
+ function u() {
709
+ if (s === "Connection")
710
+ return /* @__PURE__ */ e.jsx(cn, { className: "size-4 rotate-90" });
711
+ if (s === "Database")
712
+ return /* @__PURE__ */ e.jsx(Wt, { className: "size-4" });
713
+ if (s === "Schema")
714
+ return /* @__PURE__ */ e.jsx(rn, { className: "size-4" });
715
+ if (s === "Table")
716
+ return /* @__PURE__ */ e.jsx(Ns, { className: "size-4" });
717
+ }
718
+ return /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-2", children: [
719
+ h && /* @__PURE__ */ e.jsx("div", { className: "shrink-0", children: o ? /* @__PURE__ */ e.jsxs(ys, { children: [
720
+ /* @__PURE__ */ e.jsx(Js, { children: u() }),
721
+ /* @__PURE__ */ e.jsx(vs, { className: "text-xs", align: "start", children: o })
722
+ ] }) : u() }),
723
+ /* @__PURE__ */ e.jsxs(Oe, { disabled: g, value: m, onValueChange: l, children: [
724
+ /* @__PURE__ */ e.jsx(
725
+ Me,
726
+ {
727
+ className: Y(
728
+ "h-9 w-full focus:ring-1 focus:ring-offset-0",
729
+ c
730
+ ),
731
+ children: /* @__PURE__ */ e.jsx(
732
+ Te,
733
+ {
734
+ placeholder: t ? "Loading..." : i ? "Error" : `Select ${s}`
735
+ }
736
+ )
737
+ }
738
+ ),
739
+ /* @__PURE__ */ e.jsx(Ae, { children: /* @__PURE__ */ e.jsxs(He, { children: [
740
+ t ? /* @__PURE__ */ e.jsx(Le, { children: "Loading..." }) : /* @__PURE__ */ e.jsx(Le, { children: s }),
741
+ /* @__PURE__ */ e.jsx(e.Fragment, { children: n && n.map((N, d) => /* @__PURE__ */ e.jsx(X, { value: N.id, children: N.name }, d)) }),
742
+ (t || i) && /* @__PURE__ */ e.jsx(X, { value: m, children: m })
743
+ ] }) })
744
+ ] })
745
+ ] });
746
+ }
747
+ function Nn({ column: s }) {
748
+ const [n, a] = T(!1), t = r((m) => m.selectedTableName), i = r(
749
+ (m) => m.selectedSchemaName
750
+ ), o = r((m) => m.sqlGen), l = r((m) => m.actions.setSqlGen), c = r((m) => m.actions.setCardSql), h = r((m) => m.actions.setRunSql);
751
+ function g(m, u) {
752
+ const N = Qs(m, o, u);
753
+ l(N);
754
+ const d = Ws(
755
+ N,
756
+ he(i || ""),
757
+ he(t)
758
+ );
759
+ d && (c(d), h(!0)), a(!1);
760
+ }
761
+ return /* @__PURE__ */ e.jsxs(Pe, { open: n, onOpenChange: a, children: [
762
+ /* @__PURE__ */ e.jsx(Ue, { asChild: !0, children: /* @__PURE__ */ e.jsx($a, { className: "h-4 w-4 cursor-pointer text-foreground/40" }) }),
763
+ /* @__PURE__ */ e.jsx(
764
+ Ge,
765
+ {
766
+ align: "center",
767
+ className: "w-18 rounded-md p-0 shadow-none",
768
+ children: /* @__PURE__ */ e.jsxs("ul", { className: "text-xs", children: [
769
+ /* @__PURE__ */ e.jsx(
770
+ "li",
771
+ {
772
+ onClick: () => g(s, "COUNT"),
773
+ className: "cursor-pointer p-1 px-3 transition-colors hover:bg-muted",
774
+ children: "Count"
775
+ }
776
+ ),
777
+ /* @__PURE__ */ e.jsx(
778
+ "li",
779
+ {
780
+ onClick: () => g(s, "AVG"),
781
+ className: "cursor-pointer p-1 px-3 transition-colors hover:bg-muted",
782
+ children: "Avg"
783
+ }
784
+ ),
785
+ /* @__PURE__ */ e.jsx(
786
+ "li",
787
+ {
788
+ onClick: () => g(s, "SUM"),
789
+ className: "cursor-pointer p-1 px-3 transition-colors hover:bg-muted",
790
+ children: "Sum"
791
+ }
792
+ ),
793
+ /* @__PURE__ */ e.jsx(
794
+ "li",
795
+ {
796
+ onClick: () => g(s, "MAX"),
797
+ className: "cursor-pointer p-1 px-3 transition-colors hover:bg-muted",
798
+ children: "Max"
799
+ }
800
+ ),
801
+ /* @__PURE__ */ e.jsx(
802
+ "li",
803
+ {
804
+ onClick: () => g(s, "MIN"),
805
+ className: "cursor-pointer p-1 px-3 transition-colors hover:bg-muted",
806
+ children: "Min"
807
+ }
808
+ )
809
+ ] })
810
+ }
811
+ )
812
+ ] });
813
+ }
814
+ function ua({ column: s }) {
815
+ return /* @__PURE__ */ e.jsxs(ys, { children: [
816
+ /* @__PURE__ */ e.jsx(Ka, { asChild: !0, children: Pa.includes(s.data_type.toLowerCase()) ? (
817
+ // <span className=" font-thin">T</span>
818
+ /* @__PURE__ */ e.jsx(fn, { className: "size-3" })
819
+ ) : Ys.includes(s.data_type.toLowerCase()) ? (
820
+ //
821
+ /* @__PURE__ */ e.jsx(en, { className: "size-3" })
822
+ ) : Ua.includes(s.data_type.toLowerCase()) ? /* @__PURE__ */ e.jsx(Ga, { className: "size-3" }) : Ja.includes(s.data_type.toLowerCase()) ? /* @__PURE__ */ e.jsx(pn, { className: "size-3" }) : /* @__PURE__ */ e.jsx(hn, { className: "size-3" }) }),
823
+ /* @__PURE__ */ e.jsx(vs, { children: /* @__PURE__ */ e.jsx("p", { className: "font-mono text-xs", children: s.data_type }) })
824
+ ] });
825
+ }
826
+ function Cn({
827
+ schemaName: s,
828
+ tableName: n,
829
+ columns: a,
830
+ status: t
831
+ }) {
832
+ const i = r((j) => j.sqlGen), o = r(
833
+ (j) => j.selectedConnectionId
834
+ ), l = r(
835
+ (j) => j.selectedDatabaseName
836
+ ), c = r(
837
+ (j) => j.selectedSchemaName
838
+ ), h = r((j) => j.selectedTableName), g = k(
839
+ (j) => j.dashboard.aiScopeTables
840
+ ), { setAIScopeTables: m } = k((j) => j.actions), u = r((j) => j.actions.setRunSql), N = r((j) => j.actions.setSqlGen), d = r(
841
+ (j) => j.actions.setIsShowingVisual
842
+ ), x = r((j) => j.actions.setCardSql), { connectionType: f } = xa();
843
+ function w(j) {
844
+ const F = Qs(j, i);
845
+ N(F);
846
+ const A = Ws(F, he(s), he(n));
847
+ A && (x(A), u(!0));
848
+ }
849
+ function b() {
850
+ return (g == null ? void 0 : g.find(
851
+ (j) => j.connectinonId === o && j.tableName === h
852
+ )) !== void 0;
853
+ }
854
+ function L(j) {
855
+ if (j === !0 && h && o) {
856
+ const F = {
857
+ connectinonId: o,
858
+ connectionType: f,
859
+ databaseName: l,
860
+ schemaName: c,
861
+ tableName: h
862
+ }, q = [...g || [], F].filter(
863
+ (P, $, G) => G.findIndex(
864
+ (D) => D.connectinonId === P.connectinonId && D.tableName === P.tableName
865
+ ) === $
866
+ );
867
+ m(q), cs.success(`Added '${h}' to AI Scope`, {
868
+ position: "top-right",
869
+ duration: 2500,
870
+ richColors: !0
871
+ });
872
+ } else {
873
+ const F = (g || []).filter(
874
+ (A) => A.connectinonId !== o && A.tableName !== h
875
+ );
876
+ m(F), cs(`Removed '${h}' from AI Scope`, {
877
+ position: "top-right",
878
+ duration: 2e3,
879
+ richColors: !0
880
+ });
881
+ }
882
+ }
883
+ function C() {
884
+ let F = ds(s, n);
885
+ ((P) => P.charAt(0) === P.charAt(0).toUpperCase())(n) && (F = `"${n}"`), d(!1);
886
+ const q = f === "MSSQL" ? `SELECT top 10 * FROM ${F}` : `SELECT * FROM ${F} LIMIT 10`;
887
+ x(q), u(!0);
888
+ }
889
+ function O() {
890
+ let F = ds(s, n);
891
+ ((q) => q.charAt(0) === q.charAt(0).toUpperCase())(n) && (F = `"${n}"`), d(!1), x(`SELECT COUNT(*) as count FROM ${F}`), u(!0);
892
+ }
893
+ return /* @__PURE__ */ e.jsxs("div", { className: "flex grow flex-col space-y-4 px-4", children: [
894
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center justify-center gap-1", children: [
895
+ /* @__PURE__ */ e.jsx(
896
+ Xs,
897
+ {
898
+ title: `${b() ? "Remove from" : "Add to"} AI Scope`,
899
+ pressed: b(),
900
+ onPressedChange: L,
901
+ variant: "outline",
902
+ className: "h-9 px-2",
903
+ children: /* @__PURE__ */ e.jsx(
904
+ Qa,
905
+ {
906
+ className: Y("size-4", {
907
+ "text-primary": b(),
908
+ "text-muted-foreground": !b()
909
+ })
910
+ }
911
+ )
912
+ }
913
+ ),
914
+ /* @__PURE__ */ e.jsxs(
915
+ z,
916
+ {
917
+ disabled: t !== "Success",
918
+ onClick: C,
919
+ size: "sm",
920
+ variant: "secondary",
921
+ className: "flex",
922
+ children: [
923
+ t !== "Success" ? /* @__PURE__ */ e.jsx(Be, { className: "mr-2 h-4 w-4 animate-spin text-foreground/50" }) : /* @__PURE__ */ e.jsx(un, { className: "mr-2 size-4" }),
924
+ "Top 10"
925
+ ]
926
+ }
927
+ ),
928
+ /* @__PURE__ */ e.jsxs(
929
+ z,
930
+ {
931
+ disabled: t !== "Success",
932
+ onClick: O,
933
+ size: "sm",
934
+ variant: "secondary",
935
+ className: "flex",
936
+ children: [
937
+ t !== "Success" ? /* @__PURE__ */ e.jsx(Be, { className: "mr-2 h-4 w-4 animate-spin text-foreground/50" }) : /* @__PURE__ */ e.jsx(mn, { className: "mr-2 size-4" }),
938
+ "Count"
939
+ ]
940
+ }
941
+ )
942
+ ] }),
943
+ /* @__PURE__ */ e.jsxs(
944
+ Cs,
945
+ {
946
+ className: "flex-1 basis-0 overflow-y-auto border-b border-t border-muted py-3",
947
+ children: [
948
+ a == null ? void 0 : a.map((j) => /* @__PURE__ */ e.jsxs(
949
+ "div",
950
+ {
951
+ onClick: () => w(j),
952
+ className: Y(
953
+ "mx-3 flex cursor-pointer items-center justify-between rounded px-2 py-[6px] text-sm transition-colors hover:bg-muted/50",
954
+ {
955
+ "bg-muted": Wa(j, i)
956
+ }
957
+ ),
958
+ children: [
959
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center space-x-2", children: [
960
+ /* @__PURE__ */ e.jsx(ua, { column: j }),
961
+ /* @__PURE__ */ e.jsx("span", { children: j.column_name })
962
+ ] }),
963
+ Ys.includes(j.data_type) && /* @__PURE__ */ e.jsx(
964
+ "div",
965
+ {
966
+ onClick: (F) => F.stopPropagation(),
967
+ className: "flex items-center justify-end",
968
+ children: /* @__PURE__ */ e.jsx(Nn, { column: j })
969
+ }
970
+ )
971
+ ]
972
+ },
973
+ j.column_name
974
+ )),
975
+ /* @__PURE__ */ e.jsx(Es, { orientation: "vertical" }),
976
+ /* @__PURE__ */ e.jsx(Es, { orientation: "horizontal" })
977
+ ]
978
+ }
979
+ )
980
+ ] });
981
+ }
982
+ function xa(s, n) {
983
+ var ss, ve, Je, qe;
984
+ let a = Ut(() => [], []);
985
+ const t = es().authToken || s, i = r(
986
+ (S) => S.selectedConnectionId
987
+ ), o = r(
988
+ (S) => S.selectedDatabaseName
989
+ ), l = r(
990
+ (S) => S.selectedSchemaName
991
+ ), c = r((S) => S.selectedTableName), h = r(
992
+ (S) => S.actions.setCurrentColumns
993
+ ), g = r(
994
+ (S) => S.actions.setSelectedConnectionId
995
+ ), m = r(
996
+ (S) => S.actions.setSelectedDatabaseName
997
+ ), u = r(
998
+ (S) => S.actions.setSelectedSchemaName
999
+ ), N = r(
1000
+ (S) => S.actions.setSelectedTableName
1001
+ ), d = r((S) => S.actions.setCardSql);
1002
+ function x(S) {
1003
+ return i && o && l && o !== "NA" ? !0 : i && S === "API" ? !1 : !!(i && S === "S3");
1004
+ }
1005
+ function f(S) {
1006
+ return !!(i && o && o !== "NA" && l && c || i && (S === "S3" || S === "API"));
1007
+ }
1008
+ function w(S) {
1009
+ return i && S ? !(S === "API" || S === "S3") : !1;
1010
+ }
1011
+ const {
1012
+ data: b,
1013
+ isLoading: L,
1014
+ isError: C
1015
+ } = Ce({
1016
+ queryKey: ["connections"],
1017
+ queryFn: () => ze(
1018
+ "https://semaphor.cloud/api/v1/connections",
1019
+ (t == null ? void 0 : t.accessToken) || ""
1020
+ ),
1021
+ enabled: !!(t != null && t.accessToken)
1022
+ // Only fetch if authToken is present
1023
+ }), O = b == null ? void 0 : b.connections.find(
1024
+ (S) => S.id === i
1025
+ ), j = O == null ? void 0 : O.type, F = (O == null ? void 0 : O.type) === "API" || (O == null ? void 0 : O.type) === "S3", {
1026
+ data: A,
1027
+ isLoading: q,
1028
+ isFetching: P,
1029
+ isError: $,
1030
+ refetch: G
1031
+ } = Ce({
1032
+ queryKey: ["databases", i],
1033
+ queryFn: () => ze(
1034
+ "https://semaphor.cloud/api/v1/databases",
1035
+ (t == null ? void 0 : t.accessToken) || "",
1036
+ {
1037
+ connection_id: i
1038
+ }
1039
+ ),
1040
+ enabled: w(j)
1041
+ // !!selectedConnectionId && !isNonDbConnection, //currentConnection?.type !== 'API', // Only fetch if connectionId is present
1042
+ }), {
1043
+ data: D,
1044
+ isLoading: te,
1045
+ isFetching: Q,
1046
+ isError: ee,
1047
+ refetch: Z
1048
+ } = Ce({
1049
+ queryKey: ["schemas", i, o],
1050
+ queryFn: () => ze(
1051
+ "https://semaphor.cloud/api/v1/schemas",
1052
+ (t == null ? void 0 : t.accessToken) || "",
1053
+ {
1054
+ connection_id: i,
1055
+ database_name: o
1056
+ }
1057
+ ),
1058
+ enabled: !!i && !!o && !F && o !== "NA"
1059
+ //currentConnection?.type !== 'API', // Only fetch if connectionId and database is present
1060
+ }), {
1061
+ data: J,
1062
+ isLoading: I,
1063
+ isFetching: y,
1064
+ isError: v,
1065
+ refetch: M
1066
+ } = Ce({
1067
+ queryKey: [
1068
+ "tables",
1069
+ i,
1070
+ o,
1071
+ l
1072
+ ],
1073
+ queryFn: () => ze(
1074
+ "https://semaphor.cloud/api/v1/tables",
1075
+ (t == null ? void 0 : t.accessToken) || "",
1076
+ {
1077
+ connection_id: i,
1078
+ database_name: o,
1079
+ schema_name: l
1080
+ }
1081
+ ),
1082
+ enabled: x(j)
1083
+ }), {
1084
+ data: H,
1085
+ isLoading: ue,
1086
+ isFetching: se,
1087
+ isError: ge
1088
+ } = Ce({
1089
+ queryKey: [
1090
+ "columns",
1091
+ i,
1092
+ o,
1093
+ l,
1094
+ c
1095
+ ],
1096
+ queryFn: () => ze(
1097
+ "https://semaphor.cloud/api/v1/columns",
1098
+ (t == null ? void 0 : t.accessToken) || "",
1099
+ {
1100
+ connection_id: i,
1101
+ database_name: o,
1102
+ schema_name: l,
1103
+ table_name: c
1104
+ }
1105
+ ),
1106
+ enabled: f(j)
1107
+ // (!!selectedConnectionId &&
1108
+ // !!selectedDatabaseName &&
1109
+ // !!selectedSchemaName &&
1110
+ // !!selectedTableName) ||
1111
+ // isNonDbConnection,
1112
+ //currentConnection?.type === 'API',
1113
+ // && currentConnection?.type !== 'API', // Only fetch if connectionId, database, and table is present
1114
+ });
1115
+ K(() => {
1116
+ h(a);
1117
+ }, [H, h, a]), K(() => {
1118
+ }, [
1119
+ F,
1120
+ d,
1121
+ N,
1122
+ u,
1123
+ m,
1124
+ O
1125
+ ]);
1126
+ const je = (O == null ? void 0 : O.type) === "API" ? (ss = O == null ? void 0 : O.type) == null ? void 0 : ss.toLowerCase() : c || "", be = F ? "" : l || "";
1127
+ function xe(S) {
1128
+ u(S), N("");
1129
+ }
1130
+ function U(S) {
1131
+ m(S), u(""), N("");
1132
+ }
1133
+ function ne(S) {
1134
+ g(S);
1135
+ }
1136
+ A && ((ve = A == null ? void 0 : A.databases) == null ? void 0 : ve.length) > 0, D && ((Je = D == null ? void 0 : D.schemas) == null ? void 0 : Je.length) > 0, H && ((qe = H == null ? void 0 : H.columns) == null ? void 0 : qe.length) > 0 && (a = H.columns.map((S) => ({
1137
+ ...S,
1138
+ data_type: S.data_type.toLowerCase()
1139
+ }))), $ && (a = []), (ge || C) && (a = []);
1140
+ const le = b == null ? void 0 : b.connections.map(
1141
+ (S) => ({
1142
+ id: S.id,
1143
+ name: S.name,
1144
+ type: S.type
1145
+ })
1146
+ ), ye = A == null ? void 0 : A.databases.map((S) => ({
1147
+ id: S.database_name,
1148
+ name: S.database_name
1149
+ })), re = D == null ? void 0 : D.schemas.map((S) => ({
1150
+ id: S.schema_name,
1151
+ name: S.schema_name
1152
+ })), Ie = J == null ? void 0 : J.tables.map((S) => ({
1153
+ id: S.table_name,
1154
+ name: S.table_name
1155
+ }));
1156
+ return {
1157
+ connectionItems: le,
1158
+ isConnectionsLoading: L,
1159
+ isConnectionsError: C,
1160
+ databaseItems: ye,
1161
+ isDatabasesLoadingOrFetching: q || P,
1162
+ isDatabaseError: $,
1163
+ schemaItems: re,
1164
+ isSchemaLoadingOrFetching: te || Q,
1165
+ isSchemaError: ee,
1166
+ tableItems: Ie,
1167
+ isTableLoadingOrFetching: I || y,
1168
+ isTableError: v,
1169
+ columns: a,
1170
+ isColumnsLoadingOrFetching: ue || se,
1171
+ isColumnsError: ge,
1172
+ isNonDbConnection: F,
1173
+ connectionType: j,
1174
+ tableName: je,
1175
+ schemaName: be,
1176
+ handleConnectionChange: ne,
1177
+ handleDatabaseChange: U,
1178
+ handleSchemaChange: xe
1179
+ };
1180
+ }
1181
+ function pa({
1182
+ ColumnsComponent: s
1183
+ }) {
1184
+ var J;
1185
+ const n = r(
1186
+ (I) => I.selectedConnectionId
1187
+ ), a = r(
1188
+ (I) => I.selectedDatabaseName
1189
+ ), t = r(
1190
+ (I) => I.selectedSchemaName
1191
+ ), i = r((I) => I.selectedTableName), o = r(
1192
+ (I) => I.actions.setSelectedTableName
1193
+ ), {
1194
+ connectionItems: l,
1195
+ schemaItems: c,
1196
+ databaseItems: h,
1197
+ tableItems: g,
1198
+ columns: m,
1199
+ isConnectionsLoading: u,
1200
+ isConnectionsError: N,
1201
+ isDatabasesLoadingOrFetching: d,
1202
+ isDatabaseError: x,
1203
+ isSchemaLoadingOrFetching: f,
1204
+ isSchemaError: w,
1205
+ isColumnsError: b,
1206
+ isColumnsLoadingOrFetching: L,
1207
+ isTableLoadingOrFetching: C,
1208
+ isTableError: O,
1209
+ connectionType: j,
1210
+ isNonDbConnection: F,
1211
+ handleConnectionChange: A,
1212
+ handleDatabaseChange: q,
1213
+ handleSchemaChange: P,
1214
+ tableName: $,
1215
+ schemaName: G
1216
+ } = xa();
1217
+ function D() {
1218
+ return s ? s(G, $, m) : /* @__PURE__ */ e.jsx(
1219
+ Cn,
1220
+ {
1221
+ schemaName: G,
1222
+ tableName: $,
1223
+ columns: m,
1224
+ status: L ? "Loading..." : b ? "Error" : "Success"
1225
+ }
1226
+ );
1227
+ }
1228
+ function te() {
1229
+ window.location.href = "mailto:support@semaphor.cloud?subject=Help&body=I need help with...";
1230
+ }
1231
+ function Q() {
1232
+ return j === "S3" || j === "API" ? null : /* @__PURE__ */ e.jsx(
1233
+ Qe,
1234
+ {
1235
+ onChange: q,
1236
+ isError: x,
1237
+ isLoading: d,
1238
+ items: h,
1239
+ value: a || "",
1240
+ title: "Database"
1241
+ }
1242
+ );
1243
+ }
1244
+ function ee() {
1245
+ return j === "S3" || j === "API" ? null : /* @__PURE__ */ e.jsx(
1246
+ Qe,
1247
+ {
1248
+ onChange: P,
1249
+ isError: w,
1250
+ isLoading: f,
1251
+ items: c,
1252
+ value: t || "",
1253
+ title: "Schema"
1254
+ }
1255
+ );
1256
+ }
1257
+ function Z() {
1258
+ return j === "API" ? null : /* @__PURE__ */ e.jsx(
1259
+ Qe,
1260
+ {
1261
+ onChange: o,
1262
+ isError: O,
1263
+ items: g,
1264
+ isLoading: C,
1265
+ value: i || "",
1266
+ title: "Table"
1267
+ }
1268
+ );
1269
+ }
1270
+ return /* @__PURE__ */ e.jsxs("aside", { className: "xbg-red-100 flex grow flex-col justify-between", children: [
1271
+ /* @__PURE__ */ e.jsxs("section", { className: "space-y-3 px-6 py-4", children: [
1272
+ /* @__PURE__ */ e.jsx(
1273
+ Qe,
1274
+ {
1275
+ items: l,
1276
+ title: "Connection",
1277
+ value: n || "",
1278
+ onChange: A,
1279
+ isLoading: u,
1280
+ isError: N,
1281
+ connectionTooltip: ((J = l == null ? void 0 : l.find(
1282
+ (I) => I.id === n
1283
+ )) == null ? void 0 : J.type) || ""
1284
+ }
1285
+ ),
1286
+ Q(),
1287
+ ee(),
1288
+ Z()
1289
+ ] }),
1290
+ D(),
1291
+ /* @__PURE__ */ e.jsx("div", { className: "flex items-end justify-center gap-2 px-6 py-4", children: /* @__PURE__ */ e.jsxs(
1292
+ z,
1293
+ {
1294
+ onClick: te,
1295
+ size: "sm",
1296
+ variant: "secondary",
1297
+ className: "w-full",
1298
+ children: [
1299
+ /* @__PURE__ */ e.jsx(ln, { className: "mr-2 size-4" }),
1300
+ "Help"
1301
+ ]
1302
+ }
1303
+ ) })
1304
+ ] });
1305
+ }
1306
+ function Sn(s) {
1307
+ const n = s.toUpperCase().indexOf("WHERE"), a = s.toUpperCase().indexOf("GROUP BY"), t = s.toUpperCase().indexOf("LIMIT"), i = s.toUpperCase().indexOf("ORDER BY");
1308
+ let o = s.length;
1309
+ if (i !== -1 && (o = i), t !== -1 && t < o && (o = t), n !== -1) {
1310
+ const l = s.substring(0, n), c = s.substring(n);
1311
+ return `${l} {{ filters | where }} AND ${c.substring(
1312
+ 6
1313
+ )}`;
1314
+ } else if (a !== -1) {
1315
+ const l = s.substring(0, a), c = s.substring(a);
1316
+ return `${l} {{ filters | where }} ${c}`;
1317
+ } else {
1318
+ const l = s.substring(0, o), c = s.substring(o);
1319
+ return `${l} {{ filters | where }} ${c}`;
1320
+ }
1321
+ }
1322
+ function kn({
1323
+ error: s,
1324
+ setShowAIDialog: n,
1325
+ setUserInputforAI: a,
1326
+ setTriggerAIRun: t
1327
+ }) {
1328
+ return /* @__PURE__ */ e.jsxs(Zs, { openDelay: 0, children: [
1329
+ /* @__PURE__ */ e.jsx(ea, { asChild: !0, children: /* @__PURE__ */ e.jsx(z, { variant: "link", className: " p-0 h-5", children: /* @__PURE__ */ e.jsx(Qt, { className: "h-4 w-4 text-red-500" }) }) }),
1330
+ /* @__PURE__ */ e.jsx(sa, { align: "start", className: " min-w-fit max-w-[500px]", children: /* @__PURE__ */ e.jsx("div", { className: "flex justify-between space-x-4", children: /* @__PURE__ */ e.jsxs("div", { className: "grow space-y-1 flex flex-col ", children: [
1331
+ /* @__PURE__ */ e.jsxs(
1332
+ z,
1333
+ {
1334
+ onClick: () => {
1335
+ n(!0), a(s), t(!0);
1336
+ },
1337
+ size: "sm",
1338
+ variant: "outline",
1339
+ children: [
1340
+ /* @__PURE__ */ e.jsx(Zt, { className: "h-4 w-4 mr-2" }),
1341
+ "Fix It"
1342
+ ]
1343
+ }
1344
+ ),
1345
+ /* @__PURE__ */ e.jsx(Cs, { className: " min-h-0 max-h-[250px] overflow-scroll ", children: /* @__PURE__ */ e.jsx("p", { className: " overflow-auto text-sm leading-relaxed font-mono ", children: s }) })
1346
+ ] }) }) })
1347
+ ] });
1348
+ }
1349
+ function wn({
1350
+ text: s,
1351
+ onCheckedChange: n,
1352
+ checked: a
1353
+ }) {
1354
+ return /* @__PURE__ */ e.jsxs("div", { className: "xbg-red-100 ml-6 flex items-center gap-2", children: [
1355
+ /* @__PURE__ */ e.jsx(Ke, { checked: a, onCheckedChange: n }),
1356
+ /* @__PURE__ */ e.jsx("label", { className: "text-xs leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70", children: s })
1357
+ ] });
1358
+ }
1359
+ function zn() {
1360
+ const { authToken: s } = es(), n = $e(null), a = r((c) => c.applyFilters), [t, i] = T(""), o = r((c) => c.filterValues), l = r((c) => c.card.sql);
1361
+ return /* @__PURE__ */ e.jsxs(
1362
+ Zs,
1363
+ {
1364
+ openDelay: 0,
1365
+ onOpenChange: async (c) => {
1366
+ if (!c)
1367
+ return;
1368
+ console.log("onOpenChange");
1369
+ const h = await aa(
1370
+ "https://semaphor.cloud/api/v1/filter-sql",
1371
+ (s == null ? void 0 : s.accessToken) || "",
1372
+ {
1373
+ sql: l,
1374
+ active_filters: o
1375
+ }
1376
+ );
1377
+ console.log(h), h.sql ? (console.log(h.records), i(h.sql)) : i("Error");
1378
+ },
1379
+ children: [
1380
+ /* @__PURE__ */ e.jsx(ea, { asChild: !0, children: a && /* @__PURE__ */ e.jsx("p", { className: "p-0 text-xs hover:cursor-pointer", children: "|  Filter Query" }) }),
1381
+ /* @__PURE__ */ e.jsxs(sa, { align: "end", className: "w-[600px]", children: [
1382
+ /* @__PURE__ */ e.jsx("div", { className: "flex justify-between space-x-4", children: /* @__PURE__ */ e.jsx("div", { className: "rounded-sm bg-muted p-2", children: /* @__PURE__ */ e.jsxs("code", { ref: n, className: "font-mono text-sm", children: [
1383
+ t,
1384
+ /* @__PURE__ */ e.jsx(
1385
+ ta,
1386
+ {
1387
+ onClick: () => Ya(n),
1388
+ className: "ml-3 inline-block h-4 w-4 opacity-70 hover:cursor-pointer hover:opacity-100"
1389
+ }
1390
+ )
1391
+ ] }) }) }),
1392
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-2 pt-2", children: [
1393
+ /* @__PURE__ */ e.jsx(Xa, { className: "h-4 w-4 opacity-70" }),
1394
+ /* @__PURE__ */ e.jsx("span", { className: "text-xs text-muted-foreground", children: "A preview of the query with filters applied." })
1395
+ ] })
1396
+ ] })
1397
+ ]
1398
+ }
1399
+ );
1400
+ }
1401
+ const Fn = `
1402
+
1403
+ Use the following syntax to create a chart query. Please replace the x-axis, y-axis, stack-by, label, and measure with the actual column names of the table.
1404
+
1405
+ Bar / Line Chart:
1406
+
1407
+ SELECT x-axis, y-axis-1, y-axis-2, y-axis-3,... FROM table
1408
+
1409
+ - X-axis - Category
1410
+ - Y-axis - Number
1411
+
1412
+ Stacked Chart:
1413
+
1414
+ SELECT x-axis, stack-by, y-axis FROM table
1415
+
1416
+ - X-axis - Category
1417
+ - Stack by - Category
1418
+ - Y-axis - Number
1419
+
1420
+
1421
+ Scatter Chart:
1422
+
1423
+ SELECT label, x-axis, y-axis FROM table
1424
+
1425
+ - Label - Category
1426
+ - Group (opt) - Category
1427
+ - X-axis - Number
1428
+ - Y-axis - Number
1429
+
1430
+
1431
+ Bubble Chart:
1432
+
1433
+ SELECT label, x-axis, y-axis, radius FROM table
1434
+
1435
+ - Label - Category
1436
+ - Bubble Group (opt) - Category
1437
+ - X-axis - Number
1438
+ - Y-axis - Number
1439
+ - Radius - Number
1440
+
1441
+ Pie / Dougnut Chart:
1442
+
1443
+ SELECT label, measure FROM table
1444
+
1445
+ - Label - Category
1446
+ - Measure - Number
1447
+ `;
1448
+ function On({
1449
+ open: s,
1450
+ setOpen: n,
1451
+ userInput: a,
1452
+ setUserInput: t,
1453
+ triggerAIRun: i,
1454
+ setTriggerAIRun: o
1455
+ }) {
1456
+ const l = $e(null), c = $e(null), { authToken: h } = es(), [g, m] = T(!1), u = r((y) => y.actions.setCardSql), N = k((y) => y.dashboard.baseQueries), d = r((y) => y.actions.setRunSql), x = r((y) => y.actions.setCardType), [f, w] = T([]), b = r((y) => y.currentColumns), L = r((y) => y.card.sql), C = r((y) => y.selectedTableName), O = `
1457
+ ${a}
1458
+
1459
+ Database Query Dialect: ${C === "api" || C === "s3" ? "DuckDb" : ""}
1460
+ Table Name: ${C}
1461
+ Table Columns: ${b == null ? void 0 : b.map((y) => `${y.column_name} | ${y.data_type}`).join(", ")}
1462
+ User SQL: ${L}
1463
+ ${N && `Base Queries: ${JSON.stringify(N)} `}`, j = ` When the user asks for a specific chart please use the following query structure to generate the chart query. Do not make up the column names. Use only the table columns provided above for the query. Replace x-axis, y-axis, and lables with the appropriate column names.
1464
+ Visual Query Syntax: ${Fn}`, { data: F, isLoading: A, isFetching: q, isError: P, refetch: $ } = Ce({
1465
+ queryKey: ["ai-query"],
1466
+ queryFn: () => ze(
1467
+ "https://semaphor.cloud/api/v1/ai",
1468
+ (h == null ? void 0 : h.accessToken) || "",
1469
+ {
1470
+ user_content: `userContent: ${O} ${g ? j : ""}`
1471
+ }
1472
+ ),
1473
+ enabled: !1
1474
+ // Do not run by default.
1475
+ });
1476
+ function G(y) {
1477
+ if (y.toLowerCase().includes("bar"))
1478
+ x("bar");
1479
+ else if (y.toLowerCase().includes("line"))
1480
+ x("line");
1481
+ else if (y.toLowerCase().includes("bubble"))
1482
+ x("bubble");
1483
+ else if (y.toLowerCase().includes("scatter"))
1484
+ x("scatter");
1485
+ else if (y.toLowerCase().includes("stacked"))
1486
+ x("stackedBar");
1487
+ else if (y.toLowerCase().includes("pie"))
1488
+ x("pie");
1489
+ else if (y.toLowerCase().includes("donut") || y.toLowerCase().includes("doughnut"))
1490
+ x("doughnut");
1491
+ else if (y.toLowerCase().includes("radar"))
1492
+ x("radar");
1493
+ else
1494
+ return x("bar"), !1;
1495
+ return !0;
1496
+ }
1497
+ K(() => {
1498
+ F && w((y) => [...y, { role: "ai", content: F.response }]);
1499
+ }, [F]), K(() => {
1500
+ const y = setTimeout(() => {
1501
+ var v;
1502
+ c.current && (c.current.scroll({
1503
+ top: c.current.scrollHeight,
1504
+ behavior: "smooth"
1505
+ }), (v = l.current) == null || v.focus());
1506
+ }, 100);
1507
+ return () => clearTimeout(y);
1508
+ }, [f]);
1509
+ function D() {
1510
+ a && (w((y) => [...y, { role: "user", content: a }]), G(a) && m(!0), t(""), $());
1511
+ }
1512
+ K(() => {
1513
+ i && (D(), o(!1));
1514
+ }, [i, o]);
1515
+ const te = {
1516
+ //seleect a darker color
1517
+ // color: '#000',
1518
+ fontFamily: "Arial, sans-serif",
1519
+ lineHeight: 1.6,
1520
+ fontSize: 15,
1521
+ // padding: '5px',
1522
+ width: "100%"
1523
+ }, Q = {
1524
+ // background: '#f6f8fa',
1525
+ // color: '#000',
1526
+ fontFamily: "monospace",
1527
+ fontSize: 14,
1528
+ lineHeight: 1.6
1529
+ // padding: 20,
1530
+ }, ee = {
1531
+ // color: '#000',
1532
+ fontFamily: "Arial, sans-serif",
1533
+ lineHeight: 1.6,
1534
+ fontSize: 15,
1535
+ padding: "2px 0",
1536
+ // add a bit of left margin to make it look nice
1537
+ marginLeft: 20,
1538
+ // add bullet points for unordered lists
1539
+ listStyleType: "disc"
1540
+ }, Z = {
1541
+ // Override how paragraphs are rendered
1542
+ p: ({ node: y, ...v }) => /* @__PURE__ */ e.jsx("p", { style: te, ...v }),
1543
+ code: ({ node: y, ...v }) => /* @__PURE__ */ e.jsx("code", { className: "rounded-sm bg-muted px-2 py-1 text-sm", ...v }),
1544
+ pre: ({ node: y, ...v }) => /* @__PURE__ */ e.jsxs("pre", { className: "space-y-2 rounded-sm bg-muted/50 p-3", style: Q, children: [
1545
+ /* @__PURE__ */ e.jsx("code", { className: "whitespace-normal text-sm", children: v.children }),
1546
+ /* @__PURE__ */ e.jsxs("div", { className: "flex justify-start gap-2", children: [
1547
+ /* @__PURE__ */ e.jsx(z, { onClick: J, size: "sm", variant: "outline", children: /* @__PURE__ */ e.jsx(ta, {}) }),
1548
+ /* @__PURE__ */ e.jsx(
1549
+ z,
1550
+ {
1551
+ onClick: (M) => {
1552
+ const H = J(M);
1553
+ H && (n(!1), u(H), d(!0));
1554
+ },
1555
+ size: "sm",
1556
+ variant: "outline",
1557
+ children: /* @__PURE__ */ e.jsx(st, {})
1558
+ }
1559
+ )
1560
+ ] })
1561
+ ] }),
1562
+ li: ({ node: y, ...v }) => /* @__PURE__ */ e.jsx("li", { style: ee, ...v })
1563
+ // You can add more overrides for other elements like h1, h2, etc.
1564
+ };
1565
+ function J(y) {
1566
+ const v = y.currentTarget.closest("pre");
1567
+ if (!v)
1568
+ return;
1569
+ const M = v.textContent || v.innerText;
1570
+ return navigator.clipboard.writeText(M).then(() => console.log("Text copied to clipboard")).catch((H) => console.error("Error in copying text: ", H)), M;
1571
+ }
1572
+ function I() {
1573
+ return f == null ? void 0 : f.map((y, v) => y.role === "user" ? /* @__PURE__ */ e.jsxs(
1574
+ "div",
1575
+ {
1576
+ className: "flex items-start rounded-md bg-muted p-3 text-sm",
1577
+ children: [
1578
+ /* @__PURE__ */ e.jsx(gn, { className: "mr-2 h-5 w-5" }),
1579
+ /* @__PURE__ */ e.jsx("div", { children: y.content })
1580
+ ]
1581
+ },
1582
+ v
1583
+ ) : y.role === "ai" ? /* @__PURE__ */ e.jsx(
1584
+ et,
1585
+ {
1586
+ className: "w-full overflow-auto py-1",
1587
+ components: Z,
1588
+ children: F == null ? void 0 : F.response.replace(/DuckDB/gi, "Semaphor")
1589
+ },
1590
+ v
1591
+ ) : /* @__PURE__ */ e.jsx("div", {}, v));
1592
+ }
1593
+ return /* @__PURE__ */ e.jsxs(xs, { open: s, onOpenChange: n, children: [
1594
+ /* @__PURE__ */ e.jsx(ps, { asChild: !0, children: /* @__PURE__ */ e.jsx(
1595
+ z,
1596
+ {
1597
+ size: "sm",
1598
+ className: "w-full justify-start border font-normal text-muted-foreground focus-visible:ring-0 focus-visible:ring-offset-0",
1599
+ variant: "secondary",
1600
+ children: "Type your question here..."
1601
+ }
1602
+ ) }),
1603
+ /* @__PURE__ */ e.jsxs(
1604
+ fs,
1605
+ {
1606
+ className: "flex flex-col justify-between overflow-auto sm:max-w-[425px] md:max-h-[625px] md:min-w-[625px]",
1607
+ children: [
1608
+ /* @__PURE__ */ e.jsxs(gs, { children: [
1609
+ /* @__PURE__ */ e.jsx(js, { children: "Assistant" }),
1610
+ /* @__PURE__ */ e.jsx(bs, { children: "What can I help you with?" })
1611
+ ] }),
1612
+ /* @__PURE__ */ e.jsx(
1613
+ "div",
1614
+ {
1615
+ ref: c,
1616
+ className: "h-[625px] w-full overflow-auto border-t border-t-muted",
1617
+ children: /* @__PURE__ */ e.jsx("div", { className: "space-y-4 py-2 pr-3", role: "messages", children: I() })
1618
+ }
1619
+ ),
1620
+ /* @__PURE__ */ e.jsx(
1621
+ "div",
1622
+ {
1623
+ children: /* @__PURE__ */ e.jsxs("div", { className: "flex w-full items-center rounded-md border", children: [
1624
+ /* @__PURE__ */ e.jsx(
1625
+ na,
1626
+ {
1627
+ autoFocus: !0,
1628
+ ref: l,
1629
+ onKeyDown: (y) => {
1630
+ y.key === "Enter" && !y.shiftKey && (y.preventDefault(), t(""), D());
1631
+ },
1632
+ placeholder: "Type your question here...",
1633
+ onFocus: (y) => {
1634
+ const v = y.target, M = v.value.length;
1635
+ v.setSelectionRange(M, M);
1636
+ },
1637
+ className: Y(
1638
+ "max-h-10 min-h-7 resize-none border-none focus-visible:ring-0 focus-visible:ring-ring focus-visible:ring-offset-0"
1639
+ ),
1640
+ disabled: A || q,
1641
+ value: a,
1642
+ onChange: (y) => t(y.target.value)
1643
+ }
1644
+ ),
1645
+ " ",
1646
+ /* @__PURE__ */ e.jsx(
1647
+ z,
1648
+ {
1649
+ className: "h-8",
1650
+ size: "sm",
1651
+ variant: "ghost",
1652
+ onClick: D,
1653
+ children: !A && !q ? /* @__PURE__ */ e.jsx(Za, {}) : /* @__PURE__ */ e.jsx(Be, { className: "mr-2 h-4 w-4 animate-spin text-foreground/50" })
1654
+ }
1655
+ )
1656
+ ] })
1657
+ }
1658
+ )
1659
+ ]
1660
+ }
1661
+ )
1662
+ ] });
1663
+ }
1664
+ var fa = {
1665
+ color: void 0,
1666
+ size: void 0,
1667
+ className: void 0,
1668
+ style: void 0,
1669
+ attr: void 0
1670
+ }, Hs = me.createContext && /* @__PURE__ */ me.createContext(fa), Mn = ["attr", "size", "title"];
1671
+ function Tn(s, n) {
1672
+ if (s == null)
1673
+ return {};
1674
+ var a = An(s, n), t, i;
1675
+ if (Object.getOwnPropertySymbols) {
1676
+ var o = Object.getOwnPropertySymbols(s);
1677
+ for (i = 0; i < o.length; i++)
1678
+ t = o[i], !(n.indexOf(t) >= 0) && Object.prototype.propertyIsEnumerable.call(s, t) && (a[t] = s[t]);
1679
+ }
1680
+ return a;
1681
+ }
1682
+ function An(s, n) {
1683
+ if (s == null)
1684
+ return {};
1685
+ var a = {}, t = Object.keys(s), i, o;
1686
+ for (o = 0; o < t.length; o++)
1687
+ i = t[o], !(n.indexOf(i) >= 0) && (a[i] = s[i]);
1688
+ return a;
1689
+ }
1690
+ function Xe() {
1691
+ return Xe = Object.assign ? Object.assign.bind() : function(s) {
1692
+ for (var n = 1; n < arguments.length; n++) {
1693
+ var a = arguments[n];
1694
+ for (var t in a)
1695
+ Object.prototype.hasOwnProperty.call(a, t) && (s[t] = a[t]);
1696
+ }
1697
+ return s;
1698
+ }, Xe.apply(this, arguments);
1699
+ }
1700
+ function Bs(s, n) {
1701
+ var a = Object.keys(s);
1702
+ if (Object.getOwnPropertySymbols) {
1703
+ var t = Object.getOwnPropertySymbols(s);
1704
+ n && (t = t.filter(function(i) {
1705
+ return Object.getOwnPropertyDescriptor(s, i).enumerable;
1706
+ })), a.push.apply(a, t);
1707
+ }
1708
+ return a;
1709
+ }
1710
+ function Ze(s) {
1711
+ for (var n = 1; n < arguments.length; n++) {
1712
+ var a = arguments[n] != null ? arguments[n] : {};
1713
+ n % 2 ? Bs(Object(a), !0).forEach(function(t) {
1714
+ En(s, t, a[t]);
1715
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(s, Object.getOwnPropertyDescriptors(a)) : Bs(Object(a)).forEach(function(t) {
1716
+ Object.defineProperty(s, t, Object.getOwnPropertyDescriptor(a, t));
1717
+ });
1718
+ }
1719
+ return s;
1720
+ }
1721
+ function En(s, n, a) {
1722
+ return n = Ln(n), n in s ? Object.defineProperty(s, n, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : s[n] = a, s;
1723
+ }
1724
+ function Ln(s) {
1725
+ var n = Dn(s, "string");
1726
+ return typeof n == "symbol" ? n : String(n);
1727
+ }
1728
+ function Dn(s, n) {
1729
+ if (typeof s != "object" || s === null)
1730
+ return s;
1731
+ var a = s[Symbol.toPrimitive];
1732
+ if (a !== void 0) {
1733
+ var t = a.call(s, n || "default");
1734
+ if (typeof t != "object")
1735
+ return t;
1736
+ throw new TypeError("@@toPrimitive must return a primitive value.");
1737
+ }
1738
+ return (n === "string" ? String : Number)(s);
1739
+ }
1740
+ function ga(s) {
1741
+ return s && s.map((n, a) => /* @__PURE__ */ me.createElement(n.tag, Ze({
1742
+ key: a
1743
+ }, n.attr), ga(n.child)));
1744
+ }
1745
+ function fe(s) {
1746
+ return (n) => /* @__PURE__ */ me.createElement(In, Xe({
1747
+ attr: Ze({}, s.attr)
1748
+ }, n), ga(s.child));
1749
+ }
1750
+ function In(s) {
1751
+ var n = (a) => {
1752
+ var {
1753
+ attr: t,
1754
+ size: i,
1755
+ title: o
1756
+ } = s, l = Tn(s, Mn), c = i || a.size || "1em", h;
1757
+ return a.className && (h = a.className), s.className && (h = (h ? h + " " : "") + s.className), /* @__PURE__ */ me.createElement("svg", Xe({
1758
+ stroke: "currentColor",
1759
+ fill: "currentColor",
1760
+ strokeWidth: "0"
1761
+ }, a.attr, t, l, {
1762
+ className: h,
1763
+ style: Ze(Ze({
1764
+ color: s.color || a.color
1765
+ }, a.style), s.style),
1766
+ height: c,
1767
+ width: c,
1768
+ xmlns: "http://www.w3.org/2000/svg"
1769
+ }), o && /* @__PURE__ */ me.createElement("title", null, o), s.children);
1770
+ };
1771
+ return Hs !== void 0 ? /* @__PURE__ */ me.createElement(Hs.Consumer, null, (a) => n(a)) : n(fa);
1772
+ }
1773
+ function qn(s) {
1774
+ return fe({ tag: "svg", attr: { viewBox: "0 0 448 512" }, child: [{ tag: "path", attr: { d: "M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z" }, child: [] }] })(s);
1775
+ }
1776
+ function Vn() {
1777
+ const { theme: s } = at(), n = $e(), a = $e(), [t, i] = T(!1), [o, l] = T(!1), [c, h] = T(!1), [g, m] = T(""), [u, N] = T(!1), { authToken: d } = es();
1778
+ k((p) => p.selectedSheetId);
1779
+ const x = k((p) => p.dashboard.baseQueries), f = r((p) => p.card), w = k((p) => p.theme), b = r((p) => p.isShowingVisual), L = r(
1780
+ (p) => p.selectedConnectionId
1781
+ ), C = r(
1782
+ (p) => p.selectedDatabaseName
1783
+ ), O = r(
1784
+ (p) => p.selectedSchemaName
1785
+ );
1786
+ k(
1787
+ (p) => p.actions.updateFrameCard
1788
+ );
1789
+ const j = r((p) => p.selectedTableName), F = r((p) => p.card.sql), A = r((p) => p.card.python), q = tt(F, x), P = r((p) => p.selectedConnectionId), $ = r((p) => p.frame), G = r((p) => p.filterValues), D = r((p) => p.applyFilters), {
1790
+ setCardCustomCfg: te,
1791
+ setQueryResultColumns: Q,
1792
+ setFilterValues: ee,
1793
+ setCardSql: Z,
1794
+ setCardPython: J,
1795
+ setQueryError: I,
1796
+ setPythonStdOut: y,
1797
+ setCardPreferences: v
1798
+ } = r((p) => p.actions), M = r((p) => p.onSave), H = r(
1799
+ (p) => p.actions.setApplyFilters
1800
+ ), ue = r((p) => p.onClose), se = r((p) => p.actions.setCardData), ge = r((p) => p.actions.setSqlGen), je = r((p) => p.runSql), be = r((p) => p.actions.setRunSql), xe = r(
1801
+ (p) => p.actions.setIsSqlRunning
1802
+ ), {
1803
+ data: U,
1804
+ isLoading: ne,
1805
+ isFetching: le,
1806
+ isSuccess: ye,
1807
+ isError: re,
1808
+ error: Ie,
1809
+ status: ss,
1810
+ refetch: ve
1811
+ } = Ce({
1812
+ queryKey: [q, A],
1813
+ queryFn: () => aa(
1814
+ "https://semaphor.cloud/api/v1/query",
1815
+ (d == null ? void 0 : d.accessToken) || "",
1816
+ {
1817
+ connection_id: P,
1818
+ sql: q,
1819
+ python: A === Ls ? "" : A,
1820
+ active_filters: D ? G : []
1821
+ }
1822
+ ),
1823
+ enabled: !1,
1824
+ retry: !1
1825
+ });
1826
+ K(() => {
1827
+ if (U && (se(U.records), U.rowLimitExceeded && cs.error("Row limit (10,000) exceeded. Refine your query.", {
1828
+ position: "top-center",
1829
+ richColors: !0
1830
+ }), y((U == null ? void 0 : U.output) || ""), U.records.length > 0)) {
1831
+ const { dimensionKeys: p } = hs(U.records);
1832
+ Q(p);
1833
+ }
1834
+ }, [U, se, Q, y]), K(() => {
1835
+ je && (ve(), be(!1));
1836
+ }, [je, ve, be]), K(() => {
1837
+ (ne || le) && xe(!0), (re || ye) && xe(!1), re ? (I(Ie.message), se([]), Q([]), y("")) : I("");
1838
+ }, [
1839
+ ne,
1840
+ le,
1841
+ U,
1842
+ y,
1843
+ re,
1844
+ ye,
1845
+ xe,
1846
+ se,
1847
+ Q,
1848
+ I,
1849
+ Ie
1850
+ ]);
1851
+ function Je() {
1852
+ Z(""), se([]), ge({}), te(""), v({});
1853
+ }
1854
+ const qe = (p) => {
1855
+ a.current = p;
1856
+ };
1857
+ function S() {
1858
+ let p = F;
1859
+ F && !F.includes("{{") && (p = Sn(F), Z(p));
1860
+ const ie = {
1861
+ ...f,
1862
+ lastSelectedSchema: O,
1863
+ lastSelectedDatabase: C,
1864
+ lastSelectedTable: j,
1865
+ connectionId: L,
1866
+ type: b ? f.type : "table",
1867
+ sql: p,
1868
+ customCfg: b ? f.customCfg : null
1869
+ }, Ve = $.cards.map(
1870
+ (Ne) => Ne.id === f.id ? ie : Ne
1871
+ );
1872
+ M == null || M({
1873
+ ...$,
1874
+ cards: Ve
1875
+ });
1876
+ }
1877
+ function Fa() {
1878
+ ue == null || ue();
1879
+ }
1880
+ function Oa(p) {
1881
+ const ie = getComputedStyle(
1882
+ document.documentElement
1883
+ ).getPropertyValue(p);
1884
+ return Ma(ie);
1885
+ }
1886
+ function Ma(p) {
1887
+ const [ie, Ve, Ne] = p.split(" "), W = parseFloat(ie), Ea = parseFloat(Ve), La = parseFloat(Ne), Da = Ea / 100, Ts = La / 100, pe = (1 - Math.abs(2 * Ts - 1)) * Da, ke = pe * (1 - Math.abs(W / 60 % 2 - 1)), as = Ts - pe / 2;
1888
+ let oe = 0, ce = 0, de = 0;
1889
+ 0 <= W && W < 60 ? (oe = pe, ce = ke, de = 0) : 60 <= W && W < 120 ? (oe = ke, ce = pe, de = 0) : 120 <= W && W < 180 ? (oe = 0, ce = pe, de = ke) : 180 <= W && W < 240 ? (oe = 0, ce = ke, de = pe) : 240 <= W && W < 300 ? (oe = ke, ce = 0, de = pe) : 300 <= W && W < 360 && (oe = pe, ce = 0, de = ke), oe = Math.round((oe + as) * 255), ce = Math.round((ce + as) * 255), de = Math.round((de + as) * 255);
1890
+ const ts = (Ia) => {
1891
+ const ns = Ia.toString(16);
1892
+ return ns.length == 1 ? "0" + ns : ns;
1893
+ };
1894
+ return `#${ts(oe)}${ts(ce)}${ts(de)}`;
1895
+ }
1896
+ K(() => {
1897
+ const p = n.current, ie = a.current;
1898
+ if (p) {
1899
+ const Ve = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light", Ne = w === "system" ? Ve : w;
1900
+ p.editor.defineTheme("default", {
1901
+ // base: theme === 'light' ? 'hc-light' : 'vs-dark',
1902
+ base: Ne === "light" ? "vs" : "vs-dark",
1903
+ inherit: !0,
1904
+ rules: [],
1905
+ colors: {
1906
+ // 'editor.background': activeTheme === 'light' ? '#ffffff' : '#020817',
1907
+ "editor.background": Ne === "light" ? "#ffffff" : Oa("--background")
1908
+ }
1909
+ }), p.editor.setTheme("default");
1910
+ }
1911
+ return ie && p && ie.addCommand(
1912
+ p.KeyMod.Shift | p.KeyCode.Enter,
1913
+ function() {
1914
+ return console.log("Executing query..."), ve(), !1;
1915
+ }
1916
+ ), () => {
1917
+ };
1918
+ }, [s, w, n.current]);
1919
+ function Ms(p) {
1920
+ n.current = p;
1921
+ }
1922
+ function Ta() {
1923
+ return /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
1924
+ o && /* @__PURE__ */ e.jsx(
1925
+ "div",
1926
+ {
1927
+ className: "xbg-yellow-100 relative flex w-1/3 min-w-0 grow overflow-hidden border-l p-1 text-xs",
1928
+ role: "editor-filter-container",
1929
+ children: /* @__PURE__ */ e.jsxs("div", { className: "w-[99%]", children: [
1930
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-2 pt-3", children: [
1931
+ /* @__PURE__ */ e.jsx(
1932
+ wn,
1933
+ {
1934
+ checked: D,
1935
+ onCheckedChange: () => H(!D),
1936
+ text: "Apply Filters"
1937
+ }
1938
+ ),
1939
+ /* @__PURE__ */ e.jsx(zn, {}),
1940
+ G && o && /* @__PURE__ */ e.jsx(
1941
+ _e,
1942
+ {
1943
+ onClick: () => l(!1),
1944
+ className: "bg-background/50 text-foreground/50 hover:cursor-pointer hover:text-foreground"
1945
+ }
1946
+ )
1947
+ ] }),
1948
+ /* @__PURE__ */ e.jsx(
1949
+ Re,
1950
+ {
1951
+ theme: "default",
1952
+ onChange: (p) => {
1953
+ if (p)
1954
+ try {
1955
+ JSON.parse(p), ee(JSON.parse(p));
1956
+ } catch {
1957
+ }
1958
+ },
1959
+ defaultLanguage: "json",
1960
+ className: "mt-1 min-h-[220px]",
1961
+ value: JSON.stringify(G, null, 2),
1962
+ options: {
1963
+ readOnly: !0,
1964
+ minimap: {
1965
+ enabled: !1
1966
+ },
1967
+ lineNumbers: "off",
1968
+ glyphMargin: !1,
1969
+ wordWrap: "on",
1970
+ scrollbar: {
1971
+ verticalScrollbarSize: 0,
1972
+ horizontalScrollbarSize: 0
1973
+ },
1974
+ fontSize: 12,
1975
+ renderLineHighlight: "none"
1976
+ }
1977
+ }
1978
+ )
1979
+ ] })
1980
+ }
1981
+ ),
1982
+ G && !o && /* @__PURE__ */ e.jsx(
1983
+ oa,
1984
+ {
1985
+ onClick: () => l(!0),
1986
+ className: Y(
1987
+ "absolute bottom-4 right-6 h-3 w-3 text-foreground/50 hover:cursor-pointer hover:text-foreground",
1988
+ {
1989
+ "font-bold text-red-800": D
1990
+ }
1991
+ )
1992
+ }
1993
+ )
1994
+ ] });
1995
+ }
1996
+ function Aa() {
1997
+ return /* @__PURE__ */ e.jsxs(
1998
+ ms,
1999
+ {
2000
+ className: "flex grow pb-1",
2001
+ direction: "vertical",
2002
+ role: "editor-resizable-group",
2003
+ children: [
2004
+ /* @__PURE__ */ e.jsxs(
2005
+ Fe,
2006
+ {
2007
+ id: "1",
2008
+ order: 1,
2009
+ defaultSize: t ? 20 : 100,
2010
+ className: "relative flex grow",
2011
+ children: [
2012
+ /* @__PURE__ */ e.jsx(
2013
+ "div",
2014
+ {
2015
+ role: "sql-container",
2016
+ className: "relative flex w-[99%]",
2017
+ children: /* @__PURE__ */ e.jsx(
2018
+ Re,
2019
+ {
2020
+ theme: "default",
2021
+ className: "pt-3",
2022
+ onChange: (p) => {
2023
+ Z(p);
2024
+ },
2025
+ value: F,
2026
+ options: {
2027
+ minimap: {
2028
+ enabled: !1
2029
+ },
2030
+ wordWrap: "on",
2031
+ scrollbar: {
2032
+ verticalScrollbarSize: 0,
2033
+ horizontalScrollbarSize: 0
2034
+ },
2035
+ fontSize: 14,
2036
+ renderLineHighlight: "none"
2037
+ },
2038
+ defaultLanguage: "sql",
2039
+ defaultValue: "SELECT * FROM table",
2040
+ beforeMount: Ms,
2041
+ onMount: qe
2042
+ }
2043
+ )
2044
+ }
2045
+ ),
2046
+ t && /* @__PURE__ */ e.jsx("code", { className: "absolute right-6 top-3 text-sm text-muted-foreground/70", children: "sql" })
2047
+ ]
2048
+ }
2049
+ ),
2050
+ t && /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
2051
+ /* @__PURE__ */ e.jsx(us, { withHandle: !0, className: "border" }),
2052
+ /* @__PURE__ */ e.jsxs(
2053
+ Fe,
2054
+ {
2055
+ id: "2",
2056
+ order: 2,
2057
+ defaultSize: 80,
2058
+ className: "relative flex grow",
2059
+ children: [
2060
+ /* @__PURE__ */ e.jsx(
2061
+ "div",
2062
+ {
2063
+ role: "python-container",
2064
+ className: "relative flex w-[99%] pt-0",
2065
+ children: /* @__PURE__ */ e.jsx(
2066
+ Re,
2067
+ {
2068
+ className: "pt-3",
2069
+ theme: "default",
2070
+ onChange: (p) => {
2071
+ J(p && p.trim() || "");
2072
+ },
2073
+ value: A || Ls,
2074
+ options: {
2075
+ minimap: {
2076
+ enabled: !1
2077
+ },
2078
+ wordWrap: "on",
2079
+ scrollbar: {
2080
+ verticalScrollbarSize: 0,
2081
+ horizontalScrollbarSize: 0
2082
+ },
2083
+ fontSize: 14,
2084
+ renderLineHighlight: "none"
2085
+ },
2086
+ defaultLanguage: "python",
2087
+ beforeMount: Ms,
2088
+ onMount: qe
2089
+ }
2090
+ )
2091
+ }
2092
+ ),
2093
+ /* @__PURE__ */ e.jsx("code", { className: "absolute right-6 top-3 text-sm text-muted-foreground/70", children: "python" })
2094
+ ]
2095
+ }
2096
+ )
2097
+ ] })
2098
+ ]
2099
+ }
2100
+ );
2101
+ }
2102
+ return (
2103
+ // This is a tricky css, the pt-8 is to make sure the editor doesn't slide under the header
2104
+ /* @__PURE__ */ e.jsxs(
2105
+ "section",
2106
+ {
2107
+ role: "editor-section",
2108
+ className: "flex grow flex-col justify-end",
2109
+ children: [
2110
+ /* @__PURE__ */ e.jsxs(
2111
+ "div",
2112
+ {
2113
+ role: "sql-editor",
2114
+ className: "relative flex grow justify-between overflow-y-scroll",
2115
+ children: [
2116
+ Aa(),
2117
+ Ta()
2118
+ ]
2119
+ }
2120
+ ),
2121
+ /* @__PURE__ */ e.jsxs(
2122
+ "div",
2123
+ {
2124
+ role: "editor-controls",
2125
+ className: "item-center flex flex-wrap justify-between gap-2 px-6 py-4",
2126
+ children: [
2127
+ /* @__PURE__ */ e.jsxs("div", { className: "flex grow items-center gap-2", children: [
2128
+ /* @__PURE__ */ e.jsxs(
2129
+ z,
2130
+ {
2131
+ title: "Shift + Enter",
2132
+ disabled: ne || le,
2133
+ onClick: () => {
2134
+ ve();
2135
+ },
2136
+ className: "shrink-0",
2137
+ size: "sm",
2138
+ variant: "outline",
2139
+ children: [
2140
+ ne || le ? /* @__PURE__ */ e.jsx(Be, { className: "mr-2 h-4 w-4 animate-spin text-foreground/50" }) : /* @__PURE__ */ e.jsx(on, { className: "mr-2 h-4 w-4" }),
2141
+ "Run"
2142
+ ]
2143
+ }
2144
+ ),
2145
+ re && /* @__PURE__ */ e.jsx(
2146
+ kn,
2147
+ {
2148
+ error: Ie.message,
2149
+ setShowAIDialog: h,
2150
+ setTriggerAIRun: N,
2151
+ setUserInputforAI: m
2152
+ }
2153
+ ),
2154
+ /* @__PURE__ */ e.jsxs(
2155
+ z,
2156
+ {
2157
+ onClick: Je,
2158
+ className: "",
2159
+ size: "sm",
2160
+ variant: "outline",
2161
+ children: [
2162
+ /* @__PURE__ */ e.jsx(Yt, { className: "mr-2 size-4" }),
2163
+ "Clear"
2164
+ ]
2165
+ }
2166
+ ),
2167
+ /* @__PURE__ */ e.jsx(
2168
+ Xs,
2169
+ {
2170
+ pressed: t,
2171
+ onPressedChange: (p) => i(p),
2172
+ className: "",
2173
+ size: "sm",
2174
+ variant: "outline",
2175
+ children: /* @__PURE__ */ e.jsx(qn, { className: "size-4 text-foreground/70" })
2176
+ }
2177
+ ),
2178
+ /* @__PURE__ */ e.jsx(
2179
+ On,
2180
+ {
2181
+ open: c,
2182
+ setOpen: h,
2183
+ userInput: g,
2184
+ triggerAIRun: u,
2185
+ setTriggerAIRun: N,
2186
+ setUserInput: (p) => m(p)
2187
+ }
2188
+ )
2189
+ ] }),
2190
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-end gap-2", children: [
2191
+ /* @__PURE__ */ e.jsxs(
2192
+ z,
2193
+ {
2194
+ onClick: S,
2195
+ size: "sm",
2196
+ variant: "outline",
2197
+ children: [
2198
+ /* @__PURE__ */ e.jsx(nt, { className: "mr-2 size-4 font-bold text-green-600" }),
2199
+ "Accept"
2200
+ ]
2201
+ }
2202
+ ),
2203
+ /* @__PURE__ */ e.jsxs(
2204
+ z,
2205
+ {
2206
+ onClick: Fa,
2207
+ className: "w-full",
2208
+ size: "sm",
2209
+ variant: "outline",
2210
+ children: [
2211
+ /* @__PURE__ */ e.jsx(_e, { className: "mr-2 size-4" }),
2212
+ "Close"
2213
+ ]
2214
+ }
2215
+ )
2216
+ ] })
2217
+ ]
2218
+ }
2219
+ )
2220
+ ]
2221
+ }
2222
+ )
2223
+ );
2224
+ }
2225
+ function Rn({ data: s }) {
2226
+ var l;
2227
+ const [n, a] = me.useState([]), i = Object.keys(s[0]).map((c) => ({
2228
+ // header: key,
2229
+ accessorKey: c,
2230
+ header: ({ column: h }) => {
2231
+ const g = h.getIsSorted();
2232
+ return /* @__PURE__ */ e.jsx("div", { className: "flex gap-2", children: /* @__PURE__ */ e.jsxs(
2233
+ "div",
2234
+ {
2235
+ className: "flex cursor-pointer items-center",
2236
+ onClick: () => h.toggleSorting(h.getIsSorted() === "asc"),
2237
+ children: [
2238
+ c,
2239
+ g === "asc" ? /* @__PURE__ */ e.jsx(lt, { className: "ml-2 h-5 w-5" }) : g === "desc" ? /* @__PURE__ */ e.jsx(rt, { className: "ml-2 h-5 w-5" }) : null
2240
+ ]
2241
+ }
2242
+ ) });
2243
+ }
2244
+ })), o = it({
2245
+ data: s,
2246
+ columns: i,
2247
+ getCoreRowModel: mt(),
2248
+ getPaginationRowModel: ut(),
2249
+ onSortingChange: a,
2250
+ getSortedRowModel: xt(),
2251
+ manualPagination: !0,
2252
+ state: {
2253
+ sorting: n
2254
+ }
2255
+ });
2256
+ return /* @__PURE__ */ e.jsxs(ot, { children: [
2257
+ /* @__PURE__ */ e.jsx(ct, { children: o.getHeaderGroups().map((c) => /* @__PURE__ */ e.jsx(ls, { children: c.headers.map((h) => /* @__PURE__ */ e.jsx(dt, { className: "sticky top-0 bg-muted", children: h.isPlaceholder ? null : Ds(
2258
+ h.column.columnDef.header,
2259
+ h.getContext()
2260
+ ) }, h.id)) }, c.id)) }),
2261
+ /* @__PURE__ */ e.jsx(ht, { children: (l = o.getRowModel().rows) != null && l.length ? o.getRowModel().rows.map((c) => /* @__PURE__ */ e.jsx(
2262
+ ls,
2263
+ {
2264
+ className: "whitespace-nowrap py-2",
2265
+ "data-state": c.getIsSelected() && "selected",
2266
+ children: c.getVisibleCells().map((h) => /* @__PURE__ */ e.jsx(Is, { children: Ds(h.column.columnDef.cell, h.getContext()) }, h.id))
2267
+ },
2268
+ c.id
2269
+ )) : /* @__PURE__ */ e.jsx(ls, { children: /* @__PURE__ */ e.jsx(Is, { colSpan: i.length, className: "h-24 text-center", children: "No results." }) }) })
2270
+ ] });
2271
+ }
2272
+ function ja({
2273
+ // card,
2274
+ className: s,
2275
+ ...n
2276
+ }) {
2277
+ var l;
2278
+ me.useState(0);
2279
+ const a = k((c) => c.themeStyle), t = r((c) => c.card), i = r((c) => c.actions.setCard);
2280
+ if (K(() => {
2281
+ }, [
2282
+ t.data,
2283
+ t.type,
2284
+ t.cfg,
2285
+ t.customCfg,
2286
+ a,
2287
+ t.preferences
2288
+ ]), !t.id)
2289
+ return null;
2290
+ let o;
2291
+ return t.data && t.data.length > 0 && (o = la({
2292
+ data: t.data,
2293
+ cardType: t.type,
2294
+ cfg: t.cfg,
2295
+ customCfg: t.customCfg,
2296
+ preferences: t.preferences
2297
+ })), /* @__PURE__ */ e.jsxs(
2298
+ pt,
2299
+ {
2300
+ role: "editor-visual-card",
2301
+ className: Y("relative flex h-full flex-col rounded-none", s),
2302
+ ...n,
2303
+ children: [
2304
+ /* @__PURE__ */ e.jsxs(ft, { className: "py-4", children: [
2305
+ /* @__PURE__ */ e.jsx(
2306
+ qs,
2307
+ {
2308
+ text: t.title,
2309
+ onSave: (c) => i({ ...t, title: c }),
2310
+ children: /* @__PURE__ */ e.jsx("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ e.jsx(gt, { className: "text-base", children: t.title }) })
2311
+ },
2312
+ t.title
2313
+ ),
2314
+ /* @__PURE__ */ e.jsx(
2315
+ qs,
2316
+ {
2317
+ text: t.description || "",
2318
+ onSave: (c) => i({ ...t, description: c }),
2319
+ children: /* @__PURE__ */ e.jsxs(jt, { children: [
2320
+ " ",
2321
+ t.description
2322
+ ] })
2323
+ },
2324
+ t.description
2325
+ )
2326
+ ] }),
2327
+ /* @__PURE__ */ e.jsxs(bt, { className: "flex grow flex-col pb-3", children: [
2328
+ t.type !== "table" && o && // <ChartJsVisual key={visualKey} cfg={cfg} />
2329
+ /* @__PURE__ */ e.jsx(
2330
+ yt,
2331
+ {
2332
+ cfg: o
2333
+ },
2334
+ JSON.stringify(o) + JSON.stringify(t.preferences) + ((l = t == null ? void 0 : t.preferences) == null ? void 0 : l.customVisualCode)
2335
+ ),
2336
+ t.type === "table" && t.data && t.data.length > 0 && // All of the below css classes are #IMPORTANT for the table to scroll properly
2337
+ /* @__PURE__ */ e.jsx(vt, { className: "flex min-h-0 flex-1 grow basis-0", children: /* @__PURE__ */ e.jsx(Nt, { card: t, data: t == null ? void 0 : t.data }) })
2338
+ ] })
2339
+ ]
2340
+ }
2341
+ );
2342
+ }
2343
+ function _n() {
2344
+ const [s, n] = T(!1), [a, t] = T(""), [i, o] = T(""), [l, c] = T(""), [h, g] = T(""), m = r((C) => C.card), u = r(
2345
+ (C) => C.card.customCfg
2346
+ ), { setCardCustomCfg: N, setCustomVisualCode: d } = Ct();
2347
+ function x(C) {
2348
+ var F, A;
2349
+ const O = {
2350
+ ...C,
2351
+ data: {
2352
+ ...C == null ? void 0 : C.data,
2353
+ datasets: (A = (F = C == null ? void 0 : C.data) == null ? void 0 : F.datasets) == null ? void 0 : A.map((q) => ({
2354
+ ...q,
2355
+ data: []
2356
+ }))
2357
+ }
2358
+ };
2359
+ return JSON.stringify(O, null, 1);
2360
+ }
2361
+ function f() {
2362
+ var O, j;
2363
+ if (!m.data || m.data.length === 0)
2364
+ return;
2365
+ const C = la({
2366
+ data: m.data,
2367
+ cardType: m.type,
2368
+ cfg: m.cfg,
2369
+ preferences: m.preferences
2370
+ });
2371
+ C && (t(JSON.stringify(C, null, 1)), (O = m == null ? void 0 : m.preferences) != null && O.customVisualCode && c((j = m == null ? void 0 : m.preferences) == null ? void 0 : j.customVisualCode), u && o(JSON.stringify(u, null, 1)));
2372
+ }
2373
+ function w() {
2374
+ if (l && d(l), !!i)
2375
+ try {
2376
+ const C = JSON.parse(i);
2377
+ return C ? (N(C), g(""), o(""), C) : void 0;
2378
+ } catch (C) {
2379
+ console.log(C), g("Invalid JSON");
2380
+ }
2381
+ }
2382
+ function b() {
2383
+ o(""), N(null);
2384
+ }
2385
+ function L() {
2386
+ let C;
2387
+ if (u) {
2388
+ const O = Vs.cloneDeep(m.cfg), j = Vs.merge(O, u);
2389
+ return C = x(j), C;
2390
+ }
2391
+ return a ? (C = x(JSON.parse(a)), C) : "";
2392
+ }
2393
+ return /* @__PURE__ */ e.jsxs(xs, { open: s, onOpenChange: n, children: [
2394
+ /* @__PURE__ */ e.jsx(ps, { asChild: !0, children: /* @__PURE__ */ e.jsx(
2395
+ z,
2396
+ {
2397
+ onClick: f,
2398
+ className: ` ${u && "border-foreground/50 dark:border-foreground/70"}`,
2399
+ size: "sm",
2400
+ variant: "outline",
2401
+ children: /* @__PURE__ */ e.jsx(St, { className: "h-4 w-4" })
2402
+ }
2403
+ ) }),
2404
+ /* @__PURE__ */ e.jsxs(
2405
+ fs,
2406
+ {
2407
+ className: "max-h-[70vh] min-h-[70vh] overflow-auto sm:min-w-[900px] lg:min-w-[1200px]",
2408
+ children: [
2409
+ /* @__PURE__ */ e.jsxs(gs, { className: "", children: [
2410
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-2", children: [
2411
+ /* @__PURE__ */ e.jsx(js, { children: "Customize Card" }),
2412
+ /* @__PURE__ */ e.jsxs(ys, { children: [
2413
+ /* @__PURE__ */ e.jsx(Js, { children: /* @__PURE__ */ e.jsx(
2414
+ sn,
2415
+ {
2416
+ onClick: () => {
2417
+ navigator.clipboard.writeText(m.id);
2418
+ },
2419
+ className: "size-3 cursor-pointer text-muted-foreground/70 transition-colors hover:text-muted-foreground"
2420
+ }
2421
+ ) }),
2422
+ /* @__PURE__ */ e.jsx(vs, { side: "right", align: "center", children: /* @__PURE__ */ e.jsx("p", { className: "text-xs", children: "Copy Card ID" }) })
2423
+ ] })
2424
+ ] }),
2425
+ /* @__PURE__ */ e.jsxs(bs, { children: [
2426
+ "See the configuration options and documentation",
2427
+ /* @__PURE__ */ e.jsx(
2428
+ "a",
2429
+ {
2430
+ target: "_blank",
2431
+ className: "ml-1 text-blue-500 underline",
2432
+ href: "https://www.chartjs.org/docs/latest/samples/bar/vertical.html",
2433
+ children: "here."
2434
+ }
2435
+ )
2436
+ ] })
2437
+ ] }),
2438
+ /* @__PURE__ */ e.jsxs("div", { className: "flex grow gap-2", children: [
2439
+ /* @__PURE__ */ e.jsx(ja, { className: "w-1/2 rounded shadow-none" }),
2440
+ /* @__PURE__ */ e.jsxs(kt, { defaultValue: "custom-config", className: "flex w-1/2 flex-col", children: [
2441
+ /* @__PURE__ */ e.jsxs(wt, { className: "justify-start rounded-sm rounded-b-none border border-b-0", children: [
2442
+ /* @__PURE__ */ e.jsxs(rs, { value: "custom-config", children: [
2443
+ u && /* @__PURE__ */ e.jsx(zt, { className: "mr-1 h-5 w-5 text-green-600" }),
2444
+ u ? "Custom Config" : "Default Config"
2445
+ ] }),
2446
+ /* @__PURE__ */ e.jsx(rs, { className: "", value: "output", children: "Output" }),
2447
+ /* @__PURE__ */ e.jsx(rs, { className: "", value: "custom-code", children: "Custom Code" })
2448
+ ] }),
2449
+ /* @__PURE__ */ e.jsx(
2450
+ is,
2451
+ {
2452
+ className: "bg-red-x mt-0 grow rounded-b border border-t-0 p-2",
2453
+ value: "output",
2454
+ children: /* @__PURE__ */ e.jsx(
2455
+ na,
2456
+ {
2457
+ disabled: !0,
2458
+ value: a,
2459
+ className: "h-full resize-none border-none font-mono focus-visible:ring-0 focus-visible:ring-offset-0"
2460
+ }
2461
+ )
2462
+ }
2463
+ ),
2464
+ /* @__PURE__ */ e.jsx(
2465
+ is,
2466
+ {
2467
+ className: "mt-0 grow rounded-b border border-t-0",
2468
+ value: "custom-config",
2469
+ children: /* @__PURE__ */ e.jsx(
2470
+ Re,
2471
+ {
2472
+ className: "h-full w-full overflow-hidden",
2473
+ theme: "default",
2474
+ options: {
2475
+ minimap: {
2476
+ enabled: !1
2477
+ },
2478
+ wordWrap: "on",
2479
+ scrollbar: {
2480
+ verticalScrollbarSize: 0,
2481
+ horizontalScrollbarSize: 0
2482
+ },
2483
+ fontSize: 14,
2484
+ renderLineHighlight: "none"
2485
+ },
2486
+ defaultLanguage: "json",
2487
+ value: L(),
2488
+ onChange: (C) => o(C)
2489
+ }
2490
+ )
2491
+ }
2492
+ ),
2493
+ /* @__PURE__ */ e.jsx(
2494
+ is,
2495
+ {
2496
+ className: "mt-0 grow rounded-b border border-t-0",
2497
+ value: "custom-code",
2498
+ children: /* @__PURE__ */ e.jsx(
2499
+ Re,
2500
+ {
2501
+ className: "h-full w-full overflow-hidden",
2502
+ theme: "default",
2503
+ options: {
2504
+ minimap: {
2505
+ enabled: !1
2506
+ },
2507
+ wordWrap: "on",
2508
+ scrollbar: {
2509
+ verticalScrollbarSize: 0,
2510
+ horizontalScrollbarSize: 0
2511
+ },
2512
+ fontSize: 14,
2513
+ renderLineHighlight: "none"
2514
+ },
2515
+ defaultLanguage: "javascript",
2516
+ value: l,
2517
+ onChange: (C) => c(C || "")
2518
+ }
2519
+ )
2520
+ }
2521
+ )
2522
+ ] })
2523
+ ] }),
2524
+ /* @__PURE__ */ e.jsxs(Us, { className: "flex items-center", children: [
2525
+ /* @__PURE__ */ e.jsx(B, { className: "mr-2 text-red-500", children: h }),
2526
+ /* @__PURE__ */ e.jsx(
2527
+ z,
2528
+ {
2529
+ disabled: !u,
2530
+ onClick: b,
2531
+ variant: "outline",
2532
+ children: "Reset"
2533
+ }
2534
+ ),
2535
+ /* @__PURE__ */ e.jsx(z, { onClick: w, variant: "outline", children: "Apply" }),
2536
+ /* @__PURE__ */ e.jsx(z, { onClick: () => n(!1), variant: "outline", children: "Close" })
2537
+ ] })
2538
+ ]
2539
+ }
2540
+ )
2541
+ ] });
2542
+ }
2543
+ function ba(s) {
2544
+ return fe({ tag: "svg", attr: { viewBox: "0 0 1024 1024" }, child: [{ tag: "path", attr: { d: "M926.8 397.1l-396-288a31.81 31.81 0 0 0-37.6 0l-396 288a31.99 31.99 0 0 0-11.6 35.8l151.3 466a32 32 0 0 0 30.4 22.1h489.5c13.9 0 26.1-8.9 30.4-22.1l151.3-466c4.2-13.2-.5-27.6-11.7-35.8zM838.6 417l-98.5 32-200-144.7V199.9L838.6 417zM466 567.2l-89.1 122.3-55.2-169.2L466 567.2zm-116.3-96.8L484 373.3v140.8l-134.3-43.7zM512 599.2l93.9 128.9H418.1L512 599.2zm28.1-225.9l134.2 97.1L540.1 514V373.3zM558 567.2l144.3-46.9-55.2 169.2L558 567.2zm-74-367.3v104.4L283.9 449l-98.5-32L484 199.9zM169.3 470.8l86.5 28.1 80.4 246.4-53.8 73.9-113.1-348.4zM327.1 853l50.3-69h269.3l50.3 69H327.1zm414.5-33.8l-53.8-73.9 80.4-246.4 86.5-28.1-113.1 348.4z" }, child: [] }] })(s);
2545
+ }
2546
+ function ya(s) {
2547
+ return fe({ tag: "svg", attr: { viewBox: "0 0 256 256", fill: "currentColor" }, child: [{ tag: "path", attr: { d: "M137.39,24.06A16,16,0,0,0,120,40V80.67a15.86,15.86,0,0,0,13.25,15.76A32,32,0,1,1,96,129.68c-.41-8.22,1.27-15,5-20.26h0a15.86,15.86,0,0,0-1.69-20.47L71.69,60.68a16,16,0,0,0-23.63,1.1A103.6,103.6,0,0,0,55,202.05,103.24,103.24,0,0,0,128,232h1.49A104.3,104.3,0,0,0,232,129.48C232.75,75.18,191.19,28.88,137.39,24.06ZM60.32,71.94l27.61,28.19,0,.06A43.29,43.29,0,0,0,80.44,120H40.36A87.13,87.13,0,0,1,60.32,71.94ZM40.37,136h40.3A48,48,0,0,0,120,175.34v40.3A88,88,0,0,1,40.37,136Zm149.77,54.14A87.45,87.45,0,0,1,136,215.61V175.34a47.55,47.55,0,0,0,24.73-12.23A48,48,0,0,0,136,80.66L136,40c45.52,4.08,80.67,43.28,80,89.25A87.45,87.45,0,0,1,190.14,190.14Z" }, child: [] }] })(s);
2548
+ }
2549
+ function va(s) {
2550
+ return fe({ tag: "svg", attr: { viewBox: "0 0 256 256", fill: "currentColor" }, child: [{ tag: "path", attr: { d: "M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm87.63,96H191.48A64.1,64.1,0,0,0,136,64.52V40.37A88.13,88.13,0,0,1,215.63,120ZM120,120H80.68A48.09,48.09,0,0,1,120,80.68Zm0,16v39.32A48.09,48.09,0,0,1,80.68,136Zm16,0h39.32A48.09,48.09,0,0,1,136,175.32Zm0-16V80.68A48.09,48.09,0,0,1,175.32,120ZM120,40.37V64.52A64.1,64.1,0,0,0,64.52,120H40.37A88.13,88.13,0,0,1,120,40.37ZM40.37,136H64.52A64.1,64.1,0,0,0,120,191.48v24.15A88.13,88.13,0,0,1,40.37,136ZM136,215.63V191.48A64.1,64.1,0,0,0,191.48,136h24.15A88.13,88.13,0,0,1,136,215.63Z" }, child: [] }] })(s);
2551
+ }
2552
+ function Na(s) {
2553
+ return fe({ tag: "svg", attr: { viewBox: "0 0 24 24", strokeWidth: "2", stroke: "currentColor", fill: "none", strokeLinecap: "round", strokeLinejoin: "round" }, child: [{ tag: "path", attr: { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }, child: [] }, { tag: "path", attr: { d: "M6 16m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0" }, child: [] }, { tag: "path", attr: { d: "M16 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" }, child: [] }, { tag: "path", attr: { d: "M14.5 7.5m-4.5 0a4.5 4.5 0 1 0 9 0a4.5 4.5 0 1 0 -9 0" }, child: [] }] })(s);
2554
+ }
2555
+ function Ca(s) {
2556
+ return fe({ tag: "svg", attr: { viewBox: "0 0 24 24" }, child: [{ tag: "path", attr: { fill: "none", d: "M0 0h24v24H0z" }, child: [] }, { tag: "path", attr: { d: "M4 9h4v11H4zM4 4h4v4H4zM10 7h4v4h-4zM16 10h4v4h-4zM16 15h4v5h-4zM10 12h4v8h-4z" }, child: [] }] })(s);
2557
+ }
2558
+ function Sa(s) {
2559
+ return fe({ tag: "svg", attr: { version: "1.2", baseProfile: "tiny", viewBox: "0 0 24 24" }, child: [{ tag: "path", attr: { d: "M4 18c-.552 0-1-.448-1-1v-6.382l-.553.276c-.495.248-1.095.046-1.342-.447-.247-.494-.046-1.094.448-1.342l2-1c.31-.155.678-.139.973.044.294.183.474.504.474.851v8c0 .552-.448 1-1 1zM13 18h-5c-.404 0-.769-.244-.924-.617-.155-.374-.069-.804.217-1.09l4-4c.254-.254.394-.591.394-.95 0-.358-.14-.695-.394-.949-.508-.508-1.39-.508-1.9.001-.253.252-.393.589-.393.948 0 .552-.448 1-1 1s-1-.448-1-1c0-.894.348-1.733.98-2.364 1.265-1.263 3.464-1.263 4.727.001.632.631.979 1.471.979 2.363 0 .893-.348 1.733-.979 2.364l-2.293 2.293h2.586c.552 0 1 .448 1 1s-.448 1-1 1zM20.955 12.377c.338-.457.545-1.016.545-1.627 0-1.517-1.234-2.75-2.75-2.75-1.031 0-1.966.569-2.44 1.484-.254.49-.063 1.094.428 1.348.49.254 1.094.062 1.348-.428.128-.249.383-.404.664-.404.414 0 .75.336.75.75s-.336.75-.75.75c-.552 0-1 .448-1 1s.448 1 1 1c.689 0 1.25.561 1.25 1.25s-.561 1.25-1.25 1.25-1.25-.561-1.25-1.25c0-.552-.448-1-1-1s-1 .448-1 1c0 1.792 1.458 3.25 3.25 3.25s3.25-1.458 3.25-3.25c0-.939-.406-1.779-1.045-2.373z" }, child: [] }] })(s);
2560
+ }
2561
+ function ka(s) {
2562
+ return fe({ tag: "svg", attr: { viewBox: "0 0 512 512" }, child: [{ tag: "path", attr: { d: "M217 25v14h78V25h-78zm0 32v46h14V71h50v32h14V57h-78zm32 32v14h14V89h-14zm-64 32v46h30v-46h-30zm48 0v14h46v-14h-46zm64 0v46h30v-46h-30zm-64 32v14h46v-14h-46zm-80 32v46h62v-46h-62zm80 0v14h46v-14h-46zm64 0v46h62v-46h-62zm-64 32v14h46v-14h-46zm-112 32v46h94v-46h-94zm112 0v14h46v-14h-46zm64 0v46h94v-46h-94zm-64 32v14h46v-14h-46zM89 313v46h126v-46H89zm144 0v14h46v-14h-46zm64 0v46h126v-46H297zm-64 32v14h46v-14h-46zM57 377v46h158v-46H57zm176 0v14h46v-14h-46zm64 0v46h158v-46H297zm-64 32v14h46v-14h-46zM25 441v46h190v-46H25zm208 0v14h46v-14h-46zm64 0v46h190v-46H297zm-64 32v14h46v-14h-46z" }, child: [] }] })(s);
2563
+ }
2564
+ function Hn() {
2565
+ const [s, n] = T(!1), a = r((c) => c.card.type), { setCardType: t, setCardPreferences: i } = r(
2566
+ (c) => c.actions
2567
+ ), o = r(
2568
+ (c) => c.actions.setCardCustomCfg
2569
+ );
2570
+ function l(c) {
2571
+ t(c), o(null), i({}), n(!1);
2572
+ }
2573
+ return /* @__PURE__ */ e.jsxs(Pe, { open: s, onOpenChange: n, children: [
2574
+ /* @__PURE__ */ e.jsx(Ue, { asChild: !0, children: /* @__PURE__ */ e.jsx(z, { size: "sm", variant: "outline", children: /* @__PURE__ */ e.jsx(Bn, { className: "h-4 w-4", chartType: a }) }) }),
2575
+ /* @__PURE__ */ e.jsx(Ge, { className: "w-50", children: /* @__PURE__ */ e.jsxs("div", { className: "grid grid-cols-3 place-items-center", children: [
2576
+ /* @__PURE__ */ e.jsx(
2577
+ z,
2578
+ {
2579
+ onClick: () => l("bar"),
2580
+ className: "font-normal",
2581
+ variant: "ghost",
2582
+ children: /* @__PURE__ */ e.jsx(ws, { className: "size-5" })
2583
+ }
2584
+ ),
2585
+ /* @__PURE__ */ e.jsx(
2586
+ z,
2587
+ {
2588
+ onClick: () => l("line"),
2589
+ variant: "ghost",
2590
+ children: /* @__PURE__ */ e.jsx(zs, { className: "size-5" })
2591
+ }
2592
+ ),
2593
+ /* @__PURE__ */ e.jsx(
2594
+ z,
2595
+ {
2596
+ onClick: () => l("stackedBar"),
2597
+ variant: "ghost",
2598
+ children: /* @__PURE__ */ e.jsx(Ca, { className: "size-5", strokeWidth: 0 })
2599
+ }
2600
+ ),
2601
+ /* @__PURE__ */ e.jsx(
2602
+ z,
2603
+ {
2604
+ onClick: () => l("scatter"),
2605
+ variant: "ghost",
2606
+ children: /* @__PURE__ */ e.jsx(ma, { className: "size-5" })
2607
+ }
2608
+ ),
2609
+ /* @__PURE__ */ e.jsx(
2610
+ z,
2611
+ {
2612
+ onClick: () => l("bubble"),
2613
+ variant: "ghost",
2614
+ children: /* @__PURE__ */ e.jsx(Na, { className: "size-4" })
2615
+ }
2616
+ ),
2617
+ /* @__PURE__ */ e.jsx(
2618
+ z,
2619
+ {
2620
+ onClick: () => l("pie"),
2621
+ variant: "ghost",
2622
+ children: /* @__PURE__ */ e.jsx(ha, { className: "size-5" })
2623
+ }
2624
+ ),
2625
+ /* @__PURE__ */ e.jsx(
2626
+ z,
2627
+ {
2628
+ onClick: () => l("doughnut"),
2629
+ variant: "ghost",
2630
+ children: /* @__PURE__ */ e.jsx(ya, { className: "size-5", strokeWidth: 1 })
2631
+ }
2632
+ ),
2633
+ /* @__PURE__ */ e.jsx(
2634
+ z,
2635
+ {
2636
+ onClick: () => l("radar"),
2637
+ variant: "ghost",
2638
+ children: /* @__PURE__ */ e.jsx(
2639
+ ba,
2640
+ {
2641
+ className: "size-5 font-extralight",
2642
+ strokeWidth: 0.5
2643
+ }
2644
+ )
2645
+ }
2646
+ ),
2647
+ /* @__PURE__ */ e.jsx(
2648
+ z,
2649
+ {
2650
+ onClick: () => l("polarArea"),
2651
+ variant: "ghost",
2652
+ children: /* @__PURE__ */ e.jsx(va, { className: "size-5" })
2653
+ }
2654
+ ),
2655
+ /* @__PURE__ */ e.jsx(
2656
+ z,
2657
+ {
2658
+ onClick: () => l("pyramid"),
2659
+ variant: "ghost",
2660
+ children: /* @__PURE__ */ e.jsx(ka, { className: "size-5" })
2661
+ }
2662
+ ),
2663
+ /* @__PURE__ */ e.jsx(
2664
+ z,
2665
+ {
2666
+ onClick: () => l("range"),
2667
+ variant: "ghost",
2668
+ children: /* @__PURE__ */ e.jsx(ca, { className: "size-5" })
2669
+ }
2670
+ ),
2671
+ /* @__PURE__ */ e.jsx(
2672
+ z,
2673
+ {
2674
+ onClick: () => l("table"),
2675
+ variant: "ghost",
2676
+ children: /* @__PURE__ */ e.jsx(Ns, { className: "size-5" })
2677
+ }
2678
+ ),
2679
+ /* @__PURE__ */ e.jsx(
2680
+ z,
2681
+ {
2682
+ onClick: () => l("kpi"),
2683
+ variant: "ghost",
2684
+ children: /* @__PURE__ */ e.jsx(Sa, { className: "size-6" })
2685
+ }
2686
+ )
2687
+ ] }) })
2688
+ ] });
2689
+ }
2690
+ function Bn({ chartType: s, className: n }) {
2691
+ switch (s) {
2692
+ case "bar":
2693
+ return /* @__PURE__ */ e.jsx(ws, { className: n });
2694
+ case "line":
2695
+ return /* @__PURE__ */ e.jsx(zs, { className: n });
2696
+ case "pie":
2697
+ return /* @__PURE__ */ e.jsx(ha, { className: n });
2698
+ case "radar":
2699
+ return /* @__PURE__ */ e.jsx(ba, { className: n });
2700
+ case "scatter":
2701
+ return /* @__PURE__ */ e.jsx(ma, { className: n });
2702
+ case "bubble":
2703
+ return /* @__PURE__ */ e.jsx(Na, { className: n });
2704
+ case "doughnut":
2705
+ return /* @__PURE__ */ e.jsx(ya, { className: n });
2706
+ case "stackedBar":
2707
+ return /* @__PURE__ */ e.jsx(Ca, { className: "size-4 text-foreground/70" });
2708
+ case "polarArea":
2709
+ return /* @__PURE__ */ e.jsx(va, { className: n });
2710
+ case "pyramid":
2711
+ return /* @__PURE__ */ e.jsx(ka, { className: n });
2712
+ case "range":
2713
+ return /* @__PURE__ */ e.jsx(ca, { className: n });
2714
+ case "kpi":
2715
+ return /* @__PURE__ */ e.jsx(Sa, { className: n });
2716
+ default:
2717
+ return /* @__PURE__ */ e.jsx(Ns, { className: n });
2718
+ }
2719
+ }
2720
+ function $n() {
2721
+ const s = r(
2722
+ (a) => a.card.refreshInterval
2723
+ ), n = r(
2724
+ (a) => a.actions.setCardRefreshInterval
2725
+ );
2726
+ return /* @__PURE__ */ e.jsxs(Pe, { children: [
2727
+ /* @__PURE__ */ e.jsx(Ue, { asChild: !0, children: /* @__PURE__ */ e.jsx(z, { size: "sm", variant: "outline", children: /* @__PURE__ */ e.jsx(Gt, { className: "w-4 h-4" }) }) }),
2728
+ /* @__PURE__ */ e.jsx(Ge, { className: "w-[200px]", children: /* @__PURE__ */ e.jsx("div", { className: "grid gap-4", children: /* @__PURE__ */ e.jsx("div", { className: "grid gap-2", children: /* @__PURE__ */ e.jsxs("div", { className: "grid grid-cols-5 items-center gap-1", children: [
2729
+ /* @__PURE__ */ e.jsx(B, { className: "col-span-3", htmlFor: "width", children: "Refresh Every" }),
2730
+ /* @__PURE__ */ e.jsx(
2731
+ ae,
2732
+ {
2733
+ value: s || "",
2734
+ onChange: (a) => n(a.target.value),
2735
+ id: "width",
2736
+ placeholder: "30s",
2737
+ className: "col-span-2 h-7 focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-0"
2738
+ }
2739
+ )
2740
+ ] }) }) }) })
2741
+ ] });
2742
+ }
2743
+ function $s() {
2744
+ r((l) => l.frame);
2745
+ const s = r((l) => l.card), n = r((l) => l.card.data), a = r((l) => l.isShowingVisual), t = r((l) => l.isSqlRunning), i = r((l) => l.queryError), o = r((l) => l.pythonStdOut);
2746
+ return r((l) => l.onSave), r((l) => l.onClose), r((l) => l.actions.setCardSql), r((l) => l.actions.setCardType), r((l) => l.actions.setSqlGen), s ? /* @__PURE__ */ e.jsxs("div", { className: "relative flex h-full flex-col pt-3", children: [
2747
+ t && /* @__PURE__ */ e.jsx(Be, { className: "absolute bottom-0 left-0 right-0 top-0 z-10 m-auto h-10 w-10 animate-spin text-foreground/10" }),
2748
+ /* @__PURE__ */ e.jsxs("div", { className: "mb-0 flex min-h-10 items-center justify-end gap-2 px-6", children: [
2749
+ a && /* @__PURE__ */ e.jsxs("div", { className: "flex grow items-center gap-2", children: [
2750
+ /* @__PURE__ */ e.jsx(Hn, {}),
2751
+ s.type !== "table" && /* @__PURE__ */ e.jsx(_n, {}),
2752
+ /* @__PURE__ */ e.jsx($n, {})
2753
+ ] }),
2754
+ /* @__PURE__ */ e.jsx(Pn, {})
2755
+ ] }),
2756
+ a ? s.type === "kpi" ? /* @__PURE__ */ e.jsx("div", { className: "flex grow items-center justify-center", children: /* @__PURE__ */ e.jsx("div", { className: "w-1/2 rounded-md border", children: /* @__PURE__ */ e.jsx(Ft, { isLoading: t, card: s }) }) }) : /* @__PURE__ */ e.jsx(ja, { className: "grow border-none shadow-none" }) : /* @__PURE__ */ e.jsxs("div", { className: "flex min-h-0 w-full flex-1 grow basis-0 px-6", children: [
2757
+ o && /* @__PURE__ */ e.jsx(Kn, {}),
2758
+ s.data && s.data.length > 0 && /* @__PURE__ */ e.jsx(Rn, { data: n || [] }),
2759
+ i && /* @__PURE__ */ e.jsx("span", { className: "font-mono text-sm", children: i })
2760
+ ] })
2761
+ ] }) : /* @__PURE__ */ e.jsx(e.Fragment, { children: "No Active Card" });
2762
+ }
2763
+ function Kn() {
2764
+ const s = r((a) => a.pythonStdOut);
2765
+ if (!s)
2766
+ return null;
2767
+ const n = s.replace(/\n/g, "<br>");
2768
+ return /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
2769
+ /* @__PURE__ */ e.jsx("p", { className: "font-mono text-sm", children: "Output:" }),
2770
+ /* @__PURE__ */ e.jsx(
2771
+ "div",
2772
+ {
2773
+ dangerouslySetInnerHTML: { __html: n },
2774
+ className: "bg-muted p-2 font-mono text-sm"
2775
+ }
2776
+ ),
2777
+ /* @__PURE__ */ e.jsx(Ss, { className: "mb-2" })
2778
+ ] });
2779
+ }
2780
+ function Pn() {
2781
+ const s = r((a) => a.isShowingVisual), n = r(
2782
+ (a) => a.actions.setIsShowingVisual
2783
+ );
2784
+ return /* @__PURE__ */ e.jsxs("div", { className: "flex items-center space-x-2", children: [
2785
+ /* @__PURE__ */ e.jsx(B, { htmlFor: "visualize", children: "Chart" }),
2786
+ /* @__PURE__ */ e.jsx(
2787
+ Ot,
2788
+ {
2789
+ checked: s,
2790
+ onCheckedChange: () => n(!s),
2791
+ id: "visualize",
2792
+ className: "data-[state=checked]:bg-foreground/50"
2793
+ }
2794
+ )
2795
+ ] });
2796
+ }
2797
+ function De() {
2798
+ const [s, n] = T([]);
2799
+ r(
2800
+ (m) => m.card.cfg
2801
+ );
2802
+ const a = r((m) => m.card.preferences), { setCardCfg: t, setFilterOnClickColumnIndex: i, setCardPreferences: o } = r((m) => m.actions), l = r(
2803
+ (m) => m.queryResultColumns
2804
+ );
2805
+ r(
2806
+ (m) => {
2807
+ var u;
2808
+ return (u = m.card.preferences) == null ? void 0 : u.filterOnClickColumnIndex;
2809
+ }
2810
+ ), K(() => {
2811
+ l && n(new Array(l.length).fill(!1));
2812
+ }, [l]);
2813
+ function c(m, u) {
2814
+ var N, d;
2815
+ u ? a != null && a.onClickFilter && ((N = a == null ? void 0 : a.onClickFilter) == null ? void 0 : N.length) > 0 ? o({
2816
+ ...a,
2817
+ onClickFilter: [
2818
+ ...a.onClickFilter,
2819
+ {
2820
+ columnIndex: m,
2821
+ expression: ""
2822
+ }
2823
+ ]
2824
+ }) : o({
2825
+ ...a,
2826
+ onClickFilter: [
2827
+ {
2828
+ columnIndex: m,
2829
+ expression: ""
2830
+ }
2831
+ ]
2832
+ }) : (o({
2833
+ ...a,
2834
+ onClickFilter: (d = a == null ? void 0 : a.onClickFilter) == null ? void 0 : d.filter(
2835
+ (x) => x.columnIndex !== m
2836
+ )
2837
+ }), n((x) => {
2838
+ const f = [...x];
2839
+ return f[m] = !1, f;
2840
+ }));
2841
+ }
2842
+ function h(m, u) {
2843
+ var d;
2844
+ const N = (d = a == null ? void 0 : a.onClickFilter) == null ? void 0 : d.map((x) => x.columnIndex === m ? {
2845
+ ...x,
2846
+ expression: u.target.value
2847
+ } : x);
2848
+ o({
2849
+ ...a,
2850
+ onClickFilter: N
2851
+ });
2852
+ }
2853
+ function g(m) {
2854
+ var u, N, d, x;
2855
+ if (s != null && s[m] || (N = (u = a == null ? void 0 : a.onClickFilter) == null ? void 0 : u.find((f) => f.columnIndex === m)) != null && N.expression)
2856
+ return /* @__PURE__ */ e.jsx(
2857
+ ae,
2858
+ {
2859
+ value: (x = (d = a == null ? void 0 : a.onClickFilter) == null ? void 0 : d.find((f) => f.columnIndex === m)) == null ? void 0 : x.expression,
2860
+ onChange: (f) => h(m, f),
2861
+ type: "text",
2862
+ className: " h-9 w-full focus-visible:ring-0 focus-visible:ring-ring focus-visible:ring-offset-0 font-mono text-xs",
2863
+ placeholder: "Expression"
2864
+ }
2865
+ );
2866
+ }
2867
+ return /* @__PURE__ */ e.jsx(e.Fragment, { children: l == null ? void 0 : l.map((m, u) => {
2868
+ var N, d;
2869
+ return /* @__PURE__ */ e.jsx(
2870
+ "div",
2871
+ {
2872
+ className: "flex items-center justify-between space-y-2 xbg-red-100 group",
2873
+ children: /* @__PURE__ */ e.jsxs("div", { className: " grow", children: [
2874
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center py-2 space-x-2", children: [
2875
+ /* @__PURE__ */ e.jsx(
2876
+ Ke,
2877
+ {
2878
+ checked: !!((N = a == null ? void 0 : a.onClickFilter) != null && N.find(
2879
+ (x) => x.columnIndex === u
2880
+ )),
2881
+ onCheckedChange: (x) => c(u, x)
2882
+ }
2883
+ ),
2884
+ /* @__PURE__ */ e.jsx(
2885
+ "label",
2886
+ {
2887
+ className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
2888
+ children: m
2889
+ }
2890
+ ),
2891
+ /* @__PURE__ */ e.jsx("div", { className: "flex gap-2 items-center ", children: ((d = a == null ? void 0 : a.onClickFilter) == null ? void 0 : d.find(
2892
+ (x) => x.columnIndex === u
2893
+ )) && /* @__PURE__ */ e.jsx(
2894
+ da,
2895
+ {
2896
+ onClick: () => {
2897
+ n((x) => {
2898
+ const f = [...x];
2899
+ return f[u] = !x[u], f;
2900
+ });
2901
+ },
2902
+ className: " invisible group-hover:visible size-3 text-gray-400 cursor-pointer"
2903
+ }
2904
+ ) })
2905
+ ] }),
2906
+ g(u)
2907
+ ] })
2908
+ },
2909
+ m
2910
+ );
2911
+ }) });
2912
+ }
2913
+ function Fs() {
2914
+ var o, l, c;
2915
+ const s = r((h) => h.card.preferences), n = r(
2916
+ (h) => h.card.cfg
2917
+ ), { setCardCfg: a, setCardPreferences: t } = r(
2918
+ (h) => h.actions
2919
+ );
2920
+ (o = n == null ? void 0 : n.options) != null && o.indexAxis;
2921
+ function i(h) {
2922
+ var u, N, d, x, f, w;
2923
+ let g = {};
2924
+ (u = s == null ? void 0 : s.chartOptions) != null && u.scales && (g = {
2925
+ x: (d = (N = s == null ? void 0 : s.chartOptions) == null ? void 0 : N.scales) == null ? void 0 : d.y,
2926
+ y: (f = (x = s == null ? void 0 : s.chartOptions) == null ? void 0 : x.scales) == null ? void 0 : f.x
2927
+ });
2928
+ const m = {
2929
+ ...s,
2930
+ chartOptions: {
2931
+ ...s == null ? void 0 : s.chartOptions,
2932
+ scales: {
2933
+ ...(w = s == null ? void 0 : s.chartOptions) == null ? void 0 : w.scales,
2934
+ ...g
2935
+ },
2936
+ indexAxis: h
2937
+ }
2938
+ };
2939
+ t(m);
2940
+ }
2941
+ return /* @__PURE__ */ e.jsxs(
2942
+ ra,
2943
+ {
2944
+ value: ((l = s == null ? void 0 : s.chartOptions) == null ? void 0 : l.indexAxis) || ((c = n == null ? void 0 : n.options) == null ? void 0 : c.indexAxis) || "x",
2945
+ onValueChange: i,
2946
+ className: "flex gap-3",
2947
+ defaultValue: "x",
2948
+ children: [
2949
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center space-x-2", children: [
2950
+ /* @__PURE__ */ e.jsx(Ye, { value: "x", id: "r1" }),
2951
+ /* @__PURE__ */ e.jsx("label", { className: "text-sm", htmlFor: "r1", children: "Vertical" })
2952
+ ] }),
2953
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center space-x-2", children: [
2954
+ /* @__PURE__ */ e.jsx(Ye, { value: "y", id: "r2" }),
2955
+ /* @__PURE__ */ e.jsx("label", { className: "text-sm", htmlFor: "r2", children: "Horizontal" })
2956
+ ] })
2957
+ ]
2958
+ }
2959
+ );
2960
+ }
2961
+ const we = "focus-visible:ring-0 focus-visible:ring-ring focus-visible:ring-offset-0";
2962
+ function Ks(s, n) {
2963
+ var t, i, o;
2964
+ const a = ia(s, n);
2965
+ return ((o = (i = (t = s == null ? void 0 : s.chartOptions) == null ? void 0 : t.scales) == null ? void 0 : i[a]) == null ? void 0 : o.type) || "linear";
2966
+ }
2967
+ function wa() {
2968
+ var Q, ee, Z, J, I, y;
2969
+ const [s, n] = T(!1), a = r((v) => {
2970
+ var M;
2971
+ return (M = v.card) == null ? void 0 : M.preferences;
2972
+ }), t = r((v) => {
2973
+ var M;
2974
+ return (M = v.card) == null ? void 0 : M.cfg;
2975
+ }), i = ia(a, t), [o, l] = T(
2976
+ Ks(a)
2977
+ ), [c, h] = T(
2978
+ ((Z = (ee = (Q = a == null ? void 0 : a.chartOptions) == null ? void 0 : Q.scales) == null ? void 0 : ee[i]) == null ? void 0 : Z.min) || ""
2979
+ ), [g, m] = T(
2980
+ ((y = (I = (J = a == null ? void 0 : a.chartOptions) == null ? void 0 : J.scales) == null ? void 0 : I[i]) == null ? void 0 : y.max) || ""
2981
+ ), [u, N] = T(c || g ? "custom" : "auto"), [d, x] = T(""), [f, w] = T(0), [b, L] = T(""), [C, O] = T(""), [j, F] = T(""), A = r(
2982
+ (v) => v.actions.setCardPreferences
2983
+ ), q = r((v) => {
2984
+ var M;
2985
+ return (M = v.card) == null ? void 0 : M.type;
2986
+ }), P = ["pie", "doughnut", "polarArea"].includes(q);
2987
+ K(() => {
2988
+ var v, M, H, ue, se, ge, je, be, xe, U, ne, le, ye, re;
2989
+ l(Ks(a)), h(
2990
+ ((H = (M = (v = a == null ? void 0 : a.chartOptions) == null ? void 0 : v.scales) == null ? void 0 : M[i]) == null ? void 0 : H.min) === 0 ? 0 : ""
2991
+ ), m(((ge = (se = (ue = a == null ? void 0 : a.chartOptions) == null ? void 0 : ue.scales) == null ? void 0 : se[i]) == null ? void 0 : ge.max) || ""), x(
2992
+ ((U = (xe = (be = (je = a == null ? void 0 : a.chartOptions) == null ? void 0 : je.scales) == null ? void 0 : be[i]) == null ? void 0 : xe.ticks) == null ? void 0 : U.stepSize) || ""
2993
+ ), w(((ne = a == null ? void 0 : a.numberAxisFormat) == null ? void 0 : ne.decimalPlaces) || 0), L(((le = a == null ? void 0 : a.numberAxisFormat) == null ? void 0 : le.suffix) || ""), O(((ye = a == null ? void 0 : a.numberAxisFormat) == null ? void 0 : ye.currency) || ""), F(((re = a == null ? void 0 : a.numberAxisFormat) == null ? void 0 : re.locale) || "");
2994
+ }, [s, a, i]);
2995
+ function $(v, M) {
2996
+ return M === "" || /^[0-9\b]+$/.test(M) ? Number(M) : Number(v);
2997
+ }
2998
+ function G() {
2999
+ return /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
3000
+ /* @__PURE__ */ e.jsxs("div", { className: "grid grid-cols-6 items-center gap-2", children: [
3001
+ /* @__PURE__ */ e.jsx(
3002
+ B,
3003
+ {
3004
+ className: "col-span-2 hover:cursor-pointer hover:underline",
3005
+ htmlFor: "currency",
3006
+ children: /* @__PURE__ */ e.jsx(
3007
+ "a",
3008
+ {
3009
+ target: "_blank",
3010
+ href: "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat",
3011
+ children: "Currency"
3012
+ }
3013
+ )
3014
+ }
3015
+ ),
3016
+ /* @__PURE__ */ e.jsx(
3017
+ ae,
3018
+ {
3019
+ value: C,
3020
+ placeholder: "USD",
3021
+ onChange: (v) => O(v.target.value),
3022
+ id: "currency",
3023
+ className: `col-span-2 h-8 w-full ${we}`
3024
+ }
3025
+ ),
3026
+ /* @__PURE__ */ e.jsx(
3027
+ ae,
3028
+ {
3029
+ value: j,
3030
+ placeholder: "en-US",
3031
+ onChange: (v) => F(v.target.value),
3032
+ id: "locale",
3033
+ className: `col-span-2 h-8 w-full ${we}`
3034
+ }
3035
+ )
3036
+ ] }),
3037
+ /* @__PURE__ */ e.jsxs("div", { className: "grid grid-cols-9 items-center gap-2", children: [
3038
+ /* @__PURE__ */ e.jsx(B, { className: "col-span-3", htmlFor: "format", children: "Decimals" }),
3039
+ /* @__PURE__ */ e.jsx(
3040
+ ae,
3041
+ {
3042
+ value: f,
3043
+ onChange: (v) => w(Number(v.target.value)),
3044
+ id: "format",
3045
+ className: `col-span-6 h-8 w-full tracking-wide ${we}`
3046
+ }
3047
+ )
3048
+ ] })
3049
+ ] });
3050
+ }
3051
+ function D() {
3052
+ return /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
3053
+ /* @__PURE__ */ e.jsxs("div", { className: "grid grid-cols-3 items-center gap-2", children: [
3054
+ /* @__PURE__ */ e.jsx(B, { htmlFor: "range", children: "Range" }),
3055
+ /* @__PURE__ */ e.jsx(
3056
+ ae,
3057
+ {
3058
+ id: "min",
3059
+ value: c,
3060
+ onChange: (v) => h((M) => $(M, v.target.value)),
3061
+ className: `col-span-1 h-8 w-full ${we}`
3062
+ }
3063
+ ),
3064
+ /* @__PURE__ */ e.jsx(
3065
+ ae,
3066
+ {
3067
+ value: g,
3068
+ onChange: (v) => m((M) => $(M, v.target.value)),
3069
+ id: "max",
3070
+ className: `col-span-1 h-8 w-full ${we}`
3071
+ }
3072
+ )
3073
+ ] }),
3074
+ /* @__PURE__ */ e.jsxs("div", { className: "grid grid-cols-3 items-center gap-2", children: [
3075
+ /* @__PURE__ */ e.jsx(B, { htmlFor: "step-size", children: "Step Size" }),
3076
+ /* @__PURE__ */ e.jsx(
3077
+ ae,
3078
+ {
3079
+ value: d,
3080
+ onChange: (v) => x((M) => $(M, v.target.value)),
3081
+ id: "step-size",
3082
+ className: `col-span-1 h-8 w-full ${we}`
3083
+ }
3084
+ )
3085
+ ] })
3086
+ ] });
3087
+ }
3088
+ function te() {
3089
+ var H;
3090
+ let v = {};
3091
+ u === "custom" && (v = {
3092
+ min: c,
3093
+ max: g,
3094
+ ticks: {
3095
+ stepSize: d
3096
+ }
3097
+ });
3098
+ const M = {
3099
+ ...a || {},
3100
+ chartOptions: {
3101
+ ...a == null ? void 0 : a.chartOptions,
3102
+ scales: {
3103
+ ...(H = a == null ? void 0 : a.chartOptions) == null ? void 0 : H.scales,
3104
+ [i]: {
3105
+ // ...cardPreferences?.chartOptions?.scales?.[axis],
3106
+ type: o,
3107
+ ...o === "linear" ? v : {}
3108
+ }
3109
+ }
3110
+ },
3111
+ numberAxisFormat: {
3112
+ decimalPlaces: f,
3113
+ suffix: b,
3114
+ currency: C,
3115
+ locale: j
3116
+ }
3117
+ };
3118
+ A(M);
3119
+ }
3120
+ return /* @__PURE__ */ e.jsxs(Pe, { onOpenChange: (v) => n(v), children: [
3121
+ /* @__PURE__ */ e.jsx(Ue, { asChild: !0, children: /* @__PURE__ */ e.jsx(Mt, { className: "size-4 cursor-pointer text-muted-foreground hover:text-foreground" }) }),
3122
+ /* @__PURE__ */ e.jsx(Ge, { align: "center", className: "max-w-65", children: /* @__PURE__ */ e.jsxs("div", { className: "grid gap-4", children: [
3123
+ /* @__PURE__ */ e.jsxs("div", { className: "space-y-2", children: [
3124
+ /* @__PURE__ */ e.jsx("h4", { className: "font-medium leading-none", children: "Scale Options" }),
3125
+ /* @__PURE__ */ e.jsx("p", { className: "text-sm text-muted-foreground", children: "Set the scale for the number axis" })
3126
+ ] }),
3127
+ /* @__PURE__ */ e.jsxs("div", { className: "grid gap-2", children: [
3128
+ /* @__PURE__ */ e.jsxs("div", { className: "grid grid-cols-3 items-center gap-2", children: [
3129
+ /* @__PURE__ */ e.jsx(B, { htmlFor: "scale", children: "Type" }),
3130
+ /* @__PURE__ */ e.jsxs(
3131
+ Oe,
3132
+ {
3133
+ disabled: P,
3134
+ value: o,
3135
+ onValueChange: (v) => l(v),
3136
+ children: [
3137
+ /* @__PURE__ */ e.jsx(Me, { className: "col-span-2 h-8 w-full focus:ring-1 focus:ring-offset-0", children: /* @__PURE__ */ e.jsx(Te, {}) }),
3138
+ /* @__PURE__ */ e.jsx(Ae, { id: "type", children: /* @__PURE__ */ e.jsxs(He, { children: [
3139
+ /* @__PURE__ */ e.jsx(Le, { children: "Option" }),
3140
+ /* @__PURE__ */ e.jsx(X, { value: "linear", children: "Linear" }),
3141
+ /* @__PURE__ */ e.jsx(X, { value: "logarithmic", children: "Logarithmic" })
3142
+ ] }) })
3143
+ ]
3144
+ }
3145
+ )
3146
+ ] }),
3147
+ o == "linear" && /* @__PURE__ */ e.jsxs("div", { className: "grid grid-cols-3 items-center gap-2 py-1", children: [
3148
+ /* @__PURE__ */ e.jsx(B, { htmlFor: "scale-option", children: "Setup" }),
3149
+ /* @__PURE__ */ e.jsxs(
3150
+ ra,
3151
+ {
3152
+ disabled: P,
3153
+ id: "scale-option",
3154
+ value: u,
3155
+ onValueChange: (v) => N(v),
3156
+ className: "col-span-2 flex gap-3",
3157
+ defaultValue: "x",
3158
+ children: [
3159
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center space-x-2", children: [
3160
+ /* @__PURE__ */ e.jsx(Ye, { value: "auto", id: "r1" }),
3161
+ /* @__PURE__ */ e.jsx("label", { className: "text-sm", htmlFor: "r1", children: "Auto" })
3162
+ ] }),
3163
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center space-x-2", children: [
3164
+ /* @__PURE__ */ e.jsx(Ye, { value: "custom", id: "r2" }),
3165
+ /* @__PURE__ */ e.jsx("label", { className: "text-sm", htmlFor: "r2", children: "Custom" })
3166
+ ] })
3167
+ ]
3168
+ }
3169
+ )
3170
+ ] }),
3171
+ u === "custom" && o == "linear" && D(),
3172
+ G(),
3173
+ /* @__PURE__ */ e.jsx(Tt, {}),
3174
+ /* @__PURE__ */ e.jsx("div", { className: "grid grid-cols-3", children: /* @__PURE__ */ e.jsx(
3175
+ z,
3176
+ {
3177
+ onClick: te,
3178
+ variant: "secondary",
3179
+ className: "col-span-1 col-start-3 h-8 w-full",
3180
+ children: "Apply"
3181
+ }
3182
+ ) })
3183
+ ] })
3184
+ ] }) })
3185
+ ] });
3186
+ }
3187
+ function Un({ idx: s }) {
3188
+ var c;
3189
+ const n = r((h) => {
3190
+ var g;
3191
+ return (g = h.card) == null ? void 0 : g.preferences;
3192
+ }), a = r(
3193
+ (h) => {
3194
+ var g;
3195
+ return (g = h.card.preferences) == null ? void 0 : g.datasetOptions;
3196
+ }
3197
+ ), t = r(
3198
+ (h) => h.actions.setCardPreferences
3199
+ ), i = (c = n == null ? void 0 : n.chartOptions) == null ? void 0 : c.indexAxis, o = a == null ? void 0 : a.find((h) => h.idx === s);
3200
+ function l(h, g) {
3201
+ (h === "end" || h === "start") && Et(Lt());
3202
+ const m = {
3203
+ display: h !== "none",
3204
+ align: h,
3205
+ anchor: h,
3206
+ clamp: !0
3207
+ };
3208
+ if (!o)
3209
+ t({
3210
+ ...n,
3211
+ datasetOptions: [
3212
+ ...a || [],
3213
+ {
3214
+ idx: g,
3215
+ datalabels: m
3216
+ }
3217
+ ]
3218
+ });
3219
+ else {
3220
+ const u = { ...o };
3221
+ u.datalabels = m;
3222
+ const N = a == null ? void 0 : a.map(
3223
+ (d) => d.idx === g ? u : d
3224
+ );
3225
+ t({
3226
+ ...n,
3227
+ datasetOptions: N
3228
+ });
3229
+ }
3230
+ }
3231
+ return /* @__PURE__ */ e.jsxs(Pe, { children: [
3232
+ /* @__PURE__ */ e.jsx(Ue, { children: /* @__PURE__ */ e.jsx(xn, { className: "invisible size-4 rotate-[135deg] cursor-pointer text-muted-foreground hover:text-foreground group-hover:visible" }) }),
3233
+ /* @__PURE__ */ e.jsx(Ge, { className: "w-fit p-1", children: /* @__PURE__ */ e.jsxs("div", { className: "flex gap-1", children: [
3234
+ /* @__PURE__ */ e.jsx(
3235
+ z,
3236
+ {
3237
+ onClick: () => l("none", s),
3238
+ size: "sm",
3239
+ variant: "secondary",
3240
+ className: "h-7 p-1 text-xs font-normal",
3241
+ children: /* @__PURE__ */ e.jsx(At, { className: "size-4" })
3242
+ }
3243
+ ),
3244
+ /* @__PURE__ */ e.jsx(
3245
+ z,
3246
+ {
3247
+ onClick: () => l("start", s),
3248
+ size: "sm",
3249
+ variant: "secondary",
3250
+ className: "h-7 p-1 text-xs font-normal",
3251
+ children: /* @__PURE__ */ e.jsx(
3252
+ an,
3253
+ {
3254
+ className: Y("h-4 w-4", {
3255
+ "rotate-90": i === "y"
3256
+ })
3257
+ }
3258
+ )
3259
+ }
3260
+ ),
3261
+ /* @__PURE__ */ e.jsx(
3262
+ z,
3263
+ {
3264
+ onClick: () => l("center", s),
3265
+ size: "sm",
3266
+ variant: "secondary",
3267
+ className: "h-7 p-1 text-xs font-normal",
3268
+ children: /* @__PURE__ */ e.jsx(
3269
+ nn,
3270
+ {
3271
+ className: Y("h-4 w-4", {
3272
+ "rotate-90": i === "y"
3273
+ })
3274
+ }
3275
+ )
3276
+ }
3277
+ ),
3278
+ /* @__PURE__ */ e.jsx(
3279
+ z,
3280
+ {
3281
+ onClick: () => l("end", s),
3282
+ size: "sm",
3283
+ variant: "secondary",
3284
+ className: "h-7 p-1 text-xs font-normal",
3285
+ children: /* @__PURE__ */ e.jsx(
3286
+ tn,
3287
+ {
3288
+ className: Y("h-4 w-4", {
3289
+ "rotate-90": i === "y"
3290
+ })
3291
+ }
3292
+ )
3293
+ }
3294
+ )
3295
+ ] }) })
3296
+ ] });
3297
+ }
3298
+ function za() {
3299
+ const s = r((h) => h.card), n = r(
3300
+ (h) => {
3301
+ var g, m, u;
3302
+ return (u = (m = (g = h == null ? void 0 : h.card) == null ? void 0 : g.preferences) == null ? void 0 : m.chartOptions) == null ? void 0 : u.indexAxis;
3303
+ }
3304
+ ), a = n === "y" ? "Y axis" : "X axis", t = n === "y" ? "X axis" : "Y axis", {
3305
+ keys: i,
3306
+ metricKeys: o,
3307
+ dimensionKeys: l
3308
+ } = hs(s.data || []);
3309
+ let c = o;
3310
+ if (s.type === "stackedBar") {
3311
+ const h = Dt({
3312
+ dataArray: s.data || [],
3313
+ groupKey: l[0],
3314
+ pivotKey: l[1],
3315
+ valueKey: c[0]
3316
+ }), { metricKeys: g } = hs(h);
3317
+ c = g;
3318
+ }
3319
+ return i.length === 0 ? null : /* @__PURE__ */ e.jsxs("div", { className: "space-y-4", children: [
3320
+ /* @__PURE__ */ e.jsxs("div", { className: "space-y-2", children: [
3321
+ /* @__PURE__ */ e.jsx(B, { children: a }),
3322
+ /* @__PURE__ */ e.jsx("div", { className: "my-1 space-y-1", children: /* @__PURE__ */ e.jsx("div", { className: "rounded-md bg-muted/70 px-2 py-1 hover:bg-muted", children: /* @__PURE__ */ e.jsx("p", { children: l[0] }) }) })
3323
+ ] }),
3324
+ /* @__PURE__ */ e.jsxs("div", { className: "space-y-2", children: [
3325
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center justify-between gap-5", children: [
3326
+ /* @__PURE__ */ e.jsx(B, { children: t }),
3327
+ /* @__PURE__ */ e.jsx(wa, {})
3328
+ ] }),
3329
+ /* @__PURE__ */ e.jsx("div", { className: "my-1 space-y-1", children: c.map((h, g) => /* @__PURE__ */ e.jsx(Gn, { col: h, idx: g }, h)) })
3330
+ ] })
3331
+ ] });
3332
+ }
3333
+ function Gn({ col: s, idx: n }) {
3334
+ const a = r((c) => {
3335
+ var h;
3336
+ return (h = c.card) == null ? void 0 : h.preferences;
3337
+ }), t = r(
3338
+ (c) => {
3339
+ var h;
3340
+ return (h = c.card.preferences) == null ? void 0 : h.datasetOptions;
3341
+ }
3342
+ ), i = t == null ? void 0 : t.find((c) => c.idx === n), { setCardPreferences: o } = r((c) => c.actions);
3343
+ function l(c) {
3344
+ if (!i)
3345
+ o({
3346
+ ...a,
3347
+ datasetOptions: [
3348
+ ...t || [],
3349
+ {
3350
+ idx: n,
3351
+ type: c === "area" ? "line" : c,
3352
+ fill: c === "area" ? "origin" : ""
3353
+ }
3354
+ ]
3355
+ });
3356
+ else {
3357
+ const h = { ...i };
3358
+ h.type = c === "area" ? "line" : c, h.fill = c === "area" ? "origin" : "";
3359
+ const g = t == null ? void 0 : t.map(
3360
+ (m) => m.idx === n ? h : m
3361
+ );
3362
+ o({
3363
+ ...a,
3364
+ datasetOptions: g
3365
+ });
3366
+ }
3367
+ }
3368
+ return /* @__PURE__ */ e.jsxs("div", { className: "group flex items-center justify-between gap-5 rounded-md bg-muted/70 px-2 py-1 hover:bg-muted", children: [
3369
+ /* @__PURE__ */ e.jsx("p", { children: s }),
3370
+ /* @__PURE__ */ e.jsxs("div", { className: "flex gap-2", children: [
3371
+ /* @__PURE__ */ e.jsx(
3372
+ ws,
3373
+ {
3374
+ onClick: () => l("bar"),
3375
+ className: "invisible size-4 cursor-pointer text-muted-foreground hover:text-foreground group-hover:visible"
3376
+ }
3377
+ ),
3378
+ /* @__PURE__ */ e.jsx(
3379
+ zs,
3380
+ {
3381
+ onClick: () => l("line"),
3382
+ className: "invisible size-4 cursor-pointer text-muted-foreground hover:text-foreground group-hover:visible"
3383
+ }
3384
+ ),
3385
+ /* @__PURE__ */ e.jsx(
3386
+ Jt,
3387
+ {
3388
+ onClick: () => l("area"),
3389
+ className: "invisible size-4 cursor-pointer text-muted-foreground hover:text-foreground group-hover:visible"
3390
+ }
3391
+ ),
3392
+ /* @__PURE__ */ e.jsx(
3393
+ Ss,
3394
+ {
3395
+ orientation: "vertical",
3396
+ className: "invisible size-4 cursor-pointer py-2 text-muted-foreground hover:text-foreground group-hover:visible"
3397
+ }
3398
+ ),
3399
+ /* @__PURE__ */ e.jsx(Un, { idx: n })
3400
+ ] })
3401
+ ] });
3402
+ }
3403
+ function Jn({
3404
+ cardType: s
3405
+ }) {
3406
+ return /* @__PURE__ */ e.jsx("div", { className: "space-y-6 px-6 py-2", children: /* @__PURE__ */ e.jsxs(Se, { defaultValue: ["item-2"], type: "multiple", children: [
3407
+ /* @__PURE__ */ e.jsxs(V, { value: "item-1", children: [
3408
+ /* @__PURE__ */ e.jsx(R, { children: `${ks(s)} Chart` }),
3409
+ /* @__PURE__ */ e.jsxs(_, { className: "space-y-4 font-mono text-xs", children: [
3410
+ /* @__PURE__ */ e.jsx("div", { className: "rounded bg-muted px-2 py-1 text-xs", children: "SELECT x-axis, y-axis-1, y-axis-2,... FROM table" }),
3411
+ /* @__PURE__ */ e.jsxs("ul", { className: "ml-6 list-disc text-xs [&>li]:mt-2", children: [
3412
+ /* @__PURE__ */ e.jsx("li", { children: "x-axis - category" }),
3413
+ /* @__PURE__ */ e.jsx("li", { children: "y-axis1 - number" }),
3414
+ /* @__PURE__ */ e.jsx("li", { children: "y-axis2 - number" })
3415
+ ] }),
3416
+ /* @__PURE__ */ e.jsxs("div", { children: [
3417
+ "See ",
3418
+ /* @__PURE__ */ e.jsx(
3419
+ "a",
3420
+ {
3421
+ target: "_blank",
3422
+ onClick: (n) => n.stopPropagation(),
3423
+ className: "text-blue-700",
3424
+ href: "https://docs.semaphor.cloud/concepts/visuals#line-chart",
3425
+ children: "example"
3426
+ }
3427
+ ),
3428
+ " in the docs."
3429
+ ] })
3430
+ ] })
3431
+ ] }),
3432
+ /* @__PURE__ */ e.jsxs(V, { value: "item-2", children: [
3433
+ /* @__PURE__ */ e.jsx(R, { children: "Settings" }),
3434
+ /* @__PURE__ */ e.jsxs(_, { className: "space-y-4 px-2", children: [
3435
+ /* @__PURE__ */ e.jsx(Fs, {}),
3436
+ /* @__PURE__ */ e.jsx(za, {})
3437
+ ] })
3438
+ ] }),
3439
+ /* @__PURE__ */ e.jsxs(V, { value: "item-3", children: [
3440
+ /* @__PURE__ */ e.jsx(R, { children: "Filter on click" }),
3441
+ /* @__PURE__ */ e.jsx(_, { className: "px-2", children: /* @__PURE__ */ e.jsx(De, {}) })
3442
+ ] })
3443
+ ] }) });
3444
+ }
3445
+ function Os() {
3446
+ var i, o, l;
3447
+ const s = r(
3448
+ (c) => c.card.cfg
3449
+ ), n = r((c) => c.actions.setCardCfg), a = r((c) => c.card.type);
3450
+ function t(c) {
3451
+ var m;
3452
+ const h = {
3453
+ datalabels: {
3454
+ display: c !== "none",
3455
+ align: c,
3456
+ anchor: c,
3457
+ clamp: !0
3458
+ }
3459
+ }, g = {
3460
+ ...s,
3461
+ options: {
3462
+ ...s == null ? void 0 : s.options,
3463
+ plugins: {
3464
+ ...(m = s == null ? void 0 : s.options) == null ? void 0 : m.plugins,
3465
+ ...h
3466
+ }
3467
+ }
3468
+ };
3469
+ n(g), console.log(c);
3470
+ }
3471
+ return /* @__PURE__ */ e.jsxs("div", { className: "space-y-2", children: [
3472
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center justify-between", children: [
3473
+ /* @__PURE__ */ e.jsx("label", { className: "font-medium", children: "Data Labels" }),
3474
+ !["pyramid", "range"].includes(a) && /* @__PURE__ */ e.jsx(wa, {})
3475
+ ] }),
3476
+ /* @__PURE__ */ e.jsxs(
3477
+ Oe,
3478
+ {
3479
+ value: (l = (o = (i = s == null ? void 0 : s.options) == null ? void 0 : i.plugins) == null ? void 0 : o.datalabels) == null ? void 0 : l.anchor,
3480
+ onValueChange: t,
3481
+ defaultValue: "none",
3482
+ children: [
3483
+ /* @__PURE__ */ e.jsx(Me, { className: "h-8 w-full focus:ring-1 focus:ring-offset-0", children: /* @__PURE__ */ e.jsx(Te, { placeholder: "Select position" }) }),
3484
+ /* @__PURE__ */ e.jsx(Ae, { children: /* @__PURE__ */ e.jsxs(He, { children: [
3485
+ /* @__PURE__ */ e.jsx(Le, { children: "Data Labels" }),
3486
+ /* @__PURE__ */ e.jsx(X, { value: "none", children: "None" }),
3487
+ a !== "pyramid" && /* @__PURE__ */ e.jsx(X, { value: "start", children: "Start" }),
3488
+ /* @__PURE__ */ e.jsx(X, { value: "center", children: "Center" }),
3489
+ a !== "pyramid" && /* @__PURE__ */ e.jsx(X, { value: "end", children: "End" })
3490
+ ] }) })
3491
+ ]
3492
+ }
3493
+ )
3494
+ ] });
3495
+ }
3496
+ function Qn({
3497
+ cardType: s
3498
+ }) {
3499
+ function n(a) {
3500
+ const t = "SELECT label, [group], x-axis, y-axis, radius FROM table", i = "SELECT label, [group], x-axis, y-axis FROM table";
3501
+ return /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
3502
+ /* @__PURE__ */ e.jsx("div", { className: "bg-muted px-2 py-1 rounded text-xs", children: a === "bubble" ? t : i }),
3503
+ /* @__PURE__ */ e.jsxs("ul", { className: " ml-6 list-disc [&>li]:mt-2 text-xs", children: [
3504
+ /* @__PURE__ */ e.jsx("li", { children: "label - category" }),
3505
+ /* @__PURE__ */ e.jsx("li", { children: "group - category" }),
3506
+ /* @__PURE__ */ e.jsx("li", { children: "x-axis - category" }),
3507
+ /* @__PURE__ */ e.jsx("li", { children: "y-axis - category" }),
3508
+ a === "bubble" && /* @__PURE__ */ e.jsx("li", { children: "radius - number" })
3509
+ ] }),
3510
+ /* @__PURE__ */ e.jsxs("div", { children: [
3511
+ "See ",
3512
+ /* @__PURE__ */ e.jsx(
3513
+ "a",
3514
+ {
3515
+ target: "_blank",
3516
+ onClick: (o) => o.stopPropagation(),
3517
+ className: "text-blue-700",
3518
+ href: "https://docs.semaphor.cloud/concepts/visuals#pie-chart",
3519
+ children: "example"
3520
+ }
3521
+ ),
3522
+ " in the docs."
3523
+ ] })
3524
+ ] });
3525
+ }
3526
+ return /* @__PURE__ */ e.jsx("div", { className: "px-6 py-2 space-y-6", children: /* @__PURE__ */ e.jsxs(Se, { defaultValue: ["item-2"], type: "multiple", children: [
3527
+ /* @__PURE__ */ e.jsxs(V, { value: "item-1", children: [
3528
+ /* @__PURE__ */ e.jsx(R, { children: `${ks(s)} Chart` }),
3529
+ /* @__PURE__ */ e.jsx(_, { className: " space-y-4 font-mono text-xs ", children: n(s) })
3530
+ ] }),
3531
+ /* @__PURE__ */ e.jsxs(V, { value: "item-2", children: [
3532
+ /* @__PURE__ */ e.jsx(R, { children: "Settings" }),
3533
+ /* @__PURE__ */ e.jsx(_, { className: "px-2", children: /* @__PURE__ */ e.jsx(Os, {}) })
3534
+ ] }),
3535
+ /* @__PURE__ */ e.jsxs(V, { value: "item-3", children: [
3536
+ /* @__PURE__ */ e.jsx(R, { children: "Filter on click" }),
3537
+ /* @__PURE__ */ e.jsx(_, { className: "px-2", children: /* @__PURE__ */ e.jsx(De, {}) })
3538
+ ] })
3539
+ ] }) });
3540
+ }
3541
+ const Wn = {
3542
+ datasets: [
3543
+ {
3544
+ type: "line",
3545
+ label: "Sum_sales",
3546
+ data: []
3547
+ },
3548
+ {
3549
+ type: "bar",
3550
+ label: "Sum_profit",
3551
+ data: []
3552
+ }
3553
+ ]
3554
+ }, Yn = {
3555
+ datasets: [
3556
+ {
3557
+ fill: "origin",
3558
+ type: "line",
3559
+ label: "Sum_sales",
3560
+ data: []
3561
+ }
3562
+ ]
3563
+ };
3564
+ function Xn() {
3565
+ const s = r((n) => n.card.type);
3566
+ return /* @__PURE__ */ e.jsxs("div", { className: "space-y-6 p-6", children: [
3567
+ /* @__PURE__ */ e.jsx(
3568
+ Se,
3569
+ {
3570
+ className: " ",
3571
+ type: "single",
3572
+ collapsible: !0,
3573
+ children: Zn(s)
3574
+ }
3575
+ ),
3576
+ /* @__PURE__ */ e.jsx("section", { className: "", children: ["line", "bar"].includes(s) && /* @__PURE__ */ e.jsx(Fs, {}) }),
3577
+ /* @__PURE__ */ e.jsx("div", { children: !["kpi"].includes(s) && /* @__PURE__ */ e.jsx(Os, {}) }),
3578
+ /* @__PURE__ */ e.jsx("div", { children: !["kpi"].includes(s) && /* @__PURE__ */ e.jsx(De, {}) })
3579
+ ] });
3580
+ }
3581
+ function Zn(s) {
3582
+ if (["line", "bar"].includes(s))
3583
+ return /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
3584
+ /* @__PURE__ */ e.jsxs(V, { value: "item-1", children: [
3585
+ /* @__PURE__ */ e.jsx(R, { className: "font-normal", children: /* @__PURE__ */ e.jsx("p", { children: "Chart Query" }) }),
3586
+ /* @__PURE__ */ e.jsxs(_, { className: " ", children: [
3587
+ /* @__PURE__ */ e.jsx("div", { className: "rounded bg-muted px-2 py-1 font-mono text-xs font-semibold", children: "SELECT x-axis, y-axis-1, y-axis-2, y-axis-3,... FROM table" }),
3588
+ /* @__PURE__ */ e.jsxs("ul", { className: "my-6 ml-6 list-disc text-xs font-normal [&>li]:mt-2", children: [
3589
+ /* @__PURE__ */ e.jsx("li", { children: "X-axis - Category (ex. city)" }),
3590
+ /* @__PURE__ */ e.jsx("li", { children: "Y-axis - Number (ex. population)" })
3591
+ ] })
3592
+ ] })
3593
+ ] }),
3594
+ /* @__PURE__ */ e.jsxs(V, { value: "item-2", children: [
3595
+ /* @__PURE__ */ e.jsx(R, { className: "font-normal", children: "Mixed Chart" }),
3596
+ /* @__PURE__ */ e.jsxs(_, { className: "space-y-2 text-xs", children: [
3597
+ /* @__PURE__ */ e.jsxs("p", { children: [
3598
+ "Click ",
3599
+ /* @__PURE__ */ e.jsx("b", { children: "Customize" }),
3600
+ " and change the `type` property in the dataset."
3601
+ ] }),
3602
+ /* @__PURE__ */ e.jsx("pre", { children: JSON.stringify(Wn, null, 2) })
3603
+ ] })
3604
+ ] }),
3605
+ /* @__PURE__ */ e.jsxs(V, { value: "item-3", children: [
3606
+ /* @__PURE__ */ e.jsx(R, { className: "font-normal", children: "Area Chart" }),
3607
+ /* @__PURE__ */ e.jsxs(_, { className: "space-y-2 text-xs", children: [
3608
+ /* @__PURE__ */ e.jsxs("p", { children: [
3609
+ "Click ",
3610
+ /* @__PURE__ */ e.jsx("b", { children: "Customize" }),
3611
+ " and add `fill` property to the dataset. See",
3612
+ /* @__PURE__ */ e.jsx(
3613
+ "a",
3614
+ {
3615
+ className: "mx-1 text-blue-500 hover:underline",
3616
+ href: "https://www.chartjs.org/docs/latest/samples/area/line-boundaries.html",
3617
+ target: "_blank",
3618
+ children: "docs"
3619
+ }
3620
+ ),
3621
+ "for more options."
3622
+ ] }),
3623
+ /* @__PURE__ */ e.jsx("pre", { children: JSON.stringify(Yn, null, 2) })
3624
+ ] })
3625
+ ] })
3626
+ ] });
3627
+ if (s === "bubble")
3628
+ return /* @__PURE__ */ e.jsx(e.Fragment, { children: /* @__PURE__ */ e.jsxs(V, { value: "item-1", children: [
3629
+ /* @__PURE__ */ e.jsx(R, { className: "font-normal", children: /* @__PURE__ */ e.jsxs("p", { children: [
3630
+ "How to create a ",
3631
+ /* @__PURE__ */ e.jsx("span", { children: s }),
3632
+ " chart query?"
3633
+ ] }) }),
3634
+ /* @__PURE__ */ e.jsxs(_, { className: " ", children: [
3635
+ /* @__PURE__ */ e.jsx("div", { className: "rounded bg-muted px-2 py-1 font-mono text-xs font-semibold", children: "SELECT label, x-axis, y-axis, radius FROM table" }),
3636
+ /* @__PURE__ */ e.jsxs("ul", { className: "my-6 ml-6 list-disc text-xs font-normal [&>li]:mt-2", children: [
3637
+ /* @__PURE__ */ e.jsx("li", { children: "Label - Category (ex. city)" }),
3638
+ /* @__PURE__ */ e.jsx("li", { children: "Bubble Group (opt) - Category (ex. state)" }),
3639
+ /* @__PURE__ */ e.jsx("li", { children: "X-axis - Number (ex. avg. age)" }),
3640
+ /* @__PURE__ */ e.jsx("li", { children: "Y-axis - Number (ex. avg. weight)" }),
3641
+ /* @__PURE__ */ e.jsx("li", { children: "Radius - Number (ex. population)" })
3642
+ ] })
3643
+ ] })
3644
+ ] }) });
3645
+ if (s === "scatter")
3646
+ return /* @__PURE__ */ e.jsx(e.Fragment, { children: /* @__PURE__ */ e.jsxs(V, { value: "item-1", children: [
3647
+ /* @__PURE__ */ e.jsx(R, { className: "font-normal", children: /* @__PURE__ */ e.jsxs("p", { children: [
3648
+ "How to create a ",
3649
+ /* @__PURE__ */ e.jsx("span", { children: s }),
3650
+ " chart query?"
3651
+ ] }) }),
3652
+ /* @__PURE__ */ e.jsxs(_, { className: " ", children: [
3653
+ /* @__PURE__ */ e.jsx("div", { className: "rounded bg-muted px-2 py-1 font-mono text-xs font-semibold", children: "SELECT label, x-axis, y-axis FROM table" }),
3654
+ /* @__PURE__ */ e.jsxs("ul", { className: "my-6 ml-6 list-disc text-xs font-normal [&>li]:mt-2", children: [
3655
+ /* @__PURE__ */ e.jsx("li", { children: "Label - Category (ex. city)" }),
3656
+ /* @__PURE__ */ e.jsx("li", { children: "Group (opt) - Category (ex. state)" }),
3657
+ /* @__PURE__ */ e.jsx("li", { children: "X-axis - Number (ex. avg. age)" }),
3658
+ /* @__PURE__ */ e.jsx("li", { children: "Y-axis - Number (ex. avg. weight)" })
3659
+ ] })
3660
+ ] })
3661
+ ] }) });
3662
+ if (["pie", "doughnut", "polarArea"].includes(s))
3663
+ return /* @__PURE__ */ e.jsx(e.Fragment, { children: /* @__PURE__ */ e.jsxs(V, { value: "item-1", children: [
3664
+ /* @__PURE__ */ e.jsx(R, { className: "font-normal", children: /* @__PURE__ */ e.jsxs("p", { children: [
3665
+ /* @__PURE__ */ e.jsx("span", { children: s === "polarArea" ? "Polar" : s.charAt(0).toUpperCase() + s.slice(1) }),
3666
+ " ",
3667
+ "chart query"
3668
+ ] }) }),
3669
+ /* @__PURE__ */ e.jsxs(_, { className: " ", children: [
3670
+ /* @__PURE__ */ e.jsx("div", { className: "rounded bg-muted px-2 py-1 font-mono text-xs font-semibold", children: "SELECT label, measure FROM table" }),
3671
+ /* @__PURE__ */ e.jsxs("ul", { className: "my-6 ml-6 list-disc text-xs font-normal [&>li]:mt-2", children: [
3672
+ /* @__PURE__ */ e.jsx("li", { children: "Label - Category (ex. city)" }),
3673
+ /* @__PURE__ */ e.jsx("li", { children: "Measure - Number (ex. population)" })
3674
+ ] })
3675
+ ] })
3676
+ ] }) });
3677
+ }
3678
+ function el() {
3679
+ var h, g, m, u, N;
3680
+ const s = r((d) => d.card.preferences), n = r(
3681
+ (d) => d.actions.setCardPreferences
3682
+ ), a = r(
3683
+ (d) => d.actions.setNumberFormat
3684
+ );
3685
+ r(
3686
+ (d) => {
3687
+ var x, f;
3688
+ return (f = (x = d.card.preferences) == null ? void 0 : x.formatNumber) == null ? void 0 : f.decimalPlaces;
3689
+ }
3690
+ );
3691
+ const t = r(
3692
+ (d) => {
3693
+ var x, f;
3694
+ return (f = (x = d.card.preferences) == null ? void 0 : x.formatNumber) == null ? void 0 : f.locale;
3695
+ }
3696
+ ), i = r(
3697
+ (d) => {
3698
+ var x, f;
3699
+ return (f = (x = d.card.preferences) == null ? void 0 : x.formatNumber) == null ? void 0 : f.currency;
3700
+ }
3701
+ );
3702
+ r(
3703
+ (d) => d.actions.setFilterOnClickField
3704
+ );
3705
+ const o = r(
3706
+ (d) => {
3707
+ var x, f;
3708
+ return (f = (x = d.card.preferences) == null ? void 0 : x.formatNumber) == null ? void 0 : f.colorRanges;
3709
+ }
3710
+ ) || [], l = r(
3711
+ (d) => d.actions.setColorRanges
3712
+ ), c = [...new Set(Rs.map((d) => d.currency))];
3713
+ return /* @__PURE__ */ e.jsxs("div", { children: [
3714
+ /* @__PURE__ */ e.jsxs("div", { className: "mb-3 flex items-center gap-2", children: [
3715
+ /* @__PURE__ */ e.jsx(
3716
+ Ke,
3717
+ {
3718
+ checked: !!((h = s == null ? void 0 : s.formatNumber) != null && h.enabled),
3719
+ onCheckedChange: (d) => {
3720
+ n({
3721
+ ...s,
3722
+ formatNumber: {
3723
+ ...s == null ? void 0 : s.formatNumber,
3724
+ enabled: d
3725
+ }
3726
+ });
3727
+ }
3728
+ }
3729
+ ),
3730
+ /* @__PURE__ */ e.jsx(B, { children: "Format Number" })
3731
+ ] }),
3732
+ ((g = s == null ? void 0 : s.formatNumber) == null ? void 0 : g.enabled) === !0 && /* @__PURE__ */ e.jsxs("div", { className: "flex flex-col gap-2", children: [
3733
+ /* @__PURE__ */ e.jsx("div", { children: /* @__PURE__ */ e.jsxs("div", { className: "space-y-4 p-2", children: [
3734
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-2", children: [
3735
+ /* @__PURE__ */ e.jsxs("div", { className: "w-full space-y-1", children: [
3736
+ /* @__PURE__ */ e.jsx(B, { children: "Locale" }),
3737
+ /* @__PURE__ */ e.jsxs(
3738
+ Oe,
3739
+ {
3740
+ value: t || "en-US",
3741
+ onValueChange: (d) => {
3742
+ var x, f, w;
3743
+ return a(
3744
+ ((x = s == null ? void 0 : s.formatNumber) == null ? void 0 : x.decimalPlaces) || 0,
3745
+ ((f = s == null ? void 0 : s.formatNumber) == null ? void 0 : f.currency) || "",
3746
+ d || "en-US",
3747
+ ((w = s == null ? void 0 : s.formatNumber) == null ? void 0 : w.suffix) || ""
3748
+ );
3749
+ },
3750
+ children: [
3751
+ /* @__PURE__ */ e.jsx(Me, { className: "col-span-6 h-8 w-full focus:ring-1 focus:ring-offset-0", children: /* @__PURE__ */ e.jsx(Te, {}) }),
3752
+ /* @__PURE__ */ e.jsx(Ae, { children: /* @__PURE__ */ e.jsxs(He, { children: [
3753
+ /* @__PURE__ */ e.jsx(Le, { children: "Format" }),
3754
+ Rs.map((d) => /* @__PURE__ */ e.jsx(X, { value: d.locale, children: d.locale }, d.locale))
3755
+ ] }) })
3756
+ ]
3757
+ }
3758
+ )
3759
+ ] }),
3760
+ /* @__PURE__ */ e.jsxs("div", { className: "w-full space-y-1", children: [
3761
+ /* @__PURE__ */ e.jsx(B, { children: "Currency" }),
3762
+ /* @__PURE__ */ e.jsxs(
3763
+ Oe,
3764
+ {
3765
+ value: i || "none",
3766
+ onValueChange: (d) => {
3767
+ var x, f, w;
3768
+ return a(
3769
+ ((x = s == null ? void 0 : s.formatNumber) == null ? void 0 : x.decimalPlaces) || 0,
3770
+ d === "none" ? "" : d,
3771
+ ((f = s == null ? void 0 : s.formatNumber) == null ? void 0 : f.locale) || "",
3772
+ ((w = s == null ? void 0 : s.formatNumber) == null ? void 0 : w.suffix) || ""
3773
+ );
3774
+ },
3775
+ children: [
3776
+ /* @__PURE__ */ e.jsx(Me, { className: "col-span-6 h-8 w-full focus:ring-1 focus:ring-offset-0", children: /* @__PURE__ */ e.jsx(Te, {}) }),
3777
+ /* @__PURE__ */ e.jsx(Ae, { children: /* @__PURE__ */ e.jsxs(He, { children: [
3778
+ /* @__PURE__ */ e.jsx(Le, { children: "Currency" }),
3779
+ /* @__PURE__ */ e.jsx(X, { value: "none", children: "None" }, "none"),
3780
+ c.map((d) => /* @__PURE__ */ e.jsx(X, { value: d, children: d }, d))
3781
+ ] }) })
3782
+ ]
3783
+ }
3784
+ )
3785
+ ] })
3786
+ ] }),
3787
+ /* @__PURE__ */ e.jsxs("div", { className: "flex gap-2", children: [
3788
+ /* @__PURE__ */ e.jsxs("div", { className: "w-full space-y-1", children: [
3789
+ /* @__PURE__ */ e.jsx(B, { children: "Decimals" }),
3790
+ /* @__PURE__ */ e.jsxs(
3791
+ Oe,
3792
+ {
3793
+ value: ((u = (m = s == null ? void 0 : s.formatNumber) == null ? void 0 : m.decimalPlaces) == null ? void 0 : u.toString()) || "0",
3794
+ onValueChange: (d) => {
3795
+ var x, f, w;
3796
+ return a(
3797
+ Number(d),
3798
+ ((x = s == null ? void 0 : s.formatNumber) == null ? void 0 : x.currency) || "",
3799
+ ((f = s == null ? void 0 : s.formatNumber) == null ? void 0 : f.locale) || "",
3800
+ ((w = s == null ? void 0 : s.formatNumber) == null ? void 0 : w.suffix) || ""
3801
+ );
3802
+ },
3803
+ children: [
3804
+ /* @__PURE__ */ e.jsx(Me, { className: "col-span-3 h-8 w-full focus:ring-1 focus:ring-offset-0", children: /* @__PURE__ */ e.jsx(Te, {}) }),
3805
+ /* @__PURE__ */ e.jsx(Ae, { children: ["0", "1", "2", "3", "4"].map((d) => /* @__PURE__ */ e.jsx(X, { value: d, children: d }, d)) })
3806
+ ]
3807
+ }
3808
+ )
3809
+ ] }),
3810
+ /* @__PURE__ */ e.jsxs("div", { className: "w-full space-y-1", children: [
3811
+ /* @__PURE__ */ e.jsx(B, { children: "Suffix" }),
3812
+ /* @__PURE__ */ e.jsx(
3813
+ ae,
3814
+ {
3815
+ value: ((N = s == null ? void 0 : s.formatNumber) == null ? void 0 : N.suffix) || "",
3816
+ className: "h-8 font-mono text-xs focus-visible:ring-0 focus-visible:ring-ring focus-visible:ring-offset-0",
3817
+ placeholder: "K, M, B, %",
3818
+ onChange: (d) => {
3819
+ var x, f, w;
3820
+ return a(
3821
+ ((x = s == null ? void 0 : s.formatNumber) == null ? void 0 : x.decimalPlaces) || 0,
3822
+ ((f = s == null ? void 0 : s.formatNumber) == null ? void 0 : f.currency) || "",
3823
+ ((w = s == null ? void 0 : s.formatNumber) == null ? void 0 : w.locale) || "",
3824
+ d.target.value
3825
+ );
3826
+ }
3827
+ }
3828
+ )
3829
+ ] })
3830
+ ] })
3831
+ ] }) }),
3832
+ /* @__PURE__ */ e.jsx(Ss, { className: "my-3" }),
3833
+ /* @__PURE__ */ e.jsx(
3834
+ It,
3835
+ {
3836
+ colorRanges: o,
3837
+ setColorRanges: l
3838
+ }
3839
+ )
3840
+ ] })
3841
+ ] });
3842
+ }
3843
+ function sl() {
3844
+ return /* @__PURE__ */ e.jsxs("div", { className: "space-y-6 px-6 py-2", children: [
3845
+ /* @__PURE__ */ e.jsx(Se, { type: "single", collapsible: !0, children: /* @__PURE__ */ e.jsxs(V, { value: "item-1", children: [
3846
+ /* @__PURE__ */ e.jsx(R, { className: "", children: "KPI Query" }),
3847
+ /* @__PURE__ */ e.jsxs(_, { className: "font-mono", children: [
3848
+ /* @__PURE__ */ e.jsx("div", { className: "rounded bg-muted px-2 py-1 font-mono text-xs", children: "SELECT current, previous FROM table" }),
3849
+ /* @__PURE__ */ e.jsxs("ul", { className: "my-6 ml-6 list-disc text-xs [&>li]:mt-2", children: [
3850
+ /* @__PURE__ */ e.jsx("li", { children: "current - number" }),
3851
+ /* @__PURE__ */ e.jsx("li", { children: "previous - number" })
3852
+ ] }),
3853
+ /* @__PURE__ */ e.jsxs("div", { children: [
3854
+ "See ",
3855
+ /* @__PURE__ */ e.jsx(
3856
+ "a",
3857
+ {
3858
+ target: "_blank",
3859
+ onClick: (s) => s.stopPropagation(),
3860
+ className: "text-blue-700",
3861
+ href: "https://docs.semaphor.cloud/concepts/visuals#kpi",
3862
+ children: "example"
3863
+ }
3864
+ ),
3865
+ " in the docs."
3866
+ ] })
3867
+ ] })
3868
+ ] }) }),
3869
+ /* @__PURE__ */ e.jsx("section", { className: "", children: /* @__PURE__ */ e.jsx(el, {}) }),
3870
+ /* @__PURE__ */ e.jsx("div", {}),
3871
+ /* @__PURE__ */ e.jsx("div", {})
3872
+ ] });
3873
+ }
3874
+ function os({
3875
+ cardType: s,
3876
+ docContent: n
3877
+ }) {
3878
+ return /* @__PURE__ */ e.jsx("div", { className: "space-y-6 px-6 py-2", children: /* @__PURE__ */ e.jsxs(Se, { defaultValue: ["item-2"], type: "multiple", children: [
3879
+ /* @__PURE__ */ e.jsxs(V, { value: "item-1", children: [
3880
+ /* @__PURE__ */ e.jsx(R, { children: `${ks(s)} Chart` }),
3881
+ /* @__PURE__ */ e.jsx(_, { children: n || /* @__PURE__ */ e.jsxs("div", { className: "space-y-4 font-mono text-xs", children: [
3882
+ /* @__PURE__ */ e.jsx("div", { className: "rounded bg-muted px-2 py-1 text-xs", children: "SELECT label, measure FROM table" }),
3883
+ /* @__PURE__ */ e.jsxs("ul", { className: "ml-6 list-disc text-xs [&>li]:mt-2", children: [
3884
+ /* @__PURE__ */ e.jsx("li", { children: "label - category" }),
3885
+ /* @__PURE__ */ e.jsx("li", { children: "measure - number" })
3886
+ ] }),
3887
+ /* @__PURE__ */ e.jsxs("div", { children: [
3888
+ "See ",
3889
+ /* @__PURE__ */ e.jsx(
3890
+ "a",
3891
+ {
3892
+ target: "_blank",
3893
+ onClick: (a) => a.stopPropagation(),
3894
+ className: "text-blue-700",
3895
+ href: "https://docs.semaphor.cloud/concepts/visuals#pie-chart",
3896
+ children: "example"
3897
+ }
3898
+ ),
3899
+ " in the docs."
3900
+ ] })
3901
+ ] }) })
3902
+ ] }),
3903
+ /* @__PURE__ */ e.jsxs(V, { value: "item-2", children: [
3904
+ /* @__PURE__ */ e.jsx(R, { children: "Settings" }),
3905
+ /* @__PURE__ */ e.jsx(_, { className: "px-2", children: /* @__PURE__ */ e.jsx(Os, {}) })
3906
+ ] }),
3907
+ s !== "range" && /* @__PURE__ */ e.jsxs(V, { value: "item-3", children: [
3908
+ /* @__PURE__ */ e.jsx(R, { children: "Filter on click" }),
3909
+ /* @__PURE__ */ e.jsx(_, { className: "px-2", children: /* @__PURE__ */ e.jsx(De, {}) })
3910
+ ] })
3911
+ ] }) });
3912
+ }
3913
+ function al() {
3914
+ return /* @__PURE__ */ e.jsx("div", { className: "space-y-6 px-6 py-2", children: /* @__PURE__ */ e.jsxs(Se, { defaultValue: ["item-2"], type: "multiple", children: [
3915
+ /* @__PURE__ */ e.jsxs(V, { value: "item-1", children: [
3916
+ /* @__PURE__ */ e.jsx(R, { children: "Stacked Chart" }),
3917
+ /* @__PURE__ */ e.jsxs(_, { className: "space-y-4 font-mono text-xs", children: [
3918
+ /* @__PURE__ */ e.jsx("div", { className: "rounded bg-muted px-2 py-1 text-xs", children: "SELECT x-axis, stack-by, y-axis FROM table" }),
3919
+ /* @__PURE__ */ e.jsxs("ul", { className: "ml-6 list-disc text-xs [&>li]:mt-2", children: [
3920
+ /* @__PURE__ */ e.jsx("li", { children: "x-axis - category" }),
3921
+ /* @__PURE__ */ e.jsx("li", { children: "stack by - category" }),
3922
+ /* @__PURE__ */ e.jsx("li", { children: "y-axis - number" })
3923
+ ] }),
3924
+ /* @__PURE__ */ e.jsxs("div", { children: [
3925
+ "See ",
3926
+ /* @__PURE__ */ e.jsx(
3927
+ "a",
3928
+ {
3929
+ target: "_blank",
3930
+ onClick: (s) => s.stopPropagation(),
3931
+ className: "text-blue-700",
3932
+ href: "https://docs.semaphor.cloud/concepts/visuals#stacked-chart",
3933
+ children: "example"
3934
+ }
3935
+ ),
3936
+ " in the docs."
3937
+ ] })
3938
+ ] })
3939
+ ] }),
3940
+ /* @__PURE__ */ e.jsxs(V, { value: "item-2", children: [
3941
+ /* @__PURE__ */ e.jsx(R, { children: "Settings" }),
3942
+ /* @__PURE__ */ e.jsxs(_, { className: "space-y-4 px-2", children: [
3943
+ /* @__PURE__ */ e.jsx(Fs, {}),
3944
+ /* @__PURE__ */ e.jsx(za, {})
3945
+ ] })
3946
+ ] }),
3947
+ /* @__PURE__ */ e.jsxs(V, { value: "item-3", children: [
3948
+ /* @__PURE__ */ e.jsx(R, { children: "Filter on click" }),
3949
+ /* @__PURE__ */ e.jsx(_, { className: "px-2", children: /* @__PURE__ */ e.jsx(De, {}) })
3950
+ ] })
3951
+ ] }) });
3952
+ }
3953
+ function tl({}) {
3954
+ const s = r((t) => {
3955
+ var i;
3956
+ return (i = t.card) == null ? void 0 : i.preferences;
3957
+ }), n = r(
3958
+ (t) => t.actions.setCardPreferences
3959
+ ), a = (t) => {
3960
+ n({
3961
+ ...s,
3962
+ allowDownload: t
3963
+ });
3964
+ };
3965
+ return /* @__PURE__ */ e.jsxs("div", { className: "space-y-6 px-6 py-2", children: [
3966
+ /* @__PURE__ */ e.jsx(Se, { defaultValue: ["item-3"], type: "multiple", children: /* @__PURE__ */ e.jsxs(V, { value: "item-3", children: [
3967
+ /* @__PURE__ */ e.jsx(R, { children: "Filter on click" }),
3968
+ /* @__PURE__ */ e.jsx(_, { className: "px-2", children: /* @__PURE__ */ e.jsx(De, {}) })
3969
+ ] }) }),
3970
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center space-x-2", children: [
3971
+ /* @__PURE__ */ e.jsx(Ke, { onCheckedChange: a, id: "allow-download" }),
3972
+ /* @__PURE__ */ e.jsx(
3973
+ "label",
3974
+ {
3975
+ htmlFor: "allow-download",
3976
+ className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
3977
+ children: "Allow Download"
3978
+ }
3979
+ )
3980
+ ] })
3981
+ ] });
3982
+ }
3983
+ const nl = /* @__PURE__ */ e.jsxs("div", { className: "space-y-4 font-mono text-xs", children: [
3984
+ /* @__PURE__ */ e.jsx("div", { className: "rounded bg-muted px-2 py-1 text-xs", children: "SELECT dimension, cohort, metric FROM table" }),
3985
+ /* @__PURE__ */ e.jsxs("div", { children: [
3986
+ "See ",
3987
+ /* @__PURE__ */ e.jsx(
3988
+ "a",
3989
+ {
3990
+ target: "_blank",
3991
+ onClick: (s) => s.stopPropagation(),
3992
+ className: "text-blue-700",
3993
+ href: "https://docs.semaphor.cloud/concepts/visuals#pyramid-chart",
3994
+ children: "example"
3995
+ }
3996
+ ),
3997
+ " in the docs."
3998
+ ] })
3999
+ ] }), ll = /* @__PURE__ */ e.jsxs("div", { className: "space-y-4 font-mono text-xs", children: [
4000
+ /* @__PURE__ */ e.jsx("div", { className: "rounded bg-muted px-2 py-1 text-xs", children: "SELECT y-axis, label, range-from, range-to, range-value FROM table" }),
4001
+ /* @__PURE__ */ e.jsxs("div", { children: [
4002
+ "See ",
4003
+ /* @__PURE__ */ e.jsx(
4004
+ "a",
4005
+ {
4006
+ target: "_blank",
4007
+ onClick: (s) => s.stopPropagation(),
4008
+ className: "text-blue-700",
4009
+ href: "https://docs.semaphor.cloud/concepts/visuals#range-charts",
4010
+ children: "example"
4011
+ }
4012
+ ),
4013
+ " in the docs."
4014
+ ] })
4015
+ ] });
4016
+ function rl() {
4017
+ const s = r((a) => a.card.type);
4018
+ function n(a) {
4019
+ switch (a) {
4020
+ case "stackedBar":
4021
+ return /* @__PURE__ */ e.jsx(al, {});
4022
+ case "pyramid":
4023
+ return /* @__PURE__ */ e.jsx(os, { docContent: nl, cardType: a });
4024
+ case "kpi":
4025
+ return /* @__PURE__ */ e.jsx(sl, {});
4026
+ case "line":
4027
+ case "bar":
4028
+ return /* @__PURE__ */ e.jsx(Jn, { cardType: a });
4029
+ case "range":
4030
+ return /* @__PURE__ */ e.jsx(os, { docContent: ll, cardType: a });
4031
+ case "pie":
4032
+ case "doughnut":
4033
+ case "polarArea":
4034
+ case "radar":
4035
+ return /* @__PURE__ */ e.jsx(os, { cardType: a });
4036
+ case "bubble":
4037
+ case "scatter":
4038
+ return /* @__PURE__ */ e.jsx(Qn, { cardType: a });
4039
+ case "table":
4040
+ return /* @__PURE__ */ e.jsx(tl, { cardType: a });
4041
+ default:
4042
+ return /* @__PURE__ */ e.jsx(Xn, {});
4043
+ }
4044
+ }
4045
+ return /* @__PURE__ */ e.jsx(Cs, { className: "h-full w-full text-sm", children: n(s) });
4046
+ }
4047
+ function il() {
4048
+ const s = r((n) => n.isShowingVisual);
4049
+ return /* @__PURE__ */ e.jsxs(
4050
+ ms,
4051
+ {
4052
+ direction: "vertical",
4053
+ className: "min-w-full max-w-lg min-h-[250px]",
4054
+ children: [
4055
+ /* @__PURE__ */ e.jsx(
4056
+ Fe,
4057
+ {
4058
+ role: "query-section",
4059
+ className: "flex",
4060
+ minSize: 20,
4061
+ defaultSize: 40,
4062
+ children: /* @__PURE__ */ e.jsx(Vn, {})
4063
+ }
4064
+ ),
4065
+ /* @__PURE__ */ e.jsx(us, { withHandle: !0, className: "border " }),
4066
+ /* @__PURE__ */ e.jsx(
4067
+ Fe,
4068
+ {
4069
+ className: "pb-1",
4070
+ role: "visual-section",
4071
+ minSize: 0,
4072
+ defaultSize: 60,
4073
+ children: s ? /* @__PURE__ */ e.jsxs(ms, { direction: "horizontal", children: [
4074
+ /* @__PURE__ */ e.jsx(e.Fragment, { children: /* @__PURE__ */ e.jsx(
4075
+ Fe,
4076
+ {
4077
+ className: "flex min-w-[275px]",
4078
+ minSize: 20,
4079
+ defaultSize: 25,
4080
+ maxSize: 30,
4081
+ children: /* @__PURE__ */ e.jsx(rl, {})
4082
+ }
4083
+ ) }),
4084
+ /* @__PURE__ */ e.jsx(us, { className: "border " }),
4085
+ /* @__PURE__ */ e.jsx(Fe, { minSize: 40, defaultSize: 75, maxSize: 100, children: /* @__PURE__ */ e.jsx($s, {}) })
4086
+ ] }) : /* @__PURE__ */ e.jsx($s, {})
4087
+ }
4088
+ )
4089
+ ]
4090
+ }
4091
+ );
4092
+ }
4093
+ function ol({ authToken: s, onSave: n, onClose: a }) {
4094
+ const t = r((l) => l.actions.setOnSave), i = r((l) => l.actions.setOnClose), o = k((l) => l.actions.setAuthToken);
4095
+ return K(() => {
4096
+ n && t(n), a && i(a);
4097
+ }, [n, t, a, i]), K(() => {
4098
+ s && s.accessToken && o(s);
4099
+ }, [s, o]), /* @__PURE__ */ e.jsxs(qt, { className: "rounded-none", role: "editor-panel", children: [
4100
+ /* @__PURE__ */ e.jsx(Vt, { className: "rounded-none border-r-[1.5px]", children: /* @__PURE__ */ e.jsx(pa, {}) }),
4101
+ /* @__PURE__ */ e.jsx(Rt, { children: /* @__PURE__ */ e.jsx(il, {}) })
4102
+ ] });
4103
+ }
4104
+ function cl() {
4105
+ k((l) => l.selectedCardId);
4106
+ const s = k((l) => l.selectedSheetId), { setIsVisualEditing: n } = k((l) => l.actions), a = k((l) => l.isVisualEditing), t = k((l) => l.actions.updateFrame);
4107
+ function i(l) {
4108
+ s && (t(s, l), n(!1));
4109
+ }
4110
+ function o() {
4111
+ n(!1);
4112
+ }
4113
+ return /* @__PURE__ */ e.jsx(
4114
+ "div",
4115
+ {
4116
+ role: "editor-container",
4117
+ className: Y("flex grow", {
4118
+ block: a,
4119
+ hidden: !a
4120
+ }),
4121
+ children: /* @__PURE__ */ e.jsx(ol, { onSave: i, onClose: o })
4122
+ }
4123
+ );
4124
+ }
4125
+ function dl({
4126
+ columns: s,
4127
+ tableName: n
4128
+ }) {
4129
+ const a = r((u) => u.selectedConnectionId), t = r((u) => u.selectedDatabaseName), i = r((u) => u.selectedSchemaName), o = r((u) => u.selectedTableName), l = k((u) => u.dashboard.filters) || [], c = k((u) => u.actions.addFilter), h = k((u) => u.actions.removeFilter), g = k(
4130
+ (u) => u.actions.removeFilterValue
4131
+ );
4132
+ function m(u) {
4133
+ const N = he(u.column_name), d = he(t || ""), x = he(i || ""), f = he(n), w = ds(
4134
+ x,
4135
+ f
4136
+ ), b = `${w}.${N}`;
4137
+ console.log(
4138
+ "find",
4139
+ b,
4140
+ f,
4141
+ d
4142
+ );
4143
+ const L = l == null ? void 0 : l.find(
4144
+ (C) => C.column === b && C.table === f && (C.database === d || C.database === t)
4145
+ );
4146
+ if (L)
4147
+ g(L.id), h(L.id);
4148
+ else {
4149
+ if (n === "api" && a) {
4150
+ c({
4151
+ id: We(),
4152
+ column: b,
4153
+ title: u.column_name,
4154
+ dataType: u.data_type,
4155
+ table: "api",
4156
+ database: "",
4157
+ // database: 'NA',
4158
+ connectionId: a,
4159
+ operation: "in",
4160
+ sql: _s(
4161
+ u.data_type,
4162
+ w,
4163
+ N
4164
+ )
4165
+ //DATE_DATA_TYPES.includes(column.data_type) ? dateSql : sql,
4166
+ });
4167
+ return;
4168
+ }
4169
+ c({
4170
+ id: We(),
4171
+ column: `${w}.${N}`,
4172
+ title: u.column_name,
4173
+ dataType: u.data_type,
4174
+ table: o || "",
4175
+ database: t || "",
4176
+ connectionId: a || "",
4177
+ operation: "in",
4178
+ sql: _s(
4179
+ u.data_type,
4180
+ w,
4181
+ N
4182
+ )
4183
+ //DATE_DATA_TYPES.includes(column.data_type) ? dateSql : sql,
4184
+ });
4185
+ }
4186
+ }
4187
+ return /* @__PURE__ */ e.jsx("div", { className: "xbg-red-100 flex-1 basis-0 flex-col overflow-scroll px-3", children: s == null ? void 0 : s.map((u) => {
4188
+ const N = l == null ? void 0 : l.find(
4189
+ (d) => d.column === he(u.column_name) && d.table === o && d.database === t
4190
+ );
4191
+ return /* @__PURE__ */ e.jsx(
4192
+ "div",
4193
+ {
4194
+ onClick: () => m(u),
4195
+ className: Y(
4196
+ "group flex cursor-pointer items-center justify-between border border-dashed border-background px-3 py-[6px] text-sm transition-colors hover:bg-muted/50",
4197
+ {
4198
+ "bg-muted": N
4199
+ }
4200
+ ),
4201
+ children: /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-2", children: [
4202
+ /* @__PURE__ */ e.jsx(ua, { column: u }),
4203
+ /* @__PURE__ */ e.jsx("span", { children: u.column_name })
4204
+ ] })
4205
+ },
4206
+ u.column_name
4207
+ );
4208
+ }) });
4209
+ }
4210
+ function hl() {
4211
+ k((n) => n.showFilters);
4212
+ const s = k(
4213
+ (n) => n.actions.setShowFilters
4214
+ );
4215
+ return /* @__PURE__ */ e.jsxs("section", { className: "relative flex grow flex-col border-l px-4", children: [
4216
+ /* @__PURE__ */ e.jsxs("div", { className: "mt-4 flex items-center justify-between gap-2 px-3", children: [
4217
+ /* @__PURE__ */ e.jsx(B, { className: "text-lg", children: "Filters" }),
4218
+ /* @__PURE__ */ e.jsx(
4219
+ z,
4220
+ {
4221
+ onClick: () => s(!1),
4222
+ className: "h-7 w-7 p-0",
4223
+ variant: "ghost",
4224
+ children: /* @__PURE__ */ e.jsx(_e, {})
4225
+ }
4226
+ )
4227
+ ] }),
4228
+ /* @__PURE__ */ e.jsx("div", { className: "flex grow", children: /* @__PURE__ */ e.jsx(
4229
+ pa,
4230
+ {
4231
+ ColumnsComponent: (n, a, t) => /* @__PURE__ */ e.jsx(
4232
+ dl,
4233
+ {
4234
+ schemaName: n,
4235
+ tableName: a,
4236
+ columns: t
4237
+ }
4238
+ )
4239
+ }
4240
+ ) })
4241
+ ] });
4242
+ }
4243
+ function ml() {
4244
+ k((a) => a.dashboard);
4245
+ const s = k((a) => a.showFilters), n = k((a) => a.isVisualEditing);
4246
+ return k((a) => a.bookmarkKey), /* @__PURE__ */ e.jsxs(
4247
+ "div",
4248
+ {
4249
+ role: "dashboard-plus-main",
4250
+ className: Y("grow", {
4251
+ hidden: n,
4252
+ flex: !n
4253
+ }),
4254
+ children: [
4255
+ /* @__PURE__ */ e.jsx(_t, {}),
4256
+ s && /* @__PURE__ */ e.jsx("div", { role: "filter-aside-container", className: "flex", children: /* @__PURE__ */ e.jsx(hl, {}) })
4257
+ ]
4258
+ }
4259
+ );
4260
+ }
4261
+ function ul() {
4262
+ const s = k((t) => t.dashboard), n = k((t) => t.actions.setDashboard), a = k(
4263
+ (t) => t.showDashboardJSON
4264
+ );
4265
+ return k(
4266
+ (t) => t.actions.setShowDashboardJSON
4267
+ ), /* @__PURE__ */ e.jsx(
4268
+ "div",
4269
+ {
4270
+ className: Y(" p-2", {
4271
+ hidden: !a
4272
+ }),
4273
+ children: /* @__PURE__ */ e.jsx(
4274
+ Ht,
4275
+ {
4276
+ onChange: (t) => {
4277
+ if (t)
4278
+ try {
4279
+ JSON.parse(t), n(JSON.parse(t));
4280
+ } catch {
4281
+ }
4282
+ },
4283
+ defaultLanguage: "json",
4284
+ className: "h-[550px] overflow-y-auto ",
4285
+ value: JSON.stringify(s, null, 2),
4286
+ options: {
4287
+ minimap: {
4288
+ enabled: !1
4289
+ },
4290
+ // lineNumbers: 'off',
4291
+ glyphMargin: !1,
4292
+ wordWrap: "on",
4293
+ scrollbar: {
4294
+ verticalScrollbarSize: 0,
4295
+ horizontalScrollbarSize: 0
4296
+ },
4297
+ fontSize: 12,
4298
+ renderLineHighlight: "none"
4299
+ }
4300
+ }
4301
+ )
4302
+ }
4303
+ );
4304
+ }
4305
+ function fl({
4306
+ showControls: s = !1,
4307
+ showFooter: n = !0,
4308
+ ...a
4309
+ }) {
4310
+ return /* @__PURE__ */ e.jsxs(Bt, { dashboardProps: a, children: [
4311
+ /* @__PURE__ */ e.jsx($t, {}),
4312
+ /* @__PURE__ */ e.jsxs(Kt, { children: [
4313
+ /* @__PURE__ */ e.jsx(ul, {}),
4314
+ /* @__PURE__ */ e.jsxs(Pt, { ...a, children: [
4315
+ s && /* @__PURE__ */ e.jsx(vn, {}),
4316
+ /* @__PURE__ */ e.jsx(cl, {}),
4317
+ /* @__PURE__ */ e.jsx(ml, {})
4318
+ ] })
4319
+ ] })
4320
+ ] });
4321
+ }
4322
+ export {
4323
+ fl as D,
4324
+ Qe as S,
4325
+ xa as u
4326
+ };