@alfadocs/ui-kit-debug 0.84.0 → 0.85.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 (140) hide show
  1. package/dist/_chunks/actions-cell-renderer-DaL80uqL.js.map +1 -1
  2. package/dist/_chunks/{ai-consent-banner-DUhr1yNj.js → ai-consent-banner-BXD7W6FI.js} +2 -2
  3. package/dist/_chunks/{ai-consent-banner-DUhr1yNj.js.map → ai-consent-banner-BXD7W6FI.js.map} +1 -1
  4. package/dist/_chunks/{alert-KJbsPYkI.js → alert-Cxaqd-QO.js} +12 -12
  5. package/dist/_chunks/alert-Cxaqd-QO.js.map +1 -0
  6. package/dist/_chunks/anamnesis-card-CJ5MNbkc.js.map +1 -1
  7. package/dist/_chunks/{audio-recorder-Cc3KuL9y.js → audio-recorder-BjnB7V8n.js} +2 -2
  8. package/dist/_chunks/{audio-recorder-Cc3KuL9y.js.map → audio-recorder-BjnB7V8n.js.map} +1 -1
  9. package/dist/_chunks/{booking-CLmeXtGv.js → booking-BvCu2XWY.js} +2 -2
  10. package/dist/_chunks/{booking-CLmeXtGv.js.map → booking-BvCu2XWY.js.map} +1 -1
  11. package/dist/_chunks/breadcrumb-agut0PwN.js.map +1 -1
  12. package/dist/_chunks/calendar-event-card-C6qGtywL.js.map +1 -1
  13. package/dist/_chunks/chat-input-QpHxBEnN.js.map +1 -1
  14. package/dist/_chunks/chat-message-CdjWqZjo.js.map +1 -1
  15. package/dist/_chunks/checkbox-group-CfqMv57d.js.map +1 -1
  16. package/dist/_chunks/dependent-selector-DyFpdzZV.js.map +1 -1
  17. package/dist/_chunks/{document-preview-nwfulDEs.js → document-preview-DXl9migE.js} +2 -2
  18. package/dist/_chunks/{document-preview-nwfulDEs.js.map → document-preview-DXl9migE.js.map} +1 -1
  19. package/dist/_chunks/{document-scanner-B6h1Ir56.js → document-scanner-cS_ispQs.js} +3 -3
  20. package/dist/_chunks/document-scanner-cS_ispQs.js.map +1 -0
  21. package/dist/_chunks/editable-currency-cell-renderer-Dus_sBvX.js.map +1 -1
  22. package/dist/_chunks/email-input-Dpe63k0K.js.map +1 -1
  23. package/dist/_chunks/{entity-summary--vP698Jn.js → entity-summary-BILN4wEG.js} +2 -2
  24. package/dist/_chunks/{entity-summary--vP698Jn.js.map → entity-summary-BILN4wEG.js.map} +1 -1
  25. package/dist/_chunks/{field-value-DHG6gEKS.js → field-value-BRVbZJej.js} +133 -144
  26. package/dist/_chunks/field-value-BRVbZJej.js.map +1 -0
  27. package/dist/_chunks/{file-manager-DLJlinIO.js → file-manager-B9LZzT5E.js} +129 -129
  28. package/dist/_chunks/file-manager-B9LZzT5E.js.map +1 -0
  29. package/dist/_chunks/{file-upload-DENvuhfs.js → file-upload-CwxdqkMK.js} +134 -146
  30. package/dist/_chunks/file-upload-CwxdqkMK.js.map +1 -0
  31. package/dist/_chunks/finished-terminal-C0_mefrf.js.map +1 -1
  32. package/dist/_chunks/fiscal-code-input-QP9gkyDE.js.map +1 -1
  33. package/dist/_chunks/form-field-M5UpX65Z.js.map +1 -1
  34. package/dist/_chunks/{freemium-paywall-CmV642PA.js → freemium-paywall-Dr2342_S.js} +2 -2
  35. package/dist/_chunks/{freemium-paywall-CmV642PA.js.map → freemium-paywall-Dr2342_S.js.map} +1 -1
  36. package/dist/_chunks/iban-input-DXIA8Ln_.js.map +1 -1
  37. package/dist/_chunks/{marketplace-app-shell-Br2yebEK.js → marketplace-app-shell-Chcj4q4z.js} +2 -2
  38. package/dist/_chunks/{marketplace-app-shell-Br2yebEK.js.map → marketplace-app-shell-Chcj4q4z.js.map} +1 -1
  39. package/dist/_chunks/message-square-Bye4ATvx.js +20 -0
  40. package/dist/_chunks/message-square-Bye4ATvx.js.map +1 -0
  41. package/dist/_chunks/{notes-panel-Cvdp818a.js → notes-panel-BLjlYBt-.js} +2 -2
  42. package/dist/_chunks/{notes-panel-Cvdp818a.js.map → notes-panel-BLjlYBt-.js.map} +1 -1
  43. package/dist/_chunks/pagination-EkD5SiCK.js.map +1 -1
  44. package/dist/_chunks/{patient-details-COvYWp2e.js → patient-details-B9LCdyWW.js} +2 -2
  45. package/dist/_chunks/{patient-details-COvYWp2e.js.map → patient-details-B9LCdyWW.js.map} +1 -1
  46. package/dist/_chunks/{patient-search-BaUJ_Y-N.js → patient-search-vtRTSdf6.js} +2 -2
  47. package/dist/_chunks/{patient-search-BaUJ_Y-N.js.map → patient-search-vtRTSdf6.js.map} +1 -1
  48. package/dist/_chunks/{patient-summary-card-D6kgdTNn.js → patient-summary-card-vn1H4xWj.js} +2 -2
  49. package/dist/_chunks/patient-summary-card-vn1H4xWj.js.map +1 -0
  50. package/dist/_chunks/{patient-table-BHzmUbzu.js → patient-table-B6AKMTm3.js} +182 -196
  51. package/dist/_chunks/patient-table-B6AKMTm3.js.map +1 -0
  52. package/dist/_chunks/{payment-form-DL9xk9BA.js → payment-form-BoGxEmGn.js} +2 -2
  53. package/dist/_chunks/{payment-form-DL9xk9BA.js.map → payment-form-BoGxEmGn.js.map} +1 -1
  54. package/dist/_chunks/{payment-request-card-d-RmzsUd.js → payment-request-card-CygO1anM.js} +72 -70
  55. package/dist/_chunks/payment-request-card-CygO1anM.js.map +1 -0
  56. package/dist/_chunks/{pdf-viewer-DF3VMaPo.js → pdf-viewer-CcOuR2wj.js} +2 -2
  57. package/dist/_chunks/{pdf-viewer-DF3VMaPo.js.map → pdf-viewer-CcOuR2wj.js.map} +1 -1
  58. package/dist/_chunks/postal-code-input-BznBxVxf.js.map +1 -1
  59. package/dist/_chunks/{practice-results-BCr7jMt1.js → practice-results-yKbwIxqa.js} +2 -2
  60. package/dist/_chunks/{practice-results-BCr7jMt1.js.map → practice-results-yKbwIxqa.js.map} +1 -1
  61. package/dist/_chunks/radio-group-CI-6SmSw.js.map +1 -1
  62. package/dist/_chunks/{radiograph-panel.agent-CxF9pVxd.js → radiograph-panel.agent-M9XD4ze4.js} +2 -2
  63. package/dist/_chunks/{radiograph-panel.agent-CxF9pVxd.js.map → radiograph-panel.agent-M9XD4ze4.js.map} +1 -1
  64. package/dist/_chunks/{rich-text-editor-CCWjNkbx.js → rich-text-editor-RRkBN_WB.js} +2 -2
  65. package/dist/_chunks/rich-text-editor-RRkBN_WB.js.map +1 -0
  66. package/dist/_chunks/select-BW5ecXlX.js.map +1 -1
  67. package/dist/_chunks/{session-countdown-C8AsE072.js → session-countdown-Bc70VXN1.js} +58 -48
  68. package/dist/_chunks/session-countdown-Bc70VXN1.js.map +1 -0
  69. package/dist/_chunks/{sign-document-Bfk0WpWV.js → sign-document-DI561d1C.js} +2 -2
  70. package/dist/_chunks/sign-document-DI561d1C.js.map +1 -0
  71. package/dist/_chunks/{signature-request-CEOrCDyk.js → signature-request-D_6jgDZd.js} +60 -77
  72. package/dist/_chunks/signature-request-D_6jgDZd.js.map +1 -0
  73. package/dist/_chunks/task-card-BUgK6yZT.js.map +1 -1
  74. package/dist/_chunks/{task-tray-Br3vc0O1.js → task-tray-CLIqIXUZ.js} +58 -70
  75. package/dist/_chunks/task-tray-CLIqIXUZ.js.map +1 -0
  76. package/dist/_chunks/tasks-panel-CjGAhIN8.js.map +1 -1
  77. package/dist/_chunks/timeline-r-8IUoBS.js.map +1 -1
  78. package/dist/_chunks/{toast.agent-uV8CeAy6.js → toast.agent-Iw2jWdce.js} +2 -2
  79. package/dist/_chunks/{toast.agent-uV8CeAy6.js.map → toast.agent-Iw2jWdce.js.map} +1 -1
  80. package/dist/_chunks/tooth-scheme-BzJ6rcte.js.map +1 -1
  81. package/dist/_chunks/use-password-requirements-Bwtqx1qN.js.map +1 -1
  82. package/dist/_chunks/{warning-stack-BlG_Ujy3.js → warning-stack-CAHQ0xxS.js} +2 -2
  83. package/dist/_chunks/{warning-stack-BlG_Ujy3.js.map → warning-stack-CAHQ0xxS.js.map} +1 -1
  84. package/dist/_chunks/{workflow-map-C643Q43h.js → workflow-map-SIfAhmWz.js} +2 -2
  85. package/dist/_chunks/workflow-map-SIfAhmWz.js.map +1 -0
  86. package/dist/agent-catalog.json +1 -1
  87. package/dist/components/ai-consent-banner/index.js +1 -1
  88. package/dist/components/alert/index.js +1 -1
  89. package/dist/components/audio-recorder/index.js +1 -1
  90. package/dist/components/booking/index.js +1 -1
  91. package/dist/components/document-preview/index.js +1 -1
  92. package/dist/components/document-scanner/index.js +1 -1
  93. package/dist/components/entity-summary/index.js +1 -1
  94. package/dist/components/file-manager/index.js +1 -1
  95. package/dist/components/file-upload/file-upload.d.ts.map +1 -1
  96. package/dist/components/file-upload/index.js +1 -1
  97. package/dist/components/freemium-paywall/index.js +1 -1
  98. package/dist/components/notes-panel/index.js +1 -1
  99. package/dist/components/patient-details/index.js +1 -1
  100. package/dist/components/patient-search/index.js +1 -1
  101. package/dist/components/patient-summary-card/index.js +1 -1
  102. package/dist/components/patient-table/index.js +1 -1
  103. package/dist/components/payment-card/index.js +1 -1
  104. package/dist/components/payment-form/index.js +1 -1
  105. package/dist/components/pdf-viewer/index.js +1 -1
  106. package/dist/components/practice-results/index.js +1 -1
  107. package/dist/components/radiograph-panel/index.js +1 -1
  108. package/dist/components/rich-text-editor/index.js +1 -1
  109. package/dist/components/select/select.d.ts +8 -5
  110. package/dist/components/select/select.d.ts.map +1 -1
  111. package/dist/components/session-countdown/index.js +1 -1
  112. package/dist/components/sign-document/index.js +1 -1
  113. package/dist/components/task-card/task-card.d.ts.map +1 -1
  114. package/dist/components/task-tray/index.js +1 -1
  115. package/dist/components/toast/index.js +1 -1
  116. package/dist/components/tooth-scheme/tooth-scheme.d.ts.map +1 -1
  117. package/dist/components/warning-stack/index.js +1 -1
  118. package/dist/components/workflow/index.js +1 -1
  119. package/dist/index.js +434 -445
  120. package/dist/index.js.map +1 -1
  121. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  122. package/dist/patterns/signature-request/index.js +1 -1
  123. package/dist/tokens.css +1 -1
  124. package/package.json +5 -3
  125. package/dist/_chunks/alert-KJbsPYkI.js.map +0 -1
  126. package/dist/_chunks/circle-x-W8Enq3i4.js +0 -16
  127. package/dist/_chunks/circle-x-W8Enq3i4.js.map +0 -1
  128. package/dist/_chunks/document-scanner-B6h1Ir56.js.map +0 -1
  129. package/dist/_chunks/field-value-DHG6gEKS.js.map +0 -1
  130. package/dist/_chunks/file-manager-DLJlinIO.js.map +0 -1
  131. package/dist/_chunks/file-upload-DENvuhfs.js.map +0 -1
  132. package/dist/_chunks/patient-summary-card-D6kgdTNn.js.map +0 -1
  133. package/dist/_chunks/patient-table-BHzmUbzu.js.map +0 -1
  134. package/dist/_chunks/payment-request-card-d-RmzsUd.js.map +0 -1
  135. package/dist/_chunks/rich-text-editor-CCWjNkbx.js.map +0 -1
  136. package/dist/_chunks/session-countdown-C8AsE072.js.map +0 -1
  137. package/dist/_chunks/sign-document-Bfk0WpWV.js.map +0 -1
  138. package/dist/_chunks/signature-request-CEOrCDyk.js.map +0 -1
  139. package/dist/_chunks/task-tray-Br3vc0O1.js.map +0 -1
  140. package/dist/_chunks/workflow-map-C643Q43h.js.map +0 -1
