@lunora/studio 0.0.0 → 1.0.0-alpha.2

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 (81) hide show
  1. package/LICENSE.md +105 -0
  2. package/README.md +123 -9
  3. package/__assets__/package-og.svg +14 -0
  4. package/dist/index.d.ts +1402 -0
  5. package/dist/index.js +41 -0
  6. package/dist/mount.d.ts +21 -0
  7. package/dist/mount.js +26 -0
  8. package/dist/packem_shared/ADMIN_FUNCTION_PREFIX-DmBqMZ-z.js +45 -0
  9. package/dist/packem_shared/ApiDocsPanel-DpRjJhG5.js +842 -0
  10. package/dist/packem_shared/ApiReferencePanel-DMIUp-kK.js +229 -0
  11. package/dist/packem_shared/ApiTab-DURGU15e.js +251 -0
  12. package/dist/packem_shared/AuditPanel-BC59Nhst.js +212 -0
  13. package/dist/packem_shared/CommandPalette-Dx_CoB9i.js +373 -0
  14. package/dist/packem_shared/ConfirmButton-WQVUoGFb.js +59 -0
  15. package/dist/packem_shared/ConnectionBadge-Bxagrip8.js +111 -0
  16. package/dist/packem_shared/DEFAULT_AUTO_REFRESH_MS-Vxwaxx51.js +50 -0
  17. package/dist/packem_shared/DEFAULT_INSIGHT_THRESHOLDS-DjF0h-gA.js +89 -0
  18. package/dist/packem_shared/DataBrowser-Coz6jJE6.js +4542 -0
  19. package/dist/packem_shared/DataFilters-FNquMaiu.js +249 -0
  20. package/dist/packem_shared/ErrorBoundary-BzAApI7J.js +66 -0
  21. package/dist/packem_shared/ExportImportPanel-WO34fJxy.js +193 -0
  22. package/dist/packem_shared/FileBrowser-Zcr-Qgxo.js +2932 -0
  23. package/dist/packem_shared/FunctionRunner-j0Rd5m9t.js +343 -0
  24. package/dist/packem_shared/FunctionStatsPanel-DboBl-XL.js +432 -0
  25. package/dist/packem_shared/GlobalDataBrowser-9MhPEfgN.js +318 -0
  26. package/dist/packem_shared/HealthPanel-DOIgbUtx.js +640 -0
  27. package/dist/packem_shared/HomePanel-bdOCNA-p.js +1273 -0
  28. package/dist/packem_shared/InsightsPanel-DaZPnSgt.js +423 -0
  29. package/dist/packem_shared/LogsPanel-CWdqAGpQ.js +839 -0
  30. package/dist/packem_shared/MailPanel-D_EGtDnS.js +447 -0
  31. package/dist/packem_shared/MetricsPanel-E4Gv6wTO.js +1625 -0
  32. package/dist/packem_shared/MigrationsPanel-DQdPY9io.js +246 -0
  33. package/dist/packem_shared/OpenRpcReferencePanel-j2p3HB0s.js +191 -0
  34. package/dist/packem_shared/PitrPanel-BbBkQR6t.js +252 -0
  35. package/dist/packem_shared/STUDIO_ROOT_CLASS-D12gX2dV.js +3 -0
  36. package/dist/packem_shared/ScheduledJobs-Ok1CYYwI.js +159 -0
  37. package/dist/packem_shared/SchemaViewer-D8XGnp-X.js +2512 -0
  38. package/dist/packem_shared/SecurityAdvisorPanel-Cdm2IxLW.js +79 -0
  39. package/dist/packem_shared/SettingsPanel-D3WF2mBU.js +176 -0
  40. package/dist/packem_shared/ShardInput-DNCsT1KW.js +107 -0
  41. package/dist/packem_shared/SqlEditorPanel-BuQ7f2Hs.js +13 -0
  42. package/dist/packem_shared/Studio-D36od9Oz.js +33 -0
  43. package/dist/packem_shared/StudioApp-dvywkJ8I.js +383 -0
  44. package/dist/packem_shared/StudioI18nProvider-Dcajsznk.js +48 -0
  45. package/dist/packem_shared/TableEditor-DIVDk3vT.js +371 -0
  46. package/dist/packem_shared/advisor-view-DBlzJi6C.js +159 -0
  47. package/dist/packem_shared/aggregateMetrics-D4nUHEKU.js +108 -0
  48. package/dist/packem_shared/app.d-CCmwDEVs.d.ts +300 -0
  49. package/dist/packem_shared/badge-B2PKA1-5.js +49 -0
  50. package/dist/packem_shared/bar-chart-CzJAgqkp.js +3245 -0
  51. package/dist/packem_shared/button-BhsN2uZH.js +49 -0
  52. package/dist/packem_shared/card-DURq3ElK.js +175 -0
  53. package/dist/packem_shared/cf-links-BZfRdxSE.js +8 -0
  54. package/dist/packem_shared/checkbox-UNkzAxl-.js +63 -0
  55. package/dist/packem_shared/createStudioI18n-CgvlmDkN.js +27 -0
  56. package/dist/packem_shared/data-grid-CCh2Couo.js +183 -0
  57. package/dist/packem_shared/dropdown-menu-WY4B_eJO.js +280 -0
  58. package/dist/packem_shared/empty-state-DY_oe0k6.js +98 -0
  59. package/dist/packem_shared/grid-features-DTjG6Sex.js +840 -0
  60. package/dist/packem_shared/input-XH4r1Pt1.js +53 -0
  61. package/dist/packem_shared/internal-BBZYexre.js +68 -0
  62. package/dist/packem_shared/label-D8ykjn5J.js +46 -0
  63. package/dist/packem_shared/live-status-bPff1O7Y.js +44 -0
  64. package/dist/packem_shared/reference-view-BCKIoai7.js +2180 -0
  65. package/dist/packem_shared/shard-history-DyebH1R5.js +38 -0
  66. package/dist/packem_shared/sparkline-10dG-_f0.js +93 -0
  67. package/dist/packem_shared/sql-editor-panel-CW2y2x9h.js +2562 -0
  68. package/dist/packem_shared/storage-tier-CL98eOvn.js +85 -0
  69. package/dist/packem_shared/studio-BDVd7rIV.js +10303 -0
  70. package/dist/packem_shared/table-_RzNvy3R.js +246 -0
  71. package/dist/packem_shared/table-list-sidebar-aZHLq70w.js +832 -0
  72. package/dist/packem_shared/textarea-D3gaCU_-.js +46 -0
  73. package/dist/packem_shared/use-live-admin-D1h1Fzsd.js +73 -0
  74. package/dist/packem_shared/use-live-shard-seed-B74RYcOy.js +76 -0
  75. package/dist/packem_shared/useDebounced-Dxncpg6z.js +32 -0
  76. package/dist/packem_shared/utils-B05Dmz_H.js +8 -0
  77. package/dist/packem_shared/virtual-rect-CVMUskSm.js +10 -0
  78. package/dist/standalone/studio.js +356 -0
  79. package/dist/styles.css +2 -0
  80. package/package.json +77 -17
  81. package/src/theme.css +59 -0
