@lunora/studio 1.0.0-alpha.5 → 1.0.0-alpha.50

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 (198) hide show
  1. package/LICENSE.md +6 -0
  2. package/__assets__/package-og.svg +1 -1
  3. package/dist/index.d.ts +45 -23
  4. package/dist/index.js +31 -31
  5. package/dist/mount.d.ts +1 -1
  6. package/dist/mount.js +3 -2
  7. package/dist/{packem_shared/ApiTab-W3no0KOj.js → packem_chunks/ApiTab.js} +5 -5
  8. package/dist/{packem_shared/AuditPanel-Bq4o_IqT.js → packem_chunks/AuditPanel.js} +29 -41
  9. package/dist/{packem_shared/ExportImportPanel-dxY56TDF.js → packem_chunks/ExportImportPanel.js} +16 -11
  10. package/dist/{packem_shared/FileBrowser-Dhy4zES8.js → packem_chunks/FileBrowser.js} +55 -32
  11. package/dist/{packem_shared/FunctionRunner--fQJRPAD.js → packem_chunks/FunctionRunner.js} +15 -32
  12. package/dist/{packem_shared/FunctionStatsPanel-BjRUA_G3.js → packem_chunks/FunctionStatsPanel.js} +153 -208
  13. package/dist/{packem_shared/HealthPanel-PxclMWmA.js → packem_chunks/HealthPanel.js} +37 -29
  14. package/dist/{packem_shared/InsightsPanel-CWS_C-xW.js → packem_chunks/InsightsPanel.js} +108 -69
  15. package/dist/{packem_shared/LogsPanel-CTW8CFcM.js → packem_chunks/LogsPanel.js} +46 -58
  16. package/dist/{packem_shared/MailPanel-BwkvfIHF.js → packem_chunks/MailPanel.js} +45 -139
  17. package/dist/{packem_shared/MetricsPanel-BLuOhZQ4.js → packem_chunks/MetricsPanel.js} +41 -322
  18. package/dist/{packem_shared/MigrationsPanel-DT3lnwHF.js → packem_chunks/MigrationsPanel.js} +44 -51
  19. package/dist/{packem_shared/PitrPanel-CdErL7EJ.js → packem_chunks/PitrPanel.js} +9 -9
  20. package/dist/{packem_shared/SchemaViewer-LJDcmNIO.js → packem_chunks/SchemaViewer.js} +17 -16
  21. package/dist/{packem_shared/SecurityAdvisorPanel-C_ETsPih.js → packem_chunks/SecurityAdvisorPanel.js} +47 -31
  22. package/dist/packem_chunks/SettingsPanel.js +391 -0
  23. package/dist/{packem_shared/sql-editor-panel-BFRpzj6r.js → packem_chunks/SqlEditorPanel.js} +159 -387
  24. package/dist/{packem_shared/TableEditor-ChfUOZec.js → packem_chunks/TableEditor.js} +13 -94
  25. package/dist/packem_chunks/agents-panel.js +326 -0
  26. package/dist/packem_chunks/analytics-panel.js +261 -0
  27. package/dist/packem_chunks/auth-config-panel.js +365 -0
  28. package/dist/packem_chunks/auth-sessions-panel.js +175 -0
  29. package/dist/packem_chunks/containers-panel.js +261 -0
  30. package/dist/packem_chunks/dashboards-panel.js +781 -0
  31. package/dist/packem_chunks/fanout-panel.js +482 -0
  32. package/dist/packem_chunks/flags-panel.js +176 -0
  33. package/dist/packem_chunks/issues-panel.js +188 -0
  34. package/dist/packem_chunks/kv-browser.js +1896 -0
  35. package/dist/packem_chunks/log-drains-panel.js +273 -0
  36. package/dist/packem_chunks/organizations-panel.js +3178 -0
  37. package/dist/packem_chunks/payments-panel.js +186 -0
  38. package/dist/packem_chunks/permissions-panel.js +805 -0
  39. package/dist/packem_chunks/queues-panel.js +1075 -0
  40. package/dist/packem_chunks/rls-panel.js +315 -0
  41. package/dist/packem_chunks/schedule-panel.js +831 -0
  42. package/dist/packem_chunks/sparkline.js +79 -0
  43. package/dist/packem_chunks/storage-rules-panel.js +140 -0
  44. package/dist/packem_chunks/subscriptions-panel.js +238 -0
  45. package/dist/packem_chunks/users-panel.js +1731 -0
  46. package/dist/packem_chunks/vector-browser.js +281 -0
  47. package/dist/packem_chunks/workflows-panel.js +562 -0
  48. package/dist/packem_shared/{ADMIN_FUNCTIONS-DmBqMZ-z.js → ADMIN_FUNCTIONS-DNeyYtUN.js} +8 -0
  49. package/dist/packem_shared/{ApiDocsPanel-C5-yJ1p7.js → ApiDocsPanel-_aEZxAMX.js} +2 -2
  50. package/dist/packem_shared/{ApiReferencePanel-1vubqG5s.js → ApiReferencePanel-Dd8pcswz.js} +2 -1
  51. package/dist/packem_shared/{CommandPalette-BtgkBzZI.js → CommandPalette-BXV4eKf5.js} +1 -1
  52. package/dist/packem_shared/{DataBrowser-CtBe1So9.js → DataBrowser-C8hejnub.js} +201 -250
  53. package/dist/packem_shared/{DataFilters-FNquMaiu.js → DataFilters-B1Q7mrt7.js} +6 -2
  54. package/dist/packem_shared/{GlobalDataBrowser-BTEmGrph.js → GlobalDataBrowser-CxJxRRf2.js} +37 -66
  55. package/dist/packem_shared/HomePanel-Ye8PaqQL.js +14 -0
  56. package/dist/packem_shared/{OpenRpcReferencePanel-vbcYbv3V.js → OpenRpcReferencePanel-CWaf0ZtX.js} +2 -1
  57. package/dist/packem_shared/{ScheduledJobs-CabfKbyM.js → ScheduledJobs-dHMgnJbx.js} +163 -60
  58. package/dist/packem_shared/{ShardInput-gx_DZXXn.js → ShardInput-CZnpHILL.js} +1 -1
  59. package/dist/packem_shared/Studio-xJLTlLpf.js +16 -0
  60. package/dist/packem_shared/{StudioApp-D4azxYBu.js → StudioApp-oCQholCL.js} +6 -21
  61. package/dist/packem_shared/{advisor-view-CGcfMiPq.js → advisor-view-Cx21PS_T.js} +6 -6
  62. package/dist/packem_shared/alert-CdAET2K_.js +68 -0
  63. package/dist/packem_shared/{app.d-CCmwDEVs.d.ts → app.d-CGdOmLTm.d.ts} +1 -1
  64. package/dist/packem_shared/{bar-chart-CzJAgqkp.js → bar-chart-DSwcWIRy.js} +5 -4
  65. package/dist/packem_shared/browser-storage-L4gOP5gJ.js +105 -0
  66. package/dist/packem_shared/{cf-links-2cktDedA.js → cf-links-BZfRdxSE.js} +1 -1
  67. package/dist/packem_shared/{data-grid-B5CaV3wS.js → data-grid-C9I16KWr.js} +1 -1
  68. package/dist/packem_shared/data-view-params-Cd6yRVbv.js +96 -0
  69. package/dist/packem_shared/error-alert-vIPQoN3Y.js +114 -0
  70. package/dist/packem_shared/{grid-features-CzUfqgsM.js → grid-features-B_fZH4iQ.js} +133 -164
  71. package/dist/packem_shared/home-panel-D62G8108.js +1889 -0
  72. package/dist/packem_shared/internal-zwBoOv24.js +122 -0
  73. package/dist/packem_shared/modal-shell-hyaJvIJ6.js +100 -0
  74. package/dist/packem_shared/{reference-view-B4E49Lip.js → reference-view-DUULLuOi.js} +8 -61
  75. package/dist/packem_shared/result-chart-DZradBAS.js +119 -0
  76. package/dist/packem_shared/scroll-area-DLhcy-ml.js +93 -0
  77. package/dist/packem_shared/select-UkNYCT3s.js +273 -0
  78. package/dist/packem_shared/shard-history-AxiJ1WPP.js +16 -0
  79. package/dist/packem_shared/skeleton-CGhL0p20.js +45 -0
  80. package/dist/packem_shared/{sparkline-10dG-_f0.js → sparkline-BnA1kC9X.js} +1 -1
  81. package/dist/packem_shared/studio-WZUOecDv.js +4069 -0
  82. package/dist/packem_shared/{table-_RzNvy3R.js → table-DsCa9Qp9.js} +1 -1
  83. package/dist/packem_shared/{table-list-sidebar-Bg7uzbvC.js → table-list-sidebar-huX4VmgI.js} +19 -9
  84. package/dist/packem_shared/use-admin-query-BGJ010yZ.js +106 -0
  85. package/dist/packem_shared/use-async-submit-DGCtuDyz.js +91 -0
  86. package/dist/standalone/chunk-22C6COGE.js +13 -0
  87. package/dist/standalone/chunk-2CCWLKQW.js +1 -0
  88. package/dist/standalone/chunk-2JTPX3CV.js +1 -0
  89. package/dist/standalone/chunk-2K47A3P6.js +1 -0
  90. package/dist/standalone/chunk-2MLA6WFH.js +1 -0
  91. package/dist/standalone/chunk-2NGUNNGW.js +1 -0
  92. package/dist/standalone/chunk-3CPQ5IQU.js +1 -0
  93. package/dist/standalone/chunk-3GXGLNKW.js +1 -0
  94. package/dist/standalone/chunk-3OA7PECS.js +6 -0
  95. package/dist/standalone/chunk-4AXW2ECS.js +13 -0
  96. package/dist/standalone/chunk-4BVRLBEW.js +1 -0
  97. package/dist/standalone/chunk-4PC7IXNY.js +1 -0
  98. package/dist/standalone/chunk-4QHKBC77.js +1 -0
  99. package/dist/standalone/chunk-5OIBXYZM.js +1 -0
  100. package/dist/standalone/chunk-5OZQHQ26.js +1 -0
  101. package/dist/standalone/chunk-6RREMPQX.js +2 -0
  102. package/dist/standalone/chunk-6ZBU3JWR.js +3 -0
  103. package/dist/standalone/chunk-7LDYSHOU.js +1 -0
  104. package/dist/standalone/chunk-7TJJXVSE.js +1 -0
  105. package/dist/standalone/chunk-A2DBMISD.js +1 -0
  106. package/dist/standalone/chunk-A3ZJACVT.js +4 -0
  107. package/dist/standalone/chunk-A66LI6OV.js +4 -0
  108. package/dist/standalone/chunk-AHILM3ZP.js +1 -0
  109. package/dist/standalone/chunk-AITOCPML.js +1 -0
  110. package/dist/standalone/chunk-APSSZB6Z.js +1 -0
  111. package/dist/standalone/chunk-BGG56IF5.js +1 -0
  112. package/dist/standalone/chunk-BJGBHGK3.js +1 -0
  113. package/dist/standalone/chunk-CJXJIRSN.js +1 -0
  114. package/dist/standalone/chunk-CKSHCYGC.js +2 -0
  115. package/dist/standalone/chunk-DR6LGPXE.js +1 -0
  116. package/dist/standalone/chunk-DWDILV2E.js +1 -0
  117. package/dist/standalone/chunk-EEWKIQUE.js +1 -0
  118. package/dist/standalone/chunk-EOE5NDMK.js +1 -0
  119. package/dist/standalone/chunk-FAUN4Z72.js +1 -0
  120. package/dist/standalone/chunk-G7ZBM54M.js +1 -0
  121. package/dist/standalone/chunk-GTM65MVX.js +1 -0
  122. package/dist/standalone/chunk-HAJSYWFT.js +8 -0
  123. package/dist/standalone/chunk-HQM6MBPS.js +1 -0
  124. package/dist/standalone/chunk-HTQNZXDT.js +1 -0
  125. package/dist/standalone/chunk-HV7G6DFP.js +5 -0
  126. package/dist/standalone/chunk-IO2XEI6T.js +1 -0
  127. package/dist/standalone/chunk-ITQKVEP7.js +19 -0
  128. package/dist/standalone/chunk-IZN4TYMN.js +1 -0
  129. package/dist/standalone/chunk-J6J54MBP.js +1 -0
  130. package/dist/standalone/chunk-JM7XBQVK.js +1 -0
  131. package/dist/standalone/chunk-JPILGFXT.js +1 -0
  132. package/dist/standalone/chunk-JSEXCW5Q.js +1 -0
  133. package/dist/standalone/chunk-JUDPYSJZ.js +1 -0
  134. package/dist/standalone/chunk-K4S652EQ.js +4 -0
  135. package/dist/standalone/chunk-KEGAWN6Y.js +1 -0
  136. package/dist/standalone/chunk-KJFFID72.js +1 -0
  137. package/dist/standalone/chunk-KJJ3WM6H.js +4 -0
  138. package/dist/standalone/chunk-KZ6INM5M.js +1 -0
  139. package/dist/standalone/chunk-L7SK4ZZD.js +1 -0
  140. package/dist/standalone/chunk-LAK5VSPI.js +1 -0
  141. package/dist/standalone/chunk-LJAAZNQ6.js +1 -0
  142. package/dist/standalone/chunk-LUP4YTBS.js +1 -0
  143. package/dist/standalone/chunk-LX7KONE3.js +1 -0
  144. package/dist/standalone/chunk-MDTNVR3G.js +1 -0
  145. package/dist/standalone/chunk-NS23QR4W.js +1 -0
  146. package/dist/standalone/chunk-NW6SZZ5O.js +1 -0
  147. package/dist/standalone/chunk-O3NAGRTR.js +1 -0
  148. package/dist/standalone/chunk-P2ERTKMB.js +1 -0
  149. package/dist/standalone/chunk-PS3XCCZD.js +1 -0
  150. package/dist/standalone/chunk-QAFAJBAW.js +1 -0
  151. package/dist/standalone/chunk-RRCPZMC2.js +22 -0
  152. package/dist/standalone/chunk-RS7S7XVP.js +1 -0
  153. package/dist/standalone/chunk-S5NTGHCG.js +1 -0
  154. package/dist/standalone/chunk-S7AB7Y75.js +1 -0
  155. package/dist/standalone/chunk-SDMZKBTD.js +1 -0
  156. package/dist/standalone/chunk-SDQE2IUJ.js +1 -0
  157. package/dist/standalone/chunk-SEU5V7I6.js +1 -0
  158. package/dist/standalone/chunk-SHERR7ZP.js +1 -0
  159. package/dist/standalone/chunk-SHJUAHC6.js +1 -0
  160. package/dist/standalone/chunk-TAD43CG5.js +1 -0
  161. package/dist/standalone/chunk-TO6D2PJC.js +6 -0
  162. package/dist/standalone/chunk-TQ36RWOP.js +1 -0
  163. package/dist/standalone/chunk-TYN6SQ73.js +1 -0
  164. package/dist/standalone/chunk-U26QNHMO.js +1 -0
  165. package/dist/standalone/chunk-UK64ZSUW.js +1 -0
  166. package/dist/standalone/chunk-UTHHHJYS.js +1 -0
  167. package/dist/standalone/chunk-V43BLH4J.js +1 -0
  168. package/dist/standalone/chunk-VL23Y44O.js +4 -0
  169. package/dist/standalone/chunk-VL6HOZHF.js +1 -0
  170. package/dist/standalone/chunk-VLXV72QE.js +1 -0
  171. package/dist/standalone/chunk-W666BB6V.js +1 -0
  172. package/dist/standalone/chunk-W6JKUZKD.js +1 -0
  173. package/dist/standalone/chunk-WI7GWFEG.js +1 -0
  174. package/dist/standalone/chunk-WUFVFVHJ.js +1 -0
  175. package/dist/standalone/chunk-WVTPZ6CM.js +1 -0
  176. package/dist/standalone/chunk-X2TQRMQV.js +1 -0
  177. package/dist/standalone/chunk-X4676IX6.js +1 -0
  178. package/dist/standalone/chunk-X4QFAAZ5.js +76 -0
  179. package/dist/standalone/chunk-XJU5SRNL.js +4 -0
  180. package/dist/standalone/chunk-XNJNSCLM.js +1 -0
  181. package/dist/standalone/chunk-XWPZBZSZ.js +3 -0
  182. package/dist/standalone/chunk-YLHDKM2P.js +1 -0
  183. package/dist/standalone/chunk-ZHVTQ37P.js +1 -0
  184. package/dist/standalone/chunk-ZIGWVHCS.js +1 -0
  185. package/dist/standalone/chunk-ZPP2KOR4.js +1 -0
  186. package/dist/standalone/chunk-ZPUO7FNI.js +1 -0
  187. package/dist/standalone/studio.js +104 -246
  188. package/dist/styles.css +2 -2
  189. package/package.json +17 -15
  190. package/dist/packem_shared/HomePanel-Cw16stjq.js +0 -1273
  191. package/dist/packem_shared/SettingsPanel-C0uLRf5P.js +0 -176
  192. package/dist/packem_shared/SqlEditorPanel-CguV7otm.js +0 -13
  193. package/dist/packem_shared/Studio-BmSGSIuY.js +0 -33
  194. package/dist/packem_shared/internal-rXJEAhXS.js +0 -68
  195. package/dist/packem_shared/shard-history-DyebH1R5.js +0 -38
  196. package/dist/packem_shared/studio-H9fuQgSj.js +0 -10303
  197. package/dist/packem_shared/use-live-admin-Dq6g3daN.js +0 -73
  198. package/dist/packem_shared/use-live-shard-seed-Cuk3dnH0.js +0 -76