@@ -1,19 +1,20 @@
1
- import { useMemo as O, useCallback as D, useState as H, cloneElement as X } from "react";
1
+ import { useMemo as O, useCallback as D, useState as E, cloneElement as X } from "react";
2
2
  import { u as J } from "./use-controllable-state-BiY4xTzM.js";
3
- import { jsxs as F, jsx as r, Fragment as Q } from "react/jsx-runtime";
4
- import { useTranslation as z } from "react-i18next";
3
+ import { jsxs as I, jsx as r, Fragment as Q } from "react/jsx-runtime";
4
+ import { useTranslation as P } from "react-i18next";
5
5
  import { B as W } from "./button-CPGiR_bH.js";
6
- import { I as $ } from "./icon-button-C_kbcd7I.js";
7
- import { C as j } from "./checkbox-BuZ1u__2.js";
6
+ import { I as j } from "./icon-button-C_kbcd7I.js";
7
+ import { C as $ } from "./checkbox-BuZ1u__2.js";
8
8
  import { P as T } from "./popover-Cc0a69sw.js";
9
9
  import { S as Y } from "./separator-CYU_bGFn.js";
10
- import { c as P } from "./createLucideIcon-DhHxpK9K.js";
11
- import { G as Z } from "./grip-vertical-onSb1JXO.js";
12
- import { B as U } from "./badge-DCOqV9mI.js";
13
- import { L as ee } from "./link-CPb_pZPr.js";
14
- import { T as te } from "./transaction-chip-DJCstquX.js";
15
- import { H as ne } from "./hash-CSQ9SChR.js";
16
- import { C as re } from "./calendar-days-BGWklvE-.js";
10
+ import { S as Z } from "./settings-d25ju_6L.js";
11
+ import { G as ee } from "./grip-vertical-onSb1JXO.js";
12
+ import { B as H } from "./badge-DCOqV9mI.js";
13
+ import { L as te } from "./link-CPb_pZPr.js";
14
+ import { T as ne } from "./transaction-chip-DJCstquX.js";
15
+ import { H as re } from "./hash-CSQ9SChR.js";
16
+ import { C as ae } from "./calendar-days-BGWklvE-.js";
17
+ import { c as U } from "./createLucideIcon-DhHxpK9K.js";
17
18
  import { U as se } from "./user-B12p7bVF.js";
18
19
  /**
19
20
  * @license lucide-react v1.22.0 - ISC
@@ -21,7 +22,7 @@ import { U as se } from "./user-B12p7bVF.js";
21
22
  * This source code is licensed under the ISC license.
22
23
  * See the LICENSE file in the root directory of this source tree.
23
24
  */
