@declarion/react 0.32.0 → 0.35.1

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 (57) hide show
  1. package/README.md +1 -1
  2. package/dist-lib/{ActionRunner-CaSrGpBi.js → ActionRunner-Bkkb_YMa.js} +1332 -1310
  3. package/dist-lib/{DraggableChildrenTable-CAHg7paQ.js → DraggableChildrenTable-TNni9y0Q.js} +55 -55
  4. package/dist-lib/DynamicIcon-BWO6QtNF.js +261 -0
  5. package/dist-lib/{Grid-DDbBhqcl.js → Grid-DOtBLx3n.js} +2 -2
  6. package/dist-lib/{JsonEditor-KelPV-OQ.js → JsonEditor-DoNmyrYd.js} +2 -2
  7. package/dist-lib/{LayoutRenderer-CelsqsZ6.js → LayoutRenderer-CMuVgKev.js} +748 -746
  8. package/dist-lib/{MarkdownRenderer-DThy2ixe.js → MarkdownRenderer-DWOlvx8k.js} +1 -1
  9. package/dist-lib/{MonacoJson-DVjwsaBK.js → MonacoJson-BfpzZ1iT.js} +1 -1
  10. package/dist-lib/RefreshControl-CgU8mNEp.js +835 -0
  11. package/dist-lib/SmartDetailPage.impl-Bjl7EFzU.js +1774 -0
  12. package/dist-lib/{SmartRecordListPage.impl-BKIpTNK7.js → SmartRecordListPage.impl-D2eE-g5J.js} +91 -91
  13. package/dist-lib/assets/OFL-Inter.txt +93 -0
  14. package/dist-lib/assets/OFL-JetBrainsMono.txt +93 -0
  15. package/dist-lib/assets/inter-latin-ext-wght-normal.woff2 +0 -0
  16. package/dist-lib/assets/inter-latin-wght-normal.woff2 +0 -0
  17. package/dist-lib/assets/jetbrains-mono-latin-ext-wght-normal.woff2 +0 -0
  18. package/dist-lib/assets/jetbrains-mono-latin-wght-normal.woff2 +0 -0
  19. package/dist-lib/components/fields/cells/factories/host-icons.d.ts +9 -1
  20. package/dist-lib/components/layout/TopBar.d.ts +2 -1
  21. package/dist-lib/components/pages/DocumentsMenu.d.ts +22 -0
  22. package/dist-lib/components/pages/RecordDocumentsPanel.d.ts +42 -0
  23. package/dist-lib/components/pages/list/DataCell.d.ts +1 -2
  24. package/dist-lib/components/pages/list/ListHeader.d.ts +1 -11
  25. package/dist-lib/components/primitives/Btn.d.ts +1 -1
  26. package/dist-lib/components/primitives/Icons.d.ts +1 -0
  27. package/dist-lib/components/primitives/Tooltip.d.ts +30 -0
  28. package/dist-lib/components/primitives/index.d.ts +2 -0
  29. package/dist-lib/components/shared/ActionResultDialog.d.ts +4 -0
  30. package/dist-lib/components/shared/RecordHeader.d.ts +2 -1
  31. package/dist-lib/components/shared/ResponsiveActionBar.d.ts +9 -1
  32. package/dist-lib/declarion-react.css +1 -1
  33. package/dist-lib/embed/theme.d.ts +8 -8
  34. package/dist-lib/hooks/useBrandingChrome.d.ts +28 -2
  35. package/dist-lib/hooks/useResponsiveMode.d.ts +17 -1
  36. package/dist-lib/icons.js +1 -1
  37. package/dist-lib/index.js +2430 -2441
  38. package/dist-lib/lib/brand-tokens.d.ts +43 -0
  39. package/dist-lib/lib/document-templates.d.ts +12 -0
  40. package/dist-lib/lib/download.d.ts +20 -0
  41. package/dist-lib/lib/html-state.d.ts +11 -0
  42. package/dist-lib/lib/record-documents-key.d.ts +1 -0
  43. package/dist-lib/lib/versionTracker.d.ts +6 -0
  44. package/dist-lib/{registry-KQyyL5Gt.js → registry-GTwsJEYp.js} +1469 -1343
  45. package/dist-lib/stores/page-state.d.ts +1 -1
  46. package/dist-lib/stores/preferences.d.ts +37 -0
  47. package/dist-lib/testing.js +5 -5
  48. package/dist-lib/types/api.d.ts +95 -23
  49. package/dist-lib/types/schema.d.ts +32 -1
  50. package/dist-lib/{useProperties-D74hyWIa.js → useProperties-oNGJ7HwM.js} +67 -67
  51. package/dist-lib/{value-BfXXl5EE.js → value-DNs5L0Ad.js} +82 -82
  52. package/dist-lib/vite/fingerprint-plugin.d.ts +1 -1
  53. package/package.json +17 -16
  54. package/dist-lib/DynamicIcon-DCRdxxZ7.js +0 -260
  55. package/dist-lib/RefreshControl-CorluL6r.js +0 -582
  56. package/dist-lib/SmartDetailPage.impl-USIxbl-8.js +0 -1532
  57. package/dist-lib/stores/appearance.d.ts +0 -37
