react-semaphor 0.1.284 → 0.1.286

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/chunks/{dashboard-controls-4pDdG3me.js → dashboard-controls-ItYogy_p.js} +4 -4
  2. package/dist/chunks/{dashboard-controls-Dhry2k8x.js → dashboard-controls-L0PZjJCt.js} +318 -341
  3. package/dist/chunks/dashboard-filter-controls-button-BBM66Kjx.js +1107 -0
  4. package/dist/chunks/dashboard-filter-controls-button-C0aCuD2T.js +11 -0
  5. package/dist/chunks/{dashboard-json-CYnf5rdp.js → dashboard-json-BQ-vAiN1.js} +1 -1
  6. package/dist/chunks/{dashboard-json-D-KsLEGl.js → dashboard-json-DVGKEKGc.js} +1 -1
  7. package/dist/chunks/{dashboard-summary-settings-dialog-B4jsBFro.js → dashboard-summary-settings-dialog-DlXqW4ur.js} +1 -1
  8. package/dist/chunks/{dashboard-summary-settings-dialog-Cn4-fB2h.js → dashboard-summary-settings-dialog-jRhWndnZ.js} +1 -1
  9. package/dist/chunks/{edit-dashboard-visual-BQnApBvr.js → edit-dashboard-visual-BFIX635s.js} +2 -2
  10. package/dist/chunks/{edit-dashboard-visual-BDIt_S2F.js → edit-dashboard-visual-DOyPqIRy.js} +4 -4
  11. package/dist/chunks/{index-DBuN9Zf6.js → index-5fuOmhsI.js} +170 -170
  12. package/dist/chunks/{index-y1uW2fuZ.js → index-BJLFSwZr.js} +10190 -10214
  13. package/dist/chunks/resource-management-panel-DMIhpLZ1.js +933 -0
  14. package/dist/chunks/resource-management-panel-DPJ6MzLA.js +6 -0
  15. package/dist/chunks/{use-create-flow-overlay-state-Cr9AFdXx.js → use-create-flow-overlay-state-BU00QaON.js} +142 -145
  16. package/dist/chunks/use-create-flow-overlay-state-CvuLpw1f.js +21 -0
  17. package/dist/chunks/{use-visual-utils-DNp8XO6G.js → use-visual-utils-DUV4E_sx.js} +1 -1
  18. package/dist/chunks/{use-visual-utils-Ccmzx7-m.js → use-visual-utils-DlwYqcbg.js} +1 -1
  19. package/dist/dashboard/index.cjs +1 -1
  20. package/dist/dashboard/index.js +1 -1
  21. package/dist/index.cjs +1 -1
  22. package/dist/index.js +5 -5
  23. package/dist/style.css +1 -1
  24. package/dist/surfboard/index.cjs +1 -1
  25. package/dist/surfboard/index.js +2 -2
  26. package/dist/types/main.d.ts +18 -2
  27. package/package.json +1 -1
  28. package/dist/chunks/dashboard-filter-controls-button-BZXrmJP2.js +0 -1072
  29. package/dist/chunks/dashboard-filter-controls-button-DEUvxIWD.js +0 -11
  30. package/dist/chunks/resource-management-panel-BC-cvjI9.js +0 -920
  31. package/dist/chunks/resource-management-panel-PSvKnmq5.js +0 -6
  32. package/dist/chunks/use-create-flow-overlay-state-COe7Ekru.js +0 -21
