@declarion/react 0.31.2 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist-lib/{ActionRunner-BzaZQtiI.js → ActionRunner-UGGvGypS.js} +925 -788
  2. package/dist-lib/{DraggableChildrenTable-DILqStHQ.js → DraggableChildrenTable-CljdYXd_.js} +30 -30
  3. package/dist-lib/DynamicIcon-BWO6QtNF.js +261 -0
  4. package/dist-lib/{Grid-BIsiUwPh.js → Grid-5Y_iPqNW.js} +2 -2
  5. package/dist-lib/{LayoutRenderer-3RvIsC9M.js → LayoutRenderer-CoTMmvNW.js} +670 -670
  6. package/dist-lib/{MarkdownRenderer-CaHhWrfm.js → MarkdownRenderer-unbncYEV.js} +1 -1
  7. package/dist-lib/RefreshControl-oeKhCjEC.js +837 -0
  8. package/dist-lib/SmartDetailPage.impl-Caxd97q6.js +1771 -0
  9. package/dist-lib/{SmartRecordListPage.impl-B1iws8yf.js → SmartRecordListPage.impl-BF_ieDc2.js} +253 -253
  10. package/dist-lib/api/data.d.ts +4 -4
  11. package/dist-lib/api/params.d.ts +1 -1
  12. package/dist-lib/components/layout/Rail.d.ts +5 -5
  13. package/dist-lib/components/layout/TopBar.d.ts +3 -1
  14. package/dist-lib/components/pages/DocumentsMenu.d.ts +22 -0
  15. package/dist-lib/components/pages/RecordDocumentsPanel.d.ts +42 -0
  16. package/dist-lib/components/pages/auth/AuthShell.d.ts +1 -1
  17. package/dist-lib/components/pages/list/ListHeader.d.ts +1 -11
  18. package/dist-lib/components/primitives/BrandLogo.d.ts +1 -1
  19. package/dist-lib/components/primitives/Icons.d.ts +1 -0
  20. package/dist-lib/components/primitives/Tooltip.d.ts +30 -0
  21. package/dist-lib/components/primitives/index.d.ts +2 -0
  22. package/dist-lib/components/shared/ActionResultDialog.d.ts +4 -0
  23. package/dist-lib/components/shared/ActionRunner.d.ts +1 -0
  24. package/dist-lib/components/shared/ObjectActionBar.d.ts +29 -0
  25. package/dist-lib/components/shared/PageHeader.d.ts +1 -1
  26. package/dist-lib/components/shared/RecordHeader.d.ts +3 -1
  27. package/dist-lib/components/shared/RefreshControl.d.ts +6 -0
  28. package/dist-lib/components/shared/ResponsiveActionBar.d.ts +9 -1
  29. package/dist-lib/hooks/useBranding.d.ts +8 -0
  30. package/dist-lib/hooks/useBrandingChrome.d.ts +6 -0
  31. package/dist-lib/hooks/useLiveObject.d.ts +9 -0
  32. package/dist-lib/hooks/useMutations.d.ts +3 -3
  33. package/dist-lib/hooks/useObject.d.ts +10 -0
  34. package/dist-lib/hooks/usePageStateRuntime.d.ts +1 -1
  35. package/dist-lib/hooks/useParams.d.ts +10 -1
  36. package/dist-lib/icons.js +1 -1
  37. package/dist-lib/index.d.ts +11 -5
  38. package/dist-lib/index.js +2457 -2335
  39. package/dist-lib/lib/actions.d.ts +6 -2
  40. package/dist-lib/lib/branding.d.ts +10 -1
  41. package/dist-lib/lib/document-templates.d.ts +12 -0
  42. package/dist-lib/lib/download.d.ts +20 -0
  43. package/dist-lib/lib/record-documents-key.d.ts +1 -0
  44. package/dist-lib/{registry-2KliNTHB.js → registry-DnPK3Msj.js} +1658 -1607
  45. package/dist-lib/testing.d.ts +5 -3
  46. package/dist-lib/testing.js +37 -33
  47. package/dist-lib/types/api.d.ts +62 -3
  48. package/dist-lib/types/schema.d.ts +18 -16
  49. package/dist-lib/{useProperties-Co3RdtuT.js → useProperties-CgRhBh0k.js} +70 -70
  50. package/dist-lib/{value-BooGwUik.js → value-GmL5BVFm.js} +29 -29
  51. package/package.json +1 -1
  52. package/dist-lib/DynamicIcon-DCRdxxZ7.js +0 -260
  53. package/dist-lib/SmartDetailPage.impl--EO-9fos.js +0 -1494
  54. package/dist-lib/hooks/useEntityItem.d.ts +0 -10
  55. package/dist-lib/peekDraftStore-yyzMbaiI.js +0 -468
@@ -1,4 +1,4 @@
1
- import { s as e, t } from "./DynamicIcon-DCRdxxZ7.js";
1
+ import { s as e, t } from "./DynamicIcon-BWO6QtNF.js";
2
2
  import { Suspense as n, createContext as r, forwardRef as i, lazy as a, useCallback as o, useContext as s, useEffect as c, useLayoutEffect as l, useMemo as u, useRef as d, useState as f } from "react";
3
3
  import { useLocation as p, useNavigate as m } from "react-router-dom";
4
4
  import { useQuery as h } from "@tanstack/react-query";
@@ -1231,13 +1231,9 @@ function Re(e, t) {
1231
1231
  if (i != null) return typeof i == "object" && !Array.isArray(i) ? I(i) || void 0 : F(i);
1232
1232
  }
1233
1233
  function L(e, t, n) {
1234
- let r = e[Le];
1235
- if (typeof r == "string" && r !== "") return r;
1236
- if (t) {
1237
- let r = e[t];
1238
- if (r != null) return typeof r == "object" && !Array.isArray(r) ? I(r) || n : F(r);
1239
- }
1240
- return n;
1234
+ if (!t) return n;
1235
+ let r = e[t];
1236
+ return r == null ? n : typeof r == "object" && !Array.isArray(r) ? I(r) || n : F(r);
1241
1237
  }
1242
1238
  function ze(e) {
1243
1239
  let t = e.replace(/\/+$/, "").split("/").map((e) => e.startsWith(":") ? "[^/]+" : e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
@@ -2061,8 +2057,122 @@ function J() {
2061
2057
  });
2062
2058
  }
2063
2059
  //#endregion
2060
+ //#region src/api/data.ts
2061
+ function Bn(e, t) {
2062
+ let n = new URL(`/api/data/${e}`, window.location.origin);
2063
+ if (t.page && n.searchParams.set("page", String(t.page)), t.per_page && n.searchParams.set("per_page", String(t.per_page)), t.sort && n.searchParams.set("sort", t.sort), t.search && n.searchParams.set("search", t.search), t.filters && t.filters.length > 0 && n.searchParams.set("filters", JSON.stringify(t.filters)), t.include_deleted && n.searchParams.set("include_deleted", "true"), t.expand) for (let e of t.expand) n.searchParams.append("expand", e);
2064
+ return t.select && t.select.length > 0 && n.searchParams.set("select", t.select.join(",")), t.screen && n.searchParams.set("screen", t.screen), t.preview && n.searchParams.set("preview", "true"), t.count && n.searchParams.set("count", t.count), n.pathname + n.search;
2065
+ }
2066
+ async function Vn(e, t = {}, n = {}) {
2067
+ if (er) {
2068
+ let n = er(e, t);
2069
+ if (n !== void 0) return n;
2070
+ }
2071
+ return K(Bn(e, t), { signal: n.signal });
2072
+ }
2073
+ async function Hn(e, t) {
2074
+ if (tr) {
2075
+ let n = tr(e, t);
2076
+ if (n !== void 0) return n;
2077
+ }
2078
+ let n = new URLSearchParams();
2079
+ if (typeof t == "string") n.set("id", t);
2080
+ else for (let [e, r] of Object.entries(t)) n.set(e, r);
2081
+ return K(`/api/data/${e}?${n.toString()}`);
2082
+ }
2083
+ async function Un(e, t) {
2084
+ return { data: ((await ir(`${e}.__create`, {
2085
+ entity: e,
2086
+ fields: t
2087
+ })).result?.rows ?? [])[0] };
2088
+ }
2089
+ async function Wn(e, t, n) {
2090
+ let r = typeof t == "string" ? t : Kn(t);
2091
+ return { data: ((await ir(`${e}.__update`, {
2092
+ object_ids: [r],
2093
+ entity: e,
2094
+ fields: n
2095
+ })).result?.rows ?? [])[0] };
2096
+ }
2097
+ async function Gn(e, t) {
2098
+ let n = typeof t == "string" ? t : Kn(t);
2099
+ await ir(`${e}.__delete`, {
2100
+ object_ids: [n],
2101
+ entity: e
2102
+ });
2103
+ }
2104
+ function Kn(e) {
2105
+ let t = Object.values(e);
2106
+ return t.length === 1 ? t[0] : t.join("");
2107
+ }
2108
+ async function qn(e, t) {
2109
+ let n = typeof t == "string" ? t : Kn(t);
2110
+ await ir(`${e}.__restore`, {
2111
+ object_ids: [n],
2112
+ entity: e
2113
+ });
2114
+ }
2115
+ async function Jn(e, t) {
2116
+ let n = await yn(`/api/data/${e}/export`, {
2117
+ method: "POST",
2118
+ body: JSON.stringify(t)
2119
+ });
2120
+ return {
2121
+ blob: n.blob,
2122
+ filename: n.filename
2123
+ };
2124
+ }
2125
+ var Yn = class extends Error {
2126
+ status;
2127
+ response;
2128
+ constructor(e, t) {
2129
+ let n = t.errors && t.errors[0]?.error;
2130
+ super(n || "Action failed"), this.name = "ActionBatchError", this.status = e, this.response = t;
2131
+ }
2132
+ };
2133
+ function Xn(e) {
2134
+ if (!e || typeof e != "object") return !1;
2135
+ let t = e;
2136
+ return typeof t.status == "string" && Array.isArray(t.errors);
2137
+ }
2138
+ function Zn(e, t) {
2139
+ let n = { ...e ?? {} };
2140
+ if ("object_ids" in n) throw Error("handler param \"object_ids\" collides with reserved key");
2141
+ if ("_ids" in n) throw Error("handler param \"_ids\" is a removed legacy key; use object_ids");
2142
+ return t !== void 0 && (n.object_ids = t), n;
2143
+ }
2144
+ var Qn = null;
2145
+ function $n(e) {
2146
+ let t = Qn;
2147
+ return Qn = e, t;
2148
+ }
2149
+ var er = null, tr = null;
2150
+ function nr(e) {
2151
+ let t = er;
2152
+ return er = e, t;
2153
+ }
2154
+ function rr(e) {
2155
+ let t = tr;
2156
+ return tr = e, t;
2157
+ }
2158
+ async function ir(e, t) {
2159
+ if (Qn) return Qn(e, t);
2160
+ try {
2161
+ return await K(`/api/actions/${e}`, {
2162
+ method: "POST",
2163
+ body: JSON.stringify(t)
2164
+ });
2165
+ } catch (e) {
2166
+ throw e instanceof z && Xn(e.raw) ? new Yn(e.status, e.raw) : e;
2167
+ }
2168
+ }
2169
+ async function ar(e, t) {
2170
+ let n = new URLSearchParams();
2171
+ return n.set("ids", t.join(",")), K(`/api/associations/${e}?${n.toString()}`);
2172
+ }
2173
+ //#endregion
2064
2174
  //#region src/stores/appearance.ts