@@ -0,0 +1,835 @@
1
+ import { s as e } from "./DynamicIcon-BWO6QtNF.js";
2
+ import { Bn as t, Hn as n, Mn as r, Q as i, Un as a, Wn as o, Z as s, cn as c, ht as l, it as u, jn as d, kt as f, n as p, yn as m } from "./ActionRunner-Bkkb_YMa.js";
3
+ import { useCallback as h, useEffect as g, useId as _, useMemo as v, useRef as y, useState as b } from "react";
4
+ import { useLocation as x } from "react-router-dom";
5
+ import { useQuery as S, useQueryClient as C } from "@tanstack/react-query";
6
+ import { Fragment as w, jsx as T, jsxs as E } from "react/jsx-runtime";
7
+ import { createPortal as D } from "react-dom";
8
+ import { create as O } from "zustand";
9
+ //#region src/components/primitives/Avatar.tsx
10
+ function k({ name: e, size: t = 22, color: n }) {
11
+ let r = e.split(/\s+/).map((e) => e[0]).slice(0, 2).join("").toUpperCase(), i = e.split("").reduce((e, t) => e + t.charCodeAt(0), 0), a = [
12
+ "#DCE4F6",
13
+ "#E4DCF6",
14
+ "#F6DCE4",
15
+ "#F6E4DC",
16
+ "#DCF6E4",
17
+ "#DCF6F1",
18
+ "#F1F6DC",
19
+ "#F6DCF1"
20
+ ];
21
+ return /* @__PURE__ */ T("span", {
22
+ style: {
23
+ display: "inline-flex",
24
+ alignItems: "center",
25
+ justifyContent: "center",
26
+ width: t,
27
+ height: t,
28
+ borderRadius: 999,
29
+ background: n || a[i % a.length],
30
+ color: "#1E2A4A",
31
+ fontSize: t < 20 ? 9.5 : 10.5,
32
+ fontWeight: 600,
33
+ flexShrink: 0
34
+ },
35
+ children: r
36
+ });
37
+ }
38
+ //#endregion
39
+ //#region src/components/primitives/Tooltip.tsx
40
+ var A = 350, j = 80, M = 260, N = 6, P = 4;
41
+ function F(e, t) {
42
+ let [n, r] = b(!1), [i, a] = b(null), o = y(null), s = y(null), c = y(null), l = _(), u = h(() => {
43
+ s.current && clearTimeout(s.current), c.current && clearTimeout(c.current), s.current = null, c.current = null;
44
+ }, []), d = h(() => {
45
+ let t = e.current;
46
+ if (!t) return;
47
+ let n = t.getBoundingClientRect(), r = o.current, i = r?.offsetWidth ?? M, s = r?.offsetHeight ?? 0, c = n.left + n.width / 2 - i / 2;
48
+ c = Math.max(P, Math.min(c, window.innerWidth - i - P));
49
+ let l = n.top - N - s < P ? n.bottom + N : n.top - N - s;
50
+ a({
51
+ left: c,
52
+ top: l
53
+ });
54
+ }, [e]), f = h((e) => {
55
+ t && (u(), e ? r(!0) : s.current = setTimeout(() => r(!0), A));
56
+ }, [u, t]), p = h(() => {
57
+ u(), c.current = setTimeout(() => r(!1), j);
58
+ }, [u]);
59
+ g(() => {
60
+ if (!n) {
61
+ a(null);
62
+ return;
63
+ }
64
+ d();
65
+ let e = () => d();
66
+ return window.addEventListener("scroll", e, !0), window.addEventListener("resize", e), () => {
67
+ window.removeEventListener("scroll", e, !0), window.removeEventListener("resize", e);
68
+ };
69
+ }, [n, d]), g(() => u, [u]);
70
+ let m = {
71
+ position: "fixed",
72
+ left: i?.left ?? 0,
73
+ top: i?.top ?? 0,
74
+ zIndex: 1e3,
75
+ maxWidth: M,
76
+ padding: "5px 8px",
77
+ borderRadius: 6,
78
+ background: "var(--surface-inverse, #1f2430)",
79
+ color: "var(--text-inverse, #f5f6f8)",
80
+ fontSize: 12,
81
+ lineHeight: 1.4,
82
+ boxShadow: "0 4px 14px rgba(0,0,0,0.18)",
83
+ pointerEvents: "none",
84
+ visibility: i ? "visible" : "hidden",
85
+ whiteSpace: "normal"
86
+ }, v = n && t ? D(/* @__PURE__ */ T("div", {
87
+ ref: o,
88
+ id: l,
89
+ role: "tooltip",
90
+ style: m,
91
+ children: t
92
+ }), document.body) : null;
93
+ return {
94
+ open: n,
95
+ triggerHandlers: {
96
+ onMouseEnter: () => f(!1),
97
+ onMouseLeave: p,
98
+ onFocus: () => f(!0),
99
+ onBlur: p
100
+ },
101
+ describedBy: n && t ? l : void 0,
102
+ portal: v
103
+ };
104
+ }
105
+ function I({ content: e, children: t, triggerProps: n }) {
106
+ let r = y(null), { triggerHandlers: i, describedBy: a, portal: o } = F(r, e);
107
+ return e ? /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ T("span", {
108
+ ...n,
109
+ ref: r,
110
+ "aria-describedby": a,
111
+ style: {
112
+ display: "inline-flex",
113
+ alignItems: "center",
114
+ ...n?.style ?? {}
115
+ },
116
+ ...i,
117
+ children: t
118
+ }), o] }) : /* @__PURE__ */ T(w, { children: t });
119
+ }
120
+ function ee({ label: t, size: n = 14, ...r }) {
121
+ return /* @__PURE__ */ T(I, {
122
+ content: t,
123
+ children: /* @__PURE__ */ T("span", {
124
+ tabIndex: 0,
125
+ role: "note",
126
+ "aria-label": t,
127
+ "data-testid": r["data-testid"],
128
+ style: {
129
+ display: "inline-flex",
130
+ alignItems: "center",
131
+ color: "var(--text-3)",
132
+ cursor: "help"
133
+ },
134
+ children: /* @__PURE__ */ T(e.info, { size: n })
135
+ })
136
+ });
137
+ }
138
+ //#endregion
139
+ //#region src/components/primitives/RecordIdBadge.tsx
140
+ var te = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, ne = 1200;
141
+ function re({ value: t }) {
142
+ let [n, r] = b(!1), i = te.test(t) ? `${t.slice(0, 8)}…` : t;
143
+ return /* @__PURE__ */ E("button", {
144
+ type: "button",
145
+ onClick: h(async () => {
146
+ try {
147
+ await navigator.clipboard.writeText(t), r(!0), window.setTimeout(() => r(!1), ne);
148
+ } catch {}
149
+ }, [t]),
150
+ title: n ? "Copied" : `Copy ${t}`,
151
+ className: "mono inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[11px] text-text-4 hover:bg-surface-2 hover:text-text-3 transition-colors shrink-0 border border-transparent hover:border-border",
152
+ children: [/* @__PURE__ */ T("span", { children: i }), n ? /* @__PURE__ */ T(e.check, { size: 10 }) : /* @__PURE__ */ T(e.copy, {
153
+ size: 10,
154
+ style: { opacity: .6 }
155
+ })]
156
+ });
157
+ }
158
+ //#endregion
159
+ //#region src/lib/branding.ts
160
+ var L = "branding";
161
+ function ie(e, t) {
162
+ return e?.parameters.find((e) => e.code === t)?.value;
163
+ }
164
+ function ae(e) {
165
+ return oe(ie(e, L));
166
+ }
167
+ function oe(e) {
168
+ if (R(e)) return e;
169
+ }
170
+ function se(e) {
171
+ let t = ae(e)?.identity;
172
+ return R(t) ? t : void 0;
173
+ }
174
+ function R(e) {
175
+ return !!e && typeof e == "object" && !Array.isArray(e);
176
+ }
177
+ function ce(e) {
178
+ if (!e) return !1;
179
+ let t = e.trim();
180
+ return t ? t.startsWith("/") || t.startsWith("http://") || t.startsWith("https://") || t.startsWith("data:image/") : !1;
181
+ }
182
+ //#endregion
183
+ //#region src/api/params.ts
184
+ async function le() {
185
+ let e = (await f("/api/params/public")).data;
186
+ if (Array.isArray(e)) return { parameters: e };
187
+ let t = e ?? {};
188
+ return {
189
+ parameters: t.parameters ?? [],
190
+ accents: t.accents,
191
+ messages: t.messages,
192
+ meta: t.meta
193
+ };
194
+ }
195
+ async function z(e) {
196
+ return (await f(`/api/params/${encodeURIComponent(e)}`)).data;
197
+ }
198
+ //#endregion
199
+ //#region src/hooks/useParams.ts
200
+ function B() {
201
+ return S({
202
+ queryKey: ["params-public"],
203
+ queryFn: le,
204
+ staleTime: 300 * 1e3
205
+ });
206
+ }
207
+ function V(e, t = {}) {
208
+ let n = t.enabled ?? !0;
209
+ return S({
210
+ queryKey: ["params", e],
211
+ queryFn: () => z(e),
212
+ enabled: !!e && n,
213
+ staleTime: 60 * 1e3
214
+ });
215
+ }
216
+ function H(e) {
217
+ let t = l((e) => e.isAuthenticated), n = B(), r = V(e, { enabled: t }), i = ue(n.data?.parameters, e);
218
+ if (t && r.data?.found) return {
219
+ value: r.data.value,
220
+ found: !0,
221
+ source: r.data.source,
222
+ loading: !1,
223
+ error: null
224
+ };
225
+ let a = i !== void 0;
226
+ return {
227
+ value: i?.value,
228
+ found: a,
229
+ source: a ? "public" : void 0,
230
+ loading: n.isLoading || t && r.isLoading && !r.data && !r.error,
231
+ error: r.error ?? n.error ?? null
232
+ };
233
+ }
234
+ function ue(e, t) {
235
+ return e?.find((e) => e.code === t);
236
+ }
237
+ function U(e, t) {
238
+ let n = S({
239
+ queryKey: ["params", e],
240
+ queryFn: () => z(e),
241
+ enabled: !!e,
242
+ staleTime: 60 * 1e3
243
+ }), r = n.data, i = !!r?.found;
244
+ return {
245
+ value: i ? r.value : t,
246
+ found: i,
247
+ source: r?.source,
248
+ loading: n.isLoading,
249
+ error: n.error ?? null
250
+ };
251
+ }
252
+ //#endregion
253
+ //#region src/hooks/useBranding.ts
254
+ function W() {
255
+ let e = H(L);
256
+ return {
257
+ branding: oe(e.value),
258
+ isLoading: e.loading
259
+ };
260
+ }
261
+ function de() {
262
+ return W().branding?.identity;
263
+ }
264
+ function G() {
265
+ return W().branding?.chrome;
266
+ }
267
+ //#endregion
268
+ //#region src/stores/page-state.ts
269
+ var K = 1800 * 1e3, q = null;
270
+ function J(e) {
271
+ q = e;
272
+ }
273
+ function Y(e) {
274
+ if (!(!e || !q)) for (let t of e.queryKeys) q.removeQueries({
275
+ queryKey: t,
276
+ exact: !0
277
+ });
278
+ }
279
+ function X(e, t) {
280
+ let n = e[t];
281
+ if (!n) return e;
282
+ Y(n);
283
+ let r = { ...e };
284
+ return delete r[t], r;
285
+ }
286
+ function fe(e, t) {
287
+ let n = e;
288
+ for (; Object.keys(n).length > 64;) {
289
+ let e = null, r = Infinity;
290
+ for (let [i, a] of Object.entries(n)) i !== t && a.lastActiveAt < r && (r = a.lastActiveAt, e = i);
291
+ if (e === null) break;
292
+ n = X(n, e);
293
+ }
294
+ return n;
295
+ }
296
+ var Z = O((e, t) => ({
297
+ entries: {},
298
+ ttlMs: K,
299
+ setTtl: (n) => {
300
+ if (n <= 0) {
301
+ let { entries: r } = t();
302
+ for (let e of Object.keys(r)) Y(r[e]);
303
+ e({
304
+ ttlMs: n,
305
+ entries: {}
306
+ });
307
+ return;
308
+ }
309
+ e({ ttlMs: n });
310
+ },
311
+ set: (n, r, i) => {
312
+ let a = t();
313
+ if (a.ttlMs <= 0) return;
314
+ let o = Date.now(), s = a.entries[n], c = s ? {
315
+ ...s,
316
+ bag: {
317
+ ...s.bag,
318
+ [r]: i
319
+ },
320
+ lastActiveAt: o
321
+ } : {
322
+ bag: { [r]: i },
323
+ lastActiveAt: o,
324
+ queryKeys: []
325
+ };
326
+ e({ entries: fe({
327
+ ...a.entries,
328
+ [n]: c
329
+ }, n) });
330
+ },
331
+ read: (e, n) => {
332
+ let r = t();
333
+ if (!(r.ttlMs <= 0)) return r.entries[e]?.bag[n];
334
+ },
335
+ touch: (n) => {
336
+ let r = t();
337
+ if (r.ttlMs <= 0) return;
338
+ let i = r.entries[n];
339
+ i && e({ entries: {
340
+ ...r.entries,
341
+ [n]: {
342
+ ...i,
343
+ lastActiveAt: Date.now()
344
+ }
345
+ } });
346
+ },
347
+ registerQueryKey: (n, r) => {
348
+ let i = t();
349
+ if (i.ttlMs <= 0) return;
350
+ let a = Date.now(), o = i.entries[n], s = o?.queryKeys.some((e) => pe(e, r));
351
+ if (o && s) return;
352
+ let c = o ? {
353
+ ...o,
354
+ queryKeys: [...o.queryKeys, r],
355
+ lastActiveAt: a
356
+ } : {
357
+ bag: {},
358
+ lastActiveAt: a,
359
+ queryKeys: [r]
360
+ };
361
+ e({ entries: fe({
362
+ ...i.entries,
363
+ [n]: c
364
+ }, n) });
365
+ },
366
+ kill: (n) => {
367
+ let r = t(), i = X(r.entries, n);
368
+ i !== r.entries && e({ entries: i });
369
+ },
370
+ sweep: (n) => {
371
+ let { ttlMs: r, entries: i } = t(), a = i;
372
+ for (let [e, t] of Object.entries(i)) (r <= 0 || n - t.lastActiveAt > r) && (a = X(a, e));
373
+ a !== i && e({ entries: a });
374
+ },
375
+ clear: () => {
376
+ let { entries: n } = t();
377
+ if (Object.keys(n).length !== 0) {
378
+ for (let e of Object.keys(n)) Y(n[e]);
379
+ e({ entries: {} });
380
+ }
381
+ }
382
+ }));
383
+ function pe(e, t) {
384
+ if (e === t) return !0;
385
+ try {
386
+ return JSON.stringify(e) === JSON.stringify(t);
387
+ } catch {
388
+ return !1;
389
+ }
390
+ }
391
+ //#endregion
392
+ //#region src/lib/canonical-url.ts
393
+ function me(e) {
394
+ return e.length > 1 && e.endsWith("/") ? e.replace(/\/+$/, "") || "/" : e;
395
+ }
396
+ function Q(e) {
397
+ let t = me(e.pathname), n = e.search ?? "", r = n.startsWith("?") ? n.slice(1) : n, a = new URLSearchParams(r);
398
+ for (let e of i) a.delete(e);
399
+ a.sort();
400
+ let o = a.toString();
401
+ return o ? `${t}?${o}` : t;
402
+ }
403
+ function he(e) {
404
+ return me(e.pathname);
405
+ }
406
+ //#endregion
407
+ //#region src/hooks/usePageStateTtl.ts
408
+ var ge = "ui_page_state_ttl_ms";
409
+ function _e() {
410
+ let { value: e } = U(ge, K);
411
+ return typeof e != "number" || !Number.isFinite(e) || e < 0 ? K : e;
412
+ }
413
+ //#endregion
414
+ //#region src/hooks/usePageStateRuntime.ts
415
+ var ve = [
416
+ ["entity-data"],
417
+ ["entity-count"],
418
+ ["entity-item"],
419
+ ["entity-data-cursor"],
420
+ ["entity-data-all"],
421
+ ["action-data"],
422
+ ["action-data-cursor"]
423
+ ], ye = 6e4;
424
+ function be(e, t) {
425
+ for (let n of ve) e.setQueryDefaults(n, { gcTime: t });
426
+ }
427
+ function xe() {
428
+ let e = C(), t = _e(), n = x(), r = y(n);
429
+ r.current = n, g(() => (J(e), () => J(null)), [e]), g(() => {
430
+ if (Z.getState().setTtl(t), be(e, t), t <= 0) for (let t of ve) e.removeQueries({ queryKey: t });
431
+ }, [e, t]), g(() => {
432
+ if (t <= 0) return;
433
+ let e = setInterval(() => {
434
+ let e = Z.getState(), t = r.current;
435
+ e.touch(Q(t)), e.touch(he(t)), e.sweep(Date.now());
436
+ }, ye);
437
+ return () => clearInterval(e);
438
+ }, [t]);
439
+ }
440
+ function Se(e, t = !0) {
441
+ let n = Q(x());
442
+ g(() => {
443
+ !t || !e || Z.getState().registerQueryKey(n, e);
444
+ }, [
445
+ n,
446
+ e ? JSON.stringify(e) : "",
447
+ t
448
+ ]);
449
+ }
450
+ //#endregion
451
+ //#region src/lib/record-documents-key.ts
452
+ var Ce = "record-documents";
453
+ //#endregion
454
+ //#region src/hooks/useBrandingChrome.ts
455
+ function we() {
456
+ let e = s(), t = G();
457
+ return (e.enabled ? t?.embed?.viewport : t?.full?.viewport) ?? "auto";
458
+ }
459
+ function Te(e) {
460
+ let t = s(), n = G();
461
+ return v(() => {
462
+ let r = { ...t.enabled ? n?.embed?.surfaces?.[e] : n?.full?.surfaces?.[e] };
463
+ return {
464
+ ...r,
465
+ isVisible: (e) => r[e] !== !1
466
+ };
467
+ }, [
468
+ n,
469
+ t.enabled,
470
+ e
471
+ ]);
472
+ }
473
+ function Ee() {
474
+ let e = G();
475
+ return v(() => {
476
+ let t = { ...e?.full?.shell };
477
+ return {
478
+ ...t,
479
+ isVisible: (e) => t[e] !== !1
480
+ };
481
+ }, [e]);
482
+ }
483
+ //#endregion
484
+ //#region src/components/pages/exportRequest.ts
485
+ var De = /* @__PURE__ */ new Set(["_select", "_actions"]);
486
+ function Oe(e) {
487
+ let t = {};
488
+ return e.screenCode && (t.screen = e.screenCode), e.jsonFilters && e.jsonFilters.length > 0 && (t.filters = e.jsonFilters), e.search && (t.search = e.search), e.sort && (t.sort = e.sort), e.includeDeleted && (t.include_deleted = !0), e.page && (t.page = e.page), e.perPage && (t.per_page = e.perPage), t;
489
+ }
490
+ function ke(e, t) {
491
+ let n = t.visibleColumns.filter((e) => !De.has(e)), r = {
492
+ format: "csv",
493
+ scope: t.scope,
494
+ query: Oe(e),
495
+ columns: n
496
+ };
497
+ return t.scope === "selected_rows" && t.selectedRowPKs && t.selectedRowPKs.length > 0 && (r.selection = t.selectedRowPKs), t.locale && (r.locale = t.locale), t.filename && (r.filename = t.filename), r;
498
+ }
499
+ //#endregion
500
+ //#region src/components/pages/DocumentsMenu.tsx
501
+ var Ae = "document-templates-available";
502
+ function je({ entityCode: n, scope: i, objectIds: a = [], viewState: s, selectedIds: l = [], capability: d, canManageTemplates: f = !1 }) {
503
+ let { run: m } = p(), h = y(null), [g, _] = b(!1), x = i === "detail" ? !!d?.generate_one : !!d?.generate_many, C = f && !x, { data: D, isLoading: O, error: k } = S({
504
+ queryKey: [Ae, n],
505
+ queryFn: async () => (await u("document.templates.available", { entity: n })).result?.templates ?? [],
506
+ enabled: g || C,
507
+ staleTime: 6e4
508
+ }), A = O, j = v(() => (D ?? []).filter((e) => i === "detail" ? e.input_mode === "one" || e.input_mode === "global" : e.input_mode === "many" || e.input_mode === "global"), [i, D]), M = C && j.length > 0, N = x || M;
509
+ function P() {
510
+ _((e) => !e);
511
+ }
512
+ function F(e) {
513
+ if (e.input_mode === "global") return [{ kind: "global" }];
514
+ if (i === "detail") return e.input_mode === "one" && a.length === 1 ? [{
515
+ kind: "one",
516
+ objectIds: a
517
+ }] : [];
518
+ if (e.input_mode === "many") {
519
+ let e = [];
520
+ return s && e.push({
521
+ kind: "current_view",
522
+ query: Oe(s)
523
+ }), l.length > 0 && e.push({
524
+ kind: "selected",
525
+ objectIds: l
526
+ }), e;
527
+ }
528
+ return [];
529
+ }
530
+ function I(e, t, n) {
531
+ let r = Me(e), i = c(e.name) || e.code;
532
+ _(!1), m({
533
+ action: r,
534
+ title: i,
535
+ execute: (r) => {
536
+ let i = {
537
+ template_code: e.code,
538
+ template_source: e.source,
539
+ output_format: n
540
+ };
541
+ return Object.keys(r).length > 0 && (i.params = r), "objectIds" in t && (i.object_ids = t.objectIds), "query" in t && (i.query = {
542
+ scope: "current_view",
543
+ query: t.query
544
+ }), u("document.generate", i);
545
+ }
546
+ });
547
+ }
548
+ return N ? /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ T(o, {
549
+ ref: h,
550
+ kind: "ghost",
551
+ size: "sm",
552
+ icon: T(A ? e.loader : e.filePlus, { size: 12 }),
553
+ onClick: P,
554
+ disabled: A,
555
+ children: "Generate"
556
+ }), /* @__PURE__ */ E(t, {
557
+ open: g,
558
+ anchor: h.current,
559
+ onClose: () => _(!1),
560
+ align: "end",
561
+ width: 300,
562
+ children: [
563
+ A && /* @__PURE__ */ T(r, {
564
+ disabled: !0,
565
+ icon: /* @__PURE__ */ T(e.loader, { size: 12 }),
566
+ children: "Loading templates..."
567
+ }),
568
+ k && /* @__PURE__ */ T(r, {
569
+ disabled: !0,
570
+ icon: /* @__PURE__ */ T(e.warning, { size: 12 }),
571
+ children: k instanceof Error ? k.message : String(k)
572
+ }),
573
+ !A && !k && j.length === 0 && /* @__PURE__ */ T(r, {
574
+ disabled: !0,
575
+ icon: /* @__PURE__ */ T(e.file, { size: 12 }),
576
+ children: "No document templates"
577
+ }),
578
+ !A && !k && j.map((t) => {
579
+ let n = F(t);
580
+ return n.length === 0 ? null : Ne(t).flatMap((i) => n.map((n) => i.available ? /* @__PURE__ */ T(r, {
581
+ icon: /* @__PURE__ */ T(e.file, { size: 12 }),
582
+ onClick: () => I(t, n, i.format),
583
+ title: c(t.description),
584
+ children: Pe(t, n, i.format)
585
+ }, `${t.source}:${t.code}:${n.kind}:${i.format}`) : /* @__PURE__ */ E(r, {
586
+ disabled: !0,
587
+ icon: /* @__PURE__ */ T(e.file, { size: 12 }),
588
+ title: i.disabled_reason,
589
+ children: [
590
+ Pe(t, n, i.format),
591
+ " - ",
592
+ i.disabled_reason || "Unavailable"
593
+ ]
594
+ }, `${t.source}:${t.code}:${n.kind}:${i.format}:disabled`)));
595
+ })
596
+ ]
597
+ })] }) : null;
598
+ }
599
+ function Me(e) {
600
+ let t = new m((e.params ?? []).map((e) => ({
601
+ ...e,
602
+ name: e.name ?? ""
603
+ })));
604
+ return {
605
+ handler: "document.generate",
606
+ display: {
607
+ name: e.name,
608
+ icon: "file",
609
+ description: e.description
610
+ },
611
+ resolved_params: t
612
+ };
613
+ }
614
+ function Ne(e) {
615
+ return e.outputs && e.outputs.length > 0 ? e.outputs : (e.allowed_outputs && e.allowed_outputs.length > 0 ? e.allowed_outputs : [e.output_format || "xlsx"]).map((e) => ({
616
+ format: e,
617
+ available: !0
618
+ }));
619
+ }
620
+ function Pe(e, t, n) {
621
+ let r = c(e.name) || e.code, i = n ? ` (${n.toUpperCase()})` : "";
622
+ switch (t.kind) {
623
+ case "one": return `${r}${i}`;
624
+ case "selected": return `${r}${i} - selected rows`;
625
+ case "current_view": return `${r}${i} - current view`;
626
+ case "global": return `${r}${i}`;
627
+ }
628
+ }
629
+ //#endregion
630
+ //#region src/lib/document-templates.ts
631
+ function Fe(e) {
632
+ return !!e?.entities?.document_template;
633
+ }
634
+ //#endregion
635
+ //#region src/lib/scroll-restoration.ts
636
+ var Ie = "scroll", Le = 120, Re = 24, ze = 600;
637
+ function Be(e, t) {
638
+ return Number.isFinite(e) ? Math.max(0, Math.min(e, Number.isFinite(t) && t > 0 ? t : 0)) : 0;
639
+ }
640
+ function Ve(e, t, n) {
641
+ let r = Number.isFinite(e) ? e : 0;
642
+ if (t) {
643
+ let e = n[t.index];
644
+ if (e !== void 0) return {
645
+ key: e,
646
+ delta: Math.max(0, r - t.start),
647
+ offset: r
648
+ };
649
+ }
650
+ return {
651
+ key: "",
652
+ delta: 0,
653
+ offset: r
654
+ };
655
+ }
656
+ function He(e, t, n, r) {
657
+ if (!e) return null;
658
+ if (e.key) {
659
+ let i = t.indexOf(e.key);
660
+ if (i >= 0) {
661
+ let t = n(i);
662
+ if (t !== void 0) return Be(t + e.delta, r);
663
+ }
664
+ }
665
+ return Be(e.offset, r);
666
+ }
667
+ function Ue(e = Ie) {
668
+ let t = x(), n = y(null);
669
+ if (n.current === null) {
670
+ let r = Q(t), i = Z.getState().read(r, e);
671
+ n.current = i && Number.isFinite(i.offset) ? Math.max(0, i.offset) : 0;
672
+ }
673
+ return n.current;
674
+ }
675
+ function We(e) {
676
+ let t = 0, n = null, r = () => {
677
+ n = null, t = Date.now(), e();
678
+ };
679
+ return {
680
+ trigger() {
681
+ let e = Date.now() - t;
682
+ e >= Le ? r() : n === null && (n = setTimeout(r, Le - e));
683
+ },
684
+ flush() {
685
+ n !== null && (clearTimeout(n), n = null), e();
686
+ },
687
+ cancel() {
688
+ n !== null && (clearTimeout(n), n = null);
689
+ }
690
+ };
691
+ }
692
+ function Ge(e) {
693
+ let { virtualizer: t, scrollElementRef: n, rowKeys: r } = e, i = e.stateKey ?? "scroll", a = e.enabled ?? !0, o = Q(x()), s = y(t);
694
+ s.current = t;
695
+ let c = y(r);
696
+ c.current = r;
697
+ let l = y(null);
698
+ g(() => {
699
+ l.current !== o && (l.current = null);
700
+ }, [o]), g(() => {
701
+ if (!a) return;
702
+ let e = s.current;
703
+ if (!e || r.length === 0) return;
704
+ let t = Z.getState().read(o, i), n = l.current !== o;
705
+ if (l.current = o, !t) {
706
+ n && e.scrollToOffset(0, {
707
+ align: "start",
708
+ behavior: "auto"
709
+ });
710
+ return;
711
+ }
712
+ let u = 0, d = 0, f = NaN, p = () => {
713
+ let e = s.current;
714
+ if (!e) return;
715
+ let n = He(t, c.current, (t) => e.getOffsetForIndex(t, "start")?.[0], e.getTotalSize());
716
+ n !== null && (Number.isNaN(f) || Math.abs(n - f) > 1) && (e.scrollToOffset(n, {
717
+ align: "start",
718
+ behavior: "auto"
719
+ }), f = n, d++ < Re && (u = requestAnimationFrame(p)));
720
+ };
721
+ return p(), () => {
722
+ u && cancelAnimationFrame(u);
723
+ };
724
+ }, [
725
+ a,
726
+ o,
727
+ r,
728
+ i
729
+ ]), Ke(n, a, o, i, (e) => {
730
+ let t = s.current;
731
+ if (!t) return null;
732
+ let n = e.scrollTop, r = n > 0 ? n : t.scrollOffset ?? 0;
733
+ return Ve(r, t.getVirtualItemForOffset(r), c.current);
734
+ });
735
+ }
736
+ function Ke(e, t, n, r, i) {
737
+ let a = y(i);
738
+ a.current = i, g(() => {
739
+ if (!t) return;
740
+ let i = 0, o = ze, s = null, c = null, l = (e) => {
741
+ let t = a.current(e);
742
+ t && Z.getState().set(n, r, t);
743
+ }, u = () => c?.trigger(), d = () => {
744
+ let t = e.current;
745
+ if (!t) {
746
+ o-- > 0 && (i = requestAnimationFrame(d));
747
+ return;
748
+ }
749
+ s = t, c = We(() => l(t)), t.addEventListener("scroll", u, { passive: !0 });
750
+ };
751
+ return d(), () => {
752
+ i && cancelAnimationFrame(i), s && s.removeEventListener("scroll", u), c?.flush();
753
+ };
754
+ }, [
755
+ t,
756
+ e,
757
+ n,
758
+ r
759
+ ]);
760
+ }
761
+ function qe(e) {
762
+ let { scrollElementRef: t } = e, n = e.stateKey ?? "scroll", r = e.enabled ?? !0, i = Q(x()), a = y(null);
763
+ g(() => {
764
+ if (!r || a.current === i) return;
765
+ let e = 0, o = ze, s = () => {
766
+ let r = t.current;
767
+ if (!r) {
768
+ o-- > 0 && (e = requestAnimationFrame(s));
769
+ return;
770
+ }
771
+ a.current = i;
772
+ let c = Z.getState().read(i, n);
773
+ c && (r.scrollTop = Number.isFinite(c.offset) ? Math.max(0, c.offset) : 0);
774
+ };
775
+ return s(), () => {
776
+ e && cancelAnimationFrame(e);
777
+ };
778
+ }, [
779
+ r,
780
+ i,
781
+ n,
782
+ t
783
+ ]), Ke(t, r, i, n, (e) => ({
784
+ key: "",
785
+ delta: 0,
786
+ offset: e.scrollTop
787
+ }));
788
+ }
789
+ //#endregion
790
+ //#region src/components/list/peekDraftStore.ts
791
+ var $ = /* @__PURE__ */ new Map();
792
+ function Je(e, t) {
793
+ $.set(e, t);
794
+ }
795
+ function Ye(e) {
796
+ let t = $.get(e);
797
+ return t === void 0 ? null : ($.delete(e), t);
798
+ }
799
+ function Xe(e) {
800
+ $.delete(e);
801
+ }
802
+ //#endregion
803
+ //#region src/components/shared/RefreshControl.tsx
804
+ function Ze({ liveObject: t, realtime: r = !0 }) {
805
+ return /* @__PURE__ */ E("span", {
806
+ style: {
807
+ display: "inline-flex",
808
+ alignItems: "center",
809
+ gap: 8
810
+ },
811
+ children: [/* @__PURE__ */ T(a, {
812
+ icon: t.isFetching ? /* @__PURE__ */ T("span", {
813
+ "data-testid": "refresh-spinner",
814
+ style: { display: "inline-flex" },
815
+ children: /* @__PURE__ */ T(d, { size: 14 })
816
+ }) : /* @__PURE__ */ T(e.refresh, { size: 14 }),
817
+ title: "Refresh",
818
+ disabled: t.isLoading || t.isFetching,
819
+ onClick: () => {
820
+ t.refetch();
821
+ }
822
+ }), r && /* @__PURE__ */ T("span", {
823
+ "data-testid": "live-indicator",
824
+ title: t.isLive ? "This view updates automatically in realtime." : "Realtime updates are paused. Refresh manually to load the latest data.",
825
+ children: /* @__PURE__ */ T(n, {
826
+ tone: t.isLive ? "emerald" : "amber",
827
+ size: "xs",
828
+ dot: !0,
829
+ children: t.isLive ? "Live" : "Updates paused"
830
+ })
831
+ })]
832
+ });
833
+ }
834
+ //#endregion
835
+ export { V as A, K as C, H as D, de as E, I as F, k as I, ce as M, re as N, U as O, ee as P, Q as S, W as T, xe as _, Ie as a, _e as b, Ge as c, ke as d, Te as f, be as g, Ce as h, Ye as i, se as j, B as k, Fe as l, we as m, Xe as n, qe as o, Ee as p, Je as r, Ue as s, Ze as t, je as u, Se as v, Z as w, he as x, ge as y };