@alfadocs/ui-kit 0.69.0 → 0.70.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 (261) hide show
  1. package/dist/_chunks/{agenda-card-BxSFkqgY.js → agenda-card-BQ-IKAru.js} +2 -2
  2. package/dist/_chunks/{agenda-tray-g0kg7HwB.js → agenda-tray-CGXRk58j.js} +2 -2
  3. package/dist/_chunks/{ai-consent-banner-CXlsNX1c.js → ai-consent-banner-Be-h9mRI.js} +3 -3
  4. package/dist/_chunks/ai-tools-rail-B5NEghsp.js +511 -0
  5. package/dist/_chunks/{alert-_mUKLmwA.js → alert-CHYZ96tR.js} +150 -96
  6. package/dist/_chunks/{anamnesis-card-DRmE24OQ.js → anamnesis-card-DvYCa16e.js} +2 -2
  7. package/dist/_chunks/anatomy-scheme-CJB6dI6p.js +2445 -0
  8. package/dist/_chunks/annotation-marker-qt5R9WZX.js +120 -0
  9. package/dist/_chunks/{antenatal-schedule-timeline-35ebkcZT.js → antenatal-schedule-timeline-CwXrQRm1.js} +2 -2
  10. package/dist/_chunks/appointment-card-C06aZqA7.js +310 -0
  11. package/dist/_chunks/appointment-timeline-BJM0S_Fg.js +386 -0
  12. package/dist/_chunks/appointment-tray-DRRw5ROi.js +193 -0
  13. package/dist/_chunks/{audio-recorder-DYXXnGug.js → audio-recorder-Cpdk5qpQ.js} +2 -2
  14. package/dist/_chunks/{badge-CqGsX32l.js → badge-DCOqV9mI.js} +32 -27
  15. package/dist/_chunks/{bishop-score-PJI3AXzA.js → bishop-score-DnYWtZa_.js} +2 -2
  16. package/dist/_chunks/{bmi-calculator-BZtIJ53x.js → bmi-calculator-zjeY4E7J.js} +2 -2
  17. package/dist/_chunks/{booking-C3VqFReX.js → booking-DUBI0oqt.js} +4 -4
  18. package/dist/_chunks/{care-plan-card-CvFGXa2z.js → care-plan-card-C5sTfY9G.js} +5 -5
  19. package/dist/_chunks/{care-plan-entry-card-C3E_gClk.js → care-plan-entry-card-CXnxGCWA.js} +5 -5
  20. package/dist/_chunks/care-plan-header-BUwqDTtz.js +206 -0
  21. package/dist/_chunks/clinical-note-card-BUvNMNGL.js +436 -0
  22. package/dist/_chunks/{contact-profile-card-Dramqa9C.js → contact-profile-card-DDPwRFiP.js} +2 -2
  23. package/dist/_chunks/control-room-rail-Y8ryLYsP.js +229 -0
  24. package/dist/_chunks/{cycle-calculator-DmRGJNaT.js → cycle-calculator-CCmPwcBl.js} +2 -2
  25. package/dist/_chunks/{dependent-selector-CG_FOHya.js → dependent-selector-DUV4thxX.js} +2 -2
  26. package/dist/_chunks/{document-scanner-CTubA0-N.js → document-scanner-C_AxLooF.js} +3 -3
  27. package/dist/_chunks/{due-date-calculator-BTmsIQqD.js → due-date-calculator-Brdj-euS.js} +3 -3
  28. package/dist/_chunks/editable-currency-cell-renderer-C9twtALM.js +328 -0
  29. package/dist/_chunks/email-input-DJ7EXklP.js +397 -0
  30. package/dist/_chunks/{entity-card-COhmqHly.js → entity-card-9_62gY7l.js} +38 -20
  31. package/dist/_chunks/entity-summary-BxRjFh_4.js +138 -0
  32. package/dist/_chunks/{fetal-weight-CRz7KE2D.js → fetal-weight-DNCkyeVo.js} +2 -2
  33. package/dist/_chunks/field-value-NXYczdpO.js +415 -0
  34. package/dist/_chunks/{file-upload-5ScQd4fE.js → file-upload-DwZcAK8D.js} +2 -1
  35. package/dist/_chunks/{freemium-paywall-DZ2mBS3w.js → freemium-paywall-WYlNO7yT.js} +2 -2
  36. package/dist/_chunks/{gestational-age-calculator-BleUdhbI.js → gestational-age-calculator-CF2ISaYQ.js} +3 -3
  37. package/dist/_chunks/hash-CysBBS_N.js +17 -0
  38. package/dist/_chunks/{hcg-doubling-CnjDXX6U.js → hcg-doubling-C7bmuaU3.js} +2 -2
  39. package/dist/_chunks/{actions-cell-renderer-DrcaxB0w.js → link-cell-renderer-CTXqtXV-.js} +715 -592
  40. package/dist/_chunks/lock-CKOIn0IK.js +15 -0
  41. package/dist/_chunks/{marketplace-app-shell-6T9W4Knl.js → marketplace-app-shell-Skhfp6vK.js} +3 -3
  42. package/dist/_chunks/notes-panel-ay8_lPrA.js +158 -0
  43. package/dist/_chunks/{notification-card-BiESdm8q.js → notification-card-D2jiKSJJ.js} +27 -23
  44. package/dist/_chunks/{notification-tray-Btb9oQeZ.js → notification-tray-AEun6DN2.js} +2 -2
  45. package/dist/_chunks/{operator-hero-CP2Nhupm.js → operator-hero-CR0Rqh4-.js} +3 -3
  46. package/dist/_chunks/patient-details-Dlhqb5ig.js +675 -0
  47. package/dist/_chunks/{patient-search-CBC_ySF6.js → patient-search-Be6cLrHR.js} +2 -2
  48. package/dist/_chunks/patient-summary-card-WySCMwwA.js +437 -0
  49. package/dist/_chunks/patient-table-CHxf3Oqk.js +1110 -0
  50. package/dist/_chunks/{payment-form-DvjwYVIT.js → payment-form-CxqIXqw7.js} +2 -2
  51. package/dist/_chunks/{payment-request-card-DioWKBUq.js → payment-request-card-BcZJwu9z.js} +125 -136
  52. package/dist/_chunks/{pdf-viewer-D6BPfW2D.js → pdf-viewer-QfebdLOd.js} +192 -214
  53. package/dist/_chunks/{periodontal-chart-card-BuDEMbHE.js → periodontal-chart-card-hRRJY1NN.js} +2 -2
  54. package/dist/_chunks/{practice-results-KrTHqZua.js → practice-results-C6qDfxos.js} +3 -3
  55. package/dist/_chunks/{pregnancy-dating-DORUAOHB.js → pregnancy-dating-CRVWswD-.js} +3 -3
  56. package/dist/_chunks/{pregnancy-weight-gain-DVz4rr7-.js → pregnancy-weight-gain-BUNpTsH-.js} +2 -2
  57. package/dist/_chunks/radiograph-panel.agent-CAX-C3g3.js +558 -0
  58. package/dist/_chunks/{rich-text-editor-BsV7zUdg.js → rich-text-editor-DlCqPixb.js} +410 -394
  59. package/dist/_chunks/{sign-document-B4DeRhTe.js → sign-document-By6hMOra.js} +2 -2
  60. package/dist/_chunks/{stepper-accordion-Dki6r9ZE.js → stepper-accordion-DC-H-8v4.js} +38 -48
  61. package/dist/_chunks/tab-bar-Bv9nGNdO.js +262 -0
  62. package/dist/_chunks/tooth-scheme-BhQoPNBD.js +2131 -0
  63. package/dist/_chunks/{transaction-chip-DK84XCBU.js → transaction-chip-CscoQbxF.js} +88 -61
  64. package/dist/_chunks/use-clamp-overflow-DQE2kwZ9.js +20 -0
  65. package/dist/_chunks/use-overflow-collapse-BIOzKbni.js +32 -0
  66. package/dist/_chunks/use-persistent-state-nZwZAnE9.js +24 -0
  67. package/dist/_chunks/{warning-stack-BsgaEbL8.js → warning-stack--sTrrBDA.js} +86 -101
  68. package/dist/_chunks/{workflow-map-Bdam9pGp.js → workflow-map-Dy8mLCqF.js} +3 -3
  69. package/dist/_chunks/zoom-out-CgVtf2Wx.js +29 -0
  70. package/dist/agent/index.js +5 -4
  71. package/dist/agent/types.d.ts +19 -2
  72. package/dist/agent-catalog.json +1253 -86
  73. package/dist/agent-i18n/en.json +108 -6
  74. package/dist/components/_shared/entity-card/entity-card.d.ts +6 -0
  75. package/dist/components/_shared/entity-card/index.d.ts +1 -1
  76. package/dist/components/_shared/field-value.d.ts +21 -0
  77. package/dist/components/_shared/field-visibility-cog.d.ts +20 -0
  78. package/dist/components/_shared/field-visibility.d.ts +36 -0
  79. package/dist/components/_shared/patient-fields.d.ts +119 -0
  80. package/dist/components/agenda-card/index.js +1 -1
  81. package/dist/components/agenda-tray/index.js +1 -1
  82. package/dist/components/ai-consent-banner/index.js +1 -1
  83. package/dist/components/ai-tools-rail/ai-tools-rail.d.ts +75 -0
  84. package/dist/components/ai-tools-rail/index.js +1 -1
  85. package/dist/components/alert/alert.d.ts +5 -0
  86. package/dist/components/alert/index.js +1 -1
  87. package/dist/components/anamnesis-card/index.js +1 -1
  88. package/dist/components/anatomy-scheme/anatomy-face-paths.d.ts +15 -0
  89. package/dist/components/anatomy-scheme/anatomy-muscle-paths.d.ts +20 -0
  90. package/dist/components/anatomy-scheme/anatomy-scheme-data.d.ts +121 -0
  91. package/dist/components/anatomy-scheme/anatomy-scheme.agent.d.ts +6 -0
  92. package/dist/components/anatomy-scheme/anatomy-scheme.d.ts +69 -0
  93. package/dist/components/anatomy-scheme/index.d.ts +6 -0
  94. package/dist/components/anatomy-scheme/index.js +17 -0
  95. package/dist/components/annotation-marker/annotation-marker.d.ts +33 -0
  96. package/dist/components/annotation-marker/index.d.ts +3 -0
  97. package/dist/components/annotation-marker/index.js +7 -0
  98. package/dist/components/appointment-card/appointment-card.d.ts +25 -1
  99. package/dist/components/appointment-card/index.js +6 -5
  100. package/dist/components/appointment-timeline/appointment-timeline.agent.d.ts +4 -0
  101. package/dist/components/appointment-timeline/appointment-timeline.d.ts +66 -0
  102. package/dist/components/appointment-timeline/index.d.ts +4 -0
  103. package/dist/components/appointment-timeline/index.js +6 -0
  104. package/dist/components/audio-recorder/index.js +1 -1
  105. package/dist/components/badge/badge.d.ts +6 -2
  106. package/dist/components/badge/index.js +1 -1
  107. package/dist/components/bishop-score/index.js +1 -1
  108. package/dist/components/bmi-calculator/index.js +1 -1
  109. package/dist/components/booking/index.js +1 -1
  110. package/dist/components/care-plan-card/index.js +1 -1
  111. package/dist/components/care-plan-entry-card/index.js +1 -1
  112. package/dist/components/care-plan-header/care-plan-header.agent.d.ts +4 -0
  113. package/dist/components/care-plan-header/care-plan-header.d.ts +100 -0
  114. package/dist/components/care-plan-header/index.d.ts +4 -0
  115. package/dist/components/care-plan-header/index.js +6 -0
  116. package/dist/components/clinical-note-card/clinical-note-card.d.ts +21 -1
  117. package/dist/components/clinical-note-card/index.js +1 -1
  118. package/dist/components/contact-profile-card/index.js +1 -1
  119. package/dist/components/control-room-rail/control-room-context.d.ts +53 -0
  120. package/dist/components/control-room-rail/control-room-rail.d.ts +35 -0
  121. package/dist/components/control-room-rail/index.d.ts +5 -0
  122. package/dist/components/control-room-rail/index.js +9 -0
  123. package/dist/components/cycle-calculator/index.js +1 -1
  124. package/dist/components/data-table/cell-renderers/actions-cell-renderer.d.ts +18 -0
  125. package/dist/components/data-table/index.d.ts +1 -1
  126. package/dist/components/data-table/index.js +32 -31
  127. package/dist/components/dependent-selector/index.js +1 -1
  128. package/dist/components/document-scanner/index.js +1 -1
  129. package/dist/components/due-date-calculator/index.js +2 -2
  130. package/dist/components/email-input/index.js +1 -1
  131. package/dist/components/entity-summary/entity-summary.d.ts +43 -0
  132. package/dist/components/entity-summary/index.d.ts +3 -0
  133. package/dist/components/entity-summary/index.js +5 -0
  134. package/dist/components/fetal-weight/index.js +1 -1
  135. package/dist/components/file-upload/index.js +1 -1
  136. package/dist/components/freemium-paywall/index.js +1 -1
  137. package/dist/components/gestational-age-calculator/index.js +1 -1
  138. package/dist/components/hcg-doubling/index.js +1 -1
  139. package/dist/components/index.d.ts +9 -0
  140. package/dist/components/notes-panel/index.d.ts +3 -0
  141. package/dist/components/notes-panel/index.js +5 -0
  142. package/dist/components/notes-panel/notes-panel.d.ts +64 -0
  143. package/dist/components/notification-card/index.js +1 -1
  144. package/dist/components/notification-tray/index.js +1 -1
  145. package/dist/components/operator-hero/index.js +1 -1
  146. package/dist/components/patient-details/index.d.ts +5 -0
  147. package/dist/components/patient-details/index.js +6 -0
  148. package/dist/components/patient-details/patient-details.agent.d.ts +4 -0
  149. package/dist/components/patient-details/patient-details.d.ts +96 -0
  150. package/dist/components/patient-search/index.js +1 -1
  151. package/dist/components/patient-summary-card/index.js +1 -1
  152. package/dist/components/patient-summary-card/patient-summary-card.d.ts +40 -1
  153. package/dist/components/patient-table/columns.d.ts +69 -40
  154. package/dist/components/patient-table/index.d.ts +2 -6
  155. package/dist/components/patient-table/index.js +8 -9
  156. package/dist/components/patient-table/patient-table.d.ts +38 -4
  157. package/dist/components/patient-table/types.d.ts +52 -2
  158. package/dist/components/patient-table/use-responsive-columns.d.ts +8 -6
  159. package/dist/components/payment-card/index.js +1 -1
  160. package/dist/components/payment-form/index.js +1 -1
  161. package/dist/components/pdf-viewer/index.js +1 -1
  162. package/dist/components/periodontal-chart-card/index.js +1 -1
  163. package/dist/components/practice-results/index.js +1 -1
  164. package/dist/components/pregnancy-dating/index.js +1 -1
  165. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  166. package/dist/components/radiograph-panel/index.d.ts +4 -0
  167. package/dist/components/radiograph-panel/index.js +7 -0
  168. package/dist/components/radiograph-panel/radiograph-panel.agent.d.ts +13 -0
  169. package/dist/components/radiograph-panel/radiograph-panel.d.ts +36 -0
  170. package/dist/components/rich-text-editor/index.js +1 -1
  171. package/dist/components/sidebar/index.js +1 -1
  172. package/dist/components/sign-document/index.js +1 -1
  173. package/dist/components/stepper-accordion/index.js +1 -1
  174. package/dist/components/tab-bar/index.js +1 -1
  175. package/dist/components/tab-bar/tab-bar.d.ts +18 -1
  176. package/dist/components/tooth-scheme/index.d.ts +2 -2
  177. package/dist/components/tooth-scheme/index.js +30 -23
  178. package/dist/components/tooth-scheme/tooth-data.d.ts +112 -1
  179. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts +2 -2
  180. package/dist/components/tooth-scheme/tooth-scheme.d.ts +75 -11
  181. package/dist/components/transaction-chip/index.js +1 -1
  182. package/dist/components/transaction-chip/transaction-chip.d.ts +2 -2
  183. package/dist/components/warning-stack/index.js +1 -1
  184. package/dist/components/warning-stack/warning-stack.d.ts +10 -7
  185. package/dist/components/workflow/index.js +1 -1
  186. package/dist/hooks/index.d.ts +1 -0
  187. package/dist/hooks/index.js +24 -22
  188. package/dist/hooks/use-clamp-overflow.d.ts +19 -0
  189. package/dist/hooks/use-overflow-collapse.d.ts +46 -0
  190. package/dist/hooks/use-persistent-state.d.ts +7 -1
  191. package/dist/hooks/use-scroll-overflow.d.ts +36 -0
  192. package/dist/i18n/locales/ar.d.ts +308 -24
  193. package/dist/i18n/locales/ar.js +322 -27
  194. package/dist/i18n/locales/de.d.ts +308 -24
  195. package/dist/i18n/locales/de.js +322 -27
  196. package/dist/i18n/locales/el.d.ts +308 -24
  197. package/dist/i18n/locales/el.js +322 -27
  198. package/dist/i18n/locales/en.d.ts +309 -32
  199. package/dist/i18n/locales/en.js +323 -35
  200. package/dist/i18n/locales/es.d.ts +308 -24
  201. package/dist/i18n/locales/es.js +322 -27
  202. package/dist/i18n/locales/fr.d.ts +308 -24
  203. package/dist/i18n/locales/fr.js +322 -27
  204. package/dist/i18n/locales/hi.d.ts +308 -24
  205. package/dist/i18n/locales/hi.js +322 -27
  206. package/dist/i18n/locales/it.d.ts +308 -24
  207. package/dist/i18n/locales/it.js +322 -27
  208. package/dist/i18n/locales/ja.d.ts +308 -24
  209. package/dist/i18n/locales/ja.js +322 -27
  210. package/dist/i18n/locales/nl.d.ts +308 -24
  211. package/dist/i18n/locales/nl.js +322 -27
  212. package/dist/i18n/locales/pl.d.ts +308 -24
  213. package/dist/i18n/locales/pl.js +322 -27
  214. package/dist/i18n/locales/pt.d.ts +308 -24
  215. package/dist/i18n/locales/pt.js +322 -27
  216. package/dist/i18n/locales/ro.d.ts +308 -24
  217. package/dist/i18n/locales/ro.js +322 -27
  218. package/dist/i18n/locales/ru.d.ts +308 -24
  219. package/dist/i18n/locales/ru.js +322 -27
  220. package/dist/i18n/locales/sq.d.ts +308 -24
  221. package/dist/i18n/locales/sq.js +322 -27
  222. package/dist/i18n/locales/sv.d.ts +308 -24
  223. package/dist/i18n/locales/sv.js +322 -27
  224. package/dist/i18n/locales/tr.d.ts +308 -24
  225. package/dist/i18n/locales/tr.js +322 -27
  226. package/dist/i18n/locales/zh.d.ts +308 -24
  227. package/dist/i18n/locales/zh.js +322 -27
  228. package/dist/index.js +672 -623
  229. package/dist/locales/ar.json +311 -27
  230. package/dist/locales/de.json +311 -27
  231. package/dist/locales/el.json +311 -27
  232. package/dist/locales/en.json +311 -27
  233. package/dist/locales/es.json +311 -27
  234. package/dist/locales/fr.json +311 -27
  235. package/dist/locales/hi.json +311 -27
  236. package/dist/locales/it.json +311 -27
  237. package/dist/locales/ja.json +311 -27
  238. package/dist/locales/nl.json +311 -27
  239. package/dist/locales/pl.json +311 -27
  240. package/dist/locales/pt.json +311 -27
  241. package/dist/locales/ro.json +311 -27
  242. package/dist/locales/ru.json +311 -27
  243. package/dist/locales/sq.json +311 -27
  244. package/dist/locales/sv.json +311 -27
  245. package/dist/locales/tr.json +311 -27
  246. package/dist/locales/zh.json +311 -27
  247. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  248. package/dist/tokens.css +1 -1
  249. package/package.json +37 -1
  250. package/dist/_chunks/ai-tools-rail-BA_sqy1A.js +0 -373
  251. package/dist/_chunks/appointment-tray-CZtvtaH-.js +0 -431
  252. package/dist/_chunks/clinical-note-card-DqQYf_D4.js +0 -333
  253. package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js +0 -448
  254. package/dist/_chunks/email-input-B_Y55f5G.js +0 -396
  255. package/dist/_chunks/patient-summary-card-B836_fDB.js +0 -435
  256. package/dist/_chunks/patient-table-CDuosVru.js +0 -889
  257. package/dist/_chunks/tab-bar-B1ovILzh.js +0 -105
  258. package/dist/_chunks/tooth-scheme-yBr53cvv.js +0 -1330
  259. package/dist/_chunks/use-persistent-state-i23OWy6G.js +0 -24
  260. package/dist/components/patient-table/cell-renderers/contact-cell.d.ts +0 -45
  261. package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts +0 -26