24
- const ae = [
25
+ const ie = [
25
26
  ["path", { d: "M5 22h14", key: "ehvnwv" }],
26
27
  ["path", { d: "M5 2h14", key: "pdyrp9" }],
27
28
  [
@@ -35,62 +36,50 @@ const ae = [
35
36
  "path",
36
37
  { d: "M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2", key: "1vvvr6" }
37
38
  ]
38
- ], ie = P("hourglass", ae);
39
+ ], oe = U("hourglass", ie);
39
40
  /**
40
41
  * @license lucide-react v1.22.0 - ISC
41
42
  *
42
43
  * This source code is licensed under the ISC license.
43
44
  * See the LICENSE file in the root directory of this source tree.
44
45
  */
45
- const oe = [
46
+ const le = [
46
47
  ["path", { d: "M16 3h5v5", key: "1806ms" }],
47
48
  ["path", { d: "m21 3-6.75 6.75", key: "pv0uzu" }],
48
49
  ["circle", { cx: "10", cy: "14", r: "6", key: "1qwbdc" }]
49
- ], ce = P("mars", oe);
50
- /**
51
- * @license lucide-react v1.22.0 - ISC
52
- *
53
- * This source code is licensed under the ISC license.
54
- * See the LICENSE file in the root directory of this source tree.
55
- */
56
- const le = [
57
- ["path", { d: "M14 17H5", key: "gfn3mx" }],
58
- ["path", { d: "M19 7h-9", key: "6i9tg" }],
59
- ["circle", { cx: "17", cy: "17", r: "3", key: "18b49y" }],
60
- ["circle", { cx: "7", cy: "7", r: "3", key: "dfmy0x" }]
61
- ], de = P("settings-2", le);
50
+ ], ce = U("mars", le);
62
51
  /**
63
52
  * @license lucide-react v1.22.0 - ISC
64
53
  *
65
54
  * This source code is licensed under the ISC license.
66
55
  * See the LICENSE file in the root directory of this source tree.
67
56
  */
68
- const ue = [
57
+ const de = [
69
58
  ["path", { d: "M12 15v7", key: "t2xh3l" }],
70
59
  ["path", { d: "M9 19h6", key: "456am0" }],
71
60
  ["circle", { cx: "12", cy: "9", r: "6", key: "1nw4tq" }]
72
- ], me = P("venus", ue);
61
+ ], ue = U("venus", de);
73
62
  function G(e) {
74
63
  return e.flatMap((d) => d.fields.map((t) => t.id));
75
64
  }
76
- function _e(e, d) {
77
- const t = d ?? G(e), m = new Map(t.map((a, y) => [a, y]));
78
- return e.map((a) => ({
79
- section: a,
80
- fields: a.fields.filter((y) => m.has(y.id)).sort(
65
+ function ze(e, d) {
66
+ const t = d ?? G(e), m = new Map(t.map((s, y) => [s, y]));
67
+ return e.map((s) => ({
68
+ section: s,
69
+ fields: s.fields.filter((y) => m.has(y.id)).sort(
81
70
  (y, S) => m.get(y.id) - m.get(S.id)
82
71
  )
83
72
  }));
84
73
  }
85
- function ze(e, { value: d, defaultValue: t, onChange: m } = {}) {
86
- const a = O(
74
+ function Pe(e, { value: d, defaultValue: t, onChange: m } = {}) {
75
+ const s = O(
87
76
  () => G(e),
88
77
  [e]
89
78
  ), [y, S] = J({
90
79
  value: d,
91
- defaultValue: t ?? a,
80
+ defaultValue: t ?? s,
92
81
  onChange: m
93
- }), i = y ?? t ?? a, x = O(() => {
82
+ }), i = y ?? t ?? s, x = O(() => {
94
83
  const p = /* @__PURE__ */ new Map();
95
84
  for (const f of e)
96
85
  for (const g of f.fields)
@@ -101,7 +90,7 @@ function ze(e, { value: d, defaultValue: t, onChange: m } = {}) {
101
90
  S(p.filter((f) => x.has(f)));
102
91
  },
103
92
  [S, x]
104
- ), I = D(
93
+ ), M = D(
105
94
  (p) => {
106
95
  u(
107
96
  i.includes(p) ? i.filter((f) => f !== p) : [...i, p]
@@ -113,7 +102,7 @@ function ze(e, { value: d, defaultValue: t, onChange: m } = {}) {
113
102
  var w;
114
103
  const g = ((w = e.find((o) => o.id === p)) == null ? void 0 : w.fields.map((o) => o.id)) ?? [], V = new Set(g);
115
104
  if (f) {
116
- const o = g.filter((c) => !i.includes(c));
105
+ const o = g.filter((l) => !i.includes(l));
117
106
  u([...i, ...o]);
118
107
  } else
119
108
  u(i.filter((o) => !V.has(o)));
@@ -126,94 +115,94 @@ function ze(e, { value: d, defaultValue: t, onChange: m } = {}) {
126
115
  const g = (A = x.get(p)) == null ? void 0 : A.sectionId, V = (n = x.get(f)) == null ? void 0 : n.sectionId;
127
116
  if (!g || g !== V) return;
128
117
  const w = new Set(
129
- ((C = e.find((l) => l.id === g)) == null ? void 0 : C.fields.map((l) => l.id)) ?? []
130
- ), o = i.filter((l) => w.has(l)), c = o.indexOf(p), v = o.indexOf(f);
131
- if (c < 0 || v < 0) return;
132
- const [k] = o.splice(c, 1);
133
- o.splice(v, 0, k);
118
+ ((C = e.find((c) => c.id === g)) == null ? void 0 : C.fields.map((c) => c.id)) ?? []
119
+ ), o = i.filter((c) => w.has(c)), l = o.indexOf(p), v = o.indexOf(f);
120
+ if (l < 0 || v < 0) return;
121
+ const [b] = o.splice(l, 1);
122
+ o.splice(v, 0, b);
134
123
  let h = 0;
135
- const E = i.map(
136
- (l) => w.has(l) ? o[h++] : l
124
+ const B = i.map(
125
+ (c) => w.has(c) ? o[h++] : c
137
126
  );
138
- u(E);
127
+ u(B);
139
128
  },
140
129
  [x, e, i, u]
141
- ), B = D(() => {
142
- u(t ?? a);
143
- }, [t, a, u]);
130
+ ), _ = D(() => {
131
+ u(t ?? s);
132
+ }, [t, s, u]);
144
133
  return {
145
134
  visible: i,
146
- catalogueIds: a,
135
+ catalogueIds: s,
147
136
  fieldById: x,
148
137
  setOrder: u,
149
- toggleField: I,
138
+ toggleField: M,
150
139
  toggleSection: L,
151
140
  moveFieldOnto: N,
152
- reset: B
141
+ reset: _
153
142
  };
154
143
  }
155
- function Pe({
144
+ function Le({
156
145
  sections: e,
157
146
  visible: d,
158
147
  onToggleField: t,
159
148
  onToggleSection: m,
160
- onMoveFieldOnto: a,
149
+ onMoveFieldOnto: s,
161
150
  onReset: y,
162
151
  label: S
163
152
  }) {
164
- const { t: i } = z(), x = O(() => new Set(d), [d]), [u, I] = H(null), [L, N] = H(null), [B, p] = H(""), { sectionOfField: f, labelOfField: g } = O(() => {
165
- const c = /* @__PURE__ */ new Map(), v = /* @__PURE__ */ new Map();
166
- for (const k of e)
167
- for (const h of k.fields)
168
- c.set(h.id, k.id), v.set(h.id, h.label);
169
- return { sectionOfField: c, labelOfField: v };
153
+ const { t: i } = P(), x = O(() => new Set(d), [d]), [u, M] = E(null), [L, N] = E(null), [_, p] = E(""), { sectionOfField: f, labelOfField: g } = O(() => {
154
+ const l = /* @__PURE__ */ new Map(), v = /* @__PURE__ */ new Map();
155
+ for (const b of e)
156
+ for (const h of b.fields)
157
+ l.set(h.id, b.id), v.set(h.id, h.label);
158
+ return { sectionOfField: l, labelOfField: v };
170
159
  }, [e]), V = u ? f.get(u) : void 0, w = D(() => {
171
- I(null), N(null);
160
+ M(null), N(null);
172
161
  }, []), o = D(
173
- (c, v, k) => {
162
+ (l, v, b) => {
174
163
  p(
175
164
  i("fieldPicker.moved", {
176
- field: g.get(c) ?? "",
165
+ field: g.get(l) ?? "",
177
166
  position: v + 1,
178
- count: k,
167
+ count: b,
179
168
  defaultValue: "Moved {{field}} to position {{position}} of {{count}}"
180
169
  })
181
170
  );
182
171
  },
183
172
  [i, g]
184
173
  );
185
- return /* @__PURE__ */ F(T.Root, { children: [
174
+ return /* @__PURE__ */ I(T.Root, { children: [
186
175
  /* @__PURE__ */ r(T.Trigger, { asChild: !0, children: /* @__PURE__ */ r(
187
- $,
176
+ j,
188
177
  {
189
178
  size: "sm",
190
179
  intent: "outline",
191
- icon: /* @__PURE__ */ r(de, { "aria-hidden": "true" }),
180
+ icon: /* @__PURE__ */ r(Z, { "aria-hidden": "true" }),
192
181
  "aria-label": S ?? i("fieldPicker.trigger", { defaultValue: "Customize fields" }),
193
182
  className: "ds:shrink-0"
194
183
  }
195
184
  ) }),
196
- /* @__PURE__ */ F(T.Content, { align: "end", size: "sm", children: [
185
+ /* @__PURE__ */ I(T.Content, { align: "end", size: "sm", children: [
197
186
  /* @__PURE__ */ r(T.Heading, { children: i("fieldPicker.title", { defaultValue: "Customize fields" }) }),
198
- /* @__PURE__ */ F("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:mt-[var(--spacing-xs)]", children: [
199
- e.map((c) => {
200
- const v = c.fields.map((n) => n.id), k = v.filter(
187
+ /* @__PURE__ */ I("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:mt-[var(--spacing-xs)]", children: [
188
+ e.map((l) => {
189
+ const v = l.fields.map((n) => n.id), b = v.filter(
201
190
  (n) => x.has(n)
202
191
  ).length, h = d.filter(
203
192
  (n) => v.includes(n)
204
- ), E = k === 0 ? !1 : k === v.length ? !0 : "indeterminate", A = !!c.heading;
205
- return /* @__PURE__ */ F(
193
+ ), B = b === 0 ? !1 : b === v.length ? !0 : "indeterminate", A = !!l.heading;
194
+ return /* @__PURE__ */ I(
206
195
  "div",
207
196
  {
208
197
  className: "ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]",
209
198
  children: [
210
199
  A ? /* @__PURE__ */ r(
211
- j,
200
+ $,
212
201
  {
213
202
  size: "sm",
214
- label: c.heading,
215
- checked: E,
216
- onCheckedChange: (n) => m(c.id, n === !0)
203
+ label: l.heading,
204
+ checked: B,
205
+ onCheckedChange: (n) => m(l.id, n === !0)
217
206
  }
218
207
  ) : null,
219
208
  /* @__PURE__ */ r(
@@ -223,26 +212,26 @@ function Pe({
223
212
  "ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-2xs)]",
224
213
  A ? "ds:ps-[var(--spacing-md)]" : "ds:ps-0"
225
214
  ].join(" "),
226
- children: c.fields.map((n) => {
227
- const C = x.has(n.id), l = h.indexOf(n.id), b = h.length, q = u === n.id, K = L === n.id && u !== null && u !== n.id && V === c.id;
228
- return /* @__PURE__ */ F(
215
+ children: l.fields.map((n) => {
216
+ const C = x.has(n.id), c = h.indexOf(n.id), k = h.length, q = u === n.id, K = L === n.id && u !== null && u !== n.id && V === l.id;
217
+ return /* @__PURE__ */ I(
229
218
  "li",
230
219
  {
231
220
  ...C ? {
232
221
  draggable: !0,
233
- onDragStart: (s) => {
234
- I(n.id), s.dataTransfer.effectAllowed = "move", s.dataTransfer.setData("text/plain", n.id);
222
+ onDragStart: (a) => {
223
+ M(n.id), a.dataTransfer.effectAllowed = "move", a.dataTransfer.setData("text/plain", n.id);
235
224
  },
236
- onDragOver: (s) => {
237
- u === null || V !== c.id || (s.preventDefault(), s.dataTransfer.dropEffect = "move", N(n.id));
225
+ onDragOver: (a) => {
226
+ u === null || V !== l.id || (a.preventDefault(), a.dataTransfer.dropEffect = "move", N(n.id));
238
227
  },
239
228
  onDragLeave: () => N(
240
- (s) => s === n.id ? null : s
229
+ (a) => a === n.id ? null : a
241
230
  ),
242
- onDrop: (s) => {
243
- s.preventDefault();
244
- const M = s.dataTransfer.getData("text/plain");
245
- M && M !== n.id && f.get(M) === c.id && (a(M, n.id), o(M, l, b)), w();
231
+ onDrop: (a) => {
232
+ a.preventDefault();
233
+ const F = a.dataTransfer.getData("text/plain");
234
+ F && F !== n.id && f.get(F) === l.id && (s(F, n.id), o(F, c, k)), w();
246
235
  },
247
236
  onDragEnd: w
248
237
  } : {},
@@ -253,7 +242,7 @@ function Pe({
253
242
  ].filter(Boolean).join(" "),
254
243
  children: [
255
244
  /* @__PURE__ */ r(
256
- j,
245
+ $,
257
246
  {
258
247
  size: "sm",
259
248
  label: n.label,
@@ -262,40 +251,40 @@ function Pe({
262
251
  }
263
252
  ),
264
253
  C ? /* @__PURE__ */ r(
265
- $,
254
+ j,
266
255
  {
267
256
  size: "sm",
268
257
  intent: "ghost",
269
- icon: /* @__PURE__ */ r(Z, { "aria-hidden": "true" }),
258
+ icon: /* @__PURE__ */ r(ee, { "aria-hidden": "true" }),
270
259
  "aria-label": i("fieldPicker.reorder", {
271
260
  field: n.label,
272
261
  defaultValue: "Reorder {{field}}. Press Alt + Up or Alt + Down to move."
273
262
  }),
274
263
  "aria-keyshortcuts": "Alt+ArrowUp Alt+ArrowDown Alt+Home Alt+End",
275
264
  className: "ds:shrink-0 ds:cursor-grab ds:active:cursor-grabbing",
276
- onKeyDown: (s) => {
277
- if (s.altKey) {
278
- if (s.key === "ArrowUp") {
279
- if (l <= 0) return;
280
- s.preventDefault(), a(
265
+ onKeyDown: (a) => {
266
+ if (a.altKey) {
267
+ if (a.key === "ArrowUp") {
268
+ if (c <= 0) return;
269
+ a.preventDefault(), s(
281
270
  n.id,
282
- h[l - 1]
283
- ), o(n.id, l - 1, b);
284
- } else if (s.key === "ArrowDown") {
285
- if (l >= b - 1) return;
286
- s.preventDefault(), a(
271
+ h[c - 1]
272
+ ), o(n.id, c - 1, k);
273
+ } else if (a.key === "ArrowDown") {
274
+ if (c >= k - 1) return;
275
+ a.preventDefault(), s(
287
276
  n.id,
288
- h[l + 1]
289
- ), o(n.id, l + 1, b);
290
- } else if (s.key === "Home") {
291
- if (l <= 0) return;
292
- s.preventDefault(), a(n.id, h[0]), o(n.id, 0, b);
293
- } else if (s.key === "End") {
294
- if (l >= b - 1) return;
295
- s.preventDefault(), a(
277
+ h[c + 1]
278
+ ), o(n.id, c + 1, k);
279
+ } else if (a.key === "Home") {
280
+ if (c <= 0) return;
281
+ a.preventDefault(), s(n.id, h[0]), o(n.id, 0, k);
282
+ } else if (a.key === "End") {
283
+ if (c >= k - 1) return;
284
+ a.preventDefault(), s(
296
285
  n.id,
297
- h[b - 1]
298
- ), o(n.id, b - 1, b);
286
+ h[k - 1]
287
+ ), o(n.id, k - 1, k);
299
288
  }
300
289
  }
301
290
  }
@@ -310,28 +299,28 @@ function Pe({
310
299
  )
311
300
  ]
312
301
  },
313
- c.id
302
+ l.id
314
303
  );
315
304
  }),
316
305
  /* @__PURE__ */ r(Y, { orientation: "horizontal" }),
317
306
  /* @__PURE__ */ r(W, { type: "button", size: "sm", intent: "ghost", onClick: y, children: i("fieldPicker.reset", { defaultValue: "Reset to defaults" }) })
318
307
  ] }),
319
- /* @__PURE__ */ r("span", { role: "status", className: "ds:sr-only", children: B })
308
+ /* @__PURE__ */ r("span", { role: "status", className: "ds:sr-only", children: _ })
320
309
  ] })
321
310
  ] });
322
311
  }
323
- const R = "ds:text-[color:var(--foreground)]", pe = {
312
+ const R = "ds:text-[color:var(--foreground)]", me = {
324
313
  m: "Male",
325
314
  f: "Female",
326
315
  x: "Other"
327
316
  };
328
- function _({
317
+ function z({
329
318
  icon: e,
330
319
  mono: d,
331
320
  children: t
332
321
  }) {
333
322
  return /* @__PURE__ */ r(
334
- U,
323
+ H,
335
324
  {
336
325
  variant: "neutral",
337
326
  className: d ? "ds:font-mono" : void 0,
@@ -342,26 +331,26 @@ function _({
342
331
  }
343
332
  );
344
333
  }
345
- function fe({ code: e }) {
346
- const { t: d } = z(), t = e.toLowerCase(), m = d(`patientField.sex.${t}`, {
347
- defaultValue: pe[t] ?? e
334
+ function pe({ code: e }) {
335
+ const { t: d } = P(), t = e.toLowerCase(), m = d(`patientField.sex.${t}`, {
336
+ defaultValue: me[t] ?? e
348
337
  });
349
- return t === "f" ? /* @__PURE__ */ r(U, { variant: "accentSoft", leading: /* @__PURE__ */ r(me, {}), children: m }) : t === "m" ? /* @__PURE__ */ r(U, { variant: "info", leading: /* @__PURE__ */ r(ce, {}), children: m }) : /* @__PURE__ */ r(_, { icon: /* @__PURE__ */ r(se, {}), children: m });
338
+ return t === "f" ? /* @__PURE__ */ r(H, { variant: "accentSoft", leading: /* @__PURE__ */ r(ue, {}), children: m }) : t === "m" ? /* @__PURE__ */ r(H, { variant: "info", leading: /* @__PURE__ */ r(ce, {}), children: m }) : /* @__PURE__ */ r(z, { icon: /* @__PURE__ */ r(se, {}), children: m });
350
339
  }
351
- function ge({ years: e }) {
352
- const { t: d } = z();
353
- return /* @__PURE__ */ r(_, { icon: /* @__PURE__ */ r(ie, {}), children: d("patientField.age", {
340
+ function fe({ years: e }) {
341
+ const { t: d } = P();
342
+ return /* @__PURE__ */ r(z, { icon: /* @__PURE__ */ r(oe, {}), children: d("patientField.age", {
354
343
  count: e,
355
344
  defaultValue: "{{count}} years old"
356
345
  }) });
357
346
  }
358
- function Le({ field: e }) {
359
- const { i18n: d } = z();
347
+ function _e({ field: e }) {
348
+ const { i18n: d } = P();
360
349
  if (e.kind === "email" || e.kind === "phone") {
361
350
  const t = typeof e.value == "string" ? e.value : e.copyText ?? (typeof e.editValue == "string" ? e.editValue : "");
362
351
  if (t) {
363
352
  const m = e.kind === "email" ? `mailto:${t.trim()}` : `tel:${t.replace(/[^+\d]/g, "")}`;
364
- return /* @__PURE__ */ r(ee, { href: m, children: t });
353
+ return /* @__PURE__ */ r(te, { href: m, children: t });
365
354
  }
366
355
  }
367
356
  if (e.value != null)
@@ -370,27 +359,27 @@ function Le({ field: e }) {
370
359
  return null;
371
360
  switch (e.kind) {
372
361
  case "sex":
373
- return /* @__PURE__ */ r(fe, { code: String(e.editValue ?? "") });
362
+ return /* @__PURE__ */ r(pe, { code: String(e.editValue ?? "") });
374
363
  case "age": {
375
364
  const t = typeof e.editValue == "number" ? e.editValue : Number(e.editValue);
376
- return Number.isFinite(t) ? /* @__PURE__ */ r(ge, { years: t }) : null;
365
+ return Number.isFinite(t) ? /* @__PURE__ */ r(fe, { years: t }) : null;
377
366
  }
378
367
  case "dob": {
379
- const t = e.editValue, m = t instanceof Date ? t : new Date(String(t ?? "")), a = Number.isNaN(m.getTime()) ? String(t ?? "") : new Intl.DateTimeFormat(d.language, {
368
+ const t = e.editValue, m = t instanceof Date ? t : new Date(String(t ?? "")), s = Number.isNaN(m.getTime()) ? String(t ?? "") : new Intl.DateTimeFormat(d.language, {
380
369
  day: "numeric",
381
370
  month: "short",
382
371
  year: "numeric"
383
372
  }).format(m);
384
- return a ? /* @__PURE__ */ r(_, { icon: /* @__PURE__ */ r(re, {}), children: a }) : null;
373
+ return s ? /* @__PURE__ */ r(z, { icon: /* @__PURE__ */ r(ae, {}), children: s }) : null;
385
374
  }
386
375
  case "fiscalCode": {
387
376
  const t = e.copyText ?? (typeof e.editValue == "string" ? e.editValue : "");
388
- return t ? /* @__PURE__ */ r(_, { icon: /* @__PURE__ */ r(ne, {}), mono: !0, children: t }) : null;
377
+ return t ? /* @__PURE__ */ r(z, { icon: /* @__PURE__ */ r(re, {}), mono: !0, children: t }) : null;
389
378
  }
390
379
  case "discount": {
391
380
  const t = typeof e.editValue == "number" ? e.editValue : Number(e.editValue);
392
381
  return Number.isFinite(t) ? /* @__PURE__ */ r(
393
- te,
382
+ ne,
394
383
  {
395
384
  state: "discount",
396
385
  amount: Math.abs(t),
@@ -404,12 +393,12 @@ function Le({ field: e }) {
404
393
  }
405
394
  }
406
395
  export {
407
- ge as A,
408
- Pe as F,
409
- _ as N,
410
- fe as S,
411
- Le as a,
412
- _e as r,
413
- ze as u
396
+ fe as A,
397
+ Le as F,
398
+ z as N,
399
+ pe as S,
400
+ _e as a,
401
+ ze as r,
402
+ Pe as u
414
403
  };
415
- //# sourceMappingURL=field-value-DHG6gEKS.js.map
404
+ //# sourceMappingURL=field-value-BRVbZJej.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-value-BRVbZJej.js","sources":["../../node_modules/lucide-react/dist/esm/icons/hourglass.mjs","../../node_modules/lucide-react/dist/esm/icons/mars.mjs","../../node_modules/lucide-react/dist/esm/icons/venus.mjs","../../src/components/_shared/patient-fields.ts","../../src/components/_shared/field-visibility.ts","../../src/components/_shared/field-visibility-cog.tsx","../../src/components/_shared/field-value.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 22h14\", key: \"ehvnwv\" }],\n [\"path\", { d: \"M5 2h14\", key: \"pdyrp9\" }],\n [\n \"path\",\n {\n d: \"M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22\",\n key: \"1d314k\"\n }\n ],\n [\n \"path\",\n { d: \"M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2\", key: \"1vvvr6\" }\n ]\n];\nconst Hourglass = createLucideIcon(\"hourglass\", __iconNode);\n\nexport { __iconNode, Hourglass as default };\n//# sourceMappingURL=hourglass.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M16 3h5v5\", key: \"1806ms\" }],\n [\"path\", { d: \"m21 3-6.75 6.75\", key: \"pv0uzu\" }],\n [\"circle\", { cx: \"10\", cy: \"14\", r: \"6\", key: \"1qwbdc\" }]\n];\nconst Mars = createLucideIcon(\"mars\", __iconNode);\n\nexport { __iconNode, Mars as default };\n//# sourceMappingURL=mars.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 15v7\", key: \"t2xh3l\" }],\n [\"path\", { d: \"M9 19h6\", key: \"456am0\" }],\n [\"circle\", { cx: \"12\", cy: \"9\", r: \"6\", key: \"1nw4tq\" }]\n];\nconst Venus = createLucideIcon(\"venus\", __iconNode);\n\nexport { __iconNode, Venus as default };\n//# sourceMappingURL=venus.mjs.map\n","import type { ReactElement, ReactNode } from 'react';\n\n/* -------------------------------------------------------------------- */\n/* Shared patient-field model */\n/* */\n/* The single field VOCABULARY every patient surface speaks — consumed */\n/* by both `PatientDetails` (full, inline-editable) and */\n/* `PatientSummaryCard` (compact). Either can surface a \"Customize */\n/* fields\" cog (show/hide + drag-and-drop reorder). The kit owns the */\n/* SHAPE; the CONSUMER owns the registry (which DoctorPatient field maps */\n/* to which id/label/PHI flag). */\n/* */\n/* Visibility + order are PER-CONTEXT, not global: the kit never persists */\n/* them — each PLACEMENT is wired to its own `visibleFieldOrder` / */\n/* `onVisibleFieldsChange`, so the SAME vocabulary can display */\n/* differently in different parts of the app (a care-plan card vs the */\n/* patient folder). The consumer chooses the persistence scope — global */\n/* per-user, or per-surface (PRS §Security; design doc D1/D2). */\n/* -------------------------------------------------------------------- */\n\n/**\n * Canonical field TYPE. When set (and no explicit `value` is supplied), the\n * kit renders the field's canonical chip from the shared `<FieldValue>`\n * registry instead of plain text — so the SAME field type looks the same on\n * every surface. Each chip is a high-contrast neutral pill with a glyph:\n *\n * - `sex` → Venus / Mars / User glyph + localised label\n * - `age` → hourglass glyph + localised, pluralised age\n * - `dob` → calendar glyph + locale-formatted date\n * - `fiscalCode` → hash glyph + monospace code (already mono — no `mono` flag\n * needed; copy + PHI lock stay the row-level affordance via\n * `copyable` / `sensitive`)\n * - `discount` → `TransactionChip` `state=\"discount\"` (the canonical monetary\n * discount chip — magnitude + `currency`, sign owned by the chip)\n * - `email` → a `mailto:` `Link` (the address is both display + target)\n * - `phone` → a `tel:` `Link` (formatted display, target normalised to\n * `+` and digits)\n *\n * The raw datum is read from `editValue` (the same scalar that seeds the\n * editor): a number for `age` / `discount`, an ISO string or `Date` for `dob`,\n * a code string for `sex`, the code string for `fiscalCode`. For the contact\n * link kinds the DISPLAY string is read from `value` (or `editValue`) and the\n * href is derived from it — so a plain-string `value` still becomes a link.\n * For every OTHER kind an explicit `value` ALWAYS wins, so a consumer can still\n * override per placement.\n */\nexport type PatientFieldKind =\n | 'sex'\n | 'age'\n | 'dob'\n | 'fiscalCode'\n | 'discount'\n | 'email'\n | 'phone';\n\n/** Editor control rendered when a field enters inline-edit mode. */\nexport type PatientFieldEditType =\n | 'text'\n | 'textarea'\n | 'select'\n | 'boolean'\n | 'date'\n | 'number'\n // Typed text variants — each renders the kit's dedicated input (validation,\n // formatting, masking) instead of a bare TextInput. Their edited value still\n // serialises to a plain string through the shared save callback.\n | 'email'\n | 'phone'\n | 'fiscalCode'\n // Address / location variants — each renders the dedicated kit picker.\n // `province`/`country`/`city` emit a plain string (UPPER sigla / alpha-2\n // lower / city name); `postalCode` validates the IT CAP format on blur.\n | 'province'\n | 'country'\n | 'postalCode'\n | 'city';\n\n/** A choice for an `editType: 'select'` field. */\nexport interface PatientFieldOption {\n value: string;\n label: string;\n}\n\n/**\n * Raw value seeded into an editor. The kit never inspects this beyond\n * handing it to the matching control and back through a save callback.\n */\nexport type PatientFieldEditValue =\n | string\n | number\n | boolean\n | Date\n | null\n | undefined;\n\n/** One label→value patient field. */\nexport interface PatientField {\n /**\n * Stable field key — drives visibility, ordering, the `data-field-id`\n * hook, and agent addressing. MUST NOT be the value (no PHI in keys).\n */\n id: string;\n /** Display label (already localised by the consumer, or a kit label). */\n label: string;\n /**\n * Display node — formatted by the consumer (Badge / Tag / Link / text).\n * Optional: omit it and set `kind` to let the kit render the field's\n * canonical chip from `editValue`. When present, `value` ALWAYS wins.\n */\n value?: ReactNode;\n /**\n * Canonical field type — when set and `value` is omitted, the kit renders\n * the matching canonical chip from the shared registry. Presentation only;\n * NEVER emitted into any `data-*` attribute (same rule as `sensitive`).\n */\n kind?: PatientFieldKind;\n /** Leading icon (a single lucide element). */\n icon?: ReactElement | null;\n /** Render the copy-to-clipboard affordance (fiscal code, ids). */\n copyable?: boolean;\n /** Text written to the clipboard when `copyable`. */\n copyText?: string;\n /** Render the value monospaced (codes, ids). */\n mono?: boolean;\n /**\n * High-sensitivity PHI marker — renders a lock glyph next to the label.\n * Presentation only; NEVER emitted into any `data-*` attribute.\n */\n sensitive?: boolean;\n /** Whether this field can be inline-edited (consumer gates by permission). */\n editable?: boolean;\n /** Control used in edit mode. Defaults to `'text'`. */\n editType?: PatientFieldEditType;\n /** Options for `editType: 'select'`. */\n options?: PatientFieldOption[];\n /** Value seeded into the editor when editing begins. */\n editValue?: PatientFieldEditValue;\n /** Currency code for `editType: 'number'` (renders a currency input). */\n currency?: string;\n}\n\n/** A labelled, collapsible group of fields. */\nexport interface PatientFieldSection {\n /** Stable section key. */\n id: string;\n /** Section heading. */\n heading: string;\n fields: PatientField[];\n /** Wrap the section in a Collapsible (default `true`). Honoured by PatientDetails. */\n collapsible?: boolean;\n /** Initial open state when `collapsible` (default `true`). */\n defaultOpen?: boolean;\n}\n\n/** The flat declaration-order list of every field id — the \"show everything\" default. */\nexport function patientFieldCatalogue(\n sections: PatientFieldSection[],\n): string[] {\n return sections.flatMap((s) => s.fields.map((f) => f.id));\n}\n\n/** A section paired with its currently-visible fields, in the chosen order. */\nexport interface ResolvedPatientSection {\n section: PatientFieldSection;\n fields: PatientField[];\n}\n\n/**\n * Project `sections` to the visible fields per section, ordered by\n * `visibleFieldOrder`. This is the single piece of visibility logic shared\n * by every patient surface, so the card and the details panel always agree\n * on what is shown and in what order.\n *\n * `visibleFieldOrder` omitted (`undefined`) ⇒ every field visible in\n * declaration order (\"show everything by default\", design doc D3). An explicit\n * empty array `[]` ⇒ NO fields visible — a surface that starts collapsed and\n * reveals fields via the customize-fields cog. Unknown ids are ignored.\n * Sections stay in declaration order; only intra-section field order follows\n * `visibleFieldOrder`.\n */\nexport function resolveVisibleFields(\n sections: PatientFieldSection[],\n visibleFieldOrder?: string[],\n): ResolvedPatientSection[] {\n const order = visibleFieldOrder ?? patientFieldCatalogue(sections);\n const orderIndex = new Map(order.map((id, index) => [id, index]));\n return sections.map((section) => ({\n section,\n fields: section.fields\n .filter((field) => orderIndex.has(field.id))\n .sort(\n (a, b) =>\n (orderIndex.get(a.id) as number) - (orderIndex.get(b.id) as number),\n ),\n }));\n}\n","import { useCallback, useMemo } from 'react';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport {\n patientFieldCatalogue,\n type PatientField,\n type PatientFieldSection,\n} from './patient-fields';\n\n/* -------------------------------------------------------------------- */\n/* usePatientFieldVisibility */\n/* */\n/* The single visibility + ordering engine behind the patient field */\n/* picker, shared by every surface that lets a user curate which patient */\n/* fields show and in what order (PatientDetails, PatientSummaryCard). */\n/* */\n/* CONTEXT-SCOPED, not global: the order is a per-INSTANCE prop the kit */\n/* never persists. Each placement (a care-plan card, the patient-folder */\n/* summary, the Control Room details panel) is wired to its OWN */\n/* `value` / `onChange`, so the SAME field vocabulary can be displayed */\n/* differently in different parts of the app. The consumer owns the */\n/* persistence scope — global per-user, or per-context. */\n/* */\n/* Every mutation filters to known field ids, so persisted / agent input */\n/* can never smuggle an unknown key into the visible set. */\n/* -------------------------------------------------------------------- */\n\nexport interface UsePatientFieldVisibilityOptions {\n /** Controlled ordered list of visible field ids. */\n value?: string[];\n /** Uncontrolled initial order. Omit both ⇒ every field, declaration order. */\n defaultValue?: string[];\n /** Fired on any show / hide / reorder, with the next ordered visible set. */\n onChange?: (orderedIds: string[]) => void;\n}\n\nexport interface PatientFieldVisibility {\n /** Current ordered list of visible field ids (filtered to known fields). */\n visible: string[];\n /** Flat declaration-order catalogue of every field id (\"show everything\"). */\n catalogueIds: string[];\n /** field id → its field + owning section id. */\n fieldById: Map<string, { field: PatientField; sectionId: string }>;\n /** Replace the visible set / order (filtered to known fields). */\n setOrder: (orderedIds: string[]) => void;\n /** Show or hide a single field. */\n toggleField: (fieldId: string) => void;\n /** Show or hide every field in a section. */\n toggleSection: (sectionId: string, show: boolean) => void;\n /**\n * Move a field to land at another field's slot, WITHIN its section's\n * visible subsequence. Cross-section moves are ignored — sections stay in\n * declaration order. Drives both pointer drops and keyboard (Alt+Arrow).\n */\n moveFieldOnto: (fromId: string, toId: string) => void;\n /** Reset to `defaultValue` (or the full catalogue when none was given). */\n reset: () => void;\n}\n\nexport function usePatientFieldVisibility(\n sections: PatientFieldSection[],\n { value, defaultValue, onChange }: UsePatientFieldVisibilityOptions = {},\n): PatientFieldVisibility {\n const catalogueIds = useMemo(\n () => patientFieldCatalogue(sections),\n [sections],\n );\n\n const [orderState, setOrderState] = useControllableState<string[]>({\n value,\n defaultValue: defaultValue ?? catalogueIds,\n onChange,\n });\n // `useControllableState` may yield `undefined` before the first write.\n const visible = orderState ?? defaultValue ?? catalogueIds;\n\n const fieldById = useMemo(() => {\n const map = new Map<string, { field: PatientField; sectionId: string }>();\n for (const section of sections) {\n for (const field of section.fields) {\n map.set(field.id, { field, sectionId: section.id });\n }\n }\n return map;\n }, [sections]);\n\n const setOrder = useCallback(\n (next: string[]) => {\n // Drop unknown ids so persisted / agent input can't smuggle keys.\n setOrderState(next.filter((fid) => fieldById.has(fid)));\n },\n [setOrderState, fieldById],\n );\n\n const toggleField = useCallback(\n (fieldId: string) => {\n setOrder(\n visible.includes(fieldId)\n ? visible.filter((fid) => fid !== fieldId)\n : [...visible, fieldId],\n );\n },\n [visible, setOrder],\n );\n\n const toggleSection = useCallback(\n (sectionId: string, show: boolean) => {\n const sectionIds =\n sections.find((s) => s.id === sectionId)?.fields.map((f) => f.id) ?? [];\n const sectionSet = new Set(sectionIds);\n if (show) {\n const missing = sectionIds.filter((fid) => !visible.includes(fid));\n setOrder([...visible, ...missing]);\n } else {\n setOrder(visible.filter((fid) => !sectionSet.has(fid)));\n }\n },\n [sections, visible, setOrder],\n );\n\n const moveFieldOnto = useCallback(\n (fromId: string, toId: string) => {\n if (fromId === toId) return;\n const fromSection = fieldById.get(fromId)?.sectionId;\n const toSection = fieldById.get(toId)?.sectionId;\n if (!fromSection || fromSection !== toSection) return;\n const sectionIds = new Set(\n sections.find((s) => s.id === fromSection)?.fields.map((f) => f.id) ??\n [],\n );\n const siblings = visible.filter((fid) => sectionIds.has(fid));\n const fromIdx = siblings.indexOf(fromId);\n const toIdx = siblings.indexOf(toId);\n if (fromIdx < 0 || toIdx < 0) return;\n const [moved] = siblings.splice(fromIdx, 1);\n siblings.splice(toIdx, 0, moved);\n // Splice the reordered siblings back into their positions in `visible`.\n let k = 0;\n const next = visible.map((fid) =>\n sectionIds.has(fid) ? siblings[k++] : fid,\n );\n setOrder(next);\n },\n [fieldById, sections, visible, setOrder],\n );\n\n const reset = useCallback(() => {\n setOrder(defaultValue ?? catalogueIds);\n }, [defaultValue, catalogueIds, setOrder]);\n\n return {\n visible,\n catalogueIds,\n fieldById,\n setOrder,\n toggleField,\n toggleSection,\n moveFieldOnto,\n reset,\n };\n}\n","import {\n useCallback,\n useMemo,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { GripVertical, Settings } from 'lucide-react';\nimport { Button, IconButton } from '../button';\nimport { Checkbox } from '../checkbox/checkbox';\nimport { Popover } from '../popover/popover';\nimport { Separator } from '../separator/separator';\nimport type { PatientFieldSection } from './patient-fields';\n\n/* -------------------------------------------------------------------- */\n/* FieldVisibilityCog — the patient field picker */\n/* */\n/* The shared \"Customize fields\" cog: a Popover of per-field checkboxes */\n/* (grouped by section, with a section-level toggle-all where the section */\n/* is named), a drag handle per visible field for pointer reordering, and */\n/* the canonical Sidebar keyboard reorder gesture (Alt+Arrow / Alt+Home / */\n/* Alt+End) with an sr-only live announcement. Pure UI — the visibility */\n/* state + reducers live in `usePatientFieldVisibility`, so PatientDetails */\n/* and PatientSummaryCard share ONE picker driving each surface's own */\n/* per-context order. */\n/* */\n/* Native-HTML5 DnD (no library), mirroring data-table's ColumnToggle; */\n/* the grip adds the keyboard channel that pattern lacks. Sections with an */\n/* empty heading render their fields flat with no toggle-all (the card's */\n/* legacy single-section mode) so no empty-named checkbox is emitted. */\n/* -------------------------------------------------------------------- */\n\nexport interface FieldVisibilityCogProps {\n /** The sectioned field catalogue. */\n sections: PatientFieldSection[];\n /** Current ordered visible field ids. */\n visible: string[];\n /** Show / hide a single field. */\n onToggleField: (fieldId: string) => void;\n /** Show / hide every field in a section. */\n onToggleSection: (sectionId: string, show: boolean) => void;\n /** Move a field onto another field's slot within its section. */\n onMoveFieldOnto: (fromId: string, toId: string) => void;\n /** Reset to the default field set / order. */\n onReset: () => void;\n /** Override the cog trigger's accessible name. */\n label?: string;\n}\n\nexport function FieldVisibilityCog({\n sections,\n visible,\n onToggleField,\n onToggleSection,\n onMoveFieldOnto,\n onReset,\n label,\n}: FieldVisibilityCogProps): ReactNode {\n const { t } = useTranslation();\n const visibleSet = useMemo(() => new Set(visible), [visible]);\n\n // Drag-and-drop reorder (pointer). The keyboard channel runs through each\n // grip handle's Alt+Arrow keys; both routes share `onMoveFieldOnto`.\n const [draggingId, setDraggingId] = useState<string | null>(null);\n const [dragOverId, setDragOverId] = useState<string | null>(null);\n const [announcement, setAnnouncement] = useState('');\n\n // Field id → section id and → label: the cross-section drop guard and the\n // move announcement both need the DRAGGED field's section/label, which isn't\n // in the drop row's render scope.\n const { sectionOfField, labelOfField } = useMemo(() => {\n const sectionMap = new Map<string, string>();\n const labelMap = new Map<string, string>();\n for (const section of sections) {\n for (const field of section.fields) {\n sectionMap.set(field.id, section.id);\n labelMap.set(field.id, field.label);\n }\n }\n return { sectionOfField: sectionMap, labelOfField: labelMap };\n }, [sections]);\n\n const draggingSectionId = draggingId\n ? sectionOfField.get(draggingId)\n : undefined;\n\n const clearDrag = useCallback(() => {\n setDraggingId(null);\n setDragOverId(null);\n }, []);\n\n // Announce the moved field's new 1-based position to assistive tech.\n const announceMoved = useCallback(\n (fieldId: string, newIndex: number, count: number) => {\n setAnnouncement(\n t('fieldPicker.moved', {\n field: labelOfField.get(fieldId) ?? '',\n position: newIndex + 1,\n count,\n defaultValue: 'Moved {{field}} to position {{position}} of {{count}}',\n }),\n );\n },\n [t, labelOfField],\n );\n\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <IconButton\n size=\"sm\"\n intent=\"outline\"\n icon={<Settings aria-hidden=\"true\" />}\n aria-label={\n label ??\n t('fieldPicker.trigger', { defaultValue: 'Customize fields' })\n }\n className=\"ds:shrink-0\"\n />\n </Popover.Trigger>\n <Popover.Content align=\"end\" size=\"sm\">\n <Popover.Heading>\n {t('fieldPicker.title', { defaultValue: 'Customize fields' })}\n </Popover.Heading>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:mt-[var(--spacing-xs)]\">\n {sections.map((section) => {\n const fieldIds = section.fields.map((f) => f.id);\n const shownCount = fieldIds.filter((fid) =>\n visibleSet.has(fid),\n ).length;\n // Visible siblings in display order — the subsequence reordering\n // operates on. The keyboard arrows' no-op bounds key off the\n // field's index HERE, not the full declaration array.\n const orderedVisible = visible.filter((fid) =>\n fieldIds.includes(fid),\n );\n const sectionState: boolean | 'indeterminate' =\n shownCount === 0\n ? false\n : shownCount === fieldIds.length\n ? true\n : 'indeterminate';\n // A named section gets a toggle-all checkbox + indented field list;\n // an unnamed one (the card's single legacy section) renders flat.\n const named = !!section.heading;\n return (\n <div\n key={section.id}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]\"\n >\n {named ? (\n <Checkbox\n size=\"sm\"\n label={section.heading}\n checked={sectionState}\n onCheckedChange={(checked) =>\n onToggleSection(section.id, checked === true)\n }\n />\n ) : null}\n <ul\n className={[\n 'ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-2xs)]',\n named ? 'ds:ps-[var(--spacing-md)]' : 'ds:ps-0',\n ].join(' ')}\n >\n {section.fields.map((field) => {\n const shown = visibleSet.has(field.id);\n const visIndex = orderedVisible.indexOf(field.id);\n const count = orderedVisible.length;\n const isDragging = draggingId === field.id;\n const isDragOver =\n dragOverId === field.id &&\n draggingId !== null &&\n draggingId !== field.id &&\n draggingSectionId === section.id;\n\n // Native-HTML5 DnD wiring, applied only to visible rows —\n // a hidden field is neither a drag source nor a drop slot.\n const dragProps: HTMLAttributes<HTMLLIElement> = shown\n ? {\n draggable: true,\n onDragStart: (e) => {\n setDraggingId(field.id);\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', field.id);\n },\n onDragOver: (e) => {\n // Same-section drops only; sections stay fixed.\n if (\n draggingId === null ||\n draggingSectionId !== section.id\n )\n return;\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n setDragOverId(field.id);\n },\n onDragLeave: () =>\n setDragOverId((prev) =>\n prev === field.id ? null : prev,\n ),\n onDrop: (e) => {\n e.preventDefault();\n const fromId = e.dataTransfer.getData('text/plain');\n if (\n fromId &&\n fromId !== field.id &&\n sectionOfField.get(fromId) === section.id\n ) {\n onMoveFieldOnto(fromId, field.id);\n announceMoved(fromId, visIndex, count);\n }\n clearDrag();\n },\n onDragEnd: clearDrag,\n }\n : {};\n\n return (\n <li\n key={field.id}\n {...dragProps}\n className={[\n 'ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-2xs)] ds:rounded-[var(--radius-sm)] ds:px-[var(--spacing-2xs)] ds:py-[var(--spacing-2xs)] ds:transition-colors ds:motion-reduce:transition-none',\n isDragging ? 'ds:opacity-50' : '',\n isDragOver\n ? 'ds:bg-[color:color-mix(in_srgb,var(--primary)_8%,transparent)]'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <Checkbox\n size=\"sm\"\n label={field.label}\n checked={shown}\n onCheckedChange={() => onToggleField(field.id)}\n />\n {shown ? (\n <IconButton\n size=\"sm\"\n intent=\"ghost\"\n icon={<GripVertical aria-hidden=\"true\" />}\n aria-label={t('fieldPicker.reorder', {\n field: field.label,\n defaultValue:\n 'Reorder {{field}}. Press Alt + Up or Alt + Down to move.',\n })}\n aria-keyshortcuts=\"Alt+ArrowUp Alt+ArrowDown Alt+Home Alt+End\"\n className=\"ds:shrink-0 ds:cursor-grab ds:active:cursor-grabbing\"\n onKeyDown={(e) => {\n // Reorder gestures mirror the canonical Sidebar\n // handle: Alt+Arrow (+ Alt+Home / Alt+End). Bare\n // arrows fall through to the browser default.\n if (!e.altKey) return;\n if (e.key === 'ArrowUp') {\n if (visIndex <= 0) return;\n e.preventDefault();\n onMoveFieldOnto(\n field.id,\n orderedVisible[visIndex - 1],\n );\n announceMoved(field.id, visIndex - 1, count);\n } else if (e.key === 'ArrowDown') {\n if (visIndex >= count - 1) return;\n e.preventDefault();\n onMoveFieldOnto(\n field.id,\n orderedVisible[visIndex + 1],\n );\n announceMoved(field.id, visIndex + 1, count);\n } else if (e.key === 'Home') {\n if (visIndex <= 0) return;\n e.preventDefault();\n onMoveFieldOnto(field.id, orderedVisible[0]);\n announceMoved(field.id, 0, count);\n } else if (e.key === 'End') {\n if (visIndex >= count - 1) return;\n e.preventDefault();\n onMoveFieldOnto(\n field.id,\n orderedVisible[count - 1],\n );\n announceMoved(field.id, count - 1, count);\n }\n }}\n />\n ) : null}\n </li>\n );\n })}\n </ul>\n </div>\n );\n })}\n <Separator orientation=\"horizontal\" />\n <Button type=\"button\" size=\"sm\" intent=\"ghost\" onClick={onReset}>\n {t('fieldPicker.reset', { defaultValue: 'Reset to defaults' })}\n </Button>\n </div>\n {/* Reorder announcements for assistive tech (drag drop + arrow keys). */}\n <span role=\"status\" className=\"ds:sr-only\">\n {announcement}\n </span>\n </Popover.Content>\n </Popover.Root>\n );\n}\n","import { cloneElement, type ReactElement, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { CalendarDays, Hash, Hourglass, Mars, User, Venus } from 'lucide-react';\nimport { Badge } from '../badge/badge';\nimport { Link } from '../link/link';\nimport { TransactionChip } from '../transaction-chip/transaction-chip';\nimport type { PatientField } from './patient-fields';\n\n/* -------------------------------------------------------------------- */\n/* FieldValue — the canonical field-chip registry */\n/* */\n/* Renders ONE patient field's value slot. When the consumer supplies an */\n/* explicit `value` (legacy rows, per-placement overrides) it wins */\n/* verbatim. Otherwise `kind` selects the canonical chip and the raw */\n/* datum is read from `editValue`, so a known field type looks the same */\n/* on every surface (PatientSummaryCard + PatientDetails share this). */\n/* */\n/* The per-type chips (`SexChip` / `AgeChip` / `NeutralChip`) are exported */\n/* so the PatientSummaryCard identity line renders the SAME chips under */\n/* the name. */\n/* */\n/* Pure composition over already-marked kit primitives (Badge / */\n/* TransactionChip) — it mounts no surface of its own, so it carries no */\n/* `data-component` (allowlisted in check-data-component-coverage.mjs). */\n/* -------------------------------------------------------------------- */\n\n// The neutral Badge's own text colour (`--muted-foreground`) is too low\n// contrast for primary demographic data — grey text on the grey pill reads at\n// ~5.8:1. The chip label + glyph are pinned to `--foreground` (~11:1) so the\n// data stays legible on every theme.\nconst STRONG = 'ds:text-[color:var(--foreground)]';\n\n/** Default English labels — real translations live under `patientField.*`. */\nconst SEX_LABEL_DEFAULT: Record<string, string> = {\n m: 'Male',\n f: 'Female',\n x: 'Other',\n};\n\n/** A neutral pill with high-contrast text + an optional leading glyph. */\nexport function NeutralChip({\n icon,\n mono,\n children,\n}: {\n icon?: ReactElement;\n mono?: boolean;\n children: ReactNode;\n}): ReactNode {\n return (\n <Badge\n variant=\"neutral\"\n className={mono ? 'ds:font-mono' : undefined}\n // Clone the glyph (don't wrap it) so it stays Badge's DIRECT <svg> child —\n // Badge's `[&>svg]:size-*` rule only sizes a direct child, so wrapping it\n // left the glyph at lucide's default 24px. The clone also carries `STRONG`.\n leading={\n icon\n ? cloneElement(icon as ReactElement<{ className?: string }>, {\n className: STRONG,\n })\n : undefined\n }\n >\n <span className={STRONG}>{children}</span>\n </Badge>\n );\n}\n\n/** Sex chip — Venus / Mars / User glyph + localised label. Female / male carry a\n * tonal pink / blue FILL; unspecified stays the neutral pill. */\nexport function SexChip({ code }: { code: string }): ReactNode {\n const { t } = useTranslation();\n const c = code.toLowerCase();\n const label = t(`patientField.sex.${c}`, {\n defaultValue: SEX_LABEL_DEFAULT[c] ?? code,\n });\n // The fill carries the colour; Badge sizes + tones the glyph from the variant.\n // `accentSoft` is the kit's tonal magenta (≈ pink); `info` the tonal indigo\n // (≈ blue, the closest the closed palette has to blue). Other → neutral.\n if (c === 'f') {\n return (\n <Badge variant=\"accentSoft\" leading={<Venus />}>\n {label}\n </Badge>\n );\n }\n if (c === 'm') {\n return (\n <Badge variant=\"info\" leading={<Mars />}>\n {label}\n </Badge>\n );\n }\n return <NeutralChip icon={<User />}>{label}</NeutralChip>;\n}\n\n/** Age chip — hourglass glyph + localised, pluralised age. */\nexport function AgeChip({ years }: { years: number }): ReactNode {\n const { t } = useTranslation();\n return (\n <NeutralChip icon={<Hourglass />}>\n {t('patientField.age', {\n count: years,\n defaultValue: '{{count}} years old',\n })}\n </NeutralChip>\n );\n}\n\nexport function FieldValue({ field }: { field: PatientField }): ReactNode {\n const { i18n } = useTranslation();\n\n // Contact kinds render as a mailto:/tel: Link — the display string is read\n // from `value` (or `editValue`), the href is derived from it. Checked BEFORE\n // the explicit-value short-circuit so a plain-string `value` still links.\n if (field.kind === 'email' || field.kind === 'phone') {\n const display =\n typeof field.value === 'string'\n ? field.value\n : (field.copyText ??\n (typeof field.editValue === 'string' ? field.editValue : ''));\n if (display) {\n // mailto: trims surrounding whitespace; tel: keeps only `+` and digits\n // (dialler-safe), leaving the formatted text as the visible label.\n const href =\n field.kind === 'email'\n ? `mailto:${display.trim()}`\n : `tel:${display.replace(/[^+\\d]/g, '')}`;\n return <Link href={href}>{display}</Link>;\n }\n // No string to link — fall through to any explicit node value below.\n }\n\n // An explicit value always wins — legacy rows + per-placement overrides.\n if (field.value != null) {\n return <>{field.value}</>;\n }\n if (!field.kind) {\n return null;\n }\n\n switch (field.kind) {\n case 'sex':\n return <SexChip code={String(field.editValue ?? '')} />;\n case 'age': {\n const years =\n typeof field.editValue === 'number'\n ? field.editValue\n : Number(field.editValue);\n if (!Number.isFinite(years)) {\n return null;\n }\n return <AgeChip years={years} />;\n }\n case 'dob': {\n const raw = field.editValue;\n const date = raw instanceof Date ? raw : new Date(String(raw ?? ''));\n const formatted = Number.isNaN(date.getTime())\n ? String(raw ?? '')\n : new Intl.DateTimeFormat(i18n.language, {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n }).format(date);\n if (!formatted) {\n return null;\n }\n return <NeutralChip icon={<CalendarDays />}>{formatted}</NeutralChip>;\n }\n case 'fiscalCode': {\n // Copy + PHI lock stay the consumer's row-level affordance (PatientDetails\n // renders them from `copyable` / `sensitive`); the chip is the mono pill.\n const code =\n field.copyText ??\n (typeof field.editValue === 'string' ? field.editValue : '');\n if (!code) {\n return null;\n }\n return (\n <NeutralChip icon={<Hash />} mono>\n {code}\n </NeutralChip>\n );\n }\n case 'discount': {\n // The canonical monetary discount chip — magnitude + currency, the sign\n // (\"−\") and glyph owned by TransactionChip. The row label gives context,\n // so the chip itself shows only the amount (no duplicate state label).\n const amount =\n typeof field.editValue === 'number'\n ? field.editValue\n : Number(field.editValue);\n if (!Number.isFinite(amount)) {\n return null;\n }\n return (\n <TransactionChip\n state=\"discount\"\n amount={Math.abs(amount)}\n currency={field.currency}\n size=\"sm\"\n />\n );\n }\n default:\n return null;\n }\n}\n"],"names":["__iconNode","Hourglass","createLucideIcon","Mars","Venus","patientFieldCatalogue","sections","s","f","resolveVisibleFields","visibleFieldOrder","order","orderIndex","id","index","section","field","a","b","usePatientFieldVisibility","value","defaultValue","onChange","catalogueIds","useMemo","orderState","setOrderState","useControllableState","visible","fieldById","map","setOrder","useCallback","next","fid","toggleField","fieldId","toggleSection","sectionId","show","sectionIds","_a","sectionSet","missing","moveFieldOnto","fromId","toId","fromSection","toSection","_b","_c","siblings","fromIdx","toIdx","moved","k","reset","FieldVisibilityCog","onToggleField","onToggleSection","onMoveFieldOnto","onReset","label","t","useTranslation","visibleSet","draggingId","setDraggingId","useState","dragOverId","setDragOverId","announcement","setAnnouncement","sectionOfField","labelOfField","sectionMap","labelMap","draggingSectionId","clearDrag","announceMoved","newIndex","count","jsxs","Popover","jsx","IconButton","Settings","fieldIds","shownCount","orderedVisible","sectionState","named","Checkbox","checked","shown","visIndex","isDragging","isDragOver","e","prev","GripVertical","Separator","Button","STRONG","SEX_LABEL_DEFAULT","NeutralChip","icon","mono","children","Badge","cloneElement","SexChip","code","c","User","AgeChip","years","FieldValue","i18n","display","href","Link","Fragment","raw","date","formatted","CalendarDays","Hash","amount","TransactionChip"],"mappings":"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","x_google_ignoreList":[0,1,2]}