@alfadocs/ui-kit-debug 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 (463) hide show
  1. package/dist/_chunks/{agenda-card-BxSFkqgY.js → agenda-card-BQ-IKAru.js} +2 -2
  2. package/dist/_chunks/{agenda-card-BxSFkqgY.js.map → agenda-card-BQ-IKAru.js.map} +1 -1
  3. package/dist/_chunks/{agenda-tray-g0kg7HwB.js → agenda-tray-CGXRk58j.js} +2 -2
  4. package/dist/_chunks/{agenda-tray-g0kg7HwB.js.map → agenda-tray-CGXRk58j.js.map} +1 -1
  5. package/dist/_chunks/{ai-consent-banner-CXlsNX1c.js → ai-consent-banner-Be-h9mRI.js} +3 -3
  6. package/dist/_chunks/{ai-consent-banner-CXlsNX1c.js.map → ai-consent-banner-Be-h9mRI.js.map} +1 -1
  7. package/dist/_chunks/ai-tools-rail-B5NEghsp.js +511 -0
  8. package/dist/_chunks/ai-tools-rail-B5NEghsp.js.map +1 -0
  9. package/dist/_chunks/{alert-_mUKLmwA.js → alert-CHYZ96tR.js} +150 -96
  10. package/dist/_chunks/alert-CHYZ96tR.js.map +1 -0
  11. package/dist/_chunks/{anamnesis-card-DRmE24OQ.js → anamnesis-card-DvYCa16e.js} +2 -2
  12. package/dist/_chunks/{anamnesis-card-DRmE24OQ.js.map → anamnesis-card-DvYCa16e.js.map} +1 -1
  13. package/dist/_chunks/anatomy-scheme-CJB6dI6p.js +2445 -0
  14. package/dist/_chunks/anatomy-scheme-CJB6dI6p.js.map +1 -0
  15. package/dist/_chunks/annotation-marker-qt5R9WZX.js +120 -0
  16. package/dist/_chunks/annotation-marker-qt5R9WZX.js.map +1 -0
  17. package/dist/_chunks/{antenatal-schedule-timeline-35ebkcZT.js → antenatal-schedule-timeline-CwXrQRm1.js} +2 -2
  18. package/dist/_chunks/{antenatal-schedule-timeline-35ebkcZT.js.map → antenatal-schedule-timeline-CwXrQRm1.js.map} +1 -1
  19. package/dist/_chunks/appointment-card-C06aZqA7.js +310 -0
  20. package/dist/_chunks/appointment-card-C06aZqA7.js.map +1 -0
  21. package/dist/_chunks/appointment-timeline-BJM0S_Fg.js +386 -0
  22. package/dist/_chunks/appointment-timeline-BJM0S_Fg.js.map +1 -0
  23. package/dist/_chunks/appointment-tray-DRRw5ROi.js +193 -0
  24. package/dist/_chunks/appointment-tray-DRRw5ROi.js.map +1 -0
  25. package/dist/_chunks/{audio-recorder-DYXXnGug.js → audio-recorder-Cpdk5qpQ.js} +2 -2
  26. package/dist/_chunks/{audio-recorder-DYXXnGug.js.map → audio-recorder-Cpdk5qpQ.js.map} +1 -1
  27. package/dist/_chunks/{badge-CqGsX32l.js → badge-DCOqV9mI.js} +32 -27
  28. package/dist/_chunks/badge-DCOqV9mI.js.map +1 -0
  29. package/dist/_chunks/{bishop-score-PJI3AXzA.js → bishop-score-DnYWtZa_.js} +2 -2
  30. package/dist/_chunks/{bishop-score-PJI3AXzA.js.map → bishop-score-DnYWtZa_.js.map} +1 -1
  31. package/dist/_chunks/{bmi-calculator-BZtIJ53x.js → bmi-calculator-zjeY4E7J.js} +2 -2
  32. package/dist/_chunks/{bmi-calculator-BZtIJ53x.js.map → bmi-calculator-zjeY4E7J.js.map} +1 -1
  33. package/dist/_chunks/{booking-C3VqFReX.js → booking-DUBI0oqt.js} +4 -4
  34. package/dist/_chunks/{booking-C3VqFReX.js.map → booking-DUBI0oqt.js.map} +1 -1
  35. package/dist/_chunks/{care-plan-card-CvFGXa2z.js → care-plan-card-C5sTfY9G.js} +5 -5
  36. package/dist/_chunks/{care-plan-card-CvFGXa2z.js.map → care-plan-card-C5sTfY9G.js.map} +1 -1
  37. package/dist/_chunks/{care-plan-entry-card-C3E_gClk.js → care-plan-entry-card-CXnxGCWA.js} +5 -5
  38. package/dist/_chunks/{care-plan-entry-card-C3E_gClk.js.map → care-plan-entry-card-CXnxGCWA.js.map} +1 -1
  39. package/dist/_chunks/care-plan-header-BUwqDTtz.js +206 -0
  40. package/dist/_chunks/care-plan-header-BUwqDTtz.js.map +1 -0
  41. package/dist/_chunks/clinical-note-card-BUvNMNGL.js +436 -0
  42. package/dist/_chunks/clinical-note-card-BUvNMNGL.js.map +1 -0
  43. package/dist/_chunks/{contact-profile-card-Dramqa9C.js → contact-profile-card-DDPwRFiP.js} +2 -2
  44. package/dist/_chunks/{contact-profile-card-Dramqa9C.js.map → contact-profile-card-DDPwRFiP.js.map} +1 -1
  45. package/dist/_chunks/control-room-rail-Y8ryLYsP.js +229 -0
  46. package/dist/_chunks/control-room-rail-Y8ryLYsP.js.map +1 -0
  47. package/dist/_chunks/{cycle-calculator-DmRGJNaT.js → cycle-calculator-CCmPwcBl.js} +2 -2
  48. package/dist/_chunks/{cycle-calculator-DmRGJNaT.js.map → cycle-calculator-CCmPwcBl.js.map} +1 -1
  49. package/dist/_chunks/{dependent-selector-CG_FOHya.js → dependent-selector-DUV4thxX.js} +2 -2
  50. package/dist/_chunks/{dependent-selector-CG_FOHya.js.map → dependent-selector-DUV4thxX.js.map} +1 -1
  51. package/dist/_chunks/{document-scanner-CTubA0-N.js → document-scanner-C_AxLooF.js} +3 -3
  52. package/dist/_chunks/{document-scanner-CTubA0-N.js.map → document-scanner-C_AxLooF.js.map} +1 -1
  53. package/dist/_chunks/{due-date-calculator-BTmsIQqD.js → due-date-calculator-Brdj-euS.js} +3 -3
  54. package/dist/_chunks/{due-date-calculator-BTmsIQqD.js.map → due-date-calculator-Brdj-euS.js.map} +1 -1
  55. package/dist/_chunks/editable-currency-cell-renderer-C9twtALM.js +328 -0
  56. package/dist/_chunks/editable-currency-cell-renderer-C9twtALM.js.map +1 -0
  57. package/dist/_chunks/email-input-DJ7EXklP.js +397 -0
  58. package/dist/_chunks/{email-input-B_Y55f5G.js.map → email-input-DJ7EXklP.js.map} +1 -1
  59. package/dist/_chunks/{entity-card-COhmqHly.js → entity-card-9_62gY7l.js} +38 -20
  60. package/dist/_chunks/{entity-card-COhmqHly.js.map → entity-card-9_62gY7l.js.map} +1 -1
  61. package/dist/_chunks/entity-summary-BxRjFh_4.js +138 -0
  62. package/dist/_chunks/entity-summary-BxRjFh_4.js.map +1 -0
  63. package/dist/_chunks/{fetal-weight-CRz7KE2D.js → fetal-weight-DNCkyeVo.js} +2 -2
  64. package/dist/_chunks/{fetal-weight-CRz7KE2D.js.map → fetal-weight-DNCkyeVo.js.map} +1 -1
  65. package/dist/_chunks/field-value-NXYczdpO.js +415 -0
  66. package/dist/_chunks/field-value-NXYczdpO.js.map +1 -0
  67. package/dist/_chunks/{file-upload-5ScQd4fE.js → file-upload-DwZcAK8D.js} +2 -1
  68. package/dist/_chunks/{file-upload-5ScQd4fE.js.map → file-upload-DwZcAK8D.js.map} +1 -1
  69. package/dist/_chunks/{freemium-paywall-DZ2mBS3w.js → freemium-paywall-WYlNO7yT.js} +2 -2
  70. package/dist/_chunks/{freemium-paywall-DZ2mBS3w.js.map → freemium-paywall-WYlNO7yT.js.map} +1 -1
  71. package/dist/_chunks/{gestational-age-calculator-BleUdhbI.js → gestational-age-calculator-CF2ISaYQ.js} +3 -3
  72. package/dist/_chunks/{gestational-age-calculator-BleUdhbI.js.map → gestational-age-calculator-CF2ISaYQ.js.map} +1 -1
  73. package/dist/_chunks/hash-CysBBS_N.js +17 -0
  74. package/dist/_chunks/hash-CysBBS_N.js.map +1 -0
  75. package/dist/_chunks/{hcg-doubling-CnjDXX6U.js → hcg-doubling-C7bmuaU3.js} +2 -2
  76. package/dist/_chunks/{hcg-doubling-CnjDXX6U.js.map → hcg-doubling-C7bmuaU3.js.map} +1 -1
  77. package/dist/_chunks/{actions-cell-renderer-DrcaxB0w.js → link-cell-renderer-CTXqtXV-.js} +715 -592
  78. package/dist/_chunks/link-cell-renderer-CTXqtXV-.js.map +1 -0
  79. package/dist/_chunks/lock-CKOIn0IK.js +15 -0
  80. package/dist/_chunks/lock-CKOIn0IK.js.map +1 -0
  81. package/dist/_chunks/{marketplace-app-shell-6T9W4Knl.js → marketplace-app-shell-Skhfp6vK.js} +3 -3
  82. package/dist/_chunks/{marketplace-app-shell-6T9W4Knl.js.map → marketplace-app-shell-Skhfp6vK.js.map} +1 -1
  83. package/dist/_chunks/notes-panel-ay8_lPrA.js +158 -0
  84. package/dist/_chunks/notes-panel-ay8_lPrA.js.map +1 -0
  85. package/dist/_chunks/{notification-card-BiESdm8q.js → notification-card-D2jiKSJJ.js} +27 -23
  86. package/dist/_chunks/notification-card-D2jiKSJJ.js.map +1 -0
  87. package/dist/_chunks/{notification-tray-Btb9oQeZ.js → notification-tray-AEun6DN2.js} +2 -2
  88. package/dist/_chunks/{notification-tray-Btb9oQeZ.js.map → notification-tray-AEun6DN2.js.map} +1 -1
  89. package/dist/_chunks/{operator-hero-CP2Nhupm.js → operator-hero-CR0Rqh4-.js} +3 -3
  90. package/dist/_chunks/{operator-hero-CP2Nhupm.js.map → operator-hero-CR0Rqh4-.js.map} +1 -1
  91. package/dist/_chunks/patient-details-Dlhqb5ig.js +675 -0
  92. package/dist/_chunks/patient-details-Dlhqb5ig.js.map +1 -0
  93. package/dist/_chunks/{patient-search-CBC_ySF6.js → patient-search-Be6cLrHR.js} +2 -2
  94. package/dist/_chunks/{patient-search-CBC_ySF6.js.map → patient-search-Be6cLrHR.js.map} +1 -1
  95. package/dist/_chunks/patient-summary-card-WySCMwwA.js +437 -0
  96. package/dist/_chunks/patient-summary-card-WySCMwwA.js.map +1 -0
  97. package/dist/_chunks/patient-table-CHxf3Oqk.js +1110 -0
  98. package/dist/_chunks/patient-table-CHxf3Oqk.js.map +1 -0
  99. package/dist/_chunks/{payment-form-DvjwYVIT.js → payment-form-CxqIXqw7.js} +2 -2
  100. package/dist/_chunks/{payment-form-DvjwYVIT.js.map → payment-form-CxqIXqw7.js.map} +1 -1
  101. package/dist/_chunks/{payment-request-card-DioWKBUq.js → payment-request-card-BcZJwu9z.js} +125 -136
  102. package/dist/_chunks/payment-request-card-BcZJwu9z.js.map +1 -0
  103. package/dist/_chunks/{pdf-viewer-D6BPfW2D.js → pdf-viewer-QfebdLOd.js} +192 -214
  104. package/dist/_chunks/pdf-viewer-QfebdLOd.js.map +1 -0
  105. package/dist/_chunks/{periodontal-chart-card-BuDEMbHE.js → periodontal-chart-card-hRRJY1NN.js} +2 -2
  106. package/dist/_chunks/{periodontal-chart-card-BuDEMbHE.js.map → periodontal-chart-card-hRRJY1NN.js.map} +1 -1
  107. package/dist/_chunks/{practice-results-KrTHqZua.js → practice-results-C6qDfxos.js} +3 -3
  108. package/dist/_chunks/{practice-results-KrTHqZua.js.map → practice-results-C6qDfxos.js.map} +1 -1
  109. package/dist/_chunks/{pregnancy-dating-DORUAOHB.js → pregnancy-dating-CRVWswD-.js} +3 -3
  110. package/dist/_chunks/{pregnancy-dating-DORUAOHB.js.map → pregnancy-dating-CRVWswD-.js.map} +1 -1
  111. package/dist/_chunks/{pregnancy-weight-gain-DVz4rr7-.js → pregnancy-weight-gain-BUNpTsH-.js} +2 -2
  112. package/dist/_chunks/{pregnancy-weight-gain-DVz4rr7-.js.map → pregnancy-weight-gain-BUNpTsH-.js.map} +1 -1
  113. package/dist/_chunks/radiograph-panel.agent-CAX-C3g3.js +558 -0
  114. package/dist/_chunks/radiograph-panel.agent-CAX-C3g3.js.map +1 -0
  115. package/dist/_chunks/{rich-text-editor-BsV7zUdg.js → rich-text-editor-DlCqPixb.js} +410 -394
  116. package/dist/_chunks/{rich-text-editor-BsV7zUdg.js.map → rich-text-editor-DlCqPixb.js.map} +1 -1
  117. package/dist/_chunks/{sign-document-B4DeRhTe.js → sign-document-By6hMOra.js} +2 -2
  118. package/dist/_chunks/{sign-document-B4DeRhTe.js.map → sign-document-By6hMOra.js.map} +1 -1
  119. package/dist/_chunks/{stepper-accordion-Dki6r9ZE.js → stepper-accordion-DC-H-8v4.js} +38 -48
  120. package/dist/_chunks/stepper-accordion-DC-H-8v4.js.map +1 -0
  121. package/dist/_chunks/tab-bar-Bv9nGNdO.js +262 -0
  122. package/dist/_chunks/tab-bar-Bv9nGNdO.js.map +1 -0
  123. package/dist/_chunks/tooth-scheme-BhQoPNBD.js +2131 -0
  124. package/dist/_chunks/tooth-scheme-BhQoPNBD.js.map +1 -0
  125. package/dist/_chunks/{transaction-chip-DK84XCBU.js → transaction-chip-CscoQbxF.js} +88 -61
  126. package/dist/_chunks/transaction-chip-CscoQbxF.js.map +1 -0
  127. package/dist/_chunks/use-clamp-overflow-DQE2kwZ9.js +20 -0
  128. package/dist/_chunks/use-clamp-overflow-DQE2kwZ9.js.map +1 -0
  129. package/dist/_chunks/use-overflow-collapse-BIOzKbni.js +32 -0
  130. package/dist/_chunks/use-overflow-collapse-BIOzKbni.js.map +1 -0
  131. package/dist/_chunks/use-persistent-state-nZwZAnE9.js +24 -0
  132. package/dist/_chunks/use-persistent-state-nZwZAnE9.js.map +1 -0
  133. package/dist/_chunks/{warning-stack-BsgaEbL8.js → warning-stack--sTrrBDA.js} +86 -101
  134. package/dist/_chunks/warning-stack--sTrrBDA.js.map +1 -0
  135. package/dist/_chunks/{workflow-map-Bdam9pGp.js → workflow-map-Dy8mLCqF.js} +3 -3
  136. package/dist/_chunks/{workflow-map-Bdam9pGp.js.map → workflow-map-Dy8mLCqF.js.map} +1 -1
  137. package/dist/_chunks/zoom-out-CgVtf2Wx.js +29 -0
  138. package/dist/_chunks/zoom-out-CgVtf2Wx.js.map +1 -0
  139. package/dist/agent/index.js +5 -4
  140. package/dist/agent/index.js.map +1 -1
  141. package/dist/agent/types.d.ts +19 -2
  142. package/dist/agent/types.d.ts.map +1 -1
  143. package/dist/agent-catalog.json +1253 -86
  144. package/dist/agent-i18n/en.json +108 -6
  145. package/dist/components/_shared/entity-card/entity-card.d.ts +6 -0
  146. package/dist/components/_shared/entity-card/entity-card.d.ts.map +1 -1
  147. package/dist/components/_shared/entity-card/index.d.ts +1 -1
  148. package/dist/components/_shared/entity-card/index.d.ts.map +1 -1
  149. package/dist/components/_shared/field-value.d.ts +21 -0
  150. package/dist/components/_shared/field-value.d.ts.map +1 -0
  151. package/dist/components/_shared/field-visibility-cog.d.ts +20 -0
  152. package/dist/components/_shared/field-visibility-cog.d.ts.map +1 -0
  153. package/dist/components/_shared/field-visibility.d.ts +36 -0
  154. package/dist/components/_shared/field-visibility.d.ts.map +1 -0
  155. package/dist/components/_shared/patient-fields.d.ts +119 -0
  156. package/dist/components/_shared/patient-fields.d.ts.map +1 -0
  157. package/dist/components/agenda-card/index.js +1 -1
  158. package/dist/components/agenda-tray/index.js +1 -1
  159. package/dist/components/ai-consent-banner/index.js +1 -1
  160. package/dist/components/ai-tools-rail/ai-tools-rail.d.ts +75 -0
  161. package/dist/components/ai-tools-rail/ai-tools-rail.d.ts.map +1 -1
  162. package/dist/components/ai-tools-rail/index.js +1 -1
  163. package/dist/components/alert/alert.d.ts +5 -0
  164. package/dist/components/alert/alert.d.ts.map +1 -1
  165. package/dist/components/alert/index.js +1 -1
  166. package/dist/components/anamnesis-card/index.js +1 -1
  167. package/dist/components/anatomy-scheme/anatomy-face-paths.d.ts +15 -0
  168. package/dist/components/anatomy-scheme/anatomy-face-paths.d.ts.map +1 -0
  169. package/dist/components/anatomy-scheme/anatomy-muscle-paths.d.ts +20 -0
  170. package/dist/components/anatomy-scheme/anatomy-muscle-paths.d.ts.map +1 -0
  171. package/dist/components/anatomy-scheme/anatomy-scheme-data.d.ts +121 -0
  172. package/dist/components/anatomy-scheme/anatomy-scheme-data.d.ts.map +1 -0
  173. package/dist/components/anatomy-scheme/anatomy-scheme.agent.d.ts +6 -0
  174. package/dist/components/anatomy-scheme/anatomy-scheme.agent.d.ts.map +1 -0
  175. package/dist/components/anatomy-scheme/anatomy-scheme.d.ts +69 -0
  176. package/dist/components/anatomy-scheme/anatomy-scheme.d.ts.map +1 -0
  177. package/dist/components/anatomy-scheme/index.d.ts +6 -0
  178. package/dist/components/anatomy-scheme/index.d.ts.map +1 -0
  179. package/dist/components/anatomy-scheme/index.js +17 -0
  180. package/dist/components/anatomy-scheme/index.js.map +1 -0
  181. package/dist/components/annotation-marker/annotation-marker.d.ts +33 -0
  182. package/dist/components/annotation-marker/annotation-marker.d.ts.map +1 -0
  183. package/dist/components/annotation-marker/index.d.ts +3 -0
  184. package/dist/components/annotation-marker/index.d.ts.map +1 -0
  185. package/dist/components/annotation-marker/index.js +7 -0
  186. package/dist/components/annotation-marker/index.js.map +1 -0
  187. package/dist/components/appointment-card/appointment-card.d.ts +25 -1
  188. package/dist/components/appointment-card/appointment-card.d.ts.map +1 -1
  189. package/dist/components/appointment-card/index.js +6 -5
  190. package/dist/components/appointment-card/index.js.map +1 -1
  191. package/dist/components/appointment-timeline/appointment-timeline.agent.d.ts +4 -0
  192. package/dist/components/appointment-timeline/appointment-timeline.agent.d.ts.map +1 -0
  193. package/dist/components/appointment-timeline/appointment-timeline.d.ts +66 -0
  194. package/dist/components/appointment-timeline/appointment-timeline.d.ts.map +1 -0
  195. package/dist/components/appointment-timeline/index.d.ts +4 -0
  196. package/dist/components/appointment-timeline/index.d.ts.map +1 -0
  197. package/dist/components/appointment-timeline/index.js +6 -0
  198. package/dist/components/appointment-timeline/index.js.map +1 -0
  199. package/dist/components/audio-recorder/index.js +1 -1
  200. package/dist/components/badge/badge.d.ts +6 -2
  201. package/dist/components/badge/badge.d.ts.map +1 -1
  202. package/dist/components/badge/index.js +1 -1
  203. package/dist/components/bishop-score/index.js +1 -1
  204. package/dist/components/bmi-calculator/index.js +1 -1
  205. package/dist/components/booking/index.js +1 -1
  206. package/dist/components/care-plan-card/index.js +1 -1
  207. package/dist/components/care-plan-entry-card/index.js +1 -1
  208. package/dist/components/care-plan-header/care-plan-header.agent.d.ts +4 -0
  209. package/dist/components/care-plan-header/care-plan-header.agent.d.ts.map +1 -0
  210. package/dist/components/care-plan-header/care-plan-header.d.ts +100 -0
  211. package/dist/components/care-plan-header/care-plan-header.d.ts.map +1 -0
  212. package/dist/components/care-plan-header/index.d.ts +4 -0
  213. package/dist/components/care-plan-header/index.d.ts.map +1 -0
  214. package/dist/components/care-plan-header/index.js +6 -0
  215. package/dist/components/care-plan-header/index.js.map +1 -0
  216. package/dist/components/clinical-note-card/clinical-note-card.d.ts +21 -1
  217. package/dist/components/clinical-note-card/clinical-note-card.d.ts.map +1 -1
  218. package/dist/components/clinical-note-card/index.js +1 -1
  219. package/dist/components/contact-profile-card/index.js +1 -1
  220. package/dist/components/control-room-rail/control-room-context.d.ts +53 -0
  221. package/dist/components/control-room-rail/control-room-context.d.ts.map +1 -0
  222. package/dist/components/control-room-rail/control-room-rail.d.ts +35 -0
  223. package/dist/components/control-room-rail/control-room-rail.d.ts.map +1 -0
  224. package/dist/components/control-room-rail/index.d.ts +5 -0
  225. package/dist/components/control-room-rail/index.d.ts.map +1 -0
  226. package/dist/components/control-room-rail/index.js +9 -0
  227. package/dist/components/control-room-rail/index.js.map +1 -0
  228. package/dist/components/cycle-calculator/index.js +1 -1
  229. package/dist/components/data-table/cell-renderers/actions-cell-renderer.d.ts +18 -0
  230. package/dist/components/data-table/cell-renderers/actions-cell-renderer.d.ts.map +1 -1
  231. package/dist/components/data-table/index.d.ts +1 -1
  232. package/dist/components/data-table/index.d.ts.map +1 -1
  233. package/dist/components/data-table/index.js +32 -31
  234. package/dist/components/dependent-selector/index.js +1 -1
  235. package/dist/components/document-scanner/index.js +1 -1
  236. package/dist/components/due-date-calculator/index.js +2 -2
  237. package/dist/components/email-input/email-input.d.ts.map +1 -1
  238. package/dist/components/email-input/index.js +1 -1
  239. package/dist/components/entity-summary/entity-summary.d.ts +43 -0
  240. package/dist/components/entity-summary/entity-summary.d.ts.map +1 -0
  241. package/dist/components/entity-summary/index.d.ts +3 -0
  242. package/dist/components/entity-summary/index.d.ts.map +1 -0
  243. package/dist/components/entity-summary/index.js +5 -0
  244. package/dist/components/entity-summary/index.js.map +1 -0
  245. package/dist/components/fetal-weight/index.js +1 -1
  246. package/dist/components/file-upload/index.js +1 -1
  247. package/dist/components/freemium-paywall/index.js +1 -1
  248. package/dist/components/gestational-age-calculator/index.js +1 -1
  249. package/dist/components/hcg-doubling/index.js +1 -1
  250. package/dist/components/index.d.ts +9 -0
  251. package/dist/components/index.d.ts.map +1 -1
  252. package/dist/components/notes-panel/index.d.ts +3 -0
  253. package/dist/components/notes-panel/index.d.ts.map +1 -0
  254. package/dist/components/notes-panel/index.js +5 -0
  255. package/dist/components/notes-panel/index.js.map +1 -0
  256. package/dist/components/notes-panel/notes-panel.d.ts +64 -0
  257. package/dist/components/notes-panel/notes-panel.d.ts.map +1 -0
  258. package/dist/components/notification-card/index.js +1 -1
  259. package/dist/components/notification-card/notification-card.d.ts.map +1 -1
  260. package/dist/components/notification-tray/index.js +1 -1
  261. package/dist/components/operator-hero/index.js +1 -1
  262. package/dist/components/patient-details/index.d.ts +5 -0
  263. package/dist/components/patient-details/index.d.ts.map +1 -0
  264. package/dist/components/patient-details/index.js +6 -0
  265. package/dist/components/patient-details/index.js.map +1 -0
  266. package/dist/components/patient-details/patient-details.agent.d.ts +4 -0
  267. package/dist/components/patient-details/patient-details.agent.d.ts.map +1 -0
  268. package/dist/components/patient-details/patient-details.d.ts +96 -0
  269. package/dist/components/patient-details/patient-details.d.ts.map +1 -0
  270. package/dist/components/patient-search/index.js +1 -1
  271. package/dist/components/patient-summary-card/index.js +1 -1
  272. package/dist/components/patient-summary-card/patient-summary-card.agent.d.ts.map +1 -1
  273. package/dist/components/patient-summary-card/patient-summary-card.d.ts +40 -1
  274. package/dist/components/patient-summary-card/patient-summary-card.d.ts.map +1 -1
  275. package/dist/components/patient-table/columns.d.ts +69 -40
  276. package/dist/components/patient-table/columns.d.ts.map +1 -1
  277. package/dist/components/patient-table/index.d.ts +2 -6
  278. package/dist/components/patient-table/index.d.ts.map +1 -1
  279. package/dist/components/patient-table/index.js +8 -9
  280. package/dist/components/patient-table/patient-table.d.ts +38 -4
  281. package/dist/components/patient-table/patient-table.d.ts.map +1 -1
  282. package/dist/components/patient-table/types.d.ts +52 -2
  283. package/dist/components/patient-table/types.d.ts.map +1 -1
  284. package/dist/components/patient-table/use-responsive-columns.d.ts +8 -6
  285. package/dist/components/patient-table/use-responsive-columns.d.ts.map +1 -1
  286. package/dist/components/payment-card/index.js +1 -1
  287. package/dist/components/payment-form/index.js +1 -1
  288. package/dist/components/pdf-viewer/index.js +1 -1
  289. package/dist/components/periodontal-chart-card/index.js +1 -1
  290. package/dist/components/practice-results/index.js +1 -1
  291. package/dist/components/pregnancy-dating/index.js +1 -1
  292. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  293. package/dist/components/radiograph-panel/index.d.ts +4 -0
  294. package/dist/components/radiograph-panel/index.d.ts.map +1 -0
  295. package/dist/components/radiograph-panel/index.js +7 -0
  296. package/dist/components/radiograph-panel/index.js.map +1 -0
  297. package/dist/components/radiograph-panel/radiograph-panel.agent.d.ts +13 -0
  298. package/dist/components/radiograph-panel/radiograph-panel.agent.d.ts.map +1 -0
  299. package/dist/components/radiograph-panel/radiograph-panel.d.ts +36 -0
  300. package/dist/components/radiograph-panel/radiograph-panel.d.ts.map +1 -0
  301. package/dist/components/rich-text-editor/index.js +1 -1
  302. package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
  303. package/dist/components/sidebar/index.js +1 -1
  304. package/dist/components/sign-document/index.js +1 -1
  305. package/dist/components/stepper-accordion/index.js +1 -1
  306. package/dist/components/tab-bar/index.js +1 -1
  307. package/dist/components/tab-bar/tab-bar.d.ts +18 -1
  308. package/dist/components/tab-bar/tab-bar.d.ts.map +1 -1
  309. package/dist/components/tooth-scheme/index.d.ts +2 -2
  310. package/dist/components/tooth-scheme/index.d.ts.map +1 -1
  311. package/dist/components/tooth-scheme/index.js +30 -23
  312. package/dist/components/tooth-scheme/tooth-data.d.ts +112 -1
  313. package/dist/components/tooth-scheme/tooth-data.d.ts.map +1 -1
  314. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts +2 -2
  315. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts.map +1 -1
  316. package/dist/components/tooth-scheme/tooth-scheme.d.ts +75 -11
  317. package/dist/components/tooth-scheme/tooth-scheme.d.ts.map +1 -1
  318. package/dist/components/transaction-chip/index.js +1 -1
  319. package/dist/components/transaction-chip/transaction-chip.d.ts +2 -2
  320. package/dist/components/transaction-chip/transaction-chip.d.ts.map +1 -1
  321. package/dist/components/warning-stack/index.js +1 -1
  322. package/dist/components/warning-stack/warning-stack.d.ts +10 -7
  323. package/dist/components/warning-stack/warning-stack.d.ts.map +1 -1
  324. package/dist/components/workflow/index.js +1 -1
  325. package/dist/hooks/index.d.ts +1 -0
  326. package/dist/hooks/index.d.ts.map +1 -1
  327. package/dist/hooks/index.js +24 -22
  328. package/dist/hooks/index.js.map +1 -1
  329. package/dist/hooks/use-clamp-overflow.d.ts +19 -0
  330. package/dist/hooks/use-clamp-overflow.d.ts.map +1 -0
  331. package/dist/hooks/use-overflow-collapse.d.ts +46 -0
  332. package/dist/hooks/use-overflow-collapse.d.ts.map +1 -0
  333. package/dist/hooks/use-persistent-state.d.ts +7 -1
  334. package/dist/hooks/use-persistent-state.d.ts.map +1 -1
  335. package/dist/hooks/use-scroll-overflow.d.ts +36 -0
  336. package/dist/hooks/use-scroll-overflow.d.ts.map +1 -0
  337. package/dist/i18n/locales/ar.d.ts +308 -24
  338. package/dist/i18n/locales/ar.d.ts.map +1 -1
  339. package/dist/i18n/locales/ar.js +322 -27
  340. package/dist/i18n/locales/ar.js.map +1 -1
  341. package/dist/i18n/locales/de.d.ts +308 -24
  342. package/dist/i18n/locales/de.d.ts.map +1 -1
  343. package/dist/i18n/locales/de.js +322 -27
  344. package/dist/i18n/locales/de.js.map +1 -1
  345. package/dist/i18n/locales/el.d.ts +308 -24
  346. package/dist/i18n/locales/el.d.ts.map +1 -1
  347. package/dist/i18n/locales/el.js +322 -27
  348. package/dist/i18n/locales/el.js.map +1 -1
  349. package/dist/i18n/locales/en.d.ts +309 -32
  350. package/dist/i18n/locales/en.d.ts.map +1 -1
  351. package/dist/i18n/locales/en.js +323 -35
  352. package/dist/i18n/locales/en.js.map +1 -1
  353. package/dist/i18n/locales/es.d.ts +308 -24
  354. package/dist/i18n/locales/es.d.ts.map +1 -1
  355. package/dist/i18n/locales/es.js +322 -27
  356. package/dist/i18n/locales/es.js.map +1 -1
  357. package/dist/i18n/locales/fr.d.ts +308 -24
  358. package/dist/i18n/locales/fr.d.ts.map +1 -1
  359. package/dist/i18n/locales/fr.js +322 -27
  360. package/dist/i18n/locales/fr.js.map +1 -1
  361. package/dist/i18n/locales/hi.d.ts +308 -24
  362. package/dist/i18n/locales/hi.d.ts.map +1 -1
  363. package/dist/i18n/locales/hi.js +322 -27
  364. package/dist/i18n/locales/hi.js.map +1 -1
  365. package/dist/i18n/locales/it.d.ts +308 -24
  366. package/dist/i18n/locales/it.d.ts.map +1 -1
  367. package/dist/i18n/locales/it.js +322 -27
  368. package/dist/i18n/locales/it.js.map +1 -1
  369. package/dist/i18n/locales/ja.d.ts +308 -24
  370. package/dist/i18n/locales/ja.d.ts.map +1 -1
  371. package/dist/i18n/locales/ja.js +322 -27
  372. package/dist/i18n/locales/ja.js.map +1 -1
  373. package/dist/i18n/locales/nl.d.ts +308 -24
  374. package/dist/i18n/locales/nl.d.ts.map +1 -1
  375. package/dist/i18n/locales/nl.js +322 -27
  376. package/dist/i18n/locales/nl.js.map +1 -1
  377. package/dist/i18n/locales/pl.d.ts +308 -24
  378. package/dist/i18n/locales/pl.d.ts.map +1 -1
  379. package/dist/i18n/locales/pl.js +322 -27
  380. package/dist/i18n/locales/pl.js.map +1 -1
  381. package/dist/i18n/locales/pt.d.ts +308 -24
  382. package/dist/i18n/locales/pt.d.ts.map +1 -1
  383. package/dist/i18n/locales/pt.js +322 -27
  384. package/dist/i18n/locales/pt.js.map +1 -1
  385. package/dist/i18n/locales/ro.d.ts +308 -24
  386. package/dist/i18n/locales/ro.d.ts.map +1 -1
  387. package/dist/i18n/locales/ro.js +322 -27
  388. package/dist/i18n/locales/ro.js.map +1 -1
  389. package/dist/i18n/locales/ru.d.ts +308 -24
  390. package/dist/i18n/locales/ru.d.ts.map +1 -1
  391. package/dist/i18n/locales/ru.js +322 -27
  392. package/dist/i18n/locales/ru.js.map +1 -1
  393. package/dist/i18n/locales/sq.d.ts +308 -24
  394. package/dist/i18n/locales/sq.d.ts.map +1 -1
  395. package/dist/i18n/locales/sq.js +322 -27
  396. package/dist/i18n/locales/sq.js.map +1 -1
  397. package/dist/i18n/locales/sv.d.ts +308 -24
  398. package/dist/i18n/locales/sv.d.ts.map +1 -1
  399. package/dist/i18n/locales/sv.js +322 -27
  400. package/dist/i18n/locales/sv.js.map +1 -1
  401. package/dist/i18n/locales/tr.d.ts +308 -24
  402. package/dist/i18n/locales/tr.d.ts.map +1 -1
  403. package/dist/i18n/locales/tr.js +322 -27
  404. package/dist/i18n/locales/tr.js.map +1 -1
  405. package/dist/i18n/locales/zh.d.ts +308 -24
  406. package/dist/i18n/locales/zh.d.ts.map +1 -1
  407. package/dist/i18n/locales/zh.js +322 -27
  408. package/dist/i18n/locales/zh.js.map +1 -1
  409. package/dist/index.js +672 -623
  410. package/dist/index.js.map +1 -1
  411. package/dist/locales/ar.json +311 -27
  412. package/dist/locales/de.json +311 -27
  413. package/dist/locales/el.json +311 -27
  414. package/dist/locales/en.json +311 -27
  415. package/dist/locales/es.json +311 -27
  416. package/dist/locales/fr.json +311 -27
  417. package/dist/locales/hi.json +311 -27
  418. package/dist/locales/it.json +311 -27
  419. package/dist/locales/ja.json +311 -27
  420. package/dist/locales/nl.json +311 -27
  421. package/dist/locales/pl.json +311 -27
  422. package/dist/locales/pt.json +311 -27
  423. package/dist/locales/ro.json +311 -27
  424. package/dist/locales/ru.json +311 -27
  425. package/dist/locales/sq.json +311 -27
  426. package/dist/locales/sv.json +311 -27
  427. package/dist/locales/tr.json +311 -27
  428. package/dist/locales/zh.json +311 -27
  429. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  430. package/dist/tokens.css +1 -1
  431. package/package.json +37 -1
  432. package/dist/_chunks/actions-cell-renderer-DrcaxB0w.js.map +0 -1
  433. package/dist/_chunks/ai-tools-rail-BA_sqy1A.js +0 -373
  434. package/dist/_chunks/ai-tools-rail-BA_sqy1A.js.map +0 -1
  435. package/dist/_chunks/alert-_mUKLmwA.js.map +0 -1
  436. package/dist/_chunks/appointment-tray-CZtvtaH-.js +0 -431
  437. package/dist/_chunks/appointment-tray-CZtvtaH-.js.map +0 -1
  438. package/dist/_chunks/badge-CqGsX32l.js.map +0 -1
  439. package/dist/_chunks/clinical-note-card-DqQYf_D4.js +0 -333
  440. package/dist/_chunks/clinical-note-card-DqQYf_D4.js.map +0 -1
  441. package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js +0 -448
  442. package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js.map +0 -1
  443. package/dist/_chunks/email-input-B_Y55f5G.js +0 -396
  444. package/dist/_chunks/notification-card-BiESdm8q.js.map +0 -1
  445. package/dist/_chunks/patient-summary-card-B836_fDB.js +0 -435
  446. package/dist/_chunks/patient-summary-card-B836_fDB.js.map +0 -1
  447. package/dist/_chunks/patient-table-CDuosVru.js +0 -889
  448. package/dist/_chunks/patient-table-CDuosVru.js.map +0 -1
  449. package/dist/_chunks/payment-request-card-DioWKBUq.js.map +0 -1
  450. package/dist/_chunks/pdf-viewer-D6BPfW2D.js.map +0 -1
  451. package/dist/_chunks/stepper-accordion-Dki6r9ZE.js.map +0 -1
  452. package/dist/_chunks/tab-bar-B1ovILzh.js +0 -105
  453. package/dist/_chunks/tab-bar-B1ovILzh.js.map +0 -1
  454. package/dist/_chunks/tooth-scheme-yBr53cvv.js +0 -1330
  455. package/dist/_chunks/tooth-scheme-yBr53cvv.js.map +0 -1
  456. package/dist/_chunks/transaction-chip-DK84XCBU.js.map +0 -1
  457. package/dist/_chunks/use-persistent-state-i23OWy6G.js +0 -24
  458. package/dist/_chunks/use-persistent-state-i23OWy6G.js.map +0 -1
  459. package/dist/_chunks/warning-stack-BsgaEbL8.js.map +0 -1
  460. package/dist/components/patient-table/cell-renderers/contact-cell.d.ts +0 -45
  461. package/dist/components/patient-table/cell-renderers/contact-cell.d.ts.map +0 -1
  462. package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts +0 -26
  463. package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts.map +0 -1
