@alfadocs/ui-kit-debug 0.69.0 → 0.71.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 (788) hide show
  1. package/dist/_chunks/address-fields-CPbFJ8e8.js +246 -0
  2. package/dist/_chunks/address-fields-CPbFJ8e8.js.map +1 -0
  3. package/dist/_chunks/{agenda-card-BxSFkqgY.js → agenda-card-BQ-IKAru.js} +2 -2
  4. package/dist/_chunks/{agenda-card-BxSFkqgY.js.map → agenda-card-BQ-IKAru.js.map} +1 -1
  5. package/dist/_chunks/{agenda-tray-g0kg7HwB.js → agenda-tray-CGXRk58j.js} +2 -2
  6. package/dist/_chunks/{agenda-tray-g0kg7HwB.js.map → agenda-tray-CGXRk58j.js.map} +1 -1
  7. package/dist/_chunks/{ai-consent-banner-CXlsNX1c.js → ai-consent-banner-Be-h9mRI.js} +3 -3
  8. package/dist/_chunks/{ai-consent-banner-CXlsNX1c.js.map → ai-consent-banner-Be-h9mRI.js.map} +1 -1
  9. package/dist/_chunks/{ai-prompt-input-CuhTo9mh.js → ai-prompt-input-V4DdOeqv.js} +2 -2
  10. package/dist/_chunks/{ai-prompt-input-CuhTo9mh.js.map → ai-prompt-input-V4DdOeqv.js.map} +1 -1
  11. package/dist/_chunks/{alert-_mUKLmwA.js → alert-CHYZ96tR.js} +150 -96
  12. package/dist/_chunks/alert-CHYZ96tR.js.map +1 -0
  13. package/dist/_chunks/{alia-sidebar-B47qRQb5.js → alia-sidebar-DvIUzIX9.js} +107 -106
  14. package/dist/_chunks/alia-sidebar-DvIUzIX9.js.map +1 -0
  15. package/dist/_chunks/{anamnesis-card-DRmE24OQ.js → anamnesis-card-DvYCa16e.js} +2 -2
  16. package/dist/_chunks/{anamnesis-card-DRmE24OQ.js.map → anamnesis-card-DvYCa16e.js.map} +1 -1
  17. package/dist/_chunks/anatomy-scheme-CXSk11UJ.js +2445 -0
  18. package/dist/_chunks/anatomy-scheme-CXSk11UJ.js.map +1 -0
  19. package/dist/_chunks/annotation-marker-qt5R9WZX.js +120 -0
  20. package/dist/_chunks/annotation-marker-qt5R9WZX.js.map +1 -0
  21. package/dist/_chunks/{antenatal-schedule-timeline-35ebkcZT.js → antenatal-schedule-timeline-CwXrQRm1.js} +2 -2
  22. package/dist/_chunks/{antenatal-schedule-timeline-35ebkcZT.js.map → antenatal-schedule-timeline-CwXrQRm1.js.map} +1 -1
  23. package/dist/_chunks/{app-frame-BYx1gcV7.js → app-frame-DIEMIC5V.js} +67 -56
  24. package/dist/_chunks/app-frame-DIEMIC5V.js.map +1 -0
  25. package/dist/_chunks/appointment-card-DVaeJNVB.js +294 -0
  26. package/dist/_chunks/appointment-card-DVaeJNVB.js.map +1 -0
  27. package/dist/_chunks/appointment-timeline-PJgnrjFb.js +388 -0
  28. package/dist/_chunks/appointment-timeline-PJgnrjFb.js.map +1 -0
  29. package/dist/_chunks/appointment-tray-B16QPGbm.js +193 -0
  30. package/dist/_chunks/appointment-tray-B16QPGbm.js.map +1 -0
  31. package/dist/_chunks/{audio-recorder-DYXXnGug.js → audio-recorder-DNDsOLqO.js} +3 -3
  32. package/dist/_chunks/{audio-recorder-DYXXnGug.js.map → audio-recorder-DNDsOLqO.js.map} +1 -1
  33. package/dist/_chunks/{autocomplete-DOeGouCL.js → autocomplete-BrONKN8l.js} +168 -146
  34. package/dist/_chunks/autocomplete-BrONKN8l.js.map +1 -0
  35. package/dist/_chunks/{badge-CqGsX32l.js → badge-DCOqV9mI.js} +32 -27
  36. package/dist/_chunks/badge-DCOqV9mI.js.map +1 -0
  37. package/dist/_chunks/{bishop-score-PJI3AXzA.js → bishop-score-Cym_TeQY.js} +3 -3
  38. package/dist/_chunks/{bishop-score-PJI3AXzA.js.map → bishop-score-Cym_TeQY.js.map} +1 -1
  39. package/dist/_chunks/{bmi-calculator-BZtIJ53x.js → bmi-calculator-zjeY4E7J.js} +2 -2
  40. package/dist/_chunks/{bmi-calculator-BZtIJ53x.js.map → bmi-calculator-zjeY4E7J.js.map} +1 -1
  41. package/dist/_chunks/{booking-C3VqFReX.js → booking-C7do4vaR.js} +7 -7
  42. package/dist/_chunks/{booking-C3VqFReX.js.map → booking-C7do4vaR.js.map} +1 -1
  43. package/dist/_chunks/{button-group-Ciq6J4IW.js → button-group-CvEnVzY7.js} +32 -35
  44. package/dist/_chunks/{button-group-Ciq6J4IW.js.map → button-group-CvEnVzY7.js.map} +1 -1
  45. package/dist/_chunks/{care-plan-card-CvFGXa2z.js → care-plan-card-DzPDYgtK.js} +5 -5
  46. package/dist/_chunks/{care-plan-card-CvFGXa2z.js.map → care-plan-card-DzPDYgtK.js.map} +1 -1
  47. package/dist/_chunks/{care-plan-entry-card-C3E_gClk.js → care-plan-entry-card-CEnQy7YP.js} +5 -5
  48. package/dist/_chunks/{care-plan-entry-card-C3E_gClk.js.map → care-plan-entry-card-CEnQy7YP.js.map} +1 -1
  49. package/dist/_chunks/care-plan-header-DcXFXWit.js +198 -0
  50. package/dist/_chunks/care-plan-header-DcXFXWit.js.map +1 -0
  51. package/dist/_chunks/{chat-message-3V54YipB.js → chat-message-DzpcJR-q.js} +25 -23
  52. package/dist/_chunks/chat-message-DzpcJR-q.js.map +1 -0
  53. package/dist/_chunks/city-input-Dkgaak7I.js +169 -0
  54. package/dist/_chunks/city-input-Dkgaak7I.js.map +1 -0
  55. package/dist/_chunks/clinical-note-card-BUvNMNGL.js +436 -0
  56. package/dist/_chunks/clinical-note-card-BUvNMNGL.js.map +1 -0
  57. package/dist/_chunks/clipboard-list-S7s-MXQq.js +25 -0
  58. package/dist/_chunks/clipboard-list-S7s-MXQq.js.map +1 -0
  59. package/dist/_chunks/{combobox-Clum7gJ1.js → combobox-DnqSF0IH.js} +131 -114
  60. package/dist/_chunks/combobox-DnqSF0IH.js.map +1 -0
  61. package/dist/_chunks/connection-status-CY1HV8Wg.js +108 -0
  62. package/dist/_chunks/connection-status-CY1HV8Wg.js.map +1 -0
  63. package/dist/_chunks/{contact-profile-card-Dramqa9C.js → contact-profile-card-DDPwRFiP.js} +2 -2
  64. package/dist/_chunks/{contact-profile-card-Dramqa9C.js.map → contact-profile-card-DDPwRFiP.js.map} +1 -1
  65. package/dist/_chunks/control-room-rail-FAQZrGVL.js +333 -0
  66. package/dist/_chunks/control-room-rail-FAQZrGVL.js.map +1 -0
  67. package/dist/_chunks/country-select-BwUZQvTa.js +709 -0
  68. package/dist/_chunks/country-select-BwUZQvTa.js.map +1 -0
  69. package/dist/_chunks/{cycle-calculator-DmRGJNaT.js → cycle-calculator-CCmPwcBl.js} +2 -2
  70. package/dist/_chunks/{cycle-calculator-DmRGJNaT.js.map → cycle-calculator-CCmPwcBl.js.map} +1 -1
  71. package/dist/_chunks/{dependent-selector-CG_FOHya.js → dependent-selector-DUV4thxX.js} +2 -2
  72. package/dist/_chunks/{dependent-selector-CG_FOHya.js.map → dependent-selector-DUV4thxX.js.map} +1 -1
  73. package/dist/_chunks/{document-scanner-CTubA0-N.js → document-scanner-C_AxLooF.js} +3 -3
  74. package/dist/_chunks/{document-scanner-CTubA0-N.js.map → document-scanner-C_AxLooF.js.map} +1 -1
  75. package/dist/_chunks/{due-date-calculator-BTmsIQqD.js → due-date-calculator-Brdj-euS.js} +3 -3
  76. package/dist/_chunks/{due-date-calculator-BTmsIQqD.js.map → due-date-calculator-Brdj-euS.js.map} +1 -1
  77. package/dist/_chunks/editable-currency-cell-renderer-CGELrkIj.js +410 -0
  78. package/dist/_chunks/editable-currency-cell-renderer-CGELrkIj.js.map +1 -0
  79. package/dist/_chunks/email-input-DJ7EXklP.js +397 -0
  80. package/dist/_chunks/{email-input-B_Y55f5G.js.map → email-input-DJ7EXklP.js.map} +1 -1
  81. package/dist/_chunks/{entity-card-COhmqHly.js → entity-card-DmrgYSEX.js} +38 -20
  82. package/dist/_chunks/{entity-card-COhmqHly.js.map → entity-card-DmrgYSEX.js.map} +1 -1
  83. package/dist/_chunks/entity-summary-CaM1Y-xE.js +291 -0
  84. package/dist/_chunks/entity-summary-CaM1Y-xE.js.map +1 -0
  85. package/dist/_chunks/{fetal-weight-CRz7KE2D.js → fetal-weight-DNCkyeVo.js} +2 -2
  86. package/dist/_chunks/{fetal-weight-CRz7KE2D.js.map → fetal-weight-DNCkyeVo.js.map} +1 -1
  87. package/dist/_chunks/field-array-siUZzfYe.js +146 -0
  88. package/dist/_chunks/field-array-siUZzfYe.js.map +1 -0
  89. package/dist/_chunks/field-value-3jMM0uDx.js +415 -0
  90. package/dist/_chunks/field-value-3jMM0uDx.js.map +1 -0
  91. package/dist/_chunks/{file-upload-5ScQd4fE.js → file-upload-DwZcAK8D.js} +2 -1
  92. package/dist/_chunks/{file-upload-5ScQd4fE.js.map → file-upload-DwZcAK8D.js.map} +1 -1
  93. package/dist/_chunks/{freemium-paywall-DZ2mBS3w.js → freemium-paywall-WYlNO7yT.js} +2 -2
  94. package/dist/_chunks/{freemium-paywall-DZ2mBS3w.js.map → freemium-paywall-WYlNO7yT.js.map} +1 -1
  95. package/dist/_chunks/{gestational-age-calculator-BleUdhbI.js → gestational-age-calculator-DKzEV5Qi.js} +4 -4
  96. package/dist/_chunks/{gestational-age-calculator-BleUdhbI.js.map → gestational-age-calculator-DKzEV5Qi.js.map} +1 -1
  97. package/dist/_chunks/hash-CysBBS_N.js +17 -0
  98. package/dist/_chunks/hash-CysBBS_N.js.map +1 -0
  99. package/dist/_chunks/{hcg-doubling-CnjDXX6U.js → hcg-doubling-C7bmuaU3.js} +2 -2
  100. package/dist/_chunks/{hcg-doubling-CnjDXX6U.js.map → hcg-doubling-C7bmuaU3.js.map} +1 -1
  101. package/dist/_chunks/iban-input-B0TWzR1R.js +436 -0
  102. package/dist/_chunks/iban-input-B0TWzR1R.js.map +1 -0
  103. package/dist/_chunks/icon-picker-0B7KhrF1.js +272 -0
  104. package/dist/_chunks/icon-picker-0B7KhrF1.js.map +1 -0
  105. package/dist/_chunks/image-cropper-D9jqJy19.js +367 -0
  106. package/dist/_chunks/image-cropper-D9jqJy19.js.map +1 -0
  107. package/dist/_chunks/{actions-cell-renderer-DrcaxB0w.js → link-cell-renderer-De_SLjSq.js} +792 -668
  108. package/dist/_chunks/link-cell-renderer-De_SLjSq.js.map +1 -0
  109. package/dist/_chunks/list-checks-BUs75d_o.js +18 -0
  110. package/dist/_chunks/list-checks-BUs75d_o.js.map +1 -0
  111. package/dist/_chunks/lock-CKOIn0IK.js +15 -0
  112. package/dist/_chunks/lock-CKOIn0IK.js.map +1 -0
  113. package/dist/_chunks/{marketplace-app-shell-6T9W4Knl.js → marketplace-app-shell-BGqkywsi.js} +5 -5
  114. package/dist/_chunks/{marketplace-app-shell-6T9W4Knl.js.map → marketplace-app-shell-BGqkywsi.js.map} +1 -1
  115. package/dist/_chunks/message-card-DsHFFiL1.js +319 -0
  116. package/dist/_chunks/message-card-DsHFFiL1.js.map +1 -0
  117. package/dist/_chunks/{message-tray-DwrBLJlf.js → message-tray-C0a6CL1_.js} +172 -135
  118. package/dist/_chunks/message-tray-C0a6CL1_.js.map +1 -0
  119. package/dist/_chunks/{multi-select-BdHHDrRN.js → multi-select-WE4S9FIF.js} +75 -63
  120. package/dist/_chunks/{multi-select-BdHHDrRN.js.map → multi-select-WE4S9FIF.js.map} +1 -1
  121. package/dist/_chunks/nav-grid-9xphY3FM.js +169 -0
  122. package/dist/_chunks/nav-grid-9xphY3FM.js.map +1 -0
  123. package/dist/_chunks/notes-panel-DXiMfuvp.js +320 -0
  124. package/dist/_chunks/notes-panel-DXiMfuvp.js.map +1 -0
  125. package/dist/_chunks/notification-card-BMqNzCIt.js +290 -0
  126. package/dist/_chunks/notification-card-BMqNzCIt.js.map +1 -0
  127. package/dist/_chunks/{notification-tray-Btb9oQeZ.js → notification-tray-BmUlCx3g.js} +201 -166
  128. package/dist/_chunks/notification-tray-BmUlCx3g.js.map +1 -0
  129. package/dist/_chunks/{operator-hero-CP2Nhupm.js → operator-hero-BO8TqzX2.js} +3 -3
  130. package/dist/_chunks/{operator-hero-CP2Nhupm.js.map → operator-hero-BO8TqzX2.js.map} +1 -1
  131. package/dist/_chunks/panel-header-D313n_9-.js +105 -0
  132. package/dist/_chunks/panel-header-D313n_9-.js.map +1 -0
  133. package/dist/_chunks/patient-details-DgfTJimE.js +759 -0
  134. package/dist/_chunks/patient-details-DgfTJimE.js.map +1 -0
  135. package/dist/_chunks/{patient-search-CBC_ySF6.js → patient-search-CSWQKOSP.js} +3 -3
  136. package/dist/_chunks/{patient-search-CBC_ySF6.js.map → patient-search-CSWQKOSP.js.map} +1 -1
  137. package/dist/_chunks/{patient-shell-DV3XEtIB.js → patient-shell-BMwsIKlW.js} +3 -3
  138. package/dist/_chunks/{patient-shell-DV3XEtIB.js.map → patient-shell-BMwsIKlW.js.map} +1 -1
  139. package/dist/_chunks/patient-summary-card-D4NdgYJB.js +452 -0
  140. package/dist/_chunks/patient-summary-card-D4NdgYJB.js.map +1 -0
  141. package/dist/_chunks/patient-table-CERknpd8.js +1110 -0
  142. package/dist/_chunks/patient-table-CERknpd8.js.map +1 -0
  143. package/dist/_chunks/{payment-form-DvjwYVIT.js → payment-form-CxqIXqw7.js} +2 -2
  144. package/dist/_chunks/{payment-form-DvjwYVIT.js.map → payment-form-CxqIXqw7.js.map} +1 -1
  145. package/dist/_chunks/{payment-request-card-DioWKBUq.js → payment-request-card-Blf-MFNY.js} +125 -136
  146. package/dist/_chunks/payment-request-card-Blf-MFNY.js.map +1 -0
  147. package/dist/_chunks/{pdf-viewer-D6BPfW2D.js → pdf-viewer-QfebdLOd.js} +192 -214
  148. package/dist/_chunks/pdf-viewer-QfebdLOd.js.map +1 -0
  149. package/dist/_chunks/{periodontal-chart-card-BuDEMbHE.js → periodontal-chart-card-hRRJY1NN.js} +2 -2
  150. package/dist/_chunks/{periodontal-chart-card-BuDEMbHE.js.map → periodontal-chart-card-hRRJY1NN.js.map} +1 -1
  151. package/dist/_chunks/permission-matrix-Bw5oexUt.js +174 -0
  152. package/dist/_chunks/permission-matrix-Bw5oexUt.js.map +1 -0
  153. package/dist/_chunks/position-grid-CcvqHaKN.js +169 -0
  154. package/dist/_chunks/position-grid-CcvqHaKN.js.map +1 -0
  155. package/dist/_chunks/postal-code-input-UCOYuRY2.js +192 -0
  156. package/dist/_chunks/postal-code-input-UCOYuRY2.js.map +1 -0
  157. package/dist/_chunks/{practice-results-KrTHqZua.js → practice-results-El5Z-oVp.js} +4 -4
  158. package/dist/_chunks/{practice-results-KrTHqZua.js.map → practice-results-El5Z-oVp.js.map} +1 -1
  159. package/dist/_chunks/{pregnancy-dating-DORUAOHB.js → pregnancy-dating-CunHrOpO.js} +4 -4
  160. package/dist/_chunks/{pregnancy-dating-DORUAOHB.js.map → pregnancy-dating-CunHrOpO.js.map} +1 -1
  161. package/dist/_chunks/{pregnancy-weight-gain-DVz4rr7-.js → pregnancy-weight-gain-BUNpTsH-.js} +2 -2
  162. package/dist/_chunks/{pregnancy-weight-gain-DVz4rr7-.js.map → pregnancy-weight-gain-BUNpTsH-.js.map} +1 -1
  163. package/dist/_chunks/{product-hub-panel-e6pW220e.js → product-hub-panel-DtU7KXxm.js} +257 -217
  164. package/dist/_chunks/product-hub-panel-DtU7KXxm.js.map +1 -0
  165. package/dist/_chunks/province-select-D_TZvix3.js +261 -0
  166. package/dist/_chunks/province-select-D_TZvix3.js.map +1 -0
  167. package/dist/_chunks/{public-header.agent-DqkqA-ca.js → public-header.agent-TxmC_x1I.js} +2 -2
  168. package/dist/_chunks/{public-header.agent-DqkqA-ca.js.map → public-header.agent-TxmC_x1I.js.map} +1 -1
  169. package/dist/_chunks/radiograph-panel.agent-tWjN2nHX.js +553 -0
  170. package/dist/_chunks/radiograph-panel.agent-tWjN2nHX.js.map +1 -0
  171. package/dist/_chunks/reviews-panel-DxkSrgMl.js +559 -0
  172. package/dist/_chunks/reviews-panel-DxkSrgMl.js.map +1 -0
  173. package/dist/_chunks/rich-text-editor-C8tyGjfb.js +2621 -0
  174. package/dist/_chunks/rich-text-editor-C8tyGjfb.js.map +1 -0
  175. package/dist/_chunks/{scroll-area-5wNK0Cyz.js → scroll-area-BZOvUhwQ.js} +2 -2
  176. package/dist/_chunks/scroll-area-BZOvUhwQ.js.map +1 -0
  177. package/dist/_chunks/{select-DMLG44F5.js → select-KsyRr8WH.js} +114 -102
  178. package/dist/_chunks/select-KsyRr8WH.js.map +1 -0
  179. package/dist/_chunks/{sheet-BxsE7eQm.js → sheet-umkfZjF6.js} +53 -42
  180. package/dist/_chunks/sheet-umkfZjF6.js.map +1 -0
  181. package/dist/_chunks/{sidebar-DY9jGjgt.js → sidebar-QCp9wHNP.js} +125 -113
  182. package/dist/_chunks/sidebar-QCp9wHNP.js.map +1 -0
  183. package/dist/_chunks/{sign-document-B4DeRhTe.js → sign-document-By6hMOra.js} +2 -2
  184. package/dist/_chunks/{sign-document-B4DeRhTe.js.map → sign-document-By6hMOra.js.map} +1 -1
  185. package/dist/_chunks/{stepper-accordion-Dki6r9ZE.js → stepper-accordion-DC-H-8v4.js} +38 -48
  186. package/dist/_chunks/stepper-accordion-DC-H-8v4.js.map +1 -0
  187. package/dist/_chunks/tab-bar-Bv9nGNdO.js +262 -0
  188. package/dist/_chunks/tab-bar-Bv9nGNdO.js.map +1 -0
  189. package/dist/_chunks/{tabs-BxcOziCo.js → tabs-CYZVKKDl.js} +2 -2
  190. package/dist/_chunks/{tabs-BxcOziCo.js.map → tabs-CYZVKKDl.js.map} +1 -1
  191. package/dist/_chunks/task-card-DCdsI0ZT.js +189 -0
  192. package/dist/_chunks/task-card-DCdsI0ZT.js.map +1 -0
  193. package/dist/_chunks/{task-tray-qOEQflu4.js → task-tray-DNVejijD.js} +2 -2
  194. package/dist/_chunks/{task-tray-qOEQflu4.js.map → task-tray-DNVejijD.js.map} +1 -1
  195. package/dist/_chunks/tasks-panel-C9odmawT.js +757 -0
  196. package/dist/_chunks/tasks-panel-C9odmawT.js.map +1 -0
  197. package/dist/_chunks/token-insert-menu-CFQqTe_n.js +147 -0
  198. package/dist/_chunks/token-insert-menu-CFQqTe_n.js.map +1 -0
  199. package/dist/_chunks/tool-rail-BZx0-yIr.js +524 -0
  200. package/dist/_chunks/tool-rail-BZx0-yIr.js.map +1 -0
  201. package/dist/_chunks/tooth-scheme-DJZtzfeY.js +2133 -0
  202. package/dist/_chunks/tooth-scheme-DJZtzfeY.js.map +1 -0
  203. package/dist/_chunks/{transaction-chip-DK84XCBU.js → transaction-chip-CscoQbxF.js} +88 -61
  204. package/dist/_chunks/transaction-chip-CscoQbxF.js.map +1 -0
  205. package/dist/_chunks/{transcript-panel-3THQX6nJ.js → transcript-panel-CHGHHHdT.js} +95 -83
  206. package/dist/_chunks/transcript-panel-CHGHHHdT.js.map +1 -0
  207. package/dist/_chunks/{unit-converter-YEpD9evj.js → unit-converter-CwlZbfdn.js} +2 -2
  208. package/dist/_chunks/{unit-converter-YEpD9evj.js.map → unit-converter-CwlZbfdn.js.map} +1 -1
  209. package/dist/_chunks/use-clamp-overflow-DQE2kwZ9.js +20 -0
  210. package/dist/_chunks/use-clamp-overflow-DQE2kwZ9.js.map +1 -0
  211. package/dist/_chunks/use-edge-resize-ZnGG7gyO.js.map +1 -1
  212. package/dist/_chunks/use-overflow-collapse-BIOzKbni.js +32 -0
  213. package/dist/_chunks/use-overflow-collapse-BIOzKbni.js.map +1 -0
  214. package/dist/_chunks/use-persistent-state-nZwZAnE9.js +24 -0
  215. package/dist/_chunks/use-persistent-state-nZwZAnE9.js.map +1 -0
  216. package/dist/_chunks/{warning-stack-BsgaEbL8.js → warning-stack--sTrrBDA.js} +86 -101
  217. package/dist/_chunks/warning-stack--sTrrBDA.js.map +1 -0
  218. package/dist/_chunks/{workflow-map-Bdam9pGp.js → workflow-map-M8MBBHQm.js} +107 -119
  219. package/dist/_chunks/workflow-map-M8MBBHQm.js.map +1 -0
  220. package/dist/_chunks/zoom-out-CgVtf2Wx.js +29 -0
  221. package/dist/_chunks/zoom-out-CgVtf2Wx.js.map +1 -0
  222. package/dist/agent/index.js +5 -4
  223. package/dist/agent/index.js.map +1 -1
  224. package/dist/agent/types.d.ts +19 -2
  225. package/dist/agent/types.d.ts.map +1 -1
  226. package/dist/agent-catalog.json +3325 -322
  227. package/dist/agent-i18n/en.json +314 -14
  228. package/dist/components/_shared/entity-card/entity-card.d.ts +6 -0
  229. package/dist/components/_shared/entity-card/entity-card.d.ts.map +1 -1
  230. package/dist/components/_shared/entity-card/index.d.ts +1 -1
  231. package/dist/components/_shared/entity-card/index.d.ts.map +1 -1
  232. package/dist/components/_shared/field-value.d.ts +21 -0
  233. package/dist/components/_shared/field-value.d.ts.map +1 -0
  234. package/dist/components/_shared/field-visibility-cog.d.ts +20 -0
  235. package/dist/components/_shared/field-visibility-cog.d.ts.map +1 -0
  236. package/dist/components/_shared/field-visibility.d.ts +36 -0
  237. package/dist/components/_shared/field-visibility.d.ts.map +1 -0
  238. package/dist/components/_shared/option.d.ts +2 -0
  239. package/dist/components/_shared/option.d.ts.map +1 -1
  240. package/dist/components/_shared/patient-fields.d.ts +119 -0
  241. package/dist/components/_shared/patient-fields.d.ts.map +1 -0
  242. package/dist/components/address-fields/address-fields.agent.d.ts +9 -0
  243. package/dist/components/address-fields/address-fields.agent.d.ts.map +1 -0
  244. package/dist/components/address-fields/address-fields.d.ts +29 -0
  245. package/dist/components/address-fields/address-fields.d.ts.map +1 -0
  246. package/dist/components/address-fields/index.d.ts +5 -0
  247. package/dist/components/address-fields/index.d.ts.map +1 -0
  248. package/dist/components/address-fields/index.js +6 -0
  249. package/dist/components/agenda-card/index.js +1 -1
  250. package/dist/components/agenda-tray/index.js +1 -1
  251. package/dist/components/ai-consent-banner/index.js +1 -1
  252. package/dist/components/ai-prompt-input/index.js +1 -1
  253. package/dist/components/alert/alert.d.ts +5 -0
  254. package/dist/components/alert/alert.d.ts.map +1 -1
  255. package/dist/components/alert/index.js +1 -1
  256. package/dist/components/anamnesis-card/index.js +1 -1
  257. package/dist/components/anatomy-scheme/anatomy-face-paths.d.ts +15 -0
  258. package/dist/components/anatomy-scheme/anatomy-face-paths.d.ts.map +1 -0
  259. package/dist/components/anatomy-scheme/anatomy-muscle-paths.d.ts +20 -0
  260. package/dist/components/anatomy-scheme/anatomy-muscle-paths.d.ts.map +1 -0
  261. package/dist/components/anatomy-scheme/anatomy-scheme-data.d.ts +121 -0
  262. package/dist/components/anatomy-scheme/anatomy-scheme-data.d.ts.map +1 -0
  263. package/dist/components/anatomy-scheme/anatomy-scheme.agent.d.ts +6 -0
  264. package/dist/components/anatomy-scheme/anatomy-scheme.agent.d.ts.map +1 -0
  265. package/dist/components/anatomy-scheme/anatomy-scheme.d.ts +69 -0
  266. package/dist/components/anatomy-scheme/anatomy-scheme.d.ts.map +1 -0
  267. package/dist/components/anatomy-scheme/index.d.ts +6 -0
  268. package/dist/components/anatomy-scheme/index.d.ts.map +1 -0
  269. package/dist/components/anatomy-scheme/index.js +17 -0
  270. package/dist/components/anatomy-scheme/index.js.map +1 -0
  271. package/dist/components/annotation-marker/annotation-marker.d.ts +33 -0
  272. package/dist/components/annotation-marker/annotation-marker.d.ts.map +1 -0
  273. package/dist/components/annotation-marker/index.d.ts +3 -0
  274. package/dist/components/annotation-marker/index.d.ts.map +1 -0
  275. package/dist/components/annotation-marker/index.js +7 -0
  276. package/dist/components/annotation-marker/index.js.map +1 -0
  277. package/dist/components/app-frame/app-frame.d.ts +2 -2
  278. package/dist/components/app-frame/app-frame.d.ts.map +1 -1
  279. package/dist/components/app-frame/index.js +1 -1
  280. package/dist/components/appointment-card/appointment-card.d.ts +25 -1
  281. package/dist/components/appointment-card/appointment-card.d.ts.map +1 -1
  282. package/dist/components/appointment-card/index.js +6 -5
  283. package/dist/components/appointment-card/index.js.map +1 -1
  284. package/dist/components/appointment-timeline/appointment-timeline.agent.d.ts +4 -0
  285. package/dist/components/appointment-timeline/appointment-timeline.agent.d.ts.map +1 -0
  286. package/dist/components/appointment-timeline/appointment-timeline.d.ts +66 -0
  287. package/dist/components/appointment-timeline/appointment-timeline.d.ts.map +1 -0
  288. package/dist/components/appointment-timeline/index.d.ts +4 -0
  289. package/dist/components/appointment-timeline/index.d.ts.map +1 -0
  290. package/dist/components/appointment-timeline/index.js +6 -0
  291. package/dist/components/appointment-timeline/index.js.map +1 -0
  292. package/dist/components/audio-recorder/index.js +1 -1
  293. package/dist/components/autocomplete/autocomplete.d.ts +10 -0
  294. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
  295. package/dist/components/autocomplete/index.js +1 -1
  296. package/dist/components/badge/badge.d.ts +6 -2
  297. package/dist/components/badge/badge.d.ts.map +1 -1
  298. package/dist/components/badge/index.js +1 -1
  299. package/dist/components/bishop-score/index.js +1 -1
  300. package/dist/components/bmi-calculator/index.js +1 -1
  301. package/dist/components/booking/index.js +1 -1
  302. package/dist/components/button-group/button-group.d.ts.map +1 -1
  303. package/dist/components/button-group/index.js +1 -1
  304. package/dist/components/care-plan-card/index.js +1 -1
  305. package/dist/components/care-plan-entry-card/index.js +1 -1
  306. package/dist/components/care-plan-header/care-plan-header.agent.d.ts +4 -0
  307. package/dist/components/care-plan-header/care-plan-header.agent.d.ts.map +1 -0
  308. package/dist/components/care-plan-header/care-plan-header.d.ts +111 -0
  309. package/dist/components/care-plan-header/care-plan-header.d.ts.map +1 -0
  310. package/dist/components/care-plan-header/index.d.ts +4 -0
  311. package/dist/components/care-plan-header/index.d.ts.map +1 -0
  312. package/dist/components/care-plan-header/index.js +6 -0
  313. package/dist/components/care-plan-header/index.js.map +1 -0
  314. package/dist/components/chat-message/chat-message.d.ts.map +1 -1
  315. package/dist/components/chat-message/index.js +1 -1
  316. package/dist/components/city-input/city-input.agent.d.ts +8 -0
  317. package/dist/components/city-input/city-input.agent.d.ts.map +1 -0
  318. package/dist/components/city-input/city-input.d.ts +57 -0
  319. package/dist/components/city-input/city-input.d.ts.map +1 -0
  320. package/dist/components/city-input/index.d.ts +5 -0
  321. package/dist/components/city-input/index.d.ts.map +1 -0
  322. package/dist/components/city-input/index.js +6 -0
  323. package/dist/components/city-input/index.js.map +1 -0
  324. package/dist/components/clinical-note-card/clinical-note-card.d.ts +21 -1
  325. package/dist/components/clinical-note-card/clinical-note-card.d.ts.map +1 -1
  326. package/dist/components/clinical-note-card/index.js +1 -1
  327. package/dist/components/combobox/combobox.d.ts +17 -0
  328. package/dist/components/combobox/combobox.d.ts.map +1 -1
  329. package/dist/components/combobox/index.js +1 -1
  330. package/dist/components/connection-status/connection-status.agent.d.ts +4 -0
  331. package/dist/components/connection-status/connection-status.agent.d.ts.map +1 -0
  332. package/dist/components/connection-status/connection-status.d.ts +36 -0
  333. package/dist/components/connection-status/connection-status.d.ts.map +1 -0
  334. package/dist/components/connection-status/index.d.ts +4 -0
  335. package/dist/components/connection-status/index.d.ts.map +1 -0
  336. package/dist/components/connection-status/index.js +6 -0
  337. package/dist/components/connection-status/index.js.map +1 -0
  338. package/dist/components/contact-profile-card/index.js +1 -1
  339. package/dist/components/control-room-rail/control-room-context.d.ts +53 -0
  340. package/dist/components/control-room-rail/control-room-context.d.ts.map +1 -0
  341. package/dist/components/control-room-rail/control-room-rail.agent.d.ts +4 -0
  342. package/dist/components/control-room-rail/control-room-rail.agent.d.ts.map +1 -0
  343. package/dist/components/control-room-rail/control-room-rail.d.ts +35 -0
  344. package/dist/components/control-room-rail/control-room-rail.d.ts.map +1 -0
  345. package/dist/components/control-room-rail/index.d.ts +6 -0
  346. package/dist/components/control-room-rail/index.d.ts.map +1 -0
  347. package/dist/components/control-room-rail/index.js +10 -0
  348. package/dist/components/control-room-rail/index.js.map +1 -0
  349. package/dist/components/counter/counter.d.ts +1 -1
  350. package/dist/components/country-select/country-select.agent.d.ts +8 -0
  351. package/dist/components/country-select/country-select.agent.d.ts.map +1 -0
  352. package/dist/components/country-select/country-select.d.ts +51 -0
  353. package/dist/components/country-select/country-select.d.ts.map +1 -0
  354. package/dist/components/country-select/index.d.ts +6 -0
  355. package/dist/components/country-select/index.d.ts.map +1 -0
  356. package/dist/components/country-select/index.js +9 -0
  357. package/dist/components/country-select/index.js.map +1 -0
  358. package/dist/components/country-select/iso-3166.d.ts +15 -0
  359. package/dist/components/country-select/iso-3166.d.ts.map +1 -0
  360. package/dist/components/cycle-calculator/index.js +1 -1
  361. package/dist/components/data-table/cell-renderers/actions-cell-renderer.d.ts +18 -0
  362. package/dist/components/data-table/cell-renderers/actions-cell-renderer.d.ts.map +1 -1
  363. package/dist/components/data-table/cell-renderers/reorder-cell-renderer.d.ts +34 -0
  364. package/dist/components/data-table/cell-renderers/reorder-cell-renderer.d.ts.map +1 -0
  365. package/dist/components/data-table/filters/select-filter.d.ts.map +1 -1
  366. package/dist/components/data-table/index.d.ts +3 -1
  367. package/dist/components/data-table/index.d.ts.map +1 -1
  368. package/dist/components/data-table/index.js +35 -32
  369. package/dist/components/dependent-selector/index.js +1 -1
  370. package/dist/components/document-scanner/index.js +1 -1
  371. package/dist/components/due-date-calculator/index.js +2 -2
  372. package/dist/components/email-input/email-input.d.ts.map +1 -1
  373. package/dist/components/email-input/index.js +1 -1
  374. package/dist/components/entity-summary/entity-summary.agent.d.ts +4 -0
  375. package/dist/components/entity-summary/entity-summary.agent.d.ts.map +1 -0
  376. package/dist/components/entity-summary/entity-summary.d.ts +92 -0
  377. package/dist/components/entity-summary/entity-summary.d.ts.map +1 -0
  378. package/dist/components/entity-summary/index.d.ts +3 -0
  379. package/dist/components/entity-summary/index.d.ts.map +1 -0
  380. package/dist/components/entity-summary/index.js +5 -0
  381. package/dist/components/entity-summary/index.js.map +1 -0
  382. package/dist/components/fetal-weight/index.js +1 -1
  383. package/dist/components/field-array/field-array.agent.d.ts +4 -0
  384. package/dist/components/field-array/field-array.agent.d.ts.map +1 -0
  385. package/dist/components/field-array/field-array.d.ts +45 -0
  386. package/dist/components/field-array/field-array.d.ts.map +1 -0
  387. package/dist/components/field-array/index.d.ts +4 -0
  388. package/dist/components/field-array/index.d.ts.map +1 -0
  389. package/dist/components/field-array/index.js +6 -0
  390. package/dist/components/field-array/index.js.map +1 -0
  391. package/dist/components/file-upload/index.js +1 -1
  392. package/dist/components/freemium-paywall/freemium-paywall.d.ts +1 -1
  393. package/dist/components/freemium-paywall/index.js +1 -1
  394. package/dist/components/gestational-age-calculator/index.js +1 -1
  395. package/dist/components/hcg-doubling/index.js +1 -1
  396. package/dist/components/iban-input/iban-input.agent.d.ts +4 -0
  397. package/dist/components/iban-input/iban-input.agent.d.ts.map +1 -0
  398. package/dist/components/iban-input/iban-input.d.ts +51 -0
  399. package/dist/components/iban-input/iban-input.d.ts.map +1 -0
  400. package/dist/components/iban-input/index.d.ts +5 -0
  401. package/dist/components/iban-input/index.d.ts.map +1 -0
  402. package/dist/components/iban-input/index.js +13 -0
  403. package/dist/components/iban-input/index.js.map +1 -0
  404. package/dist/components/iban-input/is-valid-iban.d.ts +31 -0
  405. package/dist/components/iban-input/is-valid-iban.d.ts.map +1 -0
  406. package/dist/components/icon-picker/icon-picker.agent.d.ts +4 -0
  407. package/dist/components/icon-picker/icon-picker.agent.d.ts.map +1 -0
  408. package/dist/components/icon-picker/icon-picker.d.ts +41 -0
  409. package/dist/components/icon-picker/icon-picker.d.ts.map +1 -0
  410. package/dist/components/icon-picker/index.d.ts +4 -0
  411. package/dist/components/icon-picker/index.d.ts.map +1 -0
  412. package/dist/components/icon-picker/index.js +6 -0
  413. package/dist/components/icon-picker/index.js.map +1 -0
  414. package/dist/components/image-cropper/crop-geometry.d.ts +30 -0
  415. package/dist/components/image-cropper/crop-geometry.d.ts.map +1 -0
  416. package/dist/components/image-cropper/image-cropper.agent.d.ts +4 -0
  417. package/dist/components/image-cropper/image-cropper.agent.d.ts.map +1 -0
  418. package/dist/components/image-cropper/image-cropper.d.ts +32 -0
  419. package/dist/components/image-cropper/image-cropper.d.ts.map +1 -0
  420. package/dist/components/image-cropper/index.d.ts +5 -0
  421. package/dist/components/image-cropper/index.d.ts.map +1 -0
  422. package/dist/components/image-cropper/index.js +11 -0
  423. package/dist/components/image-cropper/index.js.map +1 -0
  424. package/dist/components/index.d.ts +25 -1
  425. package/dist/components/index.d.ts.map +1 -1
  426. package/dist/components/message-card/index.js +1 -1
  427. package/dist/components/message-card/message-card.d.ts +14 -0
  428. package/dist/components/message-card/message-card.d.ts.map +1 -1
  429. package/dist/components/message-tray/index.js +1 -1
  430. package/dist/components/message-tray/message-tray.agent.d.ts.map +1 -1
  431. package/dist/components/message-tray/message-tray.d.ts +4 -0
  432. package/dist/components/message-tray/message-tray.d.ts.map +1 -1
  433. package/dist/components/multi-select/index.js +1 -1
  434. package/dist/components/multi-select/multi-select.d.ts.map +1 -1
  435. package/dist/components/nav-grid/index.d.ts +4 -0
  436. package/dist/components/nav-grid/index.d.ts.map +1 -0
  437. package/dist/components/nav-grid/index.js +7 -0
  438. package/dist/components/nav-grid/index.js.map +1 -0
  439. package/dist/components/nav-grid/nav-grid.agent.d.ts +4 -0
  440. package/dist/components/nav-grid/nav-grid.agent.d.ts.map +1 -0
  441. package/dist/components/nav-grid/nav-grid.d.ts +41 -0
  442. package/dist/components/nav-grid/nav-grid.d.ts.map +1 -0
  443. package/dist/components/notes-panel/index.d.ts +3 -0
  444. package/dist/components/notes-panel/index.d.ts.map +1 -0
  445. package/dist/components/notes-panel/index.js +5 -0
  446. package/dist/components/notes-panel/index.js.map +1 -0
  447. package/dist/components/notes-panel/notes-panel.agent.d.ts +4 -0
  448. package/dist/components/notes-panel/notes-panel.agent.d.ts.map +1 -0
  449. package/dist/components/notes-panel/notes-panel.d.ts +94 -0
  450. package/dist/components/notes-panel/notes-panel.d.ts.map +1 -0
  451. package/dist/components/notification-card/index.js +1 -1
  452. package/dist/components/notification-card/notification-card.d.ts +15 -0
  453. package/dist/components/notification-card/notification-card.d.ts.map +1 -1
  454. package/dist/components/notification-tray/index.js +1 -1
  455. package/dist/components/notification-tray/notification-tray.agent.d.ts.map +1 -1
  456. package/dist/components/notification-tray/notification-tray.d.ts +4 -0
  457. package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
  458. package/dist/components/operator-hero/index.js +1 -1
  459. package/dist/components/panel-header/index.d.ts +3 -0
  460. package/dist/components/panel-header/index.d.ts.map +1 -0
  461. package/dist/components/panel-header/index.js +7 -0
  462. package/dist/components/panel-header/index.js.map +1 -0
  463. package/dist/components/panel-header/panel-header.d.ts +41 -0
  464. package/dist/components/panel-header/panel-header.d.ts.map +1 -0
  465. package/dist/components/patient-details/index.d.ts +5 -0
  466. package/dist/components/patient-details/index.d.ts.map +1 -0
  467. package/dist/components/patient-details/index.js +6 -0
  468. package/dist/components/patient-details/index.js.map +1 -0
  469. package/dist/components/patient-details/patient-details.agent.d.ts +4 -0
  470. package/dist/components/patient-details/patient-details.agent.d.ts.map +1 -0
  471. package/dist/components/patient-details/patient-details.d.ts +96 -0
  472. package/dist/components/patient-details/patient-details.d.ts.map +1 -0
  473. package/dist/components/patient-search/index.js +1 -1
  474. package/dist/components/patient-summary-card/index.js +1 -1
  475. package/dist/components/patient-summary-card/patient-summary-card.agent.d.ts.map +1 -1
  476. package/dist/components/patient-summary-card/patient-summary-card.d.ts +40 -1
  477. package/dist/components/patient-summary-card/patient-summary-card.d.ts.map +1 -1
  478. package/dist/components/patient-table/columns.d.ts +69 -40
  479. package/dist/components/patient-table/columns.d.ts.map +1 -1
  480. package/dist/components/patient-table/index.d.ts +2 -6
  481. package/dist/components/patient-table/index.d.ts.map +1 -1
  482. package/dist/components/patient-table/index.js +8 -9
  483. package/dist/components/patient-table/patient-table.d.ts +38 -4
  484. package/dist/components/patient-table/patient-table.d.ts.map +1 -1
  485. package/dist/components/patient-table/types.d.ts +52 -2
  486. package/dist/components/patient-table/types.d.ts.map +1 -1
  487. package/dist/components/patient-table/use-responsive-columns.d.ts +8 -6
  488. package/dist/components/patient-table/use-responsive-columns.d.ts.map +1 -1
  489. package/dist/components/payment-card/index.js +1 -1
  490. package/dist/components/payment-form/index.js +1 -1
  491. package/dist/components/pdf-viewer/index.js +1 -1
  492. package/dist/components/periodontal-chart-card/index.js +1 -1
  493. package/dist/components/permission-matrix/index.d.ts +4 -0
  494. package/dist/components/permission-matrix/index.d.ts.map +1 -0
  495. package/dist/components/permission-matrix/index.js +7 -0
  496. package/dist/components/permission-matrix/index.js.map +1 -0
  497. package/dist/components/permission-matrix/permission-matrix.agent.d.ts +4 -0
  498. package/dist/components/permission-matrix/permission-matrix.agent.d.ts.map +1 -0
  499. package/dist/components/permission-matrix/permission-matrix.d.ts +47 -0
  500. package/dist/components/permission-matrix/permission-matrix.d.ts.map +1 -0
  501. package/dist/components/position-grid/index.d.ts +4 -0
  502. package/dist/components/position-grid/index.d.ts.map +1 -0
  503. package/dist/components/position-grid/index.js +7 -0
  504. package/dist/components/position-grid/index.js.map +1 -0
  505. package/dist/components/position-grid/position-grid.agent.d.ts +4 -0
  506. package/dist/components/position-grid/position-grid.agent.d.ts.map +1 -0
  507. package/dist/components/position-grid/position-grid.d.ts +39 -0
  508. package/dist/components/position-grid/position-grid.d.ts.map +1 -0
  509. package/dist/components/postal-code-input/index.d.ts +5 -0
  510. package/dist/components/postal-code-input/index.d.ts.map +1 -0
  511. package/dist/components/postal-code-input/index.js +6 -0
  512. package/dist/components/postal-code-input/index.js.map +1 -0
  513. package/dist/components/postal-code-input/postal-code-input.agent.d.ts +8 -0
  514. package/dist/components/postal-code-input/postal-code-input.agent.d.ts.map +1 -0
  515. package/dist/components/postal-code-input/postal-code-input.d.ts +27 -0
  516. package/dist/components/postal-code-input/postal-code-input.d.ts.map +1 -0
  517. package/dist/components/practice-results/index.js +1 -1
  518. package/dist/components/pregnancy-dating/index.js +1 -1
  519. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  520. package/dist/components/product-hub-tray/index.js +1 -1
  521. package/dist/components/product-hub-tray/product-hub-tray.d.ts +13 -1
  522. package/dist/components/product-hub-tray/product-hub-tray.d.ts.map +1 -1
  523. package/dist/components/province-select/index.d.ts +6 -0
  524. package/dist/components/province-select/index.d.ts.map +1 -0
  525. package/dist/components/province-select/index.js +7 -0
  526. package/dist/components/province-select/index.js.map +1 -0
  527. package/dist/components/province-select/it-provinces.d.ts +8 -0
  528. package/dist/components/province-select/it-provinces.d.ts.map +1 -0
  529. package/dist/components/province-select/province-select.agent.d.ts +8 -0
  530. package/dist/components/province-select/province-select.agent.d.ts.map +1 -0
  531. package/dist/components/province-select/province-select.d.ts +38 -0
  532. package/dist/components/province-select/province-select.d.ts.map +1 -0
  533. package/dist/components/public-footer/public-footer.d.ts +1 -1
  534. package/dist/components/public-header/index.js +1 -1
  535. package/dist/components/radiograph-panel/index.d.ts +4 -0
  536. package/dist/components/radiograph-panel/index.d.ts.map +1 -0
  537. package/dist/components/radiograph-panel/index.js +7 -0
  538. package/dist/components/radiograph-panel/index.js.map +1 -0
  539. package/dist/components/radiograph-panel/radiograph-panel.agent.d.ts +13 -0
  540. package/dist/components/radiograph-panel/radiograph-panel.agent.d.ts.map +1 -0
  541. package/dist/components/radiograph-panel/radiograph-panel.d.ts +36 -0
  542. package/dist/components/radiograph-panel/radiograph-panel.d.ts.map +1 -0
  543. package/dist/components/reviews-panel/index.js +1 -1
  544. package/dist/components/reviews-panel/reviews-panel.d.ts.map +1 -1
  545. package/dist/components/rich-text-editor/editor-toolbar.d.ts +17 -0
  546. package/dist/components/rich-text-editor/editor-toolbar.d.ts.map +1 -1
  547. package/dist/components/rich-text-editor/index.js +1 -1
  548. package/dist/components/rich-text-editor/rich-text-editor.agent.d.ts.map +1 -1
  549. package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
  550. package/dist/components/scroll-area/index.js +1 -1
  551. package/dist/components/select/index.js +1 -1
  552. package/dist/components/select/select.d.ts +8 -2
  553. package/dist/components/select/select.d.ts.map +1 -1
  554. package/dist/components/sheet/index.js +1 -1
  555. package/dist/components/sheet/sheet.d.ts.map +1 -1
  556. package/dist/components/sidebar/index.js +2 -2
  557. package/dist/components/sidebar/sidebar.d.ts.map +1 -1
  558. package/dist/components/sign-document/index.js +1 -1
  559. package/dist/components/skeleton/skeleton.d.ts +1 -1
  560. package/dist/components/stepper-accordion/index.js +1 -1
  561. package/dist/components/tab-bar/index.js +1 -1
  562. package/dist/components/tab-bar/tab-bar.d.ts +18 -1
  563. package/dist/components/tab-bar/tab-bar.d.ts.map +1 -1
  564. package/dist/components/tabs/index.js +1 -1
  565. package/dist/components/task-card/index.js +1 -1
  566. package/dist/components/task-card/task-card.d.ts +14 -6
  567. package/dist/components/task-card/task-card.d.ts.map +1 -1
  568. package/dist/components/task-tray/index.js +1 -1
  569. package/dist/components/tasks-panel/index.d.ts +4 -0
  570. package/dist/components/tasks-panel/index.d.ts.map +1 -0
  571. package/dist/components/tasks-panel/index.js +6 -0
  572. package/dist/components/tasks-panel/index.js.map +1 -0
  573. package/dist/components/tasks-panel/tasks-panel.agent.d.ts +4 -0
  574. package/dist/components/tasks-panel/tasks-panel.agent.d.ts.map +1 -0
  575. package/dist/components/tasks-panel/tasks-panel.d.ts +152 -0
  576. package/dist/components/tasks-panel/tasks-panel.d.ts.map +1 -0
  577. package/dist/components/token-insert-menu/index.d.ts +4 -0
  578. package/dist/components/token-insert-menu/index.d.ts.map +1 -0
  579. package/dist/components/token-insert-menu/index.js +6 -0
  580. package/dist/components/token-insert-menu/index.js.map +1 -0
  581. package/dist/components/token-insert-menu/token-insert-menu.agent.d.ts +4 -0
  582. package/dist/components/token-insert-menu/token-insert-menu.agent.d.ts.map +1 -0
  583. package/dist/components/token-insert-menu/token-insert-menu.d.ts +33 -0
  584. package/dist/components/token-insert-menu/token-insert-menu.d.ts.map +1 -0
  585. package/dist/components/tool-rail/index.d.ts +4 -0
  586. package/dist/components/tool-rail/index.d.ts.map +1 -0
  587. package/dist/components/tool-rail/index.js +6 -0
  588. package/dist/components/tool-rail/index.js.map +1 -0
  589. package/dist/components/tool-rail/tool-rail.agent.d.ts +4 -0
  590. package/dist/components/tool-rail/tool-rail.agent.d.ts.map +1 -0
  591. package/dist/components/tool-rail/tool-rail.d.ts +160 -0
  592. package/dist/components/tool-rail/tool-rail.d.ts.map +1 -0
  593. package/dist/components/tooth-scheme/index.d.ts +2 -2
  594. package/dist/components/tooth-scheme/index.d.ts.map +1 -1
  595. package/dist/components/tooth-scheme/index.js +30 -23
  596. package/dist/components/tooth-scheme/tooth-data.d.ts +112 -1
  597. package/dist/components/tooth-scheme/tooth-data.d.ts.map +1 -1
  598. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts +2 -2
  599. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts.map +1 -1
  600. package/dist/components/tooth-scheme/tooth-scheme.d.ts +84 -11
  601. package/dist/components/tooth-scheme/tooth-scheme.d.ts.map +1 -1
  602. package/dist/components/transaction-chip/index.js +1 -1
  603. package/dist/components/transaction-chip/transaction-chip.d.ts +2 -2
  604. package/dist/components/transaction-chip/transaction-chip.d.ts.map +1 -1
  605. package/dist/components/transcript-panel/index.js +1 -1
  606. package/dist/components/transcript-panel/transcript-panel.d.ts +2 -2
  607. package/dist/components/transcript-panel/transcript-panel.d.ts.map +1 -1
  608. package/dist/components/unit-converter/index.js +1 -1
  609. package/dist/components/warning-stack/index.js +1 -1
  610. package/dist/components/warning-stack/warning-stack.d.ts +10 -7
  611. package/dist/components/warning-stack/warning-stack.d.ts.map +1 -1
  612. package/dist/components/workflow/index.js +1 -1
  613. package/dist/hooks/index.d.ts +1 -0
  614. package/dist/hooks/index.d.ts.map +1 -1
  615. package/dist/hooks/index.js +24 -22
  616. package/dist/hooks/index.js.map +1 -1
  617. package/dist/hooks/use-clamp-overflow.d.ts +19 -0
  618. package/dist/hooks/use-clamp-overflow.d.ts.map +1 -0
  619. package/dist/hooks/use-edge-resize.d.ts +2 -2
  620. package/dist/hooks/use-overflow-collapse.d.ts +46 -0
  621. package/dist/hooks/use-overflow-collapse.d.ts.map +1 -0
  622. package/dist/hooks/use-persistent-state.d.ts +7 -1
  623. package/dist/hooks/use-persistent-state.d.ts.map +1 -1
  624. package/dist/hooks/use-scroll-overflow.d.ts +36 -0
  625. package/dist/hooks/use-scroll-overflow.d.ts.map +1 -0
  626. package/dist/i18n/locales/ar.d.ts +475 -26
  627. package/dist/i18n/locales/ar.d.ts.map +1 -1
  628. package/dist/i18n/locales/ar.js +478 -31
  629. package/dist/i18n/locales/ar.js.map +1 -1
  630. package/dist/i18n/locales/de.d.ts +475 -26
  631. package/dist/i18n/locales/de.d.ts.map +1 -1
  632. package/dist/i18n/locales/de.js +480 -31
  633. package/dist/i18n/locales/de.js.map +1 -1
  634. package/dist/i18n/locales/el.d.ts +475 -26
  635. package/dist/i18n/locales/el.d.ts.map +1 -1
  636. package/dist/i18n/locales/el.js +485 -31
  637. package/dist/i18n/locales/el.js.map +1 -1
  638. package/dist/i18n/locales/en.d.ts +476 -34
  639. package/dist/i18n/locales/en.d.ts.map +1 -1
  640. package/dist/i18n/locales/en.js +492 -39
  641. package/dist/i18n/locales/en.js.map +1 -1
  642. package/dist/i18n/locales/es.d.ts +475 -26
  643. package/dist/i18n/locales/es.d.ts.map +1 -1
  644. package/dist/i18n/locales/es.js +477 -31
  645. package/dist/i18n/locales/es.js.map +1 -1
  646. package/dist/i18n/locales/fr.d.ts +475 -26
  647. package/dist/i18n/locales/fr.d.ts.map +1 -1
  648. package/dist/i18n/locales/fr.js +480 -31
  649. package/dist/i18n/locales/fr.js.map +1 -1
  650. package/dist/i18n/locales/hi.d.ts +475 -26
  651. package/dist/i18n/locales/hi.d.ts.map +1 -1
  652. package/dist/i18n/locales/hi.js +476 -31
  653. package/dist/i18n/locales/hi.js.map +1 -1
  654. package/dist/i18n/locales/it.d.ts +475 -26
  655. package/dist/i18n/locales/it.d.ts.map +1 -1
  656. package/dist/i18n/locales/it.js +480 -31
  657. package/dist/i18n/locales/it.js.map +1 -1
  658. package/dist/i18n/locales/ja.d.ts +475 -26
  659. package/dist/i18n/locales/ja.d.ts.map +1 -1
  660. package/dist/i18n/locales/ja.js +481 -31
  661. package/dist/i18n/locales/ja.js.map +1 -1
  662. package/dist/i18n/locales/nl.d.ts +475 -26
  663. package/dist/i18n/locales/nl.d.ts.map +1 -1
  664. package/dist/i18n/locales/nl.js +473 -31
  665. package/dist/i18n/locales/nl.js.map +1 -1
  666. package/dist/i18n/locales/pl.d.ts +475 -26
  667. package/dist/i18n/locales/pl.d.ts.map +1 -1
  668. package/dist/i18n/locales/pl.js +481 -31
  669. package/dist/i18n/locales/pl.js.map +1 -1
  670. package/dist/i18n/locales/pt.d.ts +475 -26
  671. package/dist/i18n/locales/pt.d.ts.map +1 -1
  672. package/dist/i18n/locales/pt.js +485 -31
  673. package/dist/i18n/locales/pt.js.map +1 -1
  674. package/dist/i18n/locales/ro.d.ts +475 -26
  675. package/dist/i18n/locales/ro.d.ts.map +1 -1
  676. package/dist/i18n/locales/ro.js +485 -31
  677. package/dist/i18n/locales/ro.js.map +1 -1
  678. package/dist/i18n/locales/ru.d.ts +475 -26
  679. package/dist/i18n/locales/ru.d.ts.map +1 -1
  680. package/dist/i18n/locales/ru.js +478 -31
  681. package/dist/i18n/locales/ru.js.map +1 -1
  682. package/dist/i18n/locales/sq.d.ts +475 -26
  683. package/dist/i18n/locales/sq.d.ts.map +1 -1
  684. package/dist/i18n/locales/sq.js +482 -31
  685. package/dist/i18n/locales/sq.js.map +1 -1
  686. package/dist/i18n/locales/sv.d.ts +475 -26
  687. package/dist/i18n/locales/sv.d.ts.map +1 -1
  688. package/dist/i18n/locales/sv.js +480 -31
  689. package/dist/i18n/locales/sv.js.map +1 -1
  690. package/dist/i18n/locales/tr.d.ts +475 -26
  691. package/dist/i18n/locales/tr.d.ts.map +1 -1
  692. package/dist/i18n/locales/tr.js +478 -31
  693. package/dist/i18n/locales/tr.js.map +1 -1
  694. package/dist/i18n/locales/zh.d.ts +475 -26
  695. package/dist/i18n/locales/zh.d.ts.map +1 -1
  696. package/dist/i18n/locales/zh.js +473 -31
  697. package/dist/i18n/locales/zh.js.map +1 -1
  698. package/dist/index.js +826 -709
  699. package/dist/index.js.map +1 -1
  700. package/dist/locales/ar.json +480 -31
  701. package/dist/locales/de.json +480 -31
  702. package/dist/locales/el.json +480 -31
  703. package/dist/locales/en.json +480 -31
  704. package/dist/locales/es.json +480 -31
  705. package/dist/locales/fr.json +480 -31
  706. package/dist/locales/hi.json +480 -31
  707. package/dist/locales/it.json +480 -31
  708. package/dist/locales/ja.json +480 -31
  709. package/dist/locales/nl.json +480 -31
  710. package/dist/locales/pl.json +480 -31
  711. package/dist/locales/pt.json +480 -31
  712. package/dist/locales/ro.json +480 -31
  713. package/dist/locales/ru.json +480 -31
  714. package/dist/locales/sq.json +480 -31
  715. package/dist/locales/sv.json +480 -31
  716. package/dist/locales/tr.json +480 -31
  717. package/dist/locales/zh.json +480 -31
  718. package/dist/patterns/alia-assistant/alia-chat-surface.d.ts.map +1 -1
  719. package/dist/patterns/alia-assistant/alia-types.d.ts +9 -0
  720. package/dist/patterns/alia-assistant/alia-types.d.ts.map +1 -1
  721. package/dist/patterns/alia-assistant/index.js +1 -1
  722. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  723. package/dist/patterns/patient-shell/index.js +1 -1
  724. package/dist/tokens.css +9 -1
  725. package/package.json +101 -5
  726. package/dist/_chunks/actions-cell-renderer-DrcaxB0w.js.map +0 -1
  727. package/dist/_chunks/ai-tools-rail-BA_sqy1A.js +0 -373
  728. package/dist/_chunks/ai-tools-rail-BA_sqy1A.js.map +0 -1
  729. package/dist/_chunks/alert-_mUKLmwA.js.map +0 -1
  730. package/dist/_chunks/alia-sidebar-B47qRQb5.js.map +0 -1
  731. package/dist/_chunks/app-frame-BYx1gcV7.js.map +0 -1
  732. package/dist/_chunks/appointment-tray-CZtvtaH-.js +0 -431
  733. package/dist/_chunks/appointment-tray-CZtvtaH-.js.map +0 -1
  734. package/dist/_chunks/autocomplete-DOeGouCL.js.map +0 -1
  735. package/dist/_chunks/badge-CqGsX32l.js.map +0 -1
  736. package/dist/_chunks/chat-message-3V54YipB.js.map +0 -1
  737. package/dist/_chunks/clinical-note-card-DqQYf_D4.js +0 -333
  738. package/dist/_chunks/clinical-note-card-DqQYf_D4.js.map +0 -1
  739. package/dist/_chunks/combobox-Clum7gJ1.js.map +0 -1
  740. package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js +0 -448
  741. package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js.map +0 -1
  742. package/dist/_chunks/email-input-B_Y55f5G.js +0 -396
  743. package/dist/_chunks/message-card-Bx4GmLvf.js +0 -277
  744. package/dist/_chunks/message-card-Bx4GmLvf.js.map +0 -1
  745. package/dist/_chunks/message-tray-DwrBLJlf.js.map +0 -1
  746. package/dist/_chunks/notification-card-BiESdm8q.js +0 -255
  747. package/dist/_chunks/notification-card-BiESdm8q.js.map +0 -1
  748. package/dist/_chunks/notification-tray-Btb9oQeZ.js.map +0 -1
  749. package/dist/_chunks/patient-summary-card-B836_fDB.js +0 -435
  750. package/dist/_chunks/patient-summary-card-B836_fDB.js.map +0 -1
  751. package/dist/_chunks/patient-table-CDuosVru.js +0 -889
  752. package/dist/_chunks/patient-table-CDuosVru.js.map +0 -1
  753. package/dist/_chunks/payment-request-card-DioWKBUq.js.map +0 -1
  754. package/dist/_chunks/pdf-viewer-D6BPfW2D.js.map +0 -1
  755. package/dist/_chunks/product-hub-panel-e6pW220e.js.map +0 -1
  756. package/dist/_chunks/reviews-panel-Dq7LMDcH.js +0 -555
  757. package/dist/_chunks/reviews-panel-Dq7LMDcH.js.map +0 -1
  758. package/dist/_chunks/rich-text-editor-BsV7zUdg.js +0 -2142
  759. package/dist/_chunks/rich-text-editor-BsV7zUdg.js.map +0 -1
  760. package/dist/_chunks/scroll-area-5wNK0Cyz.js.map +0 -1
  761. package/dist/_chunks/select-DMLG44F5.js.map +0 -1
  762. package/dist/_chunks/sheet-BxsE7eQm.js.map +0 -1
  763. package/dist/_chunks/sidebar-DY9jGjgt.js.map +0 -1
  764. package/dist/_chunks/stepper-accordion-Dki6r9ZE.js.map +0 -1
  765. package/dist/_chunks/tab-bar-B1ovILzh.js +0 -105
  766. package/dist/_chunks/tab-bar-B1ovILzh.js.map +0 -1
  767. package/dist/_chunks/task-card-BwY9jaV1.js +0 -124
  768. package/dist/_chunks/task-card-BwY9jaV1.js.map +0 -1
  769. package/dist/_chunks/tooth-scheme-yBr53cvv.js +0 -1330
  770. package/dist/_chunks/tooth-scheme-yBr53cvv.js.map +0 -1
  771. package/dist/_chunks/transaction-chip-DK84XCBU.js.map +0 -1
  772. package/dist/_chunks/transcript-panel-3THQX6nJ.js.map +0 -1
  773. package/dist/_chunks/use-persistent-state-i23OWy6G.js +0 -24
  774. package/dist/_chunks/use-persistent-state-i23OWy6G.js.map +0 -1
  775. package/dist/_chunks/warning-stack-BsgaEbL8.js.map +0 -1
  776. package/dist/_chunks/workflow-map-Bdam9pGp.js.map +0 -1
  777. package/dist/components/ai-tools-rail/ai-tools-rail.agent.d.ts +0 -4
  778. package/dist/components/ai-tools-rail/ai-tools-rail.agent.d.ts.map +0 -1
  779. package/dist/components/ai-tools-rail/ai-tools-rail.d.ts +0 -68
  780. package/dist/components/ai-tools-rail/ai-tools-rail.d.ts.map +0 -1
  781. package/dist/components/ai-tools-rail/index.d.ts +0 -4
  782. package/dist/components/ai-tools-rail/index.d.ts.map +0 -1
  783. package/dist/components/ai-tools-rail/index.js +0 -6
  784. package/dist/components/patient-table/cell-renderers/contact-cell.d.ts +0 -45
  785. package/dist/components/patient-table/cell-renderers/contact-cell.d.ts.map +0 -1
  786. package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts +0 -26
  787. package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts.map +0 -1
  788. /package/dist/components/{ai-tools-rail → address-fields}/index.js.map +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"country-select-BwUZQvTa.js","sources":["../../src/components/country-select/iso-3166.ts","../../src/components/country-select/country-select.agent.ts","../../src/components/country-select/country-select.tsx"],"sourcesContent":["/**\n * Bundled closed dataset for CountrySelect — ISO 3166-1 alpha-2 codes mapped to\n * UN geoscheme continental region. Localised country *names* are resolved at render\n * via Intl.DisplayNames and are never bundled here.\n *\n * Source: ISO 3166-1 (249 entries, current as of 2025).\n * Region assignment follows the UN M.49 geoscheme with the following project-level\n * overrides: Russia → 'Europe'; Turkey and Cyprus → 'Asia'; Greenland → 'Americas';\n * Antarctica territories (aq, bv, gs, hm, tf) → 'Antarctica'.\n */\n\nexport type CountryRegion =\n | 'Africa'\n | 'Americas'\n | 'Asia'\n | 'Europe'\n | 'Oceania'\n | 'Antarctica';\n\nexport const ISO_3166_REGIONS: Record<string, CountryRegion> = {\n ad: 'Europe', // Andorra\n ae: 'Asia', // United Arab Emirates\n af: 'Asia', // Afghanistan\n ag: 'Americas', // Antigua and Barbuda\n ai: 'Americas', // Anguilla\n al: 'Europe', // Albania\n am: 'Asia', // Armenia\n ao: 'Africa', // Angola\n aq: 'Antarctica', // Antarctica\n ar: 'Americas', // Argentina\n as: 'Oceania', // American Samoa\n at: 'Europe', // Austria\n au: 'Oceania', // Australia\n aw: 'Americas', // Aruba\n ax: 'Europe', // Åland Islands\n az: 'Asia', // Azerbaijan\n ba: 'Europe', // Bosnia and Herzegovina\n bb: 'Americas', // Barbados\n bd: 'Asia', // Bangladesh\n be: 'Europe', // Belgium\n bf: 'Africa', // Burkina Faso\n bg: 'Europe', // Bulgaria\n bh: 'Asia', // Bahrain\n bi: 'Africa', // Burundi\n bj: 'Africa', // Benin\n bl: 'Americas', // Saint Barthélemy\n bm: 'Americas', // Bermuda\n bn: 'Asia', // Brunei Darussalam\n bo: 'Americas', // Bolivia, Plurinational State of\n bq: 'Americas', // Bonaire, Sint Eustatius and Saba\n br: 'Americas', // Brazil\n bs: 'Americas', // Bahamas\n bt: 'Asia', // Bhutan\n bv: 'Antarctica', // Bouvet Island\n bw: 'Africa', // Botswana\n by: 'Europe', // Belarus\n bz: 'Americas', // Belize\n ca: 'Americas', // Canada\n cc: 'Oceania', // Cocos (Keeling) Islands\n cd: 'Africa', // Congo, Democratic Republic of the\n cf: 'Africa', // Central African Republic\n cg: 'Africa', // Congo\n ch: 'Europe', // Switzerland\n ci: 'Africa', // Côte d'Ivoire\n ck: 'Oceania', // Cook Islands\n cl: 'Americas', // Chile\n cm: 'Africa', // Cameroon\n cn: 'Asia', // China\n co: 'Americas', // Colombia\n cr: 'Americas', // Costa Rica\n cu: 'Americas', // Cuba\n cv: 'Africa', // Cabo Verde\n cw: 'Americas', // Curaçao\n cx: 'Oceania', // Christmas Island\n cy: 'Asia', // Cyprus\n cz: 'Europe', // Czechia\n de: 'Europe', // Germany\n dj: 'Africa', // Djibouti\n dk: 'Europe', // Denmark\n dm: 'Americas', // Dominica\n do: 'Americas', // Dominican Republic\n dz: 'Africa', // Algeria\n ec: 'Americas', // Ecuador\n ee: 'Europe', // Estonia\n eg: 'Africa', // Egypt\n eh: 'Africa', // Western Sahara\n er: 'Africa', // Eritrea\n es: 'Europe', // Spain\n et: 'Africa', // Ethiopia\n fi: 'Europe', // Finland\n fj: 'Oceania', // Fiji\n fk: 'Americas', // Falkland Islands (Malvinas)\n fm: 'Oceania', // Micronesia, Federated States of\n fo: 'Europe', // Faroe Islands\n fr: 'Europe', // France\n ga: 'Africa', // Gabon\n gb: 'Europe', // United Kingdom\n gd: 'Americas', // Grenada\n ge: 'Asia', // Georgia\n gf: 'Americas', // French Guiana\n gg: 'Europe', // Guernsey\n gh: 'Africa', // Ghana\n gi: 'Europe', // Gibraltar\n gl: 'Americas', // Greenland\n gm: 'Africa', // Gambia\n gn: 'Africa', // Guinea\n gp: 'Americas', // Guadeloupe\n gq: 'Africa', // Equatorial Guinea\n gr: 'Europe', // Greece\n gs: 'Antarctica', // South Georgia and the South Sandwich Islands\n gt: 'Americas', // Guatemala\n gu: 'Oceania', // Guam\n gw: 'Africa', // Guinea-Bissau\n gy: 'Americas', // Guyana\n hk: 'Asia', // Hong Kong\n hm: 'Antarctica', // Heard Island and McDonald Islands\n hn: 'Americas', // Honduras\n hr: 'Europe', // Croatia\n ht: 'Americas', // Haiti\n hu: 'Europe', // Hungary\n id: 'Asia', // Indonesia\n ie: 'Europe', // Ireland\n il: 'Asia', // Israel\n im: 'Europe', // Isle of Man\n in: 'Asia', // India\n io: 'Africa', // British Indian Ocean Territory\n iq: 'Asia', // Iraq\n ir: 'Asia', // Iran, Islamic Republic of\n is: 'Europe', // Iceland\n it: 'Europe', // Italy\n je: 'Europe', // Jersey\n jm: 'Americas', // Jamaica\n jo: 'Asia', // Jordan\n jp: 'Asia', // Japan\n ke: 'Africa', // Kenya\n kg: 'Asia', // Kyrgyzstan\n kh: 'Asia', // Cambodia\n ki: 'Oceania', // Kiribati\n km: 'Africa', // Comoros\n kn: 'Americas', // Saint Kitts and Nevis\n kp: 'Asia', // Korea, Democratic People's Republic of\n kr: 'Asia', // Korea, Republic of\n kw: 'Asia', // Kuwait\n ky: 'Americas', // Cayman Islands\n kz: 'Asia', // Kazakhstan\n la: 'Asia', // Lao People's Democratic Republic\n lb: 'Asia', // Lebanon\n lc: 'Americas', // Saint Lucia\n li: 'Europe', // Liechtenstein\n lk: 'Asia', // Sri Lanka\n lr: 'Africa', // Liberia\n ls: 'Africa', // Lesotho\n lt: 'Europe', // Lithuania\n lu: 'Europe', // Luxembourg\n lv: 'Europe', // Latvia\n ly: 'Africa', // Libya\n ma: 'Africa', // Morocco\n mc: 'Europe', // Monaco\n md: 'Europe', // Moldova, Republic of\n me: 'Europe', // Montenegro\n mf: 'Americas', // Saint Martin (French part)\n mg: 'Africa', // Madagascar\n mh: 'Oceania', // Marshall Islands\n mk: 'Europe', // North Macedonia\n ml: 'Africa', // Mali\n mm: 'Asia', // Myanmar\n mn: 'Asia', // Mongolia\n mo: 'Asia', // Macao\n mp: 'Oceania', // Northern Mariana Islands\n mq: 'Americas', // Martinique\n mr: 'Africa', // Mauritania\n ms: 'Americas', // Montserrat\n mt: 'Europe', // Malta\n mu: 'Africa', // Mauritius\n mv: 'Asia', // Maldives\n mw: 'Africa', // Malawi\n mx: 'Americas', // Mexico\n my: 'Asia', // Malaysia\n mz: 'Africa', // Mozambique\n na: 'Africa', // Namibia\n nc: 'Oceania', // New Caledonia\n ne: 'Africa', // Niger\n nf: 'Oceania', // Norfolk Island\n ng: 'Africa', // Nigeria\n ni: 'Americas', // Nicaragua\n nl: 'Europe', // Netherlands\n no: 'Europe', // Norway\n np: 'Asia', // Nepal\n nr: 'Oceania', // Nauru\n nu: 'Oceania', // Niue\n nz: 'Oceania', // New Zealand\n om: 'Asia', // Oman\n pa: 'Americas', // Panama\n pe: 'Americas', // Peru\n pf: 'Oceania', // French Polynesia\n pg: 'Oceania', // Papua New Guinea\n ph: 'Asia', // Philippines\n pk: 'Asia', // Pakistan\n pl: 'Europe', // Poland\n pm: 'Americas', // Saint Pierre and Miquelon\n pn: 'Oceania', // Pitcairn\n pr: 'Americas', // Puerto Rico\n ps: 'Asia', // Palestine, State of\n pt: 'Europe', // Portugal\n pw: 'Oceania', // Palau\n py: 'Americas', // Paraguay\n qa: 'Asia', // Qatar\n re: 'Africa', // Réunion\n ro: 'Europe', // Romania\n rs: 'Europe', // Serbia\n ru: 'Europe', // Russian Federation\n rw: 'Africa', // Rwanda\n sa: 'Asia', // Saudi Arabia\n sb: 'Oceania', // Solomon Islands\n sc: 'Africa', // Seychelles\n sd: 'Africa', // Sudan\n se: 'Europe', // Sweden\n sg: 'Asia', // Singapore\n sh: 'Africa', // Saint Helena, Ascension and Tristan da Cunha\n si: 'Europe', // Slovenia\n sj: 'Europe', // Svalbard and Jan Mayen\n sk: 'Europe', // Slovakia\n sl: 'Africa', // Sierra Leone\n sm: 'Europe', // San Marino\n sn: 'Africa', // Senegal\n so: 'Africa', // Somalia\n sr: 'Americas', // Suriname\n ss: 'Africa', // South Sudan\n st: 'Africa', // Sao Tome and Principe\n sv: 'Americas', // El Salvador\n sx: 'Americas', // Sint Maarten (Dutch part)\n sy: 'Asia', // Syrian Arab Republic\n sz: 'Africa', // Eswatini\n tc: 'Americas', // Turks and Caicos Islands\n td: 'Africa', // Chad\n tf: 'Antarctica', // French Southern Territories\n tg: 'Africa', // Togo\n th: 'Asia', // Thailand\n tj: 'Asia', // Tajikistan\n tk: 'Oceania', // Tokelau\n tl: 'Asia', // Timor-Leste\n tm: 'Asia', // Turkmenistan\n tn: 'Africa', // Tunisia\n to: 'Oceania', // Tonga\n tr: 'Asia', // Türkiye\n tt: 'Americas', // Trinidad and Tobago\n tv: 'Oceania', // Tuvalu\n tw: 'Asia', // Taiwan, Province of China\n tz: 'Africa', // Tanzania, United Republic of\n ua: 'Europe', // Ukraine\n ug: 'Africa', // Uganda\n um: 'Oceania', // United States Minor Outlying Islands\n us: 'Americas', // United States of America\n uy: 'Americas', // Uruguay\n uz: 'Asia', // Uzbekistan\n va: 'Europe', // Holy See\n vc: 'Americas', // Saint Vincent and the Grenadines\n ve: 'Americas', // Venezuela, Bolivarian Republic of\n vg: 'Americas', // Virgin Islands (British)\n vi: 'Americas', // Virgin Islands (U.S.)\n vn: 'Asia', // Viet Nam\n vu: 'Oceania', // Vanuatu\n wf: 'Oceania', // Wallis and Futuna\n ws: 'Oceania', // Samoa\n ye: 'Asia', // Yemen\n yt: 'Africa', // Mayotte\n za: 'Africa', // South Africa\n zm: 'Africa', // Zambia\n zw: 'Africa', // Zimbabwe\n};\n\nexport const ISO_3166_ALPHA2: readonly string[] =\n Object.keys(ISO_3166_REGIONS).sort();\n\nexport function regionForCountry(code: string): CountryRegion | undefined {\n return ISO_3166_REGIONS[code.toLowerCase()];\n}\n","import type { AgentAdapter } from '../../agent/types';\n\n// Curated agent-readiness handle — the country-select wrapper owns the\n// selection; the inner Combobox registers its own `combobox` adapter for\n// the mechanical open/filter/close concerns.\nexport interface CountrySelectHandle {\n getValue: () => string | null;\n setValue: (value: string | null) => void;\n clear: () => void;\n}\n\nexport const countrySelectAgent: AgentAdapter<CountrySelectHandle> = {\n id: 'country-select',\n // Persisted single choice of an ISO country code.\n capabilities: ['select_single', 'set_value'],\n state: {\n value: {\n type: 'string | null',\n descriptionKey: 'ui.agent.countrySelect.state.value',\n description:\n 'Selected ISO 3166-1 alpha-2 country code (lowercased), or null when nothing is selected.',\n read: (handle) => handle.getValue(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string | null }',\n argsSchema: {\n type: 'object',\n properties: {\n value: {\n type: ['string', 'null'],\n description:\n 'ISO 3166-1 alpha-2 country code (lowercased) to select, or null to clear.',\n },\n },\n required: ['value'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.countrySelect.actions.setValue',\n description: 'Set the selected country by ISO alpha-2 code.',\n examples: [{ args: { value: 'it' }, note: 'Select Italy.' }],\n invoke: (handle, args: { value: string | null }) => {\n handle.setValue(args.value);\n },\n },\n clear_selection: {\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.countrySelect.actions.clearSelection',\n description: 'Clear the selected country.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'country-select' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n // The inner Combobox emits `data-option-id` and registers its own\n // `combobox` adapter; both adapters intentionally coexist (the registry\n // keys by id + instanceId), so this hook is reachable from this root too.\n item: {\n attr: 'data-option-id',\n description:\n 'Each country option emits its alpha-2 code as data-option-id.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Combobox, type ComboboxOption } from '../combobox/combobox';\nimport { Flag, hasFlag } from '../flag/flag';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useAgentRegistration } from '../../agent';\nimport {\n ISO_3166_ALPHA2,\n regionForCountry,\n type CountryRegion,\n} from './iso-3166';\nimport {\n countrySelectAgent,\n type CountrySelectHandle,\n} from './country-select.agent';\n\n/* ------------------------------------------------------------------ */\n/* Public API */\n/* */\n/* A searchable country picker built on Combobox. Country NAMES are */\n/* resolved per-locale at render via `Intl.DisplayNames` (zero bundled */\n/* name data, switches with the active language); only the ISO code */\n/* list + region grouping are bundled. The value is the ISO 3166-1 */\n/* alpha-2 code, LOWERCASED, matching `StructuredAddress.country`. */\n/* ------------------------------------------------------------------ */\n\nexport interface CountrySelectProps {\n /** Selected country — ISO 3166-1 alpha-2, lowercased (e.g. `'it'`). */\n value?: string;\n /** Uncontrolled initial value. Ignored once `value` is set. */\n defaultValue?: string;\n /** Fires with the new lowercased alpha-2 code (or `''` when cleared). */\n onValueChange?: (code: string) => void;\n /**\n * Restrict the list to these codes (lowercase alpha-2). Default: every\n * ISO 3166-1 alpha-2 country.\n */\n countries?: string[];\n /**\n * Float these countries to the top under a \"Popular\" heading, in the\n * given order (lowercase alpha-2). They are removed from their region\n * group so they never appear twice.\n */\n popularCountries?: string[];\n /** Group the remaining countries by world region. Default `true`. */\n grouped?: boolean;\n /**\n * Override the localized display name for specific codes — e.g. to pin\n * politically-sensitive wording. Keyed by lowercase alpha-2.\n */\n nameOverrides?: Record<string, string>;\n /** Show a flag before each country name. Default `true`. */\n showFlag?: boolean;\n placeholder?: string;\n clearable?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n size?: 'sm' | 'md' | 'lg';\n tone?: 'default' | 'error';\n /**\n * Accessible name. REQUIRED when used inside a `<FormField>`: cmdk labels\n * the input through its own hidden element, so the visible FormField label\n * is not the computed accessible name unless this is passed. Set it to the\n * visible label text (e.g. `\"Country\"`).\n */\n 'aria-label'?: string;\n /** Invalid-state fallback for use outside a `<FormField>` (inline editors). */\n 'aria-invalid'?: boolean;\n /** Error-message id fallback for use outside a `<FormField>`. */\n 'aria-describedby'?: string;\n className?: string;\n}\n\n// Display order for region groups — broad-to-narrow by AlfaDocs relevance.\nconst REGION_ORDER: readonly CountryRegion[] = [\n 'Europe',\n 'Americas',\n 'Asia',\n 'Africa',\n 'Oceania',\n 'Antarctica',\n];\n\nexport const CountrySelect = forwardRef<HTMLInputElement, CountrySelectProps>(\n function CountrySelect(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n countries,\n popularCountries,\n grouped = true,\n nameOverrides,\n showFlag = true,\n placeholder,\n clearable,\n disabled,\n readOnly,\n required,\n name,\n id,\n size = 'md',\n tone = 'default',\n 'aria-label': ariaLabel,\n 'aria-invalid': ariaInvalid,\n 'aria-describedby': ariaDescribedBy,\n className,\n },\n ref,\n ) {\n const { t, i18n } = useTranslation();\n\n const [value, setValue] = useControllableState<string>({\n // Normalise incoming codes — a consumer may pass `'IT'` from a server\n // payload, but option values are lowercase, so an un-normalised value\n // would never match and the field would render blank.\n value: valueProp?.toLowerCase(),\n defaultValue: defaultValue?.toLowerCase(),\n onChange: onValueChange,\n });\n\n const displayNames = useMemo(() => {\n try {\n return new Intl.DisplayNames([i18n.language], { type: 'region' });\n } catch {\n return new Intl.DisplayNames(['en'], { type: 'region' });\n }\n }, [i18n.language]);\n\n const collator = useMemo(\n () => new Intl.Collator(i18n.language),\n [i18n.language],\n );\n\n const codes = useMemo(\n () => (countries ?? ISO_3166_ALPHA2).map((c) => c.toLowerCase()),\n [countries],\n );\n\n const nameFor = useCallback(\n (code: string): string =>\n nameOverrides?.[code] ??\n displayNames.of(code.toUpperCase()) ??\n code.toUpperCase(),\n [nameOverrides, displayNames],\n );\n\n const flagFor = useCallback(\n (code: string): ReactNode =>\n showFlag && hasFlag(code) ? (\n <Flag country={code} size=\"sm\" rounded=\"sm\" />\n ) : undefined,\n [showFlag],\n );\n\n const options = useMemo<ComboboxOption[]>(() => {\n const codeSet = new Set(codes);\n const popular = (popularCountries ?? [])\n .map((c) => c.toLowerCase())\n .filter((c) => codeSet.has(c));\n const popularSet = new Set(popular);\n\n const makeOption = (code: string, group?: string): ComboboxOption => ({\n value: code,\n label: nameFor(code),\n group,\n startAdornment: flagFor(code),\n });\n\n const popularGroup = grouped\n ? t('inputs.countrySelect.popular', 'Popular')\n : undefined;\n const popularOptions = popular.map((c) => makeOption(c, popularGroup));\n\n const rest = codes.filter((c) => !popularSet.has(c));\n\n if (!grouped) {\n const sorted = [...rest].sort((a, b) =>\n collator.compare(nameFor(a), nameFor(b)),\n );\n return [...popularOptions, ...sorted.map((c) => makeOption(c))];\n }\n\n const byRegion = new Map<CountryRegion, string[]>();\n for (const code of rest) {\n const region = regionForCountry(code) ?? 'Antarctica';\n const list = byRegion.get(region);\n if (list) list.push(code);\n else byRegion.set(region, [code]);\n }\n\n const groupedOptions: ComboboxOption[] = [];\n for (const region of REGION_ORDER) {\n const list = byRegion.get(region);\n if (!list) continue;\n list.sort((a, b) => collator.compare(nameFor(a), nameFor(b)));\n const heading = t(\n `inputs.countrySelect.regions.${region.toLowerCase()}`,\n region,\n );\n for (const code of list) groupedOptions.push(makeOption(code, heading));\n }\n return [...popularOptions, ...groupedOptions];\n }, [codes, popularCountries, grouped, nameFor, flagFor, collator, t]);\n\n /* ----------------------------------------------------------------- */\n /* Agent adapter */\n /* ----------------------------------------------------------------- */\n\n const valueRef = useRef(value);\n useEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n const agentHandle = useMemo<CountrySelectHandle>(\n () => ({\n getValue: () => valueRef.current || null,\n setValue: (next) => setValue(next ?? ''),\n clear: () => setValue(''),\n }),\n [setValue],\n );\n useAgentRegistration(countrySelectAgent, agentHandle, id);\n\n return (\n <div\n data-component=\"country-select\"\n data-component-id={id}\n className={['ds:w-full', className].filter(Boolean).join(' ')}\n >\n <Combobox\n ref={ref}\n options={options}\n value={value ?? ''}\n onValueChange={(next) => setValue(next)}\n placeholder={\n placeholder ??\n t('inputs.countrySelect.placeholder', 'Search countries')\n }\n emptyMessage={t('inputs.countrySelect.empty', 'No countries found')}\n clearable={clearable}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n name={name}\n id={id}\n size={size}\n tone={tone}\n autoComplete=\"country\"\n aria-label={ariaLabel}\n aria-invalid={ariaInvalid}\n aria-describedby={ariaDescribedBy}\n />\n </div>\n );\n },\n);\n\nCountrySelect.displayName = 'CountrySelect';\n"],"names":["ISO_3166_REGIONS","ISO_3166_ALPHA2","regionForCountry","code","countrySelectAgent","handle","args","REGION_ORDER","CountrySelect","forwardRef","valueProp","defaultValue","onValueChange","countries","popularCountries","grouped","nameOverrides","showFlag","placeholder","clearable","disabled","readOnly","required","name","id","size","tone","ariaLabel","ariaInvalid","ariaDescribedBy","className","ref","t","i18n","useTranslation","value","setValue","useControllableState","displayNames","useMemo","collator","codes","c","nameFor","useCallback","flagFor","hasFlag","jsx","Flag","options","codeSet","popular","popularSet","makeOption","group","popularGroup","popularOptions","rest","sorted","a","b","byRegion","region","list","groupedOptions","heading","valueRef","useRef","useEffect","agentHandle","next","useAgentRegistration","Combobox"],"mappings":";;;;;;;AAmBO,MAAMA,IAAkD;AAAA,EAC7D,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI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"}