@@ -51,6 +51,21 @@
51
51
  "focus": "Move keyboard focus into the textarea."
52
52
  }
53
53
  },
54
+ "anatomyScheme": {
55
+ "state": {
56
+ "chart": "Current anatomy chart — findings keyed by region id. Notes are PHI and omitted from this snapshot; read them per-region via get_region.",
57
+ "activeView": "Id of the currently displayed anatomy view."
58
+ },
59
+ "actions": {
60
+ "focusRegion": "Move focus to a specific region in the active view.",
61
+ "getRegion": "Read the findings (incl. notes) recorded on one region.",
62
+ "regionsWith": "List the region ids carrying a given finding type.",
63
+ "setFinding": "Record a finding (observation / lesion / pain / treatment / note) on a region.",
64
+ "removeFinding": "Remove a single finding type from a region.",
65
+ "clearRegion": "Clear every finding from a region.",
66
+ "setView": "Switch the active anatomy view."
67
+ }
68
+ },
54
69
  "appointmentTray": {
55
70
  "state": {
56
71
  "items": "Currently-displayed appointments. Ids + lifecycle state only — never patient identity."
@@ -59,6 +74,15 @@
59
74
  "selectItem": "Activate the appointment with the given id."
60
75
  }
61
76
  },
77
+ "appointmentTimeline": {
78
+ "state": {
79
+ "items": "Currently-rendered appointments. Ids + lifecycle state only — never patient identity."
80
+ },
81
+ "actions": {
82
+ "selectItem": "Activate the appointment with the given id.",
83
+ "jumpToToday": "Re-anchor the timeline scroll on today's appointments."
84
+ }
85
+ },
62
86
  "audioRecorder": {
63
87
  "state": {
64
88
  "isRecording": "True while actively capturing audio (not paused).",
@@ -154,6 +178,12 @@
154
178
  "phaseProgress": "Phase progress as executed / total counts. Counts only — never phase labels or operator identity."
155
179
  }
156
180
  },
