@alfadocs/ui-kit 1.33.0 → 1.35.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 (126) hide show
  1. package/dist/_chunks/appointment-card-Bh_CIlc6.js +431 -0
  2. package/dist/_chunks/appointment-timeline-De-Wqdkw.js +449 -0
  3. package/dist/_chunks/{appointment-tray-DCk8gHod.js → appointment-tray-4I9wTAi4.js} +2 -2
  4. package/dist/_chunks/{calendar-workspace-BX-zDyVR.js → calendar-workspace-UywR5gUl.js} +7 -7
  5. package/dist/_chunks/{care-plan-card-CZW476Kg.js → care-plan-card-DHVhBcvs.js} +3 -3
  6. package/dist/_chunks/{care-plan-entry-card-BMUYagEw.js → care-plan-entry-card-Dx6IdTcR.js} +2 -2
  7. package/dist/_chunks/{care-plan-header-B5CBE0zu.js → care-plan-header-UTX5ZD74.js} +2 -2
  8. package/dist/_chunks/{clinical-note-card-D2WTV2CO.js → clinical-note-card-CTRzmqvv.js} +83 -81
  9. package/dist/_chunks/{contact-profile-card-BZqi8Hck.js → contact-profile-card-DSI9uumA.js} +17 -16
  10. package/dist/_chunks/{control-room-rail-iO_BCaq1.js → control-room-rail-5MbhjsxN.js} +2 -2
  11. package/dist/_chunks/{entity-card-DmrgYSEX.js → entity-card-9_62gY7l.js} +4 -4
  12. package/dist/_chunks/format-price-BkMEbeW3.js +47 -0
  13. package/dist/_chunks/{format-price-DNqXPa_q.js → languages-CZqBaPwI.js} +8 -38
  14. package/dist/_chunks/money.agent-Dw55UxUA.js +116 -0
  15. package/dist/_chunks/notes-panel-BjLt-kiP.js +469 -0
  16. package/dist/_chunks/{operator-hero-D7-iiFQ9.js → operator-hero-aG_qyn6g.js} +2 -2
  17. package/dist/_chunks/{payment-request-card-lmKLwsDs.js → payment-request-card-DvEsWEkC.js} +2 -2
  18. package/dist/_chunks/{practice-results-DjEzPgAK.js → practice-results-kayDEorM.js} +15 -14
  19. package/dist/_chunks/{rich-text-editor-CQ7yZdG3.js → rich-text-editor-CCI-Y3DN.js} +3 -5
  20. package/dist/_chunks/{task-card-BUgK6yZT.js → task-card-BalrLkSz.js} +41 -40
  21. package/dist/_chunks/{task-tray-CYG6rj2s.js → task-tray-COo-RlDv.js} +2 -2
  22. package/dist/_chunks/tasks-panel-DLKpSNoE.js +844 -0
  23. package/dist/_chunks/tool-rail-ONaV-Nzz.js +588 -0
  24. package/dist/_chunks/use-check-animation--I3cS00X.js +28 -0
  25. package/dist/_chunks/use-list-reflow-Cw43nxw5.js +100 -0
  26. package/dist/agent-catalog.json +15 -1
  27. package/dist/components/_shared/format-price.d.ts +15 -0
  28. package/dist/components/appointment-card/appointment-card.d.ts +36 -1
  29. package/dist/components/appointment-card/index.js +2 -2
  30. package/dist/components/appointment-timeline/appointment-timeline.d.ts +6 -0
  31. package/dist/components/appointment-timeline/index.js +1 -1
  32. package/dist/components/care-plan-card/index.js +1 -1
  33. package/dist/components/care-plan-entry-card/index.js +1 -1
  34. package/dist/components/care-plan-header/index.js +1 -1
  35. package/dist/components/clinical-note-card/clinical-note-card.d.ts +8 -1
  36. package/dist/components/clinical-note-card/index.js +1 -1
  37. package/dist/components/command-palette/command-palette.d.ts +7 -7
  38. package/dist/components/contact-profile-card/index.js +1 -1
  39. package/dist/components/control-room-rail/index.js +1 -1
  40. package/dist/components/index.d.ts +1 -0
  41. package/dist/components/money/index.d.ts +4 -0
  42. package/dist/components/money/index.js +6 -0
  43. package/dist/components/money/money.agent.d.ts +3 -0
  44. package/dist/components/money/money.d.ts +38 -0
  45. package/dist/components/notes-panel/index.js +1 -1
  46. package/dist/components/notes-panel/notes-panel.d.ts +16 -1
  47. package/dist/components/operator-hero/index.js +1 -1
  48. package/dist/components/payment-card/index.js +1 -1
  49. package/dist/components/practice-results/index.js +1 -1
  50. package/dist/components/rich-text-editor/index.js +1 -1
  51. package/dist/components/rich-text-editor/rich-text-editor.d.ts +1 -1
  52. package/dist/components/task-card/index.js +1 -1
  53. package/dist/components/task-card/task-card.d.ts +11 -3
  54. package/dist/components/task-tray/index.js +1 -1
  55. package/dist/components/tasks-panel/index.js +1 -1
  56. package/dist/components/tasks-panel/tasks-panel.d.ts +1 -1
  57. package/dist/components/tool-rail/index.js +1 -1
  58. package/dist/hooks/index.d.ts +3 -0
  59. package/dist/hooks/index.js +43 -37
  60. package/dist/hooks/use-check-animation.d.ts +53 -0
  61. package/dist/hooks/use-exit-transition.d.ts +48 -0
  62. package/dist/hooks/use-list-reflow.d.ts +47 -0
  63. package/dist/host-compat.css +8 -2
  64. package/dist/i18n/locales/ar.d.ts +10 -0
  65. package/dist/i18n/locales/ar.js +12 -2
  66. package/dist/i18n/locales/de.d.ts +10 -0
  67. package/dist/i18n/locales/de.js +12 -2
  68. package/dist/i18n/locales/el.d.ts +10 -0
  69. package/dist/i18n/locales/el.js +12 -2
  70. package/dist/i18n/locales/en.d.ts +10 -0
  71. package/dist/i18n/locales/en.js +12 -2
  72. package/dist/i18n/locales/es.d.ts +10 -0
  73. package/dist/i18n/locales/es.js +12 -2
  74. package/dist/i18n/locales/fr.d.ts +10 -0
  75. package/dist/i18n/locales/fr.js +12 -2
  76. package/dist/i18n/locales/hi.d.ts +10 -0
  77. package/dist/i18n/locales/hi.js +12 -2
  78. package/dist/i18n/locales/it.d.ts +13 -3
  79. package/dist/i18n/locales/it.js +14 -4
  80. package/dist/i18n/locales/ja.d.ts +10 -0
  81. package/dist/i18n/locales/ja.js +12 -2
  82. package/dist/i18n/locales/nl.d.ts +10 -0
  83. package/dist/i18n/locales/nl.js +12 -2
  84. package/dist/i18n/locales/pl.d.ts +10 -0
  85. package/dist/i18n/locales/pl.js +12 -2
  86. package/dist/i18n/locales/pt.d.ts +10 -0
  87. package/dist/i18n/locales/pt.js +12 -2
  88. package/dist/i18n/locales/ro.d.ts +10 -0
  89. package/dist/i18n/locales/ro.js +12 -2
  90. package/dist/i18n/locales/ru.d.ts +10 -0
  91. package/dist/i18n/locales/ru.js +12 -2
  92. package/dist/i18n/locales/sq.d.ts +10 -0
  93. package/dist/i18n/locales/sq.js +12 -2
  94. package/dist/i18n/locales/sv.d.ts +10 -0
  95. package/dist/i18n/locales/sv.js +12 -2
  96. package/dist/i18n/locales/tr.d.ts +10 -0
  97. package/dist/i18n/locales/tr.js +12 -2
  98. package/dist/i18n/locales/zh.d.ts +10 -0
  99. package/dist/i18n/locales/zh.js +12 -2
  100. package/dist/index.js +919 -916
  101. package/dist/locales/ar.json +12 -2
  102. package/dist/locales/de.json +12 -2
  103. package/dist/locales/el.json +12 -2
  104. package/dist/locales/en.json +12 -2
  105. package/dist/locales/es.json +12 -2
  106. package/dist/locales/fr.json +12 -2
  107. package/dist/locales/hi.json +12 -2
  108. package/dist/locales/it.json +14 -4
  109. package/dist/locales/ja.json +12 -2
  110. package/dist/locales/nl.json +12 -2
  111. package/dist/locales/pl.json +12 -2
  112. package/dist/locales/pt.json +12 -2
  113. package/dist/locales/ro.json +12 -2
  114. package/dist/locales/ru.json +12 -2
  115. package/dist/locales/sq.json +12 -2
  116. package/dist/locales/sv.json +12 -2
  117. package/dist/locales/tr.json +12 -2
  118. package/dist/locales/zh.json +12 -2
  119. package/dist/patterns/calendar/index.js +1 -1
  120. package/dist/tokens.css +2 -1
  121. package/package.json +5 -1
  122. package/dist/_chunks/appointment-card-D-oj_ugh.js +0 -296
  123. package/dist/_chunks/appointment-timeline-CymGHyIP.js +0 -403
  124. package/dist/_chunks/notes-panel-C4G-mhZ9.js +0 -380
  125. package/dist/_chunks/tasks-panel-DQuaVvl5.js +0 -757
  126. package/dist/_chunks/tool-rail-8Scslq3X.js +0 -524