@@ -10,6 +10,35 @@ export interface ToothState {
10
10
  notes?: string;
11
11
  }
12
12
  export type ToothChart = Record<FdiId, ToothState>;
13
+ /** Radiograph (x-ray) type. `'periapical'` is the intraoral *endorale*. */
14
+ export type RadiographKind = 'periapical' | 'bitewing' | 'panoramic' | 'other';
15
+ /**
16
+ * A single radiograph attached to a tooth. Image urls are opaque,
17
+ * consumer-hosted strings, interpolated into an SVG `<image href>` / `<img src>`
18
+ * (which cannot execute scripts) — never bundled and never runtime-validated.
19
+ * Real radiographs are PHI: stories and demos must use synthetic placeholders.
20
+ */
21
+ export interface Radiograph {
22
+ /** Stable id — keys the archive list and the imperative open call. */
23
+ id: string;
24
+ /** Full-resolution image url. */
25
+ url: string;
26
+ /** Optional smaller preview url (falls back to `url`). */
27
+ thumbnailUrl?: string;
28
+ /** ISO acquisition date (`YYYY-MM-DD`). */
29
+ date?: string;
30
+ /** Free-text clinical note. */
31
+ note?: string;
32
+ /** Radiograph type. Default `'periapical'` (an *endorale*). */
33
+ kind?: RadiographKind;
34
+ /**
35
+ * Accessible description for the FULL-SIZE image, consumed by a downstream
36
+ * viewer (e.g. the Dental Imaging Hub archive `<img>`). The chart's slot
37
+ * render is decorative (`aria-hidden` — the tooth's accessible name carries
38
+ * the radiograph count), so `alt` is intentionally not read by the chart.
39
+ */
40
+ alt?: string;
41
+ }
13
42
  export type Anatomy = 'incisor' | 'canine' | 'premolar' | 'molar';
