@declarion/react 0.32.0 → 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 (33) hide show
  1. package/dist-lib/{ActionRunner-CaSrGpBi.js → ActionRunner-UGGvGypS.js} +676 -543
  2. package/dist-lib/{DraggableChildrenTable-CAHg7paQ.js → DraggableChildrenTable-CljdYXd_.js} +30 -30
  3. package/dist-lib/DynamicIcon-BWO6QtNF.js +261 -0
  4. package/dist-lib/{Grid-DDbBhqcl.js → Grid-5Y_iPqNW.js} +2 -2
  5. package/dist-lib/{LayoutRenderer-CelsqsZ6.js → LayoutRenderer-CoTMmvNW.js} +712 -712
  6. package/dist-lib/{MarkdownRenderer-DThy2ixe.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-BKIpTNK7.js → SmartRecordListPage.impl-BF_ieDc2.js} +258 -258
  10. package/dist-lib/components/pages/DocumentsMenu.d.ts +22 -0
  11. package/dist-lib/components/pages/RecordDocumentsPanel.d.ts +42 -0
  12. package/dist-lib/components/pages/list/ListHeader.d.ts +1 -11
  13. package/dist-lib/components/primitives/Icons.d.ts +1 -0
  14. package/dist-lib/components/primitives/Tooltip.d.ts +30 -0
  15. package/dist-lib/components/primitives/index.d.ts +2 -0
  16. package/dist-lib/components/shared/ActionResultDialog.d.ts +4 -0
  17. package/dist-lib/components/shared/RecordHeader.d.ts +2 -1
  18. package/dist-lib/components/shared/ResponsiveActionBar.d.ts +9 -1
  19. package/dist-lib/icons.js +1 -1
  20. package/dist-lib/index.js +2288 -2334
  21. package/dist-lib/lib/document-templates.d.ts +12 -0
  22. package/dist-lib/lib/download.d.ts +20 -0
  23. package/dist-lib/lib/record-documents-key.d.ts +1 -0
  24. package/dist-lib/{registry-KQyyL5Gt.js → registry-DnPK3Msj.js} +826 -826
  25. package/dist-lib/testing.js +25 -25
  26. package/dist-lib/types/api.d.ts +1 -9
  27. package/dist-lib/types/schema.d.ts +17 -1
  28. package/dist-lib/{useProperties-D74hyWIa.js → useProperties-CgRhBh0k.js} +52 -52
  29. package/dist-lib/{value-BfXXl5EE.js → value-GmL5BVFm.js} +29 -29
  30. package/package.json +1 -1
  31. package/dist-lib/DynamicIcon-DCRdxxZ7.js +0 -260
  32. package/dist-lib/RefreshControl-CorluL6r.js +0 -582
  33. package/dist-lib/SmartDetailPage.impl-USIxbl-8.js +0 -1532
