@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,5 +1,5 @@
1
1
  import { jsx as s, jsxs as i } from "react/jsx-runtime";
2
- import { forwardRef as ne, useRef as C, useState as H, useEffect as te } from "react";
2
+ import { forwardRef as ne, useRef as C, useState as E, useEffect as te } from "react";
3
3
  import { useTranslation as re } from "react-i18next";
4
4
  import { D as u } from "./dialog-UbKJCi1X.js";
5
5
  import { B as q } from "./button-CPGiR_bH.js";
@@ -8,79 +8,62 @@ import { C as le } from "./checkbox-BuZ1u__2.js";
8
8
  import { a as de } from "./whatsapp-button-BIy6NaJK.js";
9
9
  import { S as L } from "./select-BW5ecXlX.js";
10
10
  import { S as ce } from "./switch-OILsBLWo.js";
11
- import { A as p } from "./alert-KJbsPYkI.js";
11
+ import { A as h } from "./alert-Cxaqd-QO.js";
12
12
  import { S as oe } from "./separator-CYU_bGFn.js";
13
13
  import { A as F } from "./avatar-BNQNhoyL.js";
14
- import { c as _ } from "./createLucideIcon-DhHxpK9K.js";
14
+ import { c as W } from "./createLucideIcon-DhHxpK9K.js";
15
15
  import { P as ue } from "./plus-DzMQ_c6b.js";
16
16
  import { X as me } from "./x-B5YnXwCz.js";
17
- import { P as he } from "./pen-line-D0De5zdl.js";
18
- import { M as pe } from "./mail-BqXVF2zH.js";
17
+ import { P as pe } from "./pen-line-D0De5zdl.js";
18
+ import { M as he } from "./mail-BqXVF2zH.js";
19
+ import { M as ge } from "./message-square-Bye4ATvx.js";
19
20
  /**
20
21
  * @license lucide-react v1.22.0 - ISC
21
22
  *
22
23
  * This source code is licensed under the ISC license.
23
24
  * See the LICENSE file in the root directory of this source tree.
24
25
  */
25
- const ge = [
26
- [
27
- "path",
28
- {
29
- d: "M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",
30
- key: "18887p"
31
- }
32
- ],
33
- ["path", { d: "M7 11h10", key: "1twpyw" }],
34
- ["path", { d: "M7 15h6", key: "d9of3u" }],
35
- ["path", { d: "M7 7h8", key: "af5zfr" }]
36
- ], ve = _("message-square-text", ge);
37
- /**
38
- * @license lucide-react v1.22.0 - ISC
39
- *
40
- * This source code is licensed under the ISC license.
41
- * See the LICENSE file in the root directory of this source tree.
42
- */
43
- const fe = [
26
+ const ve = [
44
27
  ["rect", { width: "16", height: "20", x: "4", y: "2", rx: "2", ry: "2", key: "76otgf" }],
45
28
  ["line", { x1: "12", x2: "12.01", y1: "18", y2: "18", key: "1dp563" }]
46
- ], xe = _("tablet", fe);
29
+ ], fe = W("tablet", ve);
47
30
  /**
48
31
  * @license lucide-react v1.22.0 - ISC
49
32
  *
50
33
  * This source code is licensed under the ISC license.
51
34
  * See the LICENSE file in the root directory of this source tree.
52
35
  */
53
- const Re = [
36
+ const xe = [
54
37
  ["path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2", key: "1yyitq" }],
55
38
  ["circle", { cx: "9", cy: "7", r: "4", key: "nufk8" }],
56
39
  ["line", { x1: "19", x2: "19", y1: "8", y2: "14", key: "1bvyxn" }],
57
40
  ["line", { x1: "22", x2: "16", y1: "11", y2: "11", key: "1shjgl" }]
58
- ], qe = _("user-plus", Re), g = "__assign-later__", V = [
41
+ ], Re = W("user-plus", xe), g = "__assign-later__", H = [
59
42
  "sms",
60
43
  "email",
61
44
  "whatsapp",
62
45
  "on-device"
63
46
  ];