@@ -0,0 +1,116 @@
1
+ import { jsxs as V, jsx as p } from "react/jsx-runtime";
2
+ import { forwardRef as z, useMemo as N } from "react";
3
+ import { c as Z } from "./index-D2ZczOXr.js";
4
+ import { useTranslation as $ } from "react-i18next";
5
+ import { V as H } from "./visually-hidden-BHxEUGyT.js";
6
+ import { f as O, a as R } from "./format-price-BkMEbeW3.js";
7
+ const T = Z(
8
+ [
9
+ "ds:inline-flex ds:items-baseline ds:whitespace-nowrap",
10
+ // Lining, fixed-width figures: without these a column of amounts
11
+ // wanders because glyph widths differ between digits.
12
+ "ds:tabular-nums"
13
+ ].join(" "),
14
+ {
15
+ variants: {
16
+ size: {
17
+ sm: "type-body-sm",
18
+ md: "type-body",
19
+ lg: "type-title-item"
20
+ },
21
+ tone: {
22
+ default: "ds:text-[color:var(--foreground)]",
23
+ muted: "ds:text-[color:var(--muted-foreground)]",
24
+ positive: "ds:text-[color:var(--success-foreground)]",
25
+ negative: "ds:text-[color:var(--destructive)]"
26
+ },
27
+ strikethrough: {
28
+ true: "ds:line-through ds:decoration-from-font",
29
+ false: ""
30
+ }
31
+ },
32
+ defaultVariants: { size: "md", tone: "default", strikethrough: !1 }
33
+ }
34
+ ), U = z(
35
+ ({
36
+ value: o,
37
+ currency: s = "EUR",
38
+ locale: y,
39
+ size: v,
40
+ tone: l = "default",
41
+ decimals: n = "full",
42
+ signDisplay: m = "auto",
43
+ strikethrough: x,
44
+ className: g,
45
+ ...h
46
+ }, k) => {
47
+ const { i18n: M } = $(), r = y ?? M.language, { nodes: b, full: j } = N(() => {
48
+ const e = O(
49
+ o,
50
+ s,
51
+ r,
52
+ m === "always" ? { signDisplay: "exceptZero" } : {}
53
+ ), u = R(o, s, r);
54
+ if (!e)
55
+ return { nodes: [{ text: u, muted: !1 }], full: u };
56
+ const i = e.map((t) => t.value).join(""), P = e.filter((t) => t.type === "fraction").every((t) => /^0+$/.test(t.value)), f = (t) => t === "decimal" || t === "fraction";
57
+ if (n === "hideWhenZero" && P) {
58
+ const c = e.filter((d) => !f(d.type)).map((d) => d.value).join("").trim();
59
+ return { nodes: [{ text: c, muted: !1 }], full: c };
60
+ }
61
+ return n === "muted" ? {
62
+ nodes: e.map((t) => ({
63
+ text: t.value,
64
+ muted: f(t.type)
65
+ })),
66
+ full: i
67
+ } : { nodes: [{ text: i, muted: !1 }], full: i };
68
+ }, [o, s, r, n, m]), w = l === "auto" ? o < 0 ? "negative" : "default" : l;
69
+ return /* @__PURE__ */ V(
70
+ "span",
71
+ {
72
+ ref: k,
73
+ "data-component": "money",
74
+ "data-currency": s.toUpperCase(),
75
+ className: T({
76
+ size: v,
77
+ tone: w,
78
+ strikethrough: x,
79
+ className: g
80
+ }),
81
+ ...h,
82
+ children: [
83
+ b.map((a, e) => /* @__PURE__ */ p(
84
+ "span",
85
+ {
86
+ "aria-hidden": "true",
87
+ className: a.muted ? "ds:opacity-70 ds:[font-size:0.85em]" : void 0,
88
+ children: a.text
89
+ },
90
+ `${e}-${a.text}`
91
+ )),
92
+ /* @__PURE__ */ p(H, { children: j })
93
+ ]
94
+ }
95
+ );
96
+ }
97
+ );
98
+ U.displayName = "Money";
99
+ const W = {
100
+ id: "money",
101
+ capabilities: [],
102
+ state: {},
103
+ actions: {},
104
+ domHooks: {
105
+ root: {
106
+ attr: "data-component",
107
+ value: "money",
108
+ description: "Marks the element as a kit Money amount."
109
+ }
110
+ }
111
+ };
112
+ export {
113
+ U as M,
114
+ W as m
115
+ };
116
+ //# sourceMappingURL=money.agent-Dw55UxUA.js.map
@@ -0,0 +1,469 @@
1
+ import { jsxs as l, jsx as t, Fragment as Ie } from "react/jsx-runtime";
2
+ import { forwardRef as Ee, useRef as c, useState as P, useId as ze, useCallback as O, useEffect as Se, useImperativeHandle as He, useMemo as Le } from "react";
3
+ import { c as _e } from "./index-D2ZczOXr.js";
4
+ import { useTranslation as Be } from "react-i18next";
5
+ import { u as qe } from "./registry-DvAUVLHh.js";
6
+ import { C as Ke } from "./clinical-note-card-CTRzmqvv.js";
7
+ import { R as Me } from "./rich-text-editor-CCI-Y3DN.js";
8
+ import { T as We } from "./text-area-Bt3p7Pt0.js";
9
+ import { A as C } from "./alert-CiJT540z.js";
10
+ import { B as A } from "./button-nJaPh_HC.js";
11
+ import { I as Fe } from "./icon-button-DA2CAGHZ.js";
12
+ import { C as Oe } from "./checkbox-BuZ1u__2.js";
13
+ import { S as De } from "./spinner-hbwuKwMf.js";
14
+ import { D as f } from "./dialog-BJiLqhx6.js";
15
+ import { P as Ge } from "./panel-header-D313n_9-.js";
16
+ import { a as Ye, u as Je, R as Qe } from "./use-list-reflow-Cw43nxw5.js";
17
+ import { u as Ue } from "./use-theme-CAuo6EYT.js";
18
+ import { N as Xe } from "./notebook-pen-CO7HoM-W.js";
19
+ import { T as Ze } from "./trash-2-uumy3fy1.js";
20
+ function ie(i, s) {
21
+ return typeof i == "object" && i !== null && "message" in i && typeof i.message == "string" && i.message.trim() ? i.message : s;
22
+ }
23
+ const $e = {
24
+ id: "notes-panel",
25
+ // 'submit' backs add_note (compose + commit a note). pin / flag are toggles
26
+ // with no dedicated capability in the closed vocabulary.
27
+ capabilities: ["submit"],
28
+ state: {
29
+ notes: {
30
+ type: "Array<{ id?: string; pinned: boolean; flagged: boolean; clinical: boolean }>",
31
+ descriptionKey: "ui.agent.notesPanel.state.notes",
32
+ description: "Timeline note ids + pinned / flagged / clinical flags. Never the note body or author (both PHI).",
33
+ read: (i) => i.getNotes()
34
+ },
35
+ canAddClinical: {
36
+ type: "boolean",
37
+ descriptionKey: "ui.agent.notesPanel.state.canAddClinical",
38
+ description: "Whether the current user may write clinical notes (the practice_add_clinical_note permission gate).",
39
+ read: (i) => i.canAddClinical()
40
+ },
41
+ currentNoteId: {
42
+ type: "string | null",
43
+ descriptionKey: "ui.agent.notesPanel.state.currentNoteId",
44
+ description: "Id of the note the host has addressed — the one marked, scrolled to and focused. Null when none is. An id only, never note content.",
45
+ read: (i) => i.getCurrentNoteId()
46
+ }
47
+ },
48
+ actions: {
49
+ add_note: {
50
+ // Writes a clinical/admin note body — patient-identifiable content. PHI.
51
+ safety: "phi",
52
+ argsType: "{ content: string; clinical: boolean }",
53
+ argsSchema: {
54
+ type: "object",
55
+ properties: {
56
+ content: {
57
+ type: "string",
58
+ description: "Note body. Rich HTML for the rich composer, else plain text."
59
+ },
60
+ clinical: {
61
+ type: "boolean",
62
+ description: "Whether the note is clinical. Requires the clinical-note permission; the submission is dropped when the gate is closed."
63
+ }
64
+ },
65
+ required: ["content", "clinical"]
66
+ },
67
+ openWorld: !0,
68
+ descriptionKey: "ui.agent.notesPanel.actions.addNote",
69
+ description: "Compose and commit a new note. A clinical note requires the clinical-note permission (read canAddClinical first).",
70
+ examples: [
71
+ {
72
+ args: { content: "Patient reported improvement.", clinical: !0 },
73
+ note: "Add a clinical note."
74
+ }
75
+ ],
76
+ invoke: (i, s) => i.addNote(s)
77
+ },
78
+ toggle_pin: {
79
+ // Re-orders the timeline (pinned notes lead) — reversible view write.
80
+ safety: "write",
81
+ argsType: "{ id: string }",
82
+ argsSchema: {
83
+ type: "object",
84
+ properties: { id: { type: "string" } },
85
+ required: ["id"]
86
+ },
87
+ idempotent: !1,
88
+ descriptionKey: "ui.agent.notesPanel.actions.togglePin",
89
+ description: "Toggle the pinned state of the note with the given id. Refused for a deleted note or one whose actions.pin is false.",
90
+ invoke: (i, s) => {
91
+ i.togglePin(s.id);
92
+ }
93
+ },
94
+ toggle_flag: {
95
+ safety: "write",
96
+ argsType: "{ id: string }",
97
+ argsSchema: {
98
+ type: "object",
99
+ properties: { id: { type: "string" } },
100
+ required: ["id"]
101
+ },
102
+ idempotent: !1,
103
+ descriptionKey: "ui.agent.notesPanel.actions.toggleFlag",
104
+ description: "Toggle the flagged state of the note with the given id.",
105
+ invoke: (i, s) => {
106
+ i.toggleFlag(s.id);
107
+ }
108
+ }
109
+ },
110
+ domHooks: {
111
+ root: {
112
+ attr: "data-component",
113
+ value: "notes-panel",
114
+ description: "Marks the NotesPanel region."
115
+ },
116
+ instanceId: {
117
+ attr: "data-component-id",
118
+ sourceProp: "id",
119
+ description: "Sourced from the id prop. Required to address a specific notes panel from the agent."
120
+ }
121
+ }
122
+ }, en = _e(
123
+ "ds:flex ds:flex-col ds:rounded-[var(--radius-md)] ds:border-s-2 ds:ps-[var(--spacing-sm)]",
124
+ {
125
+ variants: {
126
+ current: {
127
+ true: "ds:border-[color:var(--info)] ds:bg-[color:var(--info)]/10 ds:focus:outline-[length:var(--focus-ring-width)] ds:focus:outline-solid ds:focus:outline-[color:var(--ring)] ds:focus:outline-offset-[length:var(--focus-ring-offset)]",
128
+ false: "ds:border-transparent"
129
+ }
130
+ },
131
+ defaultVariants: { current: !1 }
132
+ }
133
+ ), nn = "ds:opacity-0", tn = [
134
+ "ds:transition-opacity ds:duration-[var(--animation-duration)]",
135
+ "ds:ease-[var(--ease-out)] ds:motion-reduce:transition-none"
136
+ ].join(" ");
137
+ function re(i) {
138
+ return i ? /<img\b/i.test(i) ? !0 : i.replace(/<[^>]*>/g, "").replace(/&nbsp;/gi, " ").trim().length > 0 : !1;
139
+ }
140
+ const Rn = Ee(
141
+ function({
142
+ id: s,
143
+ notes: I,
144
+ onAddNote: m,
145
+ status: E = "ready",
146
+ onRetry: D,
147
+ currentNoteId: g,
148
+ currentNoteKey: ae,
149
+ composer: x = "rich",
150
+ editorToolbar: se = "standard",
151
+ redactor: oe,
152
+ imageUploadUrl: le,
153
+ showClinicalToggle: G = !0,
154
+ canAddClinicalNote: R = !0,
155
+ clinicalGatedReason: de,
156
+ defaultClinical: z = !1,
157
+ onRequestAiDraft: ce,
158
+ aiDraftFormat: ue,
159
+ aiPrivacyNotice: fe,
160
+ onDictate: pe,
161
+ onProofread: me,
162
+ onAutoFormat: ge,
163
+ onTogglePin: w,
164
+ onToggleFlag: k,
165
+ noteActions: Y,
166
+ onDeleteNote: u,
167
+ confirmDelete: S = !0,
168
+ title: he,
169
+ composerPlaceholder: ve,
170
+ addNoteLabel: ye,
171
+ emptyState: be,
172
+ className: Pe,
173
+ "aria-label": H,
174
+ ...Ce
175
+ }, xe) {
176
+ const { t: r } = Be(), L = c(null), [h, _] = P(""), [B, J] = P(z), [v, Q] = P(!1), [U, q] = P(null), Re = he ?? r("notesPanel.title", { defaultValue: "Notes" }), X = ze(), Z = ve ?? r("notesPanel.placeholder", { defaultValue: "Add a note…" }), $ = r("notesPanel.composerLabel", {
177
+ defaultValue: "New note"
178
+ }), we = x === "rich" ? re(h) : h.trim().length > 0, ke = O(() => {
179
+ var o;
180
+ if (!m || v) return;
181
+ const e = x === "rich", n = e ? ((o = L.current) == null ? void 0 : o.getHTML()) ?? h : h.trim();
182
+ if (e ? !re(n) : !n) return;
183
+ const p = () => {
184
+ var d;
185
+ e && ((d = L.current) == null || d.clear()), _(""), J(z);
186
+ };
187
+ q(null);
188
+ let a;
189
+ try {
190
+ a = m({ content: n, clinical: B });
191
+ } catch (d) {
192
+ q(ie(d, r("notesPanel.addFailed")));
193
+ return;
194
+ }
195
+ if (!a || typeof a.then != "function") return p();
196
+ Q(!0), Promise.resolve(a).then(
197
+ p,
198
+ (d) => q(ie(d, r("notesPanel.addFailed")))
199
+ ).finally(() => Q(!1));
200
+ }, [x, h, B, z, m, v, r]), K = [...I].sort(
201
+ (e, n) => Number(n.pinned ?? !1) - Number(e.pinned ?? !1)
202
+ ), { resolvedTheme: Ne } = Ue(), ee = Ne.endsWith("-accessible") || void 0, { containerRef: Ve } = Ye({
203
+ key: K.map((e) => e.id).join(),
204
+ reduceMotion: ee
205
+ }), y = Je({ reduceMotion: ee }), [N, V] = P(null), Te = O(
206
+ (e) => {
207
+ u && (S ? V(e) : y.leave(e, () => u(e)));
208
+ },
209
+ [S, y, u]
210
+ ), je = O(() => {
211
+ if (!N || !u) return;
212
+ const e = N;
213
+ V(null), y.leave(e, () => u(e));
214
+ }, [N, u, y]), M = c(null);
215
+ Se(() => {
216
+ var e, n;
217
+ g && ((e = M.current) == null || e.scrollIntoView({ block: "center" }), (n = M.current) == null || n.focus());
218
+ }, [g, ae]);
219
+ const W = c(I);
220
+ W.current = I;
221
+ const b = c(m);
222
+ b.current = m;
223
+ const T = c(w);
224
+ T.current = w;
225
+ const j = c(k);
226
+ j.current = k;
227
+ const F = c(R);
228
+ F.current = R;
229
+ const ne = c(g);
230
+ ne.current = g;
231
+ const te = c(null);
232
+ He(xe, () => te.current, []);
233
+ const Ae = Le(
234
+ () => ({
235
+ // Ids + flags only — never the note body or author (both PHI).
236
+ getNotes: () => W.current.map((e) => ({
237
+ id: e.id,
238
+ pinned: !!e.pinned,
239
+ flagged: !!e.flagged,
240
+ clinical: !!e.clinical
241
+ })),
242
+ canAddNote: () => !!b.current,
243
+ canAddClinical: () => F.current,
244
+ getCurrentNoteId: () => ne.current ?? null,
245
+ addNote: (e) => {
246
+ var n;
247
+ if (!(e.clinical && !F.current))
248
+ return (n = b.current) == null ? void 0 : n.call(b, e);
249
+ },
250
+ togglePin: (e) => {
251
+ var p, a;
252
+ const n = W.current.find((o) => o.id === e);
253
+ n && (n.deleted || ((p = n.actions) == null ? void 0 : p.pin) === !1) || (a = T.current) == null || a.call(T, e);
254
+ },
255
+ toggleFlag: (e) => {
256
+ var n;
257
+ return (n = j.current) == null ? void 0 : n.call(j, e);
258
+ }
259
+ }),
260
+ []
261
+ );
262
+ return qe($e, Ae, s), /* @__PURE__ */ l(
263
+ "section",
264
+ {
265
+ ref: te,
266
+ "data-component": "notes-panel",
267
+ "data-component-id": s,
268
+ "aria-labelledby": H ? void 0 : X,
269
+ "aria-label": H,
270
+ className: ["ds:flex ds:flex-col", Pe].filter(Boolean).join(" "),
271
+ ...Ce,
272
+ children: [
273
+ /* @__PURE__ */ t(
274
+ Ge,
275
+ {
276
+ title: Re,
277
+ icon: /* @__PURE__ */ t(Xe, { "aria-hidden": "true" }),
278
+ headingId: H ? void 0 : X,
279
+ sticky: !0,
280
+ divider: !0
281
+ }
282
+ ),
283
+ /* @__PURE__ */ l("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)] ds:p-[var(--spacing-md)]", children: [
284
+ m ? /* @__PURE__ */ l("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", children: [
285
+ x === "rich" ? /* @__PURE__ */ t(
286
+ Me,
287
+ {
288
+ ref: L,
289
+ ariaLabel: $,
290
+ placeholder: Z,
291
+ toolbar: se,
292
+ minHeight: "fill",
293
+ redactor: oe,
294
+ imageUploadUrl: le,
295
+ readOnly: v,
296
+ onChange: ({ html: e }) => _(e),
297
+ onRequestAiDraft: ce,
298
+ aiDraftFormat: ue,
299
+ aiPrivacyNotice: fe,
300
+ onDictate: pe,
301
+ onProofread: me,
302
+ onAutoFormat: ge
303
+ }
304
+ ) : /* @__PURE__ */ t(
305
+ We,
306
+ {
307
+ value: h,
308
+ readOnly: v,
309
+ onChange: (e) => _(e.target.value),
310
+ placeholder: Z,
311
+ autoResize: !0,
312
+ minRows: 2,
313
+ maxRows: 6,
314
+ "aria-label": $
315
+ }
316
+ ),
317
+ /* @__PURE__ */ l(
318
+ "div",
319
+ {
320
+ className: [
321
+ "ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]",
322
+ G ? "ds:justify-between" : "ds:justify-end"
323
+ ].join(" "),
324
+ children: [
325
+ G ? /* @__PURE__ */ t(
326
+ Oe,
327
+ {
328
+ size: "sm",
329
+ label: r("notesPanel.clinicalToggle", {
330
+ defaultValue: "Clinical note"
331
+ }),
332
+ checked: B,
333
+ onCheckedChange: (e) => J(e === !0),
334
+ disabled: v || !R,
335
+ disabledReason: R ? void 0 : de ?? r("notesPanel.clinicalGated", {
336
+ defaultValue: "You do not have permission to write clinical notes."
337
+ })
338
+ }
339
+ ) : null,
340
+ /* @__PURE__ */ t(
341
+ A,
342
+ {
343
+ type: "button",
344
+ size: "sm",
345
+ onClick: ke,
346
+ disabled: !we,
347
+ loading: v,
348
+ children: ye ?? r("notesPanel.add", { defaultValue: "Add note" })
349
+ }
350
+ )
351
+ ]
352
+ }
353
+ ),
354
+ U ? /* @__PURE__ */ t(C, { variant: "error", children: /* @__PURE__ */ t(C.Description, { children: U }) }) : null
355
+ ] }) : null,
356
+ E === "loading" ? /* @__PURE__ */ l("p", { className: "ds:m-0 ds:flex ds:items-center ds:gap-[var(--spacing-xs)] type-body-sm ds:text-[color:var(--muted-foreground)]", children: [
357
+ /* @__PURE__ */ t(De, { size: "sm", label: r("notesPanel.loading") }),
358
+ /* @__PURE__ */ t("span", { "aria-hidden": "true", children: r("notesPanel.loading") })
359
+ ] }) : E === "error" ? /* @__PURE__ */ l(C, { variant: "error", children: [
360
+ /* @__PURE__ */ t(C.Description, { children: r("notesPanel.loadError") }),
361
+ D ? /* @__PURE__ */ t(C.Action, { children: /* @__PURE__ */ t(A, { intent: "secondary", size: "sm", onClick: D, children: r("notesPanel.retry") }) }) : null
362
+ ] }) : null,
363
+ K.length > 0 ? /* @__PURE__ */ t(
364
+ "ul",
365
+ {
366
+ ref: Ve,
367
+ className: "ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-0",
368
+ children: K.map(({ actions: e, ...n }, p) => {
369
+ const a = g != null && n.id === g, o = n.id, d = o != null && y.isLeaving(o);
370
+ return /* @__PURE__ */ l(
371
+ "li",
372
+ {
373
+ ref: a ? M : void 0,
374
+ tabIndex: a ? -1 : void 0,
375
+ "aria-current": a ? "true" : void 0,
376
+ "data-reflow-id": o,
377
+ "data-leaving": d ? "" : void 0,
378
+ className: [
379
+ en({ current: a }),
380
+ tn,
381
+ Qe,
382
+ d ? nn : ""
383
+ ].filter(Boolean).join(" "),
384
+ children: [
385
+ a ? /* @__PURE__ */ t("span", { className: "ds:sr-only", children: r("notesPanel.current", {
386
+ defaultValue: "Current note"
387
+ }) }) : null,
388
+ /* @__PURE__ */ t(
389
+ Ke,
390
+ {
391
+ surface: "elevated",
392
+ truncate: !a,
393
+ headerActions: /* @__PURE__ */ l(Ie, { children: [
394
+ Y ? Y({ ...n, actions: e }) : null,
395
+ u && o && !n.deleted ? /* @__PURE__ */ t(
396
+ Fe,
397
+ {
398
+ icon: /* @__PURE__ */ t(Ze, {}),
399
+ intent: "ghost",
400
+ size: "sm",
401
+ "aria-label": r("notesPanel.delete", {
402
+ defaultValue: "Delete note"
403
+ }),
404
+ onClick: () => Te(o)
405
+ }
406
+ ) : null
407
+ ] }),
408
+ ...n,
409
+ onTogglePin: w && n.id && (e == null ? void 0 : e.pin) !== !1 && !n.deleted ? () => w(n.id) : void 0,
410
+ onToggleFlag: k && n.id ? () => k(n.id) : void 0
411
+ }
412
+ )
413
+ ]
414
+ },
415
+ n.id ?? p
416
+ );
417
+ })
418
+ }
419
+ ) : E !== "ready" ? null : be ?? /* @__PURE__ */ t("p", { className: "ds:m-0 type-body-sm ds:text-[color:var(--muted-foreground)]", children: r("notesPanel.empty", { defaultValue: "No notes yet." }) })
420
+ ] }),
421
+ u && S ? /* @__PURE__ */ t(
422
+ f,
423
+ {
424
+ open: N !== null,
425
+ onOpenChange: (e) => !e && V(null),
426
+ children: /* @__PURE__ */ l(f.Content, { variant: "alert", size: "sm", children: [
427
+ /* @__PURE__ */ t(f.Header, { children: /* @__PURE__ */ t(f.Title, { children: r("notesPanel.deleteConfirmTitle", {
428
+ defaultValue: "Delete this note?"
429
+ }) }) }),
430
+ /* @__PURE__ */ t(f.Body, { children: /* @__PURE__ */ t(f.Description, { children: r("notesPanel.deleteConfirmBody", {
431
+ defaultValue: "The note will be removed from the record."
432
+ }) }) }),
433
+ /* @__PURE__ */ l(f.Footer, { children: [
434
+ /* @__PURE__ */ t(f.Close, { asChild: !0, children: /* @__PURE__ */ t(
435
+ A,
436
+ {
437
+ intent: "secondary",
438
+ size: "sm",
439
+ onClick: () => V(null),
440
+ children: r("notesPanel.deleteConfirmCancel", {
441
+ defaultValue: "Cancel"
442
+ })
443
+ }
444
+ ) }),
445
+ /* @__PURE__ */ t(
446
+ A,
447
+ {
448
+ intent: "destructive",
449
+ size: "sm",
450
+ onClick: je,
451
+ children: r("notesPanel.deleteConfirmAction", {
452
+ defaultValue: "Delete"
453
+ })
454
+ }
455
+ )
456
+ ] })
457
+ ] })
458
+ }
459
+ ) : null
460
+ ]
461
+ }
462
+ );
463
+ }
464
+ );
465
+ export {
466
+ Rn as N,
467
+ ie as g
468
+ };
469
+ //# sourceMappingURL=notes-panel-BjLt-kiP.js.map
@@ -8,7 +8,7 @@ import { C as T } from "./card-DPmk26CL.js";
8
8
  import { R as B } from "./rating-BYbUowdK.js";