@@ -6,7 +6,7 @@ import { F as L } from "./form-field-BOm9hK35.js";
6
6
  import { D as z } from "./date-picker-Dl9RKxaV.js";
7
7
  import { N as D } from "./number-input-DxphVG_A.js";
8
8
  import { C as E } from "./card-DPmk26CL.js";
9
- import { B as P } from "./badge-CqGsX32l.js";
9
+ import { B as P } from "./badge-DCOqV9mI.js";
10
10
  import { I as B } from "./insert-result-njqBthzT.js";
11
11
  import { a as i } from "./date-picker-variants-DAcSLTua.js";
12
12
  import { C as G } from "./check-DPdL_Sm7.js";
@@ -249,4 +249,4 @@ export {
249
249
  U as L,
250
250
  O as p
251
251
  };
252
- //# sourceMappingURL=cycle-calculator-DmRGJNaT.js.map
252
+ //# sourceMappingURL=cycle-calculator-CCmPwcBl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cycle-calculator-DmRGJNaT.js","sources":["../../node_modules/lucide-react/dist/esm/icons/droplet.js","../../src/components/cycle-calculator/cycle.ts","../../src/components/cycle-calculator/cycle-calculator.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z\",\n key: \"c7niix\"\n }\n ]\n];\nconst Droplet = createLucideIcon(\"droplet\", __iconNode);\n\nexport { __iconNode, Droplet as default };\n//# sourceMappingURL=droplet.js.map\n","/* ------------------------------------------------------------------ */\n/* Menstrual-cycle prediction — pure, framework-free, unit-testable. */\n/* */\n/* Uses the standard fixed-luteal-phase model: ovulation falls ~14 days */\n/* before the next period, so on a cycle of length L ovulation is day */\n/* (L − 14). The fertile window spans the 5 days before ovulation */\n/* (sperm survival) through 1 day after (oocyte viability). */\n/* ------------------------------------------------------------------ */\n\nimport { addDays } from 'date-fns';\n\n/** Standard menstrual-cycle length. */\nexport const DEFAULT_CYCLE_LENGTH = 28;\n/** Luteal phase is biologically near-constant at ~14 days. */\nexport const LUTEAL_PHASE_DAYS = 14;\n/** Sperm survive up to ~5 days before ovulation. */\nexport const FERTILE_DAYS_BEFORE = 5;\n/** The oocyte is viable ~1 day after ovulation. */\nexport const FERTILE_DAYS_AFTER = 1;\n\nexport interface CycleInput {\n /** First day of the most recent period. */\n lastPeriodStart: Date;\n /** Average cycle length in days. Defaults to 28. */\n cycleLength?: number;\n /** Period (bleed) length in days. Optional — used for the period range. */\n periodLength?: number;\n}\n\nexport interface DateRange {\n start: Date;\n end: Date;\n}\n\nexport interface CyclePrediction {\n /** Start date of the next period. */\n nextPeriod: Date;\n /** Estimated ovulation date. */\n ovulation: Date;\n /** Fertile window (5 days before ovulation → 1 day after). */\n fertileWindow: DateRange;\n /** Start dates of the next few periods (length = `occurrences`). */\n upcomingPeriods: Date[];\n /**\n * The current period's bleed range (first day → last day), or `null` when no\n * `periodLength` was given.\n */\n periodRange: DateRange | null;\n}\n\n/**\n * Predict ovulation, the fertile window and upcoming periods from the last\n * period's start date. `occurrences` controls how many future periods to\n * list (default 3).\n */\nexport function predictCycle(\n input: CycleInput,\n occurrences = 3,\n): CyclePrediction {\n const cycle = input.cycleLength ?? DEFAULT_CYCLE_LENGTH;\n const { lastPeriodStart } = input;\n\n const ovulation = addDays(lastPeriodStart, cycle - LUTEAL_PHASE_DAYS);\n const fertileWindow: DateRange = {\n start: addDays(ovulation, -FERTILE_DAYS_BEFORE),\n end: addDays(ovulation, FERTILE_DAYS_AFTER),\n };\n const nextPeriod = addDays(lastPeriodStart, cycle);\n const upcomingPeriods = Array.from({ length: occurrences }, (_, i) =>\n addDays(lastPeriodStart, cycle * (i + 1)),\n );\n const periodRange: DateRange | null =\n input.periodLength && input.periodLength > 0\n ? {\n start: lastPeriodStart,\n end: addDays(lastPeriodStart, input.periodLength - 1),\n }\n : null;\n\n return { nextPeriod, ovulation, fertileWindow, upcomingPeriods, periodRange };\n}\n","/* ------------------------------------------------------------------ */\n/* CycleCalculator — predict ovulation, fertile window and upcoming */\n/* periods from the last period's start date. */\n/* */\n/* Maths lives in `./cycle` (pure, separately tested). */\n/* ------------------------------------------------------------------ */\n\nimport { forwardRef, useEffect, useMemo, useState } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Heart, Check, Droplet } from 'lucide-react';\nimport { FormField } from '../form-field';\nimport { DatePicker } from '../date-picker';\nimport { NumberInput } from '../number-input';\nimport { Card } from '../card';\nimport { Badge } from '../badge';\nimport {\n InsertButton,\n type InsertPayload,\n type InsertVariant,\n type InsertMode,\n} from '../_shared/insert-result';\nimport {\n type CyclePrediction,\n predictCycle,\n DEFAULT_CYCLE_LENGTH,\n} from './cycle';\n\nconst rootVariants = cva('ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]', {\n variants: {\n width: { full: 'ds:w-full', auto: 'ds:inline-flex' },\n },\n defaultVariants: { width: 'full' },\n});\n\n/**\n * DS token NAME backing the result-card chip — the fertile window is the\n * headline fertility datum, shown on screen with the `accent` Badge variant\n * (which fills `--accent`). The card chip reuses that token so the inserted\n * PNG chip matches the on-screen fertile-window badge.\n */\nconst HIGHLIGHT_TOKEN = '--accent';\n\nexport interface CycleCalculatorProps extends VariantProps<\n typeof rootVariants\n> {\n /** Initial cycle length in days. Defaults to 28. */\n defaultCycleLength?: number;\n /** Fires whenever a prediction can be computed (and `null` when it can't). */\n onResultChange?: (result: CyclePrediction | null) => void;\n /** When provided, shows the result-action buttons that emit / copy the result. */\n onInsert?: (payload: InsertPayload) => void;\n /**\n * Which verb the result button performs. Defaults to `'insert'`.\n * Use `'copy'` in an app-shell surface (no editor to insert into) — the\n * button writes the result to the clipboard as a multi-format `ClipboardItem`.\n */\n insertVariant?: InsertVariant;\n /** `copy` variant only — fired after a successful clipboard write. */\n onCopy?: (mode: InsertMode) => void;\n /** `copy` variant only — fired if the clipboard write can't proceed. */\n onError?: (error: unknown) => void;\n /**\n * Brand wordmark printed in the inserted/copied result-card footer.\n * Omitted → no brand line (and no footer hairline); a string → that custom\n * brand; `false` → no brand line. Brand is opt-in.\n */\n insertBrand?: string | false;\n /** Opaque instance id, emitted as `data-component-id`. */\n id?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport const CycleCalculator = forwardRef<HTMLDivElement, CycleCalculatorProps>(\n (\n {\n defaultCycleLength = DEFAULT_CYCLE_LENGTH,\n onResultChange,\n onInsert,\n insertVariant = 'insert',\n onCopy,\n onError,\n insertBrand,\n id,\n width,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n\n const [lastPeriod, setLastPeriod] = useState<Date | undefined>(undefined);\n const [cycleLength, setCycleLength] = useState<number | null>(\n defaultCycleLength,\n );\n const [periodLength, setPeriodLength] = useState<number | null>(null);\n\n const result = useMemo<CyclePrediction | null>(() => {\n if (!lastPeriod) return null;\n return predictCycle({\n lastPeriodStart: lastPeriod,\n cycleLength: cycleLength ?? DEFAULT_CYCLE_LENGTH,\n periodLength: periodLength ?? undefined,\n });\n }, [lastPeriod, cycleLength, periodLength]);\n\n const dateFormatter = useMemo(\n () => new Intl.DateTimeFormat(i18n.language, { dateStyle: 'medium' }),\n [i18n.language],\n );\n\n useEffect(() => {\n onResultChange?.(result);\n }, [result, onResultChange]);\n\n const today = useMemo(() => new Date(), []);\n\n const fmt = (d: Date): string => dateFormatter.format(d);\n\n return (\n <div\n ref={ref}\n data-component=\"cycle-calculator\"\n data-component-id={id}\n className={rootVariants({ width, className })}\n >\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <FormField label={t('cycleCalculator.lastPeriod')}>\n <DatePicker\n value={lastPeriod}\n onChange={setLastPeriod}\n maxDate={today}\n />\n </FormField>\n <FormField\n label={t('cycleCalculator.cycleLength')}\n description={t('cycleCalculator.cycleLengthHint')}\n >\n <NumberInput\n mode=\"integer\"\n min={20}\n max={45}\n value={cycleLength}\n onChange={setCycleLength}\n />\n </FormField>\n <FormField\n label={t('cycleCalculator.periodLength')}\n description={t('cycleCalculator.periodLengthHint')}\n >\n <NumberInput\n mode=\"integer\"\n min={1}\n max={14}\n value={periodLength}\n onChange={setPeriodLength}\n />\n </FormField>\n </div>\n\n <p className=\"ds:sr-only\" role=\"status\" aria-live=\"polite\">\n {result\n ? `${t('cycleCalculator.ovulation')}: ${fmt(result.ovulation)}. ${t(\n 'cycleCalculator.nextPeriod',\n )}: ${fmt(result.nextPeriod)}.`\n : ''}\n </p>\n\n {result ? (\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n <dl className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-3\">\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-xs)] ds:text-center\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.ovulation')}\n </dt>\n <dd>\n <Badge\n variant=\"success\"\n size=\"lg\"\n leading={<Check aria-hidden />}\n >\n {fmt(result.ovulation)}\n </Badge>\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-xs)] ds:text-center\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.fertileWindow')}\n </dt>\n <dd>\n <Badge\n variant=\"accent\"\n size=\"lg\"\n leading={<Heart aria-hidden />}\n >\n {fmt(result.fertileWindow.start)} –{' '}\n {fmt(result.fertileWindow.end)}\n </Badge>\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-xs)] ds:text-center\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.nextPeriod')}\n </dt>\n <dd>\n <Badge\n variant=\"error\"\n size=\"lg\"\n leading={<Droplet aria-hidden />}\n >\n {fmt(result.nextPeriod)}\n </Badge>\n </dd>\n </div>\n </dl>\n\n {result.periodRange ? (\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-2xs)]\">\n <span className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.periodRange')}\n </span>\n <span className=\"type-body ds:text-foreground\">\n {fmt(result.periodRange.start)} –{' '}\n {fmt(result.periodRange.end)}\n </span>\n </div>\n ) : null}\n\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-2xs)]\">\n <span className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.upcomingPeriods')}\n </span>\n <ul className=\"ds:flex ds:flex-wrap ds:gap-x-[var(--spacing-md)] ds:gap-y-[var(--spacing-2xs)]\">\n {result.upcomingPeriods.map((d) => (\n <li\n key={d.getTime()}\n className=\"type-body ds:text-foreground\"\n >\n {fmt(d)}\n </li>\n ))}\n </ul>\n </div>\n\n {insertVariant === 'copy' || onInsert ? (\n <InsertButton\n onInsert={onInsert}\n variant={insertVariant}\n onCopy={onCopy}\n onError={onError}\n card={{\n title: t('insert.title.cycle'),\n icon: 'heart',\n highlight: `${fmt(result.fertileWindow.start)} – ${fmt(\n result.fertileWindow.end,\n )}`,\n // Chip reuses the on-screen fertile-window badge's accent\n // token so the inserted PNG chip matches the screen.\n highlightToken: HIGHLIGHT_TOKEN,\n brand: insertBrand,\n fields: [\n {\n // Ovulation is a predicted date → calendar glyph (the\n // on-screen badge uses a Check tick, which ICON_GEOMETRY\n // does not carry, so the calendar reads the date meaning).\n icon: 'calendar',\n label: t('cycleCalculator.ovulation'),\n value: fmt(result.ovulation),\n },\n {\n // Fertile window → heart glyph, matching the on-screen\n // fertile-window badge's Heart icon.\n icon: 'heart',\n label: t('cycleCalculator.fertileWindow'),\n value: `${fmt(result.fertileWindow.start)} – ${fmt(\n result.fertileWindow.end,\n )}`,\n },\n {\n // Next period → droplets glyph, matching the on-screen\n // next-period badge's Droplet icon.\n icon: 'droplets',\n label: t('cycleCalculator.nextPeriod'),\n value: fmt(result.nextPeriod),\n },\n ],\n }}\n />\n ) : null}\n </Card.Body>\n </Card>\n ) : (\n <p className=\"type-body ds:text-muted-foreground\">\n {t('cycleCalculator.empty')}\n </p>\n )}\n </div>\n );\n },\n);\n\nCycleCalculator.displayName = 'CycleCalculator';\n"],"names":["__iconNode","Droplet","createLucideIcon","DEFAULT_CYCLE_LENGTH","LUTEAL_PHASE_DAYS","FERTILE_DAYS_AFTER","predictCycle","input","occurrences","cycle","lastPeriodStart","ovulation","addDays","fertileWindow","nextPeriod","upcomingPeriods","_","i","periodRange","rootVariants","cva","HIGHLIGHT_TOKEN","CycleCalculator","forwardRef","defaultCycleLength","onResultChange","onInsert","insertVariant","onCopy","onError","insertBrand","id","width","className","ref","i18n","useTranslation","lastPeriod","setLastPeriod","useState","cycleLength","setCycleLength","periodLength","setPeriodLength","result","useMemo","dateFormatter","useEffect","today","fmt","d","jsxs","jsx","FormField","DatePicker","NumberInput","Card","Badge","Check","Heart","InsertButton"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AACA,GACMC,IAAUC,EAAiB,WAAWF,CAAU,GCNzCG,IAAuB,IAEvBC,IAAoB,IAIpBC,IAAqB;AAqC3B,SAASC,EACdC,GACAC,IAAc,GACG;AACjB,QAAMC,IAAQF,EAAM,eAAeJ,GAC7B,EAAE,iBAAAO,MAAoBH,GAEtBI,IAAYC,EAAQF,GAAiBD,IAAQL,CAAiB,GAC9DS,IAA2B;AAAA,IAC/B,OAAOD,EAAQD,GAAW,EAAoB;AAAA,IAC9C,KAAKC,EAAQD,GAAWN,CAAkB;AAAA,EAAA,GAEtCS,IAAaF,EAAQF,GAAiBD,CAAK,GAC3CM,IAAkB,MAAM;AAAA,IAAK,EAAE,QAAQP,EAAA;AAAA,IAAe,CAACQ,GAAGC,MAC9DL,EAAQF,GAAiBD,KAASQ,IAAI,EAAE;AAAA,EAAA,GAEpCC,IACJX,EAAM,gBAAgBA,EAAM,eAAe,IACvC;AAAA,IACE,OAAOG;AAAA,IACP,KAAKE,EAAQF,GAAiBH,EAAM,eAAe,CAAC;AAAA,EAAA,IAEtD;AAEN,SAAO,EAAE,YAAAO,GAAY,WAAAH,GAAW,eAAAE,GAAe,iBAAAE,GAAiB,aAAAG,EAAA;AAClE;ACpDA,MAAMC,IAAeC,EAAI,kDAAkD;AAAA,EACzE,UAAU;AAAA,IACR,OAAO,EAAE,MAAM,aAAa,MAAM,iBAAA;AAAA,EAAiB;AAAA,EAErD,iBAAiB,EAAE,OAAO,OAAA;AAC5B,CAAC,GAQKC,IAAkB,YAiCXC,IAAkBC;AAAA,EAC7B,CACE;AAAA,IACE,oBAAAC,IAAqBrB;AAAA,IACrB,gBAAAsB;AAAA,IACA,UAAAC;AAAA,IACA,eAAAC,IAAgB;AAAA,IAChB,QAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAAC;AAAA,IACA,IAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC;AAAA,EAAA,GAEFC,MACG;AACH,UAAM,EAAE,GAAG,MAAAC,EAAA,IAASC,EAAA,GAEd,CAACC,GAAYC,CAAa,IAAIC,EAA2B,MAAS,GAClE,CAACC,GAAaC,CAAc,IAAIF;AAAA,MACpCf;AAAA,IAAA,GAEI,CAACkB,GAAcC,CAAe,IAAIJ,EAAwB,IAAI,GAE9DK,IAASC,EAAgC,MACxCR,IACE/B,EAAa;AAAA,MAClB,iBAAiB+B;AAAA,MACjB,aAAaG,KAAerC;AAAA,MAC5B,cAAcuC,KAAgB;AAAA,IAAA,CAC/B,IALuB,MAMvB,CAACL,GAAYG,GAAaE,CAAY,CAAC,GAEpCI,IAAgBD;AAAA,MACpB,MAAM,IAAI,KAAK,eAAeV,EAAK,UAAU,EAAE,WAAW,UAAU;AAAA,MACpE,CAACA,EAAK,QAAQ;AAAA,IAAA;AAGhB,IAAAY,EAAU,MAAM;AACd,MAAAtB,KAAA,QAAAA,EAAiBmB;AAAA,IACnB,GAAG,CAACA,GAAQnB,CAAc,CAAC;AAE3B,UAAMuB,IAAQH,EAAQ,0BAAU,KAAA,GAAQ,CAAA,CAAE,GAEpCI,IAAM,CAACC,MAAoBJ,EAAc,OAAOI,CAAC;AAEvD,WACE,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAjB;AAAA,QACA,kBAAe;AAAA,QACf,qBAAmBH;AAAA,QACnB,WAAWZ,EAAa,EAAE,OAAAa,GAAO,WAAAC,GAAW;AAAA,QAE5C,UAAA;AAAA,UAAA,gBAAAkB,EAAC,OAAA,EAAI,WAAU,uEACb,UAAA;AAAA,YAAA,gBAAAC,EAACC,GAAA,EAAU,OAAO,EAAE,4BAA4B,GAC9C,UAAA,gBAAAD;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,OAAOjB;AAAA,gBACP,UAAUC;AAAA,gBACV,SAASU;AAAA,cAAA;AAAA,YAAA,GAEb;AAAA,YACA,gBAAAI;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,6BAA6B;AAAA,gBACtC,aAAa,EAAE,iCAAiC;AAAA,gBAEhD,UAAA,gBAAAD;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,KAAK;AAAA,oBACL,KAAK;AAAA,oBACL,OAAOf;AAAA,oBACP,UAAUC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACZ;AAAA,YAAA;AAAA,YAEF,gBAAAW;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,8BAA8B;AAAA,gBACvC,aAAa,EAAE,kCAAkC;AAAA,gBAEjD,UAAA,gBAAAD;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,KAAK;AAAA,oBACL,KAAK;AAAA,oBACL,OAAOb;AAAA,oBACP,UAAUC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACZ;AAAA,YAAA;AAAA,UACF,GACF;AAAA,4BAEC,KAAA,EAAE,WAAU,cAAa,MAAK,UAAS,aAAU,UAC/C,UAAAC,IACG,GAAG,EAAE,2BAA2B,CAAC,KAAKK,EAAIL,EAAO,SAAS,CAAC,KAAK;AAAA,YAC9D;AAAA,UAAA,CACD,KAAKK,EAAIL,EAAO,UAAU,CAAC,MAC5B,IACN;AAAA,UAECA,IACC,gBAAAQ,EAACI,GAAA,EAAK,SAAQ,YACZ,4BAACA,EAAK,MAAL,EAAU,WAAU,kDACnB,UAAA;AAAA,YAAA,gBAAAL,EAAC,MAAA,EAAG,WAAU,uEACZ,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iFACb,UAAA;AAAA,gBAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,2BAA2B,GAChC;AAAA,kCACC,MAAA,EACC,UAAA,gBAAAA;AAAA,kBAACK;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,SAAS,gBAAAL,EAACM,GAAA,EAAM,eAAW,GAAA,CAAC;AAAA,oBAE3B,UAAAT,EAAIL,EAAO,SAAS;AAAA,kBAAA;AAAA,gBAAA,EACvB,CACF;AAAA,cAAA,GACF;AAAA,cACA,gBAAAO,EAAC,OAAA,EAAI,WAAU,iFACb,UAAA;AAAA,gBAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,+BAA+B,GACpC;AAAA,kCACC,MAAA,EACC,UAAA,gBAAAD;AAAA,kBAACM;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,SAAS,gBAAAL,EAACO,GAAA,EAAM,eAAW,GAAA,CAAC;AAAA,oBAE3B,UAAA;AAAA,sBAAAV,EAAIL,EAAO,cAAc,KAAK;AAAA,sBAAE;AAAA,sBAAG;AAAA,sBACnCK,EAAIL,EAAO,cAAc,GAAG;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA,EAC/B,CACF;AAAA,cAAA,GACF;AAAA,cACA,gBAAAO,EAAC,OAAA,EAAI,WAAU,iFACb,UAAA;AAAA,gBAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,4BAA4B,GACjC;AAAA,kCACC,MAAA,EACC,UAAA,gBAAAA;AAAA,kBAACK;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,SAAS,gBAAAL,EAACnD,GAAA,EAAQ,eAAW,GAAA,CAAC;AAAA,oBAE7B,UAAAgD,EAAIL,EAAO,UAAU;AAAA,kBAAA;AAAA,gBAAA,EACxB,CACF;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,GACF;AAAA,YAECA,EAAO,cACN,gBAAAO,EAAC,OAAA,EAAI,WAAU,kEACb,UAAA;AAAA,cAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,uCACb,UAAA,EAAE,6BAA6B,GAClC;AAAA,cACA,gBAAAD,EAAC,QAAA,EAAK,WAAU,gCACb,UAAA;AAAA,gBAAAF,EAAIL,EAAO,YAAY,KAAK;AAAA,gBAAE;AAAA,gBAAG;AAAA,gBACjCK,EAAIL,EAAO,YAAY,GAAG;AAAA,cAAA,EAAA,CAC7B;AAAA,YAAA,EAAA,CACF,IACE;AAAA,YAEJ,gBAAAO,EAAC,OAAA,EAAI,WAAU,kEACb,UAAA;AAAA,cAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,uCACb,UAAA,EAAE,iCAAiC,GACtC;AAAA,cACA,gBAAAA,EAAC,QAAG,WAAU,mFACX,YAAO,gBAAgB,IAAI,CAACF,MAC3B,gBAAAE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAU;AAAA,kBAET,YAAIF,CAAC;AAAA,gBAAA;AAAA,gBAHDA,EAAE,QAAA;AAAA,cAAQ,CAKlB,EAAA,CACH;AAAA,YAAA,GACF;AAAA,YAECvB,MAAkB,UAAUD,IAC3B,gBAAA0B;AAAA,cAACQ;AAAA,cAAA;AAAA,gBACC,UAAAlC;AAAA,gBACA,SAASC;AAAA,gBACT,QAAAC;AAAA,gBACA,SAAAC;AAAA,gBACA,MAAM;AAAA,kBACJ,OAAO,EAAE,oBAAoB;AAAA,kBAC7B,MAAM;AAAA,kBACN,WAAW,GAAGoB,EAAIL,EAAO,cAAc,KAAK,CAAC,MAAMK;AAAA,oBACjDL,EAAO,cAAc;AAAA,kBAAA,CACtB;AAAA;AAAA;AAAA,kBAGD,gBAAgBvB;AAAA,kBAChB,OAAOS;AAAA,kBACP,QAAQ;AAAA,oBACN;AAAA;AAAA;AAAA;AAAA,sBAIE,MAAM;AAAA,sBACN,OAAO,EAAE,2BAA2B;AAAA,sBACpC,OAAOmB,EAAIL,EAAO,SAAS;AAAA,oBAAA;AAAA,oBAE7B;AAAA;AAAA;AAAA,sBAGE,MAAM;AAAA,sBACN,OAAO,EAAE,+BAA+B;AAAA,sBACxC,OAAO,GAAGK,EAAIL,EAAO,cAAc,KAAK,CAAC,MAAMK;AAAA,wBAC7CL,EAAO,cAAc;AAAA,sBAAA,CACtB;AAAA,oBAAA;AAAA,oBAEH;AAAA;AAAA;AAAA,sBAGE,MAAM;AAAA,sBACN,OAAO,EAAE,4BAA4B;AAAA,sBACrC,OAAOK,EAAIL,EAAO,UAAU;AAAA,oBAAA;AAAA,kBAC9B;AAAA,gBACF;AAAA,cACF;AAAA,YAAA,IAEA;AAAA,UAAA,EAAA,CACN,EAAA,CACF,IAEA,gBAAAQ,EAAC,KAAA,EAAE,WAAU,sCACV,UAAA,EAAE,uBAAuB,EAAA,CAC5B;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AAEA9B,EAAgB,cAAc;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"cycle-calculator-CCmPwcBl.js","sources":["../../node_modules/lucide-react/dist/esm/icons/droplet.js","../../src/components/cycle-calculator/cycle.ts","../../src/components/cycle-calculator/cycle-calculator.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z\",\n key: \"c7niix\"\n }\n ]\n];\nconst Droplet = createLucideIcon(\"droplet\", __iconNode);\n\nexport { __iconNode, Droplet as default };\n//# sourceMappingURL=droplet.js.map\n","/* ------------------------------------------------------------------ */\n/* Menstrual-cycle prediction — pure, framework-free, unit-testable. */\n/* */\n/* Uses the standard fixed-luteal-phase model: ovulation falls ~14 days */\n/* before the next period, so on a cycle of length L ovulation is day */\n/* (L − 14). The fertile window spans the 5 days before ovulation */\n/* (sperm survival) through 1 day after (oocyte viability). */\n/* ------------------------------------------------------------------ */\n\nimport { addDays } from 'date-fns';\n\n/** Standard menstrual-cycle length. */\nexport const DEFAULT_CYCLE_LENGTH = 28;\n/** Luteal phase is biologically near-constant at ~14 days. */\nexport const LUTEAL_PHASE_DAYS = 14;\n/** Sperm survive up to ~5 days before ovulation. */\nexport const FERTILE_DAYS_BEFORE = 5;\n/** The oocyte is viable ~1 day after ovulation. */\nexport const FERTILE_DAYS_AFTER = 1;\n\nexport interface CycleInput {\n /** First day of the most recent period. */\n lastPeriodStart: Date;\n /** Average cycle length in days. Defaults to 28. */\n cycleLength?: number;\n /** Period (bleed) length in days. Optional — used for the period range. */\n periodLength?: number;\n}\n\nexport interface DateRange {\n start: Date;\n end: Date;\n}\n\nexport interface CyclePrediction {\n /** Start date of the next period. */\n nextPeriod: Date;\n /** Estimated ovulation date. */\n ovulation: Date;\n /** Fertile window (5 days before ovulation → 1 day after). */\n fertileWindow: DateRange;\n /** Start dates of the next few periods (length = `occurrences`). */\n upcomingPeriods: Date[];\n /**\n * The current period's bleed range (first day → last day), or `null` when no\n * `periodLength` was given.\n */\n periodRange: DateRange | null;\n}\n\n/**\n * Predict ovulation, the fertile window and upcoming periods from the last\n * period's start date. `occurrences` controls how many future periods to\n * list (default 3).\n */\nexport function predictCycle(\n input: CycleInput,\n occurrences = 3,\n): CyclePrediction {\n const cycle = input.cycleLength ?? DEFAULT_CYCLE_LENGTH;\n const { lastPeriodStart } = input;\n\n const ovulation = addDays(lastPeriodStart, cycle - LUTEAL_PHASE_DAYS);\n const fertileWindow: DateRange = {\n start: addDays(ovulation, -FERTILE_DAYS_BEFORE),\n end: addDays(ovulation, FERTILE_DAYS_AFTER),\n };\n const nextPeriod = addDays(lastPeriodStart, cycle);\n const upcomingPeriods = Array.from({ length: occurrences }, (_, i) =>\n addDays(lastPeriodStart, cycle * (i + 1)),\n );\n const periodRange: DateRange | null =\n input.periodLength && input.periodLength > 0\n ? {\n start: lastPeriodStart,\n end: addDays(lastPeriodStart, input.periodLength - 1),\n }\n : null;\n\n return { nextPeriod, ovulation, fertileWindow, upcomingPeriods, periodRange };\n}\n","/* ------------------------------------------------------------------ */\n/* CycleCalculator — predict ovulation, fertile window and upcoming */\n/* periods from the last period's start date. */\n/* */\n/* Maths lives in `./cycle` (pure, separately tested). */\n/* ------------------------------------------------------------------ */\n\nimport { forwardRef, useEffect, useMemo, useState } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Heart, Check, Droplet } from 'lucide-react';\nimport { FormField } from '../form-field';\nimport { DatePicker } from '../date-picker';\nimport { NumberInput } from '../number-input';\nimport { Card } from '../card';\nimport { Badge } from '../badge';\nimport {\n InsertButton,\n type InsertPayload,\n type InsertVariant,\n type InsertMode,\n} from '../_shared/insert-result';\nimport {\n type CyclePrediction,\n predictCycle,\n DEFAULT_CYCLE_LENGTH,\n} from './cycle';\n\nconst rootVariants = cva('ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]', {\n variants: {\n width: { full: 'ds:w-full', auto: 'ds:inline-flex' },\n },\n defaultVariants: { width: 'full' },\n});\n\n/**\n * DS token NAME backing the result-card chip — the fertile window is the\n * headline fertility datum, shown on screen with the `accent` Badge variant\n * (which fills `--accent`). The card chip reuses that token so the inserted\n * PNG chip matches the on-screen fertile-window badge.\n */\nconst HIGHLIGHT_TOKEN = '--accent';\n\nexport interface CycleCalculatorProps extends VariantProps<\n typeof rootVariants\n> {\n /** Initial cycle length in days. Defaults to 28. */\n defaultCycleLength?: number;\n /** Fires whenever a prediction can be computed (and `null` when it can't). */\n onResultChange?: (result: CyclePrediction | null) => void;\n /** When provided, shows the result-action buttons that emit / copy the result. */\n onInsert?: (payload: InsertPayload) => void;\n /**\n * Which verb the result button performs. Defaults to `'insert'`.\n * Use `'copy'` in an app-shell surface (no editor to insert into) — the\n * button writes the result to the clipboard as a multi-format `ClipboardItem`.\n */\n insertVariant?: InsertVariant;\n /** `copy` variant only — fired after a successful clipboard write. */\n onCopy?: (mode: InsertMode) => void;\n /** `copy` variant only — fired if the clipboard write can't proceed. */\n onError?: (error: unknown) => void;\n /**\n * Brand wordmark printed in the inserted/copied result-card footer.\n * Omitted → no brand line (and no footer hairline); a string → that custom\n * brand; `false` → no brand line. Brand is opt-in.\n */\n insertBrand?: string | false;\n /** Opaque instance id, emitted as `data-component-id`. */\n id?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport const CycleCalculator = forwardRef<HTMLDivElement, CycleCalculatorProps>(\n (\n {\n defaultCycleLength = DEFAULT_CYCLE_LENGTH,\n onResultChange,\n onInsert,\n insertVariant = 'insert',\n onCopy,\n onError,\n insertBrand,\n id,\n width,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n\n const [lastPeriod, setLastPeriod] = useState<Date | undefined>(undefined);\n const [cycleLength, setCycleLength] = useState<number | null>(\n defaultCycleLength,\n );\n const [periodLength, setPeriodLength] = useState<number | null>(null);\n\n const result = useMemo<CyclePrediction | null>(() => {\n if (!lastPeriod) return null;\n return predictCycle({\n lastPeriodStart: lastPeriod,\n cycleLength: cycleLength ?? DEFAULT_CYCLE_LENGTH,\n periodLength: periodLength ?? undefined,\n });\n }, [lastPeriod, cycleLength, periodLength]);\n\n const dateFormatter = useMemo(\n () => new Intl.DateTimeFormat(i18n.language, { dateStyle: 'medium' }),\n [i18n.language],\n );\n\n useEffect(() => {\n onResultChange?.(result);\n }, [result, onResultChange]);\n\n const today = useMemo(() => new Date(), []);\n\n const fmt = (d: Date): string => dateFormatter.format(d);\n\n return (\n <div\n ref={ref}\n data-component=\"cycle-calculator\"\n data-component-id={id}\n className={rootVariants({ width, className })}\n >\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <FormField label={t('cycleCalculator.lastPeriod')}>\n <DatePicker\n value={lastPeriod}\n onChange={setLastPeriod}\n maxDate={today}\n />\n </FormField>\n <FormField\n label={t('cycleCalculator.cycleLength')}\n description={t('cycleCalculator.cycleLengthHint')}\n >\n <NumberInput\n mode=\"integer\"\n min={20}\n max={45}\n value={cycleLength}\n onChange={setCycleLength}\n />\n </FormField>\n <FormField\n label={t('cycleCalculator.periodLength')}\n description={t('cycleCalculator.periodLengthHint')}\n >\n <NumberInput\n mode=\"integer\"\n min={1}\n max={14}\n value={periodLength}\n onChange={setPeriodLength}\n />\n </FormField>\n </div>\n\n <p className=\"ds:sr-only\" role=\"status\" aria-live=\"polite\">\n {result\n ? `${t('cycleCalculator.ovulation')}: ${fmt(result.ovulation)}. ${t(\n 'cycleCalculator.nextPeriod',\n )}: ${fmt(result.nextPeriod)}.`\n : ''}\n </p>\n\n {result ? (\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n <dl className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-3\">\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-xs)] ds:text-center\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.ovulation')}\n </dt>\n <dd>\n <Badge\n variant=\"success\"\n size=\"lg\"\n leading={<Check aria-hidden />}\n >\n {fmt(result.ovulation)}\n </Badge>\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-xs)] ds:text-center\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.fertileWindow')}\n </dt>\n <dd>\n <Badge\n variant=\"accent\"\n size=\"lg\"\n leading={<Heart aria-hidden />}\n >\n {fmt(result.fertileWindow.start)} –{' '}\n {fmt(result.fertileWindow.end)}\n </Badge>\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-xs)] ds:text-center\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.nextPeriod')}\n </dt>\n <dd>\n <Badge\n variant=\"error\"\n size=\"lg\"\n leading={<Droplet aria-hidden />}\n >\n {fmt(result.nextPeriod)}\n </Badge>\n </dd>\n </div>\n </dl>\n\n {result.periodRange ? (\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-2xs)]\">\n <span className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.periodRange')}\n </span>\n <span className=\"type-body ds:text-foreground\">\n {fmt(result.periodRange.start)} –{' '}\n {fmt(result.periodRange.end)}\n </span>\n </div>\n ) : null}\n\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-2xs)]\">\n <span className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.upcomingPeriods')}\n </span>\n <ul className=\"ds:flex ds:flex-wrap ds:gap-x-[var(--spacing-md)] ds:gap-y-[var(--spacing-2xs)]\">\n {result.upcomingPeriods.map((d) => (\n <li\n key={d.getTime()}\n className=\"type-body ds:text-foreground\"\n >\n {fmt(d)}\n </li>\n ))}\n </ul>\n </div>\n\n {insertVariant === 'copy' || onInsert ? (\n <InsertButton\n onInsert={onInsert}\n variant={insertVariant}\n onCopy={onCopy}\n onError={onError}\n card={{\n title: t('insert.title.cycle'),\n icon: 'heart',\n highlight: `${fmt(result.fertileWindow.start)} – ${fmt(\n result.fertileWindow.end,\n )}`,\n // Chip reuses the on-screen fertile-window badge's accent\n // token so the inserted PNG chip matches the screen.\n highlightToken: HIGHLIGHT_TOKEN,\n brand: insertBrand,\n fields: [\n {\n // Ovulation is a predicted date → calendar glyph (the\n // on-screen badge uses a Check tick, which ICON_GEOMETRY\n // does not carry, so the calendar reads the date meaning).\n icon: 'calendar',\n label: t('cycleCalculator.ovulation'),\n value: fmt(result.ovulation),\n },\n {\n // Fertile window → heart glyph, matching the on-screen\n // fertile-window badge's Heart icon.\n icon: 'heart',\n label: t('cycleCalculator.fertileWindow'),\n value: `${fmt(result.fertileWindow.start)} – ${fmt(\n result.fertileWindow.end,\n )}`,\n },\n {\n // Next period → droplets glyph, matching the on-screen\n // next-period badge's Droplet icon.\n icon: 'droplets',\n label: t('cycleCalculator.nextPeriod'),\n value: fmt(result.nextPeriod),\n },\n ],\n }}\n />\n ) : null}\n </Card.Body>\n </Card>\n ) : (\n <p className=\"type-body ds:text-muted-foreground\">\n {t('cycleCalculator.empty')}\n </p>\n )}\n </div>\n );\n },\n);\n\nCycleCalculator.displayName = 'CycleCalculator';\n"],"names":["__iconNode","Droplet","createLucideIcon","DEFAULT_CYCLE_LENGTH","LUTEAL_PHASE_DAYS","FERTILE_DAYS_AFTER","predictCycle","input","occurrences","cycle","lastPeriodStart","ovulation","addDays","fertileWindow","nextPeriod","upcomingPeriods","_","i","periodRange","rootVariants","cva","HIGHLIGHT_TOKEN","CycleCalculator","forwardRef","defaultCycleLength","onResultChange","onInsert","insertVariant","onCopy","onError","insertBrand","id","width","className","ref","i18n","useTranslation","lastPeriod","setLastPeriod","useState","cycleLength","setCycleLength","periodLength","setPeriodLength","result","useMemo","dateFormatter","useEffect","today","fmt","d","jsxs","jsx","FormField","DatePicker","NumberInput","Card","Badge","Check","Heart","InsertButton"],"mappings":"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","x_google_ignoreList":[0]}
@@ -4,7 +4,7 @@ import * as E from "@radix-ui/react-radio-group";
4
4
  import { c as G } from "./index-D2ZczOXr.js";