181
+ "carePlanHeader": {
182
+ "state": {
183
+ "state": "The plan lifecycle state. Enum value only — never the localised label or any PHI.",
184
+ "alertCount": "How many attention alerts (e.g. missing signature) are showing. Count only — never the alert labels."
185
+ }
186
+ },
157
187
  "carousel": {
158
188
  "state": {
159
189
  "activeIndex": "Zero-based index of the currently snapped slide.",
@@ -520,6 +550,17 @@
520
550
  "toggleVisibility": "Toggle between masked and plain-text display."
521
551
  }
522
552
  },
553
+ "patientDetails": {
554
+ "state": {
555
+ "visibleFieldOrder": "Ordered list of visible field KEYS (e.g. \"fiscalCode\"). Never a field value.",
556
+ "patientId": "Opaque patient id the panel is bound to. No patient-identifiable data."
557
+ },
558
+ "actions": {
559
+ "setVisibleFields": "Set which fields are visible (and their order). Unknown ids are ignored.",
560
+ "setFieldOrder": "Reorder the visible fields. Order within a section is honoured; sections stay fixed.",
561
+ "updateField": "Write a patient field value via the consumer's audited save path. Subject to the same permissions and validation as a human edit."
562
+ }
563
+ },
523
564
  "patientSearch": {
524
565
  "state": {
525
566
  "variant": "Active variant — one of `who-where`, `who-where-when`, `faceted`, `discovery`."
@@ -650,6 +691,15 @@
650
691
  "setValue": "Select the radio with the given value."
651
692
  }
652
693
  },
