@alfadocs/ui-kit-debug 0.68.0 → 0.69.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 (735) hide show
  1. package/dist/_chunks/{accordion-9lJSMMsZ.js → accordion-DnIa7OHX.js} +69 -47
  2. package/dist/_chunks/accordion-DnIa7OHX.js.map +1 -0
  3. package/dist/_chunks/actions-cell-renderer-DrcaxB0w.js +2061 -0
  4. package/dist/_chunks/actions-cell-renderer-DrcaxB0w.js.map +1 -0
  5. package/dist/_chunks/address-autocomplete-BEX9PXty.js +496 -0
  6. package/dist/_chunks/address-autocomplete-BEX9PXty.js.map +1 -0
  7. package/dist/_chunks/{agenda-card.agent-B_R47-c9.js → agenda-card.agent-mTCrkKSZ.js} +6 -1
  8. package/dist/_chunks/{agenda-card.agent-B_R47-c9.js.map → agenda-card.agent-mTCrkKSZ.js.map} +1 -1
  9. package/dist/_chunks/{agenda-tray-T-BumlGZ.js → agenda-tray-g0kg7HwB.js} +36 -24
  10. package/dist/_chunks/agenda-tray-g0kg7HwB.js.map +1 -0
  11. package/dist/_chunks/{ai-consent-banner-Dxtx_WAh.js → ai-consent-banner-CXlsNX1c.js} +3 -3
  12. package/dist/_chunks/{ai-consent-banner-Dxtx_WAh.js.map → ai-consent-banner-CXlsNX1c.js.map} +1 -1
  13. package/dist/_chunks/{ai-prompt-input-BwEACCPm.js → ai-prompt-input-CuhTo9mh.js} +80 -61
  14. package/dist/_chunks/ai-prompt-input-CuhTo9mh.js.map +1 -0
  15. package/dist/_chunks/{ai-tools-rail-CInA_1-E.js → ai-tools-rail-BA_sqy1A.js} +87 -70
  16. package/dist/_chunks/ai-tools-rail-BA_sqy1A.js.map +1 -0
  17. package/dist/_chunks/{alia-sidebar-Ckv0yCKi.js → alia-sidebar-B47qRQb5.js} +5 -5
  18. package/dist/_chunks/{alia-sidebar-Ckv0yCKi.js.map → alia-sidebar-B47qRQb5.js.map} +1 -1
  19. package/dist/_chunks/{anamnesis-card-N8pIKWuS.js → anamnesis-card-DRmE24OQ.js} +2 -2
  20. package/dist/_chunks/{anamnesis-card-N8pIKWuS.js.map → anamnesis-card-DRmE24OQ.js.map} +1 -1
  21. package/dist/_chunks/{appointment-tray-BMl89NPW.js → appointment-tray-CZtvtaH-.js} +32 -20
  22. package/dist/_chunks/appointment-tray-CZtvtaH-.js.map +1 -0
  23. package/dist/_chunks/{audio-recorder-DjXLP4aF.js → audio-recorder-DYXXnGug.js} +59 -56
  24. package/dist/_chunks/audio-recorder-DYXXnGug.js.map +1 -0
  25. package/dist/_chunks/{autocomplete-CcCFlVf-.js → autocomplete-DOeGouCL.js} +157 -132
  26. package/dist/_chunks/autocomplete-DOeGouCL.js.map +1 -0
  27. package/dist/_chunks/bishop-score-PJI3AXzA.js +304 -0
  28. package/dist/_chunks/bishop-score-PJI3AXzA.js.map +1 -0
  29. package/dist/_chunks/bmi-calculator-BZtIJ53x.js +434 -0
  30. package/dist/_chunks/bmi-calculator-BZtIJ53x.js.map +1 -0
  31. package/dist/_chunks/{booking-L8-YP8BJ.js → booking-C3VqFReX.js} +420 -397
  32. package/dist/_chunks/booking-C3VqFReX.js.map +1 -0
  33. package/dist/_chunks/{breadcrumb-OTbaY70e.js → breadcrumb-CchdeG7d.js} +42 -28
  34. package/dist/_chunks/breadcrumb-CchdeG7d.js.map +1 -0
  35. package/dist/_chunks/{calculator-dialog-CFk4I91b.js → calculator-dialog-BR5iU0kf.js} +2 -2
  36. package/dist/_chunks/{calculator-dialog-CFk4I91b.js.map → calculator-dialog-BR5iU0kf.js.map} +1 -1
  37. package/dist/_chunks/{calendar-oYWOCrnf.js → calendar-CZUjL8SZ.js} +258 -201
  38. package/dist/_chunks/calendar-CZUjL8SZ.js.map +1 -0
  39. package/dist/_chunks/{care-plan-card-BwVUyUBb.js → care-plan-card-CvFGXa2z.js} +10 -6
  40. package/dist/_chunks/care-plan-card-CvFGXa2z.js.map +1 -0
  41. package/dist/_chunks/{care-plan-entry-card-VzdQHcOL.js → care-plan-entry-card-C3E_gClk.js} +17 -13
  42. package/dist/_chunks/care-plan-entry-card-C3E_gClk.js.map +1 -0
  43. package/dist/_chunks/{carousel.agent-vt21A_el.js → carousel.agent-4v8Emr9E.js} +219 -198
  44. package/dist/_chunks/{carousel.agent-vt21A_el.js.map → carousel.agent-4v8Emr9E.js.map} +1 -1
  45. package/dist/_chunks/{chart-Cg3e9EH9.js → chart-CMr3eW62.js} +150 -109
  46. package/dist/_chunks/chart-CMr3eW62.js.map +1 -0
  47. package/dist/_chunks/{chat-container-ogB4OskO.js → chat-container-DWho5hPR.js} +47 -34
  48. package/dist/_chunks/chat-container-DWho5hPR.js.map +1 -0
  49. package/dist/_chunks/{chat-input-B5zjNEUN.js → chat-input-BcXTetgM.js} +57 -41
  50. package/dist/_chunks/chat-input-BcXTetgM.js.map +1 -0
  51. package/dist/_chunks/{checkbox-DRcOdmXv.js → checkbox-BuZ1u__2.js} +41 -27
  52. package/dist/_chunks/checkbox-BuZ1u__2.js.map +1 -0
  53. package/dist/_chunks/{checkbox-group-CpUwlHug.js → checkbox-group-PqNmQ-cE.js} +3 -3
  54. package/dist/_chunks/{checkbox-group-CpUwlHug.js.map → checkbox-group-PqNmQ-cE.js.map} +1 -1
  55. package/dist/_chunks/{clinical-note-card-gtrxv6zn.js → clinical-note-card-DqQYf_D4.js} +2 -2
  56. package/dist/_chunks/{clinical-note-card-gtrxv6zn.js.map → clinical-note-card-DqQYf_D4.js.map} +1 -1
  57. package/dist/_chunks/{collapsible-X3oaLPU3.js → collapsible-BrnRiCC6.js} +26 -23
  58. package/dist/_chunks/collapsible-BrnRiCC6.js.map +1 -0
  59. package/dist/_chunks/{color-picker-FXpItIaF.js → color-picker-C_fZl6sA.js} +124 -112
  60. package/dist/_chunks/color-picker-C_fZl6sA.js.map +1 -0
  61. package/dist/_chunks/{combobox-BC-DFx8G.js → combobox-Clum7gJ1.js} +165 -128
  62. package/dist/_chunks/combobox-Clum7gJ1.js.map +1 -0
  63. package/dist/_chunks/{command-palette-BiPAAno-.js → command-palette-CJzmc5pC.js} +87 -64
  64. package/dist/_chunks/command-palette-CJzmc5pC.js.map +1 -0
  65. package/dist/_chunks/{contact-profile-card-7BMB85T6.js → contact-profile-card-Dramqa9C.js} +13 -11
  66. package/dist/_chunks/contact-profile-card-Dramqa9C.js.map +1 -0
  67. package/dist/_chunks/{copy-field-CCq7j6Zc.js → copy-field-Bjw9u2cV.js} +42 -35
  68. package/dist/_chunks/copy-field-Bjw9u2cV.js.map +1 -0
  69. package/dist/_chunks/counter-dRlTNC_y.js +55 -0
  70. package/dist/_chunks/counter-dRlTNC_y.js.map +1 -0
  71. package/dist/_chunks/{cycle-calculator-BF0ointe.js → cycle-calculator-DmRGJNaT.js} +3 -3
  72. package/dist/_chunks/{cycle-calculator-BF0ointe.js.map → cycle-calculator-DmRGJNaT.js.map} +1 -1
  73. package/dist/_chunks/{date-picker-oGg5BnXL.js → date-picker-Dl9RKxaV.js} +76 -57
  74. package/dist/_chunks/{date-picker-oGg5BnXL.js.map → date-picker-Dl9RKxaV.js.map} +1 -1
  75. package/dist/_chunks/{date-range-picker-C5BWfH_T.js → date-range-picker-CTUeR6Bj.js} +73 -46
  76. package/dist/_chunks/date-range-picker-CTUeR6Bj.js.map +1 -0
  77. package/dist/_chunks/{date-time-picker-Ze1My59T.js → date-time-picker-BhoogS5Q.js} +64 -40
  78. package/dist/_chunks/date-time-picker-BhoogS5Q.js.map +1 -0
  79. package/dist/_chunks/{dependent-selector-DpzGtr_J.js → dependent-selector-CG_FOHya.js} +44 -30
  80. package/dist/_chunks/dependent-selector-CG_FOHya.js.map +1 -0
  81. package/dist/_chunks/{dialog-DMGnSelc.js → dialog-ZNuboNmy.js} +35 -28
  82. package/dist/_chunks/dialog-ZNuboNmy.js.map +1 -0
  83. package/dist/_chunks/{document-scanner-D2qehl3-.js → document-scanner-CTubA0-N.js} +12 -4
  84. package/dist/_chunks/document-scanner-CTubA0-N.js.map +1 -0
  85. package/dist/_chunks/{dropdown-menu-DwwPovMZ.js → dropdown-menu-qrxjymfw.js} +94 -93
  86. package/dist/_chunks/dropdown-menu-qrxjymfw.js.map +1 -0
  87. package/dist/_chunks/{due-date-calculator-DU9AEWNy.js → due-date-calculator-BTmsIQqD.js} +4 -4
  88. package/dist/_chunks/{due-date-calculator-DU9AEWNy.js.map → due-date-calculator-BTmsIQqD.js.map} +1 -1
  89. package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js +448 -0
  90. package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js.map +1 -0
  91. package/dist/_chunks/{email-input-lQivsFrw.js → email-input-B_Y55f5G.js} +3 -3
  92. package/dist/_chunks/{email-input-lQivsFrw.js.map → email-input-B_Y55f5G.js.map} +1 -1
  93. package/dist/_chunks/{fetal-weight-BVSzOhuR.js → fetal-weight-CRz7KE2D.js} +2 -2
  94. package/dist/_chunks/{fetal-weight-BVSzOhuR.js.map → fetal-weight-CRz7KE2D.js.map} +1 -1
  95. package/dist/_chunks/{file-upload-BosbPDb1.js → file-upload-5ScQd4fE.js} +118 -100
  96. package/dist/_chunks/file-upload-5ScQd4fE.js.map +1 -0
  97. package/dist/_chunks/{fiscal-code-input-DPtqluVb.js → fiscal-code-input-Cf-8O4Fj.js} +76 -63
  98. package/dist/_chunks/fiscal-code-input-Cf-8O4Fj.js.map +1 -0
  99. package/dist/_chunks/{freemium-paywall-CkWjv3o6.js → freemium-paywall-DZ2mBS3w.js} +78 -71
  100. package/dist/_chunks/freemium-paywall-DZ2mBS3w.js.map +1 -0
  101. package/dist/_chunks/{gestational-age-calculator-DBlFdoiP.js → gestational-age-calculator-BleUdhbI.js} +5 -5
  102. package/dist/_chunks/{gestational-age-calculator-DBlFdoiP.js.map → gestational-age-calculator-BleUdhbI.js.map} +1 -1
  103. package/dist/_chunks/{hcg-doubling-if4Q8aSX.js → hcg-doubling-CnjDXX6U.js} +3 -3
  104. package/dist/_chunks/{hcg-doubling-if4Q8aSX.js.map → hcg-doubling-CnjDXX6U.js.map} +1 -1
  105. package/dist/_chunks/{header-settings-CNOqIhoW.js → header-settings-DJqoAl5m.js} +86 -46
  106. package/dist/_chunks/header-settings-DJqoAl5m.js.map +1 -0
  107. package/dist/_chunks/{index.modern-D2LGACWg.js → index.modern-Zta-A4Jm.js} +3 -3
  108. package/dist/_chunks/{index.modern-D2LGACWg.js.map → index.modern-Zta-A4Jm.js.map} +1 -1
  109. package/dist/_chunks/{list-BOwqwy03.js → list-DgE1xWBM.js} +99 -84
  110. package/dist/_chunks/list-DgE1xWBM.js.map +1 -0
  111. package/dist/_chunks/{locale-picker-C9JmBht3.js → locale-picker-ChYYSX2N.js} +47 -35
  112. package/dist/_chunks/locale-picker-ChYYSX2N.js.map +1 -0
  113. package/dist/_chunks/{map-view-Tb5VfK9Y.js → map-view-BkOoGoX2.js} +160 -115
  114. package/dist/_chunks/map-view-BkOoGoX2.js.map +1 -0
  115. package/dist/_chunks/{marketplace-app-shell-D4-T9Qzz.js → marketplace-app-shell-6T9W4Knl.js} +4 -4
  116. package/dist/_chunks/{marketplace-app-shell-D4-T9Qzz.js.map → marketplace-app-shell-6T9W4Knl.js.map} +1 -1
  117. package/dist/_chunks/{message-card.agent-4IeIgrnJ.js → message-card.agent-ZLhx3Bs5.js} +6 -1
  118. package/dist/_chunks/message-card.agent-ZLhx3Bs5.js.map +1 -0
  119. package/dist/_chunks/{message-tray-CVyJajVJ.js → message-tray-DwrBLJlf.js} +90 -48
  120. package/dist/_chunks/message-tray-DwrBLJlf.js.map +1 -0
  121. package/dist/_chunks/{multi-select-BcPylvHR.js → multi-select-BdHHDrRN.js} +196 -153
  122. package/dist/_chunks/multi-select-BdHHDrRN.js.map +1 -0
  123. package/dist/_chunks/{navigation-menu-C6lBYVv9.js → navigation-menu-DRUi6sSj.js} +75 -42
  124. package/dist/_chunks/navigation-menu-DRUi6sSj.js.map +1 -0
  125. package/dist/_chunks/{notification-card.agent-Rqt3ofk9.js → notification-card.agent-DxGBZb8T.js} +5 -1
  126. package/dist/_chunks/notification-card.agent-DxGBZb8T.js.map +1 -0
  127. package/dist/_chunks/{notification-tray-DlgenTEe.js → notification-tray-Btb9oQeZ.js} +112 -97
  128. package/dist/_chunks/notification-tray-Btb9oQeZ.js.map +1 -0
  129. package/dist/_chunks/{number-input-Dj5L3pXK.js → number-input-DxphVG_A.js} +36 -27
  130. package/dist/_chunks/number-input-DxphVG_A.js.map +1 -0
  131. package/dist/_chunks/{operator-hero-f_KaRhw5.js → operator-hero-CP2Nhupm.js} +12 -8
  132. package/dist/_chunks/operator-hero-CP2Nhupm.js.map +1 -0
  133. package/dist/_chunks/{otp-input-xQ4Ps5VY.js → otp-input-DzBQ-CpE.js} +52 -33
  134. package/dist/_chunks/otp-input-DzBQ-CpE.js.map +1 -0
  135. package/dist/_chunks/{pagination-DQOgnxxw.js → pagination-D58kglCr.js} +181 -162
  136. package/dist/_chunks/pagination-D58kglCr.js.map +1 -0
  137. package/dist/_chunks/{patient-search-DR9XUYRQ.js → patient-search-CBC_ySF6.js} +69 -60
  138. package/dist/_chunks/patient-search-CBC_ySF6.js.map +1 -0
  139. package/dist/_chunks/{patient-shell-BfgufL_q.js → patient-shell-DV3XEtIB.js} +3 -3
  140. package/dist/_chunks/{patient-shell-BfgufL_q.js.map → patient-shell-DV3XEtIB.js.map} +1 -1
  141. package/dist/_chunks/{patient-summary-card-hEmr4eTW.js → patient-summary-card-B836_fDB.js} +95 -103
  142. package/dist/_chunks/patient-summary-card-B836_fDB.js.map +1 -0
  143. package/dist/_chunks/patient-table-CDuosVru.js +889 -0
  144. package/dist/_chunks/patient-table-CDuosVru.js.map +1 -0
  145. package/dist/_chunks/{payment-form-nXocS_MX.js → payment-form-DvjwYVIT.js} +56 -44
  146. package/dist/_chunks/payment-form-DvjwYVIT.js.map +1 -0
  147. package/dist/_chunks/{payment-request-card-CYE5vhZ0.js → payment-request-card-DioWKBUq.js} +2 -2
  148. package/dist/_chunks/{payment-request-card-CYE5vhZ0.js.map → payment-request-card-DioWKBUq.js.map} +1 -1
  149. package/dist/_chunks/{pdf-viewer-GsfNqeeT.js → pdf-viewer-D6BPfW2D.js} +205 -157
  150. package/dist/_chunks/pdf-viewer-D6BPfW2D.js.map +1 -0
  151. package/dist/_chunks/{periodontal-chart-card-Dh3KgvYG.js → periodontal-chart-card-BuDEMbHE.js} +2 -2
  152. package/dist/_chunks/{periodontal-chart-card-Dh3KgvYG.js.map → periodontal-chart-card-BuDEMbHE.js.map} +1 -1
  153. package/dist/_chunks/{phone-input-DVXhNlIl.js → phone-input-DjU-XmO_.js} +64 -47
  154. package/dist/_chunks/phone-input-DjU-XmO_.js.map +1 -0
  155. package/dist/_chunks/{popover-DTbfAuR0.js → popover-B2qCDhJC.js} +37 -32
  156. package/dist/_chunks/popover-B2qCDhJC.js.map +1 -0
  157. package/dist/_chunks/{practice-results-DND2SAt7.js → practice-results-KrTHqZua.js} +278 -242
  158. package/dist/_chunks/practice-results-KrTHqZua.js.map +1 -0
  159. package/dist/_chunks/{pregnancy-dating-QY-sqpvj.js → pregnancy-dating-DORUAOHB.js} +6 -6
  160. package/dist/_chunks/{pregnancy-dating-QY-sqpvj.js.map → pregnancy-dating-DORUAOHB.js.map} +1 -1
  161. package/dist/_chunks/{pregnancy-weight-gain-DOJXXNYP.js → pregnancy-weight-gain-DVz4rr7-.js} +3 -3
  162. package/dist/_chunks/{pregnancy-weight-gain-DOJXXNYP.js.map → pregnancy-weight-gain-DVz4rr7-.js.map} +1 -1
  163. package/dist/_chunks/{privacy-lock-C7JyMf0y.js → privacy-lock-BzMLQu-j.js} +32 -28
  164. package/dist/_chunks/privacy-lock-BzMLQu-j.js.map +1 -0
  165. package/dist/_chunks/{product-hub-panel-CAXDFeGP.js → product-hub-panel-e6pW220e.js} +45 -27
  166. package/dist/_chunks/product-hub-panel-e6pW220e.js.map +1 -0
  167. package/dist/_chunks/{progress-kzIRcdaq.js → progress-DA413-zn.js} +2 -2
  168. package/dist/_chunks/{progress-kzIRcdaq.js.map → progress-DA413-zn.js.map} +1 -1
  169. package/dist/_chunks/{public-footer.agent-CfXuW1x6.js → public-footer.agent-D0cFbjWl.js} +151 -146
  170. package/dist/_chunks/public-footer.agent-D0cFbjWl.js.map +1 -0
  171. package/dist/_chunks/{public-header.agent-BOhJgZEU.js → public-header.agent-DqkqA-ca.js} +107 -102
  172. package/dist/_chunks/{public-header.agent-BOhJgZEU.js.map → public-header.agent-DqkqA-ca.js.map} +1 -1
  173. package/dist/_chunks/{qr-code-DNXhi6se.js → qr-code-CPkEs5mG.js} +52 -46
  174. package/dist/_chunks/qr-code-CPkEs5mG.js.map +1 -0
  175. package/dist/_chunks/{radio-group-CLjK-SlK.js → radio-group-BPt7pKZW.js} +5 -5
  176. package/dist/_chunks/{radio-group-CLjK-SlK.js.map → radio-group-BPt7pKZW.js.map} +1 -1
  177. package/dist/_chunks/{recaptcha-widget-BCNHsgqt.js → recaptcha-widget-BC-4To9b.js} +9 -2
  178. package/dist/_chunks/recaptcha-widget-BC-4To9b.js.map +1 -0
  179. package/dist/_chunks/registry-DvAUVLHh.js +51 -0
  180. package/dist/_chunks/registry-DvAUVLHh.js.map +1 -0
  181. package/dist/_chunks/{resizable-3vzqDlg6.js → resizable-DVGcfOrk.js} +193 -173
  182. package/dist/_chunks/resizable-DVGcfOrk.js.map +1 -0
  183. package/dist/_chunks/{reviews-panel-DBktKm7i.js → reviews-panel-Dq7LMDcH.js} +87 -68
  184. package/dist/_chunks/reviews-panel-Dq7LMDcH.js.map +1 -0
  185. package/dist/_chunks/{rich-text-editor-VawKN1FI.js → rich-text-editor-BsV7zUdg.js} +736 -647
  186. package/dist/_chunks/rich-text-editor-BsV7zUdg.js.map +1 -0
  187. package/dist/_chunks/{search-bar-SY2BcV2N.js → search-bar-C_T3pBJn.js} +105 -78
  188. package/dist/_chunks/search-bar-C_T3pBJn.js.map +1 -0
  189. package/dist/_chunks/{search-input-DbxrnHkW.js → search-input-DQvGxR74.js} +2 -2
  190. package/dist/_chunks/{search-input-DbxrnHkW.js.map → search-input-DQvGxR74.js.map} +1 -1
  191. package/dist/_chunks/{search-input.agent-CfZvViOd.js → search-input.agent-DRH54coT.js} +19 -4
  192. package/dist/_chunks/search-input.agent-DRH54coT.js.map +1 -0
  193. package/dist/_chunks/{select-CEtRcon5.js → select-DMLG44F5.js} +72 -56
  194. package/dist/_chunks/select-DMLG44F5.js.map +1 -0
  195. package/dist/_chunks/{session-countdown-LPnhTHjn.js → session-countdown-X1Ki6i0M.js} +3 -3
  196. package/dist/_chunks/{session-countdown-LPnhTHjn.js.map → session-countdown-X1Ki6i0M.js.map} +1 -1
  197. package/dist/_chunks/{sheet-taJer-Ha.js → sheet-BxsE7eQm.js} +59 -45
  198. package/dist/_chunks/sheet-BxsE7eQm.js.map +1 -0
  199. package/dist/_chunks/{sidebar-DaB4ulxH.js → sidebar-DY9jGjgt.js} +254 -248
  200. package/dist/_chunks/sidebar-DY9jGjgt.js.map +1 -0
  201. package/dist/_chunks/{sign-document-CdAiHiCh.js → sign-document-B4DeRhTe.js} +75 -49
  202. package/dist/_chunks/sign-document-B4DeRhTe.js.map +1 -0
  203. package/dist/_chunks/{signature-capture-COi0Uiqu.js → signature-capture-Ct_4Md4e.js} +138 -104
  204. package/dist/_chunks/signature-capture-Ct_4Md4e.js.map +1 -0
  205. package/dist/_chunks/{slider-BHWzXdjt.js → slider-DN1CWkKB.js} +85 -65
  206. package/dist/_chunks/slider-DN1CWkKB.js.map +1 -0
  207. package/dist/_chunks/{sparkline-DGhCSw8M.js → sparkline-iOXYgvJe.js} +75 -53
  208. package/dist/_chunks/sparkline-iOXYgvJe.js.map +1 -0
  209. package/dist/_chunks/{stepper-accordion.agent-C4quJ-MD.js → stepper-accordion.agent-cmEguIdx.js} +7 -1
  210. package/dist/_chunks/stepper-accordion.agent-cmEguIdx.js.map +1 -0
  211. package/dist/_chunks/{stepper-progress-DDjq5nei.js → stepper-progress-Bv0njx4g.js} +30 -24
  212. package/dist/_chunks/stepper-progress-Bv0njx4g.js.map +1 -0
  213. package/dist/_chunks/{suggestion-chip.agent-6sNWFj7m.js → suggestion-chip.agent-Brn3CiFE.js} +9 -8
  214. package/dist/_chunks/{suggestion-chip.agent-6sNWFj7m.js.map → suggestion-chip.agent-Brn3CiFE.js.map} +1 -1
  215. package/dist/_chunks/{switch-BJ6HD3Mn.js → switch-OILsBLWo.js} +25 -19
  216. package/dist/_chunks/switch-OILsBLWo.js.map +1 -0
  217. package/dist/_chunks/{tabs-BIQ0ew1T.js → tabs-BxcOziCo.js} +67 -58
  218. package/dist/_chunks/tabs-BxcOziCo.js.map +1 -0
  219. package/dist/_chunks/{task-card.agent-CUPKYd7w.js → task-card.agent-Bt14CzUd.js} +4 -1
  220. package/dist/_chunks/task-card.agent-Bt14CzUd.js.map +1 -0
  221. package/dist/_chunks/{task-tray-CAncV-QQ.js → task-tray-qOEQflu4.js} +74 -57
  222. package/dist/_chunks/task-tray-qOEQflu4.js.map +1 -0
  223. package/dist/_chunks/{text-area-BIx0tZ05.js → text-area-Bt3p7Pt0.js} +41 -34
  224. package/dist/_chunks/text-area-Bt3p7Pt0.js.map +1 -0
  225. package/dist/_chunks/{text-input-BaClJL8Y.js → text-input-B-OWQ1Je.js} +15 -8
  226. package/dist/_chunks/text-input-B-OWQ1Je.js.map +1 -0
  227. package/dist/_chunks/{theme-toggle-DETmSu_h.js → theme-toggle-XB6o_lgs.js} +38 -26
  228. package/dist/_chunks/theme-toggle-XB6o_lgs.js.map +1 -0
  229. package/dist/_chunks/{time-picker-B5umYwfv.js → time-picker-BPlJWm8w.js} +41 -31
  230. package/dist/_chunks/time-picker-BPlJWm8w.js.map +1 -0
  231. package/dist/_chunks/{timeline-DQa5Tyz4.js → timeline-CqA4nKTI.js} +33 -25
  232. package/dist/_chunks/timeline-CqA4nKTI.js.map +1 -0
  233. package/dist/_chunks/{toast.agent-vuLRRn2a.js → toast.agent-57UzyR9U.js} +62 -45
  234. package/dist/_chunks/{toast.agent-vuLRRn2a.js.map → toast.agent-57UzyR9U.js.map} +1 -1
  235. package/dist/_chunks/{tooth-scheme-BIx1O2aJ.js → tooth-scheme-yBr53cvv.js} +421 -348
  236. package/dist/_chunks/tooth-scheme-yBr53cvv.js.map +1 -0
  237. package/dist/_chunks/{transcript-panel-CLHmv83g.js → transcript-panel-3THQX6nJ.js} +47 -33
  238. package/dist/_chunks/transcript-panel-3THQX6nJ.js.map +1 -0
  239. package/dist/_chunks/unit-converter-YEpD9evj.js +337 -0
  240. package/dist/_chunks/unit-converter-YEpD9evj.js.map +1 -0
  241. package/dist/_chunks/{use-password-requirements-DsgduV1x.js → use-password-requirements-BXvS2MBS.js} +131 -117
  242. package/dist/_chunks/use-password-requirements-BXvS2MBS.js.map +1 -0
  243. package/dist/_chunks/users-MBVtUzwd.js +17 -0
  244. package/dist/_chunks/users-MBVtUzwd.js.map +1 -0
  245. package/dist/_chunks/warning-stack-BsgaEbL8.js +283 -0
  246. package/dist/_chunks/warning-stack-BsgaEbL8.js.map +1 -0
  247. package/dist/_chunks/{whatsapp-button-DUjlWGKf.js → whatsapp-button-BIy6NaJK.js} +6 -3
  248. package/dist/_chunks/whatsapp-button-BIy6NaJK.js.map +1 -0
  249. package/dist/_chunks/{workflow-map-JAZryZJr.js → workflow-map-Bdam9pGp.js} +99 -88
  250. package/dist/_chunks/workflow-map-Bdam9pGp.js.map +1 -0
  251. package/dist/agent/index.d.ts +4 -4
  252. package/dist/agent/index.d.ts.map +1 -1
  253. package/dist/agent/index.js +36 -0
  254. package/dist/agent/index.js.map +1 -0
  255. package/dist/agent/registry.d.ts +33 -0
  256. package/dist/agent/registry.d.ts.map +1 -1
  257. package/dist/agent/types.d.ts +78 -2
  258. package/dist/agent/types.d.ts.map +1 -1
  259. package/dist/agent-catalog.json +6905 -509
  260. package/dist/agent-i18n/en.json +1175 -0
  261. package/dist/components/accordion/accordion.agent.d.ts.map +1 -1
  262. package/dist/components/accordion/accordion.d.ts.map +1 -1
  263. package/dist/components/accordion/index.js +1 -1
  264. package/dist/components/address-autocomplete/address-autocomplete.agent.d.ts +4 -0
  265. package/dist/components/address-autocomplete/address-autocomplete.agent.d.ts.map +1 -0
  266. package/dist/components/address-autocomplete/address-autocomplete.d.ts +18 -0
  267. package/dist/components/address-autocomplete/address-autocomplete.d.ts.map +1 -1
  268. package/dist/components/address-autocomplete/index.d.ts +2 -1
  269. package/dist/components/address-autocomplete/index.d.ts.map +1 -1
  270. package/dist/components/address-autocomplete/index.js +3 -2
  271. package/dist/components/agenda-card/agenda-card.agent.d.ts.map +1 -1
  272. package/dist/components/agenda-card/index.js +1 -1
  273. package/dist/components/agenda-tray/agenda-tray.agent.d.ts.map +1 -1
  274. package/dist/components/agenda-tray/index.js +1 -1
  275. package/dist/components/ai-consent-banner/index.js +1 -1
  276. package/dist/components/ai-prompt-input/ai-prompt-input.agent.d.ts.map +1 -1
  277. package/dist/components/ai-prompt-input/index.js +1 -1
  278. package/dist/components/ai-tools-rail/ai-tools-rail.agent.d.ts.map +1 -1
  279. package/dist/components/ai-tools-rail/index.js +1 -1
  280. package/dist/components/anamnesis-card/index.js +1 -1
  281. package/dist/components/appointment-card/appointment-card.agent.d.ts.map +1 -1
  282. package/dist/components/appointment-card/appointment-tray.agent.d.ts.map +1 -1
  283. package/dist/components/appointment-card/index.js +1 -1
  284. package/dist/components/audio-recorder/audio-recorder.agent.d.ts.map +1 -1
  285. package/dist/components/audio-recorder/index.js +1 -1
  286. package/dist/components/autocomplete/autocomplete.agent.d.ts.map +1 -1
  287. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
  288. package/dist/components/autocomplete/index.js +1 -1
  289. package/dist/components/bishop-score/bishop-score.agent.d.ts +4 -0
  290. package/dist/components/bishop-score/bishop-score.agent.d.ts.map +1 -0
  291. package/dist/components/bishop-score/bishop-score.d.ts +17 -1
  292. package/dist/components/bishop-score/bishop-score.d.ts.map +1 -1
  293. package/dist/components/bishop-score/index.js +1 -1
  294. package/dist/components/bmi-calculator/bmi-calculator.agent.d.ts +4 -0
  295. package/dist/components/bmi-calculator/bmi-calculator.agent.d.ts.map +1 -0
  296. package/dist/components/bmi-calculator/bmi-calculator.d.ts +26 -0
  297. package/dist/components/bmi-calculator/bmi-calculator.d.ts.map +1 -1
  298. package/dist/components/bmi-calculator/index.js +1 -1
  299. package/dist/components/booking/booking.agent.d.ts.map +1 -1
  300. package/dist/components/booking/index.js +1 -1
  301. package/dist/components/breadcrumb/breadcrumb.agent.d.ts.map +1 -1
  302. package/dist/components/breadcrumb/index.js +1 -1
  303. package/dist/components/calculator-dialog/index.js +1 -1
  304. package/dist/components/calendar/calendar.agent.d.ts.map +1 -1
  305. package/dist/components/calendar/index.js +1 -1
  306. package/dist/components/care-plan-card/care-plan-card.agent.d.ts.map +1 -1
  307. package/dist/components/care-plan-card/index.js +1 -1
  308. package/dist/components/care-plan-entry-card/care-plan-entry-card.agent.d.ts.map +1 -1
  309. package/dist/components/care-plan-entry-card/index.js +1 -1
  310. package/dist/components/carousel/carousel.agent.d.ts.map +1 -1
  311. package/dist/components/carousel/index.js +1 -1
  312. package/dist/components/chart/chart.agent.d.ts.map +1 -1
  313. package/dist/components/chart/index.js +1 -1
  314. package/dist/components/chat-container/chat-container.agent.d.ts.map +1 -1
  315. package/dist/components/chat-container/index.js +1 -1
  316. package/dist/components/chat-input/chat-input.agent.d.ts.map +1 -1
  317. package/dist/components/chat-input/index.js +1 -1
  318. package/dist/components/checkbox/checkbox.agent.d.ts.map +1 -1
  319. package/dist/components/checkbox/index.js +1 -1
  320. package/dist/components/checkbox-group/index.js +1 -1
  321. package/dist/components/clinical-note-card/index.js +1 -1
  322. package/dist/components/collapsible/collapsible.agent.d.ts.map +1 -1
  323. package/dist/components/collapsible/index.js +1 -1
  324. package/dist/components/color-picker/color-picker.agent.d.ts.map +1 -1
  325. package/dist/components/color-picker/index.js +1 -1
  326. package/dist/components/combobox/combobox.agent.d.ts.map +1 -1
  327. package/dist/components/combobox/combobox.d.ts.map +1 -1
  328. package/dist/components/combobox/index.js +1 -1
  329. package/dist/components/command-palette/command-palette.agent.d.ts.map +1 -1
  330. package/dist/components/command-palette/command-palette.d.ts.map +1 -1
  331. package/dist/components/command-palette/index.js +1 -1
  332. package/dist/components/contact-profile-card/contact-profile-card.agent.d.ts.map +1 -1
  333. package/dist/components/contact-profile-card/index.js +1 -1
  334. package/dist/components/copy-field/copy-field.agent.d.ts.map +1 -1
  335. package/dist/components/copy-field/index.js +1 -1
  336. package/dist/components/counter/counter.d.ts +22 -0
  337. package/dist/components/counter/counter.d.ts.map +1 -0
  338. package/dist/components/counter/index.d.ts +3 -0
  339. package/dist/components/counter/index.d.ts.map +1 -0
  340. package/dist/components/counter/index.js +5 -0
  341. package/dist/components/counter/index.js.map +1 -0
  342. package/dist/components/cycle-calculator/index.js +1 -1
  343. package/dist/components/data-table/data-table.agent.d.ts.map +1 -1
  344. package/dist/components/data-table/index.js +31 -30
  345. package/dist/components/data-table/index.js.map +1 -1
  346. package/dist/components/data-table/toolbar.d.ts.map +1 -1
  347. package/dist/components/date-picker/date-picker.agent.d.ts.map +1 -1
  348. package/dist/components/date-picker/index.js +1 -1
  349. package/dist/components/date-range-picker/date-range-picker.agent.d.ts.map +1 -1
  350. package/dist/components/date-range-picker/index.js +1 -1
  351. package/dist/components/date-time-picker/date-time-picker.agent.d.ts.map +1 -1
  352. package/dist/components/date-time-picker/index.js +1 -1
  353. package/dist/components/dependent-selector/dependent-selector.agent.d.ts.map +1 -1
  354. package/dist/components/dependent-selector/index.js +1 -1
  355. package/dist/components/dialog/dialog.agent.d.ts.map +1 -1
  356. package/dist/components/dialog/index.js +1 -1
  357. package/dist/components/document-scanner/document-scanner.agent.d.ts.map +1 -1
  358. package/dist/components/document-scanner/index.js +1 -1
  359. package/dist/components/dropdown-menu/dropdown-menu.agent.d.ts.map +1 -1
  360. package/dist/components/dropdown-menu/index.js +1 -1
  361. package/dist/components/due-date-calculator/index.js +1 -1
  362. package/dist/components/email-input/index.js +1 -1
  363. package/dist/components/fetal-weight/index.js +1 -1
  364. package/dist/components/file-upload/file-upload.agent.d.ts.map +1 -1
  365. package/dist/components/file-upload/index.js +1 -1
  366. package/dist/components/fiscal-code-input/fiscal-code-input.agent.d.ts.map +1 -1
  367. package/dist/components/fiscal-code-input/index.js +1 -1
  368. package/dist/components/freemium-paywall/freemium-paywall.agent.d.ts.map +1 -1
  369. package/dist/components/freemium-paywall/freemium-paywall.d.ts +6 -0
  370. package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +1 -1
  371. package/dist/components/freemium-paywall/index.js +1 -1
  372. package/dist/components/gestational-age-calculator/index.js +1 -1
  373. package/dist/components/hcg-doubling/index.js +1 -1
  374. package/dist/components/header-settings/header-settings.agent.d.ts.map +1 -1
  375. package/dist/components/header-settings/index.js +1 -1
  376. package/dist/components/index.d.ts +2 -0
  377. package/dist/components/index.d.ts.map +1 -1
  378. package/dist/components/list/index.js +1 -1
  379. package/dist/components/list/list.agent.d.ts.map +1 -1
  380. package/dist/components/locale-picker/index.js +1 -1
  381. package/dist/components/locale-picker/locale-picker.agent.d.ts.map +1 -1
  382. package/dist/components/map-view/index.js +1 -1
  383. package/dist/components/map-view/map-view.agent.d.ts.map +1 -1
  384. package/dist/components/message-card/index.js +1 -1
  385. package/dist/components/message-card/message-card.agent.d.ts.map +1 -1
  386. package/dist/components/message-tray/index.js +1 -1
  387. package/dist/components/message-tray/message-tray.agent.d.ts.map +1 -1
  388. package/dist/components/multi-select/index.js +1 -1
  389. package/dist/components/multi-select/multi-select.agent.d.ts.map +1 -1
  390. package/dist/components/multi-select/multi-select.d.ts.map +1 -1
  391. package/dist/components/navigation-menu/index.js +1 -1
  392. package/dist/components/navigation-menu/navigation-menu.agent.d.ts.map +1 -1
  393. package/dist/components/notification-card/index.js +1 -1
  394. package/dist/components/notification-card/notification-card.agent.d.ts.map +1 -1
  395. package/dist/components/notification-tray/index.js +1 -1
  396. package/dist/components/notification-tray/notification-tray.agent.d.ts.map +1 -1
  397. package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
  398. package/dist/components/number-input/index.js +1 -1
  399. package/dist/components/number-input/number-input.agent.d.ts.map +1 -1
  400. package/dist/components/operator-hero/index.js +1 -1
  401. package/dist/components/operator-hero/operator-hero.agent.d.ts.map +1 -1
  402. package/dist/components/otp-input/index.js +1 -1
  403. package/dist/components/otp-input/otp-input.agent.d.ts.map +1 -1
  404. package/dist/components/pagination/index.js +1 -1
  405. package/dist/components/pagination/pagination.agent.d.ts.map +1 -1
  406. package/dist/components/password-input/index.js +1 -1
  407. package/dist/components/password-input/password-input.agent.d.ts.map +1 -1
  408. package/dist/components/patient-search/index.js +1 -1
  409. package/dist/components/patient-search/patient-search.agent.d.ts.map +1 -1
  410. package/dist/components/patient-summary-card/index.js +1 -1
  411. package/dist/components/patient-summary-card/patient-summary-card.agent.d.ts.map +1 -1
  412. package/dist/components/patient-table/cell-renderers/balance-badge-cell.d.ts +13 -0
  413. package/dist/components/patient-table/cell-renderers/balance-badge-cell.d.ts.map +1 -0
  414. package/dist/components/patient-table/cell-renderers/care-plan-status-cell.d.ts +43 -0
  415. package/dist/components/patient-table/cell-renderers/care-plan-status-cell.d.ts.map +1 -0
  416. package/dist/components/patient-table/cell-renderers/contact-cell.d.ts +45 -0
  417. package/dist/components/patient-table/cell-renderers/contact-cell.d.ts.map +1 -0
  418. package/dist/components/patient-table/cell-renderers/next-appointment-cell.d.ts +24 -0
  419. package/dist/components/patient-table/cell-renderers/next-appointment-cell.d.ts.map +1 -0
  420. package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts +26 -0
  421. package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts.map +1 -0
  422. package/dist/components/patient-table/columns.d.ts +102 -0
  423. package/dist/components/patient-table/columns.d.ts.map +1 -0
  424. package/dist/components/patient-table/index.d.ts +24 -0
  425. package/dist/components/patient-table/index.d.ts.map +1 -0
  426. package/dist/components/patient-table/index.js +13 -0
  427. package/dist/components/patient-table/index.js.map +1 -0
  428. package/dist/components/patient-table/patient-table.d.ts +138 -0
  429. package/dist/components/patient-table/patient-table.d.ts.map +1 -0
  430. package/dist/components/patient-table/types.d.ts +172 -0
  431. package/dist/components/patient-table/types.d.ts.map +1 -0
  432. package/dist/components/patient-table/use-responsive-columns.d.ts +109 -0
  433. package/dist/components/patient-table/use-responsive-columns.d.ts.map +1 -0
  434. package/dist/components/payment-card/index.js +1 -1
  435. package/dist/components/payment-form/index.js +1 -1
  436. package/dist/components/payment-form/payment-form.agent.d.ts.map +1 -1
  437. package/dist/components/pdf-viewer/index.js +1 -1
  438. package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +1 -1
  439. package/dist/components/periodontal-chart-card/index.js +1 -1
  440. package/dist/components/phone-input/index.js +1 -1
  441. package/dist/components/phone-input/phone-input.agent.d.ts.map +1 -1
  442. package/dist/components/popover/index.js +1 -1
  443. package/dist/components/popover/popover.agent.d.ts.map +1 -1
  444. package/dist/components/practice-results/index.js +1 -1
  445. package/dist/components/practice-results/practice-results.agent.d.ts.map +1 -1
  446. package/dist/components/pregnancy-dating/index.js +1 -1
  447. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  448. package/dist/components/privacy-lock/index.js +1 -1
  449. package/dist/components/privacy-lock/privacy-lock.agent.d.ts.map +1 -1
  450. package/dist/components/product-hub-tray/index.js +1 -1
  451. package/dist/components/product-hub-tray/product-hub-panel.agent.d.ts.map +1 -1
  452. package/dist/components/product-hub-tray/product-hub-tray.agent.d.ts.map +1 -1
  453. package/dist/components/progress/index.js +1 -1
  454. package/dist/components/public-footer/index.js +1 -1
  455. package/dist/components/public-footer/public-footer.agent.d.ts.map +1 -1
  456. package/dist/components/public-footer/public-footer.d.ts.map +1 -1
  457. package/dist/components/public-header/index.js +1 -1
  458. package/dist/components/public-header/public-header.agent.d.ts.map +1 -1
  459. package/dist/components/qr-code/index.js +1 -1
  460. package/dist/components/qr-code/qr-code.agent.d.ts.map +1 -1
  461. package/dist/components/radio-group/index.js +1 -1
  462. package/dist/components/recaptcha-widget/index.js +1 -1
  463. package/dist/components/recaptcha-widget/recaptcha-widget.agent.d.ts.map +1 -1
  464. package/dist/components/resizable/index.js +1 -1
  465. package/dist/components/resizable/resizable.agent.d.ts.map +1 -1
  466. package/dist/components/resizable/resizable.d.ts.map +1 -1
  467. package/dist/components/reviews-panel/index.js +1 -1
  468. package/dist/components/reviews-panel/reviews-panel.agent.d.ts.map +1 -1
  469. package/dist/components/rich-text-editor/index.js +1 -1
  470. package/dist/components/rich-text-editor/rich-text-editor.agent.d.ts.map +1 -1
  471. package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
  472. package/dist/components/search-bar/index.js +1 -1
  473. package/dist/components/search-bar/search-bar.agent.d.ts.map +1 -1
  474. package/dist/components/search-input/index.js +2 -2
  475. package/dist/components/search-input/search-input.agent.d.ts.map +1 -1
  476. package/dist/components/select/index.js +1 -1
  477. package/dist/components/select/select.agent.d.ts.map +1 -1
  478. package/dist/components/session-countdown/index.js +1 -1
  479. package/dist/components/sheet/index.js +1 -1
  480. package/dist/components/sheet/sheet.agent.d.ts.map +1 -1
  481. package/dist/components/sidebar/index.js +1 -1
  482. package/dist/components/sidebar/sidebar.agent.d.ts.map +1 -1
  483. package/dist/components/sidebar/sidebar.d.ts +7 -0
  484. package/dist/components/sidebar/sidebar.d.ts.map +1 -1
  485. package/dist/components/sign-document/index.js +1 -1
  486. package/dist/components/sign-document/sign-document.agent.d.ts.map +1 -1
  487. package/dist/components/signature-capture/index.js +1 -1
  488. package/dist/components/signature-capture/signature-capture.agent.d.ts.map +1 -1
  489. package/dist/components/slider/index.js +1 -1
  490. package/dist/components/slider/slider.agent.d.ts.map +1 -1
  491. package/dist/components/sparkline/index.js +1 -1
  492. package/dist/components/sparkline/sparkline.agent.d.ts.map +1 -1
  493. package/dist/components/stepper-accordion/index.js +1 -1
  494. package/dist/components/stepper-accordion/stepper-accordion.agent.d.ts.map +1 -1
  495. package/dist/components/stepper-progress/index.js +1 -1
  496. package/dist/components/stepper-progress/stepper-progress.agent.d.ts.map +1 -1
  497. package/dist/components/suggestion-chip/index.js +1 -1
  498. package/dist/components/suggestion-chip/suggestion-chip.agent.d.ts.map +1 -1
  499. package/dist/components/switch/index.js +1 -1
  500. package/dist/components/switch/switch.agent.d.ts.map +1 -1
  501. package/dist/components/tabs/index.js +1 -1
  502. package/dist/components/tabs/tabs.agent.d.ts.map +1 -1
  503. package/dist/components/tabs/tabs.d.ts.map +1 -1
  504. package/dist/components/task-card/index.js +1 -1
  505. package/dist/components/task-card/task-card.agent.d.ts.map +1 -1
  506. package/dist/components/task-tray/index.js +1 -1
  507. package/dist/components/task-tray/task-tray.agent.d.ts.map +1 -1
  508. package/dist/components/text-area/index.js +1 -1
  509. package/dist/components/text-area/text-area.agent.d.ts.map +1 -1
  510. package/dist/components/text-input/index.js +1 -1
  511. package/dist/components/text-input/text-input.agent.d.ts.map +1 -1
  512. package/dist/components/theme-toggle/index.js +1 -1
  513. package/dist/components/theme-toggle/theme-toggle.agent.d.ts.map +1 -1
  514. package/dist/components/time-picker/index.js +1 -1
  515. package/dist/components/time-picker/time-picker.agent.d.ts.map +1 -1
  516. package/dist/components/timeline/index.js +1 -1
  517. package/dist/components/timeline/timeline.agent.d.ts.map +1 -1
  518. package/dist/components/toast/index.js +1 -1
  519. package/dist/components/toast/toast.agent.d.ts.map +1 -1
  520. package/dist/components/toast/toast.d.ts.map +1 -1
  521. package/dist/components/tooth-scheme/index.js +1 -1
  522. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts.map +1 -1
  523. package/dist/components/transcript-panel/index.js +1 -1
  524. package/dist/components/transcript-panel/transcript-panel.agent.d.ts.map +1 -1
  525. package/dist/components/unit-converter/index.js +1 -1
  526. package/dist/components/unit-converter/unit-converter.agent.d.ts +4 -0
  527. package/dist/components/unit-converter/unit-converter.agent.d.ts.map +1 -0
  528. package/dist/components/unit-converter/unit-converter.d.ts +27 -0
  529. package/dist/components/unit-converter/unit-converter.d.ts.map +1 -1
  530. package/dist/components/warning-stack/index.js +1 -1
  531. package/dist/components/warning-stack/warning-stack.d.ts +9 -0
  532. package/dist/components/warning-stack/warning-stack.d.ts.map +1 -1
  533. package/dist/components/whatsapp-button/index.d.ts +1 -1
  534. package/dist/components/whatsapp-button/index.d.ts.map +1 -1
  535. package/dist/components/whatsapp-button/index.js +3 -2
  536. package/dist/components/whatsapp-button/whatsapp-button.d.ts +3 -0
  537. package/dist/components/whatsapp-button/whatsapp-button.d.ts.map +1 -1
  538. package/dist/components/workflow/index.js +1 -1
  539. package/dist/components/workflow/workflow.agent.d.ts.map +1 -1
  540. package/dist/i18n/locales/ar.d.ts +72 -0
  541. package/dist/i18n/locales/ar.d.ts.map +1 -1
  542. package/dist/i18n/locales/ar.js +73 -1
  543. package/dist/i18n/locales/ar.js.map +1 -1
  544. package/dist/i18n/locales/de.d.ts +72 -0
  545. package/dist/i18n/locales/de.d.ts.map +1 -1
  546. package/dist/i18n/locales/de.js +73 -1
  547. package/dist/i18n/locales/de.js.map +1 -1
  548. package/dist/i18n/locales/el.d.ts +72 -0
  549. package/dist/i18n/locales/el.d.ts.map +1 -1
  550. package/dist/i18n/locales/el.js +73 -1
  551. package/dist/i18n/locales/el.js.map +1 -1
  552. package/dist/i18n/locales/en.d.ts +90 -0
  553. package/dist/i18n/locales/en.d.ts.map +1 -1
  554. package/dist/i18n/locales/en.js +91 -1
  555. package/dist/i18n/locales/en.js.map +1 -1
  556. package/dist/i18n/locales/es.d.ts +72 -0
  557. package/dist/i18n/locales/es.d.ts.map +1 -1
  558. package/dist/i18n/locales/es.js +73 -1
  559. package/dist/i18n/locales/es.js.map +1 -1
  560. package/dist/i18n/locales/fr.d.ts +72 -0
  561. package/dist/i18n/locales/fr.d.ts.map +1 -1
  562. package/dist/i18n/locales/fr.js +73 -1
  563. package/dist/i18n/locales/fr.js.map +1 -1
  564. package/dist/i18n/locales/hi.d.ts +72 -0
  565. package/dist/i18n/locales/hi.d.ts.map +1 -1
  566. package/dist/i18n/locales/hi.js +73 -1
  567. package/dist/i18n/locales/hi.js.map +1 -1
  568. package/dist/i18n/locales/it.d.ts +72 -0
  569. package/dist/i18n/locales/it.d.ts.map +1 -1
  570. package/dist/i18n/locales/it.js +73 -1
  571. package/dist/i18n/locales/it.js.map +1 -1
  572. package/dist/i18n/locales/ja.d.ts +72 -0
  573. package/dist/i18n/locales/ja.d.ts.map +1 -1
  574. package/dist/i18n/locales/ja.js +73 -1
  575. package/dist/i18n/locales/ja.js.map +1 -1
  576. package/dist/i18n/locales/nl.d.ts +72 -0
  577. package/dist/i18n/locales/nl.d.ts.map +1 -1
  578. package/dist/i18n/locales/nl.js +73 -1
  579. package/dist/i18n/locales/nl.js.map +1 -1
  580. package/dist/i18n/locales/pl.d.ts +72 -0
  581. package/dist/i18n/locales/pl.d.ts.map +1 -1
  582. package/dist/i18n/locales/pl.js +73 -1
  583. package/dist/i18n/locales/pl.js.map +1 -1
  584. package/dist/i18n/locales/pt.d.ts +72 -0
  585. package/dist/i18n/locales/pt.d.ts.map +1 -1
  586. package/dist/i18n/locales/pt.js +73 -1
  587. package/dist/i18n/locales/pt.js.map +1 -1
  588. package/dist/i18n/locales/ro.d.ts +72 -0
  589. package/dist/i18n/locales/ro.d.ts.map +1 -1
  590. package/dist/i18n/locales/ro.js +73 -1
  591. package/dist/i18n/locales/ro.js.map +1 -1
  592. package/dist/i18n/locales/ru.d.ts +72 -0
  593. package/dist/i18n/locales/ru.d.ts.map +1 -1
  594. package/dist/i18n/locales/ru.js +73 -1
  595. package/dist/i18n/locales/ru.js.map +1 -1
  596. package/dist/i18n/locales/sq.d.ts +72 -0
  597. package/dist/i18n/locales/sq.d.ts.map +1 -1
  598. package/dist/i18n/locales/sq.js +73 -1
  599. package/dist/i18n/locales/sq.js.map +1 -1
  600. package/dist/i18n/locales/sv.d.ts +72 -0
  601. package/dist/i18n/locales/sv.d.ts.map +1 -1
  602. package/dist/i18n/locales/sv.js +73 -1
  603. package/dist/i18n/locales/sv.js.map +1 -1
  604. package/dist/i18n/locales/tr.d.ts +72 -0
  605. package/dist/i18n/locales/tr.d.ts.map +1 -1
  606. package/dist/i18n/locales/tr.js +73 -1
  607. package/dist/i18n/locales/tr.js.map +1 -1
  608. package/dist/i18n/locales/zh.d.ts +72 -0
  609. package/dist/i18n/locales/zh.d.ts.map +1 -1
  610. package/dist/i18n/locales/zh.js +73 -1
  611. package/dist/i18n/locales/zh.js.map +1 -1
  612. package/dist/index.js +688 -673
  613. package/dist/index.js.map +1 -1
  614. package/dist/locales/ar.json +73 -1
  615. package/dist/locales/de.json +73 -1
  616. package/dist/locales/el.json +73 -1
  617. package/dist/locales/en.json +73 -1
  618. package/dist/locales/es.json +73 -1
  619. package/dist/locales/fr.json +73 -1
  620. package/dist/locales/hi.json +73 -1
  621. package/dist/locales/it.json +73 -1
  622. package/dist/locales/ja.json +73 -1
  623. package/dist/locales/nl.json +73 -1
  624. package/dist/locales/pl.json +73 -1
  625. package/dist/locales/pt.json +73 -1
  626. package/dist/locales/ro.json +73 -1
  627. package/dist/locales/ru.json +73 -1
  628. package/dist/locales/sq.json +73 -1
  629. package/dist/locales/sv.json +73 -1
  630. package/dist/locales/tr.json +73 -1
  631. package/dist/locales/zh.json +73 -1
  632. package/dist/patterns/alia-assistant/index.js +1 -1
  633. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  634. package/dist/patterns/patient-shell/index.js +1 -1
  635. package/dist/tokens.css +3 -2
  636. package/package.json +14 -1
  637. package/dist/_chunks/accordion-9lJSMMsZ.js.map +0 -1
  638. package/dist/_chunks/address-autocomplete-CT-9AOli.js +0 -358
  639. package/dist/_chunks/address-autocomplete-CT-9AOli.js.map +0 -1
  640. package/dist/_chunks/agenda-tray-T-BumlGZ.js.map +0 -1
  641. package/dist/_chunks/ai-prompt-input-BwEACCPm.js.map +0 -1
  642. package/dist/_chunks/ai-tools-rail-CInA_1-E.js.map +0 -1
  643. package/dist/_chunks/appointment-tray-BMl89NPW.js.map +0 -1
  644. package/dist/_chunks/audio-recorder-DjXLP4aF.js.map +0 -1
  645. package/dist/_chunks/autocomplete-CcCFlVf-.js.map +0 -1
  646. package/dist/_chunks/bishop-score-CjsB9bM-.js +0 -185
  647. package/dist/_chunks/bishop-score-CjsB9bM-.js.map +0 -1
  648. package/dist/_chunks/bmi-calculator-n-823_1V.js +0 -258
  649. package/dist/_chunks/bmi-calculator-n-823_1V.js.map +0 -1
  650. package/dist/_chunks/booking-L8-YP8BJ.js.map +0 -1
  651. package/dist/_chunks/breadcrumb-OTbaY70e.js.map +0 -1
  652. package/dist/_chunks/calendar-oYWOCrnf.js.map +0 -1
  653. package/dist/_chunks/care-plan-card-BwVUyUBb.js.map +0 -1
  654. package/dist/_chunks/care-plan-entry-card-VzdQHcOL.js.map +0 -1
  655. package/dist/_chunks/chart-Cg3e9EH9.js.map +0 -1
  656. package/dist/_chunks/chat-container-ogB4OskO.js.map +0 -1
  657. package/dist/_chunks/chat-input-B5zjNEUN.js.map +0 -1
  658. package/dist/_chunks/checkbox-DRcOdmXv.js.map +0 -1
  659. package/dist/_chunks/collapsible-X3oaLPU3.js.map +0 -1
  660. package/dist/_chunks/color-picker-FXpItIaF.js.map +0 -1
  661. package/dist/_chunks/combobox-BC-DFx8G.js.map +0 -1
  662. package/dist/_chunks/command-palette-BiPAAno-.js.map +0 -1
  663. package/dist/_chunks/contact-profile-card-7BMB85T6.js.map +0 -1
  664. package/dist/_chunks/copy-field-CCq7j6Zc.js.map +0 -1
  665. package/dist/_chunks/date-range-picker-C5BWfH_T.js.map +0 -1
  666. package/dist/_chunks/date-time-picker-Ze1My59T.js.map +0 -1
  667. package/dist/_chunks/dependent-selector-DpzGtr_J.js.map +0 -1
  668. package/dist/_chunks/dialog-DMGnSelc.js.map +0 -1
  669. package/dist/_chunks/document-scanner-D2qehl3-.js.map +0 -1
  670. package/dist/_chunks/dropdown-menu-DwwPovMZ.js.map +0 -1
  671. package/dist/_chunks/editable-currency-cell-renderer-DHOspPee.js +0 -2409
  672. package/dist/_chunks/editable-currency-cell-renderer-DHOspPee.js.map +0 -1
  673. package/dist/_chunks/file-upload-BosbPDb1.js.map +0 -1
  674. package/dist/_chunks/fiscal-code-input-DPtqluVb.js.map +0 -1
  675. package/dist/_chunks/freemium-paywall-CkWjv3o6.js.map +0 -1
  676. package/dist/_chunks/header-settings-CNOqIhoW.js.map +0 -1
  677. package/dist/_chunks/list-BOwqwy03.js.map +0 -1
  678. package/dist/_chunks/locale-picker-C9JmBht3.js.map +0 -1
  679. package/dist/_chunks/map-view-Tb5VfK9Y.js.map +0 -1
  680. package/dist/_chunks/message-card.agent-4IeIgrnJ.js.map +0 -1
  681. package/dist/_chunks/message-tray-CVyJajVJ.js.map +0 -1
  682. package/dist/_chunks/multi-select-BcPylvHR.js.map +0 -1
  683. package/dist/_chunks/navigation-menu-C6lBYVv9.js.map +0 -1
  684. package/dist/_chunks/notification-card.agent-Rqt3ofk9.js.map +0 -1
  685. package/dist/_chunks/notification-tray-DlgenTEe.js.map +0 -1
  686. package/dist/_chunks/number-input-Dj5L3pXK.js.map +0 -1
  687. package/dist/_chunks/operator-hero-f_KaRhw5.js.map +0 -1
  688. package/dist/_chunks/otp-input-xQ4Ps5VY.js.map +0 -1
  689. package/dist/_chunks/pagination-DQOgnxxw.js.map +0 -1
  690. package/dist/_chunks/patient-search-DR9XUYRQ.js.map +0 -1
  691. package/dist/_chunks/patient-summary-card-hEmr4eTW.js.map +0 -1
  692. package/dist/_chunks/payment-form-nXocS_MX.js.map +0 -1
  693. package/dist/_chunks/pdf-viewer-GsfNqeeT.js.map +0 -1
  694. package/dist/_chunks/phone-input-DVXhNlIl.js.map +0 -1
  695. package/dist/_chunks/popover-DTbfAuR0.js.map +0 -1
  696. package/dist/_chunks/practice-results-DND2SAt7.js.map +0 -1
  697. package/dist/_chunks/privacy-lock-C7JyMf0y.js.map +0 -1
  698. package/dist/_chunks/product-hub-panel-CAXDFeGP.js.map +0 -1
  699. package/dist/_chunks/public-footer.agent-CfXuW1x6.js.map +0 -1
  700. package/dist/_chunks/qr-code-DNXhi6se.js.map +0 -1
  701. package/dist/_chunks/recaptcha-widget-BCNHsgqt.js.map +0 -1
  702. package/dist/_chunks/registry-nPAVE19X.js +0 -21
  703. package/dist/_chunks/registry-nPAVE19X.js.map +0 -1
  704. package/dist/_chunks/resizable-3vzqDlg6.js.map +0 -1
  705. package/dist/_chunks/reviews-panel-DBktKm7i.js.map +0 -1
  706. package/dist/_chunks/rich-text-editor-VawKN1FI.js.map +0 -1
  707. package/dist/_chunks/search-bar-SY2BcV2N.js.map +0 -1
  708. package/dist/_chunks/search-input.agent-CfZvViOd.js.map +0 -1
  709. package/dist/_chunks/select-CEtRcon5.js.map +0 -1
  710. package/dist/_chunks/sheet-taJer-Ha.js.map +0 -1
  711. package/dist/_chunks/sidebar-DaB4ulxH.js.map +0 -1
  712. package/dist/_chunks/sign-document-CdAiHiCh.js.map +0 -1
  713. package/dist/_chunks/signature-capture-COi0Uiqu.js.map +0 -1
  714. package/dist/_chunks/slider-BHWzXdjt.js.map +0 -1
  715. package/dist/_chunks/sparkline-DGhCSw8M.js.map +0 -1
  716. package/dist/_chunks/stepper-accordion.agent-C4quJ-MD.js.map +0 -1
  717. package/dist/_chunks/stepper-progress-DDjq5nei.js.map +0 -1
  718. package/dist/_chunks/switch-BJ6HD3Mn.js.map +0 -1
  719. package/dist/_chunks/tabs-BIQ0ew1T.js.map +0 -1
  720. package/dist/_chunks/task-card.agent-CUPKYd7w.js.map +0 -1
  721. package/dist/_chunks/task-tray-CAncV-QQ.js.map +0 -1
  722. package/dist/_chunks/text-area-BIx0tZ05.js.map +0 -1
  723. package/dist/_chunks/text-input-BaClJL8Y.js.map +0 -1
  724. package/dist/_chunks/theme-toggle-DETmSu_h.js.map +0 -1
  725. package/dist/_chunks/time-picker-B5umYwfv.js.map +0 -1
  726. package/dist/_chunks/timeline-DQa5Tyz4.js.map +0 -1
  727. package/dist/_chunks/tooth-scheme-BIx1O2aJ.js.map +0 -1
  728. package/dist/_chunks/transcript-panel-CLHmv83g.js.map +0 -1
  729. package/dist/_chunks/unit-converter-C1V3ACM9.js +0 -196
  730. package/dist/_chunks/unit-converter-C1V3ACM9.js.map +0 -1
  731. package/dist/_chunks/use-password-requirements-DsgduV1x.js.map +0 -1
  732. package/dist/_chunks/warning-stack-Cv4fr5zo.js +0 -220
  733. package/dist/_chunks/warning-stack-Cv4fr5zo.js.map +0 -1
  734. package/dist/_chunks/whatsapp-button-DUjlWGKf.js.map +0 -1
  735. package/dist/_chunks/workflow-map-JAZryZJr.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"session-countdown-LPnhTHjn.js","sources":["../../node_modules/lucide-react/dist/esm/icons/timer.js","../../src/components/session-countdown/session-countdown.agent.ts","../../src/components/session-countdown/session-countdown.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 [\"line\", { x1: \"10\", x2: \"14\", y1: \"2\", y2: \"2\", key: \"14vaq8\" }],\n [\"line\", { x1: \"12\", x2: \"15\", y1: \"14\", y2: \"11\", key: \"17fdiu\" }],\n [\"circle\", { cx: \"12\", cy: \"14\", r: \"8\", key: \"1e1u0o\" }]\n];\nconst Timer = createLucideIcon(\"timer\", __iconNode);\n\nexport { __iconNode, Timer as default };\n//# sourceMappingURL=timer.js.map\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — SessionCountdown. */\n/* */\n/* A live status surface that renders the remaining time of a check-in */\n/* session and escalates tone toward expiry. Pure presentation — it owns */\n/* no consumer-actionable state (the deadline lives with the consumer */\n/* via `remainingMs` / `expiresAt`, and the only interactive element is */\n/* the consumer-wired Restart button). So this adapter registers only */\n/* the canonical `data-component=\"session-countdown\"` DOM hook; the root */\n/* also exposes `data-tone` so a future MCP UI bridge can read the */\n/* running / warning / expired state without parsing the visible digits. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\n\nexport const sessionCountdownAgent: AgentAdapter = {\n id: 'session-countdown',\n capabilities: [],\n state: {},\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'session-countdown',\n description:\n 'Marks the element as a kit SessionCountdown banner. The root also emits `data-tone=\"running\" | \"warning\" | \"expired\"` (derived from the remaining time). The accessible remaining-time announcement is surfaced via the region\\'s aria-label and a nested polite live region.',\n },\n },\n};\n","import {\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { TriangleAlert, CircleX, Timer } from 'lucide-react';\nimport { Button } from '../button';\nimport { Progress } from '../progress';\nimport { LiveRegion } from '../live-region';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { sessionCountdownAgent } from './session-countdown.agent';\n\n/* ------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------ */\n\nconst SECOND_MS = 1000;\nconst MINUTE_MS = 60 * SECOND_MS;\nconst DEFAULT_TOTAL_MS = 15 * MINUTE_MS; // 900_000 — HTP-5118 check-in window\nconst DEFAULT_WARN_AT_MS = 2 * MINUTE_MS; // 120_000 — final 2 minutes\n\n/* ------------------------------------------------------------------ */\n/* CVA — public axis: size (sm | md | lg). The component renders the */\n/* banner as its sole presentation (the former `inline` variant was */\n/* removed — see breaking change note). */\n/* */\n/* `tone` (running | warning | expired) is DERIVED internally from the */\n/* remaining time and is NOT a consumer-set prop (see spec / synthesis */\n/* recommendedAdjustment). It still flows through the CVA recipe as an */\n/* internal variant key so the tone colours stay token-driven and */\n/* mirror Alert's info / warning / error surfaces. */\n/* ------------------------------------------------------------------ */\n\nconst countdownVariants = cva(\n [\n 'ds:break-words',\n 'ds:flex ds:w-full ds:flex-col',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-[length:var(--border-width-sm)]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:p-[var(--spacing-sm)] ds:gap-[var(--spacing-xs)]',\n md: 'ds:p-[var(--spacing-md)] ds:gap-[var(--spacing-sm)]',\n lg: 'ds:p-[var(--spacing-lg)] ds:gap-[var(--spacing-sm)]',\n },\n // Internal-only — derived from remaining time, never surfaced to Controls.\n tone: {\n running: [\n 'ds:border-[color:var(--info)]',\n 'ds:bg-[color-mix(in_srgb,var(--info)_10%,transparent)]',\n 'ds:text-[color:var(--info-foreground)]',\n ].join(' '),\n warning: [\n 'ds:border-[color:var(--warning)]',\n 'ds:bg-[color-mix(in_srgb,var(--warning)_10%,transparent)]',\n 'ds:text-[color:var(--warning-foreground)]',\n ].join(' '),\n expired: [\n 'ds:border-[color:var(--error)]',\n 'ds:bg-[color-mix(in_srgb,var(--error)_10%,transparent)]',\n 'ds:text-[color:var(--error-foreground)]',\n // The tonal Restart button inherits the error tint via the\n // established Alert child-selector trick — contrast-validated.\n 'ds:[&_[data-intent=tonal]]:bg-[color:var(--error-foreground)]',\n 'ds:[&_[data-intent=tonal]]:text-[color:var(--background)]',\n ].join(' '),\n },\n },\n defaultVariants: {\n size: 'md',\n tone: 'running',\n },\n },\n);\n\nconst ICON_SIZE_CLASS = {\n sm: 'ds:size-4',\n md: 'ds:size-5',\n lg: 'ds:size-6',\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Derived tone */\n/* ------------------------------------------------------------------ */\n\ntype Tone = 'running' | 'warning' | 'expired';\n\nfunction deriveTone(remaining: number, warnAtMs: number): Tone {\n if (remaining <= 0) return 'expired';\n if (remaining <= warnAtMs) return 'warning';\n return 'running';\n}\n\n/* ------------------------------------------------------------------ */\n/* Announcement bucketing */\n/* */\n/* The visual digits update every second, but AT must hear only coarse */\n/* buckets to avoid flooding: minute boundaries while remaining > 60s, */\n/* then once at 30s and 10s, then expiry. We key the polite */\n/* announcement on the bucket — NOT on the per-second value — so NVDA */\n/* / VoiceOver never interrupt themselves continuously. */\n/* */\n/* The returned value is the count spoken to AT, in SECONDS, and is */\n/* FLOORED to the threshold the user has actually crossed into so the */\n/* announcement never claims MORE time than truly remains (a deadline */\n/* countdown must round down, never up). e.g. at 45s the bucket is 30 */\n/* — \"30 seconds remaining\" — never \"60 seconds\". Above 60s we floor */\n/* to whole minutes (4m37s → 4 minutes), so it re-keys on each minute */\n/* boundary while staying truthful. */\n/* ------------------------------------------------------------------ */\n\nfunction announcementBucket(remaining: number): number {\n if (remaining <= 0) return 0;\n if (remaining <= 30 * SECOND_MS) return 10;\n if (remaining <= 60 * SECOND_MS) return 30;\n // Coarse minute bucket above 60s: 60, 120, 180 … (in seconds), floored\n // so the spoken minute count is always <= the true remaining time.\n return Math.floor(remaining / MINUTE_MS) * 60;\n}\n\n/* ------------------------------------------------------------------ */\n/* Time math */\n/* ------------------------------------------------------------------ */\n\nfunction toEpoch(value: number | string | Date): number {\n if (value instanceof Date) return value.getTime();\n if (typeof value === 'number') return value;\n return new Date(value).getTime();\n}\n\n/**\n * Internal-tick hook for the `expiresAt` path. Returns the live remaining\n * milliseconds (clamped >= 0) and re-renders every `tickMs` until expiry.\n * When `controlledRemaining` is supplied it is the source of truth and the\n * timer never starts — the deterministic path for stories / tests.\n */\nfunction useRemainingMs(\n controlledRemaining: number | undefined,\n expiresAtEpoch: number | undefined,\n tickMs: number,\n): number {\n const [now, setNow] = useState<number>(() => Date.now());\n\n const isControlled = controlledRemaining !== undefined;\n\n useEffect(() => {\n if (isControlled || expiresAtEpoch === undefined) return;\n // Re-sync on mount so a late mount / clock-skew reads correctly.\n setNow(Date.now());\n if (expiresAtEpoch - Date.now() <= 0) return; // already expired — no timer\n const id = window.setInterval(\n () => {\n const current = Date.now();\n setNow(current);\n if (expiresAtEpoch - current <= 0) {\n window.clearInterval(id);\n }\n },\n Math.max(1, tickMs),\n );\n return () => window.clearInterval(id);\n }, [isControlled, expiresAtEpoch, tickMs]);\n\n if (isControlled) return Math.max(0, controlledRemaining);\n if (expiresAtEpoch === undefined) return 0;\n return Math.max(0, expiresAtEpoch - now);\n}\n\n/* ------------------------------------------------------------------ */\n/* Props */\n/* ------------------------------------------------------------------ */\n\ntype CountdownVariantProps = Pick<\n VariantProps<typeof countdownVariants>,\n 'size'\n>;\n\nexport interface SessionCountdownProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'role'>, CountdownVariantProps {\n /** Controlled remaining milliseconds. Source of truth; no internal tick. */\n remainingMs?: number;\n /** Absolute deadline (ms-epoch, ISO string, or Date). Ticks internally. */\n expiresAt?: number | string | Date;\n /** Full session duration in ms — progress denominator. Default 900000. */\n totalMs?: number;\n /** Remaining threshold (ms) at/below which tone escalates to warning. */\n warnAtMs?: number;\n /** Type / padding scale. Default `md`. */\n size?: 'sm' | 'md' | 'lg';\n /** Determinate Progress bar of elapsed fraction. */\n showProgress?: boolean;\n /** Fired exactly once when remaining crosses to 0. Idempotent. */\n onExpire?: () => void;\n /** Restart CTA handler (expired banner). Omit → no button rendered. */\n onRestart?: () => void;\n /** Restart in flight — disables + spins the Restart button. */\n restarting?: boolean;\n /** Internal tick cadence (ms) for the `expiresAt` path. Default 1000. */\n tickMs?: number;\n /** Locale override for number formatting. Falls back to i18n.language. */\n locale?: string;\n /** Override the accessible name of the timer region. */\n label?: string;\n /** Merged onto the outermost element. CVA-composed, never inline style. */\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* SessionCountdown */\n/* ------------------------------------------------------------------ */\n\nexport const SessionCountdown = forwardRef<\n HTMLDivElement,\n SessionCountdownProps\n>(\n (\n {\n remainingMs,\n expiresAt,\n totalMs = DEFAULT_TOTAL_MS,\n warnAtMs = DEFAULT_WARN_AT_MS,\n size = 'md',\n showProgress = false,\n onExpire,\n onRestart,\n restarting = false,\n tickMs = 1000,\n locale: localeProp,\n label,\n className,\n id,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const locale = localeProp ?? i18n.language ?? 'en';\n\n // DEV warning when both controlled + deadline are passed; remainingMs wins.\n useEffect(() => {\n if (\n import.meta.env.DEV &&\n remainingMs !== undefined &&\n expiresAt !== undefined\n ) {\n console.warn(\n 'SessionCountdown: both `remainingMs` and `expiresAt` provided; `remainingMs` wins and the deadline is ignored.',\n );\n }\n }, [remainingMs, expiresAt]);\n\n const expiresAtEpoch = useMemo(\n () =>\n remainingMs === undefined && expiresAt !== undefined\n ? toEpoch(expiresAt)\n : undefined,\n [remainingMs, expiresAt],\n );\n\n const remaining = useRemainingMs(remainingMs, expiresAtEpoch, tickMs);\n const tone = deriveTone(remaining, warnAtMs);\n const isExpired = tone === 'expired';\n\n /* ── onExpire — fire exactly once via a ref guard ─────────────── */\n const expireFiredRef = useRef(false);\n useEffect(() => {\n if (remaining <= 0 && !expireFiredRef.current) {\n expireFiredRef.current = true;\n onExpire?.();\n }\n // Allow a fresh expiry if the timer is restarted (remaining climbs > 0).\n if (remaining > 0 && expireFiredRef.current) {\n expireFiredRef.current = false;\n }\n }, [remaining, onExpire]);\n\n /* ── Number formatting (Intl, no deps) ────────────────────────── */\n const nf = useMemo(\n () => new Intl.NumberFormat(locale, { maximumFractionDigits: 0 }),\n [locale],\n );\n const totalSeconds = Math.ceil(remaining / SECOND_MS);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n\n // Visible compact time string. Under 60s we drop the minutes segment.\n const timeText =\n minutes > 0\n ? t('sessionCountdown.timeMinutesSeconds', {\n minutes: nf.format(minutes),\n seconds: nf.format(seconds),\n })\n : t('sessionCountdown.timeSecondsOnly', {\n seconds: nf.format(seconds),\n });\n\n /* ── Coarse announcement (decoupled from the per-second tick) ─── */\n const bucket = announcementBucket(remaining);\n const announcement = useMemo(() => {\n if (bucket <= 0) {\n return t('sessionCountdown.expiredAnnouncement');\n }\n // Sub-minute buckets (30, 10) speak seconds; whole-minute buckets\n // (60, 120, …) speak minutes. The bucket is already floored so the\n // spoken count never exceeds the true remaining time.\n if (bucket < 60) {\n return t('sessionCountdown.secondsRemaining', { count: bucket });\n }\n return t('sessionCountdown.minutesRemaining', { count: bucket / 60 });\n }, [bucket, t]);\n\n // Clean, standalone expiry announcement — surfaced verbatim (NOT folded\n // into the ariaLabel template, which would double-interpolate into\n // \"Session expires in Session expired.\").\n const expiredAnnouncement = t('sessionCountdown.expiredAnnouncement');\n\n // Accessible name for the region:\n // - running / warning → the terse ariaLabel template (\"Session expires\n // in 5 minutes remaining\"), refreshed only when the bucket changes.\n // - expired → no aria-label; the root becomes role=\"alert\" and takes its\n // accessible name from the real `expiredAnnouncement` text node inside\n // it, so screen readers that announce a live region's TEXT (not its\n // aria-label) still voice the expiry. A `label` override wins in all\n // states.\n const regionLabel =\n label ??\n (isExpired\n ? undefined\n : t('sessionCountdown.ariaLabel', { time: announcement }));\n\n const composedClass = countdownVariants({\n size,\n tone,\n className,\n });\n\n // role escalation modelled on Alert: timer while running / warning,\n // alert (implicitly an assertive live region) on expiry. The root does\n // NOT carry `aria-live` while running — the per-second visual value is\n // aria-hidden and the coarse running announcements come from the nested\n // polite LiveRegion. On expiry the root's `role=\"alert\"` carries a real\n // (non-aria-hidden) text node with `expiredAnnouncement`, so the message\n // is announced via live-region TEXT rather than an aria-label-only name\n // — reliable across NVDA / VoiceOver — and exactly once (the text does\n // not change on later ticks). The nested polite region is emptied on\n // expiry so the two regions never double-announce.\n const role = isExpired ? 'alert' : 'timer';\n\n useAgentRegistration(sessionCountdownAgent, null, id);\n\n /* ── banner ───────────────────────────────────────────────────── */\n const Icon = isExpired\n ? CircleX\n : tone === 'warning'\n ? TriangleAlert\n : Timer;\n const elapsed = Math.min(totalMs, Math.max(0, totalMs - remaining));\n\n const messageKey = isExpired\n ? 'sessionCountdown.expired'\n : tone === 'warning'\n ? 'sessionCountdown.warning'\n : 'sessionCountdown.remainingBanner';\n const message = t(messageKey, { time: timeText });\n\n return (\n <div\n ref={ref}\n id={id}\n role={role}\n aria-label={regionLabel}\n data-component=\"session-countdown\"\n data-tone={tone}\n className={composedClass}\n {...rest}\n >\n {/* On expiry the root is role=\"alert\"; this real (non-aria-hidden)\n sr-only text node gives the alert its announced content and\n accessible name (the visible banner sentence stays aria-hidden so\n it is not read twice). It appears once, on the expiry render, so\n the message is voiced exactly once and stays quiet on later ticks. */}\n {isExpired ? (\n <span className=\"ds:sr-only\">{expiredAnnouncement}</span>\n ) : null}\n <div className=\"ds:flex ds:w-full ds:items-center ds:gap-[var(--spacing-sm)]\">\n <span className={`ds:shrink-0 ${ICON_SIZE_CLASS[size]}`}>\n <Icon aria-hidden=\"true\" className=\"ds:size-full\" />\n </span>\n <p\n className={[\n 'ds:min-w-0 ds:flex-1',\n size === 'lg' ? 'type-body' : 'type-body-sm',\n ].join(' ')}\n aria-hidden=\"true\"\n >\n {message}\n </p>\n {isExpired && onRestart ? (\n <Button\n type=\"button\"\n intent=\"tonal\"\n size={size === 'lg' ? 'lg' : 'md'}\n loading={restarting}\n disabled={restarting}\n onClick={onRestart}\n className=\"ds:shrink-0\"\n >\n {t('sessionCountdown.restart')}\n </Button>\n ) : null}\n </div>\n\n {showProgress && !isExpired ? (\n // Elapsed fraction flows through the existing Progress API\n // (value/max) — never a hand-rolled inline-width bar. The bar\n // is aria-hidden: the timer region already conveys remaining\n // time, so a second progressbar would double-announce.\n <div aria-hidden=\"true\" className=\"ds:w-full\">\n <Progress\n value={elapsed}\n max={totalMs}\n shape=\"bar\"\n size={size}\n ariaLabel={t('sessionCountdown.progressLabel')}\n />\n </div>\n ) : null}\n\n {/* Coarse running announcement, keyed on the bucket. Polite\n (role=\"status\"). Suppressed on expiry — the root alert above\n carries the expiry message, so the two never double-announce. */}\n <LiveRegion politeness=\"polite\" atomic>\n {isExpired ? '' : announcement}\n </LiveRegion>\n </div>\n );\n },\n);\n\nSessionCountdown.displayName = 'SessionCountdown';\n"],"names":["__iconNode","Timer","createLucideIcon","sessionCountdownAgent","SECOND_MS","MINUTE_MS","DEFAULT_TOTAL_MS","DEFAULT_WARN_AT_MS","countdownVariants","cva","ICON_SIZE_CLASS","deriveTone","remaining","warnAtMs","announcementBucket","toEpoch","value","useRemainingMs","controlledRemaining","expiresAtEpoch","tickMs","now","setNow","useState","isControlled","useEffect","id","current","SessionCountdown","forwardRef","remainingMs","expiresAt","totalMs","size","showProgress","onExpire","onRestart","restarting","localeProp","label","className","rest","ref","t","i18n","useTranslation","locale","useMemo","tone","isExpired","expireFiredRef","useRef","nf","totalSeconds","minutes","seconds","timeText","bucket","announcement","expiredAnnouncement","regionLabel","composedClass","role","useAgentRegistration","Icon","CircleX","TriangleAlert","elapsed","message","jsxs","jsx","Button","Progress","LiveRegion"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"session-countdown-X1Ki6i0M.js","sources":["../../node_modules/lucide-react/dist/esm/icons/timer.js","../../src/components/session-countdown/session-countdown.agent.ts","../../src/components/session-countdown/session-countdown.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 [\"line\", { x1: \"10\", x2: \"14\", y1: \"2\", y2: \"2\", key: \"14vaq8\" }],\n [\"line\", { x1: \"12\", x2: \"15\", y1: \"14\", y2: \"11\", key: \"17fdiu\" }],\n [\"circle\", { cx: \"12\", cy: \"14\", r: \"8\", key: \"1e1u0o\" }]\n];\nconst Timer = createLucideIcon(\"timer\", __iconNode);\n\nexport { __iconNode, Timer as default };\n//# sourceMappingURL=timer.js.map\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — SessionCountdown. */\n/* */\n/* A live status surface that renders the remaining time of a check-in */\n/* session and escalates tone toward expiry. Pure presentation — it owns */\n/* no consumer-actionable state (the deadline lives with the consumer */\n/* via `remainingMs` / `expiresAt`, and the only interactive element is */\n/* the consumer-wired Restart button). So this adapter registers only */\n/* the canonical `data-component=\"session-countdown\"` DOM hook; the root */\n/* also exposes `data-tone` so a future MCP UI bridge can read the */\n/* running / warning / expired state without parsing the visible digits. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\n\nexport const sessionCountdownAgent: AgentAdapter = {\n id: 'session-countdown',\n capabilities: [],\n state: {},\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'session-countdown',\n description:\n 'Marks the element as a kit SessionCountdown banner. The root also emits `data-tone=\"running\" | \"warning\" | \"expired\"` (derived from the remaining time). The accessible remaining-time announcement is surfaced via the region\\'s aria-label and a nested polite live region.',\n },\n },\n};\n","import {\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { TriangleAlert, CircleX, Timer } from 'lucide-react';\nimport { Button } from '../button';\nimport { Progress } from '../progress';\nimport { LiveRegion } from '../live-region';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { sessionCountdownAgent } from './session-countdown.agent';\n\n/* ------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------ */\n\nconst SECOND_MS = 1000;\nconst MINUTE_MS = 60 * SECOND_MS;\nconst DEFAULT_TOTAL_MS = 15 * MINUTE_MS; // 900_000 — HTP-5118 check-in window\nconst DEFAULT_WARN_AT_MS = 2 * MINUTE_MS; // 120_000 — final 2 minutes\n\n/* ------------------------------------------------------------------ */\n/* CVA — public axis: size (sm | md | lg). The component renders the */\n/* banner as its sole presentation (the former `inline` variant was */\n/* removed — see breaking change note). */\n/* */\n/* `tone` (running | warning | expired) is DERIVED internally from the */\n/* remaining time and is NOT a consumer-set prop (see spec / synthesis */\n/* recommendedAdjustment). It still flows through the CVA recipe as an */\n/* internal variant key so the tone colours stay token-driven and */\n/* mirror Alert's info / warning / error surfaces. */\n/* ------------------------------------------------------------------ */\n\nconst countdownVariants = cva(\n [\n 'ds:break-words',\n 'ds:flex ds:w-full ds:flex-col',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-[length:var(--border-width-sm)]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:p-[var(--spacing-sm)] ds:gap-[var(--spacing-xs)]',\n md: 'ds:p-[var(--spacing-md)] ds:gap-[var(--spacing-sm)]',\n lg: 'ds:p-[var(--spacing-lg)] ds:gap-[var(--spacing-sm)]',\n },\n // Internal-only — derived from remaining time, never surfaced to Controls.\n tone: {\n running: [\n 'ds:border-[color:var(--info)]',\n 'ds:bg-[color-mix(in_srgb,var(--info)_10%,transparent)]',\n 'ds:text-[color:var(--info-foreground)]',\n ].join(' '),\n warning: [\n 'ds:border-[color:var(--warning)]',\n 'ds:bg-[color-mix(in_srgb,var(--warning)_10%,transparent)]',\n 'ds:text-[color:var(--warning-foreground)]',\n ].join(' '),\n expired: [\n 'ds:border-[color:var(--error)]',\n 'ds:bg-[color-mix(in_srgb,var(--error)_10%,transparent)]',\n 'ds:text-[color:var(--error-foreground)]',\n // The tonal Restart button inherits the error tint via the\n // established Alert child-selector trick — contrast-validated.\n 'ds:[&_[data-intent=tonal]]:bg-[color:var(--error-foreground)]',\n 'ds:[&_[data-intent=tonal]]:text-[color:var(--background)]',\n ].join(' '),\n },\n },\n defaultVariants: {\n size: 'md',\n tone: 'running',\n },\n },\n);\n\nconst ICON_SIZE_CLASS = {\n sm: 'ds:size-4',\n md: 'ds:size-5',\n lg: 'ds:size-6',\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Derived tone */\n/* ------------------------------------------------------------------ */\n\ntype Tone = 'running' | 'warning' | 'expired';\n\nfunction deriveTone(remaining: number, warnAtMs: number): Tone {\n if (remaining <= 0) return 'expired';\n if (remaining <= warnAtMs) return 'warning';\n return 'running';\n}\n\n/* ------------------------------------------------------------------ */\n/* Announcement bucketing */\n/* */\n/* The visual digits update every second, but AT must hear only coarse */\n/* buckets to avoid flooding: minute boundaries while remaining > 60s, */\n/* then once at 30s and 10s, then expiry. We key the polite */\n/* announcement on the bucket — NOT on the per-second value — so NVDA */\n/* / VoiceOver never interrupt themselves continuously. */\n/* */\n/* The returned value is the count spoken to AT, in SECONDS, and is */\n/* FLOORED to the threshold the user has actually crossed into so the */\n/* announcement never claims MORE time than truly remains (a deadline */\n/* countdown must round down, never up). e.g. at 45s the bucket is 30 */\n/* — \"30 seconds remaining\" — never \"60 seconds\". Above 60s we floor */\n/* to whole minutes (4m37s → 4 minutes), so it re-keys on each minute */\n/* boundary while staying truthful. */\n/* ------------------------------------------------------------------ */\n\nfunction announcementBucket(remaining: number): number {\n if (remaining <= 0) return 0;\n if (remaining <= 30 * SECOND_MS) return 10;\n if (remaining <= 60 * SECOND_MS) return 30;\n // Coarse minute bucket above 60s: 60, 120, 180 … (in seconds), floored\n // so the spoken minute count is always <= the true remaining time.\n return Math.floor(remaining / MINUTE_MS) * 60;\n}\n\n/* ------------------------------------------------------------------ */\n/* Time math */\n/* ------------------------------------------------------------------ */\n\nfunction toEpoch(value: number | string | Date): number {\n if (value instanceof Date) return value.getTime();\n if (typeof value === 'number') return value;\n return new Date(value).getTime();\n}\n\n/**\n * Internal-tick hook for the `expiresAt` path. Returns the live remaining\n * milliseconds (clamped >= 0) and re-renders every `tickMs` until expiry.\n * When `controlledRemaining` is supplied it is the source of truth and the\n * timer never starts — the deterministic path for stories / tests.\n */\nfunction useRemainingMs(\n controlledRemaining: number | undefined,\n expiresAtEpoch: number | undefined,\n tickMs: number,\n): number {\n const [now, setNow] = useState<number>(() => Date.now());\n\n const isControlled = controlledRemaining !== undefined;\n\n useEffect(() => {\n if (isControlled || expiresAtEpoch === undefined) return;\n // Re-sync on mount so a late mount / clock-skew reads correctly.\n setNow(Date.now());\n if (expiresAtEpoch - Date.now() <= 0) return; // already expired — no timer\n const id = window.setInterval(\n () => {\n const current = Date.now();\n setNow(current);\n if (expiresAtEpoch - current <= 0) {\n window.clearInterval(id);\n }\n },\n Math.max(1, tickMs),\n );\n return () => window.clearInterval(id);\n }, [isControlled, expiresAtEpoch, tickMs]);\n\n if (isControlled) return Math.max(0, controlledRemaining);\n if (expiresAtEpoch === undefined) return 0;\n return Math.max(0, expiresAtEpoch - now);\n}\n\n/* ------------------------------------------------------------------ */\n/* Props */\n/* ------------------------------------------------------------------ */\n\ntype CountdownVariantProps = Pick<\n VariantProps<typeof countdownVariants>,\n 'size'\n>;\n\nexport interface SessionCountdownProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'role'>, CountdownVariantProps {\n /** Controlled remaining milliseconds. Source of truth; no internal tick. */\n remainingMs?: number;\n /** Absolute deadline (ms-epoch, ISO string, or Date). Ticks internally. */\n expiresAt?: number | string | Date;\n /** Full session duration in ms — progress denominator. Default 900000. */\n totalMs?: number;\n /** Remaining threshold (ms) at/below which tone escalates to warning. */\n warnAtMs?: number;\n /** Type / padding scale. Default `md`. */\n size?: 'sm' | 'md' | 'lg';\n /** Determinate Progress bar of elapsed fraction. */\n showProgress?: boolean;\n /** Fired exactly once when remaining crosses to 0. Idempotent. */\n onExpire?: () => void;\n /** Restart CTA handler (expired banner). Omit → no button rendered. */\n onRestart?: () => void;\n /** Restart in flight — disables + spins the Restart button. */\n restarting?: boolean;\n /** Internal tick cadence (ms) for the `expiresAt` path. Default 1000. */\n tickMs?: number;\n /** Locale override for number formatting. Falls back to i18n.language. */\n locale?: string;\n /** Override the accessible name of the timer region. */\n label?: string;\n /** Merged onto the outermost element. CVA-composed, never inline style. */\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* SessionCountdown */\n/* ------------------------------------------------------------------ */\n\nexport const SessionCountdown = forwardRef<\n HTMLDivElement,\n SessionCountdownProps\n>(\n (\n {\n remainingMs,\n expiresAt,\n totalMs = DEFAULT_TOTAL_MS,\n warnAtMs = DEFAULT_WARN_AT_MS,\n size = 'md',\n showProgress = false,\n onExpire,\n onRestart,\n restarting = false,\n tickMs = 1000,\n locale: localeProp,\n label,\n className,\n id,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const locale = localeProp ?? i18n.language ?? 'en';\n\n // DEV warning when both controlled + deadline are passed; remainingMs wins.\n useEffect(() => {\n if (\n import.meta.env.DEV &&\n remainingMs !== undefined &&\n expiresAt !== undefined\n ) {\n console.warn(\n 'SessionCountdown: both `remainingMs` and `expiresAt` provided; `remainingMs` wins and the deadline is ignored.',\n );\n }\n }, [remainingMs, expiresAt]);\n\n const expiresAtEpoch = useMemo(\n () =>\n remainingMs === undefined && expiresAt !== undefined\n ? toEpoch(expiresAt)\n : undefined,\n [remainingMs, expiresAt],\n );\n\n const remaining = useRemainingMs(remainingMs, expiresAtEpoch, tickMs);\n const tone = deriveTone(remaining, warnAtMs);\n const isExpired = tone === 'expired';\n\n /* ── onExpire — fire exactly once via a ref guard ─────────────── */\n const expireFiredRef = useRef(false);\n useEffect(() => {\n if (remaining <= 0 && !expireFiredRef.current) {\n expireFiredRef.current = true;\n onExpire?.();\n }\n // Allow a fresh expiry if the timer is restarted (remaining climbs > 0).\n if (remaining > 0 && expireFiredRef.current) {\n expireFiredRef.current = false;\n }\n }, [remaining, onExpire]);\n\n /* ── Number formatting (Intl, no deps) ────────────────────────── */\n const nf = useMemo(\n () => new Intl.NumberFormat(locale, { maximumFractionDigits: 0 }),\n [locale],\n );\n const totalSeconds = Math.ceil(remaining / SECOND_MS);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n\n // Visible compact time string. Under 60s we drop the minutes segment.\n const timeText =\n minutes > 0\n ? t('sessionCountdown.timeMinutesSeconds', {\n minutes: nf.format(minutes),\n seconds: nf.format(seconds),\n })\n : t('sessionCountdown.timeSecondsOnly', {\n seconds: nf.format(seconds),\n });\n\n /* ── Coarse announcement (decoupled from the per-second tick) ─── */\n const bucket = announcementBucket(remaining);\n const announcement = useMemo(() => {\n if (bucket <= 0) {\n return t('sessionCountdown.expiredAnnouncement');\n }\n // Sub-minute buckets (30, 10) speak seconds; whole-minute buckets\n // (60, 120, …) speak minutes. The bucket is already floored so the\n // spoken count never exceeds the true remaining time.\n if (bucket < 60) {\n return t('sessionCountdown.secondsRemaining', { count: bucket });\n }\n return t('sessionCountdown.minutesRemaining', { count: bucket / 60 });\n }, [bucket, t]);\n\n // Clean, standalone expiry announcement — surfaced verbatim (NOT folded\n // into the ariaLabel template, which would double-interpolate into\n // \"Session expires in Session expired.\").\n const expiredAnnouncement = t('sessionCountdown.expiredAnnouncement');\n\n // Accessible name for the region:\n // - running / warning → the terse ariaLabel template (\"Session expires\n // in 5 minutes remaining\"), refreshed only when the bucket changes.\n // - expired → no aria-label; the root becomes role=\"alert\" and takes its\n // accessible name from the real `expiredAnnouncement` text node inside\n // it, so screen readers that announce a live region's TEXT (not its\n // aria-label) still voice the expiry. A `label` override wins in all\n // states.\n const regionLabel =\n label ??\n (isExpired\n ? undefined\n : t('sessionCountdown.ariaLabel', { time: announcement }));\n\n const composedClass = countdownVariants({\n size,\n tone,\n className,\n });\n\n // role escalation modelled on Alert: timer while running / warning,\n // alert (implicitly an assertive live region) on expiry. The root does\n // NOT carry `aria-live` while running — the per-second visual value is\n // aria-hidden and the coarse running announcements come from the nested\n // polite LiveRegion. On expiry the root's `role=\"alert\"` carries a real\n // (non-aria-hidden) text node with `expiredAnnouncement`, so the message\n // is announced via live-region TEXT rather than an aria-label-only name\n // — reliable across NVDA / VoiceOver — and exactly once (the text does\n // not change on later ticks). The nested polite region is emptied on\n // expiry so the two regions never double-announce.\n const role = isExpired ? 'alert' : 'timer';\n\n useAgentRegistration(sessionCountdownAgent, null, id);\n\n /* ── banner ───────────────────────────────────────────────────── */\n const Icon = isExpired\n ? CircleX\n : tone === 'warning'\n ? TriangleAlert\n : Timer;\n const elapsed = Math.min(totalMs, Math.max(0, totalMs - remaining));\n\n const messageKey = isExpired\n ? 'sessionCountdown.expired'\n : tone === 'warning'\n ? 'sessionCountdown.warning'\n : 'sessionCountdown.remainingBanner';\n const message = t(messageKey, { time: timeText });\n\n return (\n <div\n ref={ref}\n id={id}\n role={role}\n aria-label={regionLabel}\n data-component=\"session-countdown\"\n data-tone={tone}\n className={composedClass}\n {...rest}\n >\n {/* On expiry the root is role=\"alert\"; this real (non-aria-hidden)\n sr-only text node gives the alert its announced content and\n accessible name (the visible banner sentence stays aria-hidden so\n it is not read twice). It appears once, on the expiry render, so\n the message is voiced exactly once and stays quiet on later ticks. */}\n {isExpired ? (\n <span className=\"ds:sr-only\">{expiredAnnouncement}</span>\n ) : null}\n <div className=\"ds:flex ds:w-full ds:items-center ds:gap-[var(--spacing-sm)]\">\n <span className={`ds:shrink-0 ${ICON_SIZE_CLASS[size]}`}>\n <Icon aria-hidden=\"true\" className=\"ds:size-full\" />\n </span>\n <p\n className={[\n 'ds:min-w-0 ds:flex-1',\n size === 'lg' ? 'type-body' : 'type-body-sm',\n ].join(' ')}\n aria-hidden=\"true\"\n >\n {message}\n </p>\n {isExpired && onRestart ? (\n <Button\n type=\"button\"\n intent=\"tonal\"\n size={size === 'lg' ? 'lg' : 'md'}\n loading={restarting}\n disabled={restarting}\n onClick={onRestart}\n className=\"ds:shrink-0\"\n >\n {t('sessionCountdown.restart')}\n </Button>\n ) : null}\n </div>\n\n {showProgress && !isExpired ? (\n // Elapsed fraction flows through the existing Progress API\n // (value/max) — never a hand-rolled inline-width bar. The bar\n // is aria-hidden: the timer region already conveys remaining\n // time, so a second progressbar would double-announce.\n <div aria-hidden=\"true\" className=\"ds:w-full\">\n <Progress\n value={elapsed}\n max={totalMs}\n shape=\"bar\"\n size={size}\n ariaLabel={t('sessionCountdown.progressLabel')}\n />\n </div>\n ) : null}\n\n {/* Coarse running announcement, keyed on the bucket. Polite\n (role=\"status\"). Suppressed on expiry — the root alert above\n carries the expiry message, so the two never double-announce. */}\n <LiveRegion politeness=\"polite\" atomic>\n {isExpired ? '' : announcement}\n </LiveRegion>\n </div>\n );\n },\n);\n\nSessionCountdown.displayName = 'SessionCountdown';\n"],"names":["__iconNode","Timer","createLucideIcon","sessionCountdownAgent","SECOND_MS","MINUTE_MS","DEFAULT_TOTAL_MS","DEFAULT_WARN_AT_MS","countdownVariants","cva","ICON_SIZE_CLASS","deriveTone","remaining","warnAtMs","announcementBucket","toEpoch","value","useRemainingMs","controlledRemaining","expiresAtEpoch","tickMs","now","setNow","useState","isControlled","useEffect","id","current","SessionCountdown","forwardRef","remainingMs","expiresAt","totalMs","size","showProgress","onExpire","onRestart","restarting","localeProp","label","className","rest","ref","t","i18n","useTranslation","locale","useMemo","tone","isExpired","expireFiredRef","useRef","nf","totalSeconds","minutes","seconds","timeText","bucket","announcement","expiredAnnouncement","regionLabel","composedClass","role","useAgentRegistration","Icon","CircleX","TriangleAlert","elapsed","message","jsxs","jsx","Button","Progress","LiveRegion"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,38 +1,52 @@
1
1
  import { jsx as o, jsxs as h } from "react/jsx-runtime";
2
- import { useState as R, useRef as B, useEffect as T, useCallback as I, useMemo as D, forwardRef as n, useContext as O, createContext as A } from "react";
2
+ import { useState as R, useRef as B, useEffect as T, useCallback as I, useMemo as O, forwardRef as i, useContext as D, createContext as A } from "react";
3
3
  import * as d from "@radix-ui/react-dialog";
4
4
  import { c as H } from "./index-D2ZczOXr.js";
5
- import { useTranslation as E } from "react-i18next";
6
- import { I as F } from "./icon-button-LqoiKcUN.js";
7
- import { u as L } from "./registry-nPAVE19X.js";
8
- import { X as V } from "./x-CCcI3eJp.js";
9
- const P = {
5
+ import { useTranslation as K } from "react-i18next";
6
+ import { I as E } from "./icon-button-LqoiKcUN.js";
7
+ import { u as F } from "./registry-DvAUVLHh.js";
8
+ import { X as L } from "./x-CCcI3eJp.js";
9
+ const V = {
10
10
  id: "sheet",
11
+ // `dismiss` shares the handle's close() — it is the same imperative close
12
+ // path with destructive intent (loses uncommitted input). Backed.
11
13
  capabilities: ["open", "close", "dismiss"],
12
14
  state: {
13
15
  isOpen: {
14
16
  type: "boolean",
17
+ descriptionKey: "ui.agent.sheet.state.isOpen",
15
18
  description: "True when the sheet is currently open.",
16
19
  read: (e) => e.getIsOpen()
17
20
  }
18
21
  },
19
22
  actions: {
20
23
  open: {
24
+ // Pure ephemeral UI state — opening loses no data.
21
25
  safety: "read",
26
+ idempotent: !0,
27
+ descriptionKey: "ui.agent.sheet.actions.open",
22
28
  description: "Open the sheet.",
23
29
  invoke: (e) => {
24
30
  e.open();
25
31
  }
26
32
  },
27
33
  close: {
28
- safety: "write",
34
+ // Pure ephemeral UI state — closing is reversible by reopening and
35
+ // loses no committed data.
36
+ safety: "read",
37
+ idempotent: !0,
38
+ descriptionKey: "ui.agent.sheet.actions.close",
29
39
  description: "Close the sheet. Reversible by reopening.",
30
40
  invoke: (e) => {
31
41
  e.close();
32
42
  }
33
43
  },
34
44
  dismiss: {
45
+ // Same close() path, but flagged destructive because dismissing a sheet
46
+ // mid-edit discards any in-progress input that was not committed.
35
47
  safety: "destructive",
48
+ idempotent: !0,
49
+ descriptionKey: "ui.agent.sheet.actions.dismiss",
36
50
  description: "Dismiss the sheet. Loses any in-progress input that has not been committed.",
37
51
  invoke: (e) => {
38
52
  e.close();
@@ -47,14 +61,14 @@ const P = {
47
61
  description: "Sourced from the id prop on Sheet.Root."
48
62
  }
49
63
  }
50
- }, M = [
64
+ }, P = [
51
65
  "ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]",
52
66
  "ds:bg-[var(--background)]/[var(--opacity-70)]",
53
67
  "ds:backdrop-blur-sm",
54
68
  "ds:data-[state=open]:animate-in ds:data-[state=open]:fade-in-0",
55
69
  "ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0",
56
70
  "ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none"
57
- ].join(" "), X = H(
71
+ ].join(" "), M = H(
58
72
  [
59
73
  "ds:fixed ds:z-[var(--z-modal)] ds:flex ds:flex-col",
60
74
  "ds:bg-[var(--popover)] ds:text-[var(--popover-foreground)]",
@@ -96,7 +110,7 @@ const P = {
96
110
  defaultVariants: { side: "end" }
97
111
  }
98
112
  );
99
- function Y(e, t) {
113
+ function X(e, t) {
100
114
  return e === "start" || e === "end" ? {
101
115
  sm: "ds:[inline-size:360px]",
102
116
  md: "ds:[inline-size:480px]",
@@ -111,45 +125,45 @@ const b = A(void 0), m = ({
111
125
  children: e,
112
126
  id: t,
113
127
  open: s,
114
- defaultOpen: r,
128
+ defaultOpen: n,
115
129
  onOpenChange: a,
116
130
  ...p
117
131
  }) => {
118
- const i = s !== void 0, [N, C] = R(
119
- r ?? !1
120
- ), l = i ? !!s : N, u = B(l);
132
+ const r = s !== void 0, [N, C] = R(
133
+ n ?? !1
134
+ ), l = r ? !!s : N, f = B(l);
121
135
  T(() => {
122
- u.current = l;
136
+ f.current = l;
123
137
  }, [l]);
124
138
  const c = I(
125
139
  (v) => {
126
- i || C(v), a == null || a(v);
140
+ r || C(v), a == null || a(v);
127
141
  },
128
- [i, a]
129
- ), w = D(
142
+ [r, a]
143
+ ), w = O(
130
144
  () => ({
131
- getIsOpen: () => u.current,
145
+ getIsOpen: () => f.current,
132
146
  open: () => c(!0),
133
147
  close: () => c(!1)
134
148
  }),
135
149
  [c]
136
150
  );
137
- return L(P, w, t), /* @__PURE__ */ o(b.Provider, { value: t, children: /* @__PURE__ */ o(d.Root, { open: l, onOpenChange: c, ...p, children: e }) });
151
+ return F(V, w, t), /* @__PURE__ */ o(b.Provider, { value: t, children: /* @__PURE__ */ o(d.Root, { open: l, onOpenChange: c, ...p, children: e }) });
138
152
  };
139
153
  m.displayName = "Sheet.Root";
140
- const g = n(({ children: e, ...t }, s) => /* @__PURE__ */ o(d.Trigger, { ref: s, ...t, children: e }));
154
+ const g = i(({ children: e, ...t }, s) => /* @__PURE__ */ o(d.Trigger, { ref: s, ...t, children: e }));
141
155
  g.displayName = "Sheet.Trigger";
142
- const f = n(({ children: e, ...t }, s) => /* @__PURE__ */ o(d.Close, { ref: s, ...t, children: e }));
143
- f.displayName = "Sheet.Close";
144
- const y = n(
145
- ({ side: e = "end", size: t = "md", className: s, children: r, ...a }, p) => {
146
- const i = O(b);
156
+ const u = i(({ children: e, ...t }, s) => /* @__PURE__ */ o(d.Close, { ref: s, ...t, children: e }));
157
+ u.displayName = "Sheet.Close";
158
+ const y = i(
159
+ ({ side: e = "end", size: t = "md", className: s, children: n, ...a }, p) => {
160
+ const r = D(b);
147
161
  return /* @__PURE__ */ h(d.Portal, { children: [
148
162
  /* @__PURE__ */ o(
149
163
  d.Overlay,
150
164
  {
151
165
  "data-component": "sheet-overlay",
152
- className: M
166
+ className: P
153
167
  }
154
168
  ),
155
169
  /* @__PURE__ */ o(
@@ -157,27 +171,27 @@ const y = n(
157
171
  {
158
172
  ref: p,
159
173
  className: [
160
- X({ side: e }),
161
- Y(e, t),
174
+ M({ side: e }),
175
+ X(e, t),
162
176
  s
163
177
  ].filter(Boolean).join(" "),
164
178
  "data-component": "sheet",
165
- "data-component-id": i,
179
+ "data-component-id": r,
166
180
  ...a,
167
- children: r
181
+ children: n
168
182
  }
169
183
  )
170
184
  ] });
171
185
  }
172
186
  );
173
187
  y.displayName = "Sheet.Content";
174
- const x = n(
175
- ({ className: e, children: t, ...s }, r) => {
176
- const { t: a } = E();
188
+ const x = i(
189
+ ({ className: e, children: t, ...s }, n) => {
190
+ const { t: a } = K();
177
191
  return /* @__PURE__ */ h(
178
192
  "div",
179
193
  {
180
- ref: r,
194
+ ref: n,
181
195
  className: [
182
196
  "ds:sticky ds:top-0 ds:z-10 ds:flex ds:items-center ds:justify-between",
183
197
  "ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-md)]",
@@ -187,10 +201,10 @@ const x = n(
187
201
  ...s,
188
202
  children: [
189
203
  t,
190
- /* @__PURE__ */ o(f, { asChild: !0, children: /* @__PURE__ */ o(
191
- F,
204
+ /* @__PURE__ */ o(u, { asChild: !0, children: /* @__PURE__ */ o(
205
+ E,
192
206
  {
193
- icon: /* @__PURE__ */ o(V, {}),
207
+ icon: /* @__PURE__ */ o(L, {}),
194
208
  intent: "ghost",
195
209
  size: "sm",
196
210
  "aria-label": a("common.close", "Close")
@@ -202,7 +216,7 @@ const x = n(
202
216
  }
203
217
  );
204
218
  x.displayName = "Sheet.Header";
205
- const S = n(
219
+ const S = i(
206
220
  ({ className: e, ...t }, s) => /* @__PURE__ */ o(
207
221
  "div",
208
222
  {
@@ -218,7 +232,7 @@ const S = n(
218
232
  )
219
233
  );
220
234
  S.displayName = "Sheet.Body";
221
- const j = n(
235
+ const j = i(
222
236
  ({ className: e, ...t }, s) => /* @__PURE__ */ o(
223
237
  "div",
224
238
  {
@@ -235,7 +249,7 @@ const j = n(
235
249
  )
236
250
  );
237
251
  j.displayName = "Sheet.Footer";
238
- const k = n(({ className: e, ...t }, s) => /* @__PURE__ */ o(
252
+ const k = i(({ className: e, ...t }, s) => /* @__PURE__ */ o(
239
253
  d.Title,
240
254
  {
241
255
  ref: s,
@@ -244,7 +258,7 @@ const k = n(({ className: e, ...t }, s) => /* @__PURE__ */ o(
244
258
  }
245
259
  ));
246
260
  k.displayName = "Sheet.Title";
247
- const z = n(({ className: e, ...t }, s) => /* @__PURE__ */ o(
261
+ const z = i(({ className: e, ...t }, s) => /* @__PURE__ */ o(
248
262
  d.Description,
249
263
  {
250
264
  ref: s,
@@ -262,10 +276,10 @@ const W = Object.assign(m, {
262
276
  Footer: j,
263
277
  Title: k,
264
278
  Description: z,
265
- Close: f
279
+ Close: u
266
280
  });
267
281
  export {
268
282
  W as S,
269
- P as s
283
+ V as s
270
284
  };
271
- //# sourceMappingURL=sheet-taJer-Ha.js.map
285
+ //# sourceMappingURL=sheet-BxsE7eQm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheet-BxsE7eQm.js","sources":["../../src/components/sheet/sheet.agent.ts","../../src/components/sheet/sheet.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { SheetHandle } from './sheet';\n\nexport const sheetAgent: AgentAdapter<SheetHandle> = {\n id: 'sheet',\n // `dismiss` shares the handle's close() — it is the same imperative close\n // path with destructive intent (loses uncommitted input). Backed.\n capabilities: ['open', 'close', 'dismiss'],\n state: {\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.sheet.state.isOpen',\n description: 'True when the sheet is currently open.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n // Pure ephemeral UI state — opening loses no data.\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.sheet.actions.open',\n description: 'Open the sheet.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n // Pure ephemeral UI state — closing is reversible by reopening and\n // loses no committed data.\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.sheet.actions.close',\n description: 'Close the sheet. Reversible by reopening.',\n invoke: (handle) => {\n handle.close();\n },\n },\n dismiss: {\n // Same close() path, but flagged destructive because dismissing a sheet\n // mid-edit discards any in-progress input that was not committed.\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.sheet.actions.dismiss',\n description:\n 'Dismiss the sheet. Loses any in-progress input that has not been committed.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'sheet' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on Sheet.Root.',\n },\n },\n};\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { X } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { useAgentRegistration } from '../../agent';\nimport { sheetAgent } from './sheet.agent';\n\nconst OVERLAY_CLASSES = [\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[var(--background)]/[var(--opacity-70)]',\n 'ds:backdrop-blur-sm',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:fade-in-0',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0',\n 'ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n].join(' ');\n\nconst contentVariants = cva(\n [\n 'ds:fixed ds:z-[var(--z-modal)] ds:flex ds:flex-col',\n 'ds:bg-[var(--popover)] ds:text-[var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-xl)]',\n 'ds:focus-visible:outline-none',\n 'ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n side: {\n start: [\n 'ds:start-0 ds:inset-y-0',\n 'ds:border-e ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:ltr:data-[state=open]:slide-in-from-left-full ds:rtl:data-[state=open]:slide-in-from-right-full',\n 'ds:data-[state=closed]:animate-out ds:ltr:data-[state=closed]:slide-out-to-left-full ds:rtl:data-[state=closed]:slide-out-to-right-full',\n 'ds:max-sm:[inline-size:100dvw] ds:max-sm:[block-size:100dvh]',\n ].join(' '),\n end: [\n 'ds:end-0 ds:inset-y-0',\n 'ds:border-s ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:ltr:data-[state=open]:slide-in-from-right-full ds:rtl:data-[state=open]:slide-in-from-left-full',\n 'ds:data-[state=closed]:animate-out ds:ltr:data-[state=closed]:slide-out-to-right-full ds:rtl:data-[state=closed]:slide-out-to-left-full',\n 'ds:max-sm:[inline-size:100dvw] ds:max-sm:[block-size:100dvh]',\n ].join(' '),\n top: [\n 'ds:top-0 ds:inset-x-0',\n 'ds:border-b ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:slide-in-from-top-full',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:slide-out-to-top-full',\n ].join(' '),\n bottom: [\n 'ds:bottom-0 ds:inset-x-0',\n 'ds:border-t ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:slide-in-from-bottom-full',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:slide-out-to-bottom-full',\n ].join(' '),\n },\n },\n defaultVariants: { side: 'end' },\n },\n);\n\nfunction getSizeClass(\n side: 'start' | 'end' | 'top' | 'bottom',\n size: 'sm' | 'md' | 'lg',\n): string {\n if (side === 'start' || side === 'end') {\n // These MUST carry the `ds:` prefix — a bare `[inline-size:…]` is not a\n // recognised utility under `prefix: 'ds'`, so Tailwind emits no rule and the\n // sheet renders full-bleed (the mobile `ds:max-sm:[inline-size:100dvw]`\n // classes work precisely because they are prefixed).\n const map = {\n sm: 'ds:[inline-size:360px]',\n md: 'ds:[inline-size:480px]',\n lg: 'ds:[inline-size:640px]',\n } as const;\n return map[size];\n }\n\n const map = {\n sm: 'ds:[block-size:40dvh]',\n md: 'ds:[block-size:60dvh]',\n lg: 'ds:[block-size:80dvh]',\n } as const;\n return map[size];\n}\n\n// Curated agent-readiness handle — see sheet.agent.ts.\nexport interface SheetHandle {\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n}\n\nexport interface SheetRootProps extends ComponentPropsWithoutRef<\n typeof RadixDialog.Root\n> {\n /** Opaque instance id — forwarded to Sheet.Content as `data-component-id`. */\n id?: string;\n}\n\nconst SheetIdContext = createContext<string | undefined>(undefined);\n\nconst SheetRoot = ({\n children,\n id,\n open: openProp,\n defaultOpen,\n onOpenChange,\n ...props\n}: SheetRootProps) => {\n const isControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(\n defaultOpen ?? false,\n );\n const open = isControlled ? Boolean(openProp) : internalOpen;\n\n const openRef = useRef(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const handle = useMemo<SheetHandle>(\n () => ({\n getIsOpen: () => openRef.current,\n open: () => setOpen(true),\n close: () => setOpen(false),\n }),\n [setOpen],\n );\n useAgentRegistration(sheetAgent, handle, id);\n\n return (\n <SheetIdContext.Provider value={id}>\n <RadixDialog.Root open={open} onOpenChange={setOpen} {...props}>\n {children}\n </RadixDialog.Root>\n </SheetIdContext.Provider>\n );\n};\nSheetRoot.displayName = 'Sheet.Root';\n\nconst SheetTrigger = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Trigger>\n>(({ children, ...props }, ref) => (\n <RadixDialog.Trigger ref={ref} {...props}>\n {children}\n </RadixDialog.Trigger>\n));\nSheetTrigger.displayName = 'Sheet.Trigger';\n\nconst SheetClose = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Close>\n>(({ children, ...props }, ref) => (\n <RadixDialog.Close ref={ref} {...props}>\n {children}\n </RadixDialog.Close>\n));\nSheetClose.displayName = 'Sheet.Close';\n\nexport interface SheetContentProps\n extends\n Omit<ComponentPropsWithoutRef<typeof RadixDialog.Content>, 'className'>,\n VariantProps<typeof contentVariants> {\n side?: 'start' | 'end' | 'top' | 'bottom';\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n children: ReactNode;\n}\n\nconst SheetContent = forwardRef<HTMLDivElement, SheetContentProps>(\n ({ side = 'end', size = 'md', className, children, ...props }, ref) => {\n const instanceId = useContext(SheetIdContext);\n return (\n <RadixDialog.Portal>\n <RadixDialog.Overlay\n data-component=\"sheet-overlay\"\n className={OVERLAY_CLASSES}\n />\n <RadixDialog.Content\n ref={ref}\n className={[\n contentVariants({ side }),\n getSizeClass(side, size),\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n data-component=\"sheet\"\n data-component-id={instanceId}\n {...props}\n >\n {children}\n </RadixDialog.Content>\n </RadixDialog.Portal>\n );\n },\n);\nSheetContent.displayName = 'Sheet.Content';\n\nconst SheetHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <div\n ref={ref}\n className={[\n 'ds:sticky ds:top-0 ds:z-10 ds:flex ds:items-center ds:justify-between',\n 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-md)]',\n 'ds:border-b ds:border-[color:var(--border)] ds:bg-[var(--popover)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children}\n <SheetClose asChild>\n <IconButton\n icon={<X />}\n intent=\"ghost\"\n size=\"sm\"\n aria-label={t('common.close', 'Close')}\n />\n </SheetClose>\n </div>\n );\n },\n);\nSheetHeader.displayName = 'Sheet.Header';\n\nconst SheetBody = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={[\n 'ds:overflow-y-auto ds:overflow-x-hidden ds:flex-1',\n 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-lg)]',\n 'ds:break-words',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n ),\n);\nSheetBody.displayName = 'Sheet.Body';\n\nconst SheetFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={[\n 'ds:sticky ds:bottom-0 ds:z-10 ds:flex ds:items-center ds:justify-end ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-md)]',\n 'ds:border-t ds:border-[color:var(--border)] ds:bg-[var(--popover)]',\n 'ds:max-sm:flex-col ds:max-sm:[&>*]:w-full',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n ),\n);\nSheetFooter.displayName = 'Sheet.Footer';\n\nconst SheetTitle = forwardRef<\n HTMLHeadingElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Title>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Title\n ref={ref}\n className={['type-title-card ds:break-words', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n));\nSheetTitle.displayName = 'Sheet.Title';\n\nconst SheetDescription = forwardRef<\n HTMLParagraphElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Description>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Description\n ref={ref}\n className={['type-body-sm ds:text-[var(--muted-foreground)]', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n));\nSheetDescription.displayName = 'Sheet.Description';\n\nexport const Sheet = Object.assign(SheetRoot, {\n Root: SheetRoot,\n Trigger: SheetTrigger,\n Content: SheetContent,\n Header: SheetHeader,\n Body: SheetBody,\n Footer: SheetFooter,\n Title: SheetTitle,\n Description: SheetDescription,\n Close: SheetClose,\n});\n\nexport type SheetHeaderProps = HTMLAttributes<HTMLDivElement>;\nexport type SheetBodyProps = HTMLAttributes<HTMLDivElement>;\nexport type SheetFooterProps = HTMLAttributes<HTMLDivElement>;\n"],"names":["sheetAgent","handle","OVERLAY_CLASSES","contentVariants","cva","getSizeClass","side","size","SheetIdContext","createContext","SheetRoot","children","id","openProp","defaultOpen","onOpenChange","props","isControlled","internalOpen","setInternalOpen","useState","open","openRef","useRef","useEffect","setOpen","useCallback","next","useMemo","useAgentRegistration","jsx","RadixDialog","SheetTrigger","forwardRef","ref","SheetClose","SheetContent","className","instanceId","useContext","jsxs","SheetHeader","t","useTranslation","IconButton","X","SheetBody","SheetFooter","SheetTitle","SheetDescription","Sheet"],"mappings":"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"}