@declarion/react 0.87.0 → 0.88.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 (90) hide show
  1. package/dist-lib/app.js +28 -28
  2. package/dist-lib/components/actions/ActionButton.js +86 -85
  3. package/dist-lib/components/actions/ActionResultDialog.impl.js +47 -47
  4. package/dist-lib/components/actions/ActionRunner.js +47 -47
  5. package/dist-lib/components/actions/ObjectActionBar.js +9 -9
  6. package/dist-lib/components/actions/RowActionsKebab.js +19 -19
  7. package/dist-lib/components/agents/AgentChatPanel.impl.js +53 -53
  8. package/dist-lib/components/chrome/AssociationTabs.js +21 -21
  9. package/dist-lib/components/chrome/RecordHeader.js +33 -40
  10. package/dist-lib/components/detail-layout/AssociatedBlock.js +387 -381
  11. package/dist-lib/components/detail-layout/ChildrenBlock.js +12 -13
  12. package/dist-lib/components/detail-layout/ChildrenTimeline.js +198 -198
  13. package/dist-lib/components/detail-layout/DraggableChildrenTable.js +114 -114
  14. package/dist-lib/components/detail-layout/EditableChildrenTable.js +160 -160
  15. package/dist-lib/components/detail-layout/EvidenceBlock.js +20 -21
  16. package/dist-lib/components/detail-layout/PropertiesBlock.js +45 -39
  17. package/dist-lib/components/detail-layout/QuickAddForm.js +9 -9
  18. package/dist-lib/components/detail-layout/TimelineComposer.js +87 -89
  19. package/dist-lib/components/detail-layout/widgets/EntityScorecardWidget.js +100 -99
  20. package/dist-lib/components/fields/FileReferenceField.js +9 -9
  21. package/dist-lib/components/fields/StructureField.js +57 -47
  22. package/dist-lib/components/fields/TimestampField.js +59 -54
  23. package/dist-lib/components/fields/cells/factories/money.js +14 -23
  24. package/dist-lib/components/fields/cells/factories/nextRun.js +1 -1
  25. package/dist-lib/components/fields/cells/factories/text.js +18 -3
  26. package/dist-lib/components/fields/cells/factories/timestamp.js +24 -12
  27. package/dist-lib/components/file-widgets/DocumentCard.js +108 -106
  28. package/dist-lib/components/layout/Layout.js +306 -361
  29. package/dist-lib/components/layout/Rail.js +42 -41
  30. package/dist-lib/components/layout/Sidebar.js +132 -117
  31. package/dist-lib/components/layout/TabStrip.js +116 -115
  32. package/dist-lib/components/layout/TenantChip.js +47 -54
  33. package/dist-lib/components/layout/TopBar.js +108 -105
  34. package/dist-lib/components/list/InlineEditCell.js +23 -23
  35. package/dist-lib/components/list/QuickPeek.js +65 -66
  36. package/dist-lib/components/pages/DocumentsMenu.js +42 -42
  37. package/dist-lib/components/pages/ExportMenu.js +25 -25
  38. package/dist-lib/components/pages/RecordDocumentsPanel.js +35 -35
  39. package/dist-lib/components/pages/RecordNotesPanel.js +94 -93
  40. package/dist-lib/components/pages/SmartDetailPage.impl.js +421 -417
  41. package/dist-lib/components/pages/SmartListPage.impl.js +293 -295
  42. package/dist-lib/components/pages/SmartRecordListPage.impl.js +310 -310
  43. package/dist-lib/components/pages/auth/AuthShell.js +73 -73
  44. package/dist-lib/components/pages/auth/SignIn.js +32 -32
  45. package/dist-lib/components/pages/auth/SignUp.impl.js +3 -3
  46. package/dist-lib/components/pages/auth/SignUpCode.js +9 -9
  47. package/dist-lib/components/pages/list/ListFloatbar.js +12 -12
  48. package/dist-lib/components/pages/list/ListHeader.js +19 -19
  49. package/dist-lib/components/pages/list/ListNoRows.js +15 -15
  50. package/dist-lib/components/pages/list/ListToolbar.js +145 -145
  51. package/dist-lib/components/pages/list/useActiveView.js +14 -5
  52. package/dist-lib/components/pages/list/useListQuery.js +121 -81
  53. package/dist-lib/components/pages/list/useListRowInteraction.js +70 -70
  54. package/dist-lib/components/pages/list/useRowMenu.js +7 -7
  55. package/dist-lib/components/pages/profile/Preferences.impl.js +81 -78
  56. package/dist-lib/components/pages/profile/Profile.impl.js +191 -189
  57. package/dist-lib/components/pages/tenant-params/TenantParamsPage.impl.js +166 -158
  58. package/dist-lib/components/shared/ChangePasswordDialog.impl.js +23 -23
  59. package/dist-lib/components/shared/MarkdownRenderer.js +9 -9
  60. package/dist-lib/hooks/useAuth.js +11 -11
  61. package/dist-lib/hooks/useBranding.js +4 -4
  62. package/dist-lib/hooks/useDisplayTimeZone.js +8 -0
  63. package/dist-lib/hooks/useFollowAgentOpen.js +24 -24
  64. package/dist-lib/hooks/useImpersonation.js +6 -6
  65. package/dist-lib/hooks/useMutations.js +23 -23
  66. package/dist-lib/hooks/useObjectStatus.js +5 -5
  67. package/dist-lib/hooks/useParams.js +59 -51
  68. package/dist-lib/hooks/useProperties.js +8 -8
  69. package/dist-lib/hooks/useRowTenant.js +18 -6
  70. package/dist-lib/hooks/useText.js +9 -7
  71. package/dist-lib/hooks/useUiPreferences.js +71 -0
  72. package/dist-lib/index.d.ts +22 -6
  73. package/dist-lib/index.js +127 -126
  74. package/dist-lib/lib/actions.js +116 -84
  75. package/dist-lib/lib/child-config.js +10 -1
  76. package/dist-lib/lib/format-count.js +16 -1
  77. package/dist-lib/lib/language.js +23 -21
  78. package/dist-lib/lib/money-text.js +29 -0
  79. package/dist-lib/lib/profile.js +4 -0
  80. package/dist-lib/lib/role-label.js +8 -0
  81. package/dist-lib/lib/schema-routing.js +34 -14
  82. package/dist-lib/lib/shortcut.js +10 -0
  83. package/dist-lib/lib/timestamp.js +93 -31
  84. package/dist-lib/stores/auth.js +9 -8
  85. package/dist-lib/stores/preferences.js +56 -17
  86. package/dist-lib/testing.d.ts +1 -1
  87. package/dist-lib/testing.js +25 -28
  88. package/dist-lib/types/schema.js +33 -27
  89. package/dist-lib/{useResponsiveMode-D3SKz5z4.d.ts → useResponsiveMode-9_eJT18k.d.ts} +5 -5
  90. package/package.json +1 -1