694
+ "radiographPanel": {
695
+ "state": {
696
+ "radiographs": "Structural references (id + kind) to the films shown for the selected tooth."
697
+ },
698
+ "actions": {
699
+ "viewRadiograph": "Open a film in the fullscreen viewer by id.",
700
+ "closeViewer": "Close the fullscreen radiograph viewer."
701
+ }
702
+ },
653
703
  "recaptchaWidget": {
654
704
  "state": {
655
705
  "hasToken": "True when the widget currently holds a valid verification token."
@@ -891,14 +941,18 @@
891
941
  },
892
942
  "toothScheme": {
893
943
  "state": {
894
- "chart": "Current dental chart — findings (and marked surfaces) keyed by FDI id.",
895
- "chartedTeeth": "FDI ids of every tooth carrying at least one finding."
944
+ "chart": "Current dental chart — findings (and marked surfaces) keyed by FDI id, or by a special-element id (quadrant / sextant / arch / general) for region-spanning findings.",
945
+ "chartedTeeth": "Ids carrying at least one finding — FDI tooth ids and/or special-element ids (quadrant / sextant / arch / general).",
946
+ "radiographs": "Structural references (id + kind) to the radiographs on each tooth, keyed by FDI id. Notes, dates and image URLs are not exposed here — fetch them on demand via get_radiographs.",
947
+ "teethWithRadiographs": "FDI ids of every tooth carrying at least one radiograph."
896
948
  },
897
949
  "actions": {
898
950
  "focusTooth": "Move focus to a specific tooth by FDI id.",
899
951
  "getTooth": "Read the findings recorded on one tooth (FDI id).",
900
- "teethWith": "List the FDI ids of every tooth carrying a given finding (e.g. all teeth with caries).",
901
- "setFinding": "Record a finding on a tooth (crown, implant, root canal, caries, …). Optionally mark the affected surfaces for a surface finding.",
952
+ "teethWith": "List the ids carrying a given finding — FDI tooth ids and/or special-element ids (e.g. all teeth with caries).",
953
+ "getRadiographs": "Read the radiographs (x-rays) attached to one tooth.",
954
+ "openRadiographs": "Focus a tooth and open its radiograph archive (fires the host's onOpenRadiographs).",
955
+ "setFinding": "Record a finding on a tooth or region element (crown, implant, root canal, caries, …). Optionally mark the affected surfaces for a surface finding.",
902
956
  "removeFinding": "Remove a single finding from a tooth.",
903
957
  "clearTooth": "Clear every finding from a tooth."
904
958
  }
@@ -976,7 +1030,7 @@
976
1030
  "carePlans": {
977
1031
  "workflows": {
978
1032
  "selectPlans": "Select one or more plan or care rows in the register for a bulk action.",
979
- "filterByPeriod": "Choose a period preset (e.g. this month, this year) and filter the register to it.",
1033
+ "filterByPeriod": "Filter the register to a created/scheduled date range via the per-column date filters.",
980
1034
  "createPlan": "Open the \"New plan\" action from the page header and persist a new treatment plan for the patient.",
981
1035
  "createAppointmentForCare": "From a planned care row action, schedule an appointment for that treatment.",
982
1036
  "generateInvoice": "Bill a completed treatment: create the doctor bill / invoice the selected care sits on.",
@@ -1028,6 +1082,18 @@
1028
1082
  "exportCsv": "Trigger the CSV export of the current filtered set."
1029
1083
  }
1030
1084
  },
1085
+ "invoices": {
1086
+ "workflows": {
1087
+ "filterInvoices": "Narrow the ledger by number, relation, status, date range or amount using the per-column filters.",
1088
+ "sortLedger": "Re-sort the ledger by any column (e.g. issue date, total, balance).",
1089
+ "paginate": "Move to another page of the ledger.",
1090
+ "exportLedger": "Export the current (optionally filtered) ledger from the page-header table-tools cluster — CSV / Excel / PDF.",
1091
+ "viewInvoice": "Open a single invoice from its row action to inspect line items and payment history.",
1092
+ "downloadPdf": "Download the selected invoice as a PDF from its row action.",
1093
+ "sendReminder": "Send a payment reminder for the selected invoice through its eligible channel (email or SMS).",
1094
+ "deleteInvoice": "Delete the selected invoice from its row action. Paid invoices cannot be deleted. Irreversible."
1095
+ }
1096
+ },
1031
1097
  "marketplaceAppShell": {
1032
1098
  "workflows": {
1033
1099
  "navigate": "Navigate to one of the app sections via the sidebar nav (or the embedded tab strip). Routing is consumer-owned, so the destination resolves through the host router.",
@@ -1090,7 +1156,7 @@
1090
1156
  "sendReminders": "Send an appointment or balance reminder to the selected patients through their eligible channel (email or SMS).",
1091
1157
  "tagPatients": "Add a tag to every selected patient.",
1092
1158
  "deletePatients": "Delete the selected patients. Archived patients cannot be deleted. Irreversible.",
1093
- "applyView": "Choose a saved view from the switcher to apply its filter and sort (and saved column layout) to the roster."
1159
+ "exportRoster": "Export the current (optionally filtered) patient roster from the page-header table-tools cluster CSV / Excel / PDF."
1094
1160
  }
1095
1161
  },
1096
1162
  "practiceProfileHero": {
@@ -1127,6 +1193,18 @@
1127
1193
  "dismissAlert": "Dismiss an item from the top-of-page alerts strip. Persists the dismissal so it stays hidden."
1128
1194
  }
1129
1195
  },
1196
+ "services": {
1197
+ "workflows": {
1198
+ "filterServices": "Narrow the catalogue by name, code, category, VAT rate or active status using the per-column filters.",
1199
+ "sortCatalogue": "Re-sort the catalogue by any column (e.g. price, duration, active).",
1200
+ "compactActions": "Toggle the ColumnToggle settings-footer switch to compact the per-row action column.",
1201
+ "toggleActive": "Flip a service’s availability via its per-row Active toggle so it is offered (or withdrawn) on new plans.",
1202
+ "exportCatalogue": "Export the current (optionally filtered) catalogue from the page-header table-tools cluster — CSV / Excel / PDF.",
1203
+ "editService": "Edit the selected service (e.g. price, duration, VAT) from its row action.",
1204
+ "duplicateService": "Duplicate the selected service into a new editable copy from its row action.",
1205
+ "deleteService": "Delete the selected service from its row action. A service in use on a plan cannot be deleted. Irreversible."
1206
+ }
1207
+ },
1130
1208
  "settings": {
1131
1209
  "workflows": {
1132
1210
  "switchSection": "Switch the active settings section (Profile / Notifications / Billing / Security) via the vertical tab strip.",
@@ -1155,6 +1233,18 @@
1155
1233
  "completeEnvelope": "Finalise the envelope once every required field carries a signature, persisting the completed document."
1156
1234
  }
1157
1235
  },
1236
+ "tasks": {
1237
+ "workflows": {
1238
+ "filterTasks": "Narrow the roster by title, type, assignee, due range or status using the per-column filters.",
1239
+ "filterFromNotice": "Apply a WarningStack notice’s \"View\" action (e.g. \"View overdue\", \"View collections\") to narrow the roster to the flagged tasks.",
1240
+ "sortRoster": "Re-sort the roster by any column (e.g. soonest due first, created date).",
1241
+ "toggleDone": "Mark a task as done (or reopen it) via its per-row done toggle.",
1242
+ "compactActions": "Toggle the ColumnToggle settings-footer switch to compact the per-row action column.",
1243
+ "exportRoster": "Export the current (optionally filtered) roster from the page-header table-tools cluster — CSV / Excel / PDF.",
1244
+ "editTask": "Edit the selected task from its row action.",
1245
+ "deleteTask": "Delete the selected task from its row action. Completed tasks cannot be deleted. Irreversible."
1246
+ }
1247
+ },
1158
1248
  "twoFactorLogin": {
1159
1249
  "workflows": {
1160
1250
  "enterCode": "Type the 6-digit verification code into the OTP field.",
@@ -1170,6 +1260,18 @@
1170
1260
  "configurePackage": "In the basket, set the quantity or tier for a tiered/quantity package and read back the chosen value; the monthly-price-increase summary recomputes.",
1171
1261
  "confirmUpgrade": "Confirm the upgrade — add the configured package to the practice subscription and bill the prorated partial period. Persists a billing change."
1172
1262
  }
1263
+ },
1264
+ "warehouse": {
1265
+ "workflows": {
1266
+ "filterInventory": "Narrow the inventory by product, SKU, category, supplier or stock status using the per-column filters.",
1267
+ "sortInventory": "Re-sort the inventory by any column (e.g. in-stock, total value, last restocked).",
1268
+ "compactActions": "Toggle the ColumnToggle settings-footer switch to compact the per-row action column.",
1269
+ "exportInventory": "Export the current (optionally filtered) inventory from the page-header table-tools cluster — CSV / Excel / PDF.",
1270
+ "stockIn": "Record incoming stock for the selected item from its row action.",
1271
+ "stockOut": "Record outgoing stock for the selected item from its row action.",
1272
+ "editItem": "Edit the selected inventory item (e.g. min-stock threshold, supplier) from its row action.",
1273
+ "importFatturapa": "Open the FatturaPA XML import dialog, upload supplier e-invoice XML files, review the classified line preview, deselect any unwanted lines, and confirm to create articles and stock movements."
1274
+ }
1173
1275
  }
1174
1276
  }
