@alfadocs/ui-kit-debug 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 (217) hide show
  1. package/dist/_chunks/appointment-card-Bh_CIlc6.js +431 -0
  2. package/dist/_chunks/appointment-card-Bh_CIlc6.js.map +1 -0
  3. package/dist/_chunks/appointment-timeline-De-Wqdkw.js +449 -0
  4. package/dist/_chunks/appointment-timeline-De-Wqdkw.js.map +1 -0
  5. package/dist/_chunks/{appointment-tray-DCk8gHod.js → appointment-tray-4I9wTAi4.js} +2 -2
  6. package/dist/_chunks/{appointment-tray-DCk8gHod.js.map → appointment-tray-4I9wTAi4.js.map} +1 -1
  7. package/dist/_chunks/{calendar-workspace-BX-zDyVR.js → calendar-workspace-UywR5gUl.js} +7 -7
  8. package/dist/_chunks/{calendar-workspace-BX-zDyVR.js.map → calendar-workspace-UywR5gUl.js.map} +1 -1
  9. package/dist/_chunks/{care-plan-card-CZW476Kg.js → care-plan-card-DHVhBcvs.js} +3 -3
  10. package/dist/_chunks/{care-plan-card-CZW476Kg.js.map → care-plan-card-DHVhBcvs.js.map} +1 -1
  11. package/dist/_chunks/{care-plan-entry-card-BMUYagEw.js → care-plan-entry-card-Dx6IdTcR.js} +2 -2
  12. package/dist/_chunks/{care-plan-entry-card-BMUYagEw.js.map → care-plan-entry-card-Dx6IdTcR.js.map} +1 -1
  13. package/dist/_chunks/{care-plan-header-B5CBE0zu.js → care-plan-header-UTX5ZD74.js} +2 -2
  14. package/dist/_chunks/{care-plan-header-B5CBE0zu.js.map → care-plan-header-UTX5ZD74.js.map} +1 -1
  15. package/dist/_chunks/{clinical-note-card-D2WTV2CO.js → clinical-note-card-CTRzmqvv.js} +83 -81
  16. package/dist/_chunks/clinical-note-card-CTRzmqvv.js.map +1 -0
  17. package/dist/_chunks/{contact-profile-card-BZqi8Hck.js → contact-profile-card-DSI9uumA.js} +17 -16
  18. package/dist/_chunks/{contact-profile-card-BZqi8Hck.js.map → contact-profile-card-DSI9uumA.js.map} +1 -1
  19. package/dist/_chunks/{control-room-rail-iO_BCaq1.js → control-room-rail-5MbhjsxN.js} +2 -2
  20. package/dist/_chunks/{control-room-rail-iO_BCaq1.js.map → control-room-rail-5MbhjsxN.js.map} +1 -1
  21. package/dist/_chunks/{entity-card-DmrgYSEX.js → entity-card-9_62gY7l.js} +4 -4
  22. package/dist/_chunks/{entity-card-DmrgYSEX.js.map → entity-card-9_62gY7l.js.map} +1 -1
  23. package/dist/_chunks/format-price-BkMEbeW3.js +47 -0
  24. package/dist/_chunks/format-price-BkMEbeW3.js.map +1 -0
  25. package/dist/_chunks/{format-price-DNqXPa_q.js → languages-CZqBaPwI.js} +8 -38
  26. package/dist/_chunks/languages-CZqBaPwI.js.map +1 -0
  27. package/dist/_chunks/money.agent-Dw55UxUA.js +116 -0
  28. package/dist/_chunks/money.agent-Dw55UxUA.js.map +1 -0
  29. package/dist/_chunks/notes-panel-BjLt-kiP.js +469 -0
  30. package/dist/_chunks/notes-panel-BjLt-kiP.js.map +1 -0
  31. package/dist/_chunks/{operator-hero-D7-iiFQ9.js → operator-hero-aG_qyn6g.js} +2 -2
  32. package/dist/_chunks/{operator-hero-D7-iiFQ9.js.map → operator-hero-aG_qyn6g.js.map} +1 -1
  33. package/dist/_chunks/{payment-request-card-lmKLwsDs.js → payment-request-card-DvEsWEkC.js} +2 -2
  34. package/dist/_chunks/{payment-request-card-lmKLwsDs.js.map → payment-request-card-DvEsWEkC.js.map} +1 -1
  35. package/dist/_chunks/{practice-results-DjEzPgAK.js → practice-results-kayDEorM.js} +15 -14
  36. package/dist/_chunks/{practice-results-DjEzPgAK.js.map → practice-results-kayDEorM.js.map} +1 -1
  37. package/dist/_chunks/{rich-text-editor-CQ7yZdG3.js → rich-text-editor-CCI-Y3DN.js} +3 -5
  38. package/dist/_chunks/rich-text-editor-CCI-Y3DN.js.map +1 -0
  39. package/dist/_chunks/{task-card-BUgK6yZT.js → task-card-BalrLkSz.js} +41 -40
  40. package/dist/_chunks/task-card-BalrLkSz.js.map +1 -0
  41. package/dist/_chunks/{task-tray-CYG6rj2s.js → task-tray-COo-RlDv.js} +2 -2
  42. package/dist/_chunks/{task-tray-CYG6rj2s.js.map → task-tray-COo-RlDv.js.map} +1 -1
  43. package/dist/_chunks/tasks-panel-DLKpSNoE.js +844 -0
  44. package/dist/_chunks/tasks-panel-DLKpSNoE.js.map +1 -0
  45. package/dist/_chunks/tool-rail-ONaV-Nzz.js +588 -0
  46. package/dist/_chunks/tool-rail-ONaV-Nzz.js.map +1 -0
  47. package/dist/_chunks/use-check-animation--I3cS00X.js +28 -0
  48. package/dist/_chunks/use-check-animation--I3cS00X.js.map +1 -0
  49. package/dist/_chunks/use-list-reflow-Cw43nxw5.js +100 -0
  50. package/dist/_chunks/use-list-reflow-Cw43nxw5.js.map +1 -0
  51. package/dist/agent-catalog.json +15 -1
  52. package/dist/components/_shared/format-price.d.ts +15 -0
  53. package/dist/components/_shared/format-price.d.ts.map +1 -1
  54. package/dist/components/appointment-card/appointment-card.d.ts +36 -1
  55. package/dist/components/appointment-card/appointment-card.d.ts.map +1 -1
  56. package/dist/components/appointment-card/index.js +2 -2
  57. package/dist/components/appointment-timeline/appointment-timeline.d.ts +6 -0
  58. package/dist/components/appointment-timeline/appointment-timeline.d.ts.map +1 -1
  59. package/dist/components/appointment-timeline/index.js +1 -1
  60. package/dist/components/care-plan-card/index.js +1 -1
  61. package/dist/components/care-plan-entry-card/index.js +1 -1
  62. package/dist/components/care-plan-header/index.js +1 -1
  63. package/dist/components/clinical-note-card/clinical-note-card.d.ts +8 -1
  64. package/dist/components/clinical-note-card/clinical-note-card.d.ts.map +1 -1
  65. package/dist/components/clinical-note-card/index.js +1 -1
  66. package/dist/components/command-palette/command-palette.d.ts +7 -7
  67. package/dist/components/contact-profile-card/index.js +1 -1
  68. package/dist/components/control-room-rail/index.js +1 -1
  69. package/dist/components/index.d.ts +1 -0
  70. package/dist/components/index.d.ts.map +1 -1
  71. package/dist/components/money/index.d.ts +4 -0
  72. package/dist/components/money/index.d.ts.map +1 -0
  73. package/dist/components/money/index.js +6 -0
  74. package/dist/components/money/index.js.map +1 -0
  75. package/dist/components/money/money.agent.d.ts +3 -0
  76. package/dist/components/money/money.agent.d.ts.map +1 -0
  77. package/dist/components/money/money.d.ts +38 -0
  78. package/dist/components/money/money.d.ts.map +1 -0
  79. package/dist/components/notes-panel/index.js +1 -1
  80. package/dist/components/notes-panel/notes-panel.d.ts +16 -1
  81. package/dist/components/notes-panel/notes-panel.d.ts.map +1 -1
  82. package/dist/components/operator-hero/index.js +1 -1
  83. package/dist/components/payment-card/index.js +1 -1
  84. package/dist/components/practice-results/index.js +1 -1
  85. package/dist/components/rich-text-editor/help-me-write-overlay.d.ts.map +1 -1
  86. package/dist/components/rich-text-editor/index.js +1 -1
  87. package/dist/components/rich-text-editor/rich-text-editor.d.ts +1 -1
  88. package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
  89. package/dist/components/task-card/index.js +1 -1
  90. package/dist/components/task-card/task-card.d.ts +11 -3
  91. package/dist/components/task-card/task-card.d.ts.map +1 -1
  92. package/dist/components/task-tray/index.js +1 -1
  93. package/dist/components/tasks-panel/index.js +1 -1
  94. package/dist/components/tasks-panel/tasks-panel.d.ts +1 -1
  95. package/dist/components/tasks-panel/tasks-panel.d.ts.map +1 -1
  96. package/dist/components/tool-rail/index.js +1 -1
  97. package/dist/components/tool-rail/tool-rail.d.ts.map +1 -1
  98. package/dist/hooks/index.d.ts +3 -0
  99. package/dist/hooks/index.d.ts.map +1 -1
  100. package/dist/hooks/index.js +43 -37
  101. package/dist/hooks/index.js.map +1 -1
  102. package/dist/hooks/use-check-animation.d.ts +53 -0
  103. package/dist/hooks/use-check-animation.d.ts.map +1 -0
  104. package/dist/hooks/use-exit-transition.d.ts +48 -0
  105. package/dist/hooks/use-exit-transition.d.ts.map +1 -0
  106. package/dist/hooks/use-list-reflow.d.ts +47 -0
  107. package/dist/hooks/use-list-reflow.d.ts.map +1 -0
  108. package/dist/host-compat.css +8 -2
  109. package/dist/i18n/locales/ar.d.ts +10 -0
  110. package/dist/i18n/locales/ar.d.ts.map +1 -1
  111. package/dist/i18n/locales/ar.js +12 -2
  112. package/dist/i18n/locales/ar.js.map +1 -1
  113. package/dist/i18n/locales/de.d.ts +10 -0
  114. package/dist/i18n/locales/de.d.ts.map +1 -1
  115. package/dist/i18n/locales/de.js +12 -2
  116. package/dist/i18n/locales/de.js.map +1 -1
  117. package/dist/i18n/locales/el.d.ts +10 -0
  118. package/dist/i18n/locales/el.d.ts.map +1 -1
  119. package/dist/i18n/locales/el.js +12 -2
  120. package/dist/i18n/locales/el.js.map +1 -1
  121. package/dist/i18n/locales/en.d.ts +10 -0
  122. package/dist/i18n/locales/en.d.ts.map +1 -1
  123. package/dist/i18n/locales/en.js +12 -2
  124. package/dist/i18n/locales/en.js.map +1 -1
  125. package/dist/i18n/locales/es.d.ts +10 -0
  126. package/dist/i18n/locales/es.d.ts.map +1 -1
  127. package/dist/i18n/locales/es.js +12 -2
  128. package/dist/i18n/locales/es.js.map +1 -1
  129. package/dist/i18n/locales/fr.d.ts +10 -0
  130. package/dist/i18n/locales/fr.d.ts.map +1 -1
  131. package/dist/i18n/locales/fr.js +12 -2
  132. package/dist/i18n/locales/fr.js.map +1 -1
  133. package/dist/i18n/locales/hi.d.ts +10 -0
  134. package/dist/i18n/locales/hi.d.ts.map +1 -1
  135. package/dist/i18n/locales/hi.js +12 -2
  136. package/dist/i18n/locales/hi.js.map +1 -1
  137. package/dist/i18n/locales/it.d.ts +13 -3
  138. package/dist/i18n/locales/it.d.ts.map +1 -1
  139. package/dist/i18n/locales/it.js +14 -4
  140. package/dist/i18n/locales/it.js.map +1 -1
  141. package/dist/i18n/locales/ja.d.ts +10 -0
  142. package/dist/i18n/locales/ja.d.ts.map +1 -1
  143. package/dist/i18n/locales/ja.js +12 -2
  144. package/dist/i18n/locales/ja.js.map +1 -1
  145. package/dist/i18n/locales/nl.d.ts +10 -0
  146. package/dist/i18n/locales/nl.d.ts.map +1 -1
  147. package/dist/i18n/locales/nl.js +12 -2
  148. package/dist/i18n/locales/nl.js.map +1 -1
  149. package/dist/i18n/locales/pl.d.ts +10 -0
  150. package/dist/i18n/locales/pl.d.ts.map +1 -1
  151. package/dist/i18n/locales/pl.js +12 -2
  152. package/dist/i18n/locales/pl.js.map +1 -1
  153. package/dist/i18n/locales/pt.d.ts +10 -0
  154. package/dist/i18n/locales/pt.d.ts.map +1 -1
  155. package/dist/i18n/locales/pt.js +12 -2
  156. package/dist/i18n/locales/pt.js.map +1 -1
  157. package/dist/i18n/locales/ro.d.ts +10 -0
  158. package/dist/i18n/locales/ro.d.ts.map +1 -1
  159. package/dist/i18n/locales/ro.js +12 -2
  160. package/dist/i18n/locales/ro.js.map +1 -1
  161. package/dist/i18n/locales/ru.d.ts +10 -0
  162. package/dist/i18n/locales/ru.d.ts.map +1 -1
  163. package/dist/i18n/locales/ru.js +12 -2
  164. package/dist/i18n/locales/ru.js.map +1 -1
  165. package/dist/i18n/locales/sq.d.ts +10 -0
  166. package/dist/i18n/locales/sq.d.ts.map +1 -1
  167. package/dist/i18n/locales/sq.js +12 -2
  168. package/dist/i18n/locales/sq.js.map +1 -1
  169. package/dist/i18n/locales/sv.d.ts +10 -0
  170. package/dist/i18n/locales/sv.d.ts.map +1 -1
  171. package/dist/i18n/locales/sv.js +12 -2
  172. package/dist/i18n/locales/sv.js.map +1 -1
  173. package/dist/i18n/locales/tr.d.ts +10 -0
  174. package/dist/i18n/locales/tr.d.ts.map +1 -1
  175. package/dist/i18n/locales/tr.js +12 -2
  176. package/dist/i18n/locales/tr.js.map +1 -1
  177. package/dist/i18n/locales/zh.d.ts +10 -0
  178. package/dist/i18n/locales/zh.d.ts.map +1 -1
  179. package/dist/i18n/locales/zh.js +12 -2
  180. package/dist/i18n/locales/zh.js.map +1 -1
  181. package/dist/index.js +919 -916
  182. package/dist/index.js.map +1 -1
  183. package/dist/locales/ar.json +12 -2
  184. package/dist/locales/de.json +12 -2
  185. package/dist/locales/el.json +12 -2
  186. package/dist/locales/en.json +12 -2
  187. package/dist/locales/es.json +12 -2
  188. package/dist/locales/fr.json +12 -2
  189. package/dist/locales/hi.json +12 -2
  190. package/dist/locales/it.json +14 -4
  191. package/dist/locales/ja.json +12 -2
  192. package/dist/locales/nl.json +12 -2
  193. package/dist/locales/pl.json +12 -2
  194. package/dist/locales/pt.json +12 -2
  195. package/dist/locales/ro.json +12 -2
  196. package/dist/locales/ru.json +12 -2
  197. package/dist/locales/sq.json +12 -2
  198. package/dist/locales/sv.json +12 -2
  199. package/dist/locales/tr.json +12 -2
  200. package/dist/locales/zh.json +12 -2
  201. package/dist/patterns/calendar/index.js +1 -1
  202. package/dist/tokens.css +2 -1
  203. package/package.json +5 -1
  204. package/dist/_chunks/appointment-card-D-oj_ugh.js +0 -296
  205. package/dist/_chunks/appointment-card-D-oj_ugh.js.map +0 -1
  206. package/dist/_chunks/appointment-timeline-CymGHyIP.js +0 -403
  207. package/dist/_chunks/appointment-timeline-CymGHyIP.js.map +0 -1
  208. package/dist/_chunks/clinical-note-card-D2WTV2CO.js.map +0 -1
  209. package/dist/_chunks/format-price-DNqXPa_q.js.map +0 -1
  210. package/dist/_chunks/notes-panel-C4G-mhZ9.js +0 -380
  211. package/dist/_chunks/notes-panel-C4G-mhZ9.js.map +0 -1
  212. package/dist/_chunks/rich-text-editor-CQ7yZdG3.js.map +0 -1
  213. package/dist/_chunks/task-card-BUgK6yZT.js.map +0 -1
  214. package/dist/_chunks/tasks-panel-DQuaVvl5.js +0 -757
  215. package/dist/_chunks/tasks-panel-DQuaVvl5.js.map +0 -1
  216. package/dist/_chunks/tool-rail-8Scslq3X.js +0 -524
  217. package/dist/_chunks/tool-rail-8Scslq3X.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"languages-CZqBaPwI.js","sources":["../../node_modules/lucide-react/dist/esm/icons/banknote.mjs","../../node_modules/lucide-react/dist/esm/icons/languages.mjs"],"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: \"20\", height: \"12\", x: \"2\", y: \"6\", rx: \"2\", key: \"9lu3g6\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"2\", key: \"1c9p78\" }],\n [\"path\", { d: \"M6 12h.01M18 12h.01\", key: \"113zkx\" }]\n];\nconst Banknote = createLucideIcon(\"banknote\", __iconNode);\n\nexport { __iconNode, Banknote as default };\n//# sourceMappingURL=banknote.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: \"m5 8 6 6\", key: \"1wu5hv\" }],\n [\"path\", { d: \"m4 14 6-6 2-3\", key: \"1k1g8d\" }],\n [\"path\", { d: \"M2 5h12\", key: \"or177f\" }],\n [\"path\", { d: \"M7 2h1\", key: \"1t2jsx\" }],\n [\"path\", { d: \"m22 22-5-10-5 10\", key: \"don7ne\" }],\n [\"path\", { d: \"M14 18h6\", key: \"1m8k6r\" }]\n];\nconst Languages = createLucideIcon(\"languages\", __iconNode);\n\nexport { __iconNode, Languages as default };\n//# sourceMappingURL=languages.mjs.map\n"],"names":["__iconNode","Banknote","createLucideIcon","Languages"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,OAAO,MAAM,QAAQ,MAAM,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,KAAK,SAAQ,CAAE;AAAA,EAC9E,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,UAAU;AAAA,EACxD,CAAC,QAAQ,EAAE,GAAG,uBAAuB,KAAK,SAAQ,CAAE;AACtD,GACMC,IAAWC,EAAiB,YAAYF,CAAU;ACdxD;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAAA,EACzC,CAAC,QAAQ,EAAE,GAAG,iBAAiB,KAAK,SAAQ,CAAE;AAAA,EAC9C,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,UAAU,KAAK,SAAQ,CAAE;AAAA,EACvC,CAAC,QAAQ,EAAE,GAAG,oBAAoB,KAAK,SAAQ,CAAE;AAAA,EACjD,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAC3C,GACMG,IAAYD,EAAiB,aAAaF,CAAU;","x_google_ignoreList":[0,1]}
@@ -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 @@
1
+ {"version":3,"file":"money.agent-Dw55UxUA.js","sources":["../../src/components/money/money.tsx","../../src/components/money/money.agent.ts"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Money — a formatted monetary amount. */\n/* */\n/* Every price in the kit arrives as an integer in the smallest currency */\n/* unit plus an ISO-4217 code, and the kit formats it (see */\n/* `_shared/format-price`). This is the read-only leaf that renders one, */\n/* so a price is not re-implemented per surface with its own */\n/* `Intl.NumberFormat` call and its own alignment and tone decisions. */\n/* */\n/* What it adds over a bare formatted string: */\n/* - tabular figures, so a column of prices lines up on the decimal; */\n/* - the fraction can be de-emphasised or dropped when it is zero, so */\n/* the whole units read first; */\n/* - tone follows the sign when asked, so money owed reads as owed; */\n/* - the visual parts are hidden from assistive tech and the full */\n/* formatted amount is announced once, so splitting the fraction into */\n/* its own element cannot fragment what a screen reader says. */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef, useMemo, type HTMLAttributes } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\n\nimport { VisuallyHidden } from '../visually-hidden';\nimport { formatPrice, formatPriceParts } from '../_shared/format-price';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst moneyVariants = cva(\n [\n 'ds:inline-flex ds:items-baseline ds:whitespace-nowrap',\n // Lining, fixed-width figures: without these a column of amounts\n // wanders because glyph widths differ between digits.\n 'ds:tabular-nums',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'type-body-sm',\n md: 'type-body',\n lg: 'type-title-item',\n },\n tone: {\n default: 'ds:text-[color:var(--foreground)]',\n muted: 'ds:text-[color:var(--muted-foreground)]',\n positive: 'ds:text-[color:var(--success-foreground)]',\n negative: 'ds:text-[color:var(--destructive)]',\n },\n strikethrough: {\n true: 'ds:line-through ds:decoration-from-font',\n false: '',\n },\n },\n defaultVariants: { size: 'md', tone: 'default', strikethrough: false },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport type MoneyDecimals = 'full' | 'muted' | 'hideWhenZero';\n\nexport interface MoneyProps\n extends\n Omit<HTMLAttributes<HTMLSpanElement>, 'children'>,\n Omit<VariantProps<typeof moneyVariants>, 'tone'> {\n /**\n * Amount in the SMALLEST currency unit (cents), the kit's price\n * convention — never a pre-formatted string. Zero-decimal currencies\n * (JPY, KRW …) take the major amount, as `formatPrice` expects.\n */\n value: number;\n /** ISO-4217 code. Defaults to EUR, the practice currency. */\n currency?: string;\n /** BCP 47 locale. Defaults to the active i18n language. */\n locale?: string;\n /**\n * Colour. `auto` follows the sign — a negative amount reads destructive,\n * everything else inherits the default. Explicit tones always win.\n */\n tone?: 'default' | 'muted' | 'positive' | 'negative' | 'auto';\n /**\n * What to do with the fraction:\n * `full` (default) leaves it alone;\n * `muted` de-emphasises it so the whole units read first;\n * `hideWhenZero` drops it ONLY when it is all zeros, so a price is\n * never rounded away in the display.\n */\n decimals?: MoneyDecimals;\n /** Force a leading `+` on positive amounts (a credit, a movement). */\n signDisplay?: 'auto' | 'always';\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const Money = forwardRef<HTMLSpanElement, MoneyProps>(\n (\n {\n value,\n currency = 'EUR',\n locale,\n size,\n tone = 'default',\n decimals = 'full',\n signDisplay = 'auto',\n strikethrough,\n className,\n ...rest\n },\n ref,\n ) => {\n const { i18n } = useTranslation();\n const resolvedLocale = locale ?? i18n.language;\n\n const { nodes, full } = useMemo(() => {\n const signOptions =\n signDisplay === 'always'\n ? ({ signDisplay: 'exceptZero' } as const)\n : {};\n const parts = formatPriceParts(\n value,\n currency,\n resolvedLocale,\n signOptions,\n );\n const plain = formatPrice(value, currency, resolvedLocale);\n\n // No parts means the locale or currency was rejected; the plain\n // string still honours the zero-decimal rule, so show that whole.\n if (!parts)\n return { nodes: [{ text: plain, muted: false }], full: plain };\n\n const text = parts.map((part) => part.value).join('');\n const fractionIsZero = parts\n .filter((part) => part.type === 'fraction')\n .every((part) => /^0+$/.test(part.value));\n\n // `decimal` and `fraction` are labelled by Intl, so this holds\n // wherever the locale puts them and whatever glyph it uses — an\n // it-IT group separator is a `group` part and is never touched.\n const isFractionPart = (type: Intl.NumberFormatPartTypes): boolean =>\n type === 'decimal' || type === 'fraction';\n\n if (decimals === 'hideWhenZero' && fractionIsZero) {\n const kept = parts.filter((part) => !isFractionPart(part.type));\n const trimmed = kept\n .map((part) => part.value)\n .join('')\n .trim();\n return { nodes: [{ text: trimmed, muted: false }], full: trimmed };\n }\n\n if (decimals === 'muted') {\n return {\n nodes: parts.map((part) => ({\n text: part.value,\n muted: isFractionPart(part.type),\n })),\n full: text,\n };\n }\n\n return { nodes: [{ text, muted: false }], full: text };\n }, [value, currency, resolvedLocale, decimals, signDisplay]);\n\n const resolvedTone =\n tone === 'auto' ? (value < 0 ? 'negative' : 'default') : tone;\n\n return (\n <span\n ref={ref}\n data-component=\"money\"\n data-currency={currency.toUpperCase()}\n className={moneyVariants({\n size,\n tone: resolvedTone,\n strikethrough,\n className,\n })}\n {...rest}\n >\n {/* The visual pieces are decorative: the amount is announced once,\n below, so a split fraction cannot be read as two numbers. */}\n {nodes.map((node, index) => (\n <span\n // Parts are positional and re-derived together, so the index is\n // the identity here.\n key={`${index}-${node.text}`}\n aria-hidden=\"true\"\n className={\n node.muted ? 'ds:opacity-70 ds:[font-size:0.85em]' : undefined\n }\n >\n {node.text}\n </span>\n ))}\n <VisuallyHidden>{full}</VisuallyHidden>\n </span>\n );\n },\n);\n\nMoney.displayName = 'Money';\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — Money. */\n/* */\n/* A read-only formatted amount. It holds no state an agent can change */\n/* and exposes no actions. The root also carries `data-currency` (the */\n/* ISO-4217 code) so a reader can tell two amounts apart without */\n/* parsing the glyph; the hook vocabulary has no slot to declare it. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\n\nexport const moneyAgent: AgentAdapter = {\n id: 'money',\n capabilities: [],\n state: {},\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'money',\n description: 'Marks the element as a kit Money amount.',\n },\n },\n};\n"],"names":["moneyVariants","cva","Money","forwardRef","value","currency","locale","size","tone","decimals","signDisplay","strikethrough","className","rest","ref","i18n","useTranslation","resolvedLocale","nodes","full","useMemo","parts","formatPriceParts","plain","formatPrice","text","part","fractionIsZero","isFractionPart","type","trimmed","resolvedTone","jsxs","node","index","jsx","VisuallyHidden","moneyAgent"],"mappings":"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"}
@@ -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