9
9
  import { u as F } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
10
10
  import { u as K } from "./registry-DvAUVLHh.js";
11
- import { b as S } from "./entity-card-DmrgYSEX.js";
11
+ import { c as S } from "./entity-card-9_62gY7l.js";
12
12
  const V = {
13
13
  id: "operator-hero",
14
14
  // Purely observable hero region — no interactive affordances and no
@@ -199,4 +199,4 @@ export {
199
199
  M as O,
200
200
  V as o
201
201
  };
202
- //# sourceMappingURL=operator-hero-D7-iiFQ9.js.map
202
+ //# sourceMappingURL=operator-hero-aG_qyn6g.js.map
@@ -14,7 +14,7 @@ import { R as ne, C as $ } from "./receipt-euro-C6k4Gzhr.js";
14
14
  import { F as J } from "./file-text-5yv6r2ls.js";
15
15
  import { U as ie } from "./user-B12p7bVF.js";
16
16
  import { U as le } from "./user-cog-BTn98Arm.js";
17
- import { e as Q } from "./entity-card-DmrgYSEX.js";
17
+ import { e as Q } from "./entity-card-9_62gY7l.js";
18
18
  import { A as de } from "./arrow-up-right-C2v_MKsK.js";
19
19
  import { L as oe } from "./link-CPb_pZPr.js";
20
20
  import { C as se } from "./calendar-clock-hbObjfGY.js";
@@ -438,4 +438,4 @@ export {
438
438
  Ce as b,
439
439
  me as p
440
440
  };
441
- //# sourceMappingURL=payment-request-card-lmKLwsDs.js.map
441
+ //# sourceMappingURL=payment-request-card-DvEsWEkC.js.map