1175
1277
  }
@@ -36,5 +36,11 @@ export declare const APPOINTMENT_STATE_BADGE_DEFAULT: BadgeVariant;
36
36
  */
37
37
  export declare function appointmentStateBadge(state: string): BadgeVariant;
38
38
  export declare function colorIdToToken(colorId: number | string | null | undefined): string;
39
+ /**
40
+ * Avatar-fill variant of {@link colorIdToToken} — returns the same operator
41
+ * hue at an AA-safe darkness for swatches that carry the Avatar's light
42
+ * initials. Pair it with the bright -500 dot from {@link colorIdToToken}.
43
+ */
44
+ export declare function colorIdToAvatarToken(colorId: number | string | null | undefined): string;
39
45
  export { isSafeEntityUrl } from '../is-safe-url';
40
46
  //# sourceMappingURL=entity-card.d.ts.map
@@ -1,3 +1,3 @@
1
- export { entitySurfaceVariants, CARE_PLAN_STATE_BADGE, APPOINTMENT_STATE_BADGE, APPOINTMENT_STATE_BADGE_DEFAULT, appointmentStateBadge, colorIdToToken, isSafeEntityUrl, } from './entity-card';
1
+ export { entitySurfaceVariants, CARE_PLAN_STATE_BADGE, APPOINTMENT_STATE_BADGE, APPOINTMENT_STATE_BADGE_DEFAULT, appointmentStateBadge, colorIdToToken, colorIdToAvatarToken, isSafeEntityUrl, } from './entity-card';
2
2
  export type { CarePlanState, AppointmentState } from './entity-card';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,21 @@