@@ -1,90 +1,98 @@
1
1
  import { useAuthStore as e } from "../stores/auth.js";
2
2
  import { reresolveLanguage as t } from "./useLanguage.js";
3
- import { useText as n } from "./useText.js";
4
- import { fetchAllParams as r, fetchParam as i, fetchPublicParams as a } from "../api/params.js";
5
- import { executeAction as o, getEntity as s } from "../api/data.js";
6
- import { failureTitle as c } from "../lib/failure.js";
3
+ import { fetchAllParams as n, fetchParam as r, fetchPublicParams as i } from "../api/params.js";
4
+ import { executeAction as a, getEntity as o } from "../api/data.js";
5
+ import { failureTitle as s } from "../lib/failure.js";
6
+ import { useText as c } from "./useText.js";
7
7
  import { useCallback as l, useMemo as u, useState as d } from "react";
8
8
  import { useQuery as f, useQueryClient as p } from "@tanstack/react-query";
9
9
  //#region src/hooks/useParams.ts
10
10
  var m = "$params";
11
- function h({ carrierEntityCode: e, rowId: r, enabled: i = !0 }) {
12
- let a = p(), h = n("errors"), [g, _] = d(null), v = f({
13
- queryKey: [
14
- "params-carrier-detail",
15
- e,
16
- r
17
- ],
18
- queryFn: () => s(e, r),
19
- enabled: i && !!r,
11
+ function h(e, t) {
12
+ return [
13
+ "params-carrier-detail",
14
+ e,
15
+ t
16
+ ];
17
+ }
18
+ async function g(e, { carrierEntityCode: n, rowId: r }, i) {
19
+ let s = h(n, r), c = (await e.fetchQuery({
20
+ queryKey: s,
21
+ queryFn: () => o(n, r),
22
+ staleTime: 0
23
+ }))?.data?.[m];
24
+ if (!Array.isArray(c)) throw Error(`${n} ${r} carries no ${m}`);
25
+ await a(`${n}.__update`, {
26
+ object_ids: [r],
27
+ entity: n,
28
+ fields: { [m]: i(c) }
29
+ }), await e.invalidateQueries({ queryKey: ["params-all"] }), await e.invalidateQueries({ queryKey: ["params"] }), await e.invalidateQueries({ queryKey: s }), await t(e);
30
+ }
31
+ function _({ carrierEntityCode: e, rowId: t, enabled: n = !0 }) {
32
+ let r = p(), i = c("errors"), [a, _] = d(null), v = f({
33
+ queryKey: h(e, t),
34
+ queryFn: () => o(e, t),
35
+ enabled: n && !!t,
20
36
  staleTime: 3e4
21
37
  }), y = v.data?.data, b = !!y && !("$params" in y), x = u(() => Array.isArray(y?.$params) ? y[m] : [], [y]), S = u(() => new Map(x.map((e) => [e.param_code, e])), [x]), C = l(async (n) => {
22
38
  _(null);
23
39
  try {
24
- return await o(`${e}.__update`, {
25
- object_ids: [r],
26
- entity: e,
27
- fields: { [m]: n }
28
- }), await a.invalidateQueries({ queryKey: ["params-all"] }), await a.invalidateQueries({ queryKey: [
29
- "params-carrier-detail",
30
- e,
31
- r
32
- ] }), await t(a), !0;
40
+ return await g(r, {
41
+ carrierEntityCode: e,
42
+ rowId: t
43
+ }, n), !0;
33
44
  } catch (e) {
34
- return _(c(h, e)), !1;
45
+ return _(s(i, e)), !1;
35
46
  }
36
47
  }, [
37
48
  e,
49
+ t,
38
50
  r,
39
- a,
40
- h
41
- ]), w = l((e, t) => {
42
- let n = x.filter((t) => t.param_code !== e.code);
43
- return n.push({
44
- param_code: e.code,
45
- value: t
46
- }), C(n);
47
- }, [x, C]), T = l((e) => C(x.filter((t) => t.param_code !== e.code)), [x, C]), E = l(() => _(null), []);
51
+ i
52
+ ]), w = l((e, t) => C((n) => [...n.filter((t) => t.param_code !== e.code), {
53
+ param_code: e.code,
54
+ value: t
55
+ }]), [C]), T = l((e) => C((t) => t.filter((t) => t.param_code !== e.code)), [C]), E = l(() => _(null), []);
48
56
  return {
49
57
  overrides: x,
50
58
  overrideByCode: S,
51
59
  missingParams: b,
52
60
  isLoading: v.isLoading,
53
- error: g,
61
+ error: a,
54
62
  clearError: E,
55
63
  save: w,
56
64
  reset: T
57
65
  };
58
66
  }
59
- function g(e) {
67
+ function v(e) {
60
68
  return f({
61
69
  queryKey: ["params-all", e ?? "full"],
62
- queryFn: () => r(e),
70
+ queryFn: () => n(e),
63
71
  staleTime: 3e4
64
72
  });
65
73
  }
66
- var _ = ["params-public"];
67
- function v() {
74
+ var y = ["params-public"];
75
+ function b() {
68
76
  return f({
69
- queryKey: _,
70
- queryFn: a,
77
+ queryKey: y,
78
+ queryFn: i,
71
79
  staleTime: 3e5
72
80
  });
73
81
  }
74
- function y(e, t = {}) {
75
- let n = t.enabled ?? !0, r = t.isSessionProbe ?? !1;
82
+ function x(e, t = {}) {
83
+ let n = t.enabled ?? !0, i = t.isSessionProbe ?? !1;
76
84
  return f({
77
85
  queryKey: ["params", e],
78
- queryFn: () => i(e, { isSessionProbe: r }),
86
+ queryFn: () => r(e, { isSessionProbe: i }),
79
87
  enabled: !!e && n,
80
88
  staleTime: 6e4
81
89
  });
82
90
  }
83
- function b(t) {
84
- let n = e((e) => e.isAuthenticated), r = e((e) => e.sessionPresumed), i = v(), a = y(t, {
91
+ function S(t) {
92
+ let n = e((e) => e.isAuthenticated), r = e((e) => e.sessionPresumed), i = b(), a = x(t, {
85
93
  enabled: n || r,
86
94
  isSessionProbe: !n
87
- }), o = x(i.data?.parameters, t);
95
+ }), o = C(i.data?.parameters, t);
88
96
  if (n && a.data?.found) return {
89
97
  value: a.data.value,
90
98
  found: !0,
@@ -101,14 +109,14 @@ function b(t) {
101
109
  error: a.error ?? i.error ?? null
102
110
  };
103
111
  }
104
- function x(e, t) {
112
+ function C(e, t) {
105
113
  return e?.find((e) => e.code === t);
106
114
  }
107
- function S(t, n) {
108
- let r = e((e) => e.isAuthenticated), a = f({
115
+ function w(t, n) {
116
+ let i = e((e) => e.isAuthenticated), a = f({
109
117
  queryKey: ["params", t],
110
- queryFn: () => i(t),
111
- enabled: !!t && r,
118
+ queryFn: () => r(t),
119
+ enabled: !!t && i,
112
120
  staleTime: 6e4
113
121
  }), o = a.data, s = !!o?.found;
114
122
  return {
@@ -120,4 +128,4 @@ function S(t, n) {
120
128
  };
121
129
  }
122
130
  //#endregion
123
- export { m as PARAMS_KEY, _ as PUBLIC_PARAMS_QUERY_KEY, g as useAllParams, h as useCarrierParamOverrides, b as useEffectiveParam, S as useParam, v as usePublicParams, y as useResolvedParam };
131
+ export { m as PARAMS_KEY, y as PUBLIC_PARAMS_QUERY_KEY, v as useAllParams, _ as useCarrierParamOverrides, S as useEffectiveParam, w as useParam, b as usePublicParams, x as useResolvedParam, g as writeCarrierParams };
@@ -1,30 +1,30 @@
1
- import { useText as e } from "./useText.js";
2
- import { failureTitle as t } from "../lib/failure.js";
1
+ import { failureTitle as e } from "../lib/failure.js";
2
+ import { useText as t } from "./useText.js";
3
3
  import { toast as n } from "../lib/toast.js";
4
4
  import { deleteObjectProperty as r, setObjectProperty as i } from "../api/properties.js";
5
5
  import { useMutation as a, useQueryClient as o } from "@tanstack/react-query";
6
6
  //#region src/hooks/useProperties.ts
7
7
  function s(r, s) {
8
- let c = o(), l = e("errors");
8
+ let c = o(), l = t("errors");
9
9
  return a({
10
10
  mutationFn: ({ propertyCode: e, value: t }) => i(r, s, e, t),
11
11
  onSuccess: () => {
12
12
  c.invalidateQueries({ queryKey: ["entity-item", r] });
13
13
  },
14
- onError: (e) => {
15
- n.error(t(l, e));
14
+ onError: (t) => {
15
+ n.error(e(l, t));
16
16
  }
17
17
  });
18
18
  }
19
19
  function c(i, s) {
20
- let c = o(), l = e("errors");
20
+ let c = o(), l = t("errors");
21
21
  return a({
22
22
  mutationFn: (e) => r(i, s, e),
23
23
  onSuccess: () => {
24
24
  c.invalidateQueries({ queryKey: ["entity-item", i] });
25
25
  },
26
- onError: (e) => {
27
- n.error(t(l, e));
26
+ onError: (t) => {
27
+ n.error(e(l, t));
28
28
  }
29
29
  });
30
30
  }
@@ -1,12 +1,24 @@
1
1
  import { useAuthStore as e } from "../stores/auth.js";
2
2
  import { useMemo as t } from "react";
3
3
  //#region src/hooks/useRowTenant.ts
4
- function n(n) {
5
- let r = e((e) => e.activeTenant?.id);
4
+ function n() {
5
+ let n = e((e) => e.activeTenant?.id), r = e((e) => e.user?.id), i = e((e) => e.user?.email);
6
6
  return t(() => ({
7
- entity: n,
8
- tenantId: r
9
- }), [n, r]);
7
+ tenantId: n,
8
+ userId: r,
9
+ email: i
10
+ }), [
11
+ n,
12
+ r,
13
+ i
14
+ ]);
15
+ }
16
+ function r(e) {
17
+ let r = n();
18
+ return t(() => ({
19
+ entity: e,
20
+ ...r
21
+ }), [e, r]);
10
22
  }
11
23
  //#endregion
12
- export { n as useRowTenant };
24
+ export { n as useConditionCaller, r as useRowTenant };
@@ -1,15 +1,17 @@
1
1
  import { useSchema as e } from "./useSchema.js";
2
2
  import { makeTextFn as t } from "../lib/language.js";
3
3
  import { useDeploymentLanguage as n, useLanguage as r } from "./useLanguage.js";
4
- import { useMemo as i } from "react";
4
+ import { useDisplayTimeZone as i } from "./useDisplayTimeZone.js";
5
+ import { useMemo as a } from "react";
5
6
  //#region src/hooks/useText.ts
6
- function a(a = "messages") {
7
- let { data: o } = e(), s = r(), c = n(), l = a === "errors" ? o?.errors : o?.messages;
8
- return i(() => t(l, s, c), [
7
+ function o(o = "messages") {
8
+ let { data: s } = e(), c = r(), l = n(), u = i(), d = o === "errors" ? s?.errors : s?.messages;
9
+ return a(() => t(d, c, l, u), [
10
+ d,
11
+ c,
9
12
  l,
10
- s,
11
- c
13
+ u
12
14
  ]);
13
15
  }
14
16
  //#endregion
15
- export { a as useText };
17
+ export { o as useText };
@@ -0,0 +1,71 @@
1
+ import { UI_PREFERENCES_PARAM_CODE as e, currentPreferences as t, toParameter as n, usePreferencesStore as r } from "../stores/preferences.js";
2
+ import { useAuthStore as i } from "../stores/auth.js";
3
+ import { fetchParam as a } from "../api/params.js";
4
+ import { PROFILE_ENTITY as o } from "../lib/profile.js";
5
+ import { failureTitle as s } from "../lib/failure.js";
6
+ import { useText as c } from "./useText.js";
7
+ import { toast as l } from "../lib/toast.js";
8
+ import { useEffectiveParam as u, writeCarrierParams as d } from "./useParams.js";
9
+ import { useCallback as f } from "react";
10
+ import { useQueryClient as p } from "@tanstack/react-query";
11
+ //#region src/hooks/useUiPreferences.ts
12
+ var m = ["params", e], h = Promise.resolve();
13
+ function g(e) {
14
+ let t = h.then(e);
15
+ return h = t.catch(() => void 0), t;
16
+ }
17
+ async function _(t, n) {
18
+ let i = r.getState();
19
+ if (i.holdsRowOf(n)) return;
20
+ let o = await t.ensureQueryData({
21
+ queryKey: m,
22
+ queryFn: () => a(e)
23
+ });
24
+ i.hydrateFromParameter(o.found ? o.value : void 0, n);
25
+ }
26
+ function v(t) {
27
+ return t.filter((t) => t.param_code !== e);
28
+ }
29
+ function y() {
30
+ let a = p(), h = c("errors"), y = i((e) => e.user?.id) ?? "", b = u(e), x = f((e) => g(async () => {
31
+ if (!y || i.getState().user?.id !== y) return !1;
32
+ try {
33
+ return await e(), !0;
34
+ } catch (e) {
35
+ return r.getState().revertToSaved(), l.error(s(h, e)), !1;
36
+ }
37
+ }), [y, h]), S = f(() => x(async () => {
38
+ await _(a, y);
39
+ let i = t();
40
+ await d(a, {
41
+ carrierEntityCode: o,
42
+ rowId: y
43
+ }, (t) => [...v(t), {
44
+ param_code: e,
45
+ value: n(i)
46
+ }]), r.getState().markSaved(i);
47
+ }), [
48
+ x,
49
+ a,
50
+ y
51
+ ]), C = f((e, t) => (r.getState().set(e, t), S()), [S]), w = f(() => x(async () => {
52
+ await d(a, {
53
+ carrierEntityCode: o,
54
+ rowId: y
55
+ }, v);
56
+ let e = a.getQueryData(m);
57
+ r.getState().resetToDefaults(e?.found ? e.value : void 0);
58
+ }), [
59
+ x,
60
+ a,
61
+ y
62
+ ]);
63
+ return {
64
+ value: b.value,
65
+ set: C,
66
+ saveCurrent: S,
67
+ reset: w
68
+ };
69
+ }
70
+ //#endregion
71
+ export { y as useUiPreferences };
@@ -1,6 +1,6 @@
1
1
  import { i as DynamicIcon, n as IconName, r as IconProps, t as Icon } from "./Icons-Dzl-AkD_.js";
2
2
  import { i as setIconRegistry, n as getIcon, t as IconDef } from "./icon-registry-CUT4eF63.js";
3
- import { $ as AreaDef, $t as HydratedFile, A as EnrichedRow, At as MANDATORY_LANGUAGE, B as Refs, Bt as FilterValueResolver, C as ApiErrorBody, Ct as fieldDisplayName, D as CURSOR_SEMANTICS_MISMATCH, Dt as pkValuesToDetailId, E as CURSOR_LANGUAGE_CHANGED, Et as pkValuesFromId, F as LoginResponse, Ft as pluralText, G as V2ListParams, Gt as parseFilterURLState, H as StatusInfo, Ht as OP_LABELS, I as ParamLookup, It as textWithNodes, J as V2ParamInstance, Jt as FileAddress, K as V2ListResponse, Kt as parseFiltersFromURL, L as PropertyValue, Lt as FilterNode, M as ListMeta, Mt as TextVars, N as ListParams, Nt as makeTextFn, O as CheckSetupResponse, Ot as pkValuesToId, P as ListResponse, Pt as pickLocalized, Q as Action, Qt as FileFieldValue, R as PublicParam, Rt as FilterOp, S as ApiError, St as extractPkValues, T as BrandingIdentity, Tt as pkValuePartsToId, U as Tenant, Ut as countActiveFilters, V as SignupResponse, Vt as NO_VALUE_OPS, W as TenantEnv, Wt as hasOrGroups, X as V2StatusInstance, Xt as FileFieldDisplay, Y as V2PropertyInstance, Yt as FileFieldDef, Z as isCursorStaleError, Zt as FileFieldMode, _ as executeAction$1, _t as StatusGroupDef, a as ResponsiveMode, at as FieldAccessInfo, b as AggregateParams, bt as buildEntityDetailHref, c as resolveViewportCategory, ct as NavNode, d as ActionExecuteResponse, dt as PropertyDef, en as UploadProgress, et as ChildRelation, f as ActionItemError, ft as RefConfig, g as deleteObject, gt as StatusDef, h as buildActionBody, ht as SpecialValue, i as ResponsiveBreakpoints, it as EnumDef, j as ImpersonationInfo, jt as TextFn, k as DataResponse, kt as resolveDetailRoute, l as ActionBatchError, lt as ParameterDef, m as GetEntityOptions, mt as Screen, n as useResponsiveMode, nn as OrderedMap, nt as Entity, o as ResponsiveViewport, ot as LanguageDef, p as ActionItemSkip, pt as Schema, q as V2Meta, qt as setFiltersInURL, r as DEFAULT_RESPONSIVE_BREAKPOINTS, rt as EntityField, s as ViewportCategory, st as LocalizedString, t as ResponsiveModeProvider, tn as UploadedFile, tt as ClassificationTierDef, u as ActionExecuteRequest, ut as PkValues, v as restoreObject, vt as StructureDef, w as AuthUser, wt as getPrimaryKeyFields, x as AggregateResponse, xt as buildRowDetailHref, y as AggregateGroup, yt as buildDetailHrefFromId, z as PublicParamsResponse, zt as FilterURLState } from "./useResponsiveMode-D3SKz5z4.js";
3
+ import { $ as AreaDef, $t as HydratedFile, A as EnrichedRow, At as MANDATORY_LANGUAGE, B as Refs, Bt as FilterValueResolver, C as ApiErrorBody, Ct as fieldDisplayName, D as CURSOR_SEMANTICS_MISMATCH, Dt as pkValuesToDetailId, E as CURSOR_LANGUAGE_CHANGED, Et as pkValuesFromId, F as LoginResponse, Ft as pluralText, G as V2ListParams, Gt as parseFilterURLState, H as StatusInfo, Ht as OP_LABELS, I as ParamLookup, It as textWithNodes, J as V2ParamInstance, Jt as FileAddress, K as V2ListResponse, Kt as parseFiltersFromURL, L as PropertyValue, Lt as FilterNode, M as ListMeta, Mt as TextVars, N as ListParams, Nt as makeTextFn, O as CheckSetupResponse, Ot as pkValuesToId, P as ListResponse, Pt as pickLocalized, Q as Action, Qt as FileFieldValue, R as PublicParam, Rt as FilterOp, S as ApiError, St as extractPkValues, T as BrandingIdentity, Tt as pkValuePartsToId, U as Tenant, Ut as countActiveFilters, V as SignupResponse, Vt as NO_VALUE_OPS, W as TenantEnv, Wt as hasOrGroups, X as V2StatusInstance, Xt as FileFieldDisplay, Y as V2PropertyInstance, Yt as FileFieldDef, Z as isCursorStaleError, Zt as FileFieldMode, _ as executeAction$1, _t as StatusGroupDef, a as ResponsiveMode, at as FieldAccessInfo, b as AggregateParams, bt as buildEntityDetailHref, c as resolveViewportCategory, ct as NavNode, d as ActionExecuteResponse, dt as PropertyDef, en as UploadProgress, et as ChildRelation, f as ActionItemError, ft as RefConfig, g as deleteObject, gt as StatusDef, h as buildActionBody, ht as SpecialValue, i as ResponsiveBreakpoints, it as EnumDef, j as ImpersonationInfo, jt as TextFn, k as DataResponse, kt as resolveDetailRoute, l as ActionBatchError, lt as ParameterDef, m as GetEntityOptions, mt as Screen, n as useResponsiveMode, nn as OrderedMap, nt as Entity, o as ResponsiveViewport, ot as LanguageDef, p as ActionItemSkip, pt as Schema, q as V2Meta, qt as setFiltersInURL, r as DEFAULT_RESPONSIVE_BREAKPOINTS, rt as EntityField, s as ViewportCategory, st as LocalizedString, t as ResponsiveModeProvider, tn as UploadedFile, tt as ClassificationTierDef, u as ActionExecuteRequest, ut as PkValues, v as restoreObject, vt as StructureDef, w as AuthUser, wt as getPrimaryKeyFields, x as AggregateResponse, xt as buildRowDetailHref, y as AggregateGroup, yt as buildDetailHrefFromId, z as PublicParamsResponse, zt as FilterURLState } from "./useResponsiveMode-9_eJT18k.js";
4
4
  import { ButtonHTMLAttributes, CSSProperties, ComponentType, InputHTMLAttributes, MouseEvent, ReactNode, RefObject } from "react";
5
5
  import { QueryClient, QueryKey, UseQueryResult } from "@tanstack/react-query";
6
6
  import { useLocation, useNavigate, useParams, useSearchParams } from "react-router";
@@ -11,16 +11,31 @@ export declare function App(): import("react").JSX.Element;
11
11
  export declare function coerceDisplayString(value: unknown): string;
12
12
  //#endregion
13
13
  //#region src/lib/timestamp.d.ts
14
+ interface TimestampZone {
15
+ zone?: string;
16
+ declared?: boolean;
17
+ }
14
18
  /**
15
- * Format an offset-aware timestamp for display WITHOUT browser-local
16
- * conversion.
19
+ * Format a timestamp for display, with the mark of the zone it is shown in.
17
20
  *
18
21
  * `DD-MM-YYYY HH:mm`, the same in every language. Deliberately NOT
19
22
  * `dateStyle: "medium"`: that renders "Aug 15, 2026" for one reader and
20
23
  * "15 авг. 2026 г." for another, so two people reading the same screen cannot
21
24
  * quote the same date to each other.
22
25
  */
23
- export declare function formatOffsetTimestamp(raw: string): string;
26
+ export declare function formatOffsetTimestamp(raw: string, options?: TimestampZone): string;
27
+ export declare function zoneMark(raw: string, zone?: string): string;
28
+ export declare function editorWallClock(raw: string, options?: TimestampZone): string;
29
+ export declare function editorWireValue(wallClock: string, options?: TimestampZone): string;
30
+ //#endregion
31
+ //#region src/lib/money-text.d.ts
32
+ type CurrencyDisplay = "symbol" | "narrowSymbol" | "code" | "name";
33
+ interface MoneyTextOptions {
34
+ language: string;
35
+ currency: string;
36
+ currencyDisplay?: CurrencyDisplay;
37
+ }
38
+ export declare function formatMoneyText(amount: number | string, options: MoneyTextOptions): string;
24
39
  //#endregion
25
40
  //#region src/api/entities.d.ts
26
41
  /** Helper methods injected onto enriched rows. */
@@ -2005,6 +2020,7 @@ export declare function TopBar({ breadcrumbs, onCrumbClick, onOpenNav, navButton
2005
2020
  interface TenantChipProps {
2006
2021
  tenant: Tenant | null;
2007
2022
  tenants: Tenant[];
2023
+ role?: string;
2008
2024
  onSwitch: (tenant: Tenant) => void;
2009
2025
  busy?: boolean;
2010
2026
  compact?: boolean;
@@ -2023,7 +2039,7 @@ interface EnvTone {
2023
2039
  border: string;
2024
2040
  }
2025
2041
  export declare function envTone(env?: TenantEnv): EnvTone;
2026
- export declare function TenantChip({ tenant, tenants, onSwitch, busy, compact, locked, lockedReason }: TenantChipProps): import("react").JSX.Element;
2042
+ export declare function TenantChip({ tenant, tenants, role, onSwitch, busy, compact, locked, lockedReason }: TenantChipProps): import("react").JSX.Element;
2027
2043
  //#endregion
2028
2044
  //#region src/components/layout/TabStrip.d.ts
2029
2045
  interface TabStripProps {
@@ -2549,4 +2565,4 @@ export declare function isFieldSoDProtected(schema: Schema | undefined, entity:
2549
2565
  */
2550
2566
  export declare function fieldAccessInfo(entity: Entity | undefined, fieldName: string): FieldAccessInfo | undefined;
2551
2567
  //#endregion
2552
- export { type Action, ActionBatchError, type ActionExecuteRequest, type ActionExecuteResponse, type ActionItemError, type ActionItemSkip, type ActionListPage, type AgentChatPanelProps, type AgentContentBlock, type AgentConversation, type AgentConversationDrawerProps, type AgentConversationStatus, type AgentElicitFormProps, type AgentInvocationKind, type AgentInvocationStatus, type AgentMessage, type AgentPickerProps, type AgentRole, type AgentToolInvocation, type AgentTurn, type AgentTurnState, type AgentTurnStatus, type AggregateGroup, type AggregateParams, type AggregateResponse, type ApiError, App as Declarion, type ApprovalScope, type AuthShellProps, type AuthUser, type AvailableAgent, type AvatarProps, type BatchOp, type BatchOpResult, type BatchResponse, type BoolToggleProps, type BrandGlyphProps, type BreadcrumbsProps, type BtnKind, type BtnProps, type BtnSize, CURSOR_LANGUAGE_CHANGED, CURSOR_SEMANTICS_MISMATCH, type CanonicalLocation, type ChangePasswordDialogProps, type CheckProps, type CheckSetupResponse, type ChildRelation, type ChipProps, type ClassificationTierDef, type CommandAction, type CommandActionType, type CommandPaletteProps, type CropperOptions, type CropperResult, type Crumb, type CurrentScreen, type CursorActionDataResult, type CursorEntityDataParams, type CursorEntityDataResult, type CustomScreenProps, DEFAULT_RESPONSIVE_BREAKPOINTS, type DataResponse, type DateInputProps, type DraftEntry, type DropdownProps, DynamicIcon, type EnrichedRow, type Entity, type EntityField, type EnumDef, type FieldAccessInfo, type FieldLabelProps, type FileAddress, type FileDraftScopeApi, type FileFieldDef, type FileFieldDisplay, type FileFieldMode, type FileWidget, type FileWidgetProps, type FilterNode, type FilterOp, type FilterRecord, type FilterRecordField, type FilterRecordFields, type FilterURLState, type HoverCardAlign, type HoverCardProps, type HydratedFile, Icon, type IconBtnProps, type IconDef, type IconName, type IconProps, type ImageCropper, type InfoTooltipProps, type InlineEditCellProps, type InlineEditKind, type InlineEditTrigger, type JsonFieldProps, type LanguageDef, type LayoutWidget, type LayoutWidgetProps, type ListMeta, type ListParams, type ListResponse, type LiveObjectResult, type LocalizedString, type LoginResponse, MANDATORY_LANGUAGE, MULTIPLE_VALUES, type MassEditTarget, type MassEditTargetKind, type MenuItemProps, type MultiSelectProps, NO_VALUE_OPS, type NavNode, OP_LABELS, type ObjectActionBarProps, type ObjectActionBarSlot, type ObjectActionSelection, OrderedMap, type PageStateSetter, type ParameterDef, type PasswordInputProps, type PatchMap, type PillProps, type PillSize, type PillTone, type PkValues, type PropertyDef, type PropertyValue, type PublicParam, type QEFieldProps, type QuickEditCellProps, type QuickPeekFieldSpec, type QuickPeekProps, type RailAreaItem, type RailProps, type RecordIdBadgeProps, type RefComboboxProps, type RefFieldItem, type RefFieldProps, type RefreshControlProps, type Refs, type ResponsiveBreakpoints, type ResponsiveMode, ResponsiveModeProvider, type ResponsiveViewport, type ReturnTarget, type RowFieldProps, type RowHelpers, type RunActionOptions, type Schema, type Screen, type ScreenBack, type ScrollAnchor, type ScrollableVirtualizer, type SectionBadge, type SectionCardProps, type SectionEmphasis, type SelectOption, type SelectProps, type SidebarProps, type StatTileProps, type StatTileTone, type StatusDef, type StatusGroupDef, type StatusInfo, type StructureDef, type TabItem, type TabStripProps, type TagsInputProps, type Tenant, type TenantChipProps, type TextAreaProps, type TextFn, type TextInputProps, type TextVars, type TooltipProps, type TopBarProps, type UploadCheck, type UploadProgress, type UploadedFile, type UseObjectActionsResult, type UseScreenBackOptions, type UseScreenTabOptions, type V2ListParams, type V2ListResponse, type V2Meta, type V2ParamInstance, type V2PropertyInstance, type V2StatusInstance, type ViewFieldProps, type ViewportCategory, buildActionBody, buildDetailHrefFromId, buildEntityDetailHref, buildRowDetailHref, countActiveFilters, deleteObject, executeAction$1 as executeAction, extractPkValues, fieldDisplayName, getIcon, getPrimaryKeyFields, hasOrGroups, isCursorStaleError, makeTextFn, parseFilterURLState, parseFiltersFromURL, pickLocalized, pkValuePartsToId, pkValuesFromId, pkValuesToDetailId, pkValuesToId, pluralText, resolveDetailRoute, resolveViewportCategory, restoreObject, setFiltersInURL, setIconRegistry, textWithNodes, useLocation, useNavigate, useParams, useResponsiveMode, useSearchParams };
2568
+ export { type Action, ActionBatchError, type ActionExecuteRequest, type ActionExecuteResponse, type ActionItemError, type ActionItemSkip, type ActionListPage, type AgentChatPanelProps, type AgentContentBlock, type AgentConversation, type AgentConversationDrawerProps, type AgentConversationStatus, type AgentElicitFormProps, type AgentInvocationKind, type AgentInvocationStatus, type AgentMessage, type AgentPickerProps, type AgentRole, type AgentToolInvocation, type AgentTurn, type AgentTurnState, type AgentTurnStatus, type AggregateGroup, type AggregateParams, type AggregateResponse, type ApiError, App as Declarion, type ApprovalScope, type AuthShellProps, type AuthUser, type AvailableAgent, type AvatarProps, type BatchOp, type BatchOpResult, type BatchResponse, type BoolToggleProps, type BrandGlyphProps, type BreadcrumbsProps, type BtnKind, type BtnProps, type BtnSize, CURSOR_LANGUAGE_CHANGED, CURSOR_SEMANTICS_MISMATCH, type CanonicalLocation, type ChangePasswordDialogProps, type CheckProps, type CheckSetupResponse, type ChildRelation, type ChipProps, type ClassificationTierDef, type CommandAction, type CommandActionType, type CommandPaletteProps, type CropperOptions, type CropperResult, type Crumb, type CurrencyDisplay, type CurrentScreen, type CursorActionDataResult, type CursorEntityDataParams, type CursorEntityDataResult, type CustomScreenProps, DEFAULT_RESPONSIVE_BREAKPOINTS, type DataResponse, type DateInputProps, type DraftEntry, type DropdownProps, DynamicIcon, type EnrichedRow, type Entity, type EntityField, type EnumDef, type FieldAccessInfo, type FieldLabelProps, type FileAddress, type FileDraftScopeApi, type FileFieldDef, type FileFieldDisplay, type FileFieldMode, type FileWidget, type FileWidgetProps, type FilterNode, type FilterOp, type FilterRecord, type FilterRecordField, type FilterRecordFields, type FilterURLState, type HoverCardAlign, type HoverCardProps, type HydratedFile, Icon, type IconBtnProps, type IconDef, type IconName, type IconProps, type ImageCropper, type InfoTooltipProps, type InlineEditCellProps, type InlineEditKind, type InlineEditTrigger, type JsonFieldProps, type LanguageDef, type LayoutWidget, type LayoutWidgetProps, type ListMeta, type ListParams, type ListResponse, type LiveObjectResult, type LocalizedString, type LoginResponse, MANDATORY_LANGUAGE, MULTIPLE_VALUES, type MassEditTarget, type MassEditTargetKind, type MenuItemProps, type MoneyTextOptions, type MultiSelectProps, NO_VALUE_OPS, type NavNode, OP_LABELS, type ObjectActionBarProps, type ObjectActionBarSlot, type ObjectActionSelection, OrderedMap, type PageStateSetter, type ParameterDef, type PasswordInputProps, type PatchMap, type PillProps, type PillSize, type PillTone, type PkValues, type PropertyDef, type PropertyValue, type PublicParam, type QEFieldProps, type QuickEditCellProps, type QuickPeekFieldSpec, type QuickPeekProps, type RailAreaItem, type RailProps, type RecordIdBadgeProps, type RefComboboxProps, type RefFieldItem, type RefFieldProps, type RefreshControlProps, type Refs, type ResponsiveBreakpoints, type ResponsiveMode, ResponsiveModeProvider, type ResponsiveViewport, type ReturnTarget, type RowFieldProps, type RowHelpers, type RunActionOptions, type Schema, type Screen, type ScreenBack, type ScrollAnchor, type ScrollableVirtualizer, type SectionBadge, type SectionCardProps, type SectionEmphasis, type SelectOption, type SelectProps, type SidebarProps, type StatTileProps, type StatTileTone, type StatusDef, type StatusGroupDef, type StatusInfo, type StructureDef, type TabItem, type TabStripProps, type TagsInputProps, type Tenant, type TenantChipProps, type TextAreaProps, type TextFn, type TextInputProps, type TextVars, type TooltipProps, type TopBarProps, type UploadCheck, type UploadProgress, type UploadedFile, type UseObjectActionsResult, type UseScreenBackOptions, type UseScreenTabOptions, type V2ListParams, type V2ListResponse, type V2Meta, type V2ParamInstance, type V2PropertyInstance, type V2StatusInstance, type ViewFieldProps, type ViewportCategory, buildActionBody, buildDetailHrefFromId, buildEntityDetailHref, buildRowDetailHref, countActiveFilters, deleteObject, executeAction$1 as executeAction, extractPkValues, fieldDisplayName, getIcon, getPrimaryKeyFields, hasOrGroups, isCursorStaleError, makeTextFn, parseFilterURLState, parseFiltersFromURL, pickLocalized, pkValuePartsToId, pkValuesFromId, pkValuesToDetailId, pkValuesToId, pluralText, resolveDetailRoute, resolveViewportCategory, restoreObject, setFiltersInURL, setIconRegistry, textWithNodes, useLocation, useNavigate, useParams, useResponsiveMode, useSearchParams };