@@ -115,7 +115,7 @@ interface FunctionDescriptor {
115
115
  /** Outcome of a single `FunctionRunner` invocation. */
116
116
  type RunStatus = "error" | "idle" | "running" | "success";
117
117
  /** Identifier for each built-in studio tab. */
118
- type StudioTab = "analytics" | "api" | "audit" | "authConfig" | "authSessions" | "dashboards" | "data" | "drains" | "export" | "files" | "functions" | "health" | "home" | "insights" | "logs" | "mail" | "metrics" | "migrations" | "organizations" | "payments" | "permissions" | "pitr" | "realtime" | "rls" | "schedule" | "schema" | "security" | "settings" | "sql" | "storageRules" | "users" | "vectors" | "workflows";
118
+ type StudioTab = "agents" | "analytics" | "api" | "audit" | "authConfig" | "authSessions" | "containers" | "dashboards" | "data" | "drains" | "export" | "fanout" | "files" | "flags" | "functions" | "health" | "home" | "insights" | "issues" | "kv" | "logs" | "mail" | "metrics" | "migrations" | "organizations" | "payments" | "permissions" | "pitr" | "queues" | "realtime" | "rls" | "schedule" | "schema" | "security" | "settings" | "sql" | "storageRules" | "users" | "vectors" | "workflows";
119
119
  interface StudioProps {
120
120
  /**
121
121
  * URL path prefix the studio is mounted under, passed to the router as its
@@ -1,10 +1,11 @@
1
1
  'use client';
2
2
  import { c } from 'react/compiler-runtime';
3
+ import { LunoraError } from '@lunora/errors';
3
4
  import { useMotionValue, useSpring, useTransform, useMotionValueEvent, motion, useReducedMotion } from 'motion/react';
4
5
  import * as React from 'react';
5
6
  import { useId, useEffect, useState, use, createContext, useRef } from 'react';
6
7
  import * as RechartsPrimitive from 'recharts';
7
- import { ZIndexLayer, ResponsiveContainer, LineChart, Line, BarChart, Bar as Bar$1, AreaChart, Area, XAxis as XAxis$1, ReferenceLine, Rectangle } from 'recharts';
8
+ import { ZIndexLayer, ResponsiveContainer, LineChart, Line, BarChart, Bar as Bar$1, AreaChart, Area, ReferenceLine, Rectangle, XAxis as XAxis$1 } from 'recharts';
8
9
  import { jsxDEV, Fragment } from 'react/jsx-dev-runtime';
9
10
  import { c as cn } from './utils-B05Dmz_H.js';
10
11
 
@@ -554,7 +555,7 @@ function validateChartConfigColors(config) {
554
555
  if (value.colors) {
555
556
  const hasValidThemeKey = VALID_THEME_KEYS.some((themeKey) => value.colors?.[themeKey] !== void 0);
556
557
  if (!hasValidThemeKey) {
557
- throw new Error(`[EvilCharts] Invalid chart config for "${key}": colors object must have at least one theme key (${VALID_THEME_KEYS.join(", ")}). Received empty object or invalid keys.`);
558
+ throw new LunoraError("INTERNAL", `[EvilCharts] Invalid chart config for "${key}": colors object must have at least one theme key (${VALID_THEME_KEYS.join(", ")}). Received empty object or invalid keys.`);
558
559
  }
559
560
  }
560
561
  }
@@ -563,7 +564,7 @@ const ChartContext = /* @__PURE__ */ React.createContext(null);
563
564
  function useChart() {
564
565
  const context = React.useContext(ChartContext);
565
566
  if (!context) {
566
- throw new Error("useChart must be used within a <ChartContainer />");
567
+ throw new LunoraError("INTERNAL", "useChart must be used within a <ChartContainer />");
567
568
  }
568
569
  return context;
569
570
  }
@@ -1521,7 +1522,7 @@ const BarChartContext = /* @__PURE__ */ createContext(null);
1521
1522
  function useBarChart() {
1522
1523
  const context = use(BarChartContext);
1523
1524
  if (!context) {
1524
- throw new Error("Bar chart parts (<Bar />, <XAxis />, …) must be used within <EvilBarChart />");
1525
+ throw new LunoraError("INTERNAL", "Bar chart parts (<Bar />, <XAxis />, …) must be used within <EvilBarChart />");
1525
1526
  }
1526
1527
  return context;
1527
1528
  }
@@ -0,0 +1,105 @@
1
+ import { c } from 'react/compiler-runtime';
2
+ import { useState, useRef, useEffect } from 'react';
3
+
4
+ const storageOf = (kind = "local") => {
5
+ try {
6
+ return kind === "local" ? globalThis.localStorage : globalThis.sessionStorage;
7
+ } catch {
8
+ return void 0;
9
+ }
10
+ };
11
+ const loadJsonArray = function(key, kind = "local") {
12
+ try {
13
+ const raw = storageOf(kind)?.getItem(key) ?? void 0;
14
+ const parsed = raw === void 0 ? [] : JSON.parse(raw);
15
+ return Array.isArray(parsed) ? parsed : [];
16
+ } catch {
17
+ return [];
18
+ }
19
+ };
20
+ const saveJson = (key, value, kind = "local") => {
21
+ const storage = storageOf(kind);
22
+ if (storage === void 0) {
23
+ return;
24
+ }
25
+ try {
26
+ storage.setItem(key, JSON.stringify(value));
27
+ } catch {
28
+ }
29
+ };
30
+ const usePersistedList = function(key) {
31
+ const $ = c(8);
32
+ let t0;
33
+ if ($[0] !== key) {
34
+ t0 = () => loadJsonArray(key);
35
+ $[0] = key;
36
+ $[1] = t0;
37
+ } else {
38
+ t0 = $[1];
39
+ }
40
+ const [value, setValue] = useState(t0);
41
+ const keyRef = useRef(key);
42
+ let t1;
43
+ let t2;
44
+ if ($[2] !== key || $[3] !== value) {
45
+ t1 = () => {
46
+ if (keyRef.current !== key) {
47
+ keyRef.current = key;
48
+ setValue(loadJsonArray(key));
49
+ return;
50
+ }
51
+ saveJson(key, value);
52
+ };
53
+ t2 = [key, value];
54
+ $[2] = key;
55
+ $[3] = value;
56
+ $[4] = t1;
57
+ $[5] = t2;
58
+ } else {
59
+ t1 = $[4];
60
+ t2 = $[5];
61
+ }
62
+ useEffect(t1, t2);
63
+ let t3;
64
+ if ($[6] !== value) {
65
+ t3 = [value, setValue];
66
+ $[6] = value;
67
+ $[7] = t3;
68
+ } else {
69
+ t3 = $[7];
70
+ }
71
+ return t3;
72
+ };
73
+ const usePersistedValue = function(key, fallback) {
74
+ const $ = c(6);
75
+ const [list, setList] = usePersistedList(key);
76
+ let t0;
77
+ if ($[0] !== fallback || $[1] !== setList) {
78
+ t0 = (action) => {
79
+ setList((current) => {
80
+ const previous = current[0] ?? fallback;
81
+ return [typeof action === "function" ? action(previous) : action];
82
+ });
83
+ };
84
+ $[0] = fallback;
85
+ $[1] = setList;
86
+ $[2] = t0;
87
+ } else {
88
+ t0 = $[2];
89
+ }
90
+ const setValue = t0;
91
+ const t1 = list[0] ?? fallback;
92
+ let t2;
93
+ if ($[3] !== setValue || $[4] !== t1) {
94
+ t2 = [t1, setValue];
95
+ $[3] = setValue;
96
+ $[4] = t1;
97
+ $[5] = t2;
98
+ } else {
99
+ t2 = $[5];
100
+ }
101
+ return t2;
102
+ };
103
+ const newId = (prefix) => globalThis.crypto?.randomUUID?.() ?? `${prefix}-${globalThis.performance.now().toString(36)}`;
104
+
105
+ export { storageOf as a, usePersistedValue as b, loadJsonArray as l, newId as n, saveJson as s, usePersistedList as u };
@@ -5,4 +5,4 @@ const CLOUDFLARE_R2_URL = `${CLOUDFLARE_DASH}/r2`;
5
5
  const CLOUDFLARE_D1_URL = `${CLOUDFLARE_DASH}/workers/d1`;
6
6
  const CLOUDFLARE_DURABLE_OBJECTS_URL = `${CLOUDFLARE_DASH}/workers/durable-objects`;
7
7
 
8
- export { CLOUDFLARE_OBSERVABILITY_URL as C, CLOUDFLARE_WORKERS_URL as a, CLOUDFLARE_D1_URL as b, CLOUDFLARE_DURABLE_OBJECTS_URL as c, CLOUDFLARE_R2_URL as d };
8
+ export { CLOUDFLARE_D1_URL as C, CLOUDFLARE_OBSERVABILITY_URL as a, CLOUDFLARE_WORKERS_URL as b, CLOUDFLARE_DURABLE_OBJECTS_URL as c, CLOUDFLARE_R2_URL as d };
@@ -1,6 +1,6 @@
1
1
  import { c } from 'react/compiler-runtime';
2
2
  import { useT } from './DEFAULT_LOCALE-CiX4W7Kr.js';
3
- import { h as formatCell } from './internal-rXJEAhXS.js';
3
+ import { h as formatCell } from './internal-zwBoOv24.js';
4
4
  import { jsxDEV } from 'react/jsx-dev-runtime';
5
5
 
6
6
  const CellValue = (t0) => {
@@ -0,0 +1,96 @@
1
+ const VALID_OPERATORS = /* @__PURE__ */ new Set(["contains", "eq", "gt", "gte", "lt", "lte", "ne"]);
2
+ const stringParameter = (raw) => {
3
+ if (typeof raw !== "string") {
4
+ return void 0;
5
+ }
6
+ const value = raw.trim();
7
+ return value === "" ? void 0 : value;
8
+ };
9
+ const isFilterClause = (entry) => {
10
+ if (entry === null || typeof entry !== "object") {
11
+ return false;
12
+ }
13
+ const candidate = entry;
14
+ return typeof candidate.column === "string" && typeof candidate.operator === "string" && VALID_OPERATORS.has(candidate.operator);
15
+ };
16
+ const parseFilters = (raw) => {
17
+ if (typeof raw !== "string" || raw === "") {
18
+ return [];
19
+ }
20
+ try {
21
+ const parsed = JSON.parse(raw);
22
+ return Array.isArray(parsed) ? parsed.filter(isFilterClause) : [];
23
+ } catch {
24
+ return [];
25
+ }
26
+ };
27
+ const parseOrder = (raw) => {
28
+ if (typeof raw !== "string" || raw === "") {
29
+ return void 0;
30
+ }
31
+ const separator = raw.lastIndexOf(":");
32
+ if (separator <= 0) {
33
+ return void 0;
34
+ }
35
+ const column = raw.slice(0, separator);
36
+ const direction = raw.slice(separator + 1);
37
+ if (direction !== "asc" && direction !== "desc") {
38
+ return void 0;
39
+ }
40
+ return {
41
+ column,
42
+ direction
43
+ };
44
+ };
45
+ const validateDataViewSearch = (search) => {
46
+ const validated = {};
47
+ if (search["schema"] === "global") {
48
+ validated.schema = "global";
49
+ }
50
+ const table = stringParameter(search["table"]);
51
+ if (table !== void 0) {
52
+ validated.table = table;
53
+ }
54
+ const shard = stringParameter(search["shard"]);
55
+ if (shard !== void 0) {
56
+ validated.shard = shard;
57
+ }
58
+ const searchText = stringParameter(search["search"]);
59
+ if (searchText !== void 0) {
60
+ validated.search = searchText;
61
+ }
62
+ const order = stringParameter(search["order"]);
63
+ if (order !== void 0 && parseOrder(order) !== void 0) {
64
+ validated.order = order;
65
+ }
66
+ const filters = stringParameter(search["filters"]);
67
+ if (filters !== void 0 && parseFilters(filters).length > 0) {
68
+ validated.filters = filters;
69
+ }
70
+ return validated;
71
+ };
72
+ const searchToDataView = (search) => {
73
+ const filters = parseFilters(search["filters"]);
74
+ const orderBy = parseOrder(search["order"]);
75
+ return {
76
+ filters: filters.length > 0 ? filters : void 0,
77
+ orderBy,
78
+ search: typeof search["search"] === "string" && search["search"] !== "" ? search["search"] : void 0,
79
+ shard: typeof search["shard"] === "string" && search["shard"] !== "" ? search["shard"] : void 0,
80
+ table: typeof search["table"] === "string" && search["table"] !== "" ? search["table"] : void 0,
81
+ tier: search["schema"] === "global" ? "global" : "shard"
82
+ };
83
+ };
84
+ const dataViewToSearch = (view) => {
85
+ const filters = view.filters ?? [];
86
+ return {
87
+ filters: filters.length > 0 ? JSON.stringify(filters) : void 0,
88
+ order: view.orderBy === void 0 ? void 0 : `${view.orderBy.column}:${view.orderBy.direction}`,
89
+ schema: view.tier === "global" ? "global" : void 0,
90
+ search: view.search !== void 0 && view.search !== "" ? view.search : void 0,
91
+ shard: view.shard !== void 0 && view.shard !== "" ? view.shard : void 0,
92
+ table: view.table !== void 0 && view.table !== "" ? view.table : void 0
93
+ };
94
+ };
95
+
96
+ export { dataViewToSearch as d, searchToDataView as s, validateDataViewSearch as v };
@@ -0,0 +1,114 @@
1
+ import { c } from 'react/compiler-runtime';
2
+ import { flattenHint } from '@lunora/errors';
3
+ import { b as errorHint, d as errorDocumentationUrl, e as errorMessage } from './internal-zwBoOv24.js';
4
+ import { A as Alert } from './alert-CdAET2K_.js';
5
+ import { jsxDEV } from 'react/jsx-dev-runtime';
6
+
7
+ const ErrorAlert = (t0) => {
8
+ const $ = c(26);
9
+ const {
10
+ className,
11
+ error,
12
+ testId
13
+ } = t0;
14
+ let T0;
15
+ let documentationUrl;
16
+ let t1;
17
+ let t2;
18
+ let t3;
19
+ let t4;
20
+ let t5;
21
+ if ($[0] !== className || $[1] !== error || $[2] !== testId) {
22
+ const hint = errorHint(error);
23
+ let t62;
24
+ if ($[10] !== error) {
25
+ t62 = errorDocumentationUrl(error);
26
+ $[10] = error;
27
+ $[11] = t62;
28
+ } else {
29
+ t62 = $[11];
30
+ }
31
+ documentationUrl = t62;
32
+ T0 = Alert;
33
+ t1 = className;
34
+ t2 = testId;
35
+ t3 = "destructive";
36
+ let t72;
37
+ if ($[12] !== error) {
38
+ t72 = errorMessage(error);
39
+ $[12] = error;
40
+ $[13] = t72;
41
+ } else {
42
+ t72 = $[13];
43
+ }
44
+ if ($[14] !== t72) {
45
+ t4 = /* @__PURE__ */ jsxDEV("p", {
46
+ className: "font-medium",
47
+ children: t72
48
+ }, void 0, false);
49
+ $[14] = t72;
50
+ $[15] = t4;
51
+ } else {
52
+ t4 = $[15];
53
+ }
54
+ t5 = hint === void 0 ? null : /* @__PURE__ */ jsxDEV("p", {
55
+ className: "mt-1 whitespace-pre-wrap text-xs opacity-90",
56
+ children: flattenHint(hint)
57
+ }, void 0, false);
58
+ $[0] = className;
59
+ $[1] = error;
60
+ $[2] = testId;
61
+ $[3] = T0;
62
+ $[4] = documentationUrl;
63
+ $[5] = t1;
64
+ $[6] = t2;
65
+ $[7] = t3;
66
+ $[8] = t4;
67
+ $[9] = t5;
68
+ } else {
69
+ T0 = $[3];
70
+ documentationUrl = $[4];
71
+ t1 = $[5];
72
+ t2 = $[6];
73
+ t3 = $[7];
74
+ t4 = $[8];
75
+ t5 = $[9];
76
+ }
77
+ let t6;
78
+ if ($[16] !== documentationUrl) {
79
+ t6 = documentationUrl === void 0 ? null : /* @__PURE__ */ jsxDEV("a", {
80
+ "aria-label": "View documentation for this error",
81
+ className: "mt-1 inline-block text-xs underline",
82
+ href: documentationUrl,
83
+ rel: "noreferrer",
84
+ target: "_blank",
85
+ children: "View error docs"
86
+ }, void 0, false);
87
+ $[16] = documentationUrl;
88
+ $[17] = t6;
89
+ } else {
90
+ t6 = $[17];
91
+ }
92
+ let t7;
93
+ if ($[18] !== T0 || $[19] !== t1 || $[20] !== t2 || $[21] !== t3 || $[22] !== t4 || $[23] !== t5 || $[24] !== t6) {
94
+ t7 = /* @__PURE__ */ jsxDEV(T0, {
95
+ className: t1,
96
+ testId: t2,
97
+ variant: t3,
98
+ children: [t4, t5, t6]
99
+ }, void 0, true);
100
+ $[18] = T0;
101
+ $[19] = t1;
102
+ $[20] = t2;
103
+ $[21] = t3;
104
+ $[22] = t4;
105
+ $[23] = t5;
106
+ $[24] = t6;
107
+ $[25] = t7;
108
+ } else {
109
+ t7 = $[25];
110
+ }
111
+ return t7;
112
+ };
113
+
114
+ export { ErrorAlert as E };