1
+ import { type ReactElement, type ReactNode } from 'react';
2
+ import type { PatientField } from './patient-fields';
3
+ /** A neutral pill with high-contrast text + an optional leading glyph. */
4
+ export declare function NeutralChip({ icon, mono, children, }: {
5
+ icon?: ReactElement;
6
+ mono?: boolean;
7
+ children: ReactNode;
8
+ }): ReactNode;
9
+ /** Sex chip — Venus / Mars / User glyph + localised label. Female / male carry a
10
+ * tonal pink / blue FILL; unspecified stays the neutral pill. */
11
+ export declare function SexChip({ code }: {
12
+ code: string;
13
+ }): ReactNode;
14
+ /** Age chip — hourglass glyph + localised, pluralised age. */
15
+ export declare function AgeChip({ years }: {
16
+ years: number;
17
+ }): ReactNode;
18
+ export declare function FieldValue({ field }: {
19
+ field: PatientField;
20
+ }): ReactNode;
21
+ //# sourceMappingURL=field-value.d.ts.map
@@ -0,0 +1,20 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { PatientFieldSection } from './patient-fields';
3
+ export interface FieldVisibilityCogProps {
4
+ /** The sectioned field catalogue. */
5
+ sections: PatientFieldSection[];
6
+ /** Current ordered visible field ids. */
7
+ visible: string[];
8
+ /** Show / hide a single field. */
9
+ onToggleField: (fieldId: string) => void;
10
+ /** Show / hide every field in a section. */
11
+ onToggleSection: (sectionId: string, show: boolean) => void;
12
+ /** Move a field onto another field's slot within its section. */
13
+ onMoveFieldOnto: (fromId: string, toId: string) => void;
14
+ /** Reset to the default field set / order. */
15
+ onReset: () => void;
16
+ /** Override the cog trigger's accessible name. */
17
+ label?: string;
18
+ }
19
+ export declare function FieldVisibilityCog({ sections, visible, onToggleField, onToggleSection, onMoveFieldOnto, onReset, label, }: FieldVisibilityCogProps): ReactNode;
20
+ //# sourceMappingURL=field-visibility-cog.d.ts.map
@@ -0,0 +1,36 @@
1
+ import { type PatientField, type PatientFieldSection } from './patient-fields';
2
+ export interface UsePatientFieldVisibilityOptions {
3
+ /** Controlled ordered list of visible field ids. */
4
+ value?: string[];
5
+ /** Uncontrolled initial order. Omit both ⇒ every field, declaration order. */
6
+ defaultValue?: string[];
7
+ /** Fired on any show / hide / reorder, with the next ordered visible set. */
8
+ onChange?: (orderedIds: string[]) => void;
9
+ }
10
+ export interface PatientFieldVisibility {
11
+ /** Current ordered list of visible field ids (filtered to known fields). */
12
+ visible: string[];
13
+ /** Flat declaration-order catalogue of every field id ("show everything"). */
14
+ catalogueIds: string[];
15
+ /** field id → its field + owning section id. */
16
+ fieldById: Map<string, {
17
+ field: PatientField;
18
+ sectionId: string;
19
+ }>;
20
+ /** Replace the visible set / order (filtered to known fields). */
21
+ setOrder: (orderedIds: string[]) => void;
22
+ /** Show or hide a single field. */
23
+ toggleField: (fieldId: string) => void;
24
+ /** Show or hide every field in a section. */
25
+ toggleSection: (sectionId: string, show: boolean) => void;
26
+ /**
27
+ * Move a field to land at another field's slot, WITHIN its section's
28
+ * visible subsequence. Cross-section moves are ignored — sections stay in
29
+ * declaration order. Drives both pointer drops and keyboard (Alt+Arrow).
30
+ */
31
+ moveFieldOnto: (fromId: string, toId: string) => void;
32
+ /** Reset to `defaultValue` (or the full catalogue when none was given). */
33
+ reset: () => void;
34
+ }
35
+ export declare function usePatientFieldVisibility(sections: PatientFieldSection[], { value, defaultValue, onChange }?: UsePatientFieldVisibilityOptions): PatientFieldVisibility;
36
+ //# sourceMappingURL=field-visibility.d.ts.map
@@ -0,0 +1,119 @@
1
+ import type { ReactElement, ReactNode } from 'react';
2
+ /**
3
+ * Canonical field TYPE. When set (and no explicit `value` is supplied), the
4
+ * kit renders the field's canonical chip from the shared `<FieldValue>`
5
+ * registry instead of plain text — so the SAME field type looks the same on
6
+ * every surface. Each chip is a high-contrast neutral pill with a glyph:
7
+ *
8
+ * - `sex` → Venus / Mars / User glyph + localised label
9
+ * - `age` → hourglass glyph + localised, pluralised age
10
+ * - `dob` → calendar glyph + locale-formatted date
11
+ * - `fiscalCode` → hash glyph + monospace code (already mono — no `mono` flag
12
+ * needed; copy + PHI lock stay the row-level affordance via
13
+ * `copyable` / `sensitive`)
14
+ * - `discount` → `TransactionChip` `state="discount"` (the canonical monetary
15
+ * discount chip — magnitude + `currency`, sign owned by the chip)
16
+ * - `email` → a `mailto:` `Link` (the address is both display + target)
17
+ * - `phone` → a `tel:` `Link` (formatted display, target normalised to
18
+ * `+` and digits)
19
+ *
20
+ * The raw datum is read from `editValue` (the same scalar that seeds the
21
+ * editor): a number for `age` / `discount`, an ISO string or `Date` for `dob`,
22
+ * a code string for `sex`, the code string for `fiscalCode`. For the contact
23
+ * link kinds the DISPLAY string is read from `value` (or `editValue`) and the
24
+ * href is derived from it — so a plain-string `value` still becomes a link.
25
+ * For every OTHER kind an explicit `value` ALWAYS wins, so a consumer can still
26
+ * override per placement.
27
+ */
28
+ export type PatientFieldKind = 'sex' | 'age' | 'dob' | 'fiscalCode' | 'discount' | 'email' | 'phone';
29
+ /** Editor control rendered when a field enters inline-edit mode. */
30
+ export type PatientFieldEditType = 'text' | 'textarea' | 'select' | 'boolean' | 'date' | 'number' | 'email' | 'phone' | 'fiscalCode';
31
+ /** A choice for an `editType: 'select'` field. */
32
+ export interface PatientFieldOption {
33
+ value: string;
34
+ label: string;
35
+ }
36
+ /**
37
+ * Raw value seeded into an editor. The kit never inspects this beyond
38
+ * handing it to the matching control and back through a save callback.
39
+ */
40
+ export type PatientFieldEditValue = string | number | boolean | Date | null | undefined;
41
+ /** One label→value patient field. */
42
+ export interface PatientField {
43
+ /**
44
+ * Stable field key — drives visibility, ordering, the `data-field-id`
45
+ * hook, and agent addressing. MUST NOT be the value (no PHI in keys).
46
+ */
47
+ id: string;
48
+ /** Display label (already localised by the consumer, or a kit label). */
49
+ label: string;
50
+ /**
51
+ * Display node — formatted by the consumer (Badge / Tag / Link / text).
52
+ * Optional: omit it and set `kind` to let the kit render the field's
53
+ * canonical chip from `editValue`. When present, `value` ALWAYS wins.
54
+ */
55
+ value?: ReactNode;
56
+ /**
57
+ * Canonical field type — when set and `value` is omitted, the kit renders
58
+ * the matching canonical chip from the shared registry. Presentation only;
59
+ * NEVER emitted into any `data-*` attribute (same rule as `sensitive`).
60
+ */
61
+ kind?: PatientFieldKind;
62
+ /** Leading icon (a single lucide element). */
63
+ icon?: ReactElement | null;
64
+ /** Render the copy-to-clipboard affordance (fiscal code, ids). */
65
+ copyable?: boolean;
66
+ /** Text written to the clipboard when `copyable`. */
67
+ copyText?: string;
68
+ /** Render the value monospaced (codes, ids). */
69
+ mono?: boolean;
70
+ /**
71
+ * High-sensitivity PHI marker — renders a lock glyph next to the label.
72
+ * Presentation only; NEVER emitted into any `data-*` attribute.
73
+ */
74
+ sensitive?: boolean;
75
+ /** Whether this field can be inline-edited (consumer gates by permission). */
76
+ editable?: boolean;
77
+ /** Control used in edit mode. Defaults to `'text'`. */
78
+ editType?: PatientFieldEditType;
79
+ /** Options for `editType: 'select'`. */
80
+ options?: PatientFieldOption[];
81
+ /** Value seeded into the editor when editing begins. */
82
+ editValue?: PatientFieldEditValue;
83
+ /** Currency code for `editType: 'number'` (renders a currency input). */
84
+ currency?: string;
85
+ }
86
+ /** A labelled, collapsible group of fields. */
87
+ export interface PatientFieldSection {
88
+ /** Stable section key. */
89
+ id: string;
90
+ /** Section heading. */
91
+ heading: string;
92
+ fields: PatientField[];
93
+ /** Wrap the section in a Collapsible (default `true`). Honoured by PatientDetails. */
94
+ collapsible?: boolean;
95
+ /** Initial open state when `collapsible` (default `true`). */
96
+ defaultOpen?: boolean;
97
+ }
98
+ /** The flat declaration-order list of every field id — the "show everything" default. */
99
+ export declare function patientFieldCatalogue(sections: PatientFieldSection[]): string[];
100
+ /** A section paired with its currently-visible fields, in the chosen order. */
101
+ export interface ResolvedPatientSection {
102
+ section: PatientFieldSection;
103
+ fields: PatientField[];
104
+ }
105
+ /**
106
+ * Project `sections` to the visible fields per section, ordered by
107
+ * `visibleFieldOrder`. This is the single piece of visibility logic shared
108
+ * by every patient surface, so the card and the details panel always agree
109
+ * on what is shown and in what order.
110
+ *
111
+ * `visibleFieldOrder` omitted (`undefined`) ⇒ every field visible in
112
+ * declaration order ("show everything by default", design doc D3). An explicit
113
+ * empty array `[]` ⇒ NO fields visible — a surface that starts collapsed and
114
+ * reveals fields via the customize-fields cog. Unknown ids are ignored.
115
+ * Sections stay in declaration order; only intra-section field order follows
116
+ * `visibleFieldOrder`.
117
+ */
118
+ export declare function resolveVisibleFields(sections: PatientFieldSection[], visibleFieldOrder?: string[]): ResolvedPatientSection[];
119
+ //# sourceMappingURL=patient-fields.d.ts.map
@@ -1,4 +1,4 @@
1
- import { A as e } from "../../_chunks/agenda-card-BxSFkqgY.js";
1
+ import { A as e } from "../../_chunks/agenda-card-BQ-IKAru.js";
2
2
  import { a as d } from "../../_chunks/agenda-card.agent-mTCrkKSZ.js";
3
3
  import { i as g } from "../../_chunks/is-safe-url-DkETxeHz.js";