@@ -0,0 +1,837 @@
1
+ import { s as e } from "./DynamicIcon-BWO6QtNF.js";
2
+ import { Gn as t, Mn as n, Nn as r, Q as i, Un as a, Vn as o, Wn as s, Z as c, _t as l, bn as u, jt as d, ln as f, n as p, ot as m } from "./ActionRunner-UGGvGypS.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 ie = "branding";
161
+ function ae(e) {
162
+ let t = {};
163
+ if (!e) return t;
164
+ for (let n of e) t[n.code] = n.value;
165
+ return t;
166
+ }
167
+ function oe(e, t) {
168
+ return e?.parameters.find((e) => e.code === t)?.value;
169
+ }
170
+ function se(e) {
171
+ return L(oe(e, ie));
172
+ }
173
+ function L(e) {
174
+ if (R(e)) return e;
175
+ }
176
+ function ce(e) {
177
+ let t = se(e)?.identity;
178
+ return R(t) ? t : void 0;
179
+ }
180
+ function R(e) {
181
+ return !!e && typeof e == "object" && !Array.isArray(e);
182
+ }
183
+ function le(e) {
184
+ if (!e) return !1;
185
+ let t = e.trim();
186
+ return t ? t.startsWith("/") || t.startsWith("http://") || t.startsWith("https://") || t.startsWith("data:image/") : !1;
187
+ }
188
+ //#endregion
189
+ //#region src/api/params.ts
190
+ async function ue() {
191
+ let e = (await d("/api/params/public")).data;
192
+ if (Array.isArray(e)) return { parameters: e };
193
+ let t = e ?? {};
194
+ return {
195
+ parameters: t.parameters ?? [],
196
+ accents: t.accents,
197
+ messages: t.messages,
198
+ meta: t.meta
199
+ };
200
+ }
201
+ async function z(e) {
202
+ return (await d(`/api/params/${encodeURIComponent(e)}`)).data;
203
+ }
204
+ async function de(e, t, n) {
205
+ await m("user.__update", {
206
+ object_ids: [e],
207
+ entity: "user",
208
+ fields: { $params: [{
209
+ param_code: t,
210
+ value: n
211
+ }] }
212
+ });
213
+ }
214
+ //#endregion
215
+ //#region src/hooks/useParams.ts
216
+ function B() {
217
+ return S({
218
+ queryKey: ["params-public"],
219
+ queryFn: ue,
220
+ staleTime: 300 * 1e3
221
+ });
222
+ }
223
+ function V(e, t = {}) {
224
+ let n = t.enabled ?? !0;
225
+ return S({
226
+ queryKey: ["params", e],
227
+ queryFn: () => z(e),
228
+ enabled: !!e && n,
229
+ staleTime: 60 * 1e3
230
+ });
231
+ }
232
+ function H(e) {
233
+ let t = l((e) => e.isAuthenticated), n = B(), r = V(e, { enabled: t }), i = fe(n.data?.parameters, e);
234
+ if (t && r.data?.found) return {
235
+ value: r.data.value,
236
+ found: !0,
237
+ source: r.data.source,
238
+ loading: !1,
239
+ error: null
240
+ };
241
+ let a = i !== void 0;
242
+ return {
243
+ value: i?.value,
244
+ found: a,
245
+ source: a ? "public" : void 0,
246
+ loading: n.isLoading || t && r.isLoading && !r.data && !r.error,
247
+ error: r.error ?? n.error ?? null
248
+ };
249
+ }
250
+ function fe(e, t) {
251
+ return e?.find((e) => e.code === t);
252
+ }
253
+ function U(e, t) {
254
+ let n = S({
255
+ queryKey: ["params", e],
256
+ queryFn: () => z(e),
257
+ enabled: !!e,
258
+ staleTime: 60 * 1e3
259
+ }), r = n.data, i = !!r?.found;
260
+ return {
261
+ value: i ? r.value : t,
262
+ found: i,
263
+ source: r?.source,
264
+ loading: n.isLoading,
265
+ error: n.error ?? null
266
+ };
267
+ }
268
+ //#endregion
269
+ //#region src/hooks/useBranding.ts
270
+ function W() {
271
+ let e = H(ie);
272
+ return {
273
+ branding: L(e.value),
274
+ isLoading: e.loading
275
+ };
276
+ }
277
+ function pe() {
278
+ return W().branding?.identity;
279
+ }
280
+ function me() {
281
+ return W().branding?.chrome;
282
+ }
283
+ //#endregion
284
+ //#region src/stores/page-state.ts
285
+ var G = 1800 * 1e3, K = null;
286
+ function q(e) {
287
+ K = e;
288
+ }
289
+ function J(e) {
290
+ if (!(!e || !K)) for (let t of e.queryKeys) K.removeQueries({
291
+ queryKey: t,
292
+ exact: !0
293
+ });
294
+ }
295
+ function Y(e, t) {
296
+ let n = e[t];
297
+ if (!n) return e;
298
+ J(n);
299
+ let r = { ...e };
300
+ return delete r[t], r;
301
+ }
302
+ function X(e, t) {
303
+ let n = e;
304
+ for (; Object.keys(n).length > 64;) {
305
+ let e = null, r = Infinity;
306
+ for (let [i, a] of Object.entries(n)) i !== t && a.lastActiveAt < r && (r = a.lastActiveAt, e = i);
307
+ if (e === null) break;
308
+ n = Y(n, e);
309
+ }
310
+ return n;
311
+ }
312
+ var Z = O((e, t) => ({
313
+ entries: {},
314
+ ttlMs: G,
315
+ setTtl: (n) => {
316
+ if (n <= 0) {
317
+ let { entries: r } = t();
318
+ for (let e of Object.keys(r)) J(r[e]);
319
+ e({
320
+ ttlMs: n,
321
+ entries: {}
322
+ });
323
+ return;
324
+ }
325
+ e({ ttlMs: n });
326
+ },
327
+ set: (n, r, i) => {
328
+ let a = t();
329
+ if (a.ttlMs <= 0) return;
330
+ let o = Date.now(), s = a.entries[n], c = s ? {
331
+ ...s,
332
+ bag: {
333
+ ...s.bag,
334
+ [r]: i
335
+ },
336
+ lastActiveAt: o
337
+ } : {
338
+ bag: { [r]: i },
339
+ lastActiveAt: o,
340
+ queryKeys: []
341
+ };
342
+ e({ entries: X({
343
+ ...a.entries,
344
+ [n]: c
345
+ }, n) });
346
+ },
347
+ read: (e, n) => {
348
+ let r = t();
349
+ if (!(r.ttlMs <= 0)) return r.entries[e]?.bag[n];
350
+ },
351
+ touch: (n) => {
352
+ let r = t();
353
+ if (r.ttlMs <= 0) return;
354
+ let i = r.entries[n];
355
+ i && e({ entries: {
356
+ ...r.entries,
357
+ [n]: {
358
+ ...i,
359
+ lastActiveAt: Date.now()
360
+ }
361
+ } });
362
+ },
363
+ registerQueryKey: (n, r) => {
364
+ let i = t();
365
+ if (i.ttlMs <= 0) return;
366
+ let a = Date.now(), o = i.entries[n], s = o?.queryKeys.some((e) => he(e, r));
367
+ if (o && s) return;
368
+ let c = o ? {
369
+ ...o,
370
+ queryKeys: [...o.queryKeys, r],
371
+ lastActiveAt: a
372
+ } : {
373
+ bag: {},
374
+ lastActiveAt: a,
375
+ queryKeys: [r]
376
+ };
377
+ e({ entries: X({
378
+ ...i.entries,
379
+ [n]: c
380
+ }, n) });
381
+ },
382
+ kill: (n) => {
383
+ let r = t(), i = Y(r.entries, n);
384
+ i !== r.entries && e({ entries: i });
385
+ },
386
+ sweep: (n) => {
387
+ let { ttlMs: r, entries: i } = t(), a = i;
388
+ for (let [e, t] of Object.entries(i)) (r <= 0 || n - t.lastActiveAt > r) && (a = Y(a, e));
389
+ a !== i && e({ entries: a });
390
+ },
391
+ clear: () => {
392
+ let { entries: n } = t();
393
+ if (Object.keys(n).length !== 0) {
394
+ for (let e of Object.keys(n)) J(n[e]);
395
+ e({ entries: {} });
396
+ }
397
+ }
398
+ }));
399
+ function he(e, t) {
400
+ if (e === t) return !0;
401
+ try {
402
+ return JSON.stringify(e) === JSON.stringify(t);
403
+ } catch {
404
+ return !1;
405
+ }
406
+ }
407
+ //#endregion
408
+ //#region src/lib/canonical-url.ts
409
+ function ge(e) {
410
+ return e.length > 1 && e.endsWith("/") ? e.replace(/\/+$/, "") || "/" : e;
411
+ }
412
+ function Q(e) {
413
+ let t = ge(e.pathname), n = e.search ?? "", r = n.startsWith("?") ? n.slice(1) : n, a = new URLSearchParams(r);
414
+ for (let e of i) a.delete(e);
415
+ a.sort();
416
+ let o = a.toString();
417
+ return o ? `${t}?${o}` : t;
418
+ }
419
+ function _e(e) {
420
+ return ge(e.pathname);
421
+ }
422
+ //#endregion
423
+ //#region src/hooks/usePageStateTtl.ts
424
+ var ve = "ui_page_state_ttl_ms";
425
+ function ye() {
426
+ let { value: e } = U(ve, G);
427
+ return typeof e != "number" || !Number.isFinite(e) || e < 0 ? G : e;
428
+ }
429
+ //#endregion
430
+ //#region src/hooks/usePageStateRuntime.ts
431
+ var be = [
432
+ ["entity-data"],
433
+ ["entity-count"],
434
+ ["entity-item"],
435
+ ["entity-data-cursor"],
436
+ ["entity-data-all"],
437
+ ["action-data"],
438
+ ["action-data-cursor"]
439
+ ], xe = 6e4;
440
+ function Se(e, t) {
441
+ for (let n of be) e.setQueryDefaults(n, { gcTime: t });
442
+ }
443
+ function Ce() {
444
+ let e = C(), t = ye(), n = x(), r = y(n);
445
+ r.current = n, g(() => (q(e), () => q(null)), [e]), g(() => {
446
+ if (Z.getState().setTtl(t), Se(e, t), t <= 0) for (let t of be) e.removeQueries({ queryKey: t });
447
+ }, [e, t]), g(() => {
448
+ if (t <= 0) return;
449
+ let e = setInterval(() => {
450
+ let e = Z.getState(), t = r.current;
451
+ e.touch(Q(t)), e.touch(_e(t)), e.sweep(Date.now());
452
+ }, xe);
453
+ return () => clearInterval(e);
454
+ }, [t]);
455
+ }
456
+ function we(e, t = !0) {
457
+ let n = Q(x());
458
+ g(() => {
459
+ !t || !e || Z.getState().registerQueryKey(n, e);
460
+ }, [
461
+ n,
462
+ e ? JSON.stringify(e) : "",
463
+ t
464
+ ]);
465
+ }
466
+ //#endregion
467
+ //#region src/lib/record-documents-key.ts
468
+ var Te = "record-documents";
469
+ //#endregion
470
+ //#region src/hooks/useBrandingChrome.ts
471
+ function Ee(e) {
472
+ let t = c(), n = me();
473
+ return v(() => {
474
+ let r = e ? { ...t.enabled ? n?.embed?.surfaces?.[e] : n?.full?.surfaces?.[e] } : { ...n?.full?.shell };
475
+ return {
476
+ ...r,
477
+ isVisible: (e) => r[e] !== !1
478
+ };
479
+ }, [
480
+ n,
481
+ t.enabled,
482
+ e
483
+ ]);
484
+ }
485
+ //#endregion
486
+ //#region src/components/pages/exportRequest.ts
487
+ var De = /* @__PURE__ */ new Set(["_select", "_actions"]);
488
+ function Oe(e) {
489
+ let t = {};
490
+ 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;
491
+ }
492
+ function ke(e, t) {
493
+ let n = t.visibleColumns.filter((e) => !De.has(e)), r = {
494
+ format: "csv",
495
+ scope: t.scope,
496
+ query: Oe(e),
497
+ columns: n
498
+ };
499
+ 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;
500
+ }
501
+ //#endregion
502
+ //#region src/components/pages/DocumentsMenu.tsx
503
+ var Ae = "document-templates-available";
504
+ function je({ entityCode: n, scope: i, objectIds: a = [], viewState: s, selectedIds: c = [], capability: l, canManageTemplates: u = !1 }) {
505
+ let { run: d } = p(), h = y(null), [g, _] = b(!1), x = i === "detail" ? !!l?.generate_one : !!l?.generate_many, C = u && !x, { data: D, isLoading: O, error: k } = S({
506
+ queryKey: [Ae, n],
507
+ queryFn: async () => (await m("document.templates.available", { entity: n })).result?.templates ?? [],
508
+ enabled: g || C,
509
+ staleTime: 6e4
510
+ }), 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;
511
+ function P() {
512
+ _((e) => !e);
513
+ }
514
+ function F(e) {
515
+ if (e.input_mode === "global") return [{ kind: "global" }];
516
+ if (i === "detail") return e.input_mode === "one" && a.length === 1 ? [{
517
+ kind: "one",
518
+ objectIds: a
519
+ }] : [];
520
+ if (e.input_mode === "many") {
521
+ let e = [];
522
+ return s && e.push({
523
+ kind: "current_view",
524
+ query: Oe(s)
525
+ }), c.length > 0 && e.push({
526
+ kind: "selected",
527
+ objectIds: c
528
+ }), e;
529
+ }
530
+ return [];
531
+ }
532
+ function I(e, t, n) {
533
+ let r = Me(e), i = f(e.name) || e.code;
534
+ _(!1), d({
535
+ action: r,
536
+ title: i,
537
+ execute: (r) => {
538
+ let i = {
539
+ template_code: e.code,
540
+ template_source: e.source,
541
+ output_format: n
542
+ };
543
+ return Object.keys(r).length > 0 && (i.params = r), "objectIds" in t && (i.object_ids = t.objectIds), "query" in t && (i.query = {
544
+ scope: "current_view",
545
+ query: t.query
546
+ }), m("document.generate", i);
547
+ }
548
+ });
549
+ }
550
+ return N ? /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ T(t, {
551
+ ref: h,
552
+ kind: "ghost",
553
+ size: "sm",
554
+ icon: T(A ? e.loader : e.filePlus, { size: 12 }),
555
+ onClick: P,
556
+ disabled: A,
557
+ children: "Generate"
558
+ }), /* @__PURE__ */ E(o, {
559
+ open: g,
560
+ anchor: h.current,
561
+ onClose: () => _(!1),
562
+ align: "end",
563
+ width: 300,
564
+ children: [
565
+ A && /* @__PURE__ */ T(r, {
566
+ disabled: !0,
567
+ icon: /* @__PURE__ */ T(e.loader, { size: 12 }),
568
+ children: "Loading templates..."
569
+ }),
570
+ k && /* @__PURE__ */ T(r, {
571
+ disabled: !0,
572
+ icon: /* @__PURE__ */ T(e.warning, { size: 12 }),
573
+ children: k instanceof Error ? k.message : String(k)
574
+ }),
575
+ !A && !k && j.length === 0 && /* @__PURE__ */ T(r, {
576
+ disabled: !0,
577
+ icon: /* @__PURE__ */ T(e.file, { size: 12 }),
578
+ children: "No document templates"
579
+ }),
580
+ !A && !k && j.map((t) => {
581
+ let n = F(t);
582
+ return n.length === 0 ? null : Ne(t).flatMap((i) => n.map((n) => i.available ? /* @__PURE__ */ T(r, {
583
+ icon: /* @__PURE__ */ T(e.file, { size: 12 }),
584
+ onClick: () => I(t, n, i.format),
585
+ title: f(t.description),
586
+ children: Pe(t, n, i.format)
587
+ }, `${t.source}:${t.code}:${n.kind}:${i.format}`) : /* @__PURE__ */ E(r, {
588
+ disabled: !0,
589
+ icon: /* @__PURE__ */ T(e.file, { size: 12 }),
590
+ title: i.disabled_reason,
591
+ children: [
592
+ Pe(t, n, i.format),
593
+ " - ",
594
+ i.disabled_reason || "Unavailable"
595
+ ]
596
+ }, `${t.source}:${t.code}:${n.kind}:${i.format}:disabled`)));
597
+ })
598
+ ]
599
+ })] }) : null;
600
+ }
601
+ function Me(e) {
602
+ let t = new u((e.params ?? []).map((e) => ({
603
+ ...e,
604
+ name: e.name ?? ""
605
+ })));
606
+ return {
607
+ handler: "document.generate",
608
+ display: {
609
+ name: e.name,
610
+ icon: "file",
611
+ description: e.description
612
+ },
613
+ resolved_params: t
614
+ };
615
+ }
616
+ function Ne(e) {
617
+ 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) => ({
618
+ format: e,
619
+ available: !0
620
+ }));
621
+ }
622
+ function Pe(e, t, n) {
623
+ let r = f(e.name) || e.code, i = n ? ` (${n.toUpperCase()})` : "";
624
+ switch (t.kind) {
625
+ case "one": return `${r}${i}`;
626
+ case "selected": return `${r}${i} - selected rows`;
627
+ case "current_view": return `${r}${i} - current view`;
628
+ case "global": return `${r}${i}`;
629
+ }
630
+ }
631
+ //#endregion
632
+ //#region src/lib/document-templates.ts
633
+ function Fe(e) {
634
+ return !!e?.entities?.document_template;
635
+ }
636
+ //#endregion
637
+ //#region src/lib/scroll-restoration.ts
638
+ var Ie = "scroll", Le = 120, Re = 24, ze = 600;
639
+ function Be(e, t) {
640
+ return Number.isFinite(e) ? Math.max(0, Math.min(e, Number.isFinite(t) && t > 0 ? t : 0)) : 0;
641
+ }
642
+ function Ve(e, t, n) {
643
+ let r = Number.isFinite(e) ? e : 0;
644
+ if (t) {
645
+ let e = n[t.index];
646
+ if (e !== void 0) return {
647
+ key: e,
648
+ delta: Math.max(0, r - t.start),
649
+ offset: r
650
+ };
651
+ }
652
+ return {
653
+ key: "",
654
+ delta: 0,
655
+ offset: r
656
+ };
657
+ }
658
+ function He(e, t, n, r) {
659
+ if (!e) return null;
660
+ if (e.key) {
661
+ let i = t.indexOf(e.key);
662
+ if (i >= 0) {
663
+ let t = n(i);
664
+ if (t !== void 0) return Be(t + e.delta, r);
665
+ }
666
+ }
667
+ return Be(e.offset, r);
668
+ }
669
+ function Ue(e = Ie) {
670
+ let t = x(), n = y(null);
671
+ if (n.current === null) {
672
+ let r = Q(t), i = Z.getState().read(r, e);
673
+ n.current = i && Number.isFinite(i.offset) ? Math.max(0, i.offset) : 0;
674
+ }
675
+ return n.current;
676
+ }
677
+ function We(e) {
678
+ let t = 0, n = null, r = () => {
679
+ n = null, t = Date.now(), e();
680
+ };
681
+ return {
682
+ trigger() {
683
+ let e = Date.now() - t;
684
+ e >= Le ? r() : n === null && (n = setTimeout(r, Le - e));
685
+ },
686
+ flush() {
687
+ n !== null && (clearTimeout(n), n = null), e();
688
+ },
689
+ cancel() {
690
+ n !== null && (clearTimeout(n), n = null);
691
+ }
692
+ };
693
+ }
694
+ function Ge(e) {
695
+ let { virtualizer: t, scrollElementRef: n, rowKeys: r } = e, i = e.stateKey ?? "scroll", a = e.enabled ?? !0, o = Q(x()), s = y(t);
696
+ s.current = t;
697
+ let c = y(r);
698
+ c.current = r;
699
+ let l = y(null);
700
+ g(() => {
701
+ l.current !== o && (l.current = null);
702
+ }, [o]), g(() => {
703
+ if (!a) return;
704
+ let e = s.current;
705
+ if (!e || r.length === 0) return;
706
+ let t = Z.getState().read(o, i), n = l.current !== o;
707
+ if (l.current = o, !t) {
708
+ n && e.scrollToOffset(0, {
709
+ align: "start",
710
+ behavior: "auto"
711
+ });
712
+ return;
713
+ }
714
+ let u = 0, d = 0, f = NaN, p = () => {
715
+ let e = s.current;
716
+ if (!e) return;
717
+ let n = He(t, c.current, (t) => e.getOffsetForIndex(t, "start")?.[0], e.getTotalSize());
718
+ n !== null && (Number.isNaN(f) || Math.abs(n - f) > 1) && (e.scrollToOffset(n, {
719
+ align: "start",
720
+ behavior: "auto"
721
+ }), f = n, d++ < Re && (u = requestAnimationFrame(p)));
722
+ };
723
+ return p(), () => {
724
+ u && cancelAnimationFrame(u);
725
+ };
726
+ }, [
727
+ a,
728
+ o,
729
+ r,
730
+ i
731
+ ]), Ke(n, a, o, i, (e) => {
732
+ let t = s.current;
733
+ if (!t) return null;
734
+ let n = e.scrollTop, r = n > 0 ? n : t.scrollOffset ?? 0;
735
+ return Ve(r, t.getVirtualItemForOffset(r), c.current);
736
+ });
737
+ }
738
+ function Ke(e, t, n, r, i) {
739
+ let a = y(i);
740
+ a.current = i, g(() => {
741
+ if (!t) return;
742
+ let i = 0, o = ze, s = null, c = null, l = (e) => {
743
+ let t = a.current(e);
744
+ t && Z.getState().set(n, r, t);
745
+ }, u = () => c?.trigger(), d = () => {
746
+ let t = e.current;
747
+ if (!t) {
748
+ o-- > 0 && (i = requestAnimationFrame(d));
749
+ return;
750
+ }
751
+ s = t, c = We(() => l(t)), t.addEventListener("scroll", u, { passive: !0 });
752
+ };
753
+ return d(), () => {
754
+ i && cancelAnimationFrame(i), s && s.removeEventListener("scroll", u), c?.flush();
755
+ };
756
+ }, [
757
+ t,
758
+ e,
759
+ n,
760
+ r
761
+ ]);
762
+ }
763
+ function qe(e) {
764
+ let { scrollElementRef: t } = e, n = e.stateKey ?? "scroll", r = e.enabled ?? !0, i = Q(x()), a = y(null);
765
+ g(() => {
766
+ if (!r || a.current === i) return;
767
+ let e = 0, o = ze, s = () => {
768
+ let r = t.current;
769
+ if (!r) {
770
+ o-- > 0 && (e = requestAnimationFrame(s));
771
+ return;
772
+ }
773
+ a.current = i;
774
+ let c = Z.getState().read(i, n);
775
+ c && (r.scrollTop = Number.isFinite(c.offset) ? Math.max(0, c.offset) : 0);
776
+ };
777
+ return s(), () => {
778
+ e && cancelAnimationFrame(e);
779
+ };
780
+ }, [
781
+ r,
782
+ i,
783
+ n,
784
+ t
785
+ ]), Ke(t, r, i, n, (e) => ({
786
+ key: "",
787
+ delta: 0,
788
+ offset: e.scrollTop
789
+ }));
790
+ }
791
+ //#endregion
792
+ //#region src/components/list/peekDraftStore.ts
793
+ var $ = /* @__PURE__ */ new Map();
794
+ function Je(e, t) {
795
+ $.set(e, t);
796
+ }
797
+ function Ye(e) {
798
+ let t = $.get(e);
799
+ return t === void 0 ? null : ($.delete(e), t);
800
+ }
801
+ function Xe(e) {
802
+ $.delete(e);
803
+ }
804
+ //#endregion
805
+ //#region src/components/shared/RefreshControl.tsx
806
+ function Ze({ liveObject: t, realtime: r = !0 }) {
807
+ return /* @__PURE__ */ E("span", {
808
+ style: {
809
+ display: "inline-flex",
810
+ alignItems: "center",
811
+ gap: 8
812
+ },
813
+ children: [/* @__PURE__ */ T(s, {
814
+ icon: t.isFetching ? /* @__PURE__ */ T("span", {
815
+ "data-testid": "refresh-spinner",
816
+ style: { display: "inline-flex" },
817
+ children: /* @__PURE__ */ T(n, { size: 14 })
818
+ }) : /* @__PURE__ */ T(e.refresh, { size: 14 }),
819
+ title: "Refresh",
820
+ disabled: t.isLoading || t.isFetching,
821
+ onClick: () => {
822
+ t.refetch();
823
+ }
824
+ }), r && /* @__PURE__ */ T("span", {
825
+ "data-testid": "live-indicator",
826
+ title: t.isLive ? "This view updates automatically in realtime." : "Realtime updates are paused. Refresh manually to load the latest data.",
827
+ children: /* @__PURE__ */ T(a, {
828
+ tone: t.isLive ? "emerald" : "amber",
829
+ size: "xs",
830
+ dot: !0,
831
+ children: t.isLive ? "Live" : "Updates paused"
832
+ })
833
+ })]
834
+ });
835
+ }
836
+ //#endregion
837
+ export { ce as A, W as C, B as D, U as E, I as F, k as I, ae as M, re as N, V as O, ee as P, Z as S, H as T, ve as _, Ie as a, Q as b, Ge as c, ke as d, Ee as f, we as g, Ce as h, Ye as i, le as j, de as k, Fe as l, Se as m, Xe as n, qe as o, Te as p, Je as r, Ue as s, Ze as t, je as u, ye as v, pe as w, G as x, _e as y };