2065
- var Bn = {
2175
+ var or = {
2066
2176
  theme: "light",
2067
2177
  accent: "violet",
2068
2178
  density: "compact",
@@ -2075,26 +2185,26 @@ var Bn = {
2075
2185
  aiSurface: "both",
2076
2186
  faviconSource: "google",
2077
2187
  toastPosition: "bottom-right"
2078
- }, Vn = ["light", "dark"], Hn = [
2188
+ }, sr = ["light", "dark"], cr = [
2079
2189
  "violet",
2080
2190
  "blue",
2081
2191
  "teal",
2082
2192
  "amber",
2083
2193
  "rose"
2084
- ], Un = [
2194
+ ], lr = [
2085
2195
  "compact",
2086
2196
  "comfortable",
2087
2197
  "cozy"
2088
- ], Wn = ["wide", "collapsed"], Gn = ["top", "bottom"], Kn = [
2198
+ ], ur = ["wide", "collapsed"], dr = ["top", "bottom"], fr = [
2089
2199
  "command",
2090
2200
  "panel",
2091
2201
  "both",
2092
2202
  "off"
2093
- ], qn = [
2203
+ ], pr = [
2094
2204
  "google",
2095
2205
  "direct",
2096
2206
  "none"
2097
- ], Jn = [
2207
+ ], mr = [
2098
2208
  "top-left",
2099
2209
  "top-center",
2100
2210
  "top-right",
@@ -2105,45 +2215,45 @@ var Bn = {
2105
2215
  function Y(e, t) {
2106
2216
  return typeof t == "string" && e.includes(t) ? t : void 0;
2107
2217
  }
2108
- function Yn(e) {
2109
- let t = {}, n = Y(Vn, e.theme);
2218
+ function hr(e) {
2219
+ let t = {}, n = Y(sr, e.theme);
2110
2220
  n && (t.theme = n);
2111
- let r = Y(Hn, e.accent);
2221
+ let r = Y(cr, e.accent);
2112
2222
  r && (t.accent = r);
2113
- let i = Y(Un, e.density);
2223
+ let i = Y(lr, e.density);
2114
2224
  i && (t.density = i);
2115
- let a = Y(Wn, e.sidebar);
2225
+ let a = Y(ur, e.sidebar);
2116
2226
  a && (t.sidebar = a);
2117
- let o = Y(Gn, e.tabsPosition);
2227
+ let o = Y(dr, e.tabsPosition);
2118
2228
  o && (t.tabsPosition = o);
2119
- let s = Y(Kn, e.aiSurface);
2229
+ let s = Y(fr, e.aiSurface);
2120
2230
  s && (t.aiSurface = s);
2121
- let c = Y(qn, e.faviconSource);
2231
+ let c = Y(pr, e.faviconSource);
2122
2232
  c && (t.faviconSource = c);
2123
- let l = Y(Jn, e.toastPosition);
2233
+ let l = Y(mr, e.toastPosition);
2124
2234
  return l && (t.toastPosition = l), typeof e.tabsMaxOpen == "number" && e.tabsMaxOpen > 0 && (t.tabsMaxOpen = e.tabsMaxOpen), typeof e.radius == "number" && e.radius >= 0 && e.radius <= 32 && (t.radius = e.radius), typeof e.zebra == "boolean" && (t.zebra = e.zebra), typeof e.tabsPersist == "boolean" && (t.tabsPersist = e.tabsPersist), t;
2125
2235
  }
2126
- var Xn = "declarion-appearance";
2127
- function Zn() {
2236
+ var gr = "declarion-appearance";
2237
+ function _r() {
2128
2238
  if (typeof window > "u") return null;
2129
2239
  try {
2130
- let e = localStorage.getItem(Xn);
2240
+ let e = localStorage.getItem(gr);
2131
2241
  return e ? JSON.parse(e) : null;
2132
2242
  } catch {
2133
2243
  return null;
2134
2244
  }
2135
2245
  }
2136
- function Qn(e) {
2246
+ function vr(e) {
2137
2247
  if (!(typeof window > "u")) try {
2138
- localStorage.setItem(Xn, JSON.stringify(e));
2248
+ localStorage.setItem(gr, JSON.stringify(e));
2139
2249
  } catch {}
2140
2250
  }
2141
- function $n(e) {
2251
+ function yr(e) {
2142
2252
  if (typeof document > "u") return;
2143
2253
  let t = document.documentElement;
2144
2254
  t.dataset.theme = e.theme, t.dataset.accent = e.accent, t.dataset.density = e.density, t.dataset.sidebar = e.sidebar, t.dataset.tabbar = e.tabsPosition, t.dataset.zebra = e.zebra ? "on" : "off", t.dataset.ai = e.aiSurface, t.style.setProperty("--radius-md", `${e.radius}px`), t.style.setProperty("--radius-lg", `${e.radius + 3}px`);
2145
2255
  }
2146
- var er = {
2256
+ var br = {
2147
2257
  ui_theme: "theme",
2148
2258
  ui_accent: "accent",
2149
2259
  ui_density: "density",
@@ -2156,49 +2266,49 @@ var er = {
2156
2266
  ui_ai_surface: "aiSurface",
2157
2267
  ui_favicon_source: "faviconSource",
2158
2268
  ui_toast_position: "toastPosition"
2159
- }, tr = Zn(), nr = tr ? new Set(Object.keys(tr)) : /* @__PURE__ */ new Set(), rr = {
2160
- ...Bn,
2161
- ...tr ? Yn(tr) : {}
2269
+ }, xr = _r(), Sr = xr ? new Set(Object.keys(xr)) : /* @__PURE__ */ new Set(), Cr = {
2270
+ ...or,
2271
+ ...xr ? hr(xr) : {}
2162
2272
  };
2163
- typeof window < "u" && $n(rr);
2164
- var ir = x((e, t) => ({
2165
- ...rr,
2273
+ typeof window < "u" && yr(Cr);
2274
+ var wr = x((e, t) => ({
2275
+ ...Cr,
2166
2276
  set: (n, r) => {
2167
- let i = Yn({ [n]: r });
2277
+ let i = hr({ [n]: r });
2168
2278
  if (i[n] === void 0) return;
2169
2279
  let a = {
2170
2280
  ...t(),
2171
2281
  ...i
2172
2282
  };
2173
- $n(a), Qn(a), nr.add(n), e(i);
2283
+ yr(a), vr(a), Sr.add(n), e(i);
2174
2284
  },
2175
2285
  setMany: (n) => {
2176
- let r = Yn(n);
2286
+ let r = hr(n);
2177
2287
  if (!Object.keys(r).length) return;
2178
2288
  let i = {
2179
2289
  ...t(),
2180
2290
  ...r
2181
2291
  };
2182
- $n(i), Qn(i);
2183
- for (let e of Object.keys(r)) nr.add(e);
2292
+ yr(i), vr(i);
2293
+ for (let e of Object.keys(r)) Sr.add(e);
2184
2294
  e(r);
2185
2295
  },
2186
2296
  hydrateFromParams: (t) => {
2187
2297
  let n = {};
2188
- for (let [e, r] of Object.entries(er)) nr.has(r) || t[e] !== void 0 && (n[r] = t[e]);
2189
- let r = Yn(n);
2190
- Object.keys(r).length && ($n({
2191
- ...ir.getState(),
2298
+ for (let [e, r] of Object.entries(br)) Sr.has(r) || t[e] !== void 0 && (n[r] = t[e]);
2299
+ let r = hr(n);
2300
+ Object.keys(r).length && (yr({
2301
+ ...wr.getState(),
2192
2302
  ...r
2193
2303
  }), e(r));
2194
2304
  }
2195
- })), ar = "self", or = "embed", sr = "parent_origin", cr = "theme", lr = [
2196
- or,
2197
- sr,
2198
- cr,
2305
+ })), Tr = "self", Er = "embed", Dr = "parent_origin", Or = "theme", kr = [
2306
+ Er,
2307
+ Dr,
2308
+ Or,
2199
2309
  "nav"
2200
2310
  ];
2201
- function ur(e) {
2311
+ function Ar(e) {
2202
2312
  if (!e) return null;
2203
2313
  let t;
2204
2314
  try {
@@ -2208,22 +2318,22 @@ function ur(e) {
2208
2318
  }
2209
2319
  return t.origin === "null" ? null : e === t.origin ? t.origin : null;
2210
2320
  }
2211
- function dr(e) {
2321
+ function jr(e) {
2212
2322
  return e === "light" || e === "dark" ? e : null;
2213
2323
  }
2214
- function fr(e) {
2215
- return e === "delegated" ? "delegated" : ar;
2324
+ function Mr(e) {
2325
+ return e === "delegated" ? "delegated" : Tr;
2216
2326
  }
2217
- function pr(e) {
2327
+ function Nr(e) {
2218
2328
  let t = typeof e == "string" ? new URLSearchParams(e) : e;
2219
2329
  return {
2220
- enabled: t.get(or) === "1",
2221
- parentOrigin: ur(t.get(sr)),
2222
- theme: dr(t.get(cr)),
2223
- navigationMode: fr(t.get("nav"))
2330
+ enabled: t.get(Er) === "1",
2331
+ parentOrigin: Ar(t.get(Dr)),
2332
+ theme: jr(t.get(Or)),
2333
+ navigationMode: Mr(t.get("nav"))
2224
2334
  };
2225
2335
  }
2226
- function mr(e, t) {
2336
+ function Pr(e, t) {
2227
2337
  if (!t.enabled) return e;
2228
2338
  let n = /^[a-z][a-z0-9+.-]*:/i.test(e), r;
2229
2339
  try {
@@ -2232,44 +2342,44 @@ function mr(e, t) {
2232
2342
  return e;
2233
2343
  }
2234
2344
  let i = r.searchParams;
2235
- return t.enabled && i.set(or, "1"), t.parentOrigin && i.set(sr, t.parentOrigin), t.theme && i.set(cr, t.theme), i.set("nav", t.navigationMode), n ? r.toString() : `${r.pathname}${r.search}${r.hash}`;
2345
+ return t.enabled && i.set(Er, "1"), t.parentOrigin && i.set(Dr, t.parentOrigin), t.theme && i.set(Or, t.theme), i.set("nav", t.navigationMode), n ? r.toString() : `${r.pathname}${r.search}${r.hash}`;
2236
2346
  }
2237
2347
  //#endregion
2238
2348
  //#region src/embed/EmbedContext.tsx
2239
- var hr = r({
2349
+ var Fr = r({
2240
2350
  enabled: !1,
2241
2351
  parentOrigin: null,
2242
2352
  theme: null,
2243
2353
  navigationMode: "self",
2244
2354
  appendEmbedParams: (e) => e
2245
2355
  });
2246
- function gr(e) {
2356
+ function Ir(e) {
2247
2357
  return {
2248
2358
  enabled: e.enabled,
2249
2359
  parentOrigin: e.parentOrigin,
2250
2360
  theme: e.theme,
2251
2361
  navigationMode: e.navigationMode,
2252
- appendEmbedParams: (t) => mr(t, e)
2362
+ appendEmbedParams: (t) => Pr(t, e)
2253
2363
  };
2254
2364
  }
2255
- function _r({ children: e, query: t }) {
2256
- let n = u(() => gr(pr(t ?? (typeof window < "u" ? window.location.search : ""))), [t]);
2257
- return /* @__PURE__ */ v(hr.Provider, {
2365
+ function Lr({ children: e, query: t }) {
2366
+ let n = u(() => Ir(Nr(t ?? (typeof window < "u" ? window.location.search : ""))), [t]);
2367
+ return /* @__PURE__ */ v(Fr.Provider, {
2258
2368
  value: n,
2259
2369
  children: e
2260
2370
  });
2261
2371
  }
2262
- function vr() {
2263
- return s(hr);
2372
+ function Rr() {
2373
+ return s(Fr);
2264
2374
  }
2265
2375
  //#endregion
2266
2376
  //#region src/embed/embed-dirty.ts
2267
- var yr = x((e) => ({
2377
+ var zr = x((e) => ({
2268
2378
  isDirty: !1,
2269
2379
  setDirty: (t) => e((e) => e.isDirty === t ? e : { isDirty: t })
2270
2380
  }));
2271
- function br(e, t) {
2272
- let n = yr((e) => e.setDirty);
2381
+ function Br(e, t) {
2382
+ let n = zr((e) => e.setDirty);
2273
2383
  c(() => {
2274
2384
  t && n(e);
2275
2385
  }, [
@@ -2282,7 +2392,7 @@ function br(e, t) {
2282
2392
  }
2283
2393
  //#endregion
2284
2394
  //#region src/embed/embed-nav-guard.ts
2285
- var xr = x((e, t) => ({
2395
+ var Vr = x((e, t) => ({
2286
2396
  pendingNavigation: null,
2287
2397
  requestNavigation: (t) => e({ pendingNavigation: t }),
2288
2398
  confirmNavigation: () => {
@@ -2293,18 +2403,18 @@ var xr = x((e, t) => ({
2293
2403
  }));
2294
2404
  //#endregion
2295
2405
  //#region src/embed/screen-location.ts
2296
- function Sr(e) {
2406
+ function Hr(e) {
2297
2407
  let t = e.replace(/\/+$/, "").split("/").map((e) => e.startsWith(":") ? "[^/]+" : e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
2298
2408
  return RegExp("^" + t.join("/") + "$");
2299
2409
  }
2300
- function Cr(e, t) {
2410
+ function Ur(e, t) {
2301
2411
  let n = e.replace(/\/+$/, "") || "/";
2302
2412
  if (!t) return {
2303
2413
  matched: !1,
2304
2414
  payload: { route: e }
2305
2415
  };
2306
2416
  let r, i, a, o;
2307
- for (let [e, s] of Object.entries(t)) if (s.route && Sr(s.route).test(n)) if (s.route.includes("/:")) a || (a = s, o = e);
2417
+ for (let [e, s] of Object.entries(t)) if (s.route && Hr(s.route).test(n)) if (s.route.includes("/:")) a || (a = s, o = e);
2308
2418
  else {
2309
2419
  r = s, i = e;
2310
2420
  break;
@@ -2329,34 +2439,34 @@ function Cr(e, t) {
2329
2439
  payload: l
2330
2440
  };
2331
2441
  }
2332
- function wr(e, t) {
2333
- return Cr(e, t).payload;
2442
+ function Wr(e, t) {
2443
+ return Ur(e, t).payload;
2334
2444
  }
2335
2445
  //#endregion
2336
2446
  //#region src/embed/useEmbedNavigate.ts
2337
- function Tr(e) {
2447
+ function Gr(e) {
2338
2448
  let t = e.search(/[?#]/);
2339
2449
  return t === -1 ? e : e.slice(0, t);
2340
2450
  }
2341
- function Er() {
2342
- let e = m(), t = p(), n = vr(), { data: r } = J();
2451
+ function Kr() {
2452
+ let e = m(), t = p(), n = Rr(), { data: r } = J();
2343
2453
  return o((i, a) => {
2344
2454
  if (!n.enabled) return e(i, a), !0;
2345
- let o = r?.screens, s = Cr(Tr(i), o), c = yr.getState().isDirty && Tr(i) !== t.pathname;
2455
+ let o = r?.screens, s = Ur(Gr(i), o), c = zr.getState().isDirty && Gr(i) !== t.pathname;
2346
2456
  if (o && !s.matched) return gt(n.parentOrigin, ht.navigationFailed, {
2347
- route: Tr(i),
2457
+ route: Gr(i),
2348
2458
  reason: "unresolved"
2349
2459
  }), !1;
2350
2460
  if (n.navigationMode === "delegated") {
2351
2461
  let e = () => {
2352
2462
  gt(n.parentOrigin, ht.navigationRequested, s.payload);
2353
2463
  };
2354
- return c ? (xr.getState().requestNavigation(e), !1) : (e(), !1);
2464
+ return c ? (Vr.getState().requestNavigation(e), !1) : (e(), !1);
2355
2465
  }
2356
2466
  let l = () => {
2357
2467
  e(n.appendEmbedParams(i), a);
2358
2468
  };
2359
- return c ? (xr.getState().requestNavigation(l), !1) : (l(), !0);
2469
+ return c ? (Vr.getState().requestNavigation(l), !1) : (l(), !0);
2360
2470
  }, [
2361
2471
  e,
2362
2472
  t.pathname,
@@ -2364,27 +2474,27 @@ function Er() {
2364
2474
  r?.screens
2365
2475
  ]);
2366
2476
  }
2367
- function Dr() {
2368
- let e = Er();
2477
+ function qr() {
2478
+ let e = Kr();
2369
2479
  return o((t, n) => {
2370
2480
  e(t, n);
2371
2481
  }, [e]);
2372
2482
  }
2373
- function Or() {
2483
+ function Jr() {
2374
2484
  let e = m();
2375
2485
  return o(() => {
2376
2486
  let t = () => {
2377
2487
  e(-1);
2378
2488
  };
2379
- if (yr.getState().isDirty) {
2380
- xr.getState().requestNavigation(t);
2489
+ if (zr.getState().isDirty) {
2490
+ Vr.getState().requestNavigation(t);
2381
2491
  return;
2382
2492
  }
2383
2493
  t();
2384
2494
  }, [e]);
2385
2495
  }
2386
- function kr() {
2387
- let e = vr();
2496
+ function Yr() {
2497
+ let e = Rr();
2388
2498
  return o((t, n) => {
2389
2499
  e.enabled && gt(e.parentOrigin, ht.navigationFailed, {
2390
2500
  route: t,
@@ -2394,7 +2504,7 @@ function kr() {
2394
2504
  }
2395
2505
  //#endregion
2396
2506
  //#region src/components/shared/toast/DeclarionToast.tsx
2397
- var Ar = {
2507
+ var Xr = {
2398
2508
  success: {
2399
2509
  tone: "success",
2400
2510
  defaultTitle: "Success"
@@ -2415,8 +2525,8 @@ var Ar = {
2415
2525
  tone: "info",
2416
2526
  defaultTitle: "Working…"
2417
2527
  }
2418
- }, jr = 200;
2419
- function Mr({ type: t }) {
2528
+ }, Zr = 200;
2529
+ function Qr({ type: t }) {
2420
2530
  let n = { display: "flex" };
2421
2531
  return t === "loading" ? /* @__PURE__ */ v("span", {
2422
2532
  style: {
@@ -2429,9 +2539,9 @@ function Mr({ type: t }) {
2429
2539
  children: /* @__PURE__ */ v(t === "success" ? e.check : t === "error" ? e.x : t === "warning" ? e.warning : e.info, { size: 11 })
2430
2540
  });
2431
2541
  }
2432
- function Nr({ model: t, onClose: n }) {
2433
- let r = Ar[t.type] ?? Ar.info, i = r.tone, [a, s] = f(!1), [l, u] = f(!1), [p, m] = f(!1), [h, g] = f(!1), [_, b] = f(1), x = d(t.duration), S = d(!1), C = !t.sticky && t.duration > 0, w = o(() => {
2434
- S.current || (S.current = !0, g(!0), window.setTimeout(n, jr));
2542
+ function $r({ model: t, onClose: n }) {
2543
+ let r = Xr[t.type] ?? Xr.info, i = r.tone, [a, s] = f(!1), [l, u] = f(!1), [p, m] = f(!1), [h, g] = f(!1), [_, b] = f(1), x = d(t.duration), S = d(!1), C = !t.sticky && t.duration > 0, w = o(() => {
2544
+ S.current || (S.current = !0, g(!0), window.setTimeout(n, Zr));
2435
2545
  }, [n]);
2436
2546
  c(() => {
2437
2547
  x.current = t.duration, b(1);
@@ -2480,7 +2590,7 @@ function Nr({ model: t, onClose: n }) {
2480
2590
  boxShadow: "var(--shadow-toast)",
2481
2591
  overflow: "hidden",
2482
2592
  position: "relative",
2483
- animation: h ? `dz-toast-out ${jr}ms ease-in forwards` : "dz-toast-in 0.24s cubic-bezier(0.16, 1, 0.3, 1)"
2593
+ animation: h ? `dz-toast-out ${Zr}ms ease-in forwards` : "dz-toast-in 0.24s cubic-bezier(0.16, 1, 0.3, 1)"
2484
2594
  },
2485
2595
  children: [/* @__PURE__ */ y("div", {
2486
2596
  style: {
@@ -2502,7 +2612,7 @@ function Nr({ model: t, onClose: n }) {
2502
2612
  justifyContent: "center",
2503
2613
  color: E("")
2504
2614
  },
2505
- children: /* @__PURE__ */ v(Mr, { type: t.type })
2615
+ children: /* @__PURE__ */ v(Qr, { type: t.type })
2506
2616
  }),
2507
2617
  /* @__PURE__ */ y("div", {
2508
2618
  style: {
@@ -2695,28 +2805,28 @@ function Nr({ model: t, onClose: n }) {
2695
2805
  }
2696
2806
  //#endregion
2697
2807
  //#region src/lib/toast.tsx
2698
- var Pr = {
2808
+ var ei = {
2699
2809
  success: 4e3,
2700
2810
  info: 6e3,
2701
2811
  warning: 8e3,
2702
2812
  error: 0,
2703
2813
  loading: 0
2704
- }, X = /* @__PURE__ */ new Map(), Fr = /* @__PURE__ */ new Map(), Ir = 0, Lr = () => `dz-${++Ir}`;
2705
- function Rr(e) {
2706
- g.custom(() => /* @__PURE__ */ v(Nr, {
2814
+ }, X = /* @__PURE__ */ new Map(), ti = /* @__PURE__ */ new Map(), ni = 0, ri = () => `dz-${++ni}`;
2815
+ function ii(e) {
2816
+ g.custom(() => /* @__PURE__ */ v($r, {
2707
2817
  model: e,
2708
2818
  onClose: () => g.dismiss(e.id)
2709
2819
  }), {
2710
2820
  id: e.id,
2711
2821
  duration: Infinity,
2712
2822
  onDismiss: () => {
2713
- X.delete(String(e.id)), e.group && Fr.get(e.group) === e.id && Fr.delete(e.group);
2823
+ X.delete(String(e.id)), e.group && ti.get(e.group) === e.id && ti.delete(e.group);
2714
2824
  }
2715
2825
  });
2716
2826
  }
2717
- function zr(e, t, n, r = {}) {
2827
+ function ai(e, t, n, r = {}) {
2718
2828
  if (r.group) {
2719
- let e = Fr.get(r.group);
2829
+ let e = ti.get(r.group);
2720
2830
  if (e && X.has(e)) {
2721
2831
  let r = X.get(e), i = {
2722
2832
  ...r,
@@ -2725,10 +2835,10 @@ function zr(e, t, n, r = {}) {
2725
2835
  count: (r.count ?? 1) + 1,
2726
2836
  createdAt: Date.now()
2727
2837
  };
2728
- return X.set(e, i), Rr(i), e;
2838
+ return X.set(e, i), ii(i), e;
2729
2839
  }
2730
2840
  }
2731
- let i = r.id ?? Lr(), a = r.duration ?? Pr[e], o = {
2841
+ let i = r.id ?? ri(), a = r.duration ?? ei[e], o = {
2732
2842
  id: i,
2733
2843
  type: e,
2734
2844
  title: t,
@@ -2742,12 +2852,12 @@ function zr(e, t, n, r = {}) {
2742
2852
  createdAt: Date.now(),
2743
2853
  group: r.group
2744
2854
  };
2745
- return X.set(i, o), r.group && Fr.set(r.group, i), Rr(o), i;
2855
+ return X.set(i, o), r.group && ti.set(r.group, i), ii(o), i;
2746
2856
  }
2747
- function Br(e, t) {
2857
+ function oi(e, t) {
2748
2858
  let n = X.get(e);
2749
2859
  if (!n) return;
2750
- let r = t.type ?? n.type, i = t.duration ?? (t.type ? Pr[r] : n.duration), a = {
2860
+ let r = t.type ?? n.type, i = t.duration ?? (t.type ? ei[r] : n.duration), a = {
2751
2861
  ...n,
2752
2862
  ...t,
2753
2863
  type: r,
@@ -2755,150 +2865,91 @@ function Br(e, t) {
2755
2865
  sticky: t.sticky ?? i === 0,
2756
2866
  createdAt: Date.now()
2757
2867
  };
2758
- X.set(e, a), Rr(a);
2868
+ X.set(e, a), ii(a);
2759
2869
  }
2760
2870
  var Z = {
2761
- success: (e, t, n) => zr("success", e, t, n),
2762
- info: (e, t, n) => zr("info", e, t, n),
2763
- warning: (e, t, n) => zr("warning", e, t, n),
2764
- error: (e, t, n) => zr("error", e, t, n),
2765
- loading: (e, t, n) => zr("loading", e, t, n),
2766
- update: Br,
2871
+ success: (e, t, n) => ai("success", e, t, n),
2872
+ info: (e, t, n) => ai("info", e, t, n),
2873
+ warning: (e, t, n) => ai("warning", e, t, n),
2874
+ error: (e, t, n) => ai("error", e, t, n),
2875
+ loading: (e, t, n) => ai("loading", e, t, n),
2876
+ update: oi,
2767
2877
  dismiss: (e) => g.dismiss(e),
2768
2878
  dismissAll: () => g.dismiss()
2769
- };
2770
- //#endregion
2771
- //#region src/api/data.ts
2772
- function Vr(e, t) {
2773
- let n = new URL(`/api/data/${e}`, window.location.origin);
2774
- if (t.page && n.searchParams.set("page", String(t.page)), t.per_page && n.searchParams.set("per_page", String(t.per_page)), t.sort && n.searchParams.set("sort", t.sort), t.search && n.searchParams.set("search", t.search), t.filters && t.filters.length > 0 && n.searchParams.set("filters", JSON.stringify(t.filters)), t.include_deleted && n.searchParams.set("include_deleted", "true"), t.expand) for (let e of t.expand) n.searchParams.append("expand", e);
2775
- return t.select && t.select.length > 0 && n.searchParams.set("select", t.select.join(",")), t.screen && n.searchParams.set("screen", t.screen), t.preview && n.searchParams.set("preview", "true"), t.count && n.searchParams.set("count", t.count), n.pathname + n.search;
2776
- }
2777
- async function Hr(e, t = {}, n = {}) {
2778
- if (ti) {
2779
- let n = ti(e, t);
2780
- if (n !== void 0) return n;
2781
- }
2782
- return K(Vr(e, t), { signal: n.signal });
2783
- }
2784
- async function Ur(e, t) {
2785
- if (ni) {
2786
- let n = ni(e, t);
2787
- if (n !== void 0) return n;
2788
- }
2789
- let n = new URLSearchParams();
2790
- if (typeof t == "string") n.set("id", t);
2791
- else for (let [e, r] of Object.entries(t)) n.set(e, r);
2792
- return K(`/api/data/${e}?${n.toString()}`);
2793
- }
2794
- async function Wr(e, t) {
2795
- return { data: ((await ai(`${e}.__create`, {
2796
- entity: e,
2797
- fields: t
2798
- })).result?.rows ?? [])[0] };
2799
- }
2800
- async function Gr(e, t, n) {
2801
- let r = typeof t == "string" ? t : qr(t);
2802
- return { data: ((await ai(`${e}.__update`, {
2803
- object_ids: [r],
2804
- entity: e,
2805
- fields: n
2806
- })).result?.rows ?? [])[0] };
2807
- }
2808
- async function Kr(e, t) {
2809
- let n = typeof t == "string" ? t : qr(t);
2810
- await ai(`${e}.__delete`, {
2811
- object_ids: [n],
2812
- entity: e
2813
- });
2814
- }
2815
- function qr(e) {
2816
- let t = Object.values(e);
2817
- return t.length === 1 ? t[0] : t.join("");
2879
+ }, si = a(() => import("./MarkdownRenderer-unbncYEV.js").then((e) => ({ default: e.MarkdownRenderer })));
2880
+ function ci() {
2881
+ return /* @__PURE__ */ v("div", { className: "h-4 w-2/3 rounded bg-muted animate-pulse" });
2818
2882
  }
2819
- async function Jr(e, t) {
2820
- let n = typeof t == "string" ? t : qr(t);
2821
- await ai(`${e}.__restore`, {
2822
- object_ids: [n],
2823
- entity: e
2883
+ function li(e) {
2884
+ return /* @__PURE__ */ v(n, {
2885
+ fallback: /* @__PURE__ */ v(ci, {}),
2886
+ children: /* @__PURE__ */ v(si, { ...e })
2824
2887
  });
2825
2888
  }
2826
- async function Yr(e, t) {
2827
- let n = await yn(`/api/data/${e}/export`, {
2828
- method: "POST",
2829
- body: JSON.stringify(t)
2830
- });
2831
- return {
2832
- blob: n.blob,
2833
- filename: n.filename
2834
- };
2889
+ //#endregion
2890
+ //#region src/lib/safe-url.ts
2891
+ var ui = [
2892
+ "http:",
2893
+ "https:",
2894
+ "mailto:"
2895
+ ], di = /[\u0000-\u001f\u007f]/g;
2896
+ function fi(e) {
2897
+ if (!e) return;
2898
+ let t = e.trim();
2899
+ if (!t) return;
2900
+ let n = t.replace(di, "");
2901
+ if (!n || n.startsWith("//")) return;
2902
+ let r = n.match(/^([a-zA-Z][a-zA-Z0-9+.-]*):/);
2903
+ if (r) {
2904
+ let e = r[1].toLowerCase() + ":";
2905
+ if (!ui.includes(e)) return;
2906
+ }
2907
+ return n;
2835
2908
  }
2836
- var Xr = class extends Error {
2837
- status;
2838
- response;
2909
+ //#endregion
2910
+ //#region src/lib/download.ts
2911
+ var pi = class extends Error {
2912
+ code;
2839
2913
  constructor(e, t) {
2840
- let n = t.errors && t.errors[0]?.error;
2841
- super(n || "Action failed"), this.name = "ActionBatchError", this.status = e, this.response = t;
2914
+ super(e), this.code = t, this.name = "DownloadError";
2842
2915
  }
2843
2916
  };
2844
- function Zr(e) {
2845
- if (!e || typeof e != "object") return !1;
2846
- let t = e;
2847
- return typeof t.status == "string" && Array.isArray(t.errors);
2848
- }
2849
- function Qr(e, t) {
2850
- let n = { ...e ?? {} };
2851
- if ("object_ids" in n) throw Error("handler param \"object_ids\" collides with reserved key");
2852
- if ("_ids" in n) throw Error("handler param \"_ids\" is a removed legacy key; use object_ids");
2853
- return t !== void 0 && (n.object_ids = t), n;
2854
- }
2855
- var $r = null;
2856
- function ei(e) {
2857
- let t = $r;
2858
- return $r = e, t;
2859
- }
2860
- var ti = null, ni = null;
2861
- function ri(e) {
2862
- let t = ti;
2863
- return ti = e, t;
2864
- }
2865
- function ii(e) {
2866
- let t = ni;
2867
- return ni = e, t;
2917
+ function mi(e) {
2918
+ return e instanceof pi && e.code === "FILE_NOT_FOUND";
2919
+ }
2920
+ async function hi(e, t) {
2921
+ let n = fi(e);
2922
+ if (!n) throw new pi(`Refused to download from an unsafe URL: ${e}`);
2923
+ let r = await fetch(n, { credentials: "same-origin" });
2924
+ if (!r.ok) {
2925
+ let e = await gi(r);
2926
+ throw new pi(e.message || `Download failed (${r.status})`, e.code);
2927
+ }
2928
+ let i = await r.blob(), a = URL.createObjectURL(i), o = document.createElement("a");
2929
+ o.href = a, t && (o.download = t), document.body.appendChild(o), o.click(), o.remove(), URL.revokeObjectURL(a);
2868
2930
  }
2869
- async function ai(e, t) {
2870
- if ($r) return $r(e, t);
2931
+ async function gi(e) {
2932
+ let t = await e.text();
2933
+ if (!t) return {};
2871
2934
  try {
2872
- return await K(`/api/actions/${e}`, {
2873
- method: "POST",
2874
- body: JSON.stringify(t)
2875
- });
2876
- } catch (e) {
2877
- throw e instanceof z && Zr(e.raw) ? new Xr(e.status, e.raw) : e;
2935
+ let e = JSON.parse(t);
2936
+ return typeof e.error == "string" ? {
2937
+ message: e.error,
2938
+ code: e.code
2939
+ } : {
2940
+ code: e.error?.code ?? e.code,
2941
+ message: e.error?.message ?? e.message
2942
+ };
2943
+ } catch {
2944
+ return { message: t };
2878
2945
  }
2879
2946
  }
2880
- async function oi(e, t) {
2881
- let n = new URLSearchParams();
2882
- return n.set("ids", t.join(",")), K(`/api/associations/${e}?${n.toString()}`);
2883
- }
2884
- //#endregion
2885
- //#region src/components/shared/Markdown.tsx
2886
- var si = a(() => import("./MarkdownRenderer-CaHhWrfm.js").then((e) => ({ default: e.MarkdownRenderer })));
2887
- function ci() {
2888
- return /* @__PURE__ */ v("div", { className: "h-4 w-2/3 rounded bg-muted animate-pulse" });
2889
- }
2890
- function li(e) {
2891
- return /* @__PURE__ */ v(n, {
2892
- fallback: /* @__PURE__ */ v(ci, {}),
2893
- children: /* @__PURE__ */ v(si, { ...e })
2894
- });
2895
- }
2896
2947
  //#endregion
2897
2948
  //#region src/types/fieldType.ts
2898
- var ui = /* @__PURE__ */ "bool.bytes.date.decimal.email.enum.float.int.int_array.json.multilang.multilang_text.password.phone.ref.rich_text.secret.string.string_array.structure.tags.text.time.timestamp.url.uuid.uuid_array".split(".");
2949
+ var _i = /* @__PURE__ */ "bool.bytes.date.decimal.email.enum.float.int.int_array.json.multilang.multilang_text.password.phone.ref.rich_text.secret.string.string_array.structure.tags.text.time.timestamp.url.uuid.uuid_array".split(".");
2899
2950
  //#endregion
2900
2951
  //#region src/components/shared/CopyButton.tsx
2901
- function di({ value: t, title: n, size: r = "icon" }) {
2952
+ function vi({ value: t, title: n, size: r = "icon" }) {
2902
2953
  let [i, a] = f(!1), s = o(async (e) => {
2903
2954
  e.stopPropagation(), e.preventDefault();
2904
2955
  try {
@@ -2917,7 +2968,7 @@ function di({ value: t, title: n, size: r = "icon" }) {
2917
2968
  }
2918
2969
  //#endregion
2919
2970
  //#region src/components/fields/StringField.tsx
2920
- function fi({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a }) {
2971
+ function yi({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a }) {
2921
2972
  if (r === "display") {
2922
2973
  let t = F(n);
2923
2974
  return e.copyable && t ? /* @__PURE__ */ y("span", {
@@ -2929,7 +2980,7 @@ function fi({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a
2929
2980
  children: [/* @__PURE__ */ v("span", {
2930
2981
  style: { fontSize: 12.5 },
2931
2982
  children: t
2932
- }), /* @__PURE__ */ v(di, {
2983
+ }), /* @__PURE__ */ v(vi, {
2933
2984
  value: t,
2934
2985
  size: "sm"
2935
2986
  })]
@@ -2951,7 +3002,7 @@ function fi({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a
2951
3002
  }
2952
3003
  //#endregion
2953
3004
  //#region src/components/fields/TextField.tsx
2954
- function pi({ field: e, fieldName: t, value: n, mode: r, onChange: i, fill: a, compact: o, fieldId: s }) {
3005
+ function bi({ field: e, fieldName: t, value: n, mode: r, onChange: i, fill: a, compact: o, fieldId: s }) {
2955
3006
  let c = e.display?.widget;
2956
3007
  if (r === "display") {
2957
3008
  let t = F(n);
@@ -2994,7 +3045,7 @@ function pi({ field: e, fieldName: t, value: n, mode: r, onChange: i, fill: a, c
2994
3045
  top: 0,
2995
3046
  right: 0
2996
3047
  },
2997
- children: /* @__PURE__ */ v(di, {
3048
+ children: /* @__PURE__ */ v(vi, {
2998
3049
  value: t,
2999
3050
  size: "sm"
3000
3051
  })
@@ -3021,8 +3072,8 @@ function pi({ field: e, fieldName: t, value: n, mode: r, onChange: i, fill: a, c
3021
3072
  }
3022
3073
  //#endregion
3023
3074
  //#region src/components/fields/EnumField.tsx
3024
- var mi = "__declarion_enum_null__";
3025
- function hi({ field: e, value: t, mode: n, onChange: r, fieldId: i, labelId: a }) {
3075
+ var xi = "__declarion_enum_null__";
3076
+ function Si({ field: e, value: t, mode: n, onChange: r, fieldId: i, labelId: a }) {
3026
3077
  let o = e.values ?? [], s = o.find((e) => e.code === t);
3027
3078
  if (n === "display") return s ? /* @__PURE__ */ v(D, {
3028
3079
  tone: s.color ?? "slate",
@@ -3035,8 +3086,8 @@ function hi({ field: e, value: t, mode: n, onChange: r, fieldId: i, labelId: a }
3035
3086
  },
3036
3087
  children: "—"
3037
3088
  });
3038
- let c = !e.required, l = t != null && t !== "" ? F(t) : mi, u = [...c ? [{
3039
- value: mi,
3089
+ let c = !e.required, l = t != null && t !== "" ? F(t) : xi, u = [...c ? [{
3090
+ value: xi,
3040
3091
  label: "— None —"
3041
3092
  }] : [], ...o.map((e) => ({
3042
3093
  value: e.code,
@@ -3048,13 +3099,13 @@ function hi({ field: e, value: t, mode: n, onChange: r, fieldId: i, labelId: a }
3048
3099
  "aria-required": e.required || void 0,
3049
3100
  value: l,
3050
3101
  options: u,
3051
- onChange: (e) => r?.(e === mi ? null : e),
3102
+ onChange: (e) => r?.(e === xi ? null : e),
3052
3103
  placeholder: "Select…"
3053
3104
  });
3054
3105
  }
3055
3106
  //#endregion
3056
3107
  //#region src/components/fields/EmailField.tsx
3057
- function gi({ field: e, fieldName: t, value: n, onChange: r, fieldId: i }) {
3108
+ function Ci({ field: e, fieldName: t, value: n, onChange: r, fieldId: i }) {
3058
3109
  return /* @__PURE__ */ v(N, {
3059
3110
  id: i,
3060
3111
  name: t,
@@ -3066,7 +3117,7 @@ function gi({ field: e, fieldName: t, value: n, onChange: r, fieldId: i }) {
3066
3117
  }
3067
3118
  //#endregion
3068
3119
  //#region src/components/fields/UrlField.tsx
3069
- function _i({ field: e, fieldName: t, value: n, onChange: r, fieldId: i }) {
3120
+ function wi({ field: e, fieldName: t, value: n, onChange: r, fieldId: i }) {
3070
3121
  return /* @__PURE__ */ v(N, {
3071
3122
  id: i,
3072
3123
  name: t,
@@ -3079,7 +3130,7 @@ function _i({ field: e, fieldName: t, value: n, onChange: r, fieldId: i }) {
3079
3130
  }
3080
3131
  //#endregion
3081
3132
  //#region src/components/fields/PhoneField.tsx
3082
- function vi({ field: e, fieldName: t, value: n, onChange: r, fieldId: i }) {
3133
+ function Ti({ field: e, fieldName: t, value: n, onChange: r, fieldId: i }) {
3083
3134
  return /* @__PURE__ */ v(N, {
3084
3135
  id: i,
3085
3136
  name: t,
@@ -3092,10 +3143,10 @@ function vi({ field: e, fieldName: t, value: n, onChange: r, fieldId: i }) {
3092
3143
  }
3093
3144
  //#endregion
3094
3145
  //#region src/lib/timestamp.ts
3095
- function yi(e = /* @__PURE__ */ new Date()) {
3146
+ function Ei(e = /* @__PURE__ */ new Date()) {
3096
3147
  return w(e);
3097
3148
  }
3098
- function bi(e, t) {
3149
+ function Di(e, t) {
3099
3150
  let n = e.match(/([+-]\d{2}:\d{2})$/), r = e.endsWith("Z"), i = new Date(e);
3100
3151
  if (isNaN(i.getTime())) return e;
3101
3152
  if (n || r) {
@@ -3121,13 +3172,13 @@ function bi(e, t) {
3121
3172
  }
3122
3173
  return new Intl.DateTimeFormat(void 0, t).format(i);
3123
3174
  }
3124
- function xi(e) {
3125
- return bi(e, {
3175
+ function Oi(e) {
3176
+ return Di(e, {
3126
3177
  dateStyle: "medium",
3127
3178
  timeStyle: "short"
3128
3179
  });
3129
3180
  }
3130
- function Si(e, t = /* @__PURE__ */ new Date()) {
3181
+ function ki(e, t = /* @__PURE__ */ new Date()) {
3131
3182
  if (e == null || e === "") return {
3132
3183
  text: "—",
3133
3184
  absolute: ""
@@ -3140,7 +3191,7 @@ function Si(e, t = /* @__PURE__ */ new Date()) {
3140
3191
  absolute: t
3141
3192
  };
3142
3193
  }
3143
- let r = xi(typeof e == "string" ? e : n.toISOString()), i = t.getTime() - n.getTime();
3194
+ let r = Oi(typeof e == "string" ? e : n.toISOString()), i = t.getTime() - n.getTime();
3144
3195
  return Math.abs(i) > 720 * 60 * 60 * 1e3 ? {
3145
3196
  text: w(n, { representation: "date" }),
3146
3197
  absolute: r
@@ -3151,23 +3202,23 @@ function Si(e, t = /* @__PURE__ */ new Date()) {
3151
3202
  }
3152
3203
  //#endregion
3153
3204
  //#region src/components/fields/TimestampField.tsx
3154
- var Ci = {
3205
+ var Ai = {
3155
3206
  year: "numeric",
3156
3207
  month: "short",
3157
3208
  day: "numeric"
3158
- }, wi = {
3159
- ...Ci,
3209
+ }, ji = {
3210
+ ...Ai,
3160
3211
  hour: "2-digit",
3161
3212
  minute: "2-digit"
3162
3213
  };
3163
- function Ti(e, t) {
3214
+ function Mi(e, t) {
3164
3215
  if (t) {
3165
3216
  let t = /* @__PURE__ */ new Date(e + "T00:00:00");
3166
- return isNaN(t.getTime()) ? e : new Intl.DateTimeFormat(void 0, Ci).format(t);
3217
+ return isNaN(t.getTime()) ? e : new Intl.DateTimeFormat(void 0, Ai).format(t);
3167
3218
  }
3168
- return bi(e, wi);
3219
+ return Di(e, ji);
3169
3220
  }
3170
- function Ei(e, t) {
3221
+ function Ni(e, t) {
3171
3222
  if (t) {
3172
3223
  let t = /* @__PURE__ */ new Date(e + "T00:00:00");
3173
3224
  return isNaN(t.getTime()) ? e : new Intl.DateTimeFormat(void 0, {
@@ -3185,14 +3236,14 @@ function Ei(e, t) {
3185
3236
  minute: "2-digit"
3186
3237
  }).format(n);
3187
3238
  }
3188
- function Di(e) {
3239
+ function Pi(e) {
3189
3240
  if (e.endsWith("Z")) return "UTC";
3190
3241
  let t = e.match(/([+-]\d{2}:\d{2})$/);
3191
3242
  if (!t) return null;
3192
3243
  let n = t[1].charAt(0), r = parseInt(t[1].substring(1, 3), 10), i = parseInt(t[1].substring(4, 6), 10);
3193
3244
  return r === 0 && i === 0 ? "UTC" : `UTC${n}${r}${i > 0 ? `:${String(i).padStart(2, "0")}` : ""}`;
3194
3245
  }
3195
- function Oi(e, t) {
3246
+ function Fi(e, t) {
3196
3247
  let n = e.match(/([+-]\d{2}:\d{2})$/), r = e.endsWith("Z"), i = new Date(e);
3197
3248
  if (isNaN(i.getTime())) return "";
3198
3249
  if (r) {
@@ -3205,13 +3256,13 @@ function Oi(e, t) {
3205
3256
  }
3206
3257
  return t ? e.slice(0, 10) : e.slice(0, 16);
3207
3258
  }
3208
- function ki(e, t) {
3259
+ function Ii(e, t) {
3209
3260
  let n = new Date(e);
3210
3261
  if (isNaN(n.getTime())) return "";
3211
3262
  let r = n.getFullYear(), i = String(n.getMonth() + 1).padStart(2, "0"), a = String(n.getDate()).padStart(2, "0");
3212
3263
  return t ? `${r}-${i}-${a}` : `${r}-${i}-${a}T${String(n.getHours()).padStart(2, "0")}:${String(n.getMinutes()).padStart(2, "0")}`;
3213
3264
  }
3214
- function Ai({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a }) {
3265
+ function Li({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a }) {
3215
3266
  let o = e.type === "date", s = !!e.timezone;
3216
3267
  if (r === "display") {
3217
3268
  if (!n) return /* @__PURE__ */ v("span", {
@@ -3221,7 +3272,7 @@ function Ai({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a
3221
3272
  },
3222
3273
  children: "—"
3223
3274
  });
3224
- let e = F(n), t = s ? Ti(e, o) : Ei(e, o), r = s && !o ? Di(e) : null;
3275
+ let e = F(n), t = s ? Mi(e, o) : Ni(e, o), r = s && !o ? Pi(e) : null;
3225
3276
  return /* @__PURE__ */ y("span", {
3226
3277
  style: { fontSize: 12.5 },
3227
3278
  children: [t, r && /* @__PURE__ */ v("span", {
@@ -3233,7 +3284,7 @@ function Ai({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a
3233
3284
  })]
3234
3285
  });
3235
3286
  }
3236
- let c = n ? s ? Oi(F(n), o) : ki(F(n), o) : "";
3287
+ let c = n ? s ? Fi(F(n), o) : Ii(F(n), o) : "";
3237
3288
  return /* @__PURE__ */ v(N, {
3238
3289
  id: a,
3239
3290
  name: t,
@@ -3254,13 +3305,13 @@ function Ai({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a
3254
3305
  i?.(e);
3255
3306
  return;
3256
3307
  }
3257
- i?.(yi(t));
3308
+ i?.(Ei(t));
3258
3309
  }
3259
3310
  });
3260
3311
  }
3261
3312
  //#endregion
3262
3313
  //#region src/components/fields/BoolField.tsx
3263
- function ji({ value: e, mode: t, onChange: n, fieldId: r, labelId: i }) {
3314
+ function Ri({ value: e, mode: t, onChange: n, fieldId: r, labelId: i }) {
3264
3315
  let a = !!e;
3265
3316
  return t === "display" ? /* @__PURE__ */ y("span", {
3266
3317
  style: {
@@ -3285,7 +3336,7 @@ function ji({ value: e, mode: t, onChange: n, fieldId: r, labelId: i }) {
3285
3336
  }
3286
3337
  //#endregion
3287
3338
  //#region src/components/fields/NumberField.tsx
3288
- function Mi(e) {
3339
+ function zi(e) {
3289
3340
  let t = e.trim();
3290
3341
  if (t === "" || t === "-") return t;
3291
3342
  let n = t.startsWith("-"), [r, i] = (n ? t.slice(1) : t).split("."), a;
@@ -3297,8 +3348,8 @@ function Mi(e) {
3297
3348
  let o = n ? `-${a}` : a;
3298
3349
  return i !== void 0 && (o += `.${i}`), o;
3299
3350
  }
3300
- var Ni = new Intl.NumberFormat();
3301
- function Pi({ field: e, fieldName: t, value: n, mode: r, onChange: i, record: a, fieldId: o }) {
3351
+ var Bi = new Intl.NumberFormat();
3352
+ function Vi({ field: e, fieldName: t, value: n, mode: r, onChange: i, record: a, fieldId: o }) {
3302
3353
  let s = e.display?.widget === "money", c = e.type === "decimal" || s, l = a?.$units?.[t], u = !l && e.unit ? e.unit.display || e.unit.storage : void 0, d = l || (u && !u.startsWith("$") ? u : void 0);
3303
3354
  if (r === "display") {
3304
3355
  if (n == null) return /* @__PURE__ */ v("span", {
@@ -3309,10 +3360,10 @@ function Pi({ field: e, fieldName: t, value: n, mode: r, onChange: i, record: a,
3309
3360
  children: "—"
3310
3361
  });
3311
3362
  let e;
3312
- if (c && typeof n == "string") e = Mi(n);
3363
+ if (c && typeof n == "string") e = zi(n);
3313
3364
  else {
3314
3365
  let t = Number(n);
3315
- e = isNaN(t) ? null : Ni.format(t);
3366
+ e = isNaN(t) ? null : Bi.format(t);
3316
3367
  }
3317
3368
  return e == null ? /* @__PURE__ */ v("span", {
3318
3369
  style: { fontSize: 12.5 },
@@ -3356,14 +3407,8 @@ function Pi({ field: e, fieldName: t, value: n, mode: r, onChange: i, record: a,
3356
3407
  });
3357
3408
  }
3358
3409
  //#endregion
3359
- //#region src/hooks/useEntity.ts
3360
- function Fi(e) {
3361
- let { data: t } = J();
3362
- if (!(!t || !e)) return t.entities[e];
3363
- }
3364
- //#endregion
3365
3410
  //#region src/hooks/useEntityData.ts
3366
- function Ii(e, t) {
3411
+ function Hi(e, t) {
3367
3412
  return [
3368
3413
  "entity-data",
3369
3414
  e,
@@ -3373,16 +3418,16 @@ function Ii(e, t) {
3373
3418
  }
3374
3419
  ];
3375
3420
  }
3376
- function Li(e, t, n = !0) {
3377
- let r = Ii(e, t), i = r[2];
3421
+ function Ui(e, t, n = !0) {
3422
+ let r = Hi(e, t), i = r[2];
3378
3423
  return h({
3379
3424
  queryKey: r,
3380
- queryFn: ({ signal: t }) => Hr(e, i, { signal: t }),
3425
+ queryFn: ({ signal: t }) => Vn(e, i, { signal: t }),
3381
3426
  enabled: !!e && n,
3382
3427
  placeholderData: (t, n) => n?.queryKey?.[1] === e ? t : void 0
3383
3428
  });
3384
3429
  }
3385
- function Ri(e, t, n = !0) {
3430
+ function Wi(e, t, n = !0) {
3386
3431
  let r = {
3387
3432
  ...t,
3388
3433
  count: "only",
@@ -3398,7 +3443,7 @@ function Ri(e, t, n = !0) {
3398
3443
  e,
3399
3444
  r
3400
3445
  ],
3401
- queryFn: ({ signal: t }) => Hr(e, r, { signal: t }),
3446
+ queryFn: ({ signal: t }) => Vn(e, r, { signal: t }),
3402
3447
  enabled: !!e && n,
3403
3448
  retry: 1,
3404
3449
  staleTime: 3e4,
@@ -3407,7 +3452,7 @@ function Ri(e, t, n = !0) {
3407
3452
  }
3408
3453
  //#endregion
3409
3454
  //#region src/hooks/useDebounce.ts
3410
- function zi(e, t) {
3455
+ function Gi(e, t) {
3411
3456
  let [n, r] = f(e);
3412
3457
  return c(() => {
3413
3458
  let n = setTimeout(() => r(e), t);
@@ -3415,18 +3460,24 @@ function zi(e, t) {
3415
3460
  }, [e, t]), n;
3416
3461
  }
3417
3462
  //#endregion
3463
+ //#region src/hooks/useEntity.ts
3464
+ function Ki(e) {
3465
+ let { data: t } = J();
3466
+ if (!(!t || !e)) return t.entities[e];
3467
+ }
3468
+ //#endregion
3418
3469
  //#region src/components/fields/RefCombobox.tsx
3419
- var Bi = 200;
3420
- function Vi({ ref: e, value: t, onChange: n, refs: r, displayFieldOverride: i, id: a, labelId: o, ariaLabel: s, required: c, placeholder: l = "Select…", specialValues: p }) {
3421
- let m = e?.entity, h = Fi(m), g = i ?? e?.display?.field ?? h?.display?.display_field, _ = u(() => h ? R(h)[0] ?? "id" : "id", [h]), y = e?.field || _, [b, x] = f(""), S = zi(b, 300), { data: C, isLoading: w } = Li(m, {
3422
- per_page: Bi,
3470
+ var qi = 200;
3471
+ function Ji({ ref: e, value: t, onChange: n, refs: r, displayFieldOverride: i, id: a, labelId: o, ariaLabel: s, required: c, placeholder: l = "Select…", specialValues: p }) {
3472
+ let m = e?.entity, h = Ki(m), g = i ?? e?.display?.field ?? h?.display?.display_field ?? "$display", _ = u(() => h ? R(h)[0] ?? "id" : "id", [h]), y = e?.field || _, [b, x] = f(""), S = Gi(b, 300), { data: C, isLoading: w } = Ui(m, {
3473
+ per_page: qi,
3423
3474
  sort: g ? `${g}:asc` : void 0,
3424
3475
  search: S || void 0
3425
3476
  }), T = u(() => C?.data ?? [], [C?.data]), E = t == null ? "" : F(t), D = u(() => T.some((e) => String(e[y]) === E), [
3426
3477
  T,
3427
3478
  y,
3428
3479
  E
3429
- ]), O = r && m ? r[m]?.[E] : void 0, k = !!p?.some((e) => e.code === E), { data: A } = Li(E && !D && !k && !O && !w ? m : void 0, {
3480
+ ]), O = r && m ? r[m]?.[E] : void 0, k = !!p?.some((e) => e.code === E), { data: A } = Ui(E && !D && !k && !O && !w ? m : void 0, {
3430
3481
  per_page: 1,
3431
3482
  filters: [{
3432
3483
  field: y,
@@ -3513,25 +3564,25 @@ function Vi({ ref: e, value: t, onChange: n, refs: r, displayFieldOverride: i, i
3513
3564
  }
3514
3565
  //#endregion
3515
3566
  //#region src/components/fields/RefField.tsx
3516
- function Hi({ field: e, value: t, mode: n, onChange: r, refs: i, fieldId: a, labelId: o }) {
3517
- let s = e.ref?.entity, c = Fi(s), l = e.display?.ref_display_field ?? e.ref?.display?.field ?? c?.display?.display_field, d = u(() => {
3567
+ function Yi({ field: e, value: t, mode: n, onChange: r, refs: i, fieldId: a, labelId: o }) {
3568
+ let s = e.ref?.entity, c = e.display?.ref_display_field || "$display", l = u(() => {
3518
3569
  if (t == null) return "—";
3519
3570
  let e = F(t);
3520
3571
  if (i && s) {
3521
3572
  let t = i[s]?.[e];
3522
- if (t) return L(t, l, e);
3573
+ if (t) return L(t, c, e);
3523
3574
  }
3524
3575
  return e;
3525
3576
  }, [
3526
3577
  t,
3527
3578
  i,
3528
3579
  s,
3529
- l
3580
+ c
3530
3581
  ]);
3531
3582
  return n === "display" ? /* @__PURE__ */ v("span", {
3532
3583
  style: { fontSize: 12.5 },
3533
- children: d
3534
- }) : /* @__PURE__ */ v(Vi, {
3584
+ children: l
3585
+ }) : /* @__PURE__ */ v(Ji, {
3535
3586
  ref: e.ref,
3536
3587
  value: t,
3537
3588
  onChange: (e) => r?.(e),
@@ -3544,29 +3595,29 @@ function Hi({ field: e, value: t, mode: n, onChange: r, refs: i, fieldId: a, lab
3544
3595
  }
3545
3596
  //#endregion
3546
3597
  //#region src/components/fields/JsonField.tsx
3547
- var Ui = a(() => import("./JsonEditor-KelPV-OQ.js").then((e) => ({ default: e.JsonEditor })));
3548
- function Wi() {
3598
+ var Xi = a(() => import("./JsonEditor-KelPV-OQ.js").then((e) => ({ default: e.JsonEditor })));
3599
+ function Zi() {
3549
3600
  return /* @__PURE__ */ v("div", { className: "h-20 rounded-md border border-border bg-muted animate-pulse" });
3550
3601
  }
3551
- function Gi(e) {
3602
+ function Qi(e) {
3552
3603
  return e == null ? !0 : typeof e == "string" ? e.trim() === "" : Array.isArray(e) ? e.length === 0 : typeof e == "object" ? Object.keys(e).length === 0 : !1;
3553
3604
  }
3554
- function Ki({ value: e, mode: t, onChange: r, fieldId: i }) {
3555
- return t === "display" ? Gi(e) ? /* @__PURE__ */ v("span", {
3605
+ function $i({ value: e, mode: t, onChange: r, fieldId: i }) {
3606
+ return t === "display" ? Qi(e) ? /* @__PURE__ */ v("span", {
3556
3607
  style: {
3557
3608
  fontSize: 12.5,
3558
3609
  color: "var(--text-4)"
3559
3610
  },
3560
3611
  children: "—"
3561
3612
  }) : /* @__PURE__ */ v(n, {
3562
- fallback: /* @__PURE__ */ v(Wi, {}),
3563
- children: /* @__PURE__ */ v(Ui, {
3613
+ fallback: /* @__PURE__ */ v(Zi, {}),
3614
+ children: /* @__PURE__ */ v(Xi, {
3564
3615
  value: e,
3565
3616
  readOnly: !0
3566
3617
  })
3567
3618
  }) : /* @__PURE__ */ v(n, {
3568
- fallback: /* @__PURE__ */ v(Wi, {}),
3569
- children: /* @__PURE__ */ v(Ui, {
3619
+ fallback: /* @__PURE__ */ v(Zi, {}),
3620
+ children: /* @__PURE__ */ v(Xi, {
3570
3621
  value: e,
3571
3622
  onChange: r,
3572
3623
  id: i
@@ -3575,14 +3626,14 @@ function Ki({ value: e, mode: t, onChange: r, fieldId: i }) {
3575
3626
  }
3576
3627
  //#endregion
3577
3628
  //#region src/components/fields/MultilangField.tsx
3578
- function qi(e) {
3629
+ function ea(e) {
3579
3630
  return e == null ? {} : typeof e == "object" && !Array.isArray(e) ? e : typeof e == "string" ? { en: e } : {};
3580
3631
  }
3581
- function Ji({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a }) {
3632
+ function ta({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a }) {
3582
3633
  let { data: o } = J(), s = o?.languages?.length ? o.languages : [{
3583
3634
  code: "en",
3584
3635
  name: { en: "English" }
3585
- }], c = qi(n);
3636
+ }], c = ea(n);
3586
3637
  if (r === "display") return /* @__PURE__ */ v("span", {
3587
3638
  style: { fontSize: 12.5 },
3588
3639
  children: Object.values(c)[0] ?? "—"
@@ -3638,14 +3689,14 @@ function Ji({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a
3638
3689
  }
3639
3690
  //#endregion
3640
3691
  //#region src/components/fields/MultilangTextField.tsx
3641
- function Yi(e) {
3692
+ function na(e) {
3642
3693
  return e == null ? {} : typeof e == "object" && !Array.isArray(e) ? e : typeof e == "string" ? { en: e } : {};
3643
3694
  }
3644
- function Xi({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a }) {
3695
+ function ra({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a }) {
3645
3696
  let { data: o } = J(), s = o?.languages?.length ? o.languages : [{
3646
3697
  code: "en",
3647
3698
  name: { en: "English" }
3648
- }], c = Yi(n);
3699
+ }], c = na(n);
3649
3700
  if (r === "display") return /* @__PURE__ */ v("p", {
3650
3701
  style: {
3651
3702
  fontSize: 12.5,
@@ -3701,25 +3752,25 @@ function Xi({ field: e, fieldName: t, value: n, mode: r, onChange: i, fieldId: a
3701
3752
  }
3702
3753
  //#endregion
3703
3754
  //#region src/components/fields/StructureField.tsx
3704
- function Zi(e) {
3755
+ function ia(e) {
3705
3756
  let { field: t, value: n, mode: r, onChange: i, locale: a, fieldId: o } = e, { data: s } = J(), c = t.structure ? s?.structures?.[t.structure] : void 0;
3706
- return c ? t.array ? /* @__PURE__ */ v($i, {
3757
+ return c ? t.array ? /* @__PURE__ */ v(oa, {
3707
3758
  structDef: c,
3708
3759
  value: n,
3709
3760
  mode: r,
3710
3761
  onChange: i,
3711
3762
  locale: a,
3712
3763
  fieldId: o
3713
- }) : /* @__PURE__ */ v(Qi, {
3764
+ }) : /* @__PURE__ */ v(aa, {
3714
3765
  structDef: c,
3715
3766
  value: n,
3716
3767
  mode: r,
3717
3768
  onChange: i,
3718
3769
  locale: a,
3719
3770
  fieldId: o
3720
- }) : /* @__PURE__ */ v(Ki, { ...e });
3771
+ }) : /* @__PURE__ */ v($i, { ...e });
3721
3772
  }
3722
- function Qi({ structDef: e, value: t, mode: n, onChange: r, locale: i, fieldId: a }) {
3773
+ function aa({ structDef: e, value: t, mode: n, onChange: r, locale: i, fieldId: a }) {
3723
3774
  let o = typeof t == "object" && t && !Array.isArray(t) ? t : {}, s = e.fields.names(), c = {
3724
3775
  display: "flex",
3725
3776
  flexDirection: "column",
@@ -3755,13 +3806,13 @@ function Qi({ structDef: e, value: t, mode: n, onChange: r, locale: i, fieldId:
3755
3806
  minWidth: 0,
3756
3807
  flex: 1
3757
3808
  },
3758
- children: n.type === "structure" && n.structure ? /* @__PURE__ */ v(Zi, {
3809
+ children: n.type === "structure" && n.structure ? /* @__PURE__ */ v(ia, {
3759
3810
  field: n,
3760
3811
  fieldName: t,
3761
3812
  value: r,
3762
3813
  mode: "display",
3763
3814
  locale: i
3764
- }) : ys({
3815
+ }) : Es({
3765
3816
  field: n,
3766
3817
  fieldName: t,
3767
3818
  value: r,
@@ -3799,14 +3850,14 @@ function Qi({ structDef: e, value: t, mode: n, onChange: r, locale: i, fieldId:
3799
3850
  children: [/* @__PURE__ */ v(be, {
3800
3851
  required: n.required,
3801
3852
  children: n.display ? I(n.display.name) : t
3802
- }), n.type === "structure" && n.structure ? /* @__PURE__ */ v(Zi, {
3853
+ }), n.type === "structure" && n.structure ? /* @__PURE__ */ v(ia, {
3803
3854
  field: n,
3804
3855
  fieldName: t,
3805
3856
  value: o[t],
3806
3857
  mode: "edit",
3807
3858
  onChange: l(t),
3808
3859
  locale: i
3809
- }) : ys({
3860
+ }) : Es({
3810
3861
  field: n,
3811
3862
  fieldName: t,
3812
3863
  value: o[t],
@@ -3818,7 +3869,7 @@ function Qi({ structDef: e, value: t, mode: n, onChange: r, locale: i, fieldId:
3818
3869
  })
3819
3870
  });
3820
3871
  }
3821
- function $i({ structDef: t, value: n, mode: r, onChange: i, locale: a, fieldId: o }) {
3872
+ function oa({ structDef: t, value: n, mode: r, onChange: i, locale: a, fieldId: o }) {
3822
3873
  let s = Array.isArray(n) ? n : [];
3823
3874
  if (r === "display") return s.length === 0 ? /* @__PURE__ */ v("span", {
3824
3875
  style: {
@@ -3832,7 +3883,7 @@ function $i({ structDef: t, value: n, mode: r, onChange: i, locale: a, fieldId:
3832
3883
  flexDirection: "column",
3833
3884
  gap: 8
3834
3885
  },
3835
- children: s.map((e, n) => /* @__PURE__ */ v(Qi, {
3886
+ children: s.map((e, n) => /* @__PURE__ */ v(aa, {
3836
3887
  structDef: t,
3837
3888
  value: e,
3838
3889
  mode: "display",
@@ -3858,7 +3909,7 @@ function $i({ structDef: t, value: n, mode: r, onChange: i, locale: a, fieldId:
3858
3909
  role: "group",
3859
3910
  children: [s.map((n, r) => /* @__PURE__ */ y("div", {
3860
3911
  style: { position: "relative" },
3861
- children: [/* @__PURE__ */ v(Qi, {
3912
+ children: [/* @__PURE__ */ v(aa, {
3862
3913
  structDef: t,
3863
3914
  value: n,
3864
3915
  mode: "edit",
@@ -3886,16 +3937,16 @@ function $i({ structDef: t, value: n, mode: r, onChange: i, locale: a, fieldId:
3886
3937
  }
3887
3938
  //#endregion
3888
3939
  //#region src/components/fields/SecretField.tsx
3889
- var ea = "[SET]";
3890
- function ta({ field: e, fieldName: t, value: n, mode: r, onChange: i, record: a, fieldId: o }) {
3891
- let [s, c] = f(""), l = a !== void 0, u = n === ea || typeof n == "string" && n !== "";
3940
+ var sa = "[SET]";
3941
+ function ca({ field: e, fieldName: t, value: n, mode: r, onChange: i, record: a, fieldId: o }) {
3942
+ let [s, c] = f(""), l = a !== void 0, u = n === sa || typeof n == "string" && n !== "";
3892
3943
  return r === "display" ? u ? /* @__PURE__ */ v("span", {
3893
3944
  className: "mono",
3894
3945
  style: {
3895
3946
  fontSize: 12.5,
3896
3947
  color: "var(--text-3)"
3897
3948
  },
3898
- children: ea
3949
+ children: sa
3899
3950
  }) : /* @__PURE__ */ v("span", {
3900
3951
  style: {
3901
3952
  fontSize: 12.5,
@@ -3909,23 +3960,23 @@ function ta({ field: e, fieldName: t, value: n, mode: r, onChange: i, record: a,
3909
3960
  ariaRequired: e.required,
3910
3961
  value: s,
3911
3962
  onChange: (e) => {
3912
- c(e), l && e === "" ? i?.(u ? ea : "") : i?.(e);
3963
+ c(e), l && e === "" ? i?.(u ? sa : "") : i?.(e);
3913
3964
  },
3914
3965
  placeholder: l ? "Leave blank to keep existing value" : "Enter value"
3915
3966
  });
3916
3967
  }
3917
3968
  //#endregion
3918
3969
  //#region src/components/fields/PasswordField.tsx
3919
- var na = "[SET]";
3920
- function ra({ field: e, fieldName: t, value: n, mode: r, onChange: i, record: a, fieldId: o }) {
3921
- let [s, c] = f(""), l = a !== void 0, u = n === na || typeof n == "string" && n !== "";
3970
+ var la = "[SET]";
3971
+ function ua({ field: e, fieldName: t, value: n, mode: r, onChange: i, record: a, fieldId: o }) {
3972
+ let [s, c] = f(""), l = a !== void 0, u = n === la || typeof n == "string" && n !== "";
3922
3973
  return r === "display" ? u ? /* @__PURE__ */ v("span", {
3923
3974
  className: "mono",
3924
3975
  style: {
3925
3976
  fontSize: 12.5,
3926
3977
  color: "var(--text-3)"
3927
3978
  },
3928
- children: na
3979
+ children: la
3929
3980
  }) : /* @__PURE__ */ v("span", {
3930
3981
  style: {
3931
3982
  fontSize: 12.5,
@@ -3939,18 +3990,18 @@ function ra({ field: e, fieldName: t, value: n, mode: r, onChange: i, record: a,
3939
3990
  ariaRequired: e.required,
3940
3991
  value: s,
3941
3992
  onChange: (e) => {
3942
- c(e), l && e === "" ? i?.(u ? na : "") : i?.(e);
3993
+ c(e), l && e === "" ? i?.(u ? la : "") : i?.(e);
3943
3994
  },
3944
3995
  placeholder: l ? "Leave blank to keep existing value" : "Enter password"
3945
3996
  });
3946
3997
  }
3947
3998
  //#endregion
3948
3999
  //#region src/components/fields/StringArrayField.tsx
3949
- function ia(e) {
4000
+ function da(e) {
3950
4001
  return Array.isArray(e) ? e.filter((e) => e != null).map(String) : [];
3951
4002
  }
3952
- function aa({ field: t, fieldName: n, value: r, mode: i, onChange: a, fieldId: o }) {
3953
- let s = ia(r), [c, l] = f("");
4003
+ function fa({ field: t, fieldName: n, value: r, mode: i, onChange: a, fieldId: o }) {
4004
+ let s = da(r), [c, l] = f("");
3954
4005
  if (i === "display") return s.length === 0 ? /* @__PURE__ */ v("span", {
3955
4006
  style: {
3956
4007
  fontSize: 12.5,
@@ -4019,11 +4070,11 @@ function aa({ field: t, fieldName: n, value: r, mode: i, onChange: a, fieldId: o
4019
4070
  }
4020
4071
  //#endregion
4021
4072
  //#region src/components/fields/IntArrayField.tsx
4022
- function oa(e) {
4073
+ function pa(e) {
4023
4074
  return Array.isArray(e) ? e.filter((e) => e != null).map(Number).filter((e) => !isNaN(e)) : [];
4024
4075
  }
4025
- function sa({ field: t, fieldName: n, value: r, mode: i, onChange: a, fieldId: o }) {
4026
- let s = oa(r), [c, l] = f("");
4076
+ function ma({ field: t, fieldName: n, value: r, mode: i, onChange: a, fieldId: o }) {
4077
+ let s = pa(r), [c, l] = f("");
4027
4078
  if (i === "display") return s.length === 0 ? /* @__PURE__ */ v("span", {
4028
4079
  style: {
4029
4080
  fontSize: 12.5,
@@ -4095,47 +4146,47 @@ function sa({ field: t, fieldName: n, value: r, mode: i, onChange: a, fieldId: o
4095
4146
  }
4096
4147
  //#endregion
4097
4148
  //#region src/lib/rich-text.ts
4098
- var ca = /declarion:\/\/file\/([0-9a-fA-F-]{36})/g;
4099
- function la(e) {
4100
- return typeof e == "string" ? e : _a(e) && typeof e.markdown == "string" ? e.markdown : "";
4149
+ var ha = /declarion:\/\/file\/([0-9a-fA-F-]{36})/g;
4150
+ function ga(e) {
4151
+ return typeof e == "string" ? e : wa(e) && typeof e.markdown == "string" ? e.markdown : "";
4101
4152
  }
4102
- function ua(e, t) {
4153
+ function _a(e, t) {
4103
4154
  return {
4104
- markdown: la(e),
4105
- files: pa(t)
4155
+ markdown: ga(e),
4156
+ files: ba(t)
4106
4157
  };
4107
4158
  }
4108
- function da(e, t) {
4109
- let n = ua(e, null);
4159
+ function va(e, t) {
4160
+ let n = _a(e, null);
4110
4161
  return n.files[t.id] = t, n;
4111
4162
  }
4112
- function fa(e, t) {
4113
- let n = ua(e, null);
4163
+ function ya(e, t) {
4164
+ let n = _a(e, null);
4114
4165
  for (let e of t) delete n.files[e];
4115
4166
  return n;
4116
4167
  }
4117
- function pa(e) {
4168
+ function ba(e) {
4118
4169
  if (!Array.isArray(e)) return {};
4119
4170
  let t = {};
4120
- for (let n of e) _a(n) && typeof n.id == "string" && (t[n.id] = n);
4171
+ for (let n of e) wa(n) && typeof n.id == "string" && (t[n.id] = n);
4121
4172
  return t;
4122
4173
  }
4123
- function ma(e) {
4174
+ function xa(e) {
4124
4175
  let t = /* @__PURE__ */ new Set(), n = [], r;
4125
- for (ca.lastIndex = 0; (r = ca.exec(e)) !== null;) {
4176
+ for (ha.lastIndex = 0; (r = ha.exec(e)) !== null;) {
4126
4177
  let e = r[1];
4127
4178
  t.has(e) || (t.add(e), n.push(e));
4128
4179
  }
4129
4180
  return n;
4130
4181
  }
4131
- function ha(e) {
4182
+ function Sa(e) {
4132
4183
  return e ? /^declarion:\/\/file\/([0-9a-fA-F-]{36})$/.exec(e)?.[1] ?? null : null;
4133
4184
  }
4134
- function ga(e) {
4185
+ function Ca(e) {
4135
4186
  let t = `declarion://file/${e.id}`;
4136
4187
  return e.content_type.startsWith("image/") ? `![](${t})` : `[${e.filename || e.id}](${t})`;
4137
4188
  }
4138
- function _a(e) {
4189
+ function wa(e) {
4139
4190
  return typeof e == "object" && !!e;
4140
4191
  }
4141
4192
  //#endregion
@@ -4147,10 +4198,10 @@ var Q = class extends Error {
4147
4198
  super(n), this.code = t, this.status = e;
4148
4199
  }
4149
4200
  };
4150
- async function va(e) {
4201
+ async function Ta(e) {
4151
4202
  let t = bt();
4152
4203
  try {
4153
- return await ya(e, t ? await Et() : null);
4204
+ return await Ea(e, t ? await Et() : null);
4154
4205
  } catch (n) {
4155
4206
  if (!(n instanceof Q && n.status === 401 && (n.code === "TOKEN_REFRESH_NEEDED" || n.code === "UNAUTHORIZED"))) throw n;
4156
4207
  let r = null;
@@ -4160,17 +4211,17 @@ async function va(e) {
4160
4211
  throw pn()(), n;
4161
4212
  }
4162
4213
  try {
4163
- return await ya(e, r);
4214
+ return await Ea(e, r);
4164
4215
  } catch (e) {
4165
4216
  throw e instanceof Q && e.status === 401 && pn()(), e;
4166
4217
  }
4167
4218
  }
4168
4219
  }
4169
- function ya(e, t) {
4220
+ function Ea(e, t) {
4170
4221
  let { file: n, entityCode: r, fieldCode: i, slotCode: a, onProgress: o, signal: s } = e;
4171
4222
  return new Promise((e, c) => {
4172
4223
  let l = new XMLHttpRequest();
4173
- if (l.open("POST", ba(r, i, a)), l.withCredentials = t === null, t && l.setRequestHeader("Authorization", `Bearer ${t}`), l.upload.onprogress = (e) => {
4224
+ if (l.open("POST", Da(r, i, a)), l.withCredentials = t === null, t && l.setRequestHeader("Authorization", `Bearer ${t}`), l.upload.onprogress = (e) => {
4174
4225
  if (!o) return;
4175
4226
  let t = e.lengthComputable ? e.total : n.size, r = t > 0 ? Math.min(100, Math.round(e.loaded / t * 100)) : 0;
4176
4227
  o({
@@ -4184,7 +4235,7 @@ function ya(e, t) {
4184
4235
  n = t ? JSON.parse(t) : null;
4185
4236
  } catch {}
4186
4237
  if (l.status >= 200 && l.status < 300) {
4187
- let t = xa(n);
4238
+ let t = Oa(n);
4188
4239
  if (!t || !t.id) {
4189
4240
  c(new Q(l.status, "BAD_RESPONSE", "Upload returned no file id"));
4190
4241
  return;
@@ -4209,56 +4260,56 @@ function ya(e, t) {
4209
4260
  u.append("file", n, n.name), l.send(u);
4210
4261
  });
4211
4262
  }
4212
- function ba(e, t, n) {
4263
+ function Da(e, t, n) {
4213
4264
  let r = new URLSearchParams();
4214
4265
  e && t && (r.set("entity_code", e), r.set("field_code", t), n && r.set("slot_code", n));
4215
4266
  let i = r.toString();
4216
4267
  return i ? `/api/files/upload?${i}` : "/api/files/upload";
4217
4268
  }
4218
- function xa(e) {
4219
- return Ca(e) ? Ca(e.result) ? xa(e.result) : Ca(e.file) ? Sa(e.file) : typeof e.id == "string" ? e : null : null;
4269
+ function Oa(e) {
4270
+ return Aa(e) ? Aa(e.result) ? Oa(e.result) : Aa(e.file) ? ka(e.file) : typeof e.id == "string" ? e : null : null;
4220
4271
  }
4221
- function Sa(e) {
4222
- let t = wa(e.file_id);
4272
+ function ka(e) {
4273
+ let t = ja(e.file_id);
4223
4274
  return t ? {
4224
4275
  id: t,
4225
- filename: wa(e.filename_original) ?? wa(e.filename_normalized) ?? t,
4226
- content_type: wa(e.content_type) ?? "application/octet-stream",
4227
- size_bytes: Ta(e.size_bytes) ?? 0,
4228
- sha256: wa(e.sha256) ?? "",
4229
- dedup: Ea(e.dedup)
4276
+ filename: ja(e.filename_original) ?? ja(e.filename_normalized) ?? t,
4277
+ content_type: ja(e.content_type) ?? "application/octet-stream",
4278
+ size_bytes: Ma(e.size_bytes) ?? 0,
4279
+ sha256: ja(e.sha256) ?? "",
4280
+ dedup: Na(e.dedup)
4230
4281
  } : null;
4231
4282
  }
4232
- function Ca(e) {
4283
+ function Aa(e) {
4233
4284
  return typeof e == "object" && !!e;
4234
4285
  }
4235
- function wa(e) {
4286
+ function ja(e) {
4236
4287
  return typeof e == "string" ? e : void 0;
4237
4288
  }
4238
- function Ta(e) {
4289
+ function Ma(e) {
4239
4290
  return typeof e == "number" ? e : void 0;
4240
4291
  }
4241
- function Ea(e) {
4292
+ function Na(e) {
4242
4293
  return typeof e == "boolean" ? e : void 0;
4243
4294
  }
4244
- async function Da(e) {
4295
+ async function Pa(e) {
4245
4296
  await q("files.discard", { file_id: e });
4246
4297
  }
4247
- function Oa(e, t, n) {
4298
+ function Fa(e, t, n) {
4248
4299
  if (n && e.size > n) return {
4249
4300
  code: "FILE_TOO_LARGE",
4250
- message: `File is ${Aa(e.size)}, max ${Aa(n)}`
4301
+ message: `File is ${La(e.size)}, max ${La(n)}`
4251
4302
  };
4252
4303
  if (t && t.length > 0) {
4253
4304
  let n = e.type || "application/octet-stream";
4254
- if (!t.some((e) => ka(e, n))) return {
4305
+ if (!t.some((e) => Ia(e, n))) return {
4255
4306
  code: "MIME_NOT_ACCEPTED",
4256
4307
  message: `File type ${n} is not accepted`
4257
4308
  };
4258
4309
  }
4259
4310
  return null;
4260
4311
  }
4261
- function ka(e, t) {
4312
+ function Ia(e, t) {
4262
4313
  if (e === "*/*" || e === "*") return !0;
4263
4314
  if (e.endsWith("/*")) {
4264
4315
  let n = e.slice(0, e.length - 1);
@@ -4266,7 +4317,7 @@ function ka(e, t) {
4266
4317
  }
4267
4318
  return e === t;
4268
4319
  }
4269
- function Aa(e) {
4320
+ function La(e) {
4270
4321
  if (e < 1024) return `${e} B`;
4271
4322
  let t = [
4272
4323
  "KB",
@@ -4278,7 +4329,7 @@ function Aa(e) {
4278
4329
  }
4279
4330
  //#endregion
4280
4331
  //#region src/components/file-widgets/draft-scope.tsx
4281
- var ja = r({
4332
+ var Ra = r({
4282
4333
  registerDraft() {},
4283
4334
  unregisterDraft() {},
4284
4335
  hasDraft() {
@@ -4287,7 +4338,7 @@ var ja = r({
4287
4338
  flushAllDrafts: async () => {},
4288
4339
  markCommitted() {}
4289
4340
  });
4290
- function Ma({ children: e }) {
4341
+ function za({ children: e }) {
4291
4342
  let t = d(/* @__PURE__ */ new Map()), n = u(() => ({
4292
4343
  registerDraft(e) {
4293
4344
  t.current.set(e.fileId, e);
@@ -4306,16 +4357,16 @@ function Ma({ children: e }) {
4306
4357
  t.current.clear(), await Promise.allSettled(e.map((e) => Promise.resolve(e.discard())));
4307
4358
  }
4308
4359
  }), []);
4309
- return /* @__PURE__ */ v(ja.Provider, {
4360
+ return /* @__PURE__ */ v(Ra.Provider, {
4310
4361
  value: n,
4311
4362
  children: e
4312
4363
  });
4313
4364
  }
4314
- function Na() {
4315
- return s(ja);
4365
+ function Ba() {
4366
+ return s(Ra);
4316
4367
  }
4317
- function Pa() {
4318
- let e = Na();
4368
+ function Va() {
4369
+ let e = Ba();
4319
4370
  return {
4320
4371
  register: o((t, n) => {
4321
4372
  e.registerDraft({
@@ -4334,17 +4385,17 @@ function Pa() {
4334
4385
  }
4335
4386
  //#endregion
4336
4387
  //#region src/components/fields/RichTextField.tsx
4337
- function Fa(t) {
4338
- let { field: n, entityCode: r, fieldName: i, value: a, mode: o, onChange: s, record: c, compact: l, fieldId: p } = t, m = d(null), h = d(null), g = d(/* @__PURE__ */ new Map()), _ = d(/* @__PURE__ */ new Set()), [b, x] = f(0), [S, C] = f(null), { register: w, unregister: E } = Pa(), D = c?.$files?.[i], O = u(() => ua(a, D), [D, a]), k = O.markdown, A = n.files?.accepts, ee = n.files?.max_size_bytes, j = (e, t = O.files) => {
4339
- let n = new Set(ma(e)), r = [];
4388
+ function Ha(t) {
4389
+ let { field: n, entityCode: r, fieldName: i, value: a, mode: o, onChange: s, record: c, compact: l, fieldId: p } = t, m = d(null), h = d(null), g = d(/* @__PURE__ */ new Map()), _ = d(/* @__PURE__ */ new Set()), [b, x] = f(0), [S, C] = f(null), { register: w, unregister: E } = Va(), D = c?.$files?.[i], O = u(() => _a(a, D), [D, a]), k = O.markdown, A = n.files?.accepts, ee = n.files?.max_size_bytes, j = (e, t = O.files) => {
4390
+ let n = new Set(xa(e)), r = [];
4340
4391
  for (let e of _.current) n.has(e) || r.push(e);
4341
4392
  if (r.length > 0) {
4342
4393
  for (let e of r) {
4343
- _.current.delete(e), E(e), Da(e).catch(() => {});
4394
+ _.current.delete(e), E(e), Pa(e).catch(() => {});
4344
4395
  let t = g.current.get(e);
4345
4396
  t && (URL.revokeObjectURL(t), g.current.delete(e));
4346
4397
  }
4347
- s?.(fa({
4398
+ s?.(ya({
4348
4399
  markdown: e,
4349
4400
  files: t
4350
4401
  }, r));
@@ -4356,7 +4407,7 @@ function Fa(t) {
4356
4407
  });
4357
4408
  }, te = (e, t, n) => {
4358
4409
  let r = m.current, i = r?.selectionStart ?? e.markdown.length, a = r?.selectionEnd ?? e.markdown.length;
4359
- j(`${e.markdown.slice(0, i)}${t}${e.markdown.slice(a)}`, n ? da(e, n).files : e.files), requestAnimationFrame(() => {
4410
+ j(`${e.markdown.slice(0, i)}${t}${e.markdown.slice(a)}`, n ? va(e, n).files : e.files), requestAnimationFrame(() => {
4360
4411
  if (!r) return;
4361
4412
  let e = i + t.length;
4362
4413
  r.focus(), r.setSelectionRange(e, e);
@@ -4371,28 +4422,28 @@ function Fa(t) {
4371
4422
  files: O.files
4372
4423
  };
4373
4424
  for (let e of t) {
4374
- let n = Oa(e, A, ee);
4425
+ let n = Fa(e, A, ee);
4375
4426
  if (n) {
4376
4427
  C(n.message), x((e) => e - 1);
4377
4428
  continue;
4378
4429
  }
4379
4430
  try {
4380
- let n = await va({
4431
+ let n = await Ta({
4381
4432
  file: e,
4382
4433
  entityCode: r,
4383
4434
  fieldCode: i
4384
4435
  }), o = e.type.startsWith("image/") ? URL.createObjectURL(e) : void 0;
4385
4436
  o && g.current.set(n.id, o);
4386
- let s = La(n, o);
4387
- if (w(n.id, () => Da(n.id)), _.current.add(n.id), t.length === 1) {
4388
- let e = Ia(a.markdown, ga(s));
4389
- te(a, e, s), a = da({
4437
+ let s = Wa(n, o);
4438
+ if (w(n.id, () => Pa(n.id)), _.current.add(n.id), t.length === 1) {
4439
+ let e = Ua(a.markdown, Ca(s));
4440
+ te(a, e, s), a = va({
4390
4441
  markdown: `${a.markdown}${e}`,
4391
4442
  files: a.files
4392
4443
  }, s);
4393
4444
  } else {
4394
- let e = Ia(a.markdown, ga(s));
4395
- a = da({
4445
+ let e = Ua(a.markdown, Ca(s));
4446
+ a = va({
4396
4447
  markdown: `${a.markdown}${e}`,
4397
4448
  files: a.files
4398
4449
  }, s), j(a.markdown, a.files);
@@ -4534,10 +4585,10 @@ function Fa(t) {
4534
4585
  ]
4535
4586
  });
4536
4587
  }
4537
- function Ia(e, t) {
4588
+ function Ua(e, t) {
4538
4589
  return e ? e.endsWith("\n\n") ? t : e.endsWith("\n") ? `\n${t}` : `\n\n${t}` : `${t}\n`;
4539
4590
  }
4540
- function La(e, t) {
4591
+ function Wa(e, t) {
4541
4592
  return {
4542
4593
  id: e.id,
4543
4594
  filename: e.filename,
@@ -4552,8 +4603,8 @@ function La(e, t) {
4552
4603
  }
4553
4604
  //#endregion
4554
4605
  //#region src/components/fields/cells/factories/text.ts
4555
- var Ra = () => (e) => e == null || e === "" ? "—" : F(e), za = (e) => {
4556
- let { field: t, fieldName: n, locale: r = "en" } = e, i = Ba(t, n, r);
4606
+ var Ga = () => (e) => e == null || e === "" ? "—" : F(e), Ka = (e) => {
4607
+ let { field: t, fieldName: n, locale: r = "en" } = e, i = qa(t, n, r);
4557
4608
  return (e) => {
4558
4609
  if (e == null) return "—";
4559
4610
  let t = !!e;
@@ -4564,7 +4615,7 @@ var Ra = () => (e) => e == null || e === "" ? "—" : F(e), za = (e) => {
4564
4615
  });
4565
4616
  };
4566
4617
  };
4567
- function Ba(e, t, n) {
4618
+ function qa(e, t, n) {
4568
4619
  if (e.display?.bool_labels) return {
4569
4620
  trueLabel: I(e.display.bool_labels.true, n) || "Yes",
4570
4621
  falseLabel: I(e.display.bool_labels.false, n) || "No"
@@ -4585,14 +4636,14 @@ function Ba(e, t, n) {
4585
4636
  };
4586
4637
  }
4587
4638
  if (t.startsWith("is_")) {
4588
- let e = Va(t.slice(3));
4639
+ let e = Ja(t.slice(3));
4589
4640
  return {
4590
4641
  trueLabel: e,
4591
4642
  falseLabel: `Not ${e}`
4592
4643
  };
4593
4644
  }
4594
4645
  if (t.startsWith("has_")) {
4595
- let e = Va(t.slice(4));
4646
+ let e = Ja(t.slice(4));
4596
4647
  return {
4597
4648
  trueLabel: e,
4598
4649
  falseLabel: `No ${e}`
@@ -4603,12 +4654,12 @@ function Ba(e, t, n) {
4603
4654
  falseLabel: "No"
4604
4655
  };
4605
4656
  }
4606
- function Va(e) {
4657
+ function Ja(e) {
4607
4658
  return e.split("_").map((e) => e && e[0].toUpperCase() + e.slice(1)).join(" ");
4608
4659
  }
4609
4660
  //#endregion
4610
4661
  //#region src/components/fields/cells/factories/badge.tsx
4611
- var Ha = /* @__PURE__ */ new Set([
4662
+ var Ya = /* @__PURE__ */ new Set([
4612
4663
  "indigo",
4613
4664
  "emerald",
4614
4665
  "amber",
@@ -4618,17 +4669,17 @@ var Ha = /* @__PURE__ */ new Set([
4618
4669
  "slate",
4619
4670
  "teal"
4620
4671
  ]);
4621
- function Ua(e) {
4622
- return e && Ha.has(e) ? e : "slate";
4672
+ function Xa(e) {
4673
+ return e && Ya.has(e) ? e : "slate";
4623
4674
  }
4624
- var Wa = (e) => {
4675
+ var Za = (e) => {
4625
4676
  let { field: t, locale: n = "en" } = e, r = /* @__PURE__ */ new Map();
4626
4677
  if (t.values) for (let e of t.values) r.set(e.code, {
4627
- tone: Ua(e.color),
4678
+ tone: Xa(e.color),
4628
4679
  label: I(e.name, n) || e.code
4629
4680
  });
4630
4681
  if (t.display?.value_map) for (let [e, i] of Object.entries(t.display.value_map)) {
4631
- let t = r.get(e), a = i.color ? Ua(i.color) : t?.tone ?? "slate", o = (i.label ? I(i.label, n) : "") || t?.label || e;
4682
+ let t = r.get(e), a = i.color ? Xa(i.color) : t?.tone ?? "slate", o = (i.label ? I(i.label, n) : "") || t?.label || e;
4632
4683
  r.set(e, {
4633
4684
  tone: a,
4634
4685
  label: o
@@ -4643,7 +4694,7 @@ var Wa = (e) => {
4643
4694
  children: n?.label ?? t
4644
4695
  });
4645
4696
  };
4646
- }, Ga = /* @__PURE__ */ new Set([
4697
+ }, Qa = /* @__PURE__ */ new Set([
4647
4698
  "indigo",
4648
4699
  "emerald",
4649
4700
  "amber",
@@ -4653,13 +4704,13 @@ var Wa = (e) => {
4653
4704
  "slate",
4654
4705
  "teal"
4655
4706
  ]);
4656
- function Ka(e) {
4657
- return e && Ga.has(e) ? e : "slate";
4707
+ function $a(e) {
4708
+ return e && Qa.has(e) ? e : "slate";
4658
4709
  }
4659
- var qa = (e) => {
4710
+ var eo = (e) => {
4660
4711
  let { entity: t, locale: n = "en" } = e, r = /* @__PURE__ */ new Map();
4661
4712
  if (t?.status_groups) for (let e of Object.values(t.status_groups)) for (let t of e.statuses) r.set(t.code, {
4662
- tone: Ka(t.color),
4713
+ tone: $a(t.color),
4663
4714
  label: I(t.name, n) || t.code
4664
4715
  });
4665
4716
  return (e) => {
@@ -4671,7 +4722,7 @@ var qa = (e) => {
4671
4722
  children: n?.label ?? t
4672
4723
  });
4673
4724
  };
4674
- }, Ja = /* @__PURE__ */ new Set([
4725
+ }, to = /* @__PURE__ */ new Set([
4675
4726
  "indigo",
4676
4727
  "emerald",
4677
4728
  "amber",
@@ -4681,14 +4732,14 @@ var qa = (e) => {
4681
4732
  "slate",
4682
4733
  "teal"
4683
4734
  ]);
4684
- function Ya(e) {
4685
- return e && Ja.has(e) ? e : null;
4735
+ function no(e) {
4736
+ return e && to.has(e) ? e : null;
4686
4737
  }
4687
- var Xa = (e) => {
4738
+ var ro = (e) => {
4688
4739
  let { field: t, locale: n = "en" } = e, r = /* @__PURE__ */ new Map();
4689
4740
  if (t.display?.value_map) for (let [e, i] of Object.entries(t.display.value_map)) r.set(e, {
4690
4741
  label: i.label && I(i.label, n) || e,
4691
- tone: Ya(i.color)
4742
+ tone: no(i.color)
4692
4743
  });
4693
4744
  return (e) => !Array.isArray(e) || e.length === 0 ? "—" : /* @__PURE__ */ v("span", {
4694
4745
  style: {
@@ -4705,23 +4756,23 @@ var Xa = (e) => {
4705
4756
  }, `${n}-${t}`) : /* @__PURE__ */ v(M, { children: i?.label ?? n }, `${n}-${t}`);
4706
4757
  })
4707
4758
  });
4708
- }, Za = () => (e) => {
4759
+ }, io = () => (e) => {
4709
4760
  if (e == null || e === "") return "—";
4710
- let { text: t, absolute: n } = Si(typeof e == "string" ? e : F(e));
4761
+ let { text: t, absolute: n } = ki(typeof e == "string" ? e : F(e));
4711
4762
  return /* @__PURE__ */ v("span", {
4712
4763
  title: n,
4713
4764
  children: t
4714
4765
  });
4715
- }, Qa = () => (e) => e == null || e === "" ? "—" : xi(typeof e == "string" ? e : F(e)), $a = 60 * 1e3, eo = 300 * 1e3, to = () => (e) => {
4766
+ }, ao = () => (e) => e == null || e === "" ? "—" : Oi(typeof e == "string" ? e : F(e)), oo = 60 * 1e3, so = 300 * 1e3, co = () => (e) => {
4716
4767
  if (e == null || e === "") return "—";
4717
4768
  let t = typeof e == "string" ? e : F(e), n = new Date(t);
4718
4769
  if (isNaN(n.getTime())) return t;
4719
- let r = xi(t), i = Date.now() - n.getTime();
4770
+ let r = Oi(t), i = Date.now() - n.getTime();
4720
4771
  if (i <= 0) return /* @__PURE__ */ y("span", {
4721
4772
  title: r,
4722
4773
  children: ["in ", S(n, /* @__PURE__ */ new Date(), { addSuffix: !1 })]
4723
4774
  });
4724
- if (i <= $a) return /* @__PURE__ */ v("span", {
4775
+ if (i <= oo) return /* @__PURE__ */ v("span", {
4725
4776
  title: r,
4726
4777
  children: /* @__PURE__ */ v(D, {
4727
4778
  tone: "slate",
@@ -4733,13 +4784,13 @@ var Xa = (e) => {
4733
4784
  return /* @__PURE__ */ v("span", {
4734
4785
  title: r,
4735
4786
  children: /* @__PURE__ */ y(D, {
4736
- tone: i <= eo ? "amber" : "rose",
4787
+ tone: i <= so ? "amber" : "rose",
4737
4788
  size: "xs",
4738
4789
  children: ["overdue ", a]
4739
4790
  })
4740
4791
  });
4741
- }, no = (e) => {
4742
- let { field: t, locale: n = "en" } = e, r = t.display?.currency || "USD", i = t.display?.currency_field, a = ro(t.display?.currency_display), o = io(typeof t.scale == "number" ? t.scale : 2, 0, 6), s = /* @__PURE__ */ new Map();
4792
+ }, lo = (e) => {
4793
+ let { field: t, locale: n = "en" } = e, r = t.display?.currency || "USD", i = t.display?.currency_field, a = uo(t.display?.currency_display), o = fo(typeof t.scale == "number" ? t.scale : 2, 0, 6), s = /* @__PURE__ */ new Map();
4743
4794
  return (e, t = {}) => {
4744
4795
  if (e == null || e === "") return "—";
4745
4796
  let c = typeof e == "number" ? e : Number(e);
@@ -4754,7 +4805,7 @@ var Xa = (e) => {
4754
4805
  }), s.set(d, f)), f.format(c);
4755
4806
  };
4756
4807
  };
4757
- function ro(e) {
4808
+ function uo(e) {
4758
4809
  switch (e) {
4759
4810
  case "narrow_symbol": return "narrowSymbol";
4760
4811
  case "code":
@@ -4763,16 +4814,16 @@ function ro(e) {
4763
4814
  default: return "symbol";
4764
4815
  }
4765
4816
  }
4766
- function io(e, t, n) {
4817
+ function fo(e, t, n) {
4767
4818
  return e < t ? t : e > n ? n : e;
4768
4819
  }
4769
4820
  //#endregion
4770
4821
  //#region src/components/fields/cells/factories/refLink.tsx
4771
- var ao = (e) => {
4772
- let { field: n, entities: r, screens: i, refs: a, surface: o } = e, s = n.ref?.entity, c = s ? r?.[s] : void 0, l = typeof a == "function" ? a : () => a, u = o === "detail", d = c?.display?.icon, f = n.display?.ref_display_field ?? n.ref?.display?.field ?? c?.display?.display_field, p = c?.detail_screen, m = (p ? i?.[p] : void 0)?.route;
4822
+ var po = (e) => {
4823
+ let { field: n, entities: r, screens: i, refs: a, surface: o } = e, s = n.ref?.entity, c = s ? r?.[s] : void 0, l = typeof a == "function" ? a : () => a, u = o === "detail", d = c?.display?.icon, f = n.display?.ref_display_field || "$display", p = c?.detail_screen, m = (p ? i?.[p] : void 0)?.route;
4773
4824
  return (e, n) => {
4774
4825
  if (e == null || e === "") return "—";
4775
- let r = F(e), i = oo(r, s, l(), f), a = m ? m.replace(":id", encodeURIComponent(r)) : void 0;
4826
+ let r = F(e), i = mo(r, s, l(), f), a = m ? m.replace(":id", encodeURIComponent(r)) : void 0;
4776
4827
  if (u) {
4777
4828
  let e = /* @__PURE__ */ y(_, { children: [d && /* @__PURE__ */ v("span", {
4778
4829
  style: {
@@ -4814,29 +4865,29 @@ var ao = (e) => {
4814
4865
  }) : i;
4815
4866
  };
4816
4867
  };
4817
- function oo(e, t, n, r) {
4868
+ function mo(e, t, n, r) {
4818
4869
  let i = t && n ? n[t]?.[e] : void 0;
4819
4870
  return i ? L(i, r, e) : e;
4820
4871
  }
4821
4872
  //#endregion
4822
4873
  //#region src/components/fields/cells/factories/url-helpers.ts
4823
- var so = /^(https?|ftps?|ssh|mailto|tel):/i, co = /^(info|name|tech|site|cloud|online|store|shop|blog|space|world|link|live|page|zone|life|team|work|host|land|news|wiki|mobi|coop|aero|asia)$/i;
4824
- function lo(e) {
4825
- return /^[a-z]{2,3}$/i.test(e) || co.test(e);
4874
+ var ho = /^(https?|ftps?|ssh|mailto|tel):/i, go = /^(info|name|tech|site|cloud|online|store|shop|blog|space|world|link|live|page|zone|life|team|work|host|land|news|wiki|mobi|coop|aero|asia)$/i;
4875
+ function _o(e) {
4876
+ return /^[a-z]{2,3}$/i.test(e) || go.test(e);
4826
4877
  }
4827
- function uo(e) {
4878
+ function vo(e) {
4828
4879
  if (!e.includes(".")) return !1;
4829
4880
  let t = e.split(".");
4830
4881
  if (t.length < 3) return !0;
4831
4882
  let n = t[0].toLowerCase();
4832
- return /^(com|org|net|edu|gov)$/.test(n) ? !1 : /^(io|app|dev)$/.test(n) ? lo(t[t.length - 1]) : !0;
4883
+ return /^(com|org|net|edu|gov)$/.test(n) ? !1 : /^(io|app|dev)$/.test(n) ? _o(t[t.length - 1]) : !0;
4833
4884
  }
4834
- function fo(e) {
4835
- if (so.test(e)) return e;
4885
+ function yo(e) {
4886
+ if (ho.test(e)) return e;
4836
4887
  let t = e.match(/^([a-z][a-z0-9+.-]*):/i);
4837
4888
  if (t) {
4838
4889
  let n = t[1], r = e.slice(t[0].length);
4839
- if (/^\d+([/?#]|$)/.test(r) && uo(n)) {
4890
+ if (/^\d+([/?#]|$)/.test(r) && vo(n)) {
4840
4891
  let t = parseInt(r, 10);
4841
4892
  if (t >= 1 && t <= 65535) return `https://${e}`;
4842
4893
  }
@@ -4844,14 +4895,14 @@ function fo(e) {
4844
4895
  }
4845
4896
  return `https://${e}`;
4846
4897
  }
4847
- function po(e) {
4898
+ function bo(e) {
4848
4899
  try {
4849
4900
  return new URL(e).hostname.replace(/^www\./i, "") || null;
4850
4901
  } catch {
4851
4902
  return null;
4852
4903
  }
4853
4904
  }
4854
- function mo(e, t) {
4905
+ function xo(e, t) {
4855
4906
  if (t !== "linkedin.com") return null;
4856
4907
  try {
4857
4908
  let t = new URL(e).pathname.match(/^\/(in|company|school)\/([^/]+)/i);
@@ -4859,7 +4910,7 @@ function mo(e, t) {
4859
4910
  } catch {}
4860
4911
  return null;
4861
4912
  }
4862
- function ho(e) {
4913
+ function So(e) {
4863
4914
  try {
4864
4915
  return new URL(e), !0;
4865
4916
  } catch {
@@ -4868,7 +4919,7 @@ function ho(e) {
4868
4919
  }
4869
4920
  //#endregion
4870
4921
  //#region src/components/fields/cells/factories/host-icons.tsx
4871
- function go(e, t = "0 0 24 24") {
4922
+ function Co(e, t = "0 0 24 24") {
4872
4923
  return (n) => /* @__PURE__ */ v("svg", {
4873
4924
  width: 16,
4874
4925
  height: 16,
@@ -4884,11 +4935,11 @@ function go(e, t = "0 0 24 24") {
4884
4935
  children: e
4885
4936
  });
4886
4937
  }
4887
- var _o = go(/* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("circle", {
4938
+ var wo = Co(/* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("circle", {
4888
4939
  cx: "12",
4889
4940
  cy: "12",
4890
4941
  r: "9"
4891
- }), /* @__PURE__ */ v("path", { d: "M3 12h18M12 3c3 3 3 15 0 18-3-3-3-15 0-18" })] })), vo = (e) => /* @__PURE__ */ v("svg", {
4942
+ }), /* @__PURE__ */ v("path", { d: "M3 12h18M12 3c3 3 3 15 0 18-3-3-3-15 0-18" })] })), To = (e) => /* @__PURE__ */ v("svg", {
4892
4943
  width: 16,
4893
4944
  height: 16,
4894
4945
  viewBox: "0 0 24 24",
@@ -4897,7 +4948,7 @@ var _o = go(/* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("circle", {
4897
4948
  style: { flexShrink: 0 },
4898
4949
  ...e,
4899
4950
  children: /* @__PURE__ */ v("path", { d: "M20.45 20.45h-3.55v-5.57c0-1.33-.02-3.04-1.85-3.04-1.85 0-2.13 1.45-2.13 2.94v5.67H9.36V9h3.41v1.56h.05c.48-.9 1.64-1.85 3.37-1.85 3.6 0 4.27 2.37 4.27 5.46v6.28zM5.34 7.43a2.06 2.06 0 1 1 0-4.12 2.06 2.06 0 0 1 0 4.12zM7.12 20.45H3.56V9h3.56v11.45zM22.22 0H1.77C.79 0 0 .77 0 1.72v20.56C0 23.23.79 24 1.77 24h20.45c.98 0 1.78-.77 1.78-1.72V1.72C24 .77 23.2 0 22.22 0z" })
4900
- }), yo = (e) => /* @__PURE__ */ v("svg", {
4951
+ }), Eo = (e) => /* @__PURE__ */ v("svg", {
4901
4952
  width: 16,
4902
4953
  height: 16,
4903
4954
  viewBox: "0 0 24 24",
@@ -4906,7 +4957,7 @@ var _o = go(/* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("circle", {
4906
4957
  style: { flexShrink: 0 },
4907
4958
  ...e,
4908
4959
  children: /* @__PURE__ */ v("path", { d: "M12 .5a11.5 11.5 0 0 0-3.64 22.41c.58.1.79-.25.79-.56 0-.27-.01-1-.02-1.96-3.21.7-3.89-1.55-3.89-1.55-.52-1.34-1.28-1.7-1.28-1.7-1.05-.72.08-.7.08-.7 1.16.08 1.77 1.2 1.77 1.2 1.03 1.77 2.71 1.26 3.37.96.1-.75.4-1.26.73-1.55-2.56-.29-5.26-1.28-5.26-5.71 0-1.26.45-2.3 1.19-3.11-.12-.29-.52-1.46.11-3.05 0 0 .97-.31 3.18 1.19a11.05 11.05 0 0 1 5.79 0c2.21-1.5 3.18-1.19 3.18-1.19.63 1.59.23 2.76.11 3.05.74.81 1.19 1.85 1.19 3.11 0 4.44-2.71 5.42-5.29 5.7.41.36.78 1.07.78 2.16 0 1.56-.01 2.81-.01 3.19 0 .31.21.68.8.56A11.5 11.5 0 0 0 12 .5z" })
4909
- }), bo = (e) => /* @__PURE__ */ v("svg", {
4960
+ }), Do = (e) => /* @__PURE__ */ v("svg", {
4910
4961
  width: 16,
4911
4962
  height: 16,
4912
4963
  viewBox: "0 0 24 24",
@@ -4915,7 +4966,7 @@ var _o = go(/* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("circle", {
4915
4966
  style: { flexShrink: 0 },
4916
4967
  ...e,
4917
4968
  children: /* @__PURE__ */ v("path", { d: "M18.244 2H21.5l-7.62 8.71L23 22h-7.05l-5.52-7.21L4.07 22H.81l8.18-9.34L1 2h7.22l5 6.59L18.244 2zm-2.47 18h1.95L7.32 4h-2.1l10.55 16z" })
4918
- }), xo = (e) => /* @__PURE__ */ v("svg", {
4969
+ }), Oo = (e) => /* @__PURE__ */ v("svg", {
4919
4970
  width: 16,
4920
4971
  height: 16,
4921
4972
  viewBox: "0 0 24 24",
@@ -4924,7 +4975,7 @@ var _o = go(/* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("circle", {
4924
4975
  style: { flexShrink: 0 },
4925
4976
  ...e,
4926
4977
  children: /* @__PURE__ */ v("path", { d: "M23.5 6.2a3 3 0 0 0-2.1-2.1C19.5 3.6 12 3.6 12 3.6s-7.5 0-9.4.5A3 3 0 0 0 .5 6.2C0 8.1 0 12 0 12s0 3.9.5 5.8a3 3 0 0 0 2.1 2.1c1.9.5 9.4.5 9.4.5s7.5 0 9.4-.5a3 3 0 0 0 2.1-2.1c.5-1.9.5-5.8.5-5.8s0-3.9-.5-5.8zM9.6 15.6V8.4l6.2 3.6-6.2 3.6z" })
4927
- }), So = (e) => /* @__PURE__ */ v("svg", {
4978
+ }), ko = (e) => /* @__PURE__ */ v("svg", {
4928
4979
  width: 16,
4929
4980
  height: 16,
4930
4981
  viewBox: "0 0 24 24",
@@ -4933,7 +4984,7 @@ var _o = go(/* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("circle", {
4933
4984
  style: { flexShrink: 0 },
4934
4985
  ...e,
4935
4986
  children: /* @__PURE__ */ v("path", { d: "M24 5.45v13.1A1.45 1.45 0 0 1 22.55 20H19.5V9.27L12 14.7 4.5 9.27V20H1.45A1.45 1.45 0 0 1 0 18.55V5.45A1.45 1.45 0 0 1 1.45 4h.5l10.05 7.27L22.05 4h.5A1.45 1.45 0 0 1 24 5.45z" })
4936
- }), Co = (e) => /* @__PURE__ */ y("svg", {
4987
+ }), Ao = (e) => /* @__PURE__ */ y("svg", {
4937
4988
  width: 16,
4938
4989
  height: 16,
4939
4990
  viewBox: "0 0 24 24",
@@ -4958,7 +5009,7 @@ var _o = go(/* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("circle", {
4958
5009
  d: "M15.17 18.96a2.52 2.52 0 1 1-2.52 2.52v-2.52h2.52zm0-1.27a2.52 2.52 0 1 1 0-5.04h6.31a2.52 2.52 0 1 1 0 5.04h-6.31z"
4959
5010
  })
4960
5011
  ]
4961
- }), wo = (e) => /* @__PURE__ */ v("svg", {
5012
+ }), jo = (e) => /* @__PURE__ */ v("svg", {
4962
5013
  width: 16,
4963
5014
  height: 16,
4964
5015
  viewBox: "0 0 24 24",
@@ -4967,39 +5018,39 @@ var _o = go(/* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("circle", {
4967
5018
  style: { flexShrink: 0 },
4968
5019
  ...e,
4969
5020
  children: /* @__PURE__ */ v("path", { d: "M4.46 3.83 14.94 3a3.7 3.7 0 0 1 2.5.62l3 2.16a1.4 1.4 0 0 1 .56 1.31v13.06a1.7 1.7 0 0 1-1.66 1.7l-12.5.78a2.4 2.4 0 0 1-1.85-.62L2.5 19.7a1.7 1.7 0 0 1-.5-1.2V5.16c0-.74.6-1.27 1.46-1.33l1-.01zm.46 1.86c-.31 0-.46.16-.46.47v12.25c0 .31.16.47.46.47l11.62-.7c.31 0 .46-.16.46-.47V6c0-.32-.16-.47-.46-.47L4.92 5.7zm5.57 2.32c.16 0 .31.16.31.31v.46l3.7.23c.31 0 .46.16.46.47v8.32c0 .31-.16.47-.46.47l-3.7.23c-.31 0-.46-.16-.46-.47V8.78c0-.16.15-.32.15-.46l-.04-.31z" })
4970
- }), To = {
4971
- "linkedin.com": vo,
4972
- "github.com": yo,
4973
- "x.com": bo,
4974
- "twitter.com": bo,
4975
- "youtube.com": xo,
4976
- "youtu.be": xo,
4977
- "gmail.com": So,
4978
- "mail.google.com": So,
4979
- "slack.com": Co,
4980
- "notion.so": wo,
4981
- "notion.com": wo
5021
+ }), Mo = {
5022
+ "linkedin.com": To,
5023
+ "github.com": Eo,
5024
+ "x.com": Do,
5025
+ "twitter.com": Do,
5026
+ "youtube.com": Oo,
5027
+ "youtu.be": Oo,
5028
+ "gmail.com": ko,
5029
+ "mail.google.com": ko,
5030
+ "slack.com": Ao,
5031
+ "notion.so": jo,
5032
+ "notion.com": jo
4982
5033
  };
4983
- function Eo(e, t) {
5034
+ function No(e, t) {
4984
5035
  return !e || t === "none" ? null : t === "google" ? `https://www.google.com/s2/favicons?domain=${encodeURIComponent(e)}&sz=32` : `https://${e}/favicon.ico`;
4985
5036
  }
4986
- var Do = {
5037
+ var Po = {
4987
5038
  width: 16,
4988
5039
  height: 16,
4989
5040
  flexShrink: 0,
4990
5041
  objectFit: "contain"
4991
5042
  };
4992
- function Oo({ domain: e }) {
4993
- let t = ir((e) => e.faviconSource), n = e ? e.toLowerCase() : "", r = n ? To[n] : void 0;
5043
+ function Fo({ domain: e }) {
5044
+ let t = wr((e) => e.faviconSource), n = e ? e.toLowerCase() : "", r = n ? Mo[n] : void 0;
4994
5045
  if (r) return /* @__PURE__ */ v(r, {});
4995
- let i = Eo(n, t);
4996
- return i ? /* @__PURE__ */ v(ko, { src: i }) : /* @__PURE__ */ v(_o, {});
5046
+ let i = No(n, t);
5047
+ return i ? /* @__PURE__ */ v(Io, { src: i }) : /* @__PURE__ */ v(wo, {});
4997
5048
  }
4998
- function ko({ src: e }) {
5049
+ function Io({ src: e }) {
4999
5050
  let [t, n] = f(!1);
5000
5051
  return c(() => {
5001
5052
  n(!1);
5002
- }, [e]), t ? /* @__PURE__ */ v(_o, {}) : /* @__PURE__ */ v("img", {
5053
+ }, [e]), t ? /* @__PURE__ */ v(wo, {}) : /* @__PURE__ */ v("img", {
5003
5054
  src: e,
5004
5055
  alt: "",
5005
5056
  width: 16,
@@ -5007,7 +5058,7 @@ function ko({ src: e }) {
5007
5058
  loading: "lazy",
5008
5059
  decoding: "async",
5009
5060
  referrerPolicy: "no-referrer",
5010
- style: Do,
5061
+ style: Po,
5011
5062
  onError: () => n(!0)
5012
5063
  });
5013
5064
  }
@@ -5017,72 +5068,72 @@ var $ = /* @__PURE__ */ v("span", {
5017
5068
  color: "var(--text-4)"
5018
5069
  },
5019
5070
  children: "—"
5020
- }), Ao = {
5071
+ }), Lo = {
5021
5072
  display: "inline-flex",
5022
5073
  alignItems: "center",
5023
5074
  gap: 4,
5024
5075
  fontSize: 12.5,
5025
5076
  color: "var(--accent)",
5026
5077
  textDecoration: "none"
5027
- }, jo = { fontSize: 12.5 }, Mo = () => (t) => {
5078
+ }, Ro = { fontSize: 12.5 }, zo = () => (t) => {
5028
5079
  let n = t == null ? "" : F(t);
5029
5080
  if (!n) return $;
5030
- let r = fo(n);
5031
- if (r == null || !ho(r)) return /* @__PURE__ */ v("span", {
5032
- style: jo,
5081
+ let r = yo(n);
5082
+ if (r == null || !So(r)) return /* @__PURE__ */ v("span", {
5083
+ style: Ro,
5033
5084
  children: n
5034
5085
  });
5035
- let i = po(r), a = mo(r, i ?? "") ?? i ?? n;
5086
+ let i = bo(r), a = xo(r, i ?? "") ?? i ?? n;
5036
5087
  return /* @__PURE__ */ y("a", {
5037
5088
  href: r,
5038
5089
  target: "_blank",
5039
5090
  rel: "noopener noreferrer",
5040
5091
  title: n,
5041
5092
  className: "mono",
5042
- style: Ao,
5093
+ style: Lo,
5043
5094
  children: [
5044
- /* @__PURE__ */ v(Oo, { domain: i }),
5095
+ /* @__PURE__ */ v(Fo, { domain: i }),
5045
5096
  a,
5046
5097
  /* @__PURE__ */ v(e.external, { size: 11 })
5047
5098
  ]
5048
5099
  });
5049
- }, No = {
5100
+ }, Bo = {
5050
5101
  fontSize: 12.5,
5051
5102
  color: "var(--accent)",
5052
5103
  textDecoration: "none"
5053
- }, Po = () => (e) => {
5104
+ }, Vo = () => (e) => {
5054
5105
  let t = e == null ? "" : F(e);
5055
5106
  return t ? /* @__PURE__ */ v("a", {
5056
5107
  href: `mailto:${t}`,
5057
5108
  className: "mono",
5058
- style: No,
5109
+ style: Bo,
5059
5110
  children: t
5060
5111
  }) : $;
5061
- }, Fo = {
5112
+ }, Ho = {
5062
5113
  fontSize: 12.5,
5063
5114
  color: "var(--accent)",
5064
5115
  textDecoration: "none"
5065
- }, Io = { fontSize: 12.5 }, Lo = /^[+()\-.\s\d]+$/, Ro = () => (e) => {
5116
+ }, Uo = { fontSize: 12.5 }, Wo = /^[+()\-.\s\d]+$/, Go = () => (e) => {
5066
5117
  let t = e == null ? "" : F(e);
5067
5118
  if (!t) return $;
5068
5119
  let n = t.trim();
5069
- return Lo.test(n) ? /* @__PURE__ */ v("a", {
5120
+ return Wo.test(n) ? /* @__PURE__ */ v("a", {
5070
5121
  href: `tel:${n.replace(/\s+/g, "")}`,
5071
5122
  className: "mono",
5072
- style: Fo,
5123
+ style: Ho,
5073
5124
  children: t
5074
5125
  }) : /* @__PURE__ */ v("span", {
5075
- style: Io,
5126
+ style: Uo,
5076
5127
  children: t
5077
5128
  });
5078
- }, zo = {
5129
+ }, Ko = {
5079
5130
  fontSize: 12.5,
5080
5131
  fontVariantNumeric: "tabular-nums"
5081
- }, Bo = {
5132
+ }, qo = {
5082
5133
  color: "var(--text-3)",
5083
5134
  marginLeft: 4
5084
- }, Vo = { fontSize: 12.5 };
5085
- function Ho(e, t) {
5135
+ }, Jo = { fontSize: 12.5 };
5136
+ function Yo(e, t) {
5086
5137
  let n = e.trim();
5087
5138
  if (n === "" || n === "-") return n;
5088
5139
  let r = n.startsWith("-"), [i, a] = (r ? n.slice(1) : n).split("."), o;
@@ -5094,45 +5145,45 @@ function Ho(e, t) {
5094
5145
  let s = r ? `-${o}` : o;
5095
5146
  return a !== void 0 && (s += `.${a}`), s;
5096
5147
  }
5097
- var Uo = (e) => {
5148
+ var Xo = (e) => {
5098
5149
  let { field: t, fieldName: n, locale: r = "en" } = e, i = new Intl.NumberFormat(r), a = t.type === "decimal", o = t.unit ? t.unit.display || t.unit.storage : void 0;
5099
5150
  return (e, t) => {
5100
5151
  if (e == null) return $;
5101
5152
  let r = t.$units?.[n] || (o && !o.startsWith("$") ? o : void 0), s;
5102
- if (a && typeof e == "string") s = Ho(e, i);
5153
+ if (a && typeof e == "string") s = Yo(e, i);
5103
5154
  else {
5104
5155
  let t = typeof e == "number" ? e : Number(e);
5105
5156
  s = Number.isFinite(t) ? i.format(t) : null;
5106
5157
  }
5107
5158
  return s == null ? /* @__PURE__ */ v("span", {
5108
- style: Vo,
5159
+ style: Jo,
5109
5160
  children: "—"
5110
5161
  }) : /* @__PURE__ */ y("span", {
5111
5162
  className: "num",
5112
- style: zo,
5163
+ style: Ko,
5113
5164
  children: [s, r && /* @__PURE__ */ v("span", {
5114
- style: Bo,
5165
+ style: qo,
5115
5166
  children: r
5116
5167
  })]
5117
5168
  });
5118
5169
  };
5119
- }, Wo = { fontSize: 12.5 }, Go = () => (e) => e == null || e === "" ? $ : /* @__PURE__ */ v("code", {
5170
+ }, Zo = { fontSize: 12.5 }, Qo = () => (e) => e == null || e === "" ? $ : /* @__PURE__ */ v("code", {
5120
5171
  className: "mono",
5121
- style: Wo,
5172
+ style: Zo,
5122
5173
  children: F(e)
5123
- }), Ko = {
5174
+ }), $o = {
5124
5175
  display: "inline-flex",
5125
5176
  alignItems: "center",
5126
5177
  gap: 4,
5127
5178
  fontSize: 12.5,
5128
5179
  color: "var(--accent)",
5129
5180
  textDecoration: "none"
5130
- }, qo = { fontSize: 12.5 }, Jo = () => (t) => {
5181
+ }, es = { fontSize: 12.5 }, ts = () => (t) => {
5131
5182
  let n = t == null ? "" : F(t);
5132
5183
  if (!n) return $;
5133
- let r = fo(n);
5134
- return r == null || !ho(r) ? /* @__PURE__ */ v("span", {
5135
- style: qo,
5184
+ let r = yo(n);
5185
+ return r == null || !So(r) ? /* @__PURE__ */ v("span", {
5186
+ style: es,
5136
5187
  children: n
5137
5188
  }) : /* @__PURE__ */ y("a", {
5138
5189
  href: r,
@@ -5140,21 +5191,21 @@ var Uo = (e) => {
5140
5191
  rel: "noopener noreferrer",
5141
5192
  title: n,
5142
5193
  className: "mono",
5143
- style: Ko,
5194
+ style: $o,
5144
5195
  children: [n, /* @__PURE__ */ v(e.external, { size: 11 })]
5145
5196
  });
5146
- }, Yo = 400, Xo = 2e3;
5147
- function Zo(e) {
5148
- return Math.max(1, Math.min(typeof e == "number" && Number.isFinite(e) ? Math.floor(e) : Yo, Xo));
5197
+ }, ns = 400, rs = 2e3;
5198
+ function is(e) {
5199
+ return Math.max(1, Math.min(typeof e == "number" && Number.isFinite(e) ? Math.floor(e) : ns, rs));
5149
5200
  }
5150
- function Qo(e, t) {
5201
+ function as(e, t) {
5151
5202
  return e.length <= t ? e : `${e.slice(0, t)}...`;
5152
5203
  }
5153
- function $o(e, t, n, r = 0) {
5204
+ function os(e, t, n, r = 0) {
5154
5205
  if (e == null || e === "") return "";
5155
- if (typeof e == "string") return Qo(e, t);
5206
+ if (typeof e == "string") return as(e, t);
5156
5207
  if (typeof e == "number" || typeof e == "boolean") return String(e);
5157
- if (typeof e != "object") return Qo(F(e), t);
5208
+ if (typeof e != "object") return as(F(e), t);
5158
5209
  if (n.has(e)) return "[Circular]";
5159
5210
  if (r >= 3) return Array.isArray(e) ? "[...]" : "{...}";
5160
5211
  n.add(e);
@@ -5165,30 +5216,30 @@ function $o(e, t, n, r = 0) {
5165
5216
  a.push(a.length > 1 ? ",..." : "...");
5166
5217
  break;
5167
5218
  }
5168
- let f = $o(c, d, n, r + 1);
5219
+ let f = os(c, d, n, r + 1);
5169
5220
  if (a.push(u, f), a.join("").length >= t) {
5170
5221
  a.push(",...");
5171
5222
  break;
5172
5223
  }
5173
5224
  }
5174
- return a.push(i), n.delete(e), Qo(a.join(""), t);
5225
+ return a.push(i), n.delete(e), as(a.join(""), t);
5175
5226
  }
5176
- function es(e, t) {
5177
- return $o(e, t, /* @__PURE__ */ new WeakSet());
5227
+ function ss(e, t) {
5228
+ return os(e, t, /* @__PURE__ */ new WeakSet());
5178
5229
  }
5179
- var ts = (e) => {
5180
- let t = e.surface ?? "detail", n = Zo(e.field.display?.list_preview?.max_chars);
5230
+ var cs = (e) => {
5231
+ let t = e.surface ?? "detail", n = is(e.field.display?.list_preview?.max_chars);
5181
5232
  return (r) => {
5182
- if (Gi(r)) return $;
5233
+ if (Qi(r)) return $;
5183
5234
  if (t === "list") {
5184
- let e = es(r, n);
5235
+ let e = ss(r, n);
5185
5236
  return /* @__PURE__ */ v("span", {
5186
5237
  className: "font-mono text-xs text-muted-foreground",
5187
5238
  title: e,
5188
5239
  children: e
5189
5240
  });
5190
5241
  }
5191
- return /* @__PURE__ */ v(Ki, {
5242
+ return /* @__PURE__ */ v($i, {
5192
5243
  field: e.field,
5193
5244
  fieldName: e.fieldName,
5194
5245
  value: r,
@@ -5196,7 +5247,7 @@ var ts = (e) => {
5196
5247
  locale: e.locale
5197
5248
  });
5198
5249
  };
5199
- }, ns = [
5250
+ }, ls = [
5200
5251
  {
5201
5252
  pattern: /```[^\n]*\n?([\s\S]*?)```/g,
5202
5253
  replacement: "$1"
@@ -5259,13 +5310,13 @@ var ts = (e) => {
5259
5310
  replacement: ""
5260
5311
  }
5261
5312
  ];
5262
- function rs(e) {
5313
+ function us(e) {
5263
5314
  if (!e) return {
5264
5315
  text: "",
5265
5316
  isPlain: !0
5266
5317
  };
5267
5318
  let t = e, n = !1;
5268
- for (let e of ns) {
5319
+ for (let e of ls) {
5269
5320
  let r = t.replace(e.pattern, e.replacement);
5270
5321
  r !== t && e.structural !== !1 && (n = !0), t = r;
5271
5322
  }
@@ -5276,123 +5327,123 @@ function rs(e) {
5276
5327
  }
5277
5328
  //#endregion
5278
5329
  //#region src/components/fields/cells/factories/markdown.tsx
5279
- function is(e) {
5330
+ function ds(e) {
5280
5331
  return /* @__PURE__ */ v(li, { content: e });
5281
5332
  }
5282
- var as = (e) => {
5333
+ var fs = (e) => {
5283
5334
  let t = e.surface === "list";
5284
5335
  return (e) => {
5285
5336
  let n = e == null ? "" : F(e);
5286
5337
  if (!n) return $;
5287
- if (!t) return is(n);
5288
- let { text: r, isPlain: i } = rs(n);
5338
+ if (!t) return ds(n);
5339
+ let { text: r, isPlain: i } = us(n);
5289
5340
  return i ? /* @__PURE__ */ v("span", {
5290
5341
  title: r,
5291
5342
  children: r
5292
5343
  }) : /* @__PURE__ */ v(oe, {
5293
- content: is(n),
5344
+ content: ds(n),
5294
5345
  children: /* @__PURE__ */ v("span", {
5295
5346
  title: r,
5296
5347
  children: r
5297
5348
  })
5298
5349
  });
5299
5350
  };
5300
- }, os = "[SET]", ss = {
5351
+ }, ps = "[SET]", ms = {
5301
5352
  fontSize: 12.5,
5302
5353
  color: "var(--text-3)"
5303
- }, cs = {
5354
+ }, hs = {
5304
5355
  fontSize: 12.5,
5305
5356
  color: "var(--text-4)",
5306
5357
  fontStyle: "italic"
5307
- }, ls = () => (e) => e === os || typeof e == "string" && e !== "" ? /* @__PURE__ */ v("span", {
5358
+ }, gs = () => (e) => e === ps || typeof e == "string" && e !== "" ? /* @__PURE__ */ v("span", {
5308
5359
  className: "mono",
5309
- style: ss,
5310
- children: os
5360
+ style: ms,
5361
+ children: ps
5311
5362
  }) : /* @__PURE__ */ v("span", {
5312
- style: cs,
5363
+ style: hs,
5313
5364
  children: "Not set"
5314
5365
  });
5315
5366
  //#endregion
5316
5367
  //#region src/components/fields/cells/factories/richTextPreview.tsx
5317
- function us(e, t) {
5368
+ function _s(e, t) {
5318
5369
  return /* @__PURE__ */ v(li, {
5319
5370
  content: e,
5320
5371
  files: t
5321
5372
  });
5322
5373
  }
5323
- var ds = (e) => {
5374
+ var vs = (e) => {
5324
5375
  let { fieldName: t } = e, n = e.surface === "list";
5325
5376
  return (e, r) => {
5326
- let i = r?.$files?.[t], a = ua(e, i);
5377
+ let i = r?.$files?.[t], a = _a(e, i);
5327
5378
  if (!a.markdown) return $;
5328
- if (!n) return us(a.markdown, a.files);
5329
- let { text: o, isPlain: s } = rs(a.markdown);
5379
+ if (!n) return _s(a.markdown, a.files);
5380
+ let { text: o, isPlain: s } = us(a.markdown);
5330
5381
  return s ? /* @__PURE__ */ v("span", {
5331
5382
  title: o,
5332
5383
  children: o
5333
5384
  }) : /* @__PURE__ */ v(oe, {
5334
- content: us(a.markdown, a.files),
5385
+ content: _s(a.markdown, a.files),
5335
5386
  children: /* @__PURE__ */ v("span", {
5336
5387
  title: o,
5337
5388
  children: o
5338
5389
  })
5339
5390
  });
5340
5391
  };
5341
- }, fs = { fontSize: 12.5 }, ps = {
5392
+ }, ys = { fontSize: 12.5 }, bs = {
5342
5393
  fontSize: 12.5,
5343
5394
  whiteSpace: "pre-wrap",
5344
5395
  margin: 0
5345
5396
  };
5346
- function ms(e) {
5397
+ function xs(e) {
5347
5398
  return e == null ? {} : typeof e == "object" && !Array.isArray(e) ? e : typeof e == "string" ? { en: e } : {};
5348
5399
  }
5349
- function hs(e, t) {
5400
+ function Ss(e, t) {
5350
5401
  if (t && typeof e[t] == "string" && e[t] !== "") return [t, e[t]];
5351
5402
  for (let [t, n] of Object.entries(e)) if (typeof n == "string" && n !== "") return [t, n];
5352
5403
  return null;
5353
5404
  }
5354
5405
  //#endregion
5355
5406
  //#region src/components/fields/cells/registry.ts
5356
- var gs = {
5357
- text: Ra,
5358
- bool_pill: za,
5359
- badge: Wa,
5360
- status_pill: qa,
5361
- tag_list: Xa,
5362
- time_ago: Za,
5363
- timestamp_full: Qa,
5364
- next_run: to,
5365
- money: no,
5366
- ref_link: ao,
5367
- url: Mo,
5368
- email: Po,
5369
- phone: Ro,
5370
- number: Uo,
5371
- code: Go,
5372
- link: Jo,
5373
- json: ts,
5374
- markdown: as,
5375
- password_mask: ls,
5376
- rich_text_preview: ds,
5407
+ var Cs = {
5408
+ text: Ga,
5409
+ bool_pill: Ka,
5410
+ badge: Za,
5411
+ status_pill: eo,
5412
+ tag_list: ro,
5413
+ time_ago: io,
5414
+ timestamp_full: ao,
5415
+ next_run: co,
5416
+ money: lo,
5417
+ ref_link: po,
5418
+ url: zo,
5419
+ email: Vo,
5420
+ phone: Go,
5421
+ number: Xo,
5422
+ code: Qo,
5423
+ link: ts,
5424
+ json: cs,
5425
+ markdown: fs,
5426
+ password_mask: gs,
5427
+ rich_text_preview: vs,
5377
5428
  multilang_inline: (e) => {
5378
5429
  let { field: t, locale: n } = e, r = t.type === "multilang_text";
5379
5430
  return (e) => {
5380
- let t = hs(ms(e), n);
5431
+ let t = Ss(xs(e), n);
5381
5432
  if (!t) return r ? /* @__PURE__ */ v("p", {
5382
- style: ps,
5433
+ style: bs,
5383
5434
  children: "—"
5384
5435
  }) : /* @__PURE__ */ v("span", {
5385
- style: fs,
5436
+ style: ys,
5386
5437
  children: "—"
5387
5438
  });
5388
5439
  let [i, a] = t;
5389
5440
  return r ? /* @__PURE__ */ v("p", {
5390
- style: ps,
5441
+ style: bs,
5391
5442
  lang: i,
5392
5443
  dir: "auto",
5393
5444
  children: a
5394
5445
  }) : /* @__PURE__ */ v("span", {
5395
- style: fs,
5446
+ style: ys,
5396
5447
  lang: i,
5397
5448
  dir: "auto",
5398
5449
  children: a
@@ -5400,53 +5451,53 @@ var gs = {
5400
5451
  };
5401
5452
  }
5402
5453
  };
5403
- Object.keys(gs).sort();
5404
- function _s(e) {
5405
- let t = e.field.display?.widget ?? "text", n = gs[t];
5454
+ Object.keys(Cs).sort();
5455
+ function ws(e) {
5456
+ let t = e.field.display?.widget ?? "text", n = Cs[t];
5406
5457
  if (!n) throw Error(`resolveCellRenderer: no factory registered for widget "${t}" (field "${e.fieldName}"). The engine must stamp a smart default at YAML-load time; an unknown widget here indicates an out-of-sync allow-list.`);
5407
5458
  return n(e);
5408
5459
  }
5409
5460
  //#endregion
5410
5461
  //#region src/components/fields/index.tsx
5411
- var vs = {
5412
- string: fi,
5413
- text: pi,
5414
- rich_text: Fa,
5415
- int: Pi,
5416
- float: Pi,
5417
- decimal: Pi,
5418
- bool: ji,
5419
- timestamp: Ai,
5420
- date: Ai,
5421
- time: Ai,
5422
- enum: hi,
5423
- email: gi,
5424
- url: _i,
5425
- phone: vi,
5426
- uuid: fi,
5427
- bytes: fi,
5428
- ref: Hi,
5429
- json: Ki,
5430
- tags: fi,
5431
- string_array: aa,
5432
- int_array: sa,
5433
- uuid_array: aa,
5434
- multilang: Ji,
5435
- multilang_text: Xi,
5436
- structure: Zi,
5437
- secret: ta,
5438
- password: ra
5462
+ var Ts = {
5463
+ string: yi,
5464
+ text: bi,
5465
+ rich_text: Ha,
5466
+ int: Vi,
5467
+ float: Vi,
5468
+ decimal: Vi,
5469
+ bool: Ri,
5470
+ timestamp: Li,
5471
+ date: Li,
5472
+ time: Li,
5473
+ enum: Si,
5474
+ email: Ci,
5475
+ url: wi,
5476
+ phone: Ti,
5477
+ uuid: yi,
5478
+ bytes: yi,
5479
+ ref: Yi,
5480
+ json: $i,
5481
+ tags: yi,
5482
+ string_array: fa,
5483
+ int_array: ma,
5484
+ uuid_array: fa,
5485
+ multilang: ta,
5486
+ multilang_text: ra,
5487
+ structure: ia,
5488
+ secret: ca,
5489
+ password: ua
5439
5490
  };
5440
- for (let e of ui) if (!vs[e]) throw Error(`editRegistry: missing entry for FieldType "${e}". The TS union (types/fieldType.ts) and editRegistry must stay in sync with golang/internal/engine/types.go.`);
5441
- function ys(e) {
5442
- if (e.field.type === "json" && e.field.structure) return /* @__PURE__ */ v(Zi, { ...e });
5491
+ for (let e of _i) if (!Ts[e]) throw Error(`editRegistry: missing entry for FieldType "${e}". The TS union (types/fieldType.ts) and editRegistry must stay in sync with golang/internal/engine/types.go.`);
5492
+ function Es(e) {
5493
+ if (e.field.type === "json" && e.field.structure) return /* @__PURE__ */ v(ia, { ...e });
5443
5494
  if (e.mode === "edit") {
5444
- let t = vs[e.field.type];
5495
+ let t = Ts[e.field.type];
5445
5496
  if (!t) throw Error(`renderField: no edit-mode renderer for FieldType "${e.field.type}" (field "${e.fieldName}"). editRegistry must be total over FieldType; check types/fieldType.ts and components/fields/index.tsx.`);
5446
5497
  return /* @__PURE__ */ v(t, { ...e });
5447
5498
  }
5448
5499
  if (!e.field.display?.widget) throw Error(`renderField: display mode requires a non-empty field.display.widget (field "${e.fieldName}", type "${e.field.type}"). The engine must stamp a smart default; an empty widget here means the field bypassed ResolveDefaultWidgets.`);
5449
- return _s({
5500
+ return ws({
5450
5501
  field: e.field,
5451
5502
  fieldName: e.fieldName,
5452
5503
  surface: e.surface ?? "detail",
@@ -5459,98 +5510,98 @@ function ys(e) {
5459
5510
  }
5460
5511
  //#endregion
5461
5512
  //#region src/hooks/useUserLocale.ts
5462
- var bs = "en";
5463
- function xs() {
5513
+ var Ds = "en";
5514
+ function Os() {
5464
5515
  if (typeof navigator > "u") return;
5465
5516
  let e = navigator.language;
5466
5517
  if (e) return e.split("-")[0] || void 0;
5467
5518
  }
5468
- function Ss() {
5519
+ function ks() {
5469
5520
  let e = zn((e) => e.user), { data: t } = J(), n = e?.language;
5470
5521
  if (n && n.trim()) return n;
5471
5522
  let r = t?.languages?.[0]?.code;
5472
- return r && r.trim() ? r : xs() || bs;
5523
+ return r && r.trim() ? r : Os() || Ds;
5473
5524
  }
5474
5525
  //#endregion
5475
5526
  //#region src/lib/field-regions.ts
5476
- var Cs = /* @__PURE__ */ new Map();
5477
- function ws(e, t) {
5478
- return Cs.set(e, t), () => {
5479
- Cs.get(e) === t && Cs.delete(e);
5527
+ var As = /* @__PURE__ */ new Map();
5528
+ function js(e, t) {
5529
+ return As.set(e, t), () => {
5530
+ As.get(e) === t && As.delete(e);
5480
5531
  };
5481
5532
  }
5482
- function Ts(e) {
5483
- return Cs.get(e);
5533
+ function Ms(e) {
5534
+ return As.get(e);
5484
5535
  }
5485
5536
  //#endregion
5486
5537
  //#region src/lib/ui-actions.ts
5487
- var Es = /\$\{\s*([^}]+?)\s*\}/g, Ds = /^\s*\$\{\s*([^}]+?)\s*\}\s*$/, Os = Symbol("unresolved");
5488
- function ks(e, t) {
5489
- let n = e.match(Ds);
5538
+ var Ns = /\$\{\s*([^}]+?)\s*\}/g, Ps = /^\s*\$\{\s*([^}]+?)\s*\}\s*$/, Fs = Symbol("unresolved");
5539
+ function Is(e, t) {
5540
+ let n = e.match(Ps);
5490
5541
  if (n) {
5491
- let r = As(n[1], t);
5492
- return r === Os ? e : r;
5542
+ let r = Ls(n[1], t);
5543
+ return r === Fs ? e : r;
5493
5544
  }
5494
- return e.replace(Es, (e, n) => {
5495
- let r = As(n, t);
5496
- return r === Os ? e : F(r);
5545
+ return e.replace(Ns, (e, n) => {
5546
+ let r = Ls(n, t);
5547
+ return r === Fs ? e : F(r);
5497
5548
  });
5498
5549
  }
5499
- function As(e, t) {
5500
- if (e === "now") return yi();
5550
+ function Ls(e, t) {
5551
+ if (e === "now") return Ei();
5501
5552
  let [n, ...r] = e.split(".");
5502
- if (n === "row") return !t.row || r.length === 0 ? Os : js(t.row, r);
5553
+ if (n === "row") return !t.row || r.length === 0 ? Fs : Rs(t.row, r);
5503
5554
  if (n === "field" && r.length >= 2) {
5504
- let [e, t] = r, n = Ts(e);
5505
- return n ? n.getField(t) : Os;
5555
+ let [e, t] = r, n = Ms(e);
5556
+ return n ? n.getField(t) : Fs;
5506
5557
  }
5507
- return n === "params" ? !t.params || r.length === 0 ? Os : js(t.params, r) : Os;
5558
+ return n === "params" ? !t.params || r.length === 0 ? Fs : Rs(t.params, r) : Fs;
5508
5559
  }
5509
- function js(e, t) {
5560
+ function Rs(e, t) {
5510
5561
  return t.reduce((e, t) => {
5511
5562
  if (e && typeof e == "object") return e[t];
5512
5563
  }, e);
5513
5564
  }
5514
- async function Ms(e, t) {
5565
+ async function zs(e, t) {
5515
5566
  for (let n of e) try {
5516
- await Ns(n, t);
5567
+ await Bs(n, t);
5517
5568
  } catch (e) {
5518
5569
  let t = e instanceof Error ? e.message : String(e);
5519
5570
  Z.error(`ui_step failed: ${t}`);
5520
5571
  return;
5521
5572
  }
5522
5573
  }
5523
- async function Ns(e, t) {
5574
+ async function Bs(e, t) {
5524
5575
  if (e.copy_to_clipboard != null) {
5525
- let n = Fs(e.copy_to_clipboard, t);
5576
+ let n = Hs(e.copy_to_clipboard, t);
5526
5577
  await navigator.clipboard.writeText(n);
5527
5578
  return;
5528
5579
  }
5529
5580
  if (e.set_field) {
5530
- let { target: n, value: r } = e.set_field, { region: i, field: a } = Is(n), o = Ts(i);
5581
+ let { target: n, value: r } = e.set_field, { region: i, field: a } = Us(n), o = Ms(i);
5531
5582
  if (!o) throw Error(`region "${i}" not registered`);
5532
- o.setField(a, Ps(r, t));
5583
+ o.setField(a, Vs(r, t));
5533
5584
  return;
5534
5585
  }
5535
5586
  if (e.focus_field) {
5536
- let { region: t, field: n } = Is(e.focus_field), r = Ts(t);
5587
+ let { region: t, field: n } = Us(e.focus_field), r = Ms(t);
5537
5588
  if (!r) throw Error(`region "${t}" not registered`);
5538
5589
  r.focusField(n);
5539
5590
  return;
5540
5591
  }
5541
5592
  if (e.show_toast) {
5542
- let n = Fs(e.show_toast.message, t), r = e.show_toast.kind ?? "info";
5593
+ let n = Hs(e.show_toast.message, t), r = e.show_toast.kind ?? "info";
5543
5594
  r === "success" ? Z.success(n) : r === "error" ? Z.error(n) : Z.info(n);
5544
5595
  return;
5545
5596
  }
5546
5597
  }
5547
- function Ps(e, t) {
5548
- return typeof e == "string" ? ks(e, t) : e;
5598
+ function Vs(e, t) {
5599
+ return typeof e == "string" ? Is(e, t) : e;
5549
5600
  }
5550
- function Fs(e, t) {
5551
- return F(ks(e, t));
5601
+ function Hs(e, t) {
5602
+ return F(Is(e, t));
5552
5603
  }
5553
- function Is(e) {
5604
+ function Us(e) {
5554
5605
  let t = e.indexOf(".");
5555
5606
  if (t <= 0) throw Error(`invalid path "${e}" (expected "region.field")`);
5556
5607
  return {
@@ -5558,12 +5609,12 @@ function Is(e) {
5558
5609
  field: e.slice(t + 1)
5559
5610
  };
5560
5611
  }
5561
- function Ls(e) {
5612
+ function Ws(e) {
5562
5613
  return !e.handler && !!e.ui_steps && e.ui_steps.length > 0;
5563
5614
  }
5564
5615
  //#endregion
5565
5616
  //#region src/lib/mass-edit.ts
5566
- function Rs(e) {
5617
+ function Gs(e) {
5567
5618
  if (!e) return [];
5568
5619
  let t = /* @__PURE__ */ new Set(), n = [];
5569
5620
  for (let r of e.split(",")) {
@@ -5572,17 +5623,17 @@ function Rs(e) {
5572
5623
  }
5573
5624
  return n;
5574
5625
  }
5575
- function zs(e, t) {
5626
+ function Ks(e, t) {
5576
5627
  if (!e || !Ke(e, "update")) return [];
5577
- let n = Array.isArray(t) ? t : Rs(t), r = n.length > 0 ? new Set(n) : null, i = rt(e), a = new Set(R(e)), o = r ? n : Bs(e, i, a), s = [];
5628
+ let n = Array.isArray(t) ? t : Gs(t), r = n.length > 0 ? new Set(n) : null, i = rt(e), a = new Set(R(e)), o = r ? n : qs(e, i, a), s = [];
5578
5629
  for (let t of o) {
5579
5630
  if (r && !r.has(t)) continue;
5580
- let n = Vs(e, t, i, a);
5631
+ let n = Js(e, t, i, a);
5581
5632
  n && s.push(n);
5582
5633
  }
5583
5634
  return s;
5584
5635
  }
5585
- function Bs(e, t, n) {
5636
+ function qs(e, t, n) {
5586
5637
  let r = [];
5587
5638
  for (let [t, i] of e.fields) n.has(t) || i.auto || r.push(t);
5588
5639
  if (!t) {
@@ -5591,7 +5642,7 @@ function Bs(e, t, n) {
5591
5642
  }
5592
5643
  return r;
5593
5644
  }
5594
- function Vs(e, t, n, r) {
5645
+ function Js(e, t, n, r) {
5595
5646
  if (t.startsWith("$status.")) {
5596
5647
  if (n) return null;
5597
5648
  let r = t.slice(8), i = e.status_groups?.[r];
@@ -5599,7 +5650,7 @@ function Vs(e, t, n, r) {
5599
5650
  code: t,
5600
5651
  bare: r,
5601
5652
  kind: "status",
5602
- label: Hs(i.name, r),
5653
+ label: Ys(i.name, r),
5603
5654
  statusGroup: i
5604
5655
  } : null;
5605
5656
  }
@@ -5610,7 +5661,7 @@ function Vs(e, t, n, r) {
5610
5661
  code: t,
5611
5662
  bare: r,
5612
5663
  kind: "property",
5613
- label: Hs(i.name, r),
5664
+ label: Ys(i.name, r),
5614
5665
  property: i
5615
5666
  } : null;
5616
5667
  }
@@ -5620,18 +5671,18 @@ function Vs(e, t, n, r) {
5620
5671
  code: t,
5621
5672
  bare: t,
5622
5673
  kind: "field",
5623
- label: Hs(i.display?.name, t),
5674
+ label: Ys(i.display?.name, t),
5624
5675
  field: i
5625
5676
  };
5626
5677
  }
5627
- function Hs(e, t) {
5678
+ function Ys(e, t) {
5628
5679
  return e && I(e) || t;
5629
5680
  }
5630
5681
  //#endregion
5631
5682
  //#region src/components/mass-edit/PropertyGridEditor.tsx
5632
- var Us = Symbol.for("declarion.mass-edit.multiple");
5633
- function Ws({ entity: e, filterTargets: t, selectedRows: n, value: r, onChange: i }) {
5634
- let a = u(() => zs(e, t), [e, t]), s = u(() => Object.keys(r).map((e) => {
5683
+ var Xs = Symbol.for("declarion.mass-edit.multiple");
5684
+ function Zs({ entity: e, filterTargets: t, selectedRows: n, value: r, onChange: i }) {
5685
+ let a = u(() => Ks(e, t), [e, t]), s = u(() => Object.keys(r).map((e) => {
5635
5686
  let t = a.find((t) => t.code === e);
5636
5687
  return t ? {
5637
5688
  target: t,
@@ -5641,8 +5692,8 @@ function Ws({ entity: e, filterTargets: t, selectedRows: n, value: r, onChange:
5641
5692
  let e = new Set(s.map((e) => e.target.code));
5642
5693
  return a.filter((t) => !e.has(t.code));
5643
5694
  }, [s, a]), l = o((e) => {
5644
- let t = Ys(e, n), a = { ...r };
5645
- a[e.code] = t === Us ? void 0 : t, i(a);
5695
+ let t = nc(e, n), a = { ...r };
5696
+ a[e.code] = t === Xs ? void 0 : t, i(a);
5646
5697
  }, [
5647
5698
  r,
5648
5699
  n,
@@ -5670,12 +5721,12 @@ function Ws({ entity: e, filterTargets: t, selectedRows: n, value: r, onChange:
5670
5721
  },
5671
5722
  children: "No targets selected. Add a field, status, or property to edit across all selected rows."
5672
5723
  }),
5673
- s.map((e) => /* @__PURE__ */ v(Gs, {
5724
+ s.map((e) => /* @__PURE__ */ v(Qs, {
5674
5725
  row: e,
5675
5726
  onChange: (t) => d(e.target.code, t),
5676
5727
  onRemove: () => f(e.target.code)
5677
5728
  }, e.target.code)),
5678
- /* @__PURE__ */ v(Js, {
5729
+ /* @__PURE__ */ v(tc, {
5679
5730
  targets: c,
5680
5731
  onPick: l
5681
5732
  })
@@ -5688,7 +5739,7 @@ function Ws({ entity: e, filterTargets: t, selectedRows: n, value: r, onChange:
5688
5739
  children: "Entity schema unavailable. Mass edit requires an entity-bound action."
5689
5740
  });
5690
5741
  }
5691
- function Gs({ row: t, onChange: n, onRemove: r }) {
5742
+ function Qs({ row: t, onChange: n, onRemove: r }) {
5692
5743
  let { target: i } = t;
5693
5744
  return /* @__PURE__ */ y("div", {
5694
5745
  "data-testid": "mass-edit-row",
@@ -5707,7 +5758,7 @@ function Gs({ row: t, onChange: n, onRemove: r }) {
5707
5758
  title: i.code,
5708
5759
  children: i.label
5709
5760
  }),
5710
- /* @__PURE__ */ v(Ks, {
5761
+ /* @__PURE__ */ v($s, {
5711
5762
  row: t,
5712
5763
  onChange: n
5713
5764
  }),
@@ -5719,8 +5770,8 @@ function Gs({ row: t, onChange: n, onRemove: r }) {
5719
5770
  ]
5720
5771
  });
5721
5772
  }
5722
- function Ks({ row: e, onChange: t }) {
5723
- let { target: n } = e, r = Ss(), i = e.value === Us, a = i ? "<multiple values>" : void 0, o = i ? "" : e.value;
5773
+ function $s({ row: e, onChange: t }) {
5774
+ let { target: n } = e, r = ks(), i = e.value === Xs, a = i ? "<multiple values>" : void 0, o = i ? "" : e.value;
5724
5775
  if (n.kind === "status" && n.statusGroup) {
5725
5776
  let e = n.statusGroup.statuses.map((e) => ({
5726
5777
  value: e.code,
@@ -5736,11 +5787,11 @@ function Ks({ row: e, onChange: t }) {
5736
5787
  })
5737
5788
  });
5738
5789
  }
5739
- let s = qs(n);
5790
+ let s = ec(n);
5740
5791
  return /* @__PURE__ */ y("div", {
5741
5792
  "data-testid": `value-${n.code}`,
5742
5793
  style: { position: "relative" },
5743
- children: [ys({
5794
+ children: [Es({
5744
5795
  field: s,
5745
5796
  fieldName: n.bare,
5746
5797
  value: o ?? "",
@@ -5759,7 +5810,7 @@ function Ks({ row: e, onChange: t }) {
5759
5810
  })]
5760
5811
  });
5761
5812
  }
5762
- function qs(e) {
5813
+ function ec(e) {
5763
5814
  if (e.kind === "field" && e.field) return e.field;
5764
5815
  if (e.kind === "property" && e.property) {
5765
5816
  let t = e.property;
@@ -5774,7 +5825,7 @@ function qs(e) {
5774
5825
  }
5775
5826
  return { type: "string" };
5776
5827
  }
5777
- function Js({ targets: t, onPick: n }) {
5828
+ function tc({ targets: t, onPick: n }) {
5778
5829
  let [r, i] = f(!1);
5779
5830
  return t.length === 0 ? null : r ? /* @__PURE__ */ v("div", {
5780
5831
  "data-testid": "mass-edit-target-picker",
@@ -5801,7 +5852,7 @@ function Js({ targets: t, onPick: n }) {
5801
5852
  children: [/* @__PURE__ */ v(e.plus, { size: 12 }), " Add target"]
5802
5853
  });
5803
5854
  }
5804
- function Ys(e, t) {
5855
+ function nc(e, t) {
5805
5856
  if (!t || t.length === 0 || e.kind !== "field") return;
5806
5857
  let n, r = !1;
5807
5858
  for (let i of t) {
@@ -5810,21 +5861,21 @@ function Ys(e, t) {
5810
5861
  n = t, r = !0;
5811
5862
  continue;
5812
5863
  }
5813
- if (n !== t) return Us;
5864
+ if (n !== t) return Xs;
5814
5865
  }
5815
5866
  return n;
5816
5867
  }
5817
5868
  //#endregion
5818
5869
  //#region src/components/shared/ActionDialog.tsx
5819
- var Xs = /^\$row\.([a-zA-Z_][a-zA-Z0-9_]*)$/;
5820
- function Zs(e, t) {
5870
+ var rc = /^\$row\.([a-zA-Z_][a-zA-Z0-9_]*)$/;
5871
+ function ic(e, t) {
5821
5872
  if (typeof e != "string") return e ?? "";
5822
- let n = e.match(Xs);
5873
+ let n = e.match(rc);
5823
5874
  if (!n) return e;
5824
5875
  let r = n[1];
5825
5876
  return t && r in t ? t[r] ?? "" : (typeof console < "u" && console.warn && console.warn(`ActionDialog: prefill template ${e} could not be resolved; row missing or has no field '${r}'`), "");
5826
5877
  }
5827
- function Qs(e) {
5878
+ function ac(e) {
5828
5879
  return {
5829
5880
  type: e.type ?? "string",
5830
5881
  required: e.required,
@@ -5837,18 +5888,18 @@ function Qs(e) {
5837
5888
  ref: Ue(e.ref)
5838
5889
  };
5839
5890
  }
5840
- function $s(e, t) {
5891
+ function oc(e, t) {
5841
5892
  if (!e.includes("${")) return e;
5842
- let n = ks(e, { params: t });
5893
+ let n = Is(e, { params: t });
5843
5894
  return n == null ? "" : F(n);
5844
5895
  }
5845
- var ec = /\$\{\s*([^}]+?)\s*\}/g;
5846
- function tc(e, t) {
5896
+ var sc = /\$\{\s*([^}]+?)\s*\}/g;
5897
+ function cc(e, t) {
5847
5898
  let n = `params.${t}`;
5848
- for (let t of e.matchAll(ec)) if (t[1] === n) return !0;
5899
+ for (let t of e.matchAll(sc)) if (t[1] === n) return !0;
5849
5900
  return !1;
5850
5901
  }
5851
- function nc({ param: e, value: t, onChange: n, statusGroups: r }) {
5902
+ function lc({ param: e, value: t, onChange: n, statusGroups: r }) {
5852
5903
  let i = u(() => {
5853
5904
  let t = r ? Object.entries(r) : [];
5854
5905
  return [{
@@ -5866,12 +5917,12 @@ function nc({ param: e, value: t, onChange: n, statusGroups: r }) {
5866
5917
  placeholder: "Select status group…"
5867
5918
  });
5868
5919
  }
5869
- function rc({ param: e, value: t, onChange: n, statusGroups: r, formData: i }) {
5920
+ function uc({ param: e, value: t, onChange: n, statusGroups: r, formData: i }) {
5870
5921
  let a = u(() => {
5871
5922
  if (!r) return [];
5872
5923
  let t = e.filter?.status_group;
5873
5924
  if (t) {
5874
- let e = $s(t, i);
5925
+ let e = oc(t, i);
5875
5926
  return e && r[e] ? r[e].statuses : [];
5876
5927
  }
5877
5928
  return Object.values(r).flatMap((e) => e.statuses);
@@ -5893,8 +5944,8 @@ function rc({ param: e, value: t, onChange: n, statusGroups: r, formData: i }) {
5893
5944
  placeholder: "Select status…"
5894
5945
  });
5895
5946
  }
5896
- function ic({ open: t, onOpenChange: n, action: r, actionName: i, onSubmit: a, isPending: s, row: c, bulkSelection: l }) {
5897
- let { data: d } = J(), p = Ss(), m = r.resolved_params, h = r.resolved_hidden_defaults ?? {}, g = u(() => m ? Array.from(m) : [], [m]), b = u(() => {
5947
+ function dc({ open: t, onOpenChange: n, action: r, actionName: i, onSubmit: a, isPending: s, row: c, bulkSelection: l }) {
5948
+ let { data: d } = J(), p = ks(), m = r.resolved_params, h = r.resolved_hidden_defaults ?? {}, g = u(() => m ? Array.from(m) : [], [m]), b = u(() => {
5898
5949
  if (!(!r.entity || !d)) return d.entities[r.entity]?.status_groups;
5899
5950
  }, [r.entity, d]), x = u(() => {
5900
5951
  if (!(!r.entity || !d)) return d.entities[r.entity];
@@ -5918,7 +5969,7 @@ function ic({ open: t, onOpenChange: n, action: r, actionName: i, onSubmit: a, i
5918
5969
  e[t] = n.default === !0 || n.default === "true";
5919
5970
  continue;
5920
5971
  }
5921
- e[t] = Zs(n.default, c);
5972
+ e[t] = ic(n.default, c);
5922
5973
  }
5923
5974
  return e;
5924
5975
  }, [
@@ -5936,7 +5987,7 @@ function ic({ open: t, onOpenChange: n, action: r, actionName: i, onSubmit: a, i
5936
5987
  for (let [t, n] of m) {
5937
5988
  if (n.type !== "status") continue;
5938
5989
  let i = n.filter?.status_group;
5939
- i && tc(i, e) && (r[t] = "");
5990
+ i && cc(i, e) && (r[t] = "");
5940
5991
  }
5941
5992
  return r;
5942
5993
  });
@@ -6049,26 +6100,26 @@ function ic({ open: t, onOpenChange: n, action: r, actionName: i, onSubmit: a, i
6049
6100
  let n = I(t.display?.name) || e;
6050
6101
  if (t.type === "id_array") return null;
6051
6102
  let r;
6052
- return r = t.type === "entity_patch" ? /* @__PURE__ */ v(Ws, {
6103
+ return r = t.type === "entity_patch" ? /* @__PURE__ */ v(Zs, {
6053
6104
  entity: x,
6054
6105
  filterTargets: typeof t.filter?.targets == "string" ? t.filter.targets : void 0,
6055
6106
  selectedRows: l,
6056
6107
  value: C[e] ?? {},
6057
6108
  onChange: (t) => D(e, t)
6058
- }) : t.type === "status_group" ? /* @__PURE__ */ v(nc, {
6109
+ }) : t.type === "status_group" ? /* @__PURE__ */ v(lc, {
6059
6110
  param: t,
6060
6111
  value: C[e],
6061
6112
  onChange: (t) => D(e, t),
6062
6113
  statusGroups: b,
6063
6114
  formData: C
6064
- }) : t.type === "status" ? /* @__PURE__ */ v(rc, {
6115
+ }) : t.type === "status" ? /* @__PURE__ */ v(uc, {
6065
6116
  param: t,
6066
6117
  value: C[e],
6067
6118
  onChange: (t) => D(e, t),
6068
6119
  statusGroups: b,
6069
6120
  formData: C
6070
- }) : ys({
6071
- field: Qs(t),
6121
+ }) : Es({
6122
+ field: ac(t),
6072
6123
  fieldName: e,
6073
6124
  value: C[e],
6074
6125
  mode: "edit",
@@ -6128,7 +6179,7 @@ function ic({ open: t, onOpenChange: n, action: r, actionName: i, onSubmit: a, i
6128
6179
  }
6129
6180
  //#endregion
6130
6181
  //#region src/components/shared/ActionResultDialog.tsx
6131
- function ac({ open: t, onClose: n, display: r }) {
6182
+ function fc({ open: t, onClose: n, display: r }) {
6132
6183
  let i = d(null);
6133
6184
  return c(() => {
6134
6185
  t && i.current?.focus();
@@ -6223,7 +6274,7 @@ function ac({ open: t, onClose: n, display: r }) {
6223
6274
  gap: 12,
6224
6275
  overflowY: "auto"
6225
6276
  },
6226
- children: r.fields.map((e, t) => /* @__PURE__ */ v(oc, { field: e }, t))
6277
+ children: r.fields.map((e, t) => /* @__PURE__ */ v(pc, { field: e }, t))
6227
6278
  }),
6228
6279
  /* @__PURE__ */ y("div", {
6229
6280
  style: {
@@ -6246,51 +6297,108 @@ function ac({ open: t, onClose: n, display: r }) {
6246
6297
  ]
6247
6298
  })] }) : null;
6248
6299
  }
6249
- function oc({ field: e }) {
6300
+ function pc({ field: t }) {
6301
+ let n = t.href ?? t.download_url ?? t.value, r = t.type === "download", i = r || t.type === "link", a = n ? fi(n) : void 0, [o, s] = f(!1), [c, l] = f(null);
6302
+ async function u() {
6303
+ if (a) {
6304
+ s(!0), l(null);
6305
+ try {
6306
+ await hi(a, t.filename);
6307
+ } catch (e) {
6308
+ l(e instanceof Error ? e.message : String(e));
6309
+ } finally {
6310
+ s(!1);
6311
+ }
6312
+ }
6313
+ }
6314
+ let d = {
6315
+ display: "inline-flex",
6316
+ alignItems: "center",
6317
+ justifyContent: "center",
6318
+ gap: 6,
6319
+ height: 32,
6320
+ width: "fit-content",
6321
+ maxWidth: "100%",
6322
+ padding: "0 12px",
6323
+ borderRadius: 6,
6324
+ border: "1px solid var(--border)",
6325
+ background: r ? "var(--accent)" : "var(--surface)",
6326
+ color: r ? "var(--primary-fg)" : "var(--text)",
6327
+ fontSize: 12.5,
6328
+ fontWeight: 500,
6329
+ textDecoration: "none",
6330
+ whiteSpace: "nowrap"
6331
+ };
6250
6332
  return /* @__PURE__ */ y("div", {
6251
6333
  style: {
6252
6334
  display: "flex",
6253
6335
  flexDirection: "column",
6254
6336
  gap: 4
6255
6337
  },
6256
- children: [/* @__PURE__ */ v("div", {
6257
- style: {
6258
- fontSize: 11.5,
6259
- fontWeight: 500,
6260
- color: "var(--text-3)"
6261
- },
6262
- children: e.label
6263
- }), /* @__PURE__ */ y("div", {
6264
- style: {
6265
- position: "relative",
6266
- width: "100%"
6267
- },
6268
- children: [/* @__PURE__ */ v("div", {
6269
- className: e.monospace ? "mono" : void 0,
6338
+ children: [
6339
+ /* @__PURE__ */ v("div", {
6270
6340
  style: {
6271
- borderRadius: 6,
6272
- border: "1px solid var(--border)",
6273
- background: "var(--surface-2)",
6274
- padding: e.copyable ? "8px 40px 8px 10px" : "8px 10px",
6275
- fontSize: 12.5,
6276
- wordBreak: "break-all",
6277
- color: "var(--text)"
6341
+ fontSize: 11.5,
6342
+ fontWeight: 500,
6343
+ color: "var(--text-3)"
6278
6344
  },
6279
- children: e.value
6280
- }), e.copyable && /* @__PURE__ */ v("div", {
6345
+ children: t.label
6346
+ }),
6347
+ i && a ? r ? /* @__PURE__ */ y("button", {
6348
+ type: "button",
6349
+ onClick: u,
6350
+ disabled: o,
6281
6351
  style: {
6282
- position: "absolute",
6283
- top: 4,
6284
- right: 4
6352
+ ...d,
6353
+ cursor: o ? "default" : "pointer"
6285
6354
  },
6286
- children: /* @__PURE__ */ v(di, { value: e.value })
6287
- })]
6288
- })]
6355
+ children: [v(o ? e.loader : e.download, { size: 14 }), /* @__PURE__ */ v("span", { children: o ? "Downloading…" : "Download" })]
6356
+ }) : /* @__PURE__ */ y("a", {
6357
+ href: a,
6358
+ target: "_blank",
6359
+ rel: "noopener noreferrer",
6360
+ style: d,
6361
+ children: [/* @__PURE__ */ v(e.download, { size: 14 }), /* @__PURE__ */ v("span", { children: t.value })]
6362
+ }) : null,
6363
+ c && /* @__PURE__ */ v("div", {
6364
+ style: {
6365
+ fontSize: 11.5,
6366
+ color: "var(--danger)"
6367
+ },
6368
+ children: c
6369
+ }),
6370
+ /* @__PURE__ */ y("div", {
6371
+ style: {
6372
+ position: "relative",
6373
+ width: "100%"
6374
+ },
6375
+ children: [/* @__PURE__ */ v("div", {
6376
+ className: t.monospace ? "mono" : void 0,
6377
+ style: {
6378
+ borderRadius: 6,
6379
+ border: "1px solid var(--border)",
6380
+ background: "var(--surface-2)",
6381
+ padding: t.copyable ? "8px 40px 8px 10px" : "8px 10px",
6382
+ fontSize: 12.5,
6383
+ wordBreak: "break-all",
6384
+ color: "var(--text)"
6385
+ },
6386
+ children: t.value
6387
+ }), t.copyable && /* @__PURE__ */ v("div", {
6388
+ style: {
6389
+ position: "absolute",
6390
+ top: 4,
6391
+ right: 4
6392
+ },
6393
+ children: /* @__PURE__ */ v(vi, { value: t.value })
6394
+ })]
6395
+ })
6396
+ ]
6289
6397
  });
6290
6398
  }
6291
6399
  //#endregion
6292
6400
  //#region src/components/shared/ActionRunner.tsx
6293
- function sc(e) {
6401
+ function mc(e) {
6294
6402
  if (!e || typeof e != "object") return { kind: "success" };
6295
6403
  let t = e, n = t.status, r = t.success?.length ?? 0, i = t.errors?.length ?? 0, a = t.skipped?.length ?? 0, o = t.errors?.[0]?.error;
6296
6404
  if (n === "partial") {
@@ -6305,20 +6413,33 @@ function sc(e) {
6305
6413
  detail: "No items matched"
6306
6414
  } : n === "accepted" ? { kind: "accepted" } : { kind: "success" };
6307
6415
  }
6308
- function cc(e) {
6416
+ function hc(e) {
6309
6417
  if (!e || typeof e != "object") return null;
6310
6418
  let t = e.result;
6311
6419
  if (!t || typeof t != "object") return null;
6312
6420
  let n = t.$display;
6313
6421
  return !n || typeof n != "object" ? null : n;
6314
6422
  }
6315
- function lc(e) {
6423
+ function gc(e) {
6424
+ let t = hc(e)?.fields;
6425
+ if (!Array.isArray(t)) return null;
6426
+ for (let e of t) {
6427
+ if (e?.type !== "download") continue;
6428
+ let t = e.href ?? e.download_url ?? e.value;
6429
+ if (typeof t == "string" && t !== "" && fi(t)) return {
6430
+ url: t,
6431
+ filename: typeof e.filename == "string" ? e.filename : void 0
6432
+ };
6433
+ }
6434
+ return null;
6435
+ }
6436
+ function _c(e) {
6316
6437
  if (!e || typeof e != "object") return;
6317
6438
  let t = e.result;
6318
6439
  !t || typeof t != "object" || "impersonation_session_id" in t && window.location.assign("/");
6319
6440
  }
6320
- function uc(e) {
6321
- if (e instanceof Xr) {
6441
+ function vc(e) {
6442
+ if (e instanceof Yn) {
6322
6443
  let t = e.response.errors ?? [];
6323
6444
  if (t.length === 1) return {
6324
6445
  kind: "error",
@@ -6338,32 +6459,41 @@ function uc(e) {
6338
6459
  detail: e instanceof Error ? e.message : String(e)
6339
6460
  };
6340
6461
  }
6341
- var dc = r(null);
6342
- function fc() {
6343
- let e = s(dc);
6462
+ var yc = r(null);
6463
+ function bc() {
6464
+ let e = s(yc);
6344
6465
  if (!e) throw Error("useActionRunner must be used within <ActionRunnerProvider>");
6345
6466
  return e;
6346
6467
  }
6347
- function pc(e) {
6468
+ function xc(e) {
6348
6469
  let t = {}, n = e.action?.resolved_hidden_defaults;
6349
6470
  if (n) for (let [e, r] of Object.entries(n)) r !== void 0 && (t[e] = r);
6350
6471
  return t;
6351
6472
  }
6352
- function mc({ children: e }) {
6353
- let t = Dr(), { data: n } = J(), [r, i] = f(null), [a, s] = f(null), c = o((e) => {
6473
+ function Sc({ children: e }) {
6474
+ let t = qr(), { data: n } = J(), [r, i] = f(null), [a, s] = f(0), [c, l] = f(null), d = o((e) => {
6354
6475
  if (e?.progress_screen) return n?.screens[e.progress_screen]?.route;
6355
- }, [n?.screens]), l = o((e, n, r, i, a) => {
6476
+ }, [n?.screens]), p = o((e, n, r, i, a) => {
6356
6477
  let o = () => {
6357
- let n = hc(a), i = c(r), o = n ? `Job ${n} queued` : "Running in background";
6478
+ let n = Cc(a), i = d(r), o = n ? `Job ${n} queued` : "Running in background";
6358
6479
  Z.success(`${e} started`, o, i ? { action: {
6359
6480
  label: "View",
6360
6481
  onClick: () => t(i)
6361
6482
  } } : void 0);
6362
6483
  };
6363
6484
  switch (i.kind) {
6364
- case "success":
6365
- n ? o() : Z.success(`${e} complete`);
6485
+ case "success": {
6486
+ let t = gc(a), r = t ? { action: {
6487
+ label: "Download",
6488
+ onClick: () => {
6489
+ hi(t.url, t.filename).catch((e) => {
6490
+ Z.error("Download failed", e instanceof Error ? e.message : String(e));
6491
+ });
6492
+ }
6493
+ } } : void 0;
6494
+ n ? o() : Z.success(`${e} complete`, void 0, r);
6366
6495
  return;
6496
+ }
6367
6497
  case "accepted":
6368
6498
  o();
6369
6499
  return;
@@ -6377,7 +6507,7 @@ function mc({ children: e }) {
6377
6507
  Z.error(`${e} failed`, i.detail);
6378
6508
  return;
6379
6509
  }
6380
- }, [t, c]), d = o((e) => {
6510
+ }, [t, d]), m = o((e) => {
6381
6511
  let t = e.action, n = e.destructive ?? t?.destructive ?? !1, r = e.longRunning ?? t?.long_running ?? !1, a = e.title || I(t?.display?.name) || "Action";
6382
6512
  return t?.resolved_params && t.resolved_params.length > 0 ? (i({
6383
6513
  id: Symbol(),
@@ -6392,90 +6522,97 @@ function mc({ children: e }) {
6392
6522
  kind: "confirm",
6393
6523
  pending: !1
6394
6524
  }), Promise.resolve()) : (async (n) => {
6525
+ s((e) => e + 1);
6395
6526
  try {
6396
- let i = await e.execute(n), o = sc(i);
6397
- if (l(a, r, t, o, i), o.kind === "success" || o.kind === "accepted") {
6527
+ let i = await e.execute(n), o = mc(i);
6528
+ if (p(a, r, t, o, i), o.kind === "success" || o.kind === "accepted") {
6398
6529
  e.onSuccess?.(i);
6399
- let t = cc(i);
6400
- t && s(t), lc(i);
6530
+ let t = hc(i);
6531
+ t && l(t), _c(i);
6401
6532
  }
6402
6533
  } catch (e) {
6403
- l(a, r, t, uc(e));
6534
+ p(a, r, t, vc(e));
6535
+ } finally {
6536
+ s((e) => Math.max(0, e - 1));
6404
6537
  }
6405
- })(pc(e));
6406
- }, [l]), p = u(() => ({ run: d }), [d]), m = r?.opts.action, h = o(async (e) => {
6538
+ })(xc(e));
6539
+ }, [p]), h = a > 0 || !!r?.pending, g = u(() => ({
6540
+ run: m,
6541
+ isRunning: h
6542
+ }), [m, h]), _ = r?.opts.action, b = o(async (e) => {
6407
6543
  if (!r) return;
6408
6544
  let t = r.id, n = r, a = n.opts.action, o = n.opts.longRunning ?? a?.long_running ?? !1;
6409
6545
  i((e) => e?.id === t ? {
6410
6546
  ...e,
6411
6547
  pending: !0
6412
- } : e);
6548
+ } : e), s((e) => e + 1);
6413
6549
  try {
6414
- let r = await n.opts.execute(e), c = sc(r);
6415
- if (l(n.title, o, a, c, r), c.kind === "success" || c.kind === "accepted") {
6550
+ let r = await n.opts.execute(e), s = mc(r);
6551
+ if (p(n.title, o, a, s, r), s.kind === "success" || s.kind === "accepted") {
6416
6552
  n.opts.onSuccess?.(r);
6417
- let e = cc(r);
6418
- e && s(e), lc(r);
6553
+ let e = hc(r);
6554
+ e && l(e), _c(r);
6419
6555
  }
6420
- c.kind !== "partial" && i((e) => e?.id === t ? null : e);
6556
+ s.kind !== "partial" && i((e) => e?.id === t ? null : e);
6421
6557
  } catch (e) {
6422
- l(n.title, o, a, uc(e));
6558
+ p(n.title, o, a, vc(e));
6423
6559
  } finally {
6424
- i((e) => e?.id === t ? {
6560
+ s((e) => Math.max(0, e - 1)), i((e) => e?.id === t ? {
6425
6561
  ...e,
6426
6562
  pending: !1
6427
6563
  } : e);
6428
6564
  }
6429
- }, [r, l]);
6430
- return /* @__PURE__ */ y(dc.Provider, {
6431
- value: p,
6565
+ }, [r, p]);
6566
+ return /* @__PURE__ */ y(yc.Provider, {
6567
+ value: g,
6432
6568
  children: [
6433
6569
  e,
6434
- a && /* @__PURE__ */ v(ac, {
6570
+ c && /* @__PURE__ */ v(fc, {
6435
6571
  open: !0,
6436
- onClose: () => s(null),
6437
- display: a
6572
+ onClose: () => l(null),
6573
+ display: c
6438
6574
  }),
6439
- r?.kind === "params" && m && /* @__PURE__ */ v(ic, {
6575
+ r?.kind === "params" && _ && /* @__PURE__ */ v(dc, {
6440
6576
  open: !0,
6441
6577
  onOpenChange: (e) => {
6442
6578
  e || i(null);
6443
6579
  },
6444
- action: m,
6580
+ action: _,
6445
6581
  actionName: r.title,
6446
- onSubmit: h,
6582
+ onSubmit: b,
6447
6583
  isPending: r.pending,
6448
6584
  bulkSelection: r.opts.bulkSelection
6449
6585
  }),
6450
- r?.kind === "confirm" && /* @__PURE__ */ v(gc, {
6586
+ r?.kind === "confirm" && /* @__PURE__ */ v(wc, {
6451
6587
  state: r,
6452
6588
  onClose: () => i(null),
6453
6589
  onExecute: async (e) => {
6454
6590
  let t = r.id, n = r, a = n.opts.action, o = n.opts.longRunning ?? a?.long_running ?? !1, c = !1;
6591
+ s((e) => e + 1);
6455
6592
  try {
6456
- let t = await n.opts.execute(e), r = sc(t);
6457
- if (l(n.title, o, a, r, t), r.kind === "success" || r.kind === "accepted") {
6593
+ let t = await n.opts.execute(e), r = mc(t);
6594
+ if (p(n.title, o, a, r, t), r.kind === "success" || r.kind === "accepted") {
6458
6595
  n.opts.onSuccess?.(t);
6459
- let e = cc(t);
6460
- e && s(e), lc(t);
6596
+ let e = hc(t);
6597
+ e && l(e), _c(t);
6461
6598
  }
6462
6599
  c = r.kind === "partial";
6463
6600
  } catch (e) {
6464
- l(n.title, o, a, uc(e));
6601
+ p(n.title, o, a, vc(e));
6465
6602
  } finally {
6466
- c || i((e) => e?.id === t ? null : e);
6603
+ s((e) => Math.max(0, e - 1)), c || i((e) => e?.id === t ? null : e);
6467
6604
  }
6468
6605
  }
6469
6606
  })
6470
6607
  ]
6471
6608
  });
6472
6609
  }
6473
- function hc(e) {
6610
+ function Cc(e) {
6474
6611
  if (!e || typeof e != "object") return;
6475
6612
  let t = e, n = t.job_id ?? t.id;
6476
6613
  return typeof n == "string" ? n : void 0;
6477
6614
  }
6478
- function gc({ state: t, onClose: n, onExecute: r }) {
6615
+ function wc({ state: t, onClose: n, onExecute: r }) {
6479
6616
  let { title: i, opts: a } = t, [o, s] = f(!1), c = a.action, l = a.destructive ?? c?.destructive ?? !1;
6480
6617
  return /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("div", {
6481
6618
  onClick: n,
@@ -6565,7 +6702,7 @@ function gc({ state: t, onClose: n, onExecute: r }) {
6565
6702
  onClick: async () => {
6566
6703
  s(!0);
6567
6704
  try {
6568
- await r(pc(a));
6705
+ await r(xc(a));
6569
6706
  } finally {
6570
6707
  s(!1);
6571
6708
  }
@@ -6577,4 +6714,4 @@ function gc({ state: t, onClose: n, onExecute: r }) {
6577
6714
  })] });
6578
6715
  }
6579
6716
  //#endregion
6580
- export { Z as $, nt as $t, Ii as A, ve as An, dn as At, Wr as B, D as Bn, wt as Bt, Oa as C, Ne as Cn, Dn as Ct, la as D, N as Dn, W as Dt, ma as E, Se as En, jn as Et, yi as F, ge as Fn, Et as Ft, Ur as G, dt as Gt, qr as H, T as Hn, ht as Ht, di as I, M as In, Tt as It, Jr as J, it as Jt, Hr as K, z as Kt, li as L, oe as Ln, xt as Lt, Li as M, se as Mn, fn as Mt, Fi as N, he as Nn, Mt as Nt, Vi as O, Pe as On, K as Ot, xi as P, ue as Pn, Ft as Pt, Gr as Q, tt as Qt, Xr as R, k as Rn, yt as Rt, va as S, Fe as Sn, An as St, ha as T, je as Tn, Pn as Tt, ai as U, gt as Ut, Kr as V, E as Vn, mt as Vt, Yr as W, ft as Wt, ii as X, Le as Xt, ei as Y, ot as Yt, ri as Z, et as Zt, Pa as _, Ie as _n, kn as _t, Us as a, R as an, xr as at, Da as b, Me as bn, In as bt, zs as c, Qe as cn, _r as ct, Ls as d, Ge as dn, $n as dt, We as en, Dr as et, ws as f, $e as fn, ir as ft, Ma as g, F as gn, En as gt, _s as h, Ze as hn, Rn as ht, ic as i, Re as in, wr as it, Ri as j, _e as jn, pn as jt, zi as k, ye as kn, q as kt, Rs as l, Xe as ln, vr as lt, ys as m, Ve as mn, zn as mt, fc as n, qe as nn, Or as nt, Ws as o, I as on, yr as ot, Ss as p, L as pn, J as pt, oi as q, at as qt, ac as r, He as rn, Er as rt, Ys as s, Je as sn, br as st, mc as t, Ke as tn, kr as tt, Ms as u, Ye as un, lr as ut, Na as v, Ee as vn, Ln as vt, ua as w, P as wn, On as wt, Aa as x, Ae as xn, Nn as xt, Q as y, be as yn, Fn as yt, Qr as z, O as zn, bt as zt };
6717
+ export { yr as $, Le as $t, Gi as A, N as An, W as At, li as B, oe as Bn, xt as Bt, Fa as C, Me as Cn, In as Ct, ga as D, P as Dn, On as Dt, xa as E, Ne as En, Dn as Et, Ei as F, se as Fn, fn as Ft, Kr as G, T as Gn, ht as Gt, qr as H, O as Hn, bt as Ht, vi as I, he as In, Mt as It, zr as J, dt as Jt, Wr as K, gt as Kt, hi as L, ue as Ln, Ft as Lt, Wi as M, ye as Mn, q as Mt, Ui as N, ve as Nn, dn as Nt, Ji as O, je as On, Pn as Ot, Oi as P, _e as Pn, pn as Pt, kr as Q, ot as Qt, mi as R, ge as Rn, Et as Rt, Ta as S, be as Sn, Fn as St, Sa as T, Fe as Tn, An as Tt, Yr as U, D as Un, wt as Ut, Z as V, k as Vn, yt as Vt, Jr as W, E as Wn, mt as Wt, Lr as X, at as Xt, Br as Y, z as Yt, Rr as Z, it as Zt, Va as _, Ve as _n, zn as _t, Xs as a, qe as an, Kn as at, Pa as b, Ie as bn, kn as bt, Ks as c, R as cn, Hn as ct, Ws as d, Qe as dn, qn as dt, et as en, wr as et, js as f, Xe as fn, $n as ft, za as g, L as gn, J as gt, ws as h, $e as hn, Wn as ht, dc as i, Ke as in, Gn as it, Hi as j, Pe as jn, K as jt, Ki as k, Se as kn, jn as kt, Gs as l, I as ln, Vn as lt, Es as m, Ge as mn, nr as mt, bc as n, nt as nn, Zn as nt, Zs as o, He as on, ir as ot, ks as p, Ye as pn, rr as pt, Vr as q, ft as qt, fc as r, We as rn, Un as rt, nc as s, Re as sn, Jn as st, Sc as t, tt as tn, Yn as tt, zs as u, Je as un, ar as ut, Ba as v, Ze as vn, Rn as vt, _a as w, Ae as wn, Nn as wt, La as x, Ee as xn, Ln as xt, Q as y, F as yn, En as yt, fi as z, M as zn, Tt as zt };