@@ -0,0 +1,840 @@
1
+ import { c } from 'react/compiler-runtime';
2
+ import { useState } from 'react';
3
+ import { ConfirmButton } from './ConfirmButton-WQVUoGFb.js';
4
+ import { D as DropdownMenuTrigger, a as DropdownMenuLabel, b as DropdownMenuItem, c as DropdownMenuContent, d as DropdownMenu, e as DropdownMenuCheckboxItem, f as DropdownMenuSeparator, g as DropdownMenuGroup } from './dropdown-menu-WY4B_eJO.js';
5
+ import { c as cn } from './utils-B05Dmz_H.js';
6
+ import { jsxDEV } from 'react/jsx-dev-runtime';
7
+ import { useT } from './createStudioI18n-CgvlmDkN.js';
8
+ import { h as formatCell, f as fireAndForget } from './internal-BBZYexre.js';
9
+
10
+ const OVERLAY_BY_VARIANT = {
11
+ dialog: "fixed inset-0 z-[1000] flex justify-center bg-black/20 pt-[10vh]",
12
+ drawer: "fixed inset-0 z-[1000] flex justify-end bg-black/20"
13
+ };
14
+ const PANEL_BY_VARIANT = {
15
+ dialog: "flex h-fit w-[min(28rem,92vw)] flex-col gap-3 rounded-lg border border-border bg-background p-4 shadow-xl",
16
+ drawer: "flex h-full w-[min(34rem,100vw)] flex-col gap-4 overflow-auto border-l border-border bg-background p-4 shadow-xl"
17
+ };
18
+ const ModalShell = (t0) => {
19
+ const $ = c(18);
20
+ const {
21
+ className,
22
+ children,
23
+ label,
24
+ onClose,
25
+ panelTestId,
26
+ testId,
27
+ variant
28
+ } = t0;
29
+ let t1;
30
+ if ($[0] !== onClose) {
31
+ t1 = (event) => {
32
+ if (event.target === event.currentTarget) {
33
+ onClose();
34
+ }
35
+ };
36
+ $[0] = onClose;
37
+ $[1] = t1;
38
+ } else {
39
+ t1 = $[1];
40
+ }
41
+ const onOverlayClick = t1;
42
+ let t2;
43
+ if ($[2] !== onClose) {
44
+ t2 = (event_0) => {
45
+ if (event_0.key === "Escape") {
46
+ onClose();
47
+ }
48
+ };
49
+ $[2] = onClose;
50
+ $[3] = t2;
51
+ } else {
52
+ t2 = $[3];
53
+ }
54
+ const onOverlayKeyDown = t2;
55
+ const t3 = OVERLAY_BY_VARIANT[variant];
56
+ const t4 = PANEL_BY_VARIANT[variant];
57
+ let t5;
58
+ if ($[4] !== className || $[5] !== t4) {
59
+ t5 = cn(t4, className);
60
+ $[4] = className;
61
+ $[5] = t4;
62
+ $[6] = t5;
63
+ } else {
64
+ t5 = $[6];
65
+ }
66
+ let t6;
67
+ if ($[7] !== children || $[8] !== label || $[9] !== panelTestId || $[10] !== t5) {
68
+ t6 = /* @__PURE__ */ jsxDEV("div", {
69
+ "aria-label": label,
70
+ className: t5,
71
+ "data-testid": panelTestId,
72
+ role: "dialog",
73
+ children
74
+ }, void 0, false);
75
+ $[7] = children;
76
+ $[8] = label;
77
+ $[9] = panelTestId;
78
+ $[10] = t5;
79
+ $[11] = t6;
80
+ } else {
81
+ t6 = $[11];
82
+ }
83
+ let t7;
84
+ if ($[12] !== onOverlayClick || $[13] !== onOverlayKeyDown || $[14] !== t3 || $[15] !== t6 || $[16] !== testId) {
85
+ t7 = /* @__PURE__ */ jsxDEV("div", {
86
+ className: t3,
87
+ "data-testid": testId,
88
+ onClick: onOverlayClick,
89
+ onKeyDown: onOverlayKeyDown,
90
+ role: "presentation",
91
+ children: t6
92
+ }, void 0, false);
93
+ $[12] = onOverlayClick;
94
+ $[13] = onOverlayKeyDown;
95
+ $[14] = t3;
96
+ $[15] = t6;
97
+ $[16] = testId;
98
+ $[17] = t7;
99
+ } else {
100
+ t7 = $[17];
101
+ }
102
+ return t7;
103
+ };
104
+
105
+ const CONTROL_BTN = "inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50";
106
+ const CSV_QUOTE_RE = /["\n,]/u;
107
+ const csvCell = (value) => {
108
+ if (value === null || value === void 0) {
109
+ return "";
110
+ }
111
+ let text;
112
+ if (typeof value === "string") {
113
+ text = value;
114
+ } else if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") {
115
+ text = String(value);
116
+ } else {
117
+ text = JSON.stringify(value);
118
+ }
119
+ return CSV_QUOTE_RE.test(text) ? `"${text.replaceAll('"', '""')}"` : text;
120
+ };
121
+ const toCsv = (columns, rows) => {
122
+ const header = columns.map((column) => csvCell(column)).join(",");
123
+ const body = rows.map((row) => columns.map((column) => csvCell(row[column])).join(","));
124
+ return [header, ...body].join("\n");
125
+ };
126
+ const toJson = (rows) => JSON.stringify(rows, null, 2);
127
+ const downloadFile = (filename, content, mime) => {
128
+ if (!("document" in globalThis)) {
129
+ return;
130
+ }
131
+ const url = globalThis.URL.createObjectURL(new globalThis.Blob([content], {
132
+ type: mime
133
+ }));
134
+ const anchor = globalThis.document.createElement("a");
135
+ anchor.href = url;
136
+ anchor.download = filename;
137
+ globalThis.document.body.append(anchor);
138
+ anchor.click();
139
+ anchor.remove();
140
+ globalThis.URL.revokeObjectURL(url);
141
+ };
142
+ const ExportMenu = (t0) => {
143
+ const $ = c(26);
144
+ const {
145
+ columns,
146
+ name,
147
+ rows
148
+ } = t0;
149
+ const t = useT();
150
+ let t1;
151
+ if ($[0] !== columns || $[1] !== name || $[2] !== rows) {
152
+ t1 = () => {
153
+ downloadFile(`${name}.csv`, toCsv(columns, rows), "text/csv;charset=utf-8");
154
+ };
155
+ $[0] = columns;
156
+ $[1] = name;
157
+ $[2] = rows;
158
+ $[3] = t1;
159
+ } else {
160
+ t1 = $[3];
161
+ }
162
+ const onCsv = t1;
163
+ let t2;
164
+ if ($[4] !== name || $[5] !== rows) {
165
+ t2 = () => {
166
+ downloadFile(`${name}.json`, toJson(rows), "application/json");
167
+ };
168
+ $[4] = name;
169
+ $[5] = rows;
170
+ $[6] = t2;
171
+ } else {
172
+ t2 = $[6];
173
+ }
174
+ const onJson = t2;
175
+ const t3 = rows.length === 0;
176
+ let t4;
177
+ if ($[7] !== t3) {
178
+ t4 = /* @__PURE__ */ jsxDEV(DropdownMenuTrigger, {
179
+ className: CONTROL_BTN,
180
+ "data-testid": "grid-export",
181
+ disabled: t3,
182
+ title: "Exports only the rows loaded on the current page, not the whole table",
183
+ children: "Export page"
184
+ }, void 0, false);
185
+ $[7] = t3;
186
+ $[8] = t4;
187
+ } else {
188
+ t4 = $[8];
189
+ }
190
+ let t5;
191
+ if ($[9] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
192
+ t5 = /* @__PURE__ */ jsxDEV(DropdownMenuLabel, {
193
+ children: "Export loaded rows"
194
+ }, void 0, false);
195
+ $[9] = t5;
196
+ } else {
197
+ t5 = $[9];
198
+ }
199
+ let t6;
200
+ if ($[10] !== t) {
201
+ t6 = t("CSV");
202
+ $[10] = t;
203
+ $[11] = t6;
204
+ } else {
205
+ t6 = $[11];
206
+ }
207
+ let t7;
208
+ if ($[12] !== onCsv || $[13] !== t6) {
209
+ t7 = /* @__PURE__ */ jsxDEV(DropdownMenuItem, {
210
+ "data-testid": "grid-export-csv",
211
+ onClick: onCsv,
212
+ children: t6
213
+ }, void 0, false);
214
+ $[12] = onCsv;
215
+ $[13] = t6;
216
+ $[14] = t7;
217
+ } else {
218
+ t7 = $[14];
219
+ }
220
+ let t8;
221
+ if ($[15] !== t) {
222
+ t8 = t("JSON");
223
+ $[15] = t;
224
+ $[16] = t8;
225
+ } else {
226
+ t8 = $[16];
227
+ }
228
+ let t9;
229
+ if ($[17] !== onJson || $[18] !== t8) {
230
+ t9 = /* @__PURE__ */ jsxDEV(DropdownMenuItem, {
231
+ "data-testid": "grid-export-json",
232
+ onClick: onJson,
233
+ children: t8
234
+ }, void 0, false);
235
+ $[17] = onJson;
236
+ $[18] = t8;
237
+ $[19] = t9;
238
+ } else {
239
+ t9 = $[19];
240
+ }
241
+ let t10;
242
+ if ($[20] !== t7 || $[21] !== t9) {
243
+ t10 = /* @__PURE__ */ jsxDEV(DropdownMenuContent, {
244
+ align: "end",
245
+ children: [t5, t7, t9]
246
+ }, void 0, true);
247
+ $[20] = t7;
248
+ $[21] = t9;
249
+ $[22] = t10;
250
+ } else {
251
+ t10 = $[22];
252
+ }
253
+ let t11;
254
+ if ($[23] !== t10 || $[24] !== t4) {
255
+ t11 = /* @__PURE__ */ jsxDEV(DropdownMenu, {
256
+ children: [t4, t10]
257
+ }, void 0, true);
258
+ $[23] = t10;
259
+ $[24] = t4;
260
+ $[25] = t11;
261
+ } else {
262
+ t11 = $[25];
263
+ }
264
+ return t11;
265
+ };
266
+ const ColumnToggle = (t0) => {
267
+ const $ = c(9);
268
+ const {
269
+ column
270
+ } = t0;
271
+ let t1;
272
+ if ($[0] !== column) {
273
+ t1 = () => {
274
+ column.toggleVisibility();
275
+ };
276
+ $[0] = column;
277
+ $[1] = t1;
278
+ } else {
279
+ t1 = $[1];
280
+ }
281
+ const onCheckedChange = t1;
282
+ let t2;
283
+ if ($[2] !== column) {
284
+ t2 = column.getIsVisible();
285
+ $[2] = column;
286
+ $[3] = t2;
287
+ } else {
288
+ t2 = $[3];
289
+ }
290
+ const t3 = `grid-column-${column.id}`;
291
+ let t4;
292
+ if ($[4] !== column.id || $[5] !== onCheckedChange || $[6] !== t2 || $[7] !== t3) {
293
+ t4 = /* @__PURE__ */ jsxDEV(DropdownMenuCheckboxItem, {
294
+ checked: t2,
295
+ closeOnClick: false,
296
+ "data-testid": t3,
297
+ onCheckedChange,
298
+ children: column.id
299
+ }, void 0, false);
300
+ $[4] = column.id;
301
+ $[5] = onCheckedChange;
302
+ $[6] = t2;
303
+ $[7] = t3;
304
+ $[8] = t4;
305
+ } else {
306
+ t4 = $[8];
307
+ }
308
+ return t4;
309
+ };
310
+ const ColumnsMenu = (t0) => {
311
+ const $ = c(30);
312
+ const {
313
+ table
314
+ } = t0;
315
+ const t = useT();
316
+ let t1;
317
+ if ($[0] !== table) {
318
+ t1 = table.getIsAllColumnsVisible();
319
+ $[0] = table;
320
+ $[1] = t1;
321
+ } else {
322
+ t1 = $[1];
323
+ }
324
+ const allVisible = t1;
325
+ let t2;
326
+ if ($[2] !== allVisible || $[3] !== table) {
327
+ t2 = () => {
328
+ table.toggleAllColumnsVisible(!allVisible);
329
+ };
330
+ $[2] = allVisible;
331
+ $[3] = table;
332
+ $[4] = t2;
333
+ } else {
334
+ t2 = $[4];
335
+ }
336
+ const onToggleAll = t2;
337
+ let t3;
338
+ if ($[5] !== t) {
339
+ t3 = t("Columns");
340
+ $[5] = t;
341
+ $[6] = t3;
342
+ } else {
343
+ t3 = $[6];
344
+ }
345
+ let t4;
346
+ if ($[7] !== t3) {
347
+ t4 = /* @__PURE__ */ jsxDEV(DropdownMenuTrigger, {
348
+ className: CONTROL_BTN,
349
+ "data-testid": "grid-columns",
350
+ children: t3
351
+ }, void 0, false);
352
+ $[7] = t3;
353
+ $[8] = t4;
354
+ } else {
355
+ t4 = $[8];
356
+ }
357
+ let t5;
358
+ if ($[9] !== t) {
359
+ t5 = t("Columns");
360
+ $[9] = t;
361
+ $[10] = t5;
362
+ } else {
363
+ t5 = $[10];
364
+ }
365
+ let t6;
366
+ if ($[11] !== t5) {
367
+ t6 = /* @__PURE__ */ jsxDEV(DropdownMenuLabel, {
368
+ children: t5
369
+ }, void 0, false);
370
+ $[11] = t5;
371
+ $[12] = t6;
372
+ } else {
373
+ t6 = $[12];
374
+ }
375
+ let t7;
376
+ if ($[13] !== allVisible || $[14] !== t) {
377
+ t7 = allVisible ? t("Hide all") : t("Show all");
378
+ $[13] = allVisible;
379
+ $[14] = t;
380
+ $[15] = t7;
381
+ } else {
382
+ t7 = $[15];
383
+ }
384
+ let t8;
385
+ if ($[16] !== allVisible || $[17] !== onToggleAll || $[18] !== t7) {
386
+ t8 = /* @__PURE__ */ jsxDEV(DropdownMenuCheckboxItem, {
387
+ checked: allVisible,
388
+ closeOnClick: false,
389
+ "data-testid": "grid-columns-all",
390
+ onCheckedChange: onToggleAll,
391
+ children: t7
392
+ }, void 0, false);
393
+ $[16] = allVisible;
394
+ $[17] = onToggleAll;
395
+ $[18] = t7;
396
+ $[19] = t8;
397
+ } else {
398
+ t8 = $[19];
399
+ }
400
+ let t9;
401
+ if ($[20] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
402
+ t9 = /* @__PURE__ */ jsxDEV(DropdownMenuSeparator, {}, void 0, false);
403
+ $[20] = t9;
404
+ } else {
405
+ t9 = $[20];
406
+ }
407
+ let t10;
408
+ if ($[21] !== table) {
409
+ t10 = table.getAllLeafColumns().map(_temp);
410
+ $[21] = table;
411
+ $[22] = t10;
412
+ } else {
413
+ t10 = $[22];
414
+ }
415
+ let t11;
416
+ if ($[23] !== t10 || $[24] !== t6 || $[25] !== t8) {
417
+ t11 = /* @__PURE__ */ jsxDEV(DropdownMenuContent, {
418
+ align: "end",
419
+ className: "max-h-80 overflow-y-auto",
420
+ children: /* @__PURE__ */ jsxDEV(DropdownMenuGroup, {
421
+ children: [t6, t8, t9, t10]
422
+ }, void 0, true)
423
+ }, void 0, false);
424
+ $[23] = t10;
425
+ $[24] = t6;
426
+ $[25] = t8;
427
+ $[26] = t11;
428
+ } else {
429
+ t11 = $[26];
430
+ }
431
+ let t12;
432
+ if ($[27] !== t11 || $[28] !== t4) {
433
+ t12 = /* @__PURE__ */ jsxDEV(DropdownMenu, {
434
+ children: [t4, t11]
435
+ }, void 0, true);
436
+ $[27] = t11;
437
+ $[28] = t4;
438
+ $[29] = t12;
439
+ } else {
440
+ t12 = $[29];
441
+ }
442
+ return t12;
443
+ };
444
+ const SelectionBar = (t0) => {
445
+ const $ = c(19);
446
+ const {
447
+ count,
448
+ editable,
449
+ onClear,
450
+ onDelete
451
+ } = t0;
452
+ const t = useT();
453
+ let t1;
454
+ if ($[0] !== count || $[1] !== t) {
455
+ t1 = t("{count} selected", {
456
+ count
457
+ });
458
+ $[0] = count;
459
+ $[1] = t;
460
+ $[2] = t1;
461
+ } else {
462
+ t1 = $[2];
463
+ }
464
+ let t2;
465
+ if ($[3] !== t1) {
466
+ t2 = /* @__PURE__ */ jsxDEV("span", {
467
+ className: "font-medium tabular-nums",
468
+ "data-testid": "grid-selection-count",
469
+ children: t1
470
+ }, void 0, false);
471
+ $[3] = t1;
472
+ $[4] = t2;
473
+ } else {
474
+ t2 = $[4];
475
+ }
476
+ let t3;
477
+ if ($[5] !== t) {
478
+ t3 = t("Clear");
479
+ $[5] = t;
480
+ $[6] = t3;
481
+ } else {
482
+ t3 = $[6];
483
+ }
484
+ let t4;
485
+ if ($[7] !== onClear || $[8] !== t3) {
486
+ t4 = /* @__PURE__ */ jsxDEV("button", {
487
+ className: CONTROL_BTN,
488
+ "data-testid": "grid-selection-clear",
489
+ onClick: onClear,
490
+ type: "button",
491
+ children: t3
492
+ }, void 0, false);
493
+ $[7] = onClear;
494
+ $[8] = t3;
495
+ $[9] = t4;
496
+ } else {
497
+ t4 = $[9];
498
+ }
499
+ let t5;
500
+ if ($[10] !== count || $[11] !== editable || $[12] !== onDelete || $[13] !== t) {
501
+ t5 = editable && /* @__PURE__ */ jsxDEV(ConfirmButton, {
502
+ confirmLabel: t("Delete {count} rows?", {
503
+ count
504
+ }),
505
+ onConfirm: onDelete,
506
+ testId: "grid-selection-delete",
507
+ children: t("Delete {count}", {
508
+ count
509
+ })
510
+ }, void 0, false);
511
+ $[10] = count;
512
+ $[11] = editable;
513
+ $[12] = onDelete;
514
+ $[13] = t;
515
+ $[14] = t5;
516
+ } else {
517
+ t5 = $[14];
518
+ }
519
+ let t6;
520
+ if ($[15] !== t2 || $[16] !== t4 || $[17] !== t5) {
521
+ t6 = /* @__PURE__ */ jsxDEV("div", {
522
+ className: "flex items-center gap-2 rounded-md border border-border bg-accent/40 px-3 py-1.5 text-xs",
523
+ "data-testid": "grid-selection-bar",
524
+ children: [t2, t4, t5]
525
+ }, void 0, true);
526
+ $[15] = t2;
527
+ $[16] = t4;
528
+ $[17] = t5;
529
+ $[18] = t6;
530
+ } else {
531
+ t6 = $[18];
532
+ }
533
+ return t6;
534
+ };
535
+ const CellDetailDialog = (t0) => {
536
+ const $ = c(32);
537
+ const {
538
+ column,
539
+ onClose,
540
+ value
541
+ } = t0;
542
+ const t = useT();
543
+ const [copied, setCopied] = useState(false);
544
+ let t1;
545
+ if ($[0] !== value) {
546
+ t1 = formatCell(value);
547
+ $[0] = value;
548
+ $[1] = t1;
549
+ } else {
550
+ t1 = $[1];
551
+ }
552
+ const text = t1;
553
+ let t2;
554
+ if ($[2] !== text) {
555
+ t2 = () => {
556
+ const clipboard = "navigator" in globalThis ? globalThis.navigator.clipboard : void 0;
557
+ if (clipboard === void 0) {
558
+ return;
559
+ }
560
+ fireAndForget(clipboard.writeText(text));
561
+ setCopied(true);
562
+ };
563
+ $[2] = text;
564
+ $[3] = t2;
565
+ } else {
566
+ t2 = $[3];
567
+ }
568
+ const onCopy = t2;
569
+ let t3;
570
+ if ($[4] !== t) {
571
+ t3 = t("Cell value");
572
+ $[4] = t;
573
+ $[5] = t3;
574
+ } else {
575
+ t3 = $[5];
576
+ }
577
+ let t4;
578
+ if ($[6] !== column) {
579
+ t4 = /* @__PURE__ */ jsxDEV("h2", {
580
+ className: "truncate font-mono text-sm font-semibold text-foreground",
581
+ children: column
582
+ }, void 0, false);
583
+ $[6] = column;
584
+ $[7] = t4;
585
+ } else {
586
+ t4 = $[7];
587
+ }
588
+ let t5;
589
+ if ($[8] !== copied || $[9] !== t) {
590
+ t5 = copied ? t("Copied") : t("Copy");
591
+ $[8] = copied;
592
+ $[9] = t;
593
+ $[10] = t5;
594
+ } else {
595
+ t5 = $[10];
596
+ }
597
+ let t6;
598
+ if ($[11] !== onCopy || $[12] !== t5) {
599
+ t6 = /* @__PURE__ */ jsxDEV("button", {
600
+ className: CONTROL_BTN,
601
+ "data-testid": "grid-cell-copy",
602
+ onClick: onCopy,
603
+ type: "button",
604
+ children: t5
605
+ }, void 0, false);
606
+ $[11] = onCopy;
607
+ $[12] = t5;
608
+ $[13] = t6;
609
+ } else {
610
+ t6 = $[13];
611
+ }
612
+ let t7;
613
+ if ($[14] !== t) {
614
+ t7 = t("Close");
615
+ $[14] = t;
616
+ $[15] = t7;
617
+ } else {
618
+ t7 = $[15];
619
+ }
620
+ let t8;
621
+ if ($[16] !== onClose || $[17] !== t7) {
622
+ t8 = /* @__PURE__ */ jsxDEV("button", {
623
+ className: CONTROL_BTN,
624
+ "data-testid": "grid-cell-close",
625
+ onClick: onClose,
626
+ type: "button",
627
+ children: t7
628
+ }, void 0, false);
629
+ $[16] = onClose;
630
+ $[17] = t7;
631
+ $[18] = t8;
632
+ } else {
633
+ t8 = $[18];
634
+ }
635
+ let t9;
636
+ if ($[19] !== t6 || $[20] !== t8) {
637
+ t9 = /* @__PURE__ */ jsxDEV("div", {
638
+ className: "flex items-center gap-1.5",
639
+ children: [t6, t8]
640
+ }, void 0, true);
641
+ $[19] = t6;
642
+ $[20] = t8;
643
+ $[21] = t9;
644
+ } else {
645
+ t9 = $[21];
646
+ }
647
+ let t10;
648
+ if ($[22] !== t4 || $[23] !== t9) {
649
+ t10 = /* @__PURE__ */ jsxDEV("div", {
650
+ className: "flex items-center justify-between",
651
+ children: [t4, t9]
652
+ }, void 0, true);
653
+ $[22] = t4;
654
+ $[23] = t9;
655
+ $[24] = t10;
656
+ } else {
657
+ t10 = $[24];
658
+ }
659
+ let t11;
660
+ if ($[25] !== text) {
661
+ t11 = /* @__PURE__ */ jsxDEV("pre", {
662
+ className: "min-h-0 flex-1 overflow-auto rounded-md border border-border bg-muted/30 p-3 font-mono text-xs whitespace-pre-wrap",
663
+ "data-testid": "grid-cell-value",
664
+ children: text
665
+ }, void 0, false);
666
+ $[25] = text;
667
+ $[26] = t11;
668
+ } else {
669
+ t11 = $[26];
670
+ }
671
+ let t12;
672
+ if ($[27] !== onClose || $[28] !== t10 || $[29] !== t11 || $[30] !== t3) {
673
+ t12 = /* @__PURE__ */ jsxDEV(ModalShell, {
674
+ className: "max-h-[70vh] w-[min(40rem,90vw)]",
675
+ label: t3,
676
+ onClose,
677
+ panelTestId: "grid-cell-dialog",
678
+ testId: "grid-cell-dialog-overlay",
679
+ variant: "dialog",
680
+ children: [t10, t11]
681
+ }, void 0, true);
682
+ $[27] = onClose;
683
+ $[28] = t10;
684
+ $[29] = t11;
685
+ $[30] = t3;
686
+ $[31] = t12;
687
+ } else {
688
+ t12 = $[31];
689
+ }
690
+ return t12;
691
+ };
692
+ const GridActionsBar = (t0) => {
693
+ const $ = c(33);
694
+ const {
695
+ columns,
696
+ editable,
697
+ name,
698
+ onBulkDelete,
699
+ onToggleTranspose,
700
+ rows,
701
+ table,
702
+ transposed
703
+ } = t0;
704
+ const t = useT();
705
+ let t1;
706
+ if ($[0] !== table) {
707
+ t1 = table.getSelectedRowModel();
708
+ $[0] = table;
709
+ $[1] = t1;
710
+ } else {
711
+ t1 = $[1];
712
+ }
713
+ const selected = t1.rows;
714
+ let t2;
715
+ if ($[2] !== table) {
716
+ t2 = () => {
717
+ table.resetRowSelection();
718
+ };
719
+ $[2] = table;
720
+ $[3] = t2;
721
+ } else {
722
+ t2 = $[3];
723
+ }
724
+ const onClear = t2;
725
+ let t3;
726
+ if ($[4] !== onBulkDelete || $[5] !== selected || $[6] !== table) {
727
+ t3 = () => {
728
+ onBulkDelete(selected.map(_temp2));
729
+ table.resetRowSelection();
730
+ };
731
+ $[4] = onBulkDelete;
732
+ $[5] = selected;
733
+ $[6] = table;
734
+ $[7] = t3;
735
+ } else {
736
+ t3 = $[7];
737
+ }
738
+ const onDelete = t3;
739
+ let t4;
740
+ if ($[8] !== columns || $[9] !== name || $[10] !== rows) {
741
+ t4 = /* @__PURE__ */ jsxDEV(ExportMenu, {
742
+ columns,
743
+ name,
744
+ rows
745
+ }, void 0, false);
746
+ $[8] = columns;
747
+ $[9] = name;
748
+ $[10] = rows;
749
+ $[11] = t4;
750
+ } else {
751
+ t4 = $[11];
752
+ }
753
+ let t5;
754
+ if ($[12] !== table) {
755
+ t5 = /* @__PURE__ */ jsxDEV(ColumnsMenu, {
756
+ table
757
+ }, void 0, false);
758
+ $[12] = table;
759
+ $[13] = t5;
760
+ } else {
761
+ t5 = $[13];
762
+ }
763
+ let t6;
764
+ if ($[14] !== t) {
765
+ t6 = t("Swap rows and columns");
766
+ $[14] = t;
767
+ $[15] = t6;
768
+ } else {
769
+ t6 = $[15];
770
+ }
771
+ let t7;
772
+ if ($[16] !== t) {
773
+ t7 = t("Transpose");
774
+ $[16] = t;
775
+ $[17] = t7;
776
+ } else {
777
+ t7 = $[17];
778
+ }
779
+ let t8;
780
+ if ($[18] !== onToggleTranspose || $[19] !== t6 || $[20] !== t7 || $[21] !== transposed) {
781
+ t8 = /* @__PURE__ */ jsxDEV("button", {
782
+ "aria-pressed": transposed,
783
+ className: CONTROL_BTN,
784
+ "data-testid": "grid-transpose",
785
+ onClick: onToggleTranspose,
786
+ title: t6,
787
+ type: "button",
788
+ children: t7
789
+ }, void 0, false);
790
+ $[18] = onToggleTranspose;
791
+ $[19] = t6;
792
+ $[20] = t7;
793
+ $[21] = transposed;
794
+ $[22] = t8;
795
+ } else {
796
+ t8 = $[22];
797
+ }
798
+ let t9;
799
+ if ($[23] !== editable || $[24] !== onClear || $[25] !== onDelete || $[26] !== selected.length) {
800
+ t9 = selected.length > 0 && /* @__PURE__ */ jsxDEV(SelectionBar, {
801
+ count: selected.length,
802
+ editable,
803
+ onClear,
804
+ onDelete
805
+ }, void 0, false);
806
+ $[23] = editable;
807
+ $[24] = onClear;
808
+ $[25] = onDelete;
809
+ $[26] = selected.length;
810
+ $[27] = t9;
811
+ } else {
812
+ t9 = $[27];
813
+ }
814
+ let t10;
815
+ if ($[28] !== t4 || $[29] !== t5 || $[30] !== t8 || $[31] !== t9) {
816
+ t10 = /* @__PURE__ */ jsxDEV("div", {
817
+ className: "flex flex-wrap items-center gap-1.5",
818
+ "data-testid": "grid-actions",
819
+ children: [t4, t5, t8, t9]
820
+ }, void 0, true);
821
+ $[28] = t4;
822
+ $[29] = t5;
823
+ $[30] = t8;
824
+ $[31] = t9;
825
+ $[32] = t10;
826
+ } else {
827
+ t10 = $[32];
828
+ }
829
+ return t10;
830
+ };
831
+ function _temp(column) {
832
+ return /* @__PURE__ */ jsxDEV(ColumnToggle, {
833
+ column
834
+ }, column.id, false);
835
+ }
836
+ function _temp2(row) {
837
+ return row.id;
838
+ }
839
+
840
+ export { CellDetailDialog as C, ExportMenu as E, GridActionsBar as G, ModalShell as M, SelectionBar as S };