14
43
  export type Arch = 'upper' | 'lower';
15
44
  export type Side = 'right' | 'left';
@@ -141,11 +170,93 @@ export interface PositionedTooth {
141
170
  * is preserved: the patient's right sits on the viewer's left in both
142
171
  * arches, regardless of document direction.
143
172
  */
144
- export declare function layoutTeeth(dentition: Dentition, slotHeight?: number): {
173
+ export declare function layoutTeeth(dentition: Dentition, slotHeight?: number, options?: {
174
+ arch?: Arch;
175
+ }): {
145
176
  teeth: PositionedTooth[];
146
177
  width: number;
147
178
  height: number;
148
179
  };
180
+ export type SpecialElementKind = 'quadrant' | 'sextant' | 'arch' | 'general';
181
+ export interface SpecialElement {
182
+ /**
183
+ * Stable id — a chart key and the value emitted by `onSelect`. Permanent:
184
+ * `Q1`–`Q4`, `S1`–`S6`, `AS`, `AI`, `general`. Primary mirrors with an `m`
185
+ * prefix: `mQ1`…, `mS1`…, `mAS`, `mAI`, `mGeneral`.
186
+ */
187
+ id: string;
188
+ kind: SpecialElementKind;
189
+ arch: Arch;
190
+ dentition: 'permanent' | 'primary';
191
+ /** i18n token under `toothScheme.special.*` for the accessible name. */
192
+ labelKey: 'quadrant' | 'sextant' | 'archUpper' | 'archLower' | 'general';
193
+ /** Interpolated into the `{{n}}` of quadrant / sextant labels (e.g. `1`). */
194
+ labelIndex?: number;
195
+ /** Short code shown in the slot, e.g. `Q1`, `S3`, `AS`, `Gen.`. */
196
+ code: string;
197
+ /**
198
+ * Member teeth (FDI) — informational for consumers that highlight or expand a
199
+ * region. Selection itself keys on `id`; the platform expands membership
200
+ * server-side. Sextants follow the WHO/CPITN convention.
201
+ */
202
+ teeth: FdiId[];
203
+ /**
204
+ * Column within the special-element block. Quadrant and its paired sextant
205
+ * share a column so they stack (Q1↕S1, Q2↕S2, AS↕S3 / S4↕Q4, S5↕Q3, S6↕AI).
206
+ */
207
+ column: number;
208
+ /** Row the element attaches to: side (quadrant/arch/general) or plan (sextant). */
209
+ row: Projection;
210
+ }
211
+ /** Every special element, flat — permanent then primary. */
212
+ export declare const SPECIAL_ELEMENTS: SpecialElement[];
213
+ /** Lookup a special element by its id (`Q1`, `mS3`, `AS`, `general`…). */
214
+ export declare const SPECIAL_BY_ID: Record<string, SpecialElement>;
215
+ /** True when an id names a special element rather than a tooth. */
216
+ export declare function isSpecialElement(id: string): boolean;
217
+ /**
218
+ * The special-element SLOTS that attach to a given row, ordered by column.
219
+ * Quadrant / arch live on the `side` row; sextants on the `plan` row. The
220
+ * whole-mouth `general` element is excluded — it renders as a switch beneath the
221
+ * chart (see `generalElement`), not as a column. Mixed dentition reuses the
222
+ * permanent set (the platform has no mixed view).
223
+ */
224
+ export declare function specialsForRow(dentition: Dentition, arch: Arch, projection: Projection): SpecialElement[];
225
+ /**
226
+ * The whole-mouth `general` element for a dentition. It is rendered as a switch
227
+ * beneath the chart rather than as a cramped icon column (the platform's vertical
228
+ * "GENERALE" glyph is illegible at column width).
229
+ */
230
+ export declare function generalElement(dentition: Dentition): SpecialElement;
231
+ /** A special-element slot placed in an SVG, to the inline-end of the teeth. */
232
+ export interface PositionedSpecial {
233
+ element: SpecialElement;
234
+ x: number;
235
+ y: number;
236
+ }
237
+ /** Special-element slot block-size — matches a tooth slot so icons read clearly. */
238
+ export declare const SPECIAL_SLOT_WIDTH = 36;
239
+ /**
240
+ * Resolve the photoreal icon URL for a special element, or `null` when it has
241
+ * none (sextants are label-only — the platform ships no sextant icon). Icons
242
+ * live in the `global/` sibling of the `teeth/` render folder; quadrants and
243
+ * arches reuse their code as the file stem (`Q1`, `AS`, …), general resolves to
244
+ * `general`, and primary elements reuse the permanent art.
245
+ */
246
+ export declare function specialIconUrl(element: SpecialElement, assetBaseUrl: string): string | null;
247
+ /** Gap between the last tooth and the first special-element column. */
248
+ export declare const SPECIAL_GAP = 8;
249
+ /** Column pitch within the special-element block. */
250
+ export declare const SPECIAL_PITCH: number;
251
+ /**
252
+ * Place a row's special elements after the teeth (inline-end) and report the
253
+ * total row width. Columns are derived from `element.column`, so a quadrant and
254
+ * its paired sextant share an x and stack across the two rows.
255
+ */
256
+ export declare function layoutSpecials(specials: SpecialElement[], teethWidth: number): {
257
+ specials: PositionedSpecial[];
258
+ width: number;
259
+ };
149
260
  export declare function labelFor(id: FdiId, numbering: Numbering): string;
150
261
  export declare function emptyChart(): ToothChart;
151
262
  export declare function chartFromConditions(conditions: Partial<Record<FdiId, ToothCondition[]>>): ToothChart;
@@ -1 +1 @@
1
- {"version":3,"file":"tooth-data.d.ts","sourceRoot":"","sources":["../../../src/components/tooth-scheme/tooth-data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tooth-data.d.ts","sourceRoot":"","sources":["../../../src/components/tooth-scheme/tooth-data.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { AgentAdapter } from '../../agent/types';
2
2
  import type { ToothSchemeHandle } from './tooth-scheme';
3
- import type { Surface, ToothCondition } from './tooth-data';
3
+ import type { Radiograph, Surface, ToothCondition } from './tooth-data';
4
4
  export declare const toothSchemeAgent: AgentAdapter<ToothSchemeHandle>;
5
- export type { Surface, ToothCondition };
5
+ export type { Radiograph, Surface, ToothCondition };
6
6
  //# sourceMappingURL=tooth-scheme.agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooth-scheme.agent.d.ts","sourceRoot":"","sources":["../../../src/components/tooth-scheme/tooth-scheme.agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA6B5D,eAAO,MAAM,gBAAgB,EAAE,YAAY,CAAC,iBAAiB,CA0I5D,CAAC;AAGF,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"tooth-scheme.agent.d.ts","sourceRoot":"","sources":["../../../src/components/tooth-scheme/tooth-scheme.agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA2CxE,eAAO,MAAM,gBAAgB,EAAE,YAAY,CAAC,iBAAiB,CAqM5D,CAAC;AAGF,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
- import { PERMANENT_TEETH, PRIMARY_TEETH, type ViewMode, type Dentition, type FdiId, type Numbering, type Surface, type ToothChart, type ToothCondition, type ToothMode } from './tooth-data';
1
+ import { PERMANENT_TEETH, PRIMARY_TEETH, type Arch, type ViewMode, type Dentition, type FdiId, type Numbering, type Radiograph, type Surface, type ToothChart, type ToothCondition, type ToothMode } from './tooth-data';
2
2
  export interface ToothSchemeProps {
3
3
  /** Opaque instance id — emitted as `data-component-id` for the agent registry. */
4
4
  id?: string;
@@ -10,21 +10,59 @@ export interface ToothSchemeProps {
10
10
  mode?: ToothMode;
11
11
  /**
12
12
  * `'side'` shows the facial view (whole-tooth findings); `'plan'` shows the
13
- * occlusal view (per-surface caries / fillings); `'both'` stacks the side
14
- * chart above an interactive occlusal companion that shares the chart data.
15
- * Default `'side'`.
13
+ * occlusal view (per-surface caries / fillings); `'both'` lays the two facial
14
+ * rows on the outside with the two occlusal rows between them (upper side
15
+ * upper occlusal → lower occlusal → lower side), bracketed by tooth numbers
16
+ * above and below. Default `'side'`.
16
17
  */
17
18
  projection?: ViewMode;
19
+ /**
20
+ * Show the selectable special-element slots (quadrants, sextants, arches,
21
+ * whole-mouth) to the inline-end of each arch row. When unset, they show in
22
+ * `both` view and hide in the single side / plan views; pass `true` / `false`
23
+ * to force it. They share the chart data and emit `onSelect` like a tooth.
24
+ */
25
+ specialElements?: boolean;
18
26
  /** Controlled chart state — the full `Record<FdiId, ToothState>`. */
19
27
  value?: ToothChart;
20
28
  /** Uncontrolled initial chart state. */
21
29
  defaultValue?: ToothChart;
22
30
  /** Fired whenever the chart changes — always emits FDI ids. */
23
31
  onChange?: (next: ToothChart) => void;
24
- /** Fired when a tooth is focused or clicked. */
32
+ /**
33
+ * Fired when a tooth OR special element is focused / clicked. Special
34
+ * elements emit their id (`Q1`, `S3`, `AS`, `general`, …).
35
+ */
25
36
  onSelect?: (toothId: FdiId) => void;
26
37
  /** Shortcut for pre-populating conditions: `{ '16': ['caries'], '36': ['filled'] }`. */
27
38
  conditions?: Partial<Record<FdiId, ToothCondition[]>>;
39
+ /**
40
+ * Per-tooth radiographs (x-rays / *endorali*), keyed by FDI id — mirrors the
41
+ * `conditions` shape. Teeth carrying at least one radiograph get a corner
42
+ * count badge; in `radiographDisplay="thumbnail"` the most-recent film also
43
+ * fills the slot. Image urls are opaque / consumer-hosted — never bundle real
44
+ * scans (PHI).
45
+ */
46
+ radiographs?: Partial<Record<FdiId, Radiograph[]>>;
47
+ /**
48
+ * How a tooth carrying radiographs is marked. `'badge'` (default) keeps the
49
+ * photoreal tooth render and adds a corner count badge; `'thumbnail'` shows
50
+ * the most-recent radiograph inset in the slot (still badged).
51
+ */
52
+ radiographDisplay?: 'badge' | 'thumbnail';
53
+ /**
54
+ * Fired when a tooth's radiograph archive is opened — i.e. a tooth is
55
+ * activated (click / Enter / Space) in `mode="display"`. Wire this to a
56
+ * Sheet/Dialog that manages the tooth's films. Setting this makes display-mode
57
+ * teeth focusable buttons; it is mutually exclusive with interactive
58
+ * findings-editing (`mode="interactive"` / `activeCondition`).
59
+ *
60
+ * EVERY tooth becomes an open-archive button — including unfilmed teeth, so the
61
+ * user can add the first film to an empty tooth (matching a real imaging hub).
62
+ * Filmed teeth are distinguished by the radiograph count folded into their
63
+ * accessible name and tooltip.
64
+ */
65
+ onOpenRadiographs?: (toothId: FdiId) => void;
28
66
  /**
29
67
  * The finding a tooth-click applies in interactive mode (the selected
30
68
  * tool in a Findings / "Stato dentale" panel). Clicking a tooth toggles
@@ -49,10 +87,10 @@ export interface ToothSchemeProps {
49
87
  legend?: boolean;
50
88
  /**
51
89
  * Render a built-in options affordance: a gear button that opens a popover
52
- * letting the END USER toggle the legend and switch dentition / numbering /
53
- * projection. Opt-in — when on, those four become user-overridable (seeded
54
- * from the props); when off, the props drive the chart directly. Default
55
- * `false`.
90
+ * letting the END USER toggle the legend + special elements and switch
91
+ * dentition / numbering / projection. Opt-in — when on, those become
92
+ * user-overridable (seeded from the props); when off, the props drive the
93
+ * chart directly. Default `false`.
56
94
  */
57
95
  controls?: boolean;
58
96
  /** Accessible label override for the chart region. */
@@ -60,6 +98,26 @@ export interface ToothSchemeProps {
60
98
  /** Extra class names on the wrapper. */
61
99
  className?: string;
62
100
  }
101
+ /** Number-label placement for a sub-chart. */
102
+ type NumbersPosition = 'between' | 'above' | 'below' | 'none';
103
+ /**
104
+ * Internal-only props (prefixed `_`) used when the component composes itself
105
+ * into the four-row `both` view — never part of the public API.
106
+ */
107
+ interface ToothSchemeInternalProps {
108
+ /** Render a single arch (the `both` view stacks one arch per sub-chart). */
109
+ _arch?: Arch;
110
+ /** Number-label placement for this sub-chart. */
111
+ _numbersPosition?: NumbersPosition;
112
+ /** Render only the `<svg>` (no region wrapper, controls, legend, or chrome). */
113
+ _inner?: boolean;
114
+ /**
115
+ * Force the SVG content width (the `both` view shares one width across all
116
+ * four sub-charts so they scale identically and stay column-aligned —
117
+ * otherwise rows with fewer special-element columns would scale up larger).
118
+ */
119
+ _contentWidth?: number;
120
+ }
63
121
  export interface ToothSchemeHandle {
64
122
  /** Programmatically focus a tooth by FDI id. */
65
123
  focusTooth: (id: FdiId) => void;
@@ -75,9 +133,15 @@ export interface ToothSchemeHandle {
75
133
  removeFinding: (id: FdiId, condition: ToothCondition) => void;
76
134
  /** Clear every finding from a tooth. */
77
135
  clearTooth: (id: FdiId) => void;
136
+ /** Read the radiographs attached to one tooth (empty array if none). */
137
+ getRadiographs: (id: FdiId) => Radiograph[];
138
+ /** Read the FDI ids of every tooth carrying at least one radiograph. */
139
+ teethWithRadiographs: () => FdiId[];
140
+ /** Focus a tooth and open its radiograph archive (fires `onOpenRadiographs`). */
141
+ openRadiographs: (id: FdiId) => void;
78
142
  }
79
143
  declare const rootVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
80
- export declare const ToothScheme: import("react").ForwardRefExoticComponent<ToothSchemeProps & import("react").RefAttributes<ToothSchemeHandle>>;
144
+ export declare const ToothScheme: import("react").ForwardRefExoticComponent<ToothSchemeProps & ToothSchemeInternalProps & import("react").RefAttributes<ToothSchemeHandle>>;
81
145
  export { rootVariants as toothSchemeVariants, PERMANENT_TEETH, PRIMARY_TEETH };
82
- export type { Dentition, FdiId, Numbering, ToothChart, ToothCondition, ToothMode, ToothState, } from './tooth-data';
146
+ export type { Dentition, FdiId, Numbering, SpecialElement, ToothChart, ToothCondition, ToothMode, ToothState, } from './tooth-data';
83
147
  //# sourceMappingURL=tooth-scheme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooth-scheme.d.ts","sourceRoot":"","sources":["../../../src/components/tooth-scheme/tooth-scheme.tsx"],"names":[],"mappings":"AA+CA,OAAO,EAUL,eAAe,EACf,aAAa,EAUb,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,OAAO,EAEZ,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,cAAc,CAAC;AAMtB,MAAM,WAAW,gBAAgB;IAC/B,kFAAkF;IAClF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oDAAoD;IACpD,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,mEAAmE;IACnE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,2GAA2G;IAC3G,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,qEAAqE;IACrE,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,wCAAwC;IACxC,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,gDAAgD;IAChD,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,KAAK,IAAI,CAAC;IACpC,wFAAwF;IACxF,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IACtD;;;;OAIG;IACH,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,UAAU,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,oCAAoC;IACpC,QAAQ,EAAE,MAAM,UAAU,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK,cAAc,EAAE,CAAC;IAC1C,gEAAgE;IAChE,SAAS,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,KAAK,EAAE,CAAC;IAClD,qFAAqF;IACrF,UAAU,EAAE,CACV,EAAE,EAAE,KAAK,EACT,SAAS,EAAE,cAAc,EACzB,QAAQ,CAAC,EAAE,OAAO,EAAE,KACjB,IAAI,CAAC;IACV,uDAAuD;IACvD,aAAa,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9D,wCAAwC;IACxC,UAAU,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAMD,QAAA,MAAM,YAAY,oFAoBjB,CAAC;AA0RF,eAAO,MAAM,WAAW,gHAwhCvB,CAAC;AAQF,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC;AAC/E,YAAY,EACV,SAAS,EACT,KAAK,EACL,SAAS,EACT,UAAU,EACV,cAAc,EACd,SAAS,EACT,UAAU,GACX,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"tooth-scheme.d.ts","sourceRoot":"","sources":["../../../src/components/tooth-scheme/tooth-scheme.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { T as r } from "../../_chunks/transaction-chip-DK84XCBU.js";
1
+ import { T as r } from "../../_chunks/transaction-chip-CscoQbxF.js";
2
2
  export {
3
3
  r as TransactionChip
4
4
  };
@@ -1,8 +1,8 @@
1
1
  import { type HTMLAttributes } from 'react';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
- export type TransactionState = 'debt' | 'credit' | 'to-invoice' | 'to-deliver' | 'settled';
3
+ export type TransactionState = 'debt' | 'credit' | 'to-invoice' | 'to-deliver' | 'settled' | 'discount';
4
4
  declare const chipVariants: (props?: ({
5
- state?: "debt" | "credit" | "to-invoice" | "to-deliver" | "settled" | null | undefined;
5
+ state?: "debt" | "credit" | "to-invoice" | "to-deliver" | "settled" | "discount" | null | undefined;
6
6
  size?: "sm" | "md" | "lg" | null | undefined;
7
7
  bold?: boolean | null | undefined;
8
8
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-chip.d.ts","sourceRoot":"","sources":["../../../src/components/transaction-chip/transaction-chip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAelE,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,YAAY,GACZ,SAAS,CAAC;AA+Cd,QAAA,MAAM,YAAY;;;;8EAwDjB,CAAC;AA+BF,MAAM,WAAW,oBACf,SACE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC,EACjD,IAAI,CAAC,YAAY,CAAC,OAAO,YAAY,CAAC,EAAE,MAAM,CAAC;IACjD,8DAA8D;IAC9D,KAAK,EAAE,gBAAgB,CAAC;IACxB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAMD,eAAO,MAAM,eAAe,kHA+F3B,CAAC"}
1
+ {"version":3,"file":"transaction-chip.d.ts","sourceRoot":"","sources":["../../../src/components/transaction-chip/transaction-chip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAgBlE,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,YAAY,GACZ,SAAS,GACT,UAAU,CAAC;AAmDf,QAAA,MAAM,YAAY;;;;8EA8DjB,CAAC;AA+BF,MAAM,WAAW,oBACf,SACE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC,EACjD,IAAI,CAAC,YAAY,CAAC,OAAO,YAAY,CAAC,EAAE,MAAM,CAAC;IACjD,8DAA8D;IAC9D,KAAK,EAAE,gBAAgB,CAAC;IACxB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAMD,eAAO,MAAM,eAAe,kHA+F3B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { W as n } from "../../_chunks/warning-stack-BsgaEbL8.js";
1
+ import { W as n } from "../../_chunks/warning-stack--sTrrBDA.js";
2
2
  export {
3
3
  n as WarningStack
4
4
  };
@@ -11,7 +11,6 @@ export interface WarningStackItem {
11
11
  dismissible?: boolean;
12
12
  }
13
13
  declare const stackVariants: (props?: ({
14
- size?: "sm" | "md" | null | undefined;
15
14
  stretch?: boolean | null | undefined;
16
15
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
17
16
  export interface WarningStackProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'role' | 'title'>, VariantProps<typeof stackVariants> {
@@ -26,17 +25,21 @@ export interface WarningStackProps extends Omit<HTMLAttributes<HTMLDivElement>,
26
25
  title?: ReactNode;
27
26
  /** Optional short description rendered under the title. */
28
27
  description?: ReactNode;
29
- /** Cap on visible items before a "Show N more" toggle appears. */
28
+ /** Cap on visible items before a "Show N more" toggle appears. Defaults to
29
+ * `2`; pass a larger number (or `Infinity`) to show more before collapsing. */
30
30
  maxVisible?: number;
31
31
  /** Whether the stack starts collapsed when items exceed `maxVisible`. */
32
32
  defaultCollapsed?: boolean;
33
33
  /** Fires when a dismissible item's close control is activated. */
34
34
  onDismiss?: (item: WarningStackItem) => void;
35
- /** When provided, a close control is rendered at the top inline-end of the
36
- * header that clears the whole stack at once. Activating it dismisses every
37
- * currently-visible notice (folding the region away) and then fires this
38
- * callback so the consumer can mirror the bulk dismissal into its store.
39
- * Opt-in: omit it when the stack carries notices that must not be bulk-cleared. */
35
+ /** Whether the whole-stack close control is shown at the header's inline-end.
36
+ * Defaults to `true` the tray is closable. Set `false` for stacks that
37
+ * carry notices which must not be bulk-cleared (e.g. hard compliance blocks). */
38
+ closable?: boolean;
39
+ /** Fires when the whole-stack close control is activated, after every
40
+ * currently-visible notice has been dismissed (folding the region away).
41
+ * Optional — the fold happens internally regardless; supply this only to
42
+ * mirror the bulk dismissal into the consumer's own store. */
40
43
  onDismissAll?: () => void;
41
44
  /** Accessible label for the whole-stack close control. Defaults to the
42
45
  * localised "Dismiss all notices". */
@@ -1 +1 @@
1
- {"version":3,"file":"warning-stack.d.ts","sourceRoot":"","sources":["../../../src/components/warning-stack/warning-stack.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,cAAc,EAEnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAQxD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAChC,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAMD,QAAA,MAAM,aAAa;;;8EA4BlB,CAAC;AAuFF,MAAM,WAAW,iBACf,SACE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,EACnE,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,uCAAuC;IACvC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B;+DAC2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;iFAE6E;IAC7E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kEAAkE;IAClE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7C;;;;wFAIoF;IACpF,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;2CACuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAMD,eAAO,MAAM,YAAY,8GA6WxB,CAAC"}
1
+ {"version":3,"file":"warning-stack.d.ts","sourceRoot":"","sources":["../../../src/components/warning-stack/warning-stack.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,cAAc,EAEnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAQxD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAChC,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAMD,QAAA,MAAM,aAAa;;8EAuBlB,CAAC;AA4EF,MAAM,WAAW,iBACf,SACE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,EACnE,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,uCAAuC;IACvC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B;+DAC2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;iFAE6E;IAC7E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;oFACgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kEAAkE;IAClE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7C;;sFAEkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;mEAG+D;IAC/D,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;2CACuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAMD,eAAO,MAAM,YAAY,8GAiXxB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { C as r, W as e, a as s, b as d, c as w, i as t, l as f, m as l, r as i, w as k, d as n, e as A, f as C } from "../../_chunks/workflow-map-Bdam9pGp.js";
1
+ import { C as r, W as e, a as s, b as d, c as w, i as t, l as f, m as l, r as i, w as k, d as n, e as A, f as C } from "../../_chunks/workflow-map-Dy8mLCqF.js";
2
2
  export {
3
3
  r as CORE_PATIENT_FIELDS,
4
4
  e as WorkflowCard,
@@ -16,6 +16,7 @@ export { useFocusTrap, type UseFocusTrapOptions } from './use-focus-trap';
16
16
  export { useDirection, useDocumentDirection, type Direction, } from './use-direction';
17
17
  export { usePersistentState } from './use-persistent-state';
18
18
  export { useIsomorphicLayoutEffect } from './use-isomorphic-layout-effect';
19
+ export { useOverflowCollapse, type UseOverflowCollapseReturn, } from './use-overflow-collapse';
19
20
  export { useWebOtp, type UseWebOtpOptions } from './use-web-otp';
20
21
  export { useEdgeResize, type UseEdgeResizeOptions, type UseEdgeResizeReturn, type EdgeResizeSeparatorProps, } from './use-edge-resize';
21
22
  export { useSigningSession, type SigningField, type SigningFieldBase, type UseSigningSessionReturn, } from './use-signing-session';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,yBAAyB,EACzB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,SAAS,EACT,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,KAAK,2BAA2B,GACjC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,KAAK,UAAU,EACf,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,KAAK,iBAAiB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,KAAK,SAAS,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,yBAAyB,EACzB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,SAAS,EACT,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,KAAK,2BAA2B,GACjC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,KAAK,UAAU,EACf,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,KAAK,iBAAiB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,KAAK,SAAS,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EACL,mBAAmB,EACnB,KAAK,yBAAyB,GAC/B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC"}
@@ -1,7 +1,7 @@
1
- import { u as v } from "../_chunks/use-prefers-reduced-motion-BMwIQRjB.js";
1
+ import { u as A } from "../_chunks/use-prefers-reduced-motion-BMwIQRjB.js";
2
2
  import { u as D } from "../_chunks/use-media-query-CcAx5SMM.js";
3
- import { u as g, a as _ } from "../_chunks/use-signing-session-CyOZWinp.js";
4
- import { u as I } from "../_chunks/use-count-up-BLLetaZ8.js";
3
+ import { u as g, a as w } from "../_chunks/use-signing-session-CyOZWinp.js";
4
+ import { u as _ } from "../_chunks/use-count-up-BLLetaZ8.js";
5
5
  import { u as R } from "../_chunks/use-locale-BkCIHujH.js";
6
6
  import { A as K, T as H, a as M, r as Y, t as q, u as B } from "../_chunks/use-theme-CAuo6EYT.js";
7
7
  import { u as P } from "../_chunks/use-controllable-state-BiY4xTzM.js";
@@ -9,12 +9,13 @@ import { u as V } from "../_chunks/use-copy-to-clipboard-Cyfc_dlv.js";
9
9
  import { u as z } from "../_chunks/use-debounced-callback-BisrB-Fq.js";
10
10
  import { useState as x, useRef as b, useEffect as E } from "react";
11
11
  import { u as W, a as J } from "../_chunks/use-direction-Dp8h70PP.js";
12
- import { u as X } from "../_chunks/use-persistent-state-i23OWy6G.js";
12
+ import { u as X } from "../_chunks/use-persistent-state-nZwZAnE9.js";
13
13
  import { u as $ } from "../_chunks/use-isomorphic-layout-effect-BGfaCOP1.js";
14
- import { u as te } from "../_chunks/use-web-otp-D_utzp6S.js";
15
- import { u as oe } from "../_chunks/use-edge-resize-ZnGG7gyO.js";
16
- import { u as ne } from "../_chunks/use-countdown-Yd6ts0_a.js";
17
- function h(e, o) {
14
+ import { u as te } from "../_chunks/use-overflow-collapse-BIOzKbni.js";
15
+ import { u as oe } from "../_chunks/use-web-otp-D_utzp6S.js";
16
+ import { u as ne } from "../_chunks/use-edge-resize-ZnGG7gyO.js";
17
+ import { u as ae } from "../_chunks/use-countdown-Yd6ts0_a.js";
18
+ function C(e, o) {
18
19
  const [t, i] = x(e), u = b(null);
19
20
  return E(() => {
20
21
  if (o <= 0) {
@@ -51,7 +52,7 @@ function p(e) {
51
52
  return !0;
52
53
  });
53
54
  }
54
- function C(e, o = {}) {
55
+ function h(e, o = {}) {
55
56
  const { enabled: t = !0, autoFocus: i = !0, restoreFocus: u = !0 } = o, s = b(null);
56
57
  E(() => {
57
58
  if (!t) return;
@@ -61,7 +62,7 @@ function C(e, o = {}) {
61
62
  const n = p(a)[0] ?? (a.tabIndex >= -1 ? a : null);
62
63
  n == null || n.focus();
63
64
  }
64
- function l(r) {
65
+ function f(r) {
65
66
  if (r.key !== "Tab") return;
66
67
  const n = e.current;
67
68
  if (!n) return;
@@ -70,11 +71,11 @@ function C(e, o = {}) {
70
71
  r.preventDefault();
71
72
  return;
72
73
  }
73
- const d = c[0], m = c[c.length - 1], f = document.activeElement;
74
- r.shiftKey ? (f === d || !n.contains(f)) && (r.preventDefault(), m.focus()) : (f === m || !n.contains(f)) && (r.preventDefault(), d.focus());
74
+ const m = c[0], d = c[c.length - 1], l = document.activeElement;
75
+ r.shiftKey ? (l === m || !n.contains(l)) && (r.preventDefault(), d.focus()) : (l === d || !n.contains(l)) && (r.preventDefault(), m.focus());
75
76
  }
76
- return a.addEventListener("keydown", l), () => {
77
- if (a.removeEventListener("keydown", l), u && s.current) {
77
+ return a.addEventListener("keydown", f), () => {
78
+ if (a.removeEventListener("keydown", f), u && s.current) {
78
79
  const r = s.current;
79
80
  requestAnimationFrame(() => {
80
81
  r.isConnected && r.focus();
@@ -91,22 +92,23 @@ export {
91
92
  q as themeClassList,
92
93
  P as useControllableState,
93
94
  V as useCopyToClipboard,
94
- I as useCountUp,
95
- ne as useCountdown,
95
+ _ as useCountUp,
96
+ ae as useCountdown,
96
97
  z as useDebouncedCallback,
97
- h as useDebouncedValue,
98
+ C as useDebouncedValue,
98
99
  W as useDirection,
99
100
  J as useDocumentDirection,
100
- oe as useEdgeResize,
101
- C as useFocusTrap,
101
+ ne as useEdgeResize,
102
+ h as useFocusTrap,
102
103
  $ as useIsomorphicLayoutEffect,
103
104
  R as useLocale,
104
105
  D as useMediaQuery,
106
+ te as useOverflowCollapse,
105
107
  X as usePersistentState,
106
- v as usePrefersReducedMotion,
108
+ A as usePrefersReducedMotion,
107
109
  g as useScrollToFirstError,
108
- _ as useSigningSession,
110
+ w as useSigningSession,
109
111
  B as useTheme,
110
- te as useWebOtp
112
+ oe as useWebOtp
111
113
  };
112
114
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/hooks/use-debounced-value.ts","../../src/hooks/use-focus-trap.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/**\n * Returns a value that lags `input` by `delayMs`. Each new `input`\n * resets the timer; the returned value updates once `input` has been\n * stable for `delayMs` ms.\n *\n * Companion to `useDebouncedCallback` — use this when you want the\n * debounced *value* (to drive a derived effect, query, or render),\n * and use the callback hook when you want the debounced *action*.\n *\n * @example\n * const [query, setQuery] = useState('');\n * const debouncedQuery = useDebouncedValue(query, 250);\n * useEffect(() => { void search(debouncedQuery); }, [debouncedQuery]);\n */\nexport function useDebouncedValue<T>(input: T, delayMs: number): T {\n const [value, setValue] = useState<T>(input);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (delayMs <= 0) {\n // Flush any pending timer so a stale queued value can't land\n // after the synchronous update below.\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n setValue(input);\n return;\n }\n const timer = setTimeout(() => {\n setValue(input);\n timerRef.current = null;\n }, delayMs);\n timerRef.current = timer;\n return () => clearTimeout(timer);\n }, [input, delayMs]);\n\n return value;\n}\n","import { useEffect, useRef, type RefObject } from 'react';\n\n/* -------------------------------------------------------------------- */\n/* Focus trap */\n/* */\n/* Lightweight focus-trap hook for components that compose a Radix */\n/* primitive without the overlay primitive (Dialog, AlertDialog, Sheet) */\n/* — those handle focus trapping for free via `@radix-ui/react-dialog`. */\n/* */\n/* This hook is intentionally NOT a Radix `<FocusScope>` re-export — it */\n/* is a hook so it composes inside `forwardRef` components without */\n/* nesting another wrapper element. If you need the full Radix */\n/* contract (return-focus management, loop, asChild), use */\n/* `@radix-ui/react-focus-scope` directly. */\n/* -------------------------------------------------------------------- */\n\nexport interface UseFocusTrapOptions {\n /** When `false` the trap is inert. Defaults to `true`. */\n enabled?: boolean;\n /**\n * When `true`, focus initial autofocus into the first focusable\n * descendant on mount / enable. @default true\n */\n autoFocus?: boolean;\n /**\n * When `true`, restores focus to the previously-focused element on\n * unmount / disable. @default true\n */\n restoreFocus?: boolean;\n}\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n 'audio[controls]',\n 'video[controls]',\n].join(',');\n\nfunction getFocusable(container: HTMLElement): HTMLElement[] {\n return Array.from(\n container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ).filter((el) => {\n if (el.hidden) return false;\n // `inert` and `aria-hidden=\"true\"` block focus on the element AND\n // all its descendants — walk the chain to catch either ancestor.\n let node: HTMLElement | null = el;\n while (node) {\n if (node.hasAttribute('inert')) return false;\n if (node.getAttribute('aria-hidden') === 'true') return false;\n node = node.parentElement;\n }\n return true;\n });\n}\n\n/**\n * Constrain Tab navigation to descendants of `containerRef`. Wraps Tab\n * forward from the last focusable to the first, and Shift+Tab back from\n * the first to the last. Optionally autofocuses on enable and restores\n * focus on disable.\n *\n * Use this for inline modal patterns or focus zones that don't ship\n * with their own Radix overlay. Don't stack it inside Dialog / Sheet —\n * Radix already traps focus in those.\n *\n * @example\n * const ref = useRef<HTMLDivElement>(null);\n * useFocusTrap(ref, { enabled: open });\n * return <div ref={ref}>…</div>;\n */\nexport function useFocusTrap<T extends HTMLElement>(\n containerRef: RefObject<T | null>,\n options: UseFocusTrapOptions = {},\n): void {\n const { enabled = true, autoFocus = true, restoreFocus = true } = options;\n const previouslyFocused = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (!enabled) return;\n const container = containerRef.current;\n if (!container) return;\n\n previouslyFocused.current =\n typeof document !== 'undefined' &&\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n\n if (autoFocus) {\n const focusable = getFocusable(container);\n // Container itself is the fallback focus target — needs `tabIndex`\n // to receive focus, but `-1` is fine.\n const target =\n focusable[0] ?? (container.tabIndex >= -1 ? container : null);\n target?.focus();\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key !== 'Tab') return;\n const root = containerRef.current;\n if (!root) return;\n const focusable = getFocusable(root);\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement;\n\n if (event.shiftKey) {\n if (active === first || !root.contains(active)) {\n event.preventDefault();\n last.focus();\n }\n } else {\n if (active === last || !root.contains(active)) {\n event.preventDefault();\n first.focus();\n }\n }\n }\n\n container.addEventListener('keydown', onKeyDown);\n\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n if (restoreFocus && previouslyFocused.current) {\n // rAF lets parent unmounts settle before refocus — a microtask\n // fires too early and can throw on a detached node.\n const target = previouslyFocused.current;\n requestAnimationFrame(() => {\n if (target.isConnected) target.focus();\n });\n }\n };\n }, [enabled, autoFocus, restoreFocus, containerRef]);\n}\n"],"names":["useDebouncedValue","input","delayMs","value","setValue","useState","timerRef","useRef","useEffect","timer","FOCUSABLE_SELECTOR","getFocusable","container","el","node","useFocusTrap","containerRef","options","enabled","autoFocus","restoreFocus","previouslyFocused","target","onKeyDown","event","root","focusable","first","last","active"],"mappings":";;;;;;;;;;;;;;;;AAgBO,SAASA,EAAqBC,GAAUC,GAAoB;AACjE,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAYJ,CAAK,GACrCK,IAAWC,EAA6C,IAAI;AAElE,SAAAC,EAAU,MAAM;AACd,QAAIN,KAAW,GAAG;AAGhB,MAAII,EAAS,YAAY,SACvB,aAAaA,EAAS,OAAO,GAC7BA,EAAS,UAAU,OAErBF,EAASH,CAAK;AACd;AAAA,IACF;AACA,UAAMQ,IAAQ,WAAW,MAAM;AAC7B,MAAAL,EAASH,CAAK,GACdK,EAAS,UAAU;AAAA,IACrB,GAAGJ,CAAO;AACV,WAAAI,EAAS,UAAUG,GACZ,MAAM,aAAaA,CAAK;AAAA,EACjC,GAAG,CAACR,GAAOC,CAAO,CAAC,GAEZC;AACT;ACTA,MAAMO,IAAqB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAEV,SAASC,EAAaC,GAAuC;AAC3D,SAAO,MAAM;AAAA,IACXA,EAAU,iBAA8BF,CAAkB;AAAA,EAAA,EAC1D,OAAO,CAACG,MAAO;AACf,QAAIA,EAAG,OAAQ,QAAO;AAGtB,QAAIC,IAA2BD;AAC/B,WAAOC,KAAM;AAEX,UADIA,EAAK,aAAa,OAAO,KACzBA,EAAK,aAAa,aAAa,MAAM,OAAQ,QAAO;AACxD,MAAAA,IAAOA,EAAK;AAAA,IACd;AACA,WAAO;AAAA,EACT,CAAC;AACH;AAiBO,SAASC,EACdC,GACAC,IAA+B,IACzB;AACN,QAAM,EAAE,SAAAC,IAAU,IAAM,WAAAC,IAAY,IAAM,cAAAC,IAAe,OAASH,GAC5DI,IAAoBd,EAA2B,IAAI;AAEzD,EAAAC,EAAU,MAAM;AACd,QAAI,CAACU,EAAS;AACd,UAAMN,IAAYI,EAAa;AAC/B,QAAI,CAACJ,EAAW;AAQhB,QANAS,EAAkB,UAChB,OAAO,WAAa,OACpB,SAAS,yBAAyB,cAC9B,SAAS,gBACT,MAEFF,GAAW;AAIb,YAAMG,IAHYX,EAAaC,CAAS,EAI5B,CAAC,MAAMA,EAAU,YAAY,KAAKA,IAAY;AAC1D,MAAAU,KAAA,QAAAA,EAAQ;AAAA,IACV;AAEA,aAASC,EAAUC,GAAsB;AACvC,UAAIA,EAAM,QAAQ,MAAO;AACzB,YAAMC,IAAOT,EAAa;AAC1B,UAAI,CAACS,EAAM;AACX,YAAMC,IAAYf,EAAac,CAAI;AACnC,UAAIC,EAAU,WAAW,GAAG;AAC1B,QAAAF,EAAM,eAAA;AACN;AAAA,MACF;AACA,YAAMG,IAAQD,EAAU,CAAC,GACnBE,IAAOF,EAAUA,EAAU,SAAS,CAAC,GACrCG,IAAS,SAAS;AAExB,MAAIL,EAAM,YACJK,MAAWF,KAAS,CAACF,EAAK,SAASI,CAAM,OAC3CL,EAAM,eAAA,GACNI,EAAK,MAAA,MAGHC,MAAWD,KAAQ,CAACH,EAAK,SAASI,CAAM,OAC1CL,EAAM,eAAA,GACNG,EAAM,MAAA;AAAA,IAGZ;AAEA,WAAAf,EAAU,iBAAiB,WAAWW,CAAS,GAExC,MAAM;AAEX,UADAX,EAAU,oBAAoB,WAAWW,CAAS,GAC9CH,KAAgBC,EAAkB,SAAS;AAG7C,cAAMC,IAASD,EAAkB;AACjC,8BAAsB,MAAM;AAC1B,UAAIC,EAAO,eAAaA,EAAO,MAAA;AAAA,QACjC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAACJ,GAASC,GAAWC,GAAcJ,CAAY,CAAC;AACrD;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/hooks/use-debounced-value.ts","../../src/hooks/use-focus-trap.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/**\n * Returns a value that lags `input` by `delayMs`. Each new `input`\n * resets the timer; the returned value updates once `input` has been\n * stable for `delayMs` ms.\n *\n * Companion to `useDebouncedCallback` — use this when you want the\n * debounced *value* (to drive a derived effect, query, or render),\n * and use the callback hook when you want the debounced *action*.\n *\n * @example\n * const [query, setQuery] = useState('');\n * const debouncedQuery = useDebouncedValue(query, 250);\n * useEffect(() => { void search(debouncedQuery); }, [debouncedQuery]);\n */\nexport function useDebouncedValue<T>(input: T, delayMs: number): T {\n const [value, setValue] = useState<T>(input);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (delayMs <= 0) {\n // Flush any pending timer so a stale queued value can't land\n // after the synchronous update below.\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n setValue(input);\n return;\n }\n const timer = setTimeout(() => {\n setValue(input);\n timerRef.current = null;\n }, delayMs);\n timerRef.current = timer;\n return () => clearTimeout(timer);\n }, [input, delayMs]);\n\n return value;\n}\n","import { useEffect, useRef, type RefObject } from 'react';\n\n/* -------------------------------------------------------------------- */\n/* Focus trap */\n/* */\n/* Lightweight focus-trap hook for components that compose a Radix */\n/* primitive without the overlay primitive (Dialog, AlertDialog, Sheet) */\n/* — those handle focus trapping for free via `@radix-ui/react-dialog`. */\n/* */\n/* This hook is intentionally NOT a Radix `<FocusScope>` re-export — it */\n/* is a hook so it composes inside `forwardRef` components without */\n/* nesting another wrapper element. If you need the full Radix */\n/* contract (return-focus management, loop, asChild), use */\n/* `@radix-ui/react-focus-scope` directly. */\n/* -------------------------------------------------------------------- */\n\nexport interface UseFocusTrapOptions {\n /** When `false` the trap is inert. Defaults to `true`. */\n enabled?: boolean;\n /**\n * When `true`, focus initial autofocus into the first focusable\n * descendant on mount / enable. @default true\n */\n autoFocus?: boolean;\n /**\n * When `true`, restores focus to the previously-focused element on\n * unmount / disable. @default true\n */\n restoreFocus?: boolean;\n}\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n 'audio[controls]',\n 'video[controls]',\n].join(',');\n\nfunction getFocusable(container: HTMLElement): HTMLElement[] {\n return Array.from(\n container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ).filter((el) => {\n if (el.hidden) return false;\n // `inert` and `aria-hidden=\"true\"` block focus on the element AND\n // all its descendants — walk the chain to catch either ancestor.\n let node: HTMLElement | null = el;\n while (node) {\n if (node.hasAttribute('inert')) return false;\n if (node.getAttribute('aria-hidden') === 'true') return false;\n node = node.parentElement;\n }\n return true;\n });\n}\n\n/**\n * Constrain Tab navigation to descendants of `containerRef`. Wraps Tab\n * forward from the last focusable to the first, and Shift+Tab back from\n * the first to the last. Optionally autofocuses on enable and restores\n * focus on disable.\n *\n * Use this for inline modal patterns or focus zones that don't ship\n * with their own Radix overlay. Don't stack it inside Dialog / Sheet —\n * Radix already traps focus in those.\n *\n * @example\n * const ref = useRef<HTMLDivElement>(null);\n * useFocusTrap(ref, { enabled: open });\n * return <div ref={ref}>…</div>;\n */\nexport function useFocusTrap<T extends HTMLElement>(\n containerRef: RefObject<T | null>,\n options: UseFocusTrapOptions = {},\n): void {\n const { enabled = true, autoFocus = true, restoreFocus = true } = options;\n const previouslyFocused = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (!enabled) return;\n const container = containerRef.current;\n if (!container) return;\n\n previouslyFocused.current =\n typeof document !== 'undefined' &&\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n\n if (autoFocus) {\n const focusable = getFocusable(container);\n // Container itself is the fallback focus target — needs `tabIndex`\n // to receive focus, but `-1` is fine.\n const target =\n focusable[0] ?? (container.tabIndex >= -1 ? container : null);\n target?.focus();\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key !== 'Tab') return;\n const root = containerRef.current;\n if (!root) return;\n const focusable = getFocusable(root);\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement;\n\n if (event.shiftKey) {\n if (active === first || !root.contains(active)) {\n event.preventDefault();\n last.focus();\n }\n } else {\n if (active === last || !root.contains(active)) {\n event.preventDefault();\n first.focus();\n }\n }\n }\n\n container.addEventListener('keydown', onKeyDown);\n\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n if (restoreFocus && previouslyFocused.current) {\n // rAF lets parent unmounts settle before refocus — a microtask\n // fires too early and can throw on a detached node.\n const target = previouslyFocused.current;\n requestAnimationFrame(() => {\n if (target.isConnected) target.focus();\n });\n }\n };\n }, [enabled, autoFocus, restoreFocus, containerRef]);\n}\n"],"names":["useDebouncedValue","input","delayMs","value","setValue","useState","timerRef","useRef","useEffect","timer","FOCUSABLE_SELECTOR","getFocusable","container","el","node","useFocusTrap","containerRef","options","enabled","autoFocus","restoreFocus","previouslyFocused","target","onKeyDown","event","root","focusable","first","last","active"],"mappings":";;;;;;;;;;;;;;;;;AAgBO,SAASA,EAAqBC,GAAUC,GAAoB;AACjE,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAYJ,CAAK,GACrCK,IAAWC,EAA6C,IAAI;AAElE,SAAAC,EAAU,MAAM;AACd,QAAIN,KAAW,GAAG;AAGhB,MAAII,EAAS,YAAY,SACvB,aAAaA,EAAS,OAAO,GAC7BA,EAAS,UAAU,OAErBF,EAASH,CAAK;AACd;AAAA,IACF;AACA,UAAMQ,IAAQ,WAAW,MAAM;AAC7B,MAAAL,EAASH,CAAK,GACdK,EAAS,UAAU;AAAA,IACrB,GAAGJ,CAAO;AACV,WAAAI,EAAS,UAAUG,GACZ,MAAM,aAAaA,CAAK;AAAA,EACjC,GAAG,CAACR,GAAOC,CAAO,CAAC,GAEZC;AACT;ACTA,MAAMO,IAAqB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAEV,SAASC,EAAaC,GAAuC;AAC3D,SAAO,MAAM;AAAA,IACXA,EAAU,iBAA8BF,CAAkB;AAAA,EAAA,EAC1D,OAAO,CAACG,MAAO;AACf,QAAIA,EAAG,OAAQ,QAAO;AAGtB,QAAIC,IAA2BD;AAC/B,WAAOC,KAAM;AAEX,UADIA,EAAK,aAAa,OAAO,KACzBA,EAAK,aAAa,aAAa,MAAM,OAAQ,QAAO;AACxD,MAAAA,IAAOA,EAAK;AAAA,IACd;AACA,WAAO;AAAA,EACT,CAAC;AACH;AAiBO,SAASC,EACdC,GACAC,IAA+B,IACzB;AACN,QAAM,EAAE,SAAAC,IAAU,IAAM,WAAAC,IAAY,IAAM,cAAAC,IAAe,OAASH,GAC5DI,IAAoBd,EAA2B,IAAI;AAEzD,EAAAC,EAAU,MAAM;AACd,QAAI,CAACU,EAAS;AACd,UAAMN,IAAYI,EAAa;AAC/B,QAAI,CAACJ,EAAW;AAQhB,QANAS,EAAkB,UAChB,OAAO,WAAa,OACpB,SAAS,yBAAyB,cAC9B,SAAS,gBACT,MAEFF,GAAW;AAIb,YAAMG,IAHYX,EAAaC,CAAS,EAI5B,CAAC,MAAMA,EAAU,YAAY,KAAKA,IAAY;AAC1D,MAAAU,KAAA,QAAAA,EAAQ;AAAA,IACV;AAEA,aAASC,EAAUC,GAAsB;AACvC,UAAIA,EAAM,QAAQ,MAAO;AACzB,YAAMC,IAAOT,EAAa;AAC1B,UAAI,CAACS,EAAM;AACX,YAAMC,IAAYf,EAAac,CAAI;AACnC,UAAIC,EAAU,WAAW,GAAG;AAC1B,QAAAF,EAAM,eAAA;AACN;AAAA,MACF;AACA,YAAMG,IAAQD,EAAU,CAAC,GACnBE,IAAOF,EAAUA,EAAU,SAAS,CAAC,GACrCG,IAAS,SAAS;AAExB,MAAIL,EAAM,YACJK,MAAWF,KAAS,CAACF,EAAK,SAASI,CAAM,OAC3CL,EAAM,eAAA,GACNI,EAAK,MAAA,MAGHC,MAAWD,KAAQ,CAACH,EAAK,SAASI,CAAM,OAC1CL,EAAM,eAAA,GACNG,EAAM,MAAA;AAAA,IAGZ;AAEA,WAAAf,EAAU,iBAAiB,WAAWW,CAAS,GAExC,MAAM;AAEX,UADAX,EAAU,oBAAoB,WAAWW,CAAS,GAC9CH,KAAgBC,EAAkB,SAAS;AAG7C,cAAMC,IAASD,EAAkB;AACjC,8BAAsB,MAAM;AAC1B,UAAIC,EAAO,eAAaA,EAAO,MAAA;AAAA,QACjC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAACJ,GAASC,GAAWC,GAAcJ,CAAY,CAAC;AACrD;"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Reports whether a CSS line-clamped element is actually overflowing — i.e.
3
+ * its content is taller than the clamped box (`scrollHeight > clientHeight`).
4
+ *
5
+ * Used to drive "show the affordance only when the text is really cut":
6
+ * a tooltip on a clamped title, a "Read more" toggle on a clamped body.
7
+ * Because line-clamp keeps the full text in the DOM, this is purely a
8
+ * sighted-user convenience — assistive tech reads the full text regardless.
9
+ *
10
+ * Re-measures on element resize (a narrower column wraps more, so a title
11
+ * that fit at full width may clip in a two-column grid). `enabled` lets the
12
+ * caller switch measurement off — e.g. while a description is expanded, there
13
+ * is nothing to measure.
14
+ */
15
+ export declare function useClampOverflow<T extends HTMLElement>(enabled: boolean): {
16
+ ref: import("react").RefObject<T | null>;
17
+ isOverflowing: boolean;
18
+ };
19
+ //# sourceMappingURL=use-clamp-overflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-clamp-overflow.d.ts","sourceRoot":"","sources":["../../src/hooks/use-clamp-overflow.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,OAAO;;;EAqBvE"}