@@ -1,920 +0,0 @@
1
- import { jsx as e, jsxs as r, Fragment as le } from "react/jsx-runtime";
2
- import { bM as Pe, u as re, U as je, K as ce, cA as Fe, cB as Be, c as X, B as P, ct as ie, cC as ze, cD as He, cE as Ke, cF as _e, cG as Q, w as oe, cH as We, cI as Ge, cJ as Ye, cK as ge, ch as ue, cL as $e, cM as Je, cN as xe, cO as De, cP as we, cQ as Qe, al as Ne, ah as ve, cR as ye, cS as Ce, cT as Se, cU as Ee, cV as Ve, cW as Le, cX as Ae, cY as Oe, cZ as Te, c_ as Xe, c$ as he, d0 as Ze, af as te, b as qe, d1 as Re, d2 as ke, d as et, e as tt, f as rt, g as nt, h as ot, L as be, I as de, v as st, d3 as at, d4 as it, d5 as dt, bT as lt, bU as ct, bV as ut, bW as ht, d6 as mt, d7 as pt } from "./index-y1uW2fuZ.js";
3
- import ft, { useRef as gt, useEffect as ne, useState as x } from "react";
4
- import { u as Ue } from "./use-visual-utils-Ccmzx7-m.js";
5
- /**
6
- * @license lucide-react v0.453.0 - ISC
7
- *
8
- * This source code is licensed under the ISC license.
9
- * See the LICENSE file in the root directory of this source tree.
10
- */
11
- const bt = Pe("FolderOpen", [
12
- [
13
- "path",
14
- {
15
- d: "m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",
16
- key: "usdka0"
17
- }
18
- ]
19
- ]);
20
- function xt(t, f = {}) {
21
- const { enabled: p = !0, eventType: d = "mousedown" } = f, a = gt(null);
22
- return ne(() => {
23
- const h = (D) => {
24
- const s = D.target;
25
- a.current && a.current.contains(s) || s instanceof Element && (s.closest("[data-radix-popper-content-wrapper]") || s.closest("[data-radix-select-content]") || s.closest("[data-radix-popover-content]") || s.closest("[data-radix-dropdown-menu-content]") || s.closest("[data-radix-tooltip-content]") || s.closest('[role="listbox"]') || s.closest('[role="option"]') || s.closest('[role="combobox"]')) || s instanceof Element && s.hasAttribute("data-radix-") || t();
26
- };
27
- return p && document.addEventListener(d, h), () => {
28
- document.removeEventListener(d, h);
29
- };
30
- }, [t, p, d]), a;
31
- }
32
- function Ie() {
33
- return /* @__PURE__ */ e("div", { className: "space-y-1.5 py-1", children: [...Array(5)].map((t, f) => /* @__PURE__ */ r(
34
- "div",
35
- {
36
- className: "flex animate-pulse items-start gap-3 rounded-xl border border-transparent px-2.5 py-2.5",
37
- children: [
38
- /* @__PURE__ */ e("div", { className: "mt-0.5 h-4 w-4 flex-shrink-0 rounded bg-muted/60" }),
39
- /* @__PURE__ */ r("div", { className: "flex-1 space-y-1.5", children: [
40
- /* @__PURE__ */ e("div", { className: "h-4 w-3/5 rounded bg-muted/60" }),
41
- /* @__PURE__ */ e("div", { className: "h-3 w-4/5 rounded bg-muted/40" })
42
- ] })
43
- ]
44
- },
45
- f
46
- )) });
47
- }
48
- const Dt = (t) => {
49
- const f = re((a) => a.isVisualEditing), p = re((a) => a.selectedFrameId), d = je((a) => a.frame);
50
- return !!(f && p && (d == null ? void 0 : d.visualId) === t);
51
- };
52
- function wt({
53
- visual: t,
54
- isDeleting: f,
55
- isDuplicating: p,
56
- onAddVisual: d,
57
- onOpenVisual: a,
58
- onEditDetails: h,
59
- onDeleteClick: D,
60
- onDuplicateVisual: s,
61
- onShareVisual: w,
62
- formatDate: v
63
- }) {
64
- var I, U, j, F;
65
- const { selectVisual: m } = ce(), c = Fe(t.id), u = Dt(t.id), A = re((i) => i.isVisualEditing), { isConsoleMode: R } = Be(), b = ft.useRef(null), [S, E] = x(!1), [V, O] = x(!1);
66
- ne(() => {
67
- p ? (E(!0), O(!0)) : V && (E(!1), O(!1));
68
- }, [p, V]), ne(() => {
69
- u && b.current && b.current.scrollIntoView({
70
- behavior: "smooth",
71
- block: "center"
72
- });
73
- }, [u]);
74
- const y = () => {
75
- m(t), a == null || a(t);
76
- }, C = (i) => {
77
- i.currentTarget === i.target && (i.key === "Enter" || i.key === " ") && (i.preventDefault(), y());
78
- };
79
- return /* @__PURE__ */ r(
80
- "div",
81
- {
82
- ref: b,
83
- className: X(
84
- "group flex cursor-pointer items-start gap-2 rounded-xl border border-transparent px-2.5 py-2.5 transition-[background-color,border-color,box-shadow] hover:border-border/50 hover:bg-muted/35 focus-within:ring-2 focus-within:ring-inset focus-within:ring-ring/40",
85
- u ? "border-primary/30 bg-primary/10" : c && "border-border/60 bg-muted/50"
86
- ),
87
- onClick: y,
88
- children: [
89
- /* @__PURE__ */ r(
90
- "div",
91
- {
92
- role: "button",
93
- tabIndex: 0,
94
- className: "min-w-0 flex-1 cursor-pointer focus-visible:outline-none",
95
- onKeyDown: C,
96
- children: [
97
- /* @__PURE__ */ e(
98
- "p",
99
- {
100
- className: "truncate text-sm font-medium text-foreground",
101
- title: t.title || "Untitled Visual",
102
- children: t.title || "Untitled Visual"
103
- }
104
- ),
105
- /* @__PURE__ */ e(
106
- "p",
107
- {
108
- className: "truncate text-xs text-muted-foreground",
109
- title: t.description || "No description",
110
- children: (I = t.description) != null && I.trim() ? t.description : "No description"
111
- }
112
- )
113
- ]
114
- }
115
- ),
116
- /* @__PURE__ */ e(
117
- "div",
118
- {
119
- className: X(
120
- "flex flex-shrink-0 items-center gap-1 transition-opacity",
121
- c || u || S ? "pointer-events-auto opacity-100" : "pointer-events-none opacity-0 group-hover:pointer-events-auto group-hover:opacity-100 group-focus-within:pointer-events-auto group-focus-within:opacity-100"
122
- ),
123
- onClick: (i) => i.stopPropagation(),
124
- children: /* @__PURE__ */ r("div", { className: "inline-flex items-center overflow-hidden rounded-lg border border-border/60 bg-background/95 shadow-sm", children: [
125
- /* @__PURE__ */ r(
126
- P,
127
- {
128
- size: "sm",
129
- variant: "ghost",
130
- className: "h-7 gap-1 rounded-none border-0 px-2 text-xs font-medium shadow-none hover:bg-muted/50",
131
- disabled: A,
132
- onClick: (i) => {
133
- i.stopPropagation(), d(t);
134
- },
135
- "aria-label": `Add ${t.title || "visual"}`,
136
- children: [
137
- /* @__PURE__ */ e(ie, { className: "h-3.5 w-3.5" }),
138
- "Add"
139
- ]
140
- }
141
- ),
142
- /* @__PURE__ */ r(
143
- ze,
144
- {
145
- modal: !1,
146
- open: S,
147
- onOpenChange: E,
148
- children: [
149
- /* @__PURE__ */ e(He, { asChild: !0, children: /* @__PURE__ */ e(
150
- P,
151
- {
152
- size: "sm",
153
- variant: "ghost",
154
- className: "h-7 w-7 rounded-none border-0 border-l border-border/60 p-0 shadow-none hover:bg-muted/50",
155
- "aria-label": "Open visual actions",
156
- children: /* @__PURE__ */ e(Ke, { className: "h-3 w-3" })
157
- }
158
- ) }),
159
- /* @__PURE__ */ r(
160
- _e,
161
- {
162
- align: "end",
163
- className: "z-[51] w-44 rounded-xl border border-border/60 p-1 shadow-sm",
164
- children: [
165
- /* @__PURE__ */ r(
166
- Q,
167
- {
168
- onClick: (i) => {
169
- i.stopPropagation(), d(t);
170
- },
171
- disabled: A,
172
- children: [
173
- /* @__PURE__ */ e(ie, { className: "mr-2 h-3 w-3" }),
174
- "Add"
175
- ]
176
- }
177
- ),
178
- /* @__PURE__ */ r(
179
- Q,
180
- {
181
- onClick: (i) => {
182
- i.stopPropagation(), a == null || a(t);
183
- },
184
- children: [
185
- /* @__PURE__ */ e(bt, { className: "mr-2 h-3 w-3" }),
186
- "Open"
187
- ]
188
- }
189
- ),
190
- /* @__PURE__ */ r(
191
- Q,
192
- {
193
- onClick: (i) => {
194
- i.preventDefault(), i.stopPropagation(), s(t.id);
195
- },
196
- disabled: p,
197
- children: [
198
- p ? /* @__PURE__ */ e(oe, { className: "mr-2 h-3 w-3 animate-spin" }) : /* @__PURE__ */ e(We, { className: "mr-2 h-3 w-3" }),
199
- p ? "Duplicating..." : "Duplicate"
200
- ]
201
- }
202
- ),
203
- t.ownership.isOwner && /* @__PURE__ */ r(le, { children: [
204
- /* @__PURE__ */ r(
205
- Q,
206
- {
207
- onClick: (i) => {
208
- i.stopPropagation(), h == null || h(t);
209
- },
210
- children: [
211
- /* @__PURE__ */ e(Ge, { className: "mr-2 h-3 w-3" }),
212
- "Edit details"
213
- ]
214
- }
215
- ),
216
- /* @__PURE__ */ r(
217
- Q,
218
- {
219
- onClick: (i) => {
220
- i.stopPropagation(), w(t);
221
- },
222
- children: [
223
- /* @__PURE__ */ e(Ye, { className: "mr-2 h-3 w-3" }),
224
- "Share"
225
- ]
226
- }
227
- ),
228
- /* @__PURE__ */ e(ge, {}),
229
- /* @__PURE__ */ r(
230
- Q,
231
- {
232
- onClick: (i) => {
233
- i.stopPropagation(), D(t);
234
- },
235
- className: "text-destructive",
236
- disabled: f,
237
- children: [
238
- /* @__PURE__ */ e(ue, { className: "mr-2 h-3 w-3" }),
239
- f ? "Deleting..." : "Delete"
240
- ]
241
- }
242
- )
243
- ] }),
244
- /* @__PURE__ */ e(ge, {}),
245
- /* @__PURE__ */ r("div", { className: "space-y-1 px-2 py-2 text-xs text-muted-foreground", children: [
246
- (((U = t.ownership.createdBy) == null ? void 0 : U.type) === "tenant" || ((j = t.ownership.createdBy) == null ? void 0 : j.type) === "organization" && R) && /* @__PURE__ */ r("div", { className: "flex items-center gap-1", children: [
247
- /* @__PURE__ */ e($e, { className: "h-3 w-3" }),
248
- /* @__PURE__ */ e("span", { children: ((F = t.ownership.createdBy) == null ? void 0 : F.name) || "Unknown" })
249
- ] }),
250
- /* @__PURE__ */ r("div", { className: "flex items-center gap-1", children: [
251
- /* @__PURE__ */ e(Je, { className: "h-3 w-3" }),
252
- /* @__PURE__ */ e("span", { children: v(t.lastModified) })
253
- ] })
254
- ] })
255
- ]
256
- }
257
- )
258
- ]
259
- }
260
- )
261
- ] })
262
- }
263
- )
264
- ]
265
- }
266
- );
267
- }
268
- function Nt({ searchQuery: t }) {
269
- const [f, p] = x(!1), [d, a] = x(
270
- null
271
- ), [h, D] = x(!1), [s, w] = x(null), [v, m] = x(null), [c, u] = x(
272
- null
273
- ), { handleEditLibraryVisual: A, handleAddLibraryVisual: R } = Ue(), {
274
- resources: b,
275
- isLoading: S,
276
- isError: E,
277
- updateResource: V,
278
- deleteResource: O,
279
- duplicateResource: y,
280
- isDeleting: C
281
- } = xe(() => {
282
- D(!1), w(null);
283
- }), I = b.filter(
284
- (o) => {
285
- var T, l;
286
- return ((T = o == null ? void 0 : o.title) == null ? void 0 : T.toLowerCase().includes(t.toLowerCase())) || ((l = o == null ? void 0 : o.description) == null ? void 0 : l.toLowerCase().includes(t.toLowerCase()));
287
- }
288
- ), U = (o) => new Date(o).toLocaleDateString("en-US", {
289
- month: "short",
290
- day: "numeric",
291
- year: "numeric"
292
- }), j = (o) => {
293
- w(o), D(!0);
294
- }, F = () => {
295
- s && O(s.id);
296
- }, {
297
- startUpdating: i,
298
- stopUpdating: G,
299
- isUpdating: z
300
- } = De(), L = (o, T, l) => {
301
- var ee;
302
- const B = Object.fromEntries(
303
- Object.entries(T).filter(([, M]) => M !== void 0)
304
- );
305
- if (Object.keys(B).length === 0) {
306
- (ee = l == null ? void 0 : l.onSuccess) == null || ee.call(l);
307
- return;
308
- }
309
- const N = Object.keys(B), K = N.length === 1 ? N[0] : void 0;
310
- i(o, K), V(
311
- {
312
- resourceId: o,
313
- data: B
314
- },
315
- {
316
- onSuccess: () => {
317
- var M;
318
- G(o, K), (M = l == null ? void 0 : l.onSuccess) == null || M.call(l);
319
- },
320
- onError: () => {
321
- var M;
322
- G(o, K), (M = l == null ? void 0 : l.onError) == null || M.call(l);
323
- }
324
- }
325
- );
326
- }, Y = (o) => {
327
- m(o), y(o, {
328
- onSettled: () => m(null)
329
- });
330
- }, H = (o) => {
331
- A(o);
332
- }, $ = (o) => {
333
- R(o);
334
- }, J = (o) => {
335
- a(o), p(!0);
336
- }, Z = (o) => {
337
- u(o);
338
- }, q = () => {
339
- u(null);
340
- }, k = ({
341
- title: o,
342
- description: T
343
- }) => {
344
- if (!c)
345
- return;
346
- const l = {};
347
- o !== c.title && (l.title = o), (c.description || "") !== T && (l.description = T), L(c.id, l, {
348
- onSuccess: () => {
349
- u(null);
350
- }
351
- });
352
- };
353
- return S ? /* @__PURE__ */ e(Ie, {}) : E ? /* @__PURE__ */ e(we, { className: "w-full flex-1 pr-2", children: /* @__PURE__ */ r("div", { className: "rounded-xl border border-dashed border-border/60 bg-muted/20 px-4 py-8 text-center text-muted-foreground", children: [
354
- /* @__PURE__ */ e("p", { className: "text-sm text-destructive", children: "Failed to load visuals" }),
355
- /* @__PURE__ */ e(
356
- P,
357
- {
358
- variant: "outline",
359
- size: "sm",
360
- className: "mt-2",
361
- onClick: () => window.location.reload(),
362
- children: "Retry"
363
- }
364
- )
365
- ] }) }) : /* @__PURE__ */ r("div", { className: "flex h-full flex-1 flex-col", children: [
366
- /* @__PURE__ */ e("div", { className: "flex flex-1 basis-0 flex-col gap-1.5 overflow-y-auto px-0.5", children: I.length === 0 ? /* @__PURE__ */ r("div", { className: "rounded-xl border border-dashed border-border/60 bg-muted/20 px-4 py-8 text-center", children: [
367
- /* @__PURE__ */ e("div", { className: "mb-3", children: /* @__PURE__ */ e(Qe, { className: "mx-auto h-12 w-12 text-muted-foreground/50" }) }),
368
- /* @__PURE__ */ e("h3", { className: "mb-1 font-medium text-foreground", children: t ? "No visuals found" : "No visuals yet" }),
369
- /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: t ? "Try adjusting your search" : 'Click "New" above to add your first visual' })
370
- ] }) : I.map((o) => /* @__PURE__ */ e(
371
- wt,
372
- {
373
- visual: o,
374
- onAddVisual: $,
375
- onOpenVisual: H,
376
- onEditDetails: Z,
377
- onDeleteClick: j,
378
- onDuplicateVisual: Y,
379
- onShareVisual: J,
380
- isDeleting: C,
381
- isDuplicating: v === o.id,
382
- formatDate: U
383
- },
384
- o.id
385
- )) }),
386
- f && d && /* @__PURE__ */ e(
387
- Ne,
388
- {
389
- resource: d,
390
- resourceType: ve.VISUAL,
391
- onClose: () => {
392
- p(!1), a(null);
393
- }
394
- }
395
- ),
396
- c && /* @__PURE__ */ e(
397
- ye,
398
- {
399
- open: !!c,
400
- resourceLabel: "Visual",
401
- initialTitle: c.title || "",
402
- initialDescription: c.description || "",
403
- onClose: q,
404
- onSave: k,
405
- isSaving: z(c.id)
406
- }
407
- ),
408
- /* @__PURE__ */ e(
409
- Ce,
410
- {
411
- open: h,
412
- onOpenChange: (o) => {
413
- !o && C || (D(o), o || w(null));
414
- },
415
- children: /* @__PURE__ */ r(Se, { children: [
416
- /* @__PURE__ */ r(Ee, { children: [
417
- /* @__PURE__ */ e(Ve, { children: "Delete Visual" }),
418
- /* @__PURE__ */ r(Le, { children: [
419
- 'Are you sure you want to delete "',
420
- s == null ? void 0 : s.title,
421
- '"? This action cannot be undone.'
422
- ] })
423
- ] }),
424
- /* @__PURE__ */ r(Ae, { children: [
425
- /* @__PURE__ */ e(Oe, { disabled: C, children: "Cancel" }),
426
- /* @__PURE__ */ r(
427
- Te,
428
- {
429
- onClick: (o) => {
430
- o.preventDefault(), o.stopPropagation(), F();
431
- },
432
- className: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
433
- disabled: C,
434
- children: [
435
- C ? /* @__PURE__ */ e(oe, { className: "mr-2 h-3.5 w-3.5 animate-spin" }) : /* @__PURE__ */ e(ue, { className: "mr-2 h-3.5 w-3.5" }),
436
- C ? "Deleting..." : "Delete"
437
- ]
438
- }
439
- )
440
- ] })
441
- ] })
442
- }
443
- )
444
- ] });
445
- }
446
- function vt({
447
- dashboard: t,
448
- isDeleting: f,
449
- isDuplicating: p,
450
- onLoadDashboard: d,
451
- onEditDetails: a,
452
- onDeleteClick: h,
453
- onDuplicateDashboard: D,
454
- onShareDashboard: s,
455
- formatDate: w,
456
- onDashboardItemClick: v
457
- }) {
458
- var V, O;
459
- const { selectDashboard: m } = ce(), c = Xe(t.id), { userContext: u, isLoading: A } = he(), R = ((V = u == null ? void 0 : u.permissions) == null ? void 0 : V.canEdit) ?? !1, b = A || !R, S = () => {
460
- m(t), d(t.id), v == null || v(t.id);
461
- }, E = (y) => {
462
- y.currentTarget === y.target && (y.key === "Enter" || y.key === " ") && (y.preventDefault(), S());
463
- };
464
- return /* @__PURE__ */ r(
465
- "div",
466
- {
467
- className: X(
468
- "group flex cursor-pointer items-start gap-2 rounded-xl border border-transparent px-2.5 py-2.5 transition-[background-color,border-color,box-shadow] hover:border-border/50 hover:bg-muted/35 focus-within:ring-2 focus-within:ring-inset focus-within:ring-ring/40",
469
- c && "border-border/60 bg-muted/50"
470
- ),
471
- onClick: S,
472
- children: [
473
- /* @__PURE__ */ r(
474
- "div",
475
- {
476
- role: "button",
477
- tabIndex: 0,
478
- className: "min-w-0 flex-1 cursor-pointer focus-visible:outline-none",
479
- onKeyDown: E,
480
- children: [
481
- /* @__PURE__ */ e(
482
- "p",
483
- {
484
- className: "truncate text-sm font-medium text-foreground",
485
- title: t.title || "Untitled Dashboard",
486
- children: t.title || "Untitled Dashboard"
487
- }
488
- ),
489
- /* @__PURE__ */ e(
490
- "p",
491
- {
492
- className: "truncate text-xs text-muted-foreground",
493
- title: t.description || "No description",
494
- children: (O = t.description) != null && O.trim() ? t.description : "No description"
495
- }
496
- )
497
- ]
498
- }
499
- ),
500
- /* @__PURE__ */ e(
501
- "div",
502
- {
503
- className: X(
504
- "flex-shrink-0 transition-opacity",
505
- c ? "opacity-100" : "opacity-0 group-hover:opacity-100 group-focus-within:opacity-100"
506
- ),
507
- children: /* @__PURE__ */ e(
508
- Ze,
509
- {
510
- dashboard: t,
511
- isDeleting: f,
512
- isDuplicating: p,
513
- shouldHideActions: b,
514
- onEditDetails: a,
515
- onDeleteClick: h,
516
- onDuplicateDashboard: D,
517
- onShareDashboard: s,
518
- formatDate: w
519
- }
520
- )
521
- }
522
- )
523
- ]
524
- }
525
- );
526
- }
527
- function yt({ onRetry: t }) {
528
- return /* @__PURE__ */ e(we, { className: "w-full flex-1 pr-2", children: /* @__PURE__ */ r("div", { className: "rounded-xl border border-dashed border-border/60 bg-muted/20 px-4 py-8 text-center text-muted-foreground", children: [
529
- /* @__PURE__ */ e("p", { className: "text-sm text-destructive", children: "Failed to load dashboards" }),
530
- /* @__PURE__ */ e(P, { variant: "outline", size: "sm", className: "mt-2", onClick: t, children: "Retry" })
531
- ] }) });
532
- }
533
- function Ct(t) {
534
- var me;
535
- const { searchQuery: f, onLoadDashboard: p, onEditDashboard: d, onDashboardItemClick: a } = t, [h, D] = x(!1), [s, w] = x(
536
- null
537
- ), [v, m] = x(!1), [c, u] = x(null), [A, R] = x(null), [b, S] = x(null), E = te(
538
- (n) => n.lastSelectedDashboard
539
- ), V = te(
540
- (n) => n.selectedDashboard
541
- ), O = te(
542
- (n) => n.actions.selectDashboard
543
- ), y = te(
544
- (n) => n.actions.clearSelectedDashboard
545
- ), { tokenProps: C, id: I } = qe(), {
546
- resources: U,
547
- isLoading: j,
548
- isError: F,
549
- updateResource: i,
550
- deleteResource: G,
551
- duplicateResource: z,
552
- isDeleting: L
553
- } = Re(() => {
554
- m(!1);
555
- const n = c == null ? void 0 : c.id;
556
- u(null), (V == null ? void 0 : V.id) === n && (!(C != null && C.dashboard_id) && !I ? y() : E && E.id !== n && O(E));
557
- }), { userContext: Y } = he(), H = ((me = Y == null ? void 0 : Y.permissions) == null ? void 0 : me.canCreateDashboard) ?? !1, $ = U.filter(
558
- (n) => {
559
- var _, g;
560
- return ((_ = n == null ? void 0 : n.title) == null ? void 0 : _.toLowerCase().includes(f.toLowerCase())) || ((g = n == null ? void 0 : n.description) == null ? void 0 : g.toLowerCase().includes(f.toLowerCase()));
561
- }
562
- ), J = (n) => new Date(n).toLocaleDateString("en-US", {
563
- month: "short",
564
- day: "numeric",
565
- year: "numeric"
566
- }), Z = (n) => {
567
- p == null || p(n);
568
- }, q = (n) => {
569
- u(n), m(!0);
570
- }, k = () => {
571
- c && G(c.id);
572
- }, o = (n) => {
573
- R(n), z(n, {
574
- onSettled: () => R(null)
575
- });
576
- }, {
577
- startUpdating: T,
578
- stopUpdating: l,
579
- isUpdating: B
580
- } = De(), N = (n, _, g) => {
581
- var fe;
582
- const se = Object.fromEntries(
583
- Object.entries(_).filter(([, W]) => W !== void 0)
584
- );
585
- if (Object.keys(se).length === 0) {
586
- (fe = g == null ? void 0 : g.onSuccess) == null || fe.call(g);
587
- return;
588
- }
589
- const pe = Object.keys(se), ae = pe.length === 1 ? pe[0] : void 0;
590
- T(n, ae), i(
591
- {
592
- resourceId: n,
593
- data: se
594
- },
595
- {
596
- onSuccess: () => {
597
- var W;
598
- l(n, ae), (W = g == null ? void 0 : g.onSuccess) == null || W.call(g);
599
- },
600
- onError: () => {
601
- var W;
602
- l(n, ae), (W = g == null ? void 0 : g.onError) == null || W.call(g);
603
- }
604
- }
605
- );
606
- }, K = (n) => {
607
- w(n), D(!0);
608
- }, ee = (n) => {
609
- d == null || d(n.id), S(n);
610
- }, M = () => {
611
- S(null);
612
- }, Me = ({
613
- title: n,
614
- description: _
615
- }) => {
616
- if (!b)
617
- return;
618
- const g = {};
619
- n !== b.title && (g.title = n), (b.description || "") !== _ && (g.description = _), N(b.id, g, {
620
- onSuccess: () => {
621
- S(null);
622
- }
623
- });
624
- };
625
- return j ? /* @__PURE__ */ e(Ie, {}) : F ? /* @__PURE__ */ e(yt, { onRetry: () => window.location.reload() }) : /* @__PURE__ */ r("div", { className: "flex h-full flex-1 flex-col", children: [
626
- /* @__PURE__ */ e("div", { className: "flex flex-1 basis-0 flex-col gap-1.5 overflow-y-auto px-0.5", children: $.length === 0 ? /* @__PURE__ */ r("div", { className: "rounded-xl border border-dashed border-border/60 bg-muted/20 px-4 py-8 text-center", children: [
627
- /* @__PURE__ */ e("div", { className: "mb-3", children: /* @__PURE__ */ e(ke, { className: "mx-auto h-12 w-12 text-muted-foreground/50" }) }),
628
- /* @__PURE__ */ e("h3", { className: "mb-1 font-medium text-foreground", children: f ? "No dashboards found" : "No dashboards yet" }),
629
- /* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground", children: f ? "Try adjusting your search" : H ? 'Click "New" above to add your first dashboard' : "No dashboards have been shared with you yet" })
630
- ] }) : $.map((n) => /* @__PURE__ */ e(
631
- vt,
632
- {
633
- dashboard: n,
634
- isDeleting: L,
635
- isDuplicating: A === n.id,
636
- onLoadDashboard: Z,
637
- onEditDetails: ee,
638
- onDeleteClick: q,
639
- onDuplicateDashboard: o,
640
- onShareDashboard: K,
641
- formatDate: J,
642
- onDashboardItemClick: a
643
- },
644
- n.id
645
- )) }),
646
- h && s && /* @__PURE__ */ e(
647
- Ne,
648
- {
649
- resource: s,
650
- resourceType: ve.DASHBOARD,
651
- onClose: () => {
652
- D(!1), w(null);
653
- }
654
- }
655
- ),
656
- /* @__PURE__ */ e(
657
- Ce,
658
- {
659
- open: v,
660
- onOpenChange: (n) => {
661
- !n && L || (m(n), n || u(null));
662
- },
663
- children: /* @__PURE__ */ r(Se, { children: [
664
- /* @__PURE__ */ r(Ee, { children: [
665
- /* @__PURE__ */ e(Ve, { children: "Delete Dashboard" }),
666
- /* @__PURE__ */ r(Le, { children: [
667
- 'Are you sure you want to delete "',
668
- c == null ? void 0 : c.title,
669
- '"? This action cannot be undone.'
670
- ] })
671
- ] }),
672
- /* @__PURE__ */ r(Ae, { children: [
673
- /* @__PURE__ */ e(Oe, { disabled: L, children: "Cancel" }),
674
- /* @__PURE__ */ r(
675
- Te,
676
- {
677
- onClick: (n) => {
678
- n.preventDefault(), n.stopPropagation(), k();
679
- },
680
- className: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
681
- disabled: L,
682
- children: [
683
- L ? /* @__PURE__ */ e(oe, { className: "mr-2 h-3.5 w-3.5 animate-spin" }) : /* @__PURE__ */ e(ue, { className: "mr-2 h-3.5 w-3.5" }),
684
- L ? "Deleting..." : "Delete"
685
- ]
686
- }
687
- )
688
- ] })
689
- ] })
690
- }
691
- ),
692
- b && /* @__PURE__ */ e(
693
- ye,
694
- {
695
- open: !!b,
696
- resourceLabel: "Dashboard",
697
- initialTitle: b.title || "",
698
- initialDescription: b.description || "",
699
- onClose: M,
700
- onSave: Me,
701
- isSaving: B(b.id)
702
- }
703
- )
704
- ] });
705
- }
706
- function St({
707
- open: t,
708
- onOpenChange: f,
709
- onSubmit: p,
710
- isCreating: d
711
- }) {
712
- const [a, h] = x(""), [D, s] = x("");
713
- ne(() => {
714
- t || (h(""), s(""));
715
- }, [t]);
716
- const w = () => {
717
- a.trim() && p({ title: a, description: D });
718
- }, v = (m) => {
719
- f(m);
720
- };
721
- return /* @__PURE__ */ e(et, { open: t, onOpenChange: v, children: /* @__PURE__ */ r(tt, { children: [
722
- /* @__PURE__ */ r(rt, { children: [
723
- /* @__PURE__ */ e(nt, { children: "Create New Visual" }),
724
- /* @__PURE__ */ e(ot, { children: "Add a new visual to your library. You can configure it after creation." })
725
- ] }),
726
- /* @__PURE__ */ r("div", { className: "space-y-4 py-4", children: [
727
- /* @__PURE__ */ r("div", { className: "space-y-2", children: [
728
- /* @__PURE__ */ e(be, { htmlFor: "title", children: "Visual Title" }),
729
- /* @__PURE__ */ e(
730
- de,
731
- {
732
- id: "title",
733
- placeholder: "Enter visual title...",
734
- value: a,
735
- onChange: (m) => h(m.target.value),
736
- disabled: d,
737
- onKeyDown: (m) => {
738
- m.key === "Enter" && !m.shiftKey && (m.preventDefault(), w());
739
- }
740
- }
741
- )
742
- ] }),
743
- /* @__PURE__ */ r("div", { className: "space-y-2", children: [
744
- /* @__PURE__ */ e(be, { htmlFor: "description", children: "Description (optional)" }),
745
- /* @__PURE__ */ e(
746
- de,
747
- {
748
- id: "description",
749
- placeholder: "Enter visual description...",
750
- value: D,
751
- onChange: (m) => s(m.target.value),
752
- disabled: d
753
- }
754
- )
755
- ] })
756
- ] }),
757
- /* @__PURE__ */ r(st, { children: [
758
- /* @__PURE__ */ e(
759
- P,
760
- {
761
- variant: "outline",
762
- onClick: () => v(!1),
763
- disabled: d,
764
- children: "Cancel"
765
- }
766
- ),
767
- /* @__PURE__ */ e(
768
- P,
769
- {
770
- onClick: w,
771
- disabled: !a.trim() || d,
772
- children: d ? /* @__PURE__ */ r(le, { children: [
773
- /* @__PURE__ */ e(oe, { className: "mr-2 h-4 w-4 animate-spin" }),
774
- "Creating..."
775
- ] }) : "Create Visual"
776
- }
777
- )
778
- ] })
779
- ] }) });
780
- }
781
- function Ot({
782
- isOpen: t,
783
- onClose: f,
784
- className: p,
785
- onDashboardItemClick: d,
786
- variant: a = "inline"
787
- }) {
788
- var l, B;
789
- const h = re(
790
- (N) => N.isDashboardEditing
791
- ), [D, s] = x(!1), [w, v] = x(""), [m, c] = x(!1), { currentUser: u, userContext: A } = he(), R = ((l = A == null ? void 0 : A.permissions) == null ? void 0 : l.canCreateDashboard) ?? !1, { onCreateSuccess: b } = at({
792
- onDashboardSelect: d
793
- }), { selectVisual: S } = ce(), { handleEditLibraryVisual: E } = Ue(), {
794
- createResource: V,
795
- isCreating: O,
796
- refetch: y
797
- } = Re(), { createResource: C, isCreating: I } = xe(
798
- void 0,
799
- // onDeleteSuccess (not needed here)
800
- (N) => {
801
- s(!1), N && (S(N), E(N));
802
- }
803
- ), U = a === "overlay", j = h ? "New Visual" : "New", F = h ? "New Visual" : "New Dashboard", i = h ? "Search visuals..." : "Search dashboards...", G = h ? "Collapse visuals panel" : "Collapse dashboard panel", z = ((u == null ? void 0 : u.name) ?? "").trim(), L = ((u == null ? void 0 : u.email) ?? "").trim(), H = z && z.toLowerCase() !== "undefined" ? z : L || "Current user", $ = ((B = H.charAt(0)) == null ? void 0 : B.toUpperCase()) || "?", J = L && L.toLowerCase() !== "undefined" ? L : "", Z = xt(f, {
804
- enabled: t && U
805
- }), q = X(
806
- "flex h-full flex-col border-r border-border/60 bg-background",
807
- U ? X(
808
- "absolute inset-y-0 left-0 z-[51] w-60 overflow-hidden shadow-lg transition-transform duration-300 ease-in-out",
809
- t ? "translate-x-0" : "pointer-events-none -translate-x-full"
810
- ) : "w-full max-w-[17rem] min-w-[11rem] overflow-hidden",
811
- p
812
- ), k = (N) => {
813
- }, o = (N) => {
814
- console.log("Editing dashboard:", N);
815
- }, T = (N) => {
816
- V(N, {
817
- onSuccess: (K) => {
818
- s(!1), b(K, y);
819
- }
820
- });
821
- };
822
- return /* @__PURE__ */ e(le, { children: (!U || t) && /* @__PURE__ */ r("div", { ref: Z, className: q, children: [
823
- /* @__PURE__ */ r("div", { className: "border-b border-border/60 bg-background", children: [
824
- /* @__PURE__ */ r("div", { className: "flex items-center justify-between px-3 py-2", children: [
825
- /* @__PURE__ */ e("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ e("h2", { className: "whitespace-nowrap text-sm font-semibold", children: h ? "Visuals" : "Dashboards" }) }),
826
- /* @__PURE__ */ r("div", { className: "flex items-center gap-1", children: [
827
- /* @__PURE__ */ e(
828
- P,
829
- {
830
- size: "sm",
831
- variant: "ghost",
832
- onClick: () => c(!m),
833
- className: "h-8 w-8 rounded-md p-0 text-muted-foreground hover:bg-muted/50 hover:text-foreground",
834
- "aria-label": m ? "Hide search" : "Show search",
835
- children: /* @__PURE__ */ e(it, { className: "h-3.5 w-3.5" })
836
- }
837
- ),
838
- (h || R) && /* @__PURE__ */ r(
839
- P,
840
- {
841
- size: "sm",
842
- variant: "secondary",
843
- className: "h-8 gap-1.5 whitespace-nowrap rounded-md border border-border/60 bg-muted/30 px-2 text-xs font-medium hover:bg-muted/55",
844
- onClick: () => s(!0),
845
- "aria-label": F,
846
- children: [
847
- /* @__PURE__ */ e(ie, { className: "h-3.5 w-3.5" }),
848
- j
849
- ]
850
- }
851
- ),
852
- /* @__PURE__ */ e(
853
- P,
854
- {
855
- size: "sm",
856
- variant: "outline",
857
- className: "h-8 w-8 rounded-md border-border/60 bg-background p-0.5 text-muted-foreground hover:bg-muted/35 hover:text-foreground",
858
- onClick: f,
859
- "aria-label": G,
860
- children: /* @__PURE__ */ e(dt, { className: "h-3.5 w-3.5" })
861
- }
862
- )
863
- ] })
864
- ] }),
865
- m && /* @__PURE__ */ e("div", { className: "border-t border-border/50 bg-muted/20 px-3 pb-3 pt-2", children: /* @__PURE__ */ e(
866
- de,
867
- {
868
- placeholder: i,
869
- value: w,
870
- onChange: (N) => v(N.target.value),
871
- className: "h-9 border-border/60 bg-background text-sm focus-visible:border-ring/40 focus-visible:ring-0 focus-visible:ring-offset-0",
872
- autoFocus: !0
873
- }
874
- ) })
875
- ] }),
876
- /* @__PURE__ */ e("div", { className: "flex flex-1 flex-col overflow-auto px-2.5 py-2.5", children: h ? /* @__PURE__ */ e(Nt, { searchQuery: w }) : /* @__PURE__ */ e(
877
- Ct,
878
- {
879
- searchQuery: w,
880
- onLoadDashboard: k,
881
- onEditDashboard: o,
882
- onDashboardItemClick: d
883
- }
884
- ) }),
885
- u && /* @__PURE__ */ e(lt, { children: /* @__PURE__ */ e("div", { className: "border-t border-border/60 bg-muted/20 px-3 py-2.5", children: /* @__PURE__ */ r("div", { className: "flex items-center gap-2", children: [
886
- /* @__PURE__ */ r(ct, { children: [
887
- /* @__PURE__ */ e(ut, { asChild: !0, children: /* @__PURE__ */ e("div", { className: "flex h-7 w-7 cursor-default items-center justify-center rounded-full bg-primary/10", children: /* @__PURE__ */ e("span", { className: "text-xs font-medium text-primary", children: $ }) }) }),
888
- /* @__PURE__ */ e(ht, { side: "top", className: "max-w-xs", children: /* @__PURE__ */ r("div", { className: "space-y-1", children: [
889
- /* @__PURE__ */ e("div", { className: "font-medium", children: H }),
890
- J && /* @__PURE__ */ e("div", { className: "text-xs text-muted-foreground", children: J }),
891
- u.role && /* @__PURE__ */ r("div", { className: "text-xs text-muted-foreground", children: [
892
- "Role: ",
893
- mt(u.role.replace(/_/g, " "))
894
- ] })
895
- ] }) })
896
- ] }),
897
- /* @__PURE__ */ e("span", { className: "truncate text-xs font-medium text-muted-foreground", children: H })
898
- ] }) }) }),
899
- h ? /* @__PURE__ */ e(
900
- St,
901
- {
902
- open: D,
903
- onOpenChange: s,
904
- onSubmit: C,
905
- isCreating: I
906
- }
907
- ) : /* @__PURE__ */ e(
908
- pt,
909
- {
910
- open: D,
911
- onOpenChange: s,
912
- onSubmit: T,
913
- isCreating: O
914
- }
915
- )
916
- ] }) });
917
- }
918
- export {
919
- Ot as ResourceManagementPanel
920
- };