64
- function W(m, w) {
47
+ function V(m, w) {
65
48
  var o;
66
49
  return ((o = m.find((c) => c.value === w)) == null ? void 0 : o.label) ?? "";
67
50
  }
68
- const we = ne(
51
+ const qe = ne(
69
52
  ({
70
53
  open: m,
71
54
  onOpenChange: w,
72
55
  operators: o,
73
56
  signerOptions: c,
74
- currentOperatorId: z,
75
- allowAssignLater: N = !0,
76
- initialOperatorId: M,
77
- initialSigners: b,
57
+ currentOperatorId: _,
58
+ allowAssignLater: b = !0,
59
+ initialOperatorId: z,
60
+ initialSigners: I,
78
61
  maxSigners: G = 2,
79
62
  busy: d = !1,
80
- error: A,
63
+ error: M,
81
64
  title: U,
82
- description: $,
83
- onRequestSignature: X,
65
+ description: X,
66
+ onRequestSignature: $,
84
67
  contentProps: J
85
68
  }, K) => {
86
69
  const { t: a } = re(), D = C(0), O = C(null), P = (e) => {
@@ -88,33 +71,33 @@ const we = ne(
88
71
  const n = (r = c.find(
89
72
  (l) => l.value === e
90
73
  )) == null ? void 0 : r.availableChannels;
91
- return n && n.length > 0 ? V.filter((l) => n.includes(l)) : V;
92
- }, y = (e, n) => {
74
+ return n && n.length > 0 ? H.filter((l) => n.includes(l)) : H;
75
+ }, N = (e, n) => {
93
76
  const r = P(e);
94
77
  return r.includes(n) ? n : r[0];
95
- }, T = () => {
78
+ }, A = () => {
96
79
  var e, n;
97
- return M === null ? N ? g : ((e = o[0]) == null ? void 0 : e.value) ?? g : M ?? ((n = o[0]) == null ? void 0 : n.value) ?? (N ? g : "");
98
- }, B = () => (b && b.length > 0 ? b : c.length > 0 ? [
80
+ return z === null ? b ? g : ((e = o[0]) == null ? void 0 : e.value) ?? g : z ?? ((n = o[0]) == null ? void 0 : n.value) ?? (b ? g : "");
81
+ }, B = () => (I && I.length > 0 ? I : c.length > 0 ? [
99
82
  {
100
83
  signerId: c[0].value,
101
- channel: y(c[0].value, "on-device")
84
+ channel: N(c[0].value, "on-device")
102
85
  }
103
- ] : []).map((n) => ({ ...n, rowId: D.current++ })), [v, I] = H(T), [h, f] = H(B), j = C(m);
86
+ ] : []).map((n) => ({ ...n, rowId: D.current++ })), [v, S] = E(A), [p, f] = E(B), T = C(m);
104
87
  te(() => {
105
- m && !j.current && (I(T()), f(B())), j.current = m;
88
+ m && !T.current && (S(A()), f(B())), T.current = m;
106
89
  }, [m]);
107
- const Q = N ? [
90
+ const Q = b ? [
108
91
  ...o,
109
92
  { value: g, label: a("signatureRequest.assignLater") }
110
93
  ] : o, k = v === g, Y = {
111
94
  sms: {
112
95
  label: a("signatureRequest.viaSms"),
113
- icon: /* @__PURE__ */ s(ve, { className: "ds:size-4", "aria-hidden": !0 })
96
+ icon: /* @__PURE__ */ s(ge, { className: "ds:size-4", "aria-hidden": !0 })
114
97
  },
115
98
  email: {
116
99
  label: a("signatureRequest.viaEmail"),
117
- icon: /* @__PURE__ */ s(pe, { className: "ds:size-4", "aria-hidden": !0 })
100
+ icon: /* @__PURE__ */ s(he, { className: "ds:size-4", "aria-hidden": !0 })
118
101
  },
119
102
  whatsapp: {
120
103
  label: a("signatureRequest.viaWhatsapp"),
@@ -122,11 +105,11 @@ const we = ne(
122
105
  },
123
106
  "on-device": {
124
107
  label: a("signatureRequest.onThisDevice"),
125
- icon: /* @__PURE__ */ s(xe, { className: "ds:size-4", "aria-hidden": !0 })
108
+ icon: /* @__PURE__ */ s(fe, { className: "ds:size-4", "aria-hidden": !0 })
126
109
  }
127
- }, E = h.map((e) => e.signerId), x = c.find(
128
- (e) => !E.includes(e.value)
129
- ), Z = !d && h.length < G && x !== void 0, S = (e, n) => {
110
+ }, j = p.map((e) => e.signerId), x = c.find(
111
+ (e) => !j.includes(e.value)
112
+ ), Z = !d && p.length < G && x !== void 0, y = (e, n) => {
130
113
  f(
131
114
  (r) => r.map(
132
115
  (l) => l.rowId === e ? { ...l, ...n } : l
@@ -137,7 +120,7 @@ const we = ne(
137
120
  ...e,
138
121
  {
139
122
  signerId: x.value,
140
- channel: y(x.value, "sms"),
123
+ channel: N(x.value, "sms"),
141
124
  rowId: D.current++
142
125
  }
143
126
  ]);
@@ -147,28 +130,28 @@ const we = ne(
147
130
  (r) => r.filter((l) => l.rowId !== e)
148
131
  );
149
132
  }, ae = () => {
150
- X({
133
+ $({
151
134
  operatorId: k ? null : v,
152
- signers: h.map(({ rowId: e, ...n }) => n)
135
+ signers: p.map(({ rowId: e, ...n }) => n)
153
136
  });
154
137
  };
155
138
  return /* @__PURE__ */ s("div", { ref: K, className: "ds:contents", "data-component": "signature-request", children: /* @__PURE__ */ s(u, { open: m, onOpenChange: w, children: /* @__PURE__ */ i(u.Content, { size: "lg", hideCloseButton: !0, ...J, children: [
156
139
  /* @__PURE__ */ i(u.Header, { children: [
157
140
  /* @__PURE__ */ s(u.Title, { children: U ?? a("signatureRequest.title") }),
158
- /* @__PURE__ */ s(u.Description, { children: $ ?? a("signatureRequest.noSignedVersions") })
141
+ /* @__PURE__ */ s(u.Description, { children: X ?? a("signatureRequest.noSignedVersions") })
159
142
  ] }),
160
143
  /* @__PURE__ */ i(u.Body, { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", children: [
161
144
  /* @__PURE__ */ i("section", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", children: [
162
145
  /* @__PURE__ */ i("div", { className: "ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]", children: [
163
146
  /* @__PURE__ */ s("p", { className: "type-eyebrow ds:text-start ds:text-[color:var(--muted-foreground)]", children: a("signatureRequest.operatorSection") }),
164
- z !== void 0 ? /* @__PURE__ */ s(
147
+ _ !== void 0 ? /* @__PURE__ */ s(
165
148
  q,
166
149
  {
167
150
  intent: "primary",
168
151
  size: "sm",
169
- startIcon: /* @__PURE__ */ s(qe, {}),
152
+ startIcon: /* @__PURE__ */ s(Re, {}),
170
153
  disabled: d,
171
- onClick: () => I(z),
154
+ onClick: () => S(_),
172
155
  children: a("signatureRequest.assignToMe")
173
156
  }
174
157
  ) : null
@@ -178,7 +161,7 @@ const we = ne(
178
161
  F,
179
162
  {
180
163
  "aria-hidden": "true",
181
- name: k ? void 0 : W(o, v),
164
+ name: k ? void 0 : V(o, v),
182
165
  size: "sm"
183
166
  }
184
167
  ),
@@ -187,7 +170,7 @@ const we = ne(
187
170
  {
188
171
  options: Q,
189
172
  value: v,
190
- onValueChange: (e) => e && I(e),
173
+ onValueChange: (e) => e && S(e),
191
174
  required: !0,
192
175
  disabled: d,
193
176
  placeholder: a("signatureRequest.operatorPlaceholder"),
@@ -195,7 +178,7 @@ const we = ne(
195
178
  }
196
179
  ) })
197
180
  ] }),
198
- k ? null : /* @__PURE__ */ s(p, { variant: "info", children: /* @__PURE__ */ s(p.Description, { children: a("signatureRequest.operatorHint") }) })
181
+ k ? null : /* @__PURE__ */ s(h, { variant: "info", children: /* @__PURE__ */ s(h.Description, { children: a("signatureRequest.operatorHint") }) })
199
182
  ] }),
200
183
  /* @__PURE__ */ s(oe, { decorative: !0 }),
201
184
  /* @__PURE__ */ i("section", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:text-start", children: [
@@ -214,10 +197,10 @@ const we = ne(
214
197
  }
215
198
  )
216
199
  ] }),
217
- h.map((e) => {
200
+ p.map((e) => {
218
201
  const n = c.filter(
219
- (t) => t.value === e.signerId || !E.includes(t.value)
220
- ), r = W(c, e.signerId), l = P(e.signerId).map(
202
+ (t) => t.value === e.signerId || !j.includes(t.value)
203
+ ), r = V(c, e.signerId), l = P(e.signerId).map(
221
204
  (t) => ({ value: t, ...Y[t] })
222
205
  );
223
206
  return /* @__PURE__ */ i(
@@ -236,11 +219,11 @@ const we = ne(
236
219
  value: e.signerId,
237
220
  onValueChange: (t) => {
238
221
  if (!t) return;
239
- const R = y(
222
+ const R = N(
240
223
  t,
241
224
  e.channel
242
225
  );
243
- S(e.rowId, {
226
+ y(e.rowId, {
244
227
  signerId: t,
245
228
  channel: R,
246
229
  skipOtp: R === "on-device" ? e.skipOtp : void 0
@@ -254,7 +237,7 @@ const we = ne(
254
237
  "aria-label": a("signatureRequest.signerPlaceholder")
255
238
  }
256
239
  ) }),
257
- h.length > 1 ? /* @__PURE__ */ s(
240
+ p.length > 1 ? /* @__PURE__ */ s(
258
241
  ie,
259
242
  {
260
243
  intent: "ghost",
@@ -277,7 +260,7 @@ const we = ne(
277
260
  {
278
261
  checked: e.channel === t.value,
279
262
  disabled: d,
280
- onCheckedChange: (R) => R === !0 && S(e.rowId, {
263
+ onCheckedChange: (R) => R === !0 && y(e.rowId, {
281
264
  channel: t.value,
282
265
  skipOtp: void 0
283
266
  }),
@@ -303,7 +286,7 @@ const we = ne(
303
286
  label: a("signatureRequest.noOtp"),
304
287
  checked: e.skipOtp === !0,
305
288
  disabled: d,
306
- onCheckedChange: (t) => S(e.rowId, { skipOtp: t })
289
+ onCheckedChange: (t) => y(e.rowId, { skipOtp: t })
307
290
  }
308
291
  ) }) : null
309
292
  ]
@@ -312,19 +295,19 @@ const we = ne(
312
295
  );
313
296
  })
314
297
  ] }),
315
- h.some(
298
+ p.some(
316
299
  (e) => e.channel === "on-device" && e.skipOtp === !0
317
- ) ? /* @__PURE__ */ s(p, { variant: "warning", children: /* @__PURE__ */ s(p.Description, { children: a("signatureRequest.noOtpWarning") }) }) : null,
318
- A ? /* @__PURE__ */ s(p, { variant: "error", children: /* @__PURE__ */ s(p.Description, { children: A }) }) : null
300
+ ) ? /* @__PURE__ */ s(h, { variant: "warning", children: /* @__PURE__ */ s(h.Description, { children: a("signatureRequest.noOtpWarning") }) }) : null,
301
+ M ? /* @__PURE__ */ s(h, { variant: "error", children: /* @__PURE__ */ s(h.Description, { children: M }) }) : null
319
302
  ] }),
320
303
  /* @__PURE__ */ i(u.Footer, { children: [
321
304
  /* @__PURE__ */ s(
322
305
  q,
323
306
  {
324
307
  intent: "primary",
325
- startIcon: /* @__PURE__ */ s(he, {}),
308
+ startIcon: /* @__PURE__ */ s(pe, {}),
326
309
  onClick: ae,
327
- disabled: d || h.length === 0,
310
+ disabled: d || p.length === 0,
328
311
  loading: d,
329
312
  children: a("signatureRequest.requestSignature")
330
313
  }
@@ -334,8 +317,8 @@ const we = ne(
334
317
  ] }) }) });
335
318
  }
336
319
  );
337
- we.displayName = "SignatureRequestModal";
320
+ qe.displayName = "SignatureRequestModal";
338
321
  export {
339
- we as S
322
+ qe as S
340
323
  };
341
- //# sourceMappingURL=signature-request-CEOrCDyk.js.map
324
+ //# sourceMappingURL=signature-request-D_6jgDZd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature-request-D_6jgDZd.js","sources":["../../node_modules/lucide-react/dist/esm/icons/tablet.mjs","../../node_modules/lucide-react/dist/esm/icons/user-plus.mjs","../../src/patterns/signature-request/signature-request.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 [\"rect\", { width: \"16\", height: \"20\", x: \"4\", y: \"2\", rx: \"2\", ry: \"2\", key: \"76otgf\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"18\", y2: \"18\", key: \"1dp563\" }]\n];\nconst Tablet = createLucideIcon(\"tablet\", __iconNode);\n\nexport { __iconNode, Tablet as default };\n//# sourceMappingURL=tablet.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 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }],\n [\"line\", { x1: \"19\", x2: \"19\", y1: \"8\", y2: \"14\", key: \"1bvyxn\" }],\n [\"line\", { x1: \"22\", x2: \"16\", y1: \"11\", y2: \"11\", key: \"1shjgl\" }]\n];\nconst UserPlus = createLucideIcon(\"user-plus\", __iconNode);\n\nexport { __iconNode, UserPlus as default };\n//# sourceMappingURL=user-plus.mjs.map\n","/**\n * SignatureRequestModal — the practice-side \"Documenti firmati\" modal that\n * dispatches a document-signature request: assign the operator who must\n * counter-sign (or leave the request unassigned), build the patient-side\n * signer roster (up to `maxSigners`, each with their own delivery channel\n * and, for on-device signing, an OTP waiver), and send.\n *\n * Runtime pattern: real consuming apps mount this in production (surfaced via\n * `src/patterns/index.ts` and the `./patterns/signature-request` subpath).\n * The component owns the form state — re-seeded from the `initial*` props\n * every time `open` flips back to `true` — while the host owns `open`, the\n * option lists, and what happens on submit. Multiple on-device signers sign\n * sequentially in roster order — the execution side is the Signing pattern's\n * multi-signer flow; this modal only encodes the intents.\n */\nimport {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n Mail,\n MessageSquare,\n PenLine,\n Plus,\n Tablet,\n UserPlus,\n X,\n} from 'lucide-react';\nimport { Dialog } from '../../components/dialog';\nimport { Button } from '../../components/button';\nimport { IconButton } from '../../components/icon-button';\nimport { Checkbox } from '../../components/checkbox';\nimport { WhatsAppGlyph } from '../../components/whatsapp-button';\nimport { Select } from '../../components/select';\nimport { Switch } from '../../components/switch';\nimport { Alert } from '../../components/alert';\nimport { Separator } from '../../components/separator';\nimport { Avatar } from '../../components/avatar';\n\n/** Delivery channel for one signer's signature request. */\nexport type SignatureChannel = 'sms' | 'email' | 'whatsapp' | 'on-device';\n\n/** One selectable person/role for the operator or signer selects. */\nexport interface SignerOption {\n value: string;\n label: string;\n /**\n * Delivery channels this person can actually receive. Omit (or pass an\n * empty list) to offer every channel. Hosts gate this from per-patient\n * capability flags — e.g. a patient with no mobile number drops `'sms'`\n * and `'whatsapp'`. Only meaningful for signer options, not operators.\n */\n availableChannels?: SignatureChannel[];\n}\n\n/** One patient-side signer row in the submission. */\nexport interface SignerRequest {\n signerId: string;\n channel: SignatureChannel;\n /** Only meaningful when `channel` is `'on-device'`. */\n skipOtp?: boolean;\n}\n\n/** Payload handed to `onRequestSignature`. */\nexport interface SignatureRequestSubmission {\n /** `null` when the counter-signing operator is left unassigned. */\n operatorId: string | null;\n /** 1..N signers; on-device signers sign sequentially in this order. */\n signers: SignerRequest[];\n}\n\nexport interface SignatureRequestModalProps {\n /** Controlled open state. Reopening re-seeds the form from `initial*`. */\n open: boolean;\n /**\n * Fires when the dialog requests a state change (<kbd>Esc</kbd> or the\n * footer Close button). `false` is the dismiss signal — hosts typically\n * persist a \"dismissed this session\" flag there.\n */\n onOpenChange: (open: boolean) => void;\n /** Operators offered as the counter-signing signer. */\n operators: SignerOption[];\n /** Patient-side people/roles offered in each signer row. */\n signerOptions: SignerOption[];\n /** Enables the \"Assign to me\" shortcut targeting this operator. */\n currentOperatorId?: string;\n /** Offer an \"Assign later\" option in the operator select. Default `true`. */\n allowAssignLater?: boolean;\n /**\n * Preselected operator; `null` preselects \"Assign later\" (honoured only\n * while `allowAssignLater` — otherwise the first operator is seeded).\n */\n initialOperatorId?: string | null;\n /** Seed the signer roster. Defaults to the first option, on-device. */\n initialSigners?: SignerRequest[];\n /** Cap on roster size. Default `2`. */\n maxSigners?: number;\n /** Disables all inputs and shows the primary action as loading. */\n busy?: boolean;\n /** Consumer-translated error shown above the footer (e.g. server failure). */\n error?: string;\n /** Override the dialog title. Defaults to the `ui.*` string. */\n title?: string;\n /** Override the dialog description. Defaults to the `ui.*` string. */\n description?: string;\n /** Receives the completed submission. The host closes via `onOpenChange`. */\n onRequestSignature: (submission: SignatureRequestSubmission) => void;\n /**\n * Extra attributes for the portaled dialog surface (e.g. `dir`/`lang`\n * when the host pins a locale below `<html>`, or a test id).\n */\n contentProps?: ComponentPropsWithoutRef<'div'>;\n}\n\nconst ASSIGN_LATER = '__assign-later__';\n\n/** Canonical channel display order; per-signer availability filters this. */\nconst CHANNEL_ORDER: SignatureChannel[] = [\n 'sms',\n 'email',\n 'whatsapp',\n 'on-device',\n];\n\n/** Internal roster row — `rowId` keys the DOM so editing a row's person\n * never remounts the row (which would drop keyboard focus). */\ninterface RosterRow extends SignerRequest {\n rowId: number;\n}\n\nfunction labelFor(options: SignerOption[], value: string): string {\n return options.find((option) => option.value === value)?.label ?? '';\n}\n\nexport const SignatureRequestModal = forwardRef<\n HTMLDivElement,\n SignatureRequestModalProps\n>(\n (\n {\n open,\n onOpenChange,\n operators,\n signerOptions,\n currentOperatorId,\n allowAssignLater = true,\n initialOperatorId,\n initialSigners,\n maxSigners = 2,\n busy = false,\n error,\n title,\n description,\n onRequestSignature,\n contentProps,\n },\n ref,\n ) => {\n const { t } = useTranslation();\n\n const nextRowId = useRef(0);\n const addButtonRef = useRef<HTMLButtonElement>(null);\n\n // Channels a given signer can receive on — the person's `availableChannels`\n // filtered into canonical order; omitted/empty means every channel.\n const channelsFor = (signerId: string): SignatureChannel[] => {\n const allowed = signerOptions.find(\n (option) => option.value === signerId,\n )?.availableChannels;\n return allowed && allowed.length > 0\n ? CHANNEL_ORDER.filter((channel) => allowed.includes(channel))\n : CHANNEL_ORDER;\n };\n\n // First available channel for a signer, preferring `preferred` when offered.\n const resolveChannel = (\n signerId: string,\n preferred: SignatureChannel,\n ): SignatureChannel => {\n const available = channelsFor(signerId);\n return available.includes(preferred) ? preferred : available[0];\n };\n\n const seedOperator = () => {\n if (initialOperatorId === null) {\n return allowAssignLater\n ? ASSIGN_LATER\n : (operators[0]?.value ?? ASSIGN_LATER);\n }\n return (\n initialOperatorId ??\n operators[0]?.value ??\n (allowAssignLater ? ASSIGN_LATER : '')\n );\n };\n const seedRows = (): RosterRow[] => {\n const seed =\n initialSigners && initialSigners.length > 0\n ? initialSigners\n : signerOptions.length > 0\n ? [\n {\n signerId: signerOptions[0].value,\n channel: resolveChannel(signerOptions[0].value, 'on-device'),\n },\n ]\n : [];\n return seed.map((signer) => ({ ...signer, rowId: nextRowId.current++ }));\n };\n\n const [operator, setOperator] = useState<string>(seedOperator);\n const [signers, setSigners] = useState<RosterRow[]>(seedRows);\n\n // Re-seed the form whenever the host reopens the (still-mounted) modal,\n // so a previous request's choices never leak into the next one.\n const wasOpen = useRef(open);\n useEffect(() => {\n if (open && !wasOpen.current) {\n setOperator(seedOperator());\n setSigners(seedRows());\n }\n wasOpen.current = open;\n // The seeds intentionally read the render-time props on the rising\n // edge only — prop changes while open (or closed) don't reset input.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n const operatorSelectOptions = allowAssignLater\n ? [\n ...operators,\n { value: ASSIGN_LATER, label: t('signatureRequest.assignLater') },\n ]\n : operators;\n const isUnassigned = operator === ASSIGN_LATER;\n\n const channelMeta: Record<\n SignatureChannel,\n { label: string; icon: React.ReactNode }\n > = {\n sms: {\n label: t('signatureRequest.viaSms'),\n icon: <MessageSquare className=\"ds:size-4\" aria-hidden />,\n },\n email: {\n label: t('signatureRequest.viaEmail'),\n icon: <Mail className=\"ds:size-4\" aria-hidden />,\n },\n whatsapp: {\n label: t('signatureRequest.viaWhatsapp'),\n icon: <WhatsAppGlyph className=\"ds:size-4\" aria-hidden />,\n },\n 'on-device': {\n label: t('signatureRequest.onThisDevice'),\n icon: <Tablet className=\"ds:size-4\" aria-hidden />,\n },\n };\n\n const chosenIds = signers.map((signer) => signer.signerId);\n const nextFreeOption = signerOptions.find(\n (option) => !chosenIds.includes(option.value),\n );\n const canAddSigner =\n !busy && signers.length < maxSigners && nextFreeOption !== undefined;\n\n const patchSigner = (rowId: number, patch: Partial<SignerRequest>) => {\n setSigners((current) =>\n current.map((signer) =>\n signer.rowId === rowId ? { ...signer, ...patch } : signer,\n ),\n );\n };\n\n const addSigner = () => {\n if (!nextFreeOption) return;\n setSigners((current) => [\n ...current,\n {\n signerId: nextFreeOption.value,\n channel: resolveChannel(nextFreeOption.value, 'sms'),\n rowId: nextRowId.current++,\n },\n ]);\n };\n\n const removeSigner = (rowId: number) => {\n // Move focus BEFORE the row (and the focused remove button) unmounts —\n // otherwise Radix's focus scope dumps focus on the dialog container.\n addButtonRef.current?.focus();\n setSigners((current) =>\n current.filter((signer) => signer.rowId !== rowId),\n );\n };\n\n const handleRequest = () => {\n onRequestSignature({\n operatorId: isUnassigned ? null : operator,\n signers: signers.map(({ rowId: _rowId, ...signer }) => signer),\n });\n };\n\n return (\n <div ref={ref} className=\"ds:contents\" data-component=\"signature-request\">\n <Dialog open={open} onOpenChange={onOpenChange}>\n <Dialog.Content size=\"lg\" hideCloseButton {...contentProps}>\n <Dialog.Header>\n <Dialog.Title>\n {title ?? t('signatureRequest.title')}\n </Dialog.Title>\n <Dialog.Description>\n {description ?? t('signatureRequest.noSignedVersions')}\n </Dialog.Description>\n </Dialog.Header>\n\n <Dialog.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n <section className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <p className=\"type-eyebrow ds:text-start ds:text-[color:var(--muted-foreground)]\">\n {t('signatureRequest.operatorSection')}\n </p>\n {currentOperatorId !== undefined ? (\n <Button\n intent=\"primary\"\n size=\"sm\"\n startIcon={<UserPlus />}\n disabled={busy}\n onClick={() => setOperator(currentOperatorId)}\n >\n {t('signatureRequest.assignToMe')}\n </Button>\n ) : null}\n </div>\n\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n {/* Mirrors the select value — decorative for AT. No name →\n Avatar's built-in placeholder-icon fallback. */}\n <Avatar\n aria-hidden=\"true\"\n name={\n isUnassigned ? undefined : labelFor(operators, operator)\n }\n size=\"sm\"\n />\n <div className=\"ds:min-w-0 ds:flex-1 ds:text-start\">\n <Select\n options={operatorSelectOptions}\n value={operator}\n onValueChange={(value) => value && setOperator(value)}\n required\n disabled={busy}\n placeholder={t('signatureRequest.operatorPlaceholder')}\n aria-label={t('signatureRequest.operatorSection')}\n />\n </div>\n </div>\n\n {isUnassigned ? null : (\n <Alert variant=\"info\">\n <Alert.Description>\n {t('signatureRequest.operatorHint')}\n </Alert.Description>\n </Alert>\n )}\n </section>\n\n <Separator decorative />\n\n <section className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:text-start\">\n <div className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <p className=\"type-eyebrow ds:text-[color:var(--muted-foreground)]\">\n {t('signatureRequest.signersSection')}\n </p>\n <Button\n ref={addButtonRef}\n intent=\"primary\"\n size=\"sm\"\n startIcon={<Plus />}\n disabled={!canAddSigner}\n onClick={addSigner}\n >\n {t('signatureRequest.addSigner')}\n </Button>\n </div>\n\n {signers.map((signer) => {\n const rowOptions = signerOptions.filter(\n (option) =>\n option.value === signer.signerId ||\n !chosenIds.includes(option.value),\n );\n const rowLabel = labelFor(signerOptions, signer.signerId);\n const rowChannelOptions = channelsFor(signer.signerId).map(\n (channel) => ({ value: channel, ...channelMeta[channel] }),\n );\n return (\n <div\n key={signer.rowId}\n role=\"group\"\n aria-label={rowLabel}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n {/* Mirrors the select value — decorative for AT. */}\n <Avatar aria-hidden=\"true\" name={rowLabel} size=\"sm\" />\n <div className=\"ds:min-w-0 ds:flex-1\">\n <Select\n options={rowOptions}\n value={signer.signerId}\n onValueChange={(value) => {\n if (!value) return;\n const channel = resolveChannel(\n value,\n signer.channel,\n );\n patchSigner(signer.rowId, {\n signerId: value,\n channel,\n skipOtp:\n channel === 'on-device'\n ? signer.skipOtp\n : undefined,\n });\n }}\n required\n disabled={busy}\n placeholder={t(\n 'signatureRequest.signerPlaceholder',\n )}\n aria-label={t('signatureRequest.signerPlaceholder')}\n />\n </div>\n {signers.length > 1 ? (\n <IconButton\n intent=\"ghost\"\n size=\"sm\"\n icon={<X />}\n disabled={busy}\n aria-label={t('signatureRequest.removeSigner')}\n onClick={() => removeSigner(signer.rowId)}\n />\n ) : null}\n </div>\n\n {/* One channel per signer — checkbox visuals, but the\n choice is mutually exclusive: checking a channel\n unchecks the others, and the active one can't be\n unchecked. */}\n <div\n role=\"group\"\n aria-label={t('signatureRequest.channelLabel')}\n className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-x-[var(--spacing-lg)] ds:gap-y-[var(--spacing-sm)] ds:ps-[var(--spacing-xl)]\"\n >\n {rowChannelOptions.map((option) => (\n <Checkbox\n key={option.value}\n checked={signer.channel === option.value}\n disabled={busy}\n onCheckedChange={(checked) =>\n checked === true &&\n patchSigner(signer.rowId, {\n channel: option.value,\n skipOtp: undefined,\n })\n }\n label={\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <span\n aria-hidden=\"true\"\n className=\"ds:text-[var(--accent)]\"\n >\n {option.icon}\n </span>\n {option.label}\n </span>\n }\n />\n ))}\n </div>\n\n {signer.channel === 'on-device' ? (\n <div className=\"ds:ps-[var(--spacing-xl)]\">\n <Switch\n label={t('signatureRequest.noOtp')}\n checked={signer.skipOtp === true}\n disabled={busy}\n onCheckedChange={(checked) =>\n patchSigner(signer.rowId, { skipOtp: checked })\n }\n />\n </div>\n ) : null}\n </div>\n );\n })}\n </section>\n\n {/* Dedicated alert area — one warning regardless of how many\n signers waive OTP, stacked with any submission error, all at\n the same full width as the operator hint. */}\n {signers.some(\n (signer) =>\n signer.channel === 'on-device' && signer.skipOtp === true,\n ) ? (\n <Alert variant=\"warning\">\n <Alert.Description>\n {t('signatureRequest.noOtpWarning')}\n </Alert.Description>\n </Alert>\n ) : null}\n {error ? (\n <Alert variant=\"error\">\n <Alert.Description>{error}</Alert.Description>\n </Alert>\n ) : null}\n </Dialog.Body>\n\n <Dialog.Footer>\n <Button\n intent=\"primary\"\n startIcon={<PenLine />}\n onClick={handleRequest}\n disabled={busy || signers.length === 0}\n loading={busy}\n >\n {t('signatureRequest.requestSignature')}\n </Button>\n <Dialog.Close asChild>\n <Button intent=\"outline\" disabled={busy}>\n {t('signatureRequest.close')}\n </Button>\n </Dialog.Close>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog>\n </div>\n );\n },\n);\nSignatureRequestModal.displayName = 'SignatureRequestModal';\n"],"names":["__iconNode","Tablet","createLucideIcon","UserPlus","ASSIGN_LATER","CHANNEL_ORDER","labelFor","options","value","_a","option","SignatureRequestModal","forwardRef","open","onOpenChange","operators","signerOptions","currentOperatorId","allowAssignLater","initialOperatorId","initialSigners","maxSigners","busy","error","title","description","onRequestSignature","contentProps","ref","t","useTranslation","nextRowId","useRef","addButtonRef","channelsFor","signerId","allowed","channel","resolveChannel","preferred","available","seedOperator","_b","seedRows","signer","operator","setOperator","useState","signers","setSigners","wasOpen","useEffect","operatorSelectOptions","isUnassigned","channelMeta","jsx","MessageSquare","Mail","WhatsAppGlyph","chosenIds","nextFreeOption","canAddSigner","patchSigner","rowId","patch","current","addSigner","removeSigner","handleRequest","_rowId","Dialog","jsxs","Button","Avatar","Select","Alert","Separator","Plus","rowOptions","rowLabel","rowChannelOptions","IconButton","X","Checkbox","checked","Switch","PenLine"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1 +1 @@
1
- {"version":3,"file":"task-card-BUgK6yZT.js","sources":["../../node_modules/lucide-react/dist/esm/icons/briefcase.mjs","../../node_modules/lucide-react/dist/esm/icons/building-2.mjs","../../src/components/task-card/task-card.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: \"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\", key: \"jecpp\" }],\n [\"rect\", { width: \"20\", height: \"14\", x: \"2\", y: \"6\", rx: \"2\", key: \"i6l2r4\" }]\n];\nconst Briefcase = createLucideIcon(\"briefcase\", __iconNode);\n\nexport { __iconNode, Briefcase as default };\n//# sourceMappingURL=briefcase.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: \"M10 12h4\", key: \"a56b0p\" }],\n [\"path\", { d: \"M10 8h4\", key: \"1sr2af\" }],\n [\"path\", { d: \"M14 21v-3a2 2 0 0 0-4 0v3\", key: \"1rgiei\" }],\n [\n \"path\",\n {\n d: \"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2\",\n key: \"secmi2\"\n }\n ],\n [\"path\", { d: \"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16\", key: \"16ra0t\" }]\n];\nconst Building2 = createLucideIcon(\"building-2\", __iconNode);\n\nexport { __iconNode, Building2 as default };\n//# sourceMappingURL=building-2.mjs.map\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport {\n AlertCircle,\n Briefcase,\n Building2,\n CheckSquare,\n ChevronRight,\n Square,\n User,\n} from 'lucide-react';\nimport { VisuallyHidden } from '../visually-hidden';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport type TaskStatus = 'open' | 'in-progress' | 'done';\nexport type TaskPriority = 'low' | 'normal' | 'high';\n\n/** Which entity the task links to. The platform `DoctorReminder` links to exactly one of these (or none). */\nexport type TaskLinkType = 'patient' | 'company' | 'operator';\n\n/** Linked-entity glyph — patient (person), company (building), operator (briefcase). */\nconst LINK_ICON: Record<TaskLinkType, typeof User> = {\n patient: User,\n company: Building2,\n operator: Briefcase,\n};\n\nexport interface TaskItem {\n /** Unique identifier for the task. */\n id: string;\n /** Title — single line, primary content. */\n title: string;\n /** Optional secondary line (e.g. \"Patient A · Due today\"). */\n description?: string;\n /**\n * Localised due-date hint (e.g. \"Due today\" / \"Tomorrow\"). Rendered as a\n * trailing eyebrow chip when set; consumers compute the bucket and pass\n * the localised string.\n */\n dueLabel?: string;\n /**\n * Linked-entity NAME (the patient / company / operator the task points at) —\n * e.g. \"Mario Rossi\". When `linkType` is set the card renders it as a typed\n * chip (a per-type glyph + an accessible \"Patient/Company/Operator:\" prefix);\n * otherwise it renders as a plain eyebrow line. The consumer composes the\n * name only — no prefix.\n */\n linkedLabel?: string;\n /** Type of the linked entity — drives the leading glyph + the accessible prefix on the linked chip. */\n linkType?: TaskLinkType;\n /** Localised assignee display name (host-composed, e.g. \"Dr. Alfa\"). Renders an assignee chip on the meta line. */\n assigneeLabel?: string;\n /** Free-text note attached to the task — muted body line, clamped. */\n note?: string;\n /** Lifecycle state — drives the leading icon. */\n status?: TaskStatus;\n /** Priority — `high` colours the leading icon as `--destructive`. */\n priority?: TaskPriority;\n /** Optional deep link — when present the row is an anchor. */\n url?: string;\n}\n\nexport interface TaskCardProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'onClick' | 'role' | 'title'>,\n VariantProps<typeof taskCardVariants> {\n /** The task to render. */\n item: TaskItem;\n /** Visual density. `xs` is the compact rail row (Control Room); `sm`/`md` for in-page lists. */\n size?: 'xs' | 'sm' | 'md';\n /** Fires when the row is activated (click / Enter / Space). */\n onActivate?: (item: TaskItem) => void;\n /**\n * Trailing per-row action toolbar (icon buttons: mark done, schedule,\n * edit, …). Rendered above the stretched-link overlay so the controls\n * stay clickable inside an interactive row.\n */\n actions?: ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst taskCardVariants = cva(\n [\n 'ds:relative ds:flex ds:items-start ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:transition-colors',\n 'ds:motion-reduce:transition-none',\n 'ds:text-start ds:group',\n 'ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2',\n 'ds:forced-colors:border ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n {\n variants: {\n size: {\n xs: 'ds:p-[var(--spacing-xs)]',\n sm: 'ds:p-[var(--spacing-sm)]',\n md: 'ds:p-[var(--spacing-md)]',\n },\n interactive: {\n true: 'ds:hover:bg-[color:var(--muted)]/40 ds:cursor-pointer',\n false: '',\n },\n },\n defaultVariants: {\n size: 'sm',\n interactive: false,\n },\n },\n);\n\nconst stretchedLinkClass = [\n 'ds:focus-visible:outline-none',\n \"ds:after:content-[''] ds:after:absolute ds:after:inset-0 ds:after:rounded-[var(--radius-sm)]\",\n 'ds:after:pointer-events-auto',\n 'ds:focus-visible:after:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:after:outline-solid',\n 'ds:focus-visible:after:outline-[color:var(--ring)]',\n 'ds:focus-visible:after:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:after:outline-[CanvasText]',\n].join(' ');\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nexport function isSafeTaskUrl(url: string): boolean {\n return /^(https?:\\/\\/(?!\\/)|\\/(?!\\/)|#)/.test(url);\n}\n\nfunction StatusIcon({\n status,\n priority,\n}: {\n status?: TaskStatus;\n priority?: TaskPriority;\n}): ReactNode {\n const tone =\n priority === 'high'\n ? 'ds:text-[color:var(--destructive)]'\n : 'ds:text-[color:var(--muted-foreground)]';\n if (status === 'done') {\n return <CheckSquare aria-hidden=\"true\" className={`ds:size-4 ${tone}`} />;\n }\n if (priority === 'high') {\n return <AlertCircle aria-hidden=\"true\" className={`ds:size-4 ${tone}`} />;\n }\n return <Square aria-hidden=\"true\" className={`ds:size-4 ${tone}`} />;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const TaskCard = forwardRef<HTMLDivElement, TaskCardProps>(\n ({ item, size = 'sm', onActivate, actions, className, ...rest }, ref) => {\n const { t } = useTranslation();\n const interactive = !!onActivate;\n const hasSafeUrl = !!item.url && isSafeTaskUrl(item.url);\n const ariaLabel = t('taskCard.itemLabel', {\n title: item.title,\n due: item.dueLabel ?? '',\n defaultValue: '{{title}}{{due, prepend, \" · \"}}',\n });\n\n // Static key lookups so the i18n coverage gate sees each literal key.\n const linkTypeLabels: Record<TaskLinkType, string> = {\n patient: t('taskCard.link.patient'),\n company: t('taskCard.link.company'),\n operator: t('taskCard.link.operator'),\n };\n const LinkIcon = item.linkType ? LINK_ICON[item.linkType] : null;\n // The meta row carries icon-led chips: a typed linked entity + an assignee.\n const showLinkChip = !!item.linkType && !!item.linkedLabel;\n const hasMetaRow = showLinkChip || !!item.assigneeLabel;\n\n const titleNode = (\n <span className=\"ds:flex-1 ds:min-w-0 ds:truncate type-body-sm ds:text-[color:var(--foreground)]\">\n {item.title}\n </span>\n );\n\n let activator: ReactNode;\n if (interactive && hasSafeUrl) {\n activator = (\n <a\n href={item.url}\n aria-label={ariaLabel}\n className={stretchedLinkClass + ' ds:contents'}\n onClick={(e) => {\n if (e.defaultPrevented || e.metaKey || e.ctrlKey || e.shiftKey)\n return;\n onActivate?.(item);\n }}\n >\n {titleNode}\n </a>\n );\n } else if (interactive) {\n activator = (\n <button\n type=\"button\"\n aria-label={ariaLabel}\n className={\n stretchedLinkClass +\n ' ds:contents ds:bg-transparent ds:border-0 ds:p-0 ds:text-start'\n }\n onClick={() => onActivate?.(item)}\n >\n {titleNode}\n </button>\n );\n } else {\n activator = titleNode;\n }\n\n return (\n <div\n ref={ref}\n role=\"listitem\"\n data-component=\"task-card\"\n data-component-id={item.id}\n data-status={item.status ?? 'open'}\n data-priority={item.priority ?? 'normal'}\n className={taskCardVariants({ size, interactive, className })}\n {...rest}\n >\n <span className=\"ds:mt-[var(--spacing-2xs)] ds:shrink-0\">\n <StatusIcon status={item.status} priority={item.priority} />\n </span>\n\n <div className=\"ds:flex-1 ds:min-w-0 ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n {activator}\n {item.description ? (\n <span className=\"type-body-sm ds:text-[color:var(--muted-foreground)] ds:truncate\">\n {item.description}\n </span>\n ) : null}\n {item.note ? (\n <span className=\"type-body-sm ds:text-[color:var(--muted-foreground)] ds:line-clamp-2\">\n {item.note}\n </span>\n ) : null}\n {hasMetaRow ? (\n // `type-meta` (not `type-eyebrow`): these chips carry proper-noun\n // values (patient / company / operator name, assignee) that must\n // not be uppercased. Icons are decorative; the type word is exposed\n // to AT via a VisuallyHidden prefix so each chip reads e.g.\n // \"Patient: Mario Rossi\" / \"Assignee: Dr. Alfa\".\n <div className=\"type-meta ds:flex ds:flex-wrap ds:items-center ds:gap-x-[var(--spacing-sm)] ds:gap-y-[var(--spacing-2xs)] ds:text-[color:var(--muted-foreground)]\">\n {item.linkType && item.linkedLabel && LinkIcon ? (\n <span className=\"ds:inline-flex ds:min-w-0 ds:items-center ds:gap-[var(--spacing-2xs)]\">\n <LinkIcon\n aria-hidden=\"true\"\n className=\"ds:size-3 ds:shrink-0\"\n />\n <VisuallyHidden>{`${linkTypeLabels[item.linkType]}: `}</VisuallyHidden>\n <span className=\"ds:truncate\">{item.linkedLabel}</span>\n </span>\n ) : null}\n {item.assigneeLabel ? (\n <span className=\"ds:inline-flex ds:min-w-0 ds:items-center ds:gap-[var(--spacing-2xs)]\">\n <User aria-hidden=\"true\" className=\"ds:size-3 ds:shrink-0\" />\n <VisuallyHidden>{`${t('taskCard.assignee')}: `}</VisuallyHidden>\n <span className=\"ds:truncate\">{item.assigneeLabel}</span>\n </span>\n ) : null}\n </div>\n ) : null}\n {item.linkedLabel && !item.linkType ? (\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)] ds:truncate\">\n {item.linkedLabel}\n </span>\n ) : null}\n {item.dueLabel ? (\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)]\">\n {item.dueLabel}\n </span>\n ) : null}\n </div>\n\n {actions ? (\n // Above the stretched-link overlay so the buttons stay clickable.\n <span className=\"ds:relative ds:z-[1] ds:flex ds:items-center ds:gap-[var(--spacing-2xs)] ds:shrink-0\">\n {actions}\n </span>\n ) : null}\n\n {interactive ? (\n <ChevronRight\n aria-hidden=\"true\"\n className=\"ds:mt-[var(--spacing-2xs)] ds:size-4 ds:shrink-0 ds:text-[color:var(--muted-foreground)] ds:opacity-0 ds:transition-opacity ds:motion-reduce:transition-none ds:group-hover:opacity-100 ds:group-focus-within:opacity-100 ds:rtl:rotate-180\"\n />\n ) : null}\n </div>\n );\n },\n);\n\nTaskCard.displayName = 'TaskCard';\n"],"names":["__iconNode","Briefcase","createLucideIcon","Building2","LINK_ICON","User","taskCardVariants","cva","stretchedLinkClass","isSafeTaskUrl","url","StatusIcon","status","priority","tone","CheckSquare","AlertCircle","Square","TaskCard","forwardRef","item","size","onActivate","actions","className","rest","ref","t","useTranslation","interactive","hasSafeUrl","ariaLabel","linkTypeLabels","LinkIcon","hasMetaRow","titleNode","jsx","activator","e","jsxs","VisuallyHidden","ChevronRight"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"task-card-BUgK6yZT.js","sources":["../../node_modules/lucide-react/dist/esm/icons/briefcase.mjs","../../node_modules/lucide-react/dist/esm/icons/building-2.mjs","../../src/components/task-card/task-card.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: \"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\", key: \"jecpp\" }],\n [\"rect\", { width: \"20\", height: \"14\", x: \"2\", y: \"6\", rx: \"2\", key: \"i6l2r4\" }]\n];\nconst Briefcase = createLucideIcon(\"briefcase\", __iconNode);\n\nexport { __iconNode, Briefcase as default };\n//# sourceMappingURL=briefcase.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: \"M10 12h4\", key: \"a56b0p\" }],\n [\"path\", { d: \"M10 8h4\", key: \"1sr2af\" }],\n [\"path\", { d: \"M14 21v-3a2 2 0 0 0-4 0v3\", key: \"1rgiei\" }],\n [\n \"path\",\n {\n d: \"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2\",\n key: \"secmi2\"\n }\n ],\n [\"path\", { d: \"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16\", key: \"16ra0t\" }]\n];\nconst Building2 = createLucideIcon(\"building-2\", __iconNode);\n\nexport { __iconNode, Building2 as default };\n//# sourceMappingURL=building-2.mjs.map\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport {\n CircleAlert,\n Briefcase,\n Building2,\n SquareCheckBig,\n ChevronRight,\n Square,\n User,\n} from 'lucide-react';\nimport { VisuallyHidden } from '../visually-hidden';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport type TaskStatus = 'open' | 'in-progress' | 'done';\nexport type TaskPriority = 'low' | 'normal' | 'high';\n\n/** Which entity the task links to. The platform `DoctorReminder` links to exactly one of these (or none). */\nexport type TaskLinkType = 'patient' | 'company' | 'operator';\n\n/** Linked-entity glyph — patient (person), company (building), operator (briefcase). */\nconst LINK_ICON: Record<TaskLinkType, typeof User> = {\n patient: User,\n company: Building2,\n operator: Briefcase,\n};\n\nexport interface TaskItem {\n /** Unique identifier for the task. */\n id: string;\n /** Title — single line, primary content. */\n title: string;\n /** Optional secondary line (e.g. \"Patient A · Due today\"). */\n description?: string;\n /**\n * Localised due-date hint (e.g. \"Due today\" / \"Tomorrow\"). Rendered as a\n * trailing eyebrow chip when set; consumers compute the bucket and pass\n * the localised string.\n */\n dueLabel?: string;\n /**\n * Linked-entity NAME (the patient / company / operator the task points at) —\n * e.g. \"Mario Rossi\". When `linkType` is set the card renders it as a typed\n * chip (a per-type glyph + an accessible \"Patient/Company/Operator:\" prefix);\n * otherwise it renders as a plain eyebrow line. The consumer composes the\n * name only — no prefix.\n */\n linkedLabel?: string;\n /** Type of the linked entity — drives the leading glyph + the accessible prefix on the linked chip. */\n linkType?: TaskLinkType;\n /** Localised assignee display name (host-composed, e.g. \"Dr. Alfa\"). Renders an assignee chip on the meta line. */\n assigneeLabel?: string;\n /** Free-text note attached to the task — muted body line, clamped. */\n note?: string;\n /** Lifecycle state — drives the leading icon. */\n status?: TaskStatus;\n /** Priority — `high` colours the leading icon as `--destructive`. */\n priority?: TaskPriority;\n /** Optional deep link — when present the row is an anchor. */\n url?: string;\n}\n\nexport interface TaskCardProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'onClick' | 'role' | 'title'>,\n VariantProps<typeof taskCardVariants> {\n /** The task to render. */\n item: TaskItem;\n /** Visual density. `xs` is the compact rail row (Control Room); `sm`/`md` for in-page lists. */\n size?: 'xs' | 'sm' | 'md';\n /** Fires when the row is activated (click / Enter / Space). */\n onActivate?: (item: TaskItem) => void;\n /**\n * Trailing per-row action toolbar (icon buttons: mark done, schedule,\n * edit, …). Rendered above the stretched-link overlay so the controls\n * stay clickable inside an interactive row.\n */\n actions?: ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst taskCardVariants = cva(\n [\n 'ds:relative ds:flex ds:items-start ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:transition-colors',\n 'ds:motion-reduce:transition-none',\n 'ds:text-start ds:group',\n 'ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2',\n 'ds:forced-colors:border ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n {\n variants: {\n size: {\n xs: 'ds:p-[var(--spacing-xs)]',\n sm: 'ds:p-[var(--spacing-sm)]',\n md: 'ds:p-[var(--spacing-md)]',\n },\n interactive: {\n true: 'ds:hover:bg-[color:var(--muted)]/40 ds:cursor-pointer',\n false: '',\n },\n },\n defaultVariants: {\n size: 'sm',\n interactive: false,\n },\n },\n);\n\nconst stretchedLinkClass = [\n 'ds:focus-visible:outline-none',\n \"ds:after:content-[''] ds:after:absolute ds:after:inset-0 ds:after:rounded-[var(--radius-sm)]\",\n 'ds:after:pointer-events-auto',\n 'ds:focus-visible:after:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:after:outline-solid',\n 'ds:focus-visible:after:outline-[color:var(--ring)]',\n 'ds:focus-visible:after:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:after:outline-[CanvasText]',\n].join(' ');\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nexport function isSafeTaskUrl(url: string): boolean {\n return /^(https?:\\/\\/(?!\\/)|\\/(?!\\/)|#)/.test(url);\n}\n\nfunction StatusIcon({\n status,\n priority,\n}: {\n status?: TaskStatus;\n priority?: TaskPriority;\n}): ReactNode {\n const tone =\n priority === 'high'\n ? 'ds:text-[color:var(--destructive)]'\n : 'ds:text-[color:var(--muted-foreground)]';\n if (status === 'done') {\n return (\n <SquareCheckBig aria-hidden=\"true\" className={`ds:size-4 ${tone}`} />\n );\n }\n if (priority === 'high') {\n return <CircleAlert aria-hidden=\"true\" className={`ds:size-4 ${tone}`} />;\n }\n return <Square aria-hidden=\"true\" className={`ds:size-4 ${tone}`} />;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const TaskCard = forwardRef<HTMLDivElement, TaskCardProps>(\n ({ item, size = 'sm', onActivate, actions, className, ...rest }, ref) => {\n const { t } = useTranslation();\n const interactive = !!onActivate;\n const hasSafeUrl = !!item.url && isSafeTaskUrl(item.url);\n const ariaLabel = t('taskCard.itemLabel', {\n title: item.title,\n due: item.dueLabel ?? '',\n defaultValue: '{{title}}{{due, prepend, \" · \"}}',\n });\n\n // Static key lookups so the i18n coverage gate sees each literal key.\n const linkTypeLabels: Record<TaskLinkType, string> = {\n patient: t('taskCard.link.patient'),\n company: t('taskCard.link.company'),\n operator: t('taskCard.link.operator'),\n };\n const LinkIcon = item.linkType ? LINK_ICON[item.linkType] : null;\n // The meta row carries icon-led chips: a typed linked entity + an assignee.\n const showLinkChip = !!item.linkType && !!item.linkedLabel;\n const hasMetaRow = showLinkChip || !!item.assigneeLabel;\n\n const titleNode = (\n <span className=\"ds:flex-1 ds:min-w-0 ds:truncate type-body-sm ds:text-[color:var(--foreground)]\">\n {item.title}\n </span>\n );\n\n let activator: ReactNode;\n if (interactive && hasSafeUrl) {\n activator = (\n <a\n href={item.url}\n aria-label={ariaLabel}\n className={stretchedLinkClass + ' ds:contents'}\n onClick={(e) => {\n if (e.defaultPrevented || e.metaKey || e.ctrlKey || e.shiftKey)\n return;\n onActivate?.(item);\n }}\n >\n {titleNode}\n </a>\n );\n } else if (interactive) {\n activator = (\n <button\n type=\"button\"\n aria-label={ariaLabel}\n className={\n stretchedLinkClass +\n ' ds:contents ds:bg-transparent ds:border-0 ds:p-0 ds:text-start'\n }\n onClick={() => onActivate?.(item)}\n >\n {titleNode}\n </button>\n );\n } else {\n activator = titleNode;\n }\n\n return (\n <div\n ref={ref}\n role=\"listitem\"\n data-component=\"task-card\"\n data-component-id={item.id}\n data-status={item.status ?? 'open'}\n data-priority={item.priority ?? 'normal'}\n className={taskCardVariants({ size, interactive, className })}\n {...rest}\n >\n <span className=\"ds:mt-[var(--spacing-2xs)] ds:shrink-0\">\n <StatusIcon status={item.status} priority={item.priority} />\n </span>\n\n <div className=\"ds:flex-1 ds:min-w-0 ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n {activator}\n {item.description ? (\n <span className=\"type-body-sm ds:text-[color:var(--muted-foreground)] ds:truncate\">\n {item.description}\n </span>\n ) : null}\n {item.note ? (\n <span className=\"type-body-sm ds:text-[color:var(--muted-foreground)] ds:line-clamp-2\">\n {item.note}\n </span>\n ) : null}\n {hasMetaRow ? (\n // `type-meta` (not `type-eyebrow`): these chips carry proper-noun\n // values (patient / company / operator name, assignee) that must\n // not be uppercased. Icons are decorative; the type word is exposed\n // to AT via a VisuallyHidden prefix so each chip reads e.g.\n // \"Patient: Mario Rossi\" / \"Assignee: Dr. Alfa\".\n <div className=\"type-meta ds:flex ds:flex-wrap ds:items-center ds:gap-x-[var(--spacing-sm)] ds:gap-y-[var(--spacing-2xs)] ds:text-[color:var(--muted-foreground)]\">\n {item.linkType && item.linkedLabel && LinkIcon ? (\n <span className=\"ds:inline-flex ds:min-w-0 ds:items-center ds:gap-[var(--spacing-2xs)]\">\n <LinkIcon\n aria-hidden=\"true\"\n className=\"ds:size-3 ds:shrink-0\"\n />\n <VisuallyHidden>{`${linkTypeLabels[item.linkType]}: `}</VisuallyHidden>\n <span className=\"ds:truncate\">{item.linkedLabel}</span>\n </span>\n ) : null}\n {item.assigneeLabel ? (\n <span className=\"ds:inline-flex ds:min-w-0 ds:items-center ds:gap-[var(--spacing-2xs)]\">\n <User aria-hidden=\"true\" className=\"ds:size-3 ds:shrink-0\" />\n <VisuallyHidden>{`${t('taskCard.assignee')}: `}</VisuallyHidden>\n <span className=\"ds:truncate\">{item.assigneeLabel}</span>\n </span>\n ) : null}\n </div>\n ) : null}\n {item.linkedLabel && !item.linkType ? (\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)] ds:truncate\">\n {item.linkedLabel}\n </span>\n ) : null}\n {item.dueLabel ? (\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)]\">\n {item.dueLabel}\n </span>\n ) : null}\n </div>\n\n {actions ? (\n // Above the stretched-link overlay so the buttons stay clickable.\n <span className=\"ds:relative ds:z-[1] ds:flex ds:items-center ds:gap-[var(--spacing-2xs)] ds:shrink-0\">\n {actions}\n </span>\n ) : null}\n\n {interactive ? (\n <ChevronRight\n aria-hidden=\"true\"\n className=\"ds:mt-[var(--spacing-2xs)] ds:size-4 ds:shrink-0 ds:text-[color:var(--muted-foreground)] ds:opacity-0 ds:transition-opacity ds:motion-reduce:transition-none ds:group-hover:opacity-100 ds:group-focus-within:opacity-100 ds:rtl:rotate-180\"\n />\n ) : null}\n </div>\n );\n },\n);\n\nTaskCard.displayName = 'TaskCard';\n"],"names":["__iconNode","Briefcase","createLucideIcon","Building2","LINK_ICON","User","taskCardVariants","cva","stretchedLinkClass","isSafeTaskUrl","url","StatusIcon","status","priority","tone","SquareCheckBig","CircleAlert","Square","TaskCard","forwardRef","item","size","onActivate","actions","className","rest","ref","t","useTranslation","interactive","hasSafeUrl","ariaLabel","linkTypeLabels","LinkIcon","hasMetaRow","titleNode","jsx","activator","e","jsxs","VisuallyHidden","ChevronRight"],"mappings":"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","x_google_ignoreList":[0,1]}