4
4
  export {
@@ -1,4 +1,4 @@
1
- import { A as r, a as g } from "../../_chunks/agenda-tray-g0kg7HwB.js";
1
+ import { A as r, a as g } from "../../_chunks/agenda-tray-CGXRk58j.js";
2
2
  export {
3
3
  r as AgendaTray,
4
4
  g as agendaTrayAgent
@@ -1,4 +1,4 @@
1
- import { A as e, a as o } from "../../_chunks/ai-consent-banner-CXlsNX1c.js";
1
+ import { A as e, a as o } from "../../_chunks/ai-consent-banner-Be-h9mRI.js";
2
2
  export {
3
3
  e as AiConsentBanner,
4
4
  o as aiConsentBannerAgent
@@ -12,10 +12,44 @@ export interface AiToolsRailTool {
12
12
  /** Panel body for this tool. Rendered inline-start of the strip when
13
13
  * `side='end'` (mirrored for `'start'`). The consumer composes it. */
14
14
  panel: ReactNode;
15
+ /**
16
+ * Optional non-scrolling header for this tool's panel. Rendered pinned at
17
+ * the top of the open panel — above the scroll region — so a tool's title /
18
+ * filters stay visible as the body scrolls. This is the rail-level home for
19
+ * a sticky tool header; every tool gets it for free.
20
+ */
21
+ header?: ReactNode;
22
+ /**
23
+ * When true the panel body is NOT wrapped in the rail's `ScrollArea` — the
24
+ * tool fills the (height-bounded) panel and owns its own scroll/layout.
25
+ * Use for self-scrolling tools (e.g. `AppointmentTimeline`, whose infinite
26
+ * scroll + today-anchoring + edge fades require it to be the scroll
27
+ * container). Default `false` (the rail scrolls the body).
28
+ */
29
+ fill?: boolean;
15
30
  /** Optional unseen / notification count shown on the strip icon. */
16
31
  badgeCount?: number;
17
32
  /** When true the icon is non-interactive and skipped by roving focus. */
18
33
  disabled?: boolean;
34
+ /**
35
+ * Scope tier (drives the two-group divider). The two scope values render in
36
+ * array order with a divider at the boundary between them — order the array
37
+ * so the groups stay contiguous. A divider only appears when BOTH groups are
38
+ * present; omit `scope` on every tool for an ungrouped strip (legacy). The
39
+ * rail attaches no meaning beyond grouping — the host decides which value
40
+ * leads (e.g. the Control Room pins favourites first).
41
+ */
42
+ scope?: 'global' | 'contextual';
43
+ /**
44
+ * When true this icon joins the drag-and-drop / `Alt`+Arrow reorder run.
45
+ * The host supplies `onReorder` and owns the resulting order. Moves are
46
+ * confined to the contiguous run of `reorderable` tools — so if EVERY tool
47
+ * is `reorderable` the run is the whole strip and a tool can be dragged
48
+ * across the scope divider; the host's `onReorder` decides what crossing it
49
+ * means (e.g. the Control Room reads it as pin / unpin). Reordering never
50
+ * changes focus roving — focus follows the moved tool to its new slot.
51
+ */
52
+ reorderable?: boolean;
19
53
  }
20
54
  /**
21
55
  * Curated imperative handle for AiToolsRail. Exposed as the forwardRef
@@ -61,6 +95,47 @@ export interface AiToolsRailProps extends VariantProps<typeof railVariants> {
61
95
  * Enter / double-click resets to the token-driven default. Default `false`.
62
96
  */
63
97
  resizablePanel?: boolean;
98
+ /**
99
+ * Fires when the user reorders the `reorderable` run (drag-drop or
100
+ * `Alt`+Arrow). `from` / `to` are indices into `tools`; the host applies the
101
+ * move to the array it passes back. Reordering is enabled when this callback
102
+ * is supplied AND at least one tool is `reorderable`. When the whole strip is
103
+ * reorderable, `to` may land in the other scope group — the host interprets
104
+ * the crossing (and may treat it as a no-op, e.g. reordering within a
105
+ * host-ordered group).
106
+ */
107
+ onReorder?: (from: number, to: number) => void;
108
+ /**
109
+ * Optional override for the polite live-region message announced after a
110
+ * reorder. Lets the host phrase membership-aware moves (e.g. "Pinned X to
111
+ * favourites") instead of the generic "moved to position N". Return an empty
112
+ * string to stay silent (e.g. for a move the host treats as a no-op). When
113
+ * omitted, the rail announces the generic run-relative position.
114
+ */
115
+ formatReorderAnnouncement?: (args: {
116
+ tool: AiToolsRailTool;
117
+ from: number;
118
+ to: number;
119
+ }) => string;
120
+ /**
121
+ * Optional per-icon overlay control, rendered as a sibling of each strip
122
+ * IconButton (the same positioned box the notification badge uses). Use for
123
+ * a small affordance such as a pin toggle — the rail attaches no meaning to
124
+ * what it renders. Receives the tool and its index / active state.
125
+ */
126
+ renderToolAffordance?: (tool: AiToolsRailTool, context: {
127
+ index: number;
128
+ isActive: boolean;
129
+ isRovingTarget: boolean;
130
+ }) => ReactNode;
131
+ /**
132
+ * Optional non-scrolling header rendered at the top of the OPEN tool panel,
133
+ * above its scroll region. Host-owned content (e.g. a pin / unpin control) —
134
+ * the rail attaches no meaning. Receives the active tool.
135
+ */
136
+ renderPanelHeader?: (tool: AiToolsRailTool, context: {
137
+ isActive: boolean;
138
+ }) => ReactNode;
64
139
  className?: string;
65
140
  }
66
141
  export declare const AiToolsRail: import("react").ForwardRefExoticComponent<AiToolsRailProps & import("react").RefAttributes<AiToolsRailHandle>>;
@@ -1,4 +1,4 @@
1
- import { A as i, a as l } from "../../_chunks/ai-tools-rail-BA_sqy1A.js";
1
+ import { A as i, a as l } from "../../_chunks/ai-tools-rail-B5NEghsp.js";
2
2
  export {
3
3
  i as AiToolsRail,
4
4
  l as aiToolsRailAgent
@@ -13,6 +13,11 @@ export interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'>
13
13
  onOpenChange?: (open: boolean) => void;
14
14
  icon?: ReactNode;
15
15
  live?: 'assertive' | 'polite' | 'off';
16
+ /** Compact mode: clamps `Alert.Title` to 2 lines (with a tooltip when the
17
+ * title is truncated) and `Alert.Description` to 2 lines (with a "Read more"
18
+ * toggle). Opt-in — leave off for standalone alerts whose full message must
19
+ * always be visible. */
20
+ clamp?: boolean;
16
21
  }
17
22
  export type { AlertTitleProps };
18
23
  export declare const Alert: import("react").ForwardRefExoticComponent<AlertProps & import("react").RefAttributes<HTMLDivElement>> & {
@@ -1,4 +1,4 @@
1
- import { A as o } from "../../_chunks/alert-_mUKLmwA.js";
1
+ import { A as o } from "../../_chunks/alert-CHYZ96tR.js";
2
2
  export {
3
3
  o as Alert
4
4
  };
@@ -1,4 +1,4 @@
1
- import { A as s } from "../../_chunks/anamnesis-card-DRmE24OQ.js";
1
+ import { A as s } from "../../_chunks/anamnesis-card-DvYCa16e.js";
2
2
  export {
3
3
  s as AnamnesisCard
4
4
  };
@@ -0,0 +1,15 @@
1
+ export declare const FACE_FRONT_VIEWBOX = "0 0 200 240";
2
+ export declare const FACE_FRONT_SIL = "M100.0 24.0 C104.8 24.0 109.9 23.9 114.4 24.2 C118.9 24.5 122.7 25.0 126.9 25.9 C131.0 26.9 135.6 28.1 139.1 29.9 C142.6 31.7 145.4 33.9 147.8 36.5 C150.3 39.1 152.4 42.4 154.0 45.5 C155.6 48.7 156.7 51.8 157.6 55.7 C158.4 59.6 158.9 64.6 159.0 68.9 C159.1 73.3 158.7 77.5 158.4 81.8 C158.1 86.2 158.0 90.4 157.5 94.9 C157.0 99.5 156.4 104.2 155.4 109.0 C154.4 113.7 152.9 119.2 151.2 123.4 C149.5 127.7 147.3 131.3 145.3 134.4 C143.2 137.4 141.1 139.4 138.7 141.7 C136.4 143.9 133.4 146.1 131.0 147.9 C128.6 149.6 126.7 150.7 124.5 152.0 C122.2 153.2 120.0 154.4 117.6 155.3 C115.2 156.3 112.8 157.2 109.9 157.8 C106.9 158.3 103.3 158.6 100.0 158.6 C96.7 158.6 93.1 158.3 90.1 157.8 C87.2 157.2 84.8 156.3 82.4 155.3 C80.0 154.4 77.8 153.2 75.5 152.0 C73.3 150.7 71.4 149.6 69.0 147.9 C66.6 146.1 63.6 143.9 61.3 141.7 C58.9 139.4 56.8 137.4 54.7 134.4 C52.7 131.3 50.5 127.7 48.8 123.4 C47.1 119.2 45.6 113.7 44.6 109.0 C43.6 104.2 43.0 99.5 42.5 94.9 C42.0 90.4 41.9 86.2 41.6 81.8 C41.3 77.5 40.9 73.3 41.0 68.9 C41.1 64.6 41.6 59.6 42.4 55.7 C43.3 51.8 44.4 48.7 46.0 45.5 C47.6 42.4 49.7 39.1 52.2 36.5 C54.6 33.9 57.4 31.7 60.9 29.9 C64.4 28.1 69.0 26.9 73.1 25.9 C77.3 25.0 81.1 24.5 85.6 24.2 C90.1 23.9 95.2 24.0 100.0 24.0 Z";
3
+ export declare const FACE_FRONT_INK = "M60.0 57.4 C61.4 57.3 63.1 55.0 65.0 54.2 C67.0 53.4 69.1 52.9 71.5 52.6 C74.0 52.3 76.7 52.0 79.8 52.5 C83.0 52.9 89.1 56.0 90.7 55.4 C92.3 54.8 91.3 50.0 89.4 48.8 C87.4 47.5 82.3 48.2 79.0 48.1 C75.7 48.0 72.5 47.6 69.6 48.0 C66.8 48.4 64.2 49.3 62.0 50.4 C59.8 51.4 56.7 53.4 56.4 54.5 C56.1 55.7 58.5 57.4 60.0 57.4 Z M140.0 57.4 C138.6 57.3 136.9 55.0 135.0 54.2 C133.0 53.4 130.9 52.9 128.5 52.6 C126.0 52.3 123.3 52.0 120.2 52.5 C117.0 52.9 110.9 56.0 109.3 55.4 C107.7 54.8 108.7 50.0 110.6 48.8 C112.6 47.5 117.7 48.2 121.0 48.1 C124.3 48.0 127.5 47.6 130.4 48.0 C133.2 48.4 135.8 49.3 138.0 50.4 C140.2 51.4 143.3 53.4 143.6 54.5 C143.9 55.7 141.5 57.4 140.0 57.4 Z M73.5 66.8 a2.4 2.4 0 1 0 4.8 0 a2.4 2.4 0 1 0 -4.8 0 M121.7 66.8 a2.4 2.4 0 1 0 4.8 0 a2.4 2.4 0 1 0 -4.8 0 M81.3 120.0 C81.4 120.7 82.5 121.4 83.3 122.0 C84.1 122.6 84.9 123.1 86.0 123.7 C87.1 124.4 88.5 125.3 89.9 125.9 C91.3 126.5 93.0 126.9 94.7 127.3 C96.4 127.6 98.2 127.8 100.0 127.8 C101.8 127.8 103.6 127.6 105.3 127.3 C107.0 126.9 108.7 126.5 110.1 125.9 C111.5 125.3 112.9 124.4 114.0 123.7 C115.1 123.1 115.9 122.6 116.7 122.0 C117.5 121.4 118.6 120.7 118.7 120.0 C118.8 119.3 118.1 118.5 117.4 117.8 C116.7 117.1 115.7 116.6 114.6 115.9 C113.5 115.2 112.4 114.2 110.9 113.6 C109.4 113.0 107.2 112.4 105.4 112.3 C103.6 112.2 101.8 112.9 100.0 112.9 C98.2 112.9 96.4 112.2 94.6 112.3 C92.8 112.4 90.6 113.0 89.1 113.6 C87.6 114.2 86.5 115.2 85.4 115.9 C84.3 116.6 83.3 117.1 82.6 117.8 C81.9 118.5 81.2 119.3 81.3 120.0 Z M83.6 119.5 C83.6 119.9 85.3 120.3 86.1 120.5 C86.9 120.7 87.4 120.6 88.3 120.7 C89.2 120.7 90.4 120.8 91.6 120.9 C92.8 121.0 94.2 121.3 95.6 121.4 C97.0 121.5 98.5 121.6 100.0 121.6 C101.5 121.6 103.0 121.5 104.4 121.4 C105.8 121.3 107.2 121.0 108.4 120.9 C109.6 120.8 110.8 120.7 111.7 120.7 C112.6 120.6 113.1 120.7 113.9 120.5 C114.7 120.3 116.4 119.9 116.4 119.5 C116.4 119.2 114.9 118.5 114.1 118.2 C113.2 117.9 112.2 117.8 111.2 117.7 C110.2 117.6 109.0 117.4 107.8 117.4 C106.6 117.3 105.4 117.4 104.1 117.4 C102.8 117.4 101.4 117.4 100.0 117.4 C98.6 117.4 97.2 117.4 95.9 117.4 C94.6 117.4 93.4 117.3 92.2 117.4 C91.0 117.4 89.8 117.6 88.8 117.7 C87.8 117.8 86.8 117.9 85.9 118.2 C85.1 118.5 83.6 119.2 83.6 119.5 Z";
4
+ export declare const FACE_FRONT_DETAIL = "M66.1 66.7 C66.4 66.8 67.0 67.1 67.6 67.3 C68.1 67.5 68.6 67.8 69.4 68.0 C70.1 68.3 71.0 68.7 72.0 69.0 C73.1 69.2 74.6 69.4 75.8 69.5 C77.0 69.5 78.1 69.4 79.2 69.3 C80.4 69.2 81.6 68.9 82.6 68.7 C83.5 68.4 84.2 68.2 84.8 67.9 C85.3 67.7 85.9 67.6 85.9 67.3 C85.9 66.9 85.3 66.4 84.8 66.0 C84.2 65.7 83.5 65.2 82.6 65.0 C81.6 64.7 80.4 64.5 79.2 64.4 C78.1 64.3 77.0 64.3 75.8 64.4 C74.6 64.4 73.1 64.5 72.0 64.6 C71.0 64.8 70.1 65.0 69.4 65.2 C68.6 65.4 67.9 65.7 67.6 65.8 M114.1 67.3 C114.3 67.4 114.7 67.7 115.2 67.9 C115.8 68.2 116.5 68.4 117.4 68.7 C118.4 68.9 119.6 69.2 120.8 69.3 C121.9 69.4 123.0 69.5 124.2 69.5 C125.4 69.4 126.9 69.2 128.0 69.0 C129.0 68.7 129.9 68.3 130.6 68.0 C131.4 67.8 131.9 67.5 132.4 67.3 C133.0 67.1 133.9 66.9 133.9 66.7 C133.9 66.4 133.0 66.1 132.4 65.8 C131.9 65.6 131.4 65.4 130.6 65.2 C129.9 65.0 129.0 64.8 128.0 64.6 C126.9 64.5 125.4 64.4 124.2 64.4 C123.0 64.3 121.9 64.3 120.8 64.4 C119.6 64.5 118.4 64.7 117.4 65.0 C116.5 65.2 115.6 65.9 115.2 66.0 M100.0 62.0 C100.0 63.0 100.0 66.1 100.0 68.1 C100.0 70.1 100.0 72.0 100.0 73.8 C100.0 75.6 100.0 77.1 100.0 78.9 C100.0 80.6 100.0 82.2 100.0 84.2 C100.0 86.1 100.0 88.6 100.0 90.5 C100.0 92.4 100.0 94.7 100.0 95.5 M89.3 98.0 C87.3 101.0 88.3 103.0 97.0 102.9 C100.0 104.4 100.0 104.4 103.0 102.9 C111.7 103.0 112.7 101.0 110.7 98.0 M41.6 74.8 C33.2 74.8 32.5 89.8 38.8 90.8 C40.9 90.8 41.6 87.8 41.6 86.8 M158.4 74.8 C166.8 74.8 167.5 89.8 161.2 90.8 C159.1 90.8 158.4 87.8 158.4 86.8";
5
+ export interface FaceZone {
6
+ id: string;
7
+ labelKey: string;
8
+ side: 'left' | 'right' | 'midline';
9
+ cx: number;
10
+ cy: number;
11
+ rx: number;
12
+ ry: number;
13
+ }
14
+ export declare const FACE_FRONT_ZONES: FaceZone[];
15
+ //# sourceMappingURL=anatomy-face-paths.d.ts.map
@@ -0,0 +1,20 @@
1
+ export interface MuscleArt {
2
+ id: string;
3
+ labelKey: string;
4
+ side: 'left' | 'right' | 'midline';
5
+ cx: number;
6
+ cy: number;
7
+ /** Set on the female pectoralis (breast cut out via evenodd). */
8
+ fillRule?: 'evenodd';
9
+ d: string;
10
+ }
11
+ export interface MuscleFigureArt {
12
+ viewBox: string;
13
+ silhouette: string;
14
+ muscles: MuscleArt[];
15
+ }
16
+ export declare const MUSCLE_MALE_FRONT: MuscleFigureArt;
17
+ export declare const MUSCLE_MALE_BACK: MuscleFigureArt;
18
+ export declare const MUSCLE_FEMALE_FRONT: MuscleFigureArt;
19
+ export declare const MUSCLE_FEMALE_BACK: MuscleFigureArt;
20
+ //# sourceMappingURL=anatomy-muscle-paths.d.ts.map