5
5
  import { useTranslation as pe } from "react-i18next";
6
6
  import { A as ue } from "./avatar-BNQNhoyL.js";
7
- import { B as fe } from "./badge-CqGsX32l.js";
7
+ import { B as fe } from "./badge-DCOqV9mI.js";
8
8
  import { T as ge } from "./tooltip-DvmfrNvB.js";
9
9
  import { c as ve } from "./compose-refs-C0k0tdqF.js";
10
10
  import { u as be } from "./registry-DvAUVLHh.js";
@@ -335,4 +335,4 @@ export {
335
335
  ke as D,
336
336
  xe as d
337
337
  };
338
- //# sourceMappingURL=dependent-selector-CG_FOHya.js.map
338
+ //# sourceMappingURL=dependent-selector-DUV4thxX.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dependent-selector-CG_FOHya.js","sources":["../../src/components/dependent-selector/dependent-selector.agent.ts","../../src/components/dependent-selector/dependent-selector.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — DependentSelector. */\n/* */\n/* Mirrors radio-group.agent.ts: a single-select domain control. The */\n/* selected person id is the externally-observable state; `select_single` */\n/* is the capability. Per-row `data-option-id` lets an agent address each */\n/* person by their stable opaque id. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { DependentSelectorHandle } from './dependent-selector';\n\nexport const dependentSelectorAgent: AgentAdapter<DependentSelectorHandle> = {\n id: 'dependent-selector',\n capabilities: ['select_single'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.dependentSelector.state.value',\n description:\n 'Id of the currently selected person, or empty string when none.',\n read: (handle) => handle.getValue(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string }',\n argsSchema: {\n type: 'object',\n properties: {\n value: {\n type: 'string',\n description: 'Stable opaque id of the person row to select.',\n },\n },\n required: ['value'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.dependentSelector.actions.setValue',\n description: 'Select the person row with the given id.',\n examples: [\n { args: { value: 'person-2' }, note: 'Select the second dependent.' },\n ],\n invoke: (handle, args: { value: string }) => {\n handle.setValue(args.value);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'dependent-selector',\n description: 'Marks the DependentSelector root (role=radiogroup).',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description: 'Stable person id emitted on each rendered person row.',\n },\n },\n};\n","import {\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport * as RadixRadioGroup from '@radix-ui/react-radio-group';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { AlertCircle } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { Avatar } from '../avatar';\nimport { Badge } from '../badge';\nimport { Tooltip } from '../tooltip';\nimport { useDirection } from '../_shared/use-direction';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { useAgentRegistration } from '../../agent';\nimport { dependentSelectorAgent } from './dependent-selector.agent';\n\n/* -------------------------------------------------------------------- */\n/* DependentSelector */\n/* */\n/* Single-select roster of people — the verified guardian (\"You\") plus */\n/* their registered dependents/minors — that a check-in kiosk uses to */\n/* answer \"Who are you checking in?\". Built on Radix RadioGroup semantics */\n/* (role=radiogroup, single tab stop, roving arrow-key focus, one */\n/* selected value), mirroring the proven src/components/radio-group/ */\n/* pattern. Each option is a person row (Avatar + name + relationship + */\n/* optional age/Minor badge) wrapped in a <label> so the whole card is */\n/* the click target. */\n/* */\n/* The kit owns the localised relationship + age strings via the closed */\n/* `relationshipKey` enum — consumers pass data, never free-text labels, */\n/* or i18n/RTL breaks. `age` is display-only (pre-computed whole years); */\n/* `isMinor` is an explicit per-person flag, NOT age<18 inference. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\n/**\n * Closed relationship vocabulary. The kit owns the localised label for\n * each key (`dependentSelector.relationship.<key>`). `'other'` is the\n * escape hatch for relationships the enum doesn't model.\n */\nexport type DependentRelationship =\n | 'self'\n | 'son'\n | 'daughter'\n | 'child'\n | 'spouse'\n | 'parent'\n | 'sibling'\n | 'ward'\n | 'other';\n\nexport interface DependentSelectorPerson {\n /** Stable id — becomes the radio value + `data-option-id`. */\n id: string;\n /** Display-formatted name (already formatted by the consumer). */\n name: string;\n /** Closed relationship key — the kit owns the localised label. */\n relationshipKey: DependentRelationship;\n /**\n * Explicit \"minor\" flag — drives the localised \"Minor\" badge.\n * Consumer-supplied, NOT derived from `age < 18` (legal age of\n * majority varies by market).\n */\n isMinor?: boolean;\n /** Avatar image source — falls back to initials, then icon. */\n avatarSrc?: string;\n /** Whole years, pre-computed by the consumer. Display-only. */\n age?: number;\n /**\n * ISO 8601 date of birth. Used ONLY for the row title/tooltip — never\n * parsed for display math (timezone/locale birthday math is the\n * consumer's job).\n */\n dob?: string;\n /** Disables this row; skipped by arrow navigation. */\n disabled?: boolean;\n /** Shown in a Tooltip on the disabled row (like Radio.disabledReason). */\n disabledReason?: string;\n}\n\n/** Agent-readiness curated handle for DependentSelector. */\nexport interface DependentSelectorHandle {\n getValue: () => string;\n setValue: (value: string) => void;\n}\n\n/* -------------------------------------------------------------------- */\n/* CVA */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva(\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:min-w-0',\n {\n variants: {\n size: { sm: '', md: '', lg: '' },\n tone: { default: '', checkin: '' },\n },\n defaultVariants: { size: 'md', tone: 'checkin' },\n },\n);\n\nconst rowVariants = cva(\n [\n // The row IS the Radix Item (`<button role=\"radio\">`). Reset the\n // button chrome, lay out avatar + text on the inline axis. Logical\n // properties only.\n 'ds:group ds:flex ds:items-center ds:gap-[var(--spacing-md)] ds:w-full ds:text-start ds:appearance-none',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-card',\n // Touch-target floor: even sm clears AA/AAA (44 → 48px in accessible).\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n // Selected state: low-alpha accent tint BEHIND tokenised text +\n // a ring-coloured border (never accent as a foreground meeting text).\n 'ds:data-[state=checked]:border-ring',\n // Roving focus ring on the item itself — single tab stop, arrow keys\n // move focus+selection.\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n // Forced-colours: repaint a ButtonBorder edge + a Highlight checked\n // edge + a CanvasText focus ring so the row + its checked state\n // survive Windows High Contrast Mode.\n 'ds:forced-colors:border-[ButtonBorder]',\n 'ds:forced-colors:data-[state=checked]:border-[Highlight]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-md)] ds:py-[var(--spacing-xs)]',\n md: 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:py-[var(--spacing-sm)]',\n lg: 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-md)]',\n },\n tone: {\n // Neutral RadioGroup-card tint for plain forms.\n default:\n 'ds:data-[state=checked]:bg-[color-mix(in_srgb,var(--accent)_5%,transparent)]',\n // Accent-tinted selected surface tuned for the check-in kiosk —\n // slightly stronger low-alpha mix BEHIND the tokenised foreground.\n checkin:\n 'ds:data-[state=checked]:bg-[color-mix(in_srgb,var(--accent)_8%,transparent)]',\n },\n disabled: {\n true: 'ds:cursor-not-allowed ds:opacity-50',\n false:\n 'ds:cursor-pointer ds:hover:bg-[color-mix(in_srgb,var(--accent)_4%,transparent)]',\n },\n },\n defaultVariants: { size: 'md', tone: 'checkin', disabled: false },\n },\n);\n\nconst avatarSizeBySize = { sm: 'sm', md: 'md', lg: 'lg' } as const;\n\n// Keep the loading skeleton's avatar footprint in lock-step with the real\n// Avatar scale (sm=size-8 / md=size-10 / lg=size-12) so the roster\n// resolving in doesn't shift the row height.\nconst skeletonAvatarSizeBySize = {\n sm: 'ds:size-8',\n md: 'ds:size-10',\n lg: 'ds:size-12',\n} as const;\n\nconst nameTypeBySize = {\n sm: 'type-body-sm',\n md: 'type-label',\n lg: 'type-body',\n} as const;\n\n/* -------------------------------------------------------------------- */\n/* Props */\n/* -------------------------------------------------------------------- */\n\ntype RadixRootProps = ComponentPropsWithoutRef<typeof RadixRadioGroup.Root>;\n\nexport interface DependentSelectorProps\n extends\n Omit<\n RadixRootProps,\n 'children' | 'orientation' | 'value' | 'defaultValue' | 'onValueChange'\n >,\n VariantProps<typeof rootVariants> {\n /** Ordered roster to render as options. */\n people: DependentSelectorPerson[];\n /** Controlled selected person id. */\n value?: string;\n /** Uncontrolled initial selection. Ignored when `value` is set. */\n defaultValue?: string;\n /** Fires with the newly selected person id on user selection. */\n onValueChange?: (personId: string) => void;\n /** Accessible group name, rendered as the `<legend>`. */\n label?: string;\n /** Optional helper paragraph under the legend (wired via aria-describedby). */\n description?: string;\n /** Shows N skeleton rows while the roster resolves; sets aria-busy. */\n loading?: boolean;\n /** Validation/empty-confirmation message — role=alert + aria-invalid. */\n error?: string;\n /** Slot shown when no selectable dependents exist (only self / empty). */\n emptyState?: ReactNode;\n /** Forwarded to the radiogroup root as id + data-component-id. */\n id?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const DependentSelector = forwardRef<\n HTMLDivElement,\n DependentSelectorProps\n>(\n (\n {\n people,\n value,\n defaultValue,\n onValueChange,\n label,\n description,\n size: sizeProp = 'md',\n tone: toneProp = 'checkin',\n loading = false,\n error,\n emptyState,\n id,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n ...props\n },\n ref,\n ) => {\n // CVA's VariantProps types each axis as `T | null | undefined`; the\n // destructure default only covers `undefined`, so coalesce `null`\n // too before the values index the size→class lookup maps.\n const size = sizeProp ?? 'md';\n const tone = toneProp ?? 'checkin';\n const { t } = useTranslation();\n const baseId = useId();\n const legendId = `${baseId}-legend`;\n const descriptionId = `${baseId}-description`;\n const errorId = `${baseId}-error`;\n\n /* ---- Dev-mode accessible-name enforcement ---- */\n const warnedRef = useRef(false);\n useEffect(() => {\n if (\n import.meta.env.DEV &&\n !warnedRef.current &&\n !label &&\n !ariaLabel &&\n !ariaLabelledBy\n ) {\n warnedRef.current = true;\n console.warn(\n '<DependentSelector> rendered without an accessible name. Pass `label`, or `aria-label` / `aria-labelledby`, so the radiogroup is never unnamed.',\n );\n }\n }, [label, ariaLabel, ariaLabelledBy]);\n\n /* ---- Selectable roster + single-selectable auto-select ---- */\n const selectablePeople = useMemo(\n () => people.filter((person) => !person.disabled),\n [people],\n );\n // The dependents region (everything that isn't the verified self row)\n // drives the empty-state slot.\n const hasDependents = people.some(\n (person) => person.relationshipKey !== 'self',\n );\n const autoSelectId =\n selectablePeople.length === 1 ? selectablePeople[0].id : undefined;\n\n /* ---- Controlled / uncontrolled value handling (mirrors RadioGroup) ---- */\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? autoSelectId ?? '',\n );\n const currentValue = isControlled ? (value ?? '') : internalValue;\n const currentValueRef = useRef<string>(currentValue);\n currentValueRef.current = currentValue;\n\n const handleValueChange = (next: string) => {\n if (loading) return;\n if (!isControlled) setInternalValue(next);\n onValueChange?.(next);\n };\n\n /* ---- Auto-select change notification ---- */\n /* When exactly one selectable person exists we seed the uncontrolled */\n /* selection (Radix `defaultValue` + internal state) so the row */\n /* paints checked — but Radix never fires onValueChange for a */\n /* defaultValue. In the kiosk consent flow the consumer wires the */\n /* consent audit trail off onValueChange, so we fire it once on mount */\n /* for that auto-selection. Only when uncontrolled, not loading, and */\n /* the consumer didn't pass an explicit defaultValue. */\n const onValueChangeRef = useRef(onValueChange);\n onValueChangeRef.current = onValueChange;\n const autoSelectNotifiedRef = useRef(false);\n useEffect(() => {\n if (\n !autoSelectNotifiedRef.current &&\n !isControlled &&\n !loading &&\n defaultValue === undefined &&\n autoSelectId !== undefined\n ) {\n autoSelectNotifiedRef.current = true;\n onValueChangeRef.current?.(autoSelectId);\n }\n }, [isControlled, loading, defaultValue, autoSelectId]);\n\n /* ---- Agent registration ---- */\n const agentHandle = useMemo<DependentSelectorHandle>(\n () => ({\n getValue: () => currentValueRef.current,\n setValue: (next) => handleValueChange(next),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isControlled, loading, onValueChange],\n );\n useAgentRegistration(dependentSelectorAgent, agentHandle, id);\n\n /* ---- Direction (Radix auto-flips Left/Right for rtl) ---- */\n const rootRef = useRef<HTMLDivElement>(null);\n const composedRef = composeRefs(ref, rootRef);\n const dir = useDirection(rootRef);\n\n /* ---- Resolved a11y wiring ---- */\n /* ONE grouping mechanism: when `label` is set we render a plain */\n /* heading <div id={legendId}> (NOT a native <fieldset>/<legend>) and */\n /* name the single role=radiogroup via aria-labelledby. A fieldset */\n /* would add a second, redundant named group nested around the */\n /* radiogroup — so we deliberately avoid it. */\n const resolvedAriaLabelledBy =\n ariaLabelledBy ?? (label ? legendId : undefined);\n const describedBy =\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined;\n\n /* ---- Helpers ---- */\n const relationshipLabel = (key: DependentRelationship): string =>\n t(`dependentSelector.relationship.${key}`);\n\n const ageLabel = (age: number): string =>\n t('dependentSelector.age', { count: age });\n\n /** Compose the full accessible name a screen reader announces. */\n const personAccessibleName = (person: DependentSelectorPerson): string => {\n const base = t('dependentSelector.optionLabel', {\n name: person.name,\n relationship: relationshipLabel(person.relationshipKey),\n });\n const parts = [base];\n if (typeof person.age === 'number') parts.push(ageLabel(person.age));\n if (person.isMinor) parts.push(t('dependentSelector.minorBadge'));\n return parts.join(', ');\n };\n\n /* ---- Description + error nodes ---- */\n const descriptionNode = description ? (\n <p id={descriptionId} className=\"type-body-sm ds:text-muted-foreground\">\n {description}\n </p>\n ) : null;\n\n const errorNode = error ? (\n <p\n id={errorId}\n role=\"alert\"\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-body-sm ds:text-destructive\"\n >\n <AlertCircle aria-hidden=\"true\" className=\"ds:size-4 ds:shrink-0\" />\n <span>{error}</span>\n </p>\n ) : null;\n\n /* ---- Skeleton rows (loading) ---- */\n const skeletonRows = (\n <div\n aria-hidden=\"true\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n {Array.from({ length: 3 }).map((_, index) => (\n <div\n key={index}\n className={rowVariants({ size, tone, disabled: false })}\n >\n <span\n className={`ds:inline-flex ds:shrink-0 ds:rounded-[var(--radius-full)] ds:bg-muted ds:animate-pulse ${skeletonAvatarSizeBySize[size]}`}\n />\n <span className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:min-w-0 ds:flex-1\">\n <span className=\"ds:h-4 ds:w-1/2 ds:rounded-[var(--radius-sm)] ds:bg-muted ds:animate-pulse\" />\n <span className=\"ds:h-3 ds:w-1/3 ds:rounded-[var(--radius-sm)] ds:bg-muted ds:animate-pulse\" />\n </span>\n </div>\n ))}\n </div>\n );\n\n /* ---- Person row ---- */\n /* The Radix Item IS the card: it renders the `<button role=\"radio\">` */\n /* that owns the roving tabindex + arrow navigation, so the whole row */\n /* is the focus + click target. The composed name lives on */\n /* `aria-label`; the visible content is aria-hidden so a screen reader */\n /* hears the clean composed name once (no duplication). */\n const renderPerson = (person: DependentSelectorPerson) => {\n const rowId = `${baseId}-row-${person.id}`;\n const accessibleName = personAccessibleName(person);\n\n const row = (\n <RadixRadioGroup.Item\n key={person.id}\n id={rowId}\n value={person.id}\n // Native `disabled` is the single disabled model: Radix renders\n // a <button disabled> that is skipped by roving arrow nav and is\n // non-selectable. `aria-disabled` is intentionally NOT also set —\n // on a natively-disabled button it is redundant (it is meant for\n // elements that REMAIN focusable). The disabledReason tooltip is\n // reached via a focusable wrapper span below, not this button.\n disabled={person.disabled}\n aria-label={accessibleName}\n title={person.dob ?? undefined}\n data-option-id={person.id}\n className={rowVariants({\n size,\n tone,\n disabled: Boolean(person.disabled),\n })}\n >\n {/* The Avatar is intentionally aria-hidden: its name only feeds\n initials/colour, and the radio's own aria-label is the sole\n accessible name. Keep aria-hidden so a future refactor doesn't\n reintroduce a duplicate \"image, <name>\" announcement (the kit\n Avatar always renders role=\"img\" + aria-label={name}). */}\n <Avatar\n src={person.avatarSrc}\n name={person.name}\n size={avatarSizeBySize[size]}\n aria-hidden=\"true\"\n />\n <span\n aria-hidden=\"true\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:min-w-0 ds:flex-1\"\n >\n <span className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)] ds:min-w-0\">\n <span\n className={`${nameTypeBySize[size]} ds:text-foreground ds:truncate ds:min-w-0`}\n >\n {person.name}\n </span>\n {person.isMinor ? (\n // Neutral chip (validated AA ~6:1) — the \"Minor\" flag is\n // informational, not a warning STATE. The tonal `warning`\n // variant fails AA at the small chip font size.\n <Badge variant=\"neutral\" size=\"sm\">\n {t('dependentSelector.minorBadge')}\n </Badge>\n ) : null}\n </span>\n <span className=\"type-body-sm ds:text-muted-foreground ds:truncate ds:min-w-0\">\n {relationshipLabel(person.relationshipKey)}\n {typeof person.age === 'number'\n ? ` · ${ageLabel(person.age)}`\n : null}\n </span>\n </span>\n </RadixRadioGroup.Item>\n );\n\n if (person.disabled && person.disabledReason) {\n // The Radix Item renders a <button disabled>, which is removed\n // from the tab order and does not fire hover/pointer events — so a\n // Tooltip wrapped directly around it would never open. Wrap the row\n // in a focusable, hoverable <span tabIndex={0}> and make THAT the\n // tooltip trigger, so the disabledReason is reachable by both mouse\n // hover and keyboard focus (mirrors radio.tsx putting the Tooltip\n // on the non-disabled wrapper, not the disabled control).\n return (\n <Tooltip key={person.id} label={person.disabledReason}>\n <span\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- intentional focusable tooltip trigger so keyboard users can reach the disabled reason\n tabIndex={0}\n data-disabled-row={person.id}\n aria-label={accessibleName}\n className=\"ds:flex ds:min-w-0 ds:rounded-[var(--radius-md)] ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]\"\n >\n {row}\n </span>\n </Tooltip>\n );\n }\n return row;\n };\n\n /* ---- Empty-state slot ---- */\n const resolvedEmptyState = emptyState ?? (\n <p className=\"type-body-sm ds:text-muted-foreground\">\n {t('dependentSelector.empty')}\n </p>\n );\n\n /* ---- Radiogroup body ---- */\n /* While loading we still render a role=radiogroup container (carrying */\n /* the data-component marker + aria-busy) holding aria-hidden skeleton */\n /* rows — selection is inert. Otherwise the Radix root renders the */\n /* real person rows. */\n const body = loading ? (\n <div\n ref={composedRef}\n id={id}\n role=\"radiogroup\"\n aria-label={!resolvedAriaLabelledBy ? ariaLabel : undefined}\n aria-labelledby={resolvedAriaLabelledBy}\n aria-describedby={describedBy}\n aria-invalid={Boolean(error) || undefined}\n aria-busy=\"true\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:min-w-0\"\n data-component=\"dependent-selector\"\n data-component-id={id}\n >\n <span className=\"ds:sr-only\">\n {t('dependentSelector.loadingLabel')}\n </span>\n {skeletonRows}\n </div>\n ) : (\n <RadixRadioGroup.Root\n ref={composedRef}\n id={id}\n dir={dir}\n value={isControlled ? (value ?? '') : undefined}\n defaultValue={\n !isControlled ? (defaultValue ?? autoSelectId) : undefined\n }\n onValueChange={handleValueChange}\n aria-label={!resolvedAriaLabelledBy ? ariaLabel : undefined}\n aria-labelledby={resolvedAriaLabelledBy}\n aria-describedby={describedBy}\n aria-invalid={Boolean(error) || undefined}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:min-w-0\"\n data-component=\"dependent-selector\"\n data-component-id={id}\n {...props}\n >\n {people.map(renderPerson)}\n </RadixRadioGroup.Root>\n );\n\n /* ---- Outer wrapper ---- */\n /* When `label` is set we render a plain heading <div id={legendId}> */\n /* styled like a legend, and the single role=radiogroup is named via */\n /* aria-labelledby={legendId}. We do NOT wrap in <fieldset>/<legend>: */\n /* that would create a second named grouping container nested around */\n /* the radiogroup (the legend announced twice). One grouping */\n /* mechanism only. */\n const outerClasses = rootVariants({ size, tone, className });\n\n return (\n <div className={outerClasses}>\n {label ? (\n <div id={legendId} className=\"type-label ds:text-foreground\">\n {label}\n </div>\n ) : null}\n {descriptionNode}\n {body}\n {!loading && !hasDependents ? resolvedEmptyState : null}\n {errorNode}\n </div>\n );\n },\n);\n\nDependentSelector.displayName = 'DependentSelector';\n"],"names":["dependentSelectorAgent","handle","args","rootVariants","cva","rowVariants","avatarSizeBySize","skeletonAvatarSizeBySize","nameTypeBySize","DependentSelector","forwardRef","people","value","defaultValue","onValueChange","label","description","sizeProp","toneProp","loading","error","emptyState","id","className","ariaLabel","ariaLabelledBy","props","ref","size","tone","t","useTranslation","baseId","useId","legendId","descriptionId","errorId","useRef","useEffect","selectablePeople","useMemo","person","hasDependents","autoSelectId","isControlled","internalValue","setInternalValue","useState","currentValue","currentValueRef","handleValueChange","next","onValueChangeRef","autoSelectNotifiedRef","_a","agentHandle","useAgentRegistration","rootRef","composedRef","composeRefs","dir","useDirection","resolvedAriaLabelledBy","describedBy","relationshipLabel","key","ageLabel","age","personAccessibleName","parts","descriptionNode","jsx","errorNode","jsxs","AlertCircle","skeletonRows","_","index","renderPerson","rowId","accessibleName","row","RadixRadioGroup","Avatar","Badge","Tooltip","resolvedEmptyState","body","outerClasses"],"mappings":"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"}
1
+ {"version":3,"file":"dependent-selector-DUV4thxX.js","sources":["../../src/components/dependent-selector/dependent-selector.agent.ts","../../src/components/dependent-selector/dependent-selector.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — DependentSelector. */\n/* */\n/* Mirrors radio-group.agent.ts: a single-select domain control. The */\n/* selected person id is the externally-observable state; `select_single` */\n/* is the capability. Per-row `data-option-id` lets an agent address each */\n/* person by their stable opaque id. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { DependentSelectorHandle } from './dependent-selector';\n\nexport const dependentSelectorAgent: AgentAdapter<DependentSelectorHandle> = {\n id: 'dependent-selector',\n capabilities: ['select_single'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.dependentSelector.state.value',\n description:\n 'Id of the currently selected person, or empty string when none.',\n read: (handle) => handle.getValue(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string }',\n argsSchema: {\n type: 'object',\n properties: {\n value: {\n type: 'string',\n description: 'Stable opaque id of the person row to select.',\n },\n },\n required: ['value'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.dependentSelector.actions.setValue',\n description: 'Select the person row with the given id.',\n examples: [\n { args: { value: 'person-2' }, note: 'Select the second dependent.' },\n ],\n invoke: (handle, args: { value: string }) => {\n handle.setValue(args.value);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'dependent-selector',\n description: 'Marks the DependentSelector root (role=radiogroup).',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description: 'Stable person id emitted on each rendered person row.',\n },\n },\n};\n","import {\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport * as RadixRadioGroup from '@radix-ui/react-radio-group';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { AlertCircle } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { Avatar } from '../avatar';\nimport { Badge } from '../badge';\nimport { Tooltip } from '../tooltip';\nimport { useDirection } from '../_shared/use-direction';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { useAgentRegistration } from '../../agent';\nimport { dependentSelectorAgent } from './dependent-selector.agent';\n\n/* -------------------------------------------------------------------- */\n/* DependentSelector */\n/* */\n/* Single-select roster of people — the verified guardian (\"You\") plus */\n/* their registered dependents/minors — that a check-in kiosk uses to */\n/* answer \"Who are you checking in?\". Built on Radix RadioGroup semantics */\n/* (role=radiogroup, single tab stop, roving arrow-key focus, one */\n/* selected value), mirroring the proven src/components/radio-group/ */\n/* pattern. Each option is a person row (Avatar + name + relationship + */\n/* optional age/Minor badge) wrapped in a <label> so the whole card is */\n/* the click target. */\n/* */\n/* The kit owns the localised relationship + age strings via the closed */\n/* `relationshipKey` enum — consumers pass data, never free-text labels, */\n/* or i18n/RTL breaks. `age` is display-only (pre-computed whole years); */\n/* `isMinor` is an explicit per-person flag, NOT age<18 inference. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\n/**\n * Closed relationship vocabulary. The kit owns the localised label for\n * each key (`dependentSelector.relationship.<key>`). `'other'` is the\n * escape hatch for relationships the enum doesn't model.\n */\nexport type DependentRelationship =\n | 'self'\n | 'son'\n | 'daughter'\n | 'child'\n | 'spouse'\n | 'parent'\n | 'sibling'\n | 'ward'\n | 'other';\n\nexport interface DependentSelectorPerson {\n /** Stable id — becomes the radio value + `data-option-id`. */\n id: string;\n /** Display-formatted name (already formatted by the consumer). */\n name: string;\n /** Closed relationship key — the kit owns the localised label. */\n relationshipKey: DependentRelationship;\n /**\n * Explicit \"minor\" flag — drives the localised \"Minor\" badge.\n * Consumer-supplied, NOT derived from `age < 18` (legal age of\n * majority varies by market).\n */\n isMinor?: boolean;\n /** Avatar image source — falls back to initials, then icon. */\n avatarSrc?: string;\n /** Whole years, pre-computed by the consumer. Display-only. */\n age?: number;\n /**\n * ISO 8601 date of birth. Used ONLY for the row title/tooltip — never\n * parsed for display math (timezone/locale birthday math is the\n * consumer's job).\n */\n dob?: string;\n /** Disables this row; skipped by arrow navigation. */\n disabled?: boolean;\n /** Shown in a Tooltip on the disabled row (like Radio.disabledReason). */\n disabledReason?: string;\n}\n\n/** Agent-readiness curated handle for DependentSelector. */\nexport interface DependentSelectorHandle {\n getValue: () => string;\n setValue: (value: string) => void;\n}\n\n/* -------------------------------------------------------------------- */\n/* CVA */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva(\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:min-w-0',\n {\n variants: {\n size: { sm: '', md: '', lg: '' },\n tone: { default: '', checkin: '' },\n },\n defaultVariants: { size: 'md', tone: 'checkin' },\n },\n);\n\nconst rowVariants = cva(\n [\n // The row IS the Radix Item (`<button role=\"radio\">`). Reset the\n // button chrome, lay out avatar + text on the inline axis. Logical\n // properties only.\n 'ds:group ds:flex ds:items-center ds:gap-[var(--spacing-md)] ds:w-full ds:text-start ds:appearance-none',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-card',\n // Touch-target floor: even sm clears AA/AAA (44 → 48px in accessible).\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n // Selected state: low-alpha accent tint BEHIND tokenised text +\n // a ring-coloured border (never accent as a foreground meeting text).\n 'ds:data-[state=checked]:border-ring',\n // Roving focus ring on the item itself — single tab stop, arrow keys\n // move focus+selection.\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n // Forced-colours: repaint a ButtonBorder edge + a Highlight checked\n // edge + a CanvasText focus ring so the row + its checked state\n // survive Windows High Contrast Mode.\n 'ds:forced-colors:border-[ButtonBorder]',\n 'ds:forced-colors:data-[state=checked]:border-[Highlight]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-md)] ds:py-[var(--spacing-xs)]',\n md: 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:py-[var(--spacing-sm)]',\n lg: 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-md)]',\n },\n tone: {\n // Neutral RadioGroup-card tint for plain forms.\n default:\n 'ds:data-[state=checked]:bg-[color-mix(in_srgb,var(--accent)_5%,transparent)]',\n // Accent-tinted selected surface tuned for the check-in kiosk —\n // slightly stronger low-alpha mix BEHIND the tokenised foreground.\n checkin:\n 'ds:data-[state=checked]:bg-[color-mix(in_srgb,var(--accent)_8%,transparent)]',\n },\n disabled: {\n true: 'ds:cursor-not-allowed ds:opacity-50',\n false:\n 'ds:cursor-pointer ds:hover:bg-[color-mix(in_srgb,var(--accent)_4%,transparent)]',\n },\n },\n defaultVariants: { size: 'md', tone: 'checkin', disabled: false },\n },\n);\n\nconst avatarSizeBySize = { sm: 'sm', md: 'md', lg: 'lg' } as const;\n\n// Keep the loading skeleton's avatar footprint in lock-step with the real\n// Avatar scale (sm=size-8 / md=size-10 / lg=size-12) so the roster\n// resolving in doesn't shift the row height.\nconst skeletonAvatarSizeBySize = {\n sm: 'ds:size-8',\n md: 'ds:size-10',\n lg: 'ds:size-12',\n} as const;\n\nconst nameTypeBySize = {\n sm: 'type-body-sm',\n md: 'type-label',\n lg: 'type-body',\n} as const;\n\n/* -------------------------------------------------------------------- */\n/* Props */\n/* -------------------------------------------------------------------- */\n\ntype RadixRootProps = ComponentPropsWithoutRef<typeof RadixRadioGroup.Root>;\n\nexport interface DependentSelectorProps\n extends\n Omit<\n RadixRootProps,\n 'children' | 'orientation' | 'value' | 'defaultValue' | 'onValueChange'\n >,\n VariantProps<typeof rootVariants> {\n /** Ordered roster to render as options. */\n people: DependentSelectorPerson[];\n /** Controlled selected person id. */\n value?: string;\n /** Uncontrolled initial selection. Ignored when `value` is set. */\n defaultValue?: string;\n /** Fires with the newly selected person id on user selection. */\n onValueChange?: (personId: string) => void;\n /** Accessible group name, rendered as the `<legend>`. */\n label?: string;\n /** Optional helper paragraph under the legend (wired via aria-describedby). */\n description?: string;\n /** Shows N skeleton rows while the roster resolves; sets aria-busy. */\n loading?: boolean;\n /** Validation/empty-confirmation message — role=alert + aria-invalid. */\n error?: string;\n /** Slot shown when no selectable dependents exist (only self / empty). */\n emptyState?: ReactNode;\n /** Forwarded to the radiogroup root as id + data-component-id. */\n id?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const DependentSelector = forwardRef<\n HTMLDivElement,\n DependentSelectorProps\n>(\n (\n {\n people,\n value,\n defaultValue,\n onValueChange,\n label,\n description,\n size: sizeProp = 'md',\n tone: toneProp = 'checkin',\n loading = false,\n error,\n emptyState,\n id,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n ...props\n },\n ref,\n ) => {\n // CVA's VariantProps types each axis as `T | null | undefined`; the\n // destructure default only covers `undefined`, so coalesce `null`\n // too before the values index the size→class lookup maps.\n const size = sizeProp ?? 'md';\n const tone = toneProp ?? 'checkin';\n const { t } = useTranslation();\n const baseId = useId();\n const legendId = `${baseId}-legend`;\n const descriptionId = `${baseId}-description`;\n const errorId = `${baseId}-error`;\n\n /* ---- Dev-mode accessible-name enforcement ---- */\n const warnedRef = useRef(false);\n useEffect(() => {\n if (\n import.meta.env.DEV &&\n !warnedRef.current &&\n !label &&\n !ariaLabel &&\n !ariaLabelledBy\n ) {\n warnedRef.current = true;\n console.warn(\n '<DependentSelector> rendered without an accessible name. Pass `label`, or `aria-label` / `aria-labelledby`, so the radiogroup is never unnamed.',\n );\n }\n }, [label, ariaLabel, ariaLabelledBy]);\n\n /* ---- Selectable roster + single-selectable auto-select ---- */\n const selectablePeople = useMemo(\n () => people.filter((person) => !person.disabled),\n [people],\n );\n // The dependents region (everything that isn't the verified self row)\n // drives the empty-state slot.\n const hasDependents = people.some(\n (person) => person.relationshipKey !== 'self',\n );\n const autoSelectId =\n selectablePeople.length === 1 ? selectablePeople[0].id : undefined;\n\n /* ---- Controlled / uncontrolled value handling (mirrors RadioGroup) ---- */\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? autoSelectId ?? '',\n );\n const currentValue = isControlled ? (value ?? '') : internalValue;\n const currentValueRef = useRef<string>(currentValue);\n currentValueRef.current = currentValue;\n\n const handleValueChange = (next: string) => {\n if (loading) return;\n if (!isControlled) setInternalValue(next);\n onValueChange?.(next);\n };\n\n /* ---- Auto-select change notification ---- */\n /* When exactly one selectable person exists we seed the uncontrolled */\n /* selection (Radix `defaultValue` + internal state) so the row */\n /* paints checked — but Radix never fires onValueChange for a */\n /* defaultValue. In the kiosk consent flow the consumer wires the */\n /* consent audit trail off onValueChange, so we fire it once on mount */\n /* for that auto-selection. Only when uncontrolled, not loading, and */\n /* the consumer didn't pass an explicit defaultValue. */\n const onValueChangeRef = useRef(onValueChange);\n onValueChangeRef.current = onValueChange;\n const autoSelectNotifiedRef = useRef(false);\n useEffect(() => {\n if (\n !autoSelectNotifiedRef.current &&\n !isControlled &&\n !loading &&\n defaultValue === undefined &&\n autoSelectId !== undefined\n ) {\n autoSelectNotifiedRef.current = true;\n onValueChangeRef.current?.(autoSelectId);\n }\n }, [isControlled, loading, defaultValue, autoSelectId]);\n\n /* ---- Agent registration ---- */\n const agentHandle = useMemo<DependentSelectorHandle>(\n () => ({\n getValue: () => currentValueRef.current,\n setValue: (next) => handleValueChange(next),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isControlled, loading, onValueChange],\n );\n useAgentRegistration(dependentSelectorAgent, agentHandle, id);\n\n /* ---- Direction (Radix auto-flips Left/Right for rtl) ---- */\n const rootRef = useRef<HTMLDivElement>(null);\n const composedRef = composeRefs(ref, rootRef);\n const dir = useDirection(rootRef);\n\n /* ---- Resolved a11y wiring ---- */\n /* ONE grouping mechanism: when `label` is set we render a plain */\n /* heading <div id={legendId}> (NOT a native <fieldset>/<legend>) and */\n /* name the single role=radiogroup via aria-labelledby. A fieldset */\n /* would add a second, redundant named group nested around the */\n /* radiogroup — so we deliberately avoid it. */\n const resolvedAriaLabelledBy =\n ariaLabelledBy ?? (label ? legendId : undefined);\n const describedBy =\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined;\n\n /* ---- Helpers ---- */\n const relationshipLabel = (key: DependentRelationship): string =>\n t(`dependentSelector.relationship.${key}`);\n\n const ageLabel = (age: number): string =>\n t('dependentSelector.age', { count: age });\n\n /** Compose the full accessible name a screen reader announces. */\n const personAccessibleName = (person: DependentSelectorPerson): string => {\n const base = t('dependentSelector.optionLabel', {\n name: person.name,\n relationship: relationshipLabel(person.relationshipKey),\n });\n const parts = [base];\n if (typeof person.age === 'number') parts.push(ageLabel(person.age));\n if (person.isMinor) parts.push(t('dependentSelector.minorBadge'));\n return parts.join(', ');\n };\n\n /* ---- Description + error nodes ---- */\n const descriptionNode = description ? (\n <p id={descriptionId} className=\"type-body-sm ds:text-muted-foreground\">\n {description}\n </p>\n ) : null;\n\n const errorNode = error ? (\n <p\n id={errorId}\n role=\"alert\"\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-body-sm ds:text-destructive\"\n >\n <AlertCircle aria-hidden=\"true\" className=\"ds:size-4 ds:shrink-0\" />\n <span>{error}</span>\n </p>\n ) : null;\n\n /* ---- Skeleton rows (loading) ---- */\n const skeletonRows = (\n <div\n aria-hidden=\"true\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n {Array.from({ length: 3 }).map((_, index) => (\n <div\n key={index}\n className={rowVariants({ size, tone, disabled: false })}\n >\n <span\n className={`ds:inline-flex ds:shrink-0 ds:rounded-[var(--radius-full)] ds:bg-muted ds:animate-pulse ${skeletonAvatarSizeBySize[size]}`}\n />\n <span className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:min-w-0 ds:flex-1\">\n <span className=\"ds:h-4 ds:w-1/2 ds:rounded-[var(--radius-sm)] ds:bg-muted ds:animate-pulse\" />\n <span className=\"ds:h-3 ds:w-1/3 ds:rounded-[var(--radius-sm)] ds:bg-muted ds:animate-pulse\" />\n </span>\n </div>\n ))}\n </div>\n );\n\n /* ---- Person row ---- */\n /* The Radix Item IS the card: it renders the `<button role=\"radio\">` */\n /* that owns the roving tabindex + arrow navigation, so the whole row */\n /* is the focus + click target. The composed name lives on */\n /* `aria-label`; the visible content is aria-hidden so a screen reader */\n /* hears the clean composed name once (no duplication). */\n const renderPerson = (person: DependentSelectorPerson) => {\n const rowId = `${baseId}-row-${person.id}`;\n const accessibleName = personAccessibleName(person);\n\n const row = (\n <RadixRadioGroup.Item\n key={person.id}\n id={rowId}\n value={person.id}\n // Native `disabled` is the single disabled model: Radix renders\n // a <button disabled> that is skipped by roving arrow nav and is\n // non-selectable. `aria-disabled` is intentionally NOT also set —\n // on a natively-disabled button it is redundant (it is meant for\n // elements that REMAIN focusable). The disabledReason tooltip is\n // reached via a focusable wrapper span below, not this button.\n disabled={person.disabled}\n aria-label={accessibleName}\n title={person.dob ?? undefined}\n data-option-id={person.id}\n className={rowVariants({\n size,\n tone,\n disabled: Boolean(person.disabled),\n })}\n >\n {/* The Avatar is intentionally aria-hidden: its name only feeds\n initials/colour, and the radio's own aria-label is the sole\n accessible name. Keep aria-hidden so a future refactor doesn't\n reintroduce a duplicate \"image, <name>\" announcement (the kit\n Avatar always renders role=\"img\" + aria-label={name}). */}\n <Avatar\n src={person.avatarSrc}\n name={person.name}\n size={avatarSizeBySize[size]}\n aria-hidden=\"true\"\n />\n <span\n aria-hidden=\"true\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:min-w-0 ds:flex-1\"\n >\n <span className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)] ds:min-w-0\">\n <span\n className={`${nameTypeBySize[size]} ds:text-foreground ds:truncate ds:min-w-0`}\n >\n {person.name}\n </span>\n {person.isMinor ? (\n // Neutral chip (validated AA ~6:1) — the \"Minor\" flag is\n // informational, not a warning STATE. The tonal `warning`\n // variant fails AA at the small chip font size.\n <Badge variant=\"neutral\" size=\"sm\">\n {t('dependentSelector.minorBadge')}\n </Badge>\n ) : null}\n </span>\n <span className=\"type-body-sm ds:text-muted-foreground ds:truncate ds:min-w-0\">\n {relationshipLabel(person.relationshipKey)}\n {typeof person.age === 'number'\n ? ` · ${ageLabel(person.age)}`\n : null}\n </span>\n </span>\n </RadixRadioGroup.Item>\n );\n\n if (person.disabled && person.disabledReason) {\n // The Radix Item renders a <button disabled>, which is removed\n // from the tab order and does not fire hover/pointer events — so a\n // Tooltip wrapped directly around it would never open. Wrap the row\n // in a focusable, hoverable <span tabIndex={0}> and make THAT the\n // tooltip trigger, so the disabledReason is reachable by both mouse\n // hover and keyboard focus (mirrors radio.tsx putting the Tooltip\n // on the non-disabled wrapper, not the disabled control).\n return (\n <Tooltip key={person.id} label={person.disabledReason}>\n <span\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- intentional focusable tooltip trigger so keyboard users can reach the disabled reason\n tabIndex={0}\n data-disabled-row={person.id}\n aria-label={accessibleName}\n className=\"ds:flex ds:min-w-0 ds:rounded-[var(--radius-md)] ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]\"\n >\n {row}\n </span>\n </Tooltip>\n );\n }\n return row;\n };\n\n /* ---- Empty-state slot ---- */\n const resolvedEmptyState = emptyState ?? (\n <p className=\"type-body-sm ds:text-muted-foreground\">\n {t('dependentSelector.empty')}\n </p>\n );\n\n /* ---- Radiogroup body ---- */\n /* While loading we still render a role=radiogroup container (carrying */\n /* the data-component marker + aria-busy) holding aria-hidden skeleton */\n /* rows — selection is inert. Otherwise the Radix root renders the */\n /* real person rows. */\n const body = loading ? (\n <div\n ref={composedRef}\n id={id}\n role=\"radiogroup\"\n aria-label={!resolvedAriaLabelledBy ? ariaLabel : undefined}\n aria-labelledby={resolvedAriaLabelledBy}\n aria-describedby={describedBy}\n aria-invalid={Boolean(error) || undefined}\n aria-busy=\"true\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:min-w-0\"\n data-component=\"dependent-selector\"\n data-component-id={id}\n >\n <span className=\"ds:sr-only\">\n {t('dependentSelector.loadingLabel')}\n </span>\n {skeletonRows}\n </div>\n ) : (\n <RadixRadioGroup.Root\n ref={composedRef}\n id={id}\n dir={dir}\n value={isControlled ? (value ?? '') : undefined}\n defaultValue={\n !isControlled ? (defaultValue ?? autoSelectId) : undefined\n }\n onValueChange={handleValueChange}\n aria-label={!resolvedAriaLabelledBy ? ariaLabel : undefined}\n aria-labelledby={resolvedAriaLabelledBy}\n aria-describedby={describedBy}\n aria-invalid={Boolean(error) || undefined}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:min-w-0\"\n data-component=\"dependent-selector\"\n data-component-id={id}\n {...props}\n >\n {people.map(renderPerson)}\n </RadixRadioGroup.Root>\n );\n\n /* ---- Outer wrapper ---- */\n /* When `label` is set we render a plain heading <div id={legendId}> */\n /* styled like a legend, and the single role=radiogroup is named via */\n /* aria-labelledby={legendId}. We do NOT wrap in <fieldset>/<legend>: */\n /* that would create a second named grouping container nested around */\n /* the radiogroup (the legend announced twice). One grouping */\n /* mechanism only. */\n const outerClasses = rootVariants({ size, tone, className });\n\n return (\n <div className={outerClasses}>\n {label ? (\n <div id={legendId} className=\"type-label ds:text-foreground\">\n {label}\n </div>\n ) : null}\n {descriptionNode}\n {body}\n {!loading && !hasDependents ? resolvedEmptyState : null}\n {errorNode}\n </div>\n );\n },\n);\n\nDependentSelector.displayName = 'DependentSelector';\n"],"names":["dependentSelectorAgent","handle","args","rootVariants","cva","rowVariants","avatarSizeBySize","skeletonAvatarSizeBySize","nameTypeBySize","DependentSelector","forwardRef","people","value","defaultValue","onValueChange","label","description","sizeProp","toneProp","loading","error","emptyState","id","className","ariaLabel","ariaLabelledBy","props","ref","size","tone","t","useTranslation","baseId","useId","legendId","descriptionId","errorId","useRef","useEffect","selectablePeople","useMemo","person","hasDependents","autoSelectId","isControlled","internalValue","setInternalValue","useState","currentValue","currentValueRef","handleValueChange","next","onValueChangeRef","autoSelectNotifiedRef","_a","agentHandle","useAgentRegistration","rootRef","composedRef","composeRefs","dir","useDirection","resolvedAriaLabelledBy","describedBy","relationshipLabel","key","ageLabel","age","personAccessibleName","parts","descriptionNode","jsx","errorNode","jsxs","AlertCircle","skeletonRows","_","index","renderPerson","rowId","accessibleName","row","RadixRadioGroup","Avatar","Badge","Tooltip","resolvedEmptyState","body","outerClasses"],"mappings":"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"}
@@ -3,8 +3,8 @@ import { forwardRef as Fe, useId as Te, useRef as m, useState as Y, useEffect as
3
3
  import { c as z } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as $e } from "react-i18next";
5
5
  import { B as H } from "./button-DD_0Xdmr.js";
6
- import { A as ae } from "./alert-_mUKLmwA.js";
7
- import { L as he, F as Xe } from "./file-upload-5ScQd4fE.js";
6
+ import { A as ae } from "./alert-CHYZ96tR.js";
7
+ import { L as he, F as Xe } from "./file-upload-DwZcAK8D.js";
8
8
  import { u as Ze } from "./use-controllable-state-BiY4xTzM.js";
9
9
  import { u as Ge } from "./registry-DvAUVLHh.js";
10
10
  import { R as Je } from "./rotate-ccw-BWANpitO.js";
@@ -708,4 +708,4 @@ export {
708
708
  ur as D,
709
709
  tr as d
710
710
  };
711
- //# sourceMappingURL=document-scanner-CTubA0-N.js.map
711
+ //# sourceMappingURL=document-scanner-C_AxLooF.js.map