@alfadocs/ui-kit-debug 1.67.0 → 1.68.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 (499) hide show
  1. package/dist/_chunks/{address-fields-CJtu7LQU.js → address-fields-BUPRs3n-.js} +3 -3
  2. package/dist/_chunks/{address-fields-CJtu7LQU.js.map → address-fields-BUPRs3n-.js.map} +1 -1
  3. package/dist/_chunks/{agenda-card-DR9gDdKp.js → agenda-card-BDuvreCe.js} +2 -2
  4. package/dist/_chunks/{agenda-card-DR9gDdKp.js.map → agenda-card-BDuvreCe.js.map} +1 -1
  5. package/dist/_chunks/{agenda-tray-DGB1Zup-.js → agenda-tray-CfwylhWf.js} +3 -3
  6. package/dist/_chunks/{agenda-tray-DGB1Zup-.js.map → agenda-tray-CfwylhWf.js.map} +1 -1
  7. package/dist/_chunks/{ai-credits-exhausted-notice-DfAgfZDF.js → ai-credits-exhausted-notice-Bg8NpW2K.js} +2 -2
  8. package/dist/_chunks/{ai-credits-exhausted-notice-DfAgfZDF.js.map → ai-credits-exhausted-notice-Bg8NpW2K.js.map} +1 -1
  9. package/dist/_chunks/{ai-permission-notice-qsdm4Sx4.js → ai-permission-notice-C00i6VhY.js} +2 -2
  10. package/dist/_chunks/{ai-permission-notice-qsdm4Sx4.js.map → ai-permission-notice-C00i6VhY.js.map} +1 -1
  11. package/dist/_chunks/{ai-prompt-input-DSGSe4LH.js → ai-prompt-input-DzgyoKyk.js} +141 -139
  12. package/dist/_chunks/ai-prompt-input-DzgyoKyk.js.map +1 -0
  13. package/dist/_chunks/{alert-DjsJMGRE.js → alert-9kEwDza3.js} +122 -112
  14. package/dist/_chunks/alert-9kEwDza3.js.map +1 -0
  15. package/dist/_chunks/{alia-sidebar-qe0quZkB.js → alia-sidebar-B06ZSOaF.js} +3 -3
  16. package/dist/_chunks/{alia-sidebar-qe0quZkB.js.map → alia-sidebar-B06ZSOaF.js.map} +1 -1
  17. package/dist/_chunks/{anamnesis-summary-card-CMzBLTiN.js → anamnesis-summary-card-DQ3iE1gD.js} +2 -2
  18. package/dist/_chunks/{anamnesis-summary-card-CMzBLTiN.js.map → anamnesis-summary-card-DQ3iE1gD.js.map} +1 -1
  19. package/dist/_chunks/{anamnesis-summary-rows-BQ_EokKz.js → anamnesis-summary-rows-CNK0fIJk.js} +392 -388
  20. package/dist/_chunks/anamnesis-summary-rows-CNK0fIJk.js.map +1 -0
  21. package/dist/_chunks/{appointment-card-CL32sux-.js → appointment-card-5JMWi9_f.js} +2 -2
  22. package/dist/_chunks/{appointment-card-CL32sux-.js.map → appointment-card-5JMWi9_f.js.map} +1 -1
  23. package/dist/_chunks/{appointment-peek-B5mcDcXt.js → appointment-peek-D5XCfYKu.js} +2 -2
  24. package/dist/_chunks/{appointment-peek-B5mcDcXt.js.map → appointment-peek-D5XCfYKu.js.map} +1 -1
  25. package/dist/_chunks/{appointment-timeline-CCqjORFb.js → appointment-timeline-VFP6HoXT.js} +4 -4
  26. package/dist/_chunks/{appointment-timeline-CCqjORFb.js.map → appointment-timeline-VFP6HoXT.js.map} +1 -1
  27. package/dist/_chunks/{appointment-tray-qtpJt8e0.js → appointment-tray-B3PDER3I.js} +3 -3
  28. package/dist/_chunks/{appointment-tray-qtpJt8e0.js.map → appointment-tray-B3PDER3I.js.map} +1 -1
  29. package/dist/_chunks/{audio-recorder-B11RR-rC.js → audio-recorder-4Ll0pwYK.js} +3 -3
  30. package/dist/_chunks/{audio-recorder-B11RR-rC.js.map → audio-recorder-4Ll0pwYK.js.map} +1 -1
  31. package/dist/_chunks/{auth-form-parts-DwUTH6YN.js → auth-form-parts-B40zvD-a.js} +2 -2
  32. package/dist/_chunks/{auth-form-parts-DwUTH6YN.js.map → auth-form-parts-B40zvD-a.js.map} +1 -1
  33. package/dist/_chunks/avatar-BPiPL7ND.js +199 -0
  34. package/dist/_chunks/avatar-BPiPL7ND.js.map +1 -0
  35. package/dist/_chunks/{balance-badge-cell-DZNthHO1.js → balance-badge-cell-BG3DMly4.js} +4 -4
  36. package/dist/_chunks/{balance-badge-cell-DZNthHO1.js.map → balance-badge-cell-BG3DMly4.js.map} +1 -1
  37. package/dist/_chunks/{bishop-score-CaNTrikJ.js → bishop-score-Df8nF1qg.js} +2 -2
  38. package/dist/_chunks/{bishop-score-CaNTrikJ.js.map → bishop-score-Df8nF1qg.js.map} +1 -1
  39. package/dist/_chunks/{booking-tTVxKPQY.js → booking-B1pDbERi.js} +377 -335
  40. package/dist/_chunks/booking-B1pDbERi.js.map +1 -0
  41. package/dist/_chunks/{calendar-BhN-jisv.js → calendar-BvOM8rG3.js} +2 -2
  42. package/dist/_chunks/{calendar-BhN-jisv.js.map → calendar-BvOM8rG3.js.map} +1 -1
  43. package/dist/_chunks/{calendar-workspace-MRrzcxAy.js → calendar-workspace-CYK1M83j.js} +18 -18
  44. package/dist/_chunks/{calendar-workspace-MRrzcxAy.js.map → calendar-workspace-CYK1M83j.js.map} +1 -1
  45. package/dist/_chunks/{chat-message-fRLZ95O5.js → chat-message-Be-9vIIQ.js} +2 -2
  46. package/dist/_chunks/{chat-message-fRLZ95O5.js.map → chat-message-Be-9vIIQ.js.map} +1 -1
  47. package/dist/_chunks/{clinical-note-card-BnFTIs6x.js → clinical-note-card-Caidqcwa.js} +2 -2
  48. package/dist/_chunks/{clinical-note-card-BnFTIs6x.js.map → clinical-note-card-Caidqcwa.js.map} +1 -1
  49. package/dist/_chunks/{color-picker-BsggJovx.js → color-picker-AcaWuKah.js} +99 -95
  50. package/dist/_chunks/color-picker-AcaWuKah.js.map +1 -0
  51. package/dist/_chunks/{combobox-U5yfO6o0.js → combobox-vF9O-QoG.js} +92 -83
  52. package/dist/_chunks/combobox-vF9O-QoG.js.map +1 -0
  53. package/dist/_chunks/{contact-profile-card-C4-OCshj.js → contact-profile-card-CAwwOqHl.js} +40 -40
  54. package/dist/_chunks/contact-profile-card-CAwwOqHl.js.map +1 -0
  55. package/dist/_chunks/{control-room-rail-DUerqHeo.js → control-room-rail-BB6rCDWI.js} +3 -3
  56. package/dist/_chunks/{control-room-rail-DUerqHeo.js.map → control-room-rail-BB6rCDWI.js.map} +1 -1
  57. package/dist/_chunks/{country-select-DF5Bd_mn.js → country-select-CSE2Zm_s.js} +2 -2
  58. package/dist/_chunks/{country-select-DF5Bd_mn.js.map → country-select-CSE2Zm_s.js.map} +1 -1
  59. package/dist/_chunks/dashboard-grid-7JzaiKnk.js +1487 -0
  60. package/dist/_chunks/dashboard-grid-7JzaiKnk.js.map +1 -0
  61. package/dist/_chunks/{data-table-COoCQ4n_.js → data-table-Cty4-Jht.js} +3 -3
  62. package/dist/_chunks/{data-table-COoCQ4n_.js.map → data-table-Cty4-Jht.js.map} +1 -1
  63. package/dist/_chunks/{dependent-selector-DBr1AhLg.js → dependent-selector-C4kOgO8b.js} +2 -2
  64. package/dist/_chunks/{dependent-selector-DBr1AhLg.js.map → dependent-selector-C4kOgO8b.js.map} +1 -1
  65. package/dist/_chunks/{document-preview-VyQOjFVL.js → document-preview-513f3iPn.js} +4 -4
  66. package/dist/_chunks/{document-preview-VyQOjFVL.js.map → document-preview-513f3iPn.js.map} +1 -1
  67. package/dist/_chunks/{document-scanner-CXH_GYh4.js → document-scanner-Bd3wbzpI.js} +2 -2
  68. package/dist/_chunks/{document-scanner-CXH_GYh4.js.map → document-scanner-Bd3wbzpI.js.map} +1 -1
  69. package/dist/_chunks/{editable-description-ChGNdYY8.js → editable-description-DnAFi360.js} +2 -2
  70. package/dist/_chunks/{editable-description-ChGNdYY8.js.map → editable-description-DnAFi360.js.map} +1 -1
  71. package/dist/_chunks/{entity-summary-Bj-Wxq7Y.js → entity-summary-C2B8yNmc.js} +4 -4
  72. package/dist/_chunks/{entity-summary-Bj-Wxq7Y.js.map → entity-summary-C2B8yNmc.js.map} +1 -1
  73. package/dist/_chunks/{error-summary-PUE5Zxp9.js → error-summary-mGxIyDAY.js} +2 -2
  74. package/dist/_chunks/{error-summary-PUE5Zxp9.js.map → error-summary-mGxIyDAY.js.map} +1 -1
  75. package/dist/_chunks/{face-scheme-DAD-mXzM.js → face-scheme-CSJdRNad.js} +248 -244
  76. package/dist/_chunks/{face-scheme-DAD-mXzM.js.map → face-scheme-CSJdRNad.js.map} +1 -1
  77. package/dist/_chunks/{file-manager-RiV7-OEE.js → file-manager-D4cPnRhL.js} +3 -3
  78. package/dist/_chunks/{file-manager-RiV7-OEE.js.map → file-manager-D4cPnRhL.js.map} +1 -1
  79. package/dist/_chunks/{forgot-password-form-CPOfRE0C.js → forgot-password-form-Dqi7R-NL.js} +4 -4
  80. package/dist/_chunks/{forgot-password-form-CPOfRE0C.js.map → forgot-password-form-Dqi7R-NL.js.map} +1 -1
  81. package/dist/_chunks/format-number-DdzqwMs1.js +13 -0
  82. package/dist/_chunks/format-number-DdzqwMs1.js.map +1 -0
  83. package/dist/_chunks/{freemium-paywall-6DO7noHX.js → freemium-paywall-C73C8Rgd.js} +2 -2
  84. package/dist/_chunks/{freemium-paywall-6DO7noHX.js.map → freemium-paywall-C73C8Rgd.js.map} +1 -1
  85. package/dist/_chunks/{gestational-age-calculator-CZYa2D6m.js → gestational-age-calculator-Du53p8MH.js} +2 -2
  86. package/dist/_chunks/{gestational-age-calculator-CZYa2D6m.js.map → gestational-age-calculator-Du53p8MH.js.map} +1 -1
  87. package/dist/_chunks/{header-settings-BSH9Gk0J.js → header-settings-DlUbvAUx.js} +37 -36
  88. package/dist/_chunks/header-settings-DlUbvAUx.js.map +1 -0
  89. package/dist/_chunks/{heatmap-C1TeC7wT.js → heatmap-DbZIQg14.js} +4 -4
  90. package/dist/_chunks/{heatmap-C1TeC7wT.js.map → heatmap-DbZIQg14.js.map} +1 -1
  91. package/dist/_chunks/{help-me-write-templates-Bw3Q58x-.js → help-me-write-templates-5WkUfvc_.js} +3 -3
  92. package/dist/_chunks/{help-me-write-templates-Bw3Q58x-.js.map → help-me-write-templates-5WkUfvc_.js.map} +1 -1
  93. package/dist/_chunks/{kit-extensions-DWs1UEXb.js → kit-extensions-CYvLL4ee.js} +3 -3
  94. package/dist/_chunks/{kit-extensions-DWs1UEXb.js.map → kit-extensions-CYvLL4ee.js.map} +1 -1
  95. package/dist/_chunks/length-token-DwMnGEYT.js +24 -0
  96. package/dist/_chunks/length-token-DwMnGEYT.js.map +1 -0
  97. package/dist/_chunks/{link-cell-renderer-CtTsvfPY.js → link-cell-renderer-DtIsQWDO.js} +4 -4
  98. package/dist/_chunks/{link-cell-renderer-CtTsvfPY.js.map → link-cell-renderer-DtIsQWDO.js.map} +1 -1
  99. package/dist/_chunks/{login-dev-card-A-CL3mjt.js → login-dev-card-vEL-o5wq.js} +3 -3
  100. package/dist/_chunks/{login-dev-card-A-CL3mjt.js.map → login-dev-card-vEL-o5wq.js.map} +1 -1
  101. package/dist/_chunks/{map-view-BuVfJMEa.js → map-view-CtohteZD.js} +300 -191
  102. package/dist/_chunks/map-view-CtohteZD.js.map +1 -0
  103. package/dist/_chunks/{marketplace-app-shell-DtSX8sYb.js → marketplace-app-shell-CcLQ0Dn-.js} +4 -4
  104. package/dist/_chunks/{marketplace-app-shell-DtSX8sYb.js.map → marketplace-app-shell-CcLQ0Dn-.js.map} +1 -1
  105. package/dist/_chunks/{message-card-A3mJNqfy.js → message-card-C_ksqIYM.js} +2 -2
  106. package/dist/_chunks/{message-card-A3mJNqfy.js.map → message-card-C_ksqIYM.js.map} +1 -1
  107. package/dist/_chunks/{message-tray-Ft6vSr71.js → message-tray-DCoQ4GQb.js} +3 -3
  108. package/dist/_chunks/{message-tray-Ft6vSr71.js.map → message-tray-DCoQ4GQb.js.map} +1 -1
  109. package/dist/_chunks/{multi-select-CMaAQQgb.js → multi-select-BOad3za9.js} +110 -98
  110. package/dist/_chunks/multi-select-BOad3za9.js.map +1 -0
  111. package/dist/_chunks/{muscle-scheme-YoN3rYXV.js → muscle-scheme-C66WlCxG.js} +2 -2
  112. package/dist/_chunks/{muscle-scheme-YoN3rYXV.js.map → muscle-scheme-C66WlCxG.js.map} +1 -1
  113. package/dist/_chunks/{note-timeline-DDqNU46n.js → note-timeline-KzL52MmB.js} +2 -2
  114. package/dist/_chunks/{note-timeline-DDqNU46n.js.map → note-timeline-KzL52MmB.js.map} +1 -1
  115. package/dist/_chunks/{notes-panel-IdsmqRFC.js → notes-panel-BXN46XkF.js} +6 -6
  116. package/dist/_chunks/{notes-panel-IdsmqRFC.js.map → notes-panel-BXN46XkF.js.map} +1 -1
  117. package/dist/_chunks/notice-group-DkYzKyAZ.js +291 -0
  118. package/dist/_chunks/notice-group-DkYzKyAZ.js.map +1 -0
  119. package/dist/_chunks/{notification-tray-BR3seWA7.js → notification-tray-Cp18MW5b.js} +2 -2
  120. package/dist/_chunks/{notification-tray-BR3seWA7.js.map → notification-tray-Cp18MW5b.js.map} +1 -1
  121. package/dist/_chunks/{operator-hero-3_RG4Dkj.js → operator-hero-6aAIQaFZ.js} +83 -66
  122. package/dist/_chunks/operator-hero-6aAIQaFZ.js.map +1 -0
  123. package/dist/_chunks/{optical-prescription-CxfMsbxi.js → optical-prescription-ulXnDbBe.js} +525 -509
  124. package/dist/_chunks/optical-prescription-ulXnDbBe.js.map +1 -0
  125. package/dist/_chunks/panel-header-CbtlTe85.js +190 -0
  126. package/dist/_chunks/panel-header-CbtlTe85.js.map +1 -0
  127. package/dist/_chunks/{panel-subview-yP4qIbKS.js → panel-subview-BPU7220K.js} +2 -2
  128. package/dist/_chunks/{panel-subview-yP4qIbKS.js.map → panel-subview-BPU7220K.js.map} +1 -1
  129. package/dist/_chunks/{patient-details-C-EWQTms.js → patient-details-C4Dyo7Ck.js} +4 -4
  130. package/dist/_chunks/{patient-details-C-EWQTms.js.map → patient-details-C4Dyo7Ck.js.map} +1 -1
  131. package/dist/_chunks/{patient-field-row-lY-Tb5Mo.js → patient-field-row-DROvUkFu.js} +4 -4
  132. package/dist/_chunks/{patient-field-row-lY-Tb5Mo.js.map → patient-field-row-DROvUkFu.js.map} +1 -1
  133. package/dist/_chunks/{patient-search-DpAKidZ5.js → patient-search-BADdx3M1.js} +2 -2
  134. package/dist/_chunks/{patient-search-DpAKidZ5.js.map → patient-search-BADdx3M1.js.map} +1 -1
  135. package/dist/_chunks/{patient-summary-card-Bpto_VCD.js → patient-summary-card-CAimxbuI.js} +4 -4
  136. package/dist/_chunks/{patient-summary-card-Bpto_VCD.js.map → patient-summary-card-CAimxbuI.js.map} +1 -1
  137. package/dist/_chunks/{payment-automation-upsell-BQ307qEX.js → payment-automation-upsell-CiwF5UrC.js} +2 -2
  138. package/dist/_chunks/{payment-automation-upsell-BQ307qEX.js.map → payment-automation-upsell-CiwF5UrC.js.map} +1 -1
  139. package/dist/_chunks/{payment-form-XKtinW8r.js → payment-form-PBuh8PIa.js} +2 -2
  140. package/dist/_chunks/{payment-form-XKtinW8r.js.map → payment-form-PBuh8PIa.js.map} +1 -1
  141. package/dist/_chunks/{pdf-viewer-BvoVMjH4.js → pdf-viewer-gAsNUsA8.js} +2 -2
  142. package/dist/_chunks/{pdf-viewer-BvoVMjH4.js.map → pdf-viewer-gAsNUsA8.js.map} +1 -1
  143. package/dist/_chunks/{periodontal-risk-chart-CPy7CNFe.js → periodontal-risk-chart-B7S9OmPC.js} +97 -89
  144. package/dist/_chunks/periodontal-risk-chart-B7S9OmPC.js.map +1 -0
  145. package/dist/_chunks/practice-profile-hero-qfrsFQI_.js +236 -0
  146. package/dist/_chunks/practice-profile-hero-qfrsFQI_.js.map +1 -0
  147. package/dist/_chunks/{practice-results-BrUDDMXC.js → practice-results-BzThnpnm.js} +328 -298
  148. package/dist/_chunks/practice-results-BzThnpnm.js.map +1 -0
  149. package/dist/_chunks/{pregnancy-dating-B8wo4l_r.js → pregnancy-dating-EFcFUJkQ.js} +2 -2
  150. package/dist/_chunks/{pregnancy-dating-B8wo4l_r.js.map → pregnancy-dating-EFcFUJkQ.js.map} +1 -1
  151. package/dist/_chunks/{privacy-mask-Ch7743uk.js → privacy-mask-CCz9zuIh.js} +2 -2
  152. package/dist/_chunks/{privacy-mask-Ch7743uk.js.map → privacy-mask-CCz9zuIh.js.map} +1 -1
  153. package/dist/_chunks/{product-hub-panel-C_ZosrBt.js → product-hub-panel-YuFbNPlT.js} +2 -2
  154. package/dist/_chunks/{product-hub-panel-C_ZosrBt.js.map → product-hub-panel-YuFbNPlT.js.map} +1 -1
  155. package/dist/_chunks/progress-notice-DiHWZ8Ms.js +279 -0
  156. package/dist/_chunks/progress-notice-DiHWZ8Ms.js.map +1 -0
  157. package/dist/_chunks/{province-select-Bd20Z9Br.js → province-select-CDjs5obD.js} +2 -2
  158. package/dist/_chunks/{province-select-Bd20Z9Br.js.map → province-select-CDjs5obD.js.map} +1 -1
  159. package/dist/_chunks/{radiograph-panel.agent-8Ewv8-d7.js → radiograph-panel.agent-4UllIoTQ.js} +2 -2
  160. package/dist/_chunks/{radiograph-panel.agent-8Ewv8-d7.js.map → radiograph-panel.agent-4UllIoTQ.js.map} +1 -1
  161. package/dist/_chunks/{rating-C1Vrmpsi.js → rating-CGYpg5dj.js} +43 -44
  162. package/dist/_chunks/rating-CGYpg5dj.js.map +1 -0
  163. package/dist/_chunks/{registration-form-BxwqUZzk.js → registration-form-1B0PTDal.js} +4 -4
  164. package/dist/_chunks/{registration-form-BxwqUZzk.js.map → registration-form-1B0PTDal.js.map} +1 -1
  165. package/dist/_chunks/{reviews-panel-AvsVgtJu.js → reviews-panel-CosDZyow.js} +29 -7
  166. package/dist/_chunks/reviews-panel-CosDZyow.js.map +1 -0
  167. package/dist/_chunks/{rich-text-editor-aCIoptbg.js → rich-text-editor-56dSsyZI.js} +3 -3
  168. package/dist/_chunks/{rich-text-editor-aCIoptbg.js.map → rich-text-editor-56dSsyZI.js.map} +1 -1
  169. package/dist/_chunks/{select-k4gBdS8N.js → select-4S-eYZUf.js} +244 -214
  170. package/dist/_chunks/select-4S-eYZUf.js.map +1 -0
  171. package/dist/_chunks/{sign-document-D1P1nUQA.js → sign-document-BiOTs1P4.js} +2 -2
  172. package/dist/_chunks/{sign-document-D1P1nUQA.js.map → sign-document-BiOTs1P4.js.map} +1 -1
  173. package/dist/_chunks/{signature-request-3u6TvRt2.js → signature-request-DAmNj_uq.js} +5 -5
  174. package/dist/_chunks/{signature-request-3u6TvRt2.js.map → signature-request-DAmNj_uq.js.map} +1 -1
  175. package/dist/_chunks/skeleton-tTWJpvAq.js +415 -0
  176. package/dist/_chunks/skeleton-tTWJpvAq.js.map +1 -0
  177. package/dist/_chunks/{slot-grid-dj5f6R2w.js → slot-grid-D_gix9mJ.js} +2 -2
  178. package/dist/_chunks/{slot-grid-dj5f6R2w.js.map → slot-grid-D_gix9mJ.js.map} +1 -1
  179. package/dist/_chunks/{tabs-2x3L13jn.js → tabs-BTj-2qMZ.js} +2 -2
  180. package/dist/_chunks/{tabs-2x3L13jn.js.map → tabs-BTj-2qMZ.js.map} +1 -1
  181. package/dist/_chunks/{task-card-BS7Uqevr.js → task-card-Ci2XbLmq.js} +2 -2
  182. package/dist/_chunks/{task-card-BS7Uqevr.js.map → task-card-Ci2XbLmq.js.map} +1 -1
  183. package/dist/_chunks/{task-editor-Bb5MMcid.js → task-editor-BomyxGoZ.js} +8 -8
  184. package/dist/_chunks/{task-editor-Bb5MMcid.js.map → task-editor-BomyxGoZ.js.map} +1 -1
  185. package/dist/_chunks/{task-tray-eQU4KJcA.js → task-tray-Dnc72nl-.js} +3 -3
  186. package/dist/_chunks/{task-tray-eQU4KJcA.js.map → task-tray-Dnc72nl-.js.map} +1 -1
  187. package/dist/_chunks/{tasks-panel-BOb57Ysw.js → tasks-panel-ATz9JDy8.js} +6 -6
  188. package/dist/_chunks/{tasks-panel-BOb57Ysw.js.map → tasks-panel-ATz9JDy8.js.map} +1 -1
  189. package/dist/_chunks/{theme-toggle-Ctb77x6O.js → theme-toggle-DT_Jn4DC.js} +147 -138
  190. package/dist/_chunks/theme-toggle-DT_Jn4DC.js.map +1 -0
  191. package/dist/_chunks/{timeline-DEIuHrWz.js → timeline-wUuTDFY_.js} +2 -2
  192. package/dist/_chunks/{timeline-DEIuHrWz.js.map → timeline-wUuTDFY_.js.map} +1 -1
  193. package/dist/_chunks/{tool-rail-C-03rH2I.js → tool-rail-C-M3eVdY.js} +2 -2
  194. package/dist/_chunks/{tool-rail-C-03rH2I.js.map → tool-rail-C-M3eVdY.js.map} +1 -1
  195. package/dist/_chunks/{transcript-panel-XudW5l6l.js → transcript-panel-CoHHpcFg.js} +2 -2
  196. package/dist/_chunks/{transcript-panel-XudW5l6l.js.map → transcript-panel-CoHHpcFg.js.map} +1 -1
  197. package/dist/_chunks/{treatment-receipt-Cpm8tqQN.js → treatment-receipt-pFqWFyD_.js} +2 -2
  198. package/dist/_chunks/{treatment-receipt-Cpm8tqQN.js.map → treatment-receipt-pFqWFyD_.js.map} +1 -1
  199. package/dist/_chunks/{unit-converter-BPZ0Ldkb.js → unit-converter-CIoTmCmP.js} +2 -2
  200. package/dist/_chunks/{unit-converter-BPZ0Ldkb.js.map → unit-converter-CIoTmCmP.js.map} +1 -1
  201. package/dist/_chunks/{use-appointment-details-read-CVSPoP5j.js → use-appointment-details-read-CUGfE0hV.js} +12 -12
  202. package/dist/_chunks/{use-appointment-details-read-CVSPoP5j.js.map → use-appointment-details-read-CUGfE0hV.js.map} +1 -1
  203. package/dist/_chunks/use-dismissed-CTOWqA0e.js +177 -0
  204. package/dist/_chunks/use-dismissed-CTOWqA0e.js.map +1 -0
  205. package/dist/_chunks/{voice-control-panel-BJIEbDq6.js → voice-control-panel-B8Lrk0C4.js} +4 -4
  206. package/dist/_chunks/{voice-control-panel-BJIEbDq6.js.map → voice-control-panel-B8Lrk0C4.js.map} +1 -1
  207. package/dist/_chunks/{warning-stack-BdY-0bd3.js → warning-stack-BhHUmRiD.js} +2 -2
  208. package/dist/_chunks/{warning-stack-BdY-0bd3.js.map → warning-stack-BhHUmRiD.js.map} +1 -1
  209. package/dist/_chunks/{workflow-map-CYbRD9ek.js → workflow-map-ln4_OG8A.js} +2 -2
  210. package/dist/_chunks/{workflow-map-CYbRD9ek.js.map → workflow-map-ln4_OG8A.js.map} +1 -1
  211. package/dist/agent-catalog.json +172 -4
  212. package/dist/agent-i18n/en.json +25 -1
  213. package/dist/components/_shared/format-number.d.ts +20 -0
  214. package/dist/components/_shared/format-number.d.ts.map +1 -0
  215. package/dist/components/_shared/length-token.d.ts +12 -0
  216. package/dist/components/_shared/length-token.d.ts.map +1 -0
  217. package/dist/components/_shared/option.d.ts +1 -0
  218. package/dist/components/_shared/option.d.ts.map +1 -1
  219. package/dist/components/address-fields/index.js +1 -1
  220. package/dist/components/agenda-card/index.js +1 -1
  221. package/dist/components/agenda-tray/index.js +1 -1
  222. package/dist/components/ai-credits-notice/index.js +1 -1
  223. package/dist/components/ai-permission-notice/index.js +1 -1
  224. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
  225. package/dist/components/ai-prompt-input/index.js +1 -1
  226. package/dist/components/alert/alert.d.ts +26 -0
  227. package/dist/components/alert/alert.d.ts.map +1 -1
  228. package/dist/components/alert/index.js +1 -1
  229. package/dist/components/anamnesis-summary-card/index.js +1 -1
  230. package/dist/components/appointment-card/index.js +2 -2
  231. package/dist/components/appointment-details-panel/index.js +1 -1
  232. package/dist/components/appointment-peek/index.js +1 -1
  233. package/dist/components/appointment-timeline/index.js +1 -1
  234. package/dist/components/audio-recorder/index.js +1 -1
  235. package/dist/components/avatar/avatar.d.ts +2 -0
  236. package/dist/components/avatar/avatar.d.ts.map +1 -1
  237. package/dist/components/avatar/index.js +1 -1
  238. package/dist/components/bishop-score/index.js +1 -1
  239. package/dist/components/booking/booking.d.ts.map +1 -1
  240. package/dist/components/booking/details-form.d.ts.map +1 -1
  241. package/dist/components/booking/index.js +1 -1
  242. package/dist/components/calendar/index.js +1 -1
  243. package/dist/components/chat-message/index.js +1 -1
  244. package/dist/components/clinical-note-card/index.js +1 -1
  245. package/dist/components/color-picker/color-picker.d.ts.map +1 -1
  246. package/dist/components/color-picker/index.js +1 -1
  247. package/dist/components/combobox/combobox.d.ts.map +1 -1
  248. package/dist/components/combobox/index.js +1 -1
  249. package/dist/components/contact-profile-card/index.js +1 -1
  250. package/dist/components/control-room-rail/index.js +1 -1
  251. package/dist/components/country-select/index.js +1 -1
  252. package/dist/components/dashboard-grid/dashboard-grid.agent.d.ts.map +1 -1
  253. package/dist/components/dashboard-grid/dashboard-grid.d.ts +20 -1
  254. package/dist/components/dashboard-grid/dashboard-grid.d.ts.map +1 -1
  255. package/dist/components/dashboard-grid/index.js +1 -1
  256. package/dist/components/data-table/index.js +2 -2
  257. package/dist/components/dependent-selector/index.js +1 -1
  258. package/dist/components/document-preview/index.js +1 -1
  259. package/dist/components/document-scanner/index.js +1 -1
  260. package/dist/components/editable-description/index.js +1 -1
  261. package/dist/components/entity-summary/index.js +1 -1
  262. package/dist/components/error-summary/index.js +1 -1
  263. package/dist/components/face-scheme/face-scheme.d.ts.map +1 -1
  264. package/dist/components/face-scheme/index.js +1 -1
  265. package/dist/components/file-manager/index.js +1 -1
  266. package/dist/components/freemium-paywall/index.js +1 -1
  267. package/dist/components/gestational-age-calculator/index.js +1 -1
  268. package/dist/components/header-settings/header-settings.d.ts.map +1 -1
  269. package/dist/components/header-settings/index.js +1 -1
  270. package/dist/components/heatmap/index.js +1 -1
  271. package/dist/components/index.d.ts +4 -2
  272. package/dist/components/index.d.ts.map +1 -1
  273. package/dist/components/map-view/index.d.ts +1 -1
  274. package/dist/components/map-view/index.d.ts.map +1 -1
  275. package/dist/components/map-view/index.js +1 -1
  276. package/dist/components/map-view/map-view.d.ts +51 -0
  277. package/dist/components/map-view/map-view.d.ts.map +1 -1
  278. package/dist/components/message-card/index.js +1 -1
  279. package/dist/components/message-tray/index.js +1 -1
  280. package/dist/components/multi-select/index.js +1 -1
  281. package/dist/components/multi-select/multi-select.d.ts.map +1 -1
  282. package/dist/components/muscle-scheme/index.js +1 -1
  283. package/dist/components/note-timeline/index.js +1 -1
  284. package/dist/components/notes-panel/index.js +1 -1
  285. package/dist/components/notice-group/index.d.ts +3 -0
  286. package/dist/components/notice-group/index.d.ts.map +1 -0
  287. package/dist/components/notice-group/index.js +6 -0
  288. package/dist/components/notice-group/index.js.map +1 -0
  289. package/dist/components/notice-group/notice-group.agent.d.ts +4 -0
  290. package/dist/components/notice-group/notice-group.agent.d.ts.map +1 -0
  291. package/dist/components/notice-group/notice-group.d.ts +43 -0
  292. package/dist/components/notice-group/notice-group.d.ts.map +1 -0
  293. package/dist/components/notification-tray/index.js +1 -1
  294. package/dist/components/operator-hero/index.js +1 -1
  295. package/dist/components/operator-hero/operator-hero.d.ts.map +1 -1
  296. package/dist/components/optical-prescription/index.js +1 -1
  297. package/dist/components/optical-prescription/optical-prescription-data.d.ts +8 -8
  298. package/dist/components/optical-prescription/optical-prescription-data.d.ts.map +1 -1
  299. package/dist/components/optical-prescription/optical-prescription.d.ts.map +1 -1
  300. package/dist/components/panel-header/index.js +1 -1
  301. package/dist/components/panel-header/panel-header.d.ts +10 -0
  302. package/dist/components/panel-header/panel-header.d.ts.map +1 -1
  303. package/dist/components/panel-subview/index.js +1 -1
  304. package/dist/components/patient-details/index.js +1 -1
  305. package/dist/components/patient-search/index.js +1 -1
  306. package/dist/components/patient-summary-card/index.js +1 -1
  307. package/dist/components/patient-table/index.js +1 -1
  308. package/dist/components/payment-form/index.js +1 -1
  309. package/dist/components/pdf-viewer/index.js +1 -1
  310. package/dist/components/periodontal-risk-chart/index.js +1 -1
  311. package/dist/components/periodontal-risk-chart/periodontal-risk-chart.d.ts.map +1 -1
  312. package/dist/components/practice-profile-hero/index.js +1 -1
  313. package/dist/components/practice-profile-hero/practice-profile-hero.d.ts +4 -1
  314. package/dist/components/practice-profile-hero/practice-profile-hero.d.ts.map +1 -1
  315. package/dist/components/practice-results/index.js +1 -1
  316. package/dist/components/practice-results/practice-results.d.ts +10 -2
  317. package/dist/components/practice-results/practice-results.d.ts.map +1 -1
  318. package/dist/components/pregnancy-dating/index.js +1 -1
  319. package/dist/components/product-hub-tray/index.js +1 -1
  320. package/dist/components/progress-notice/index.d.ts +3 -0
  321. package/dist/components/progress-notice/index.d.ts.map +1 -0
  322. package/dist/components/progress-notice/index.js +6 -0
  323. package/dist/components/progress-notice/index.js.map +1 -0
  324. package/dist/components/progress-notice/progress-notice.agent.d.ts +4 -0
  325. package/dist/components/progress-notice/progress-notice.agent.d.ts.map +1 -0
  326. package/dist/components/progress-notice/progress-notice.d.ts +81 -0
  327. package/dist/components/progress-notice/progress-notice.d.ts.map +1 -0
  328. package/dist/components/province-select/index.js +1 -1
  329. package/dist/components/radiograph-panel/index.js +1 -1
  330. package/dist/components/rating/index.js +1 -1
  331. package/dist/components/rating/rating.d.ts.map +1 -1
  332. package/dist/components/reviews-panel/index.js +1 -1
  333. package/dist/components/reviews-panel/reviews-panel.d.ts.map +1 -1
  334. package/dist/components/rich-text-editor/index.js +2 -2
  335. package/dist/components/select/index.js +1 -1
  336. package/dist/components/select/select.d.ts +6 -0
  337. package/dist/components/select/select.d.ts.map +1 -1
  338. package/dist/components/sign-document/index.js +1 -1
  339. package/dist/components/skeleton/index.d.ts +1 -1
  340. package/dist/components/skeleton/index.d.ts.map +1 -1
  341. package/dist/components/skeleton/index.js +1 -1
  342. package/dist/components/skeleton/skeleton.d.ts +41 -1
  343. package/dist/components/skeleton/skeleton.d.ts.map +1 -1
  344. package/dist/components/skeleton-scheme/index.js +1 -1
  345. package/dist/components/slot-grid/index.js +1 -1
  346. package/dist/components/tabs/index.js +1 -1
  347. package/dist/components/task-card/index.js +1 -1
  348. package/dist/components/task-editor/index.js +1 -1
  349. package/dist/components/task-tray/index.js +1 -1
  350. package/dist/components/tasks-panel/index.js +1 -1
  351. package/dist/components/theme-toggle/index.js +1 -1
  352. package/dist/components/theme-toggle/theme-toggle.d.ts.map +1 -1
  353. package/dist/components/timeline/index.js +1 -1
  354. package/dist/components/tool-rail/index.js +1 -1
  355. package/dist/components/transcript-panel/index.js +1 -1
  356. package/dist/components/treatment-receipt/index.js +1 -1
  357. package/dist/components/unit-converter/index.js +1 -1
  358. package/dist/components/voice-control-panel/index.js +1 -1
  359. package/dist/components/warning-stack/index.js +1 -1
  360. package/dist/components/workflow/index.js +1 -1
  361. package/dist/hooks/index.d.ts +1 -0
  362. package/dist/hooks/index.d.ts.map +1 -1
  363. package/dist/hooks/index.js +81 -76
  364. package/dist/hooks/index.js.map +1 -1
  365. package/dist/hooks/use-dismissed.d.ts +58 -0
  366. package/dist/hooks/use-dismissed.d.ts.map +1 -0
  367. package/dist/i18n/locales/ar.d.ts +22 -0
  368. package/dist/i18n/locales/ar.d.ts.map +1 -1
  369. package/dist/i18n/locales/ar.js +22 -0
  370. package/dist/i18n/locales/ar.js.map +1 -1
  371. package/dist/i18n/locales/de.d.ts +22 -0
  372. package/dist/i18n/locales/de.d.ts.map +1 -1
  373. package/dist/i18n/locales/de.js +22 -0
  374. package/dist/i18n/locales/de.js.map +1 -1
  375. package/dist/i18n/locales/el.d.ts +22 -0
  376. package/dist/i18n/locales/el.d.ts.map +1 -1
  377. package/dist/i18n/locales/el.js +22 -0
  378. package/dist/i18n/locales/el.js.map +1 -1
  379. package/dist/i18n/locales/en.d.ts +22 -0
  380. package/dist/i18n/locales/en.d.ts.map +1 -1
  381. package/dist/i18n/locales/en.js +22 -0
  382. package/dist/i18n/locales/en.js.map +1 -1
  383. package/dist/i18n/locales/es.d.ts +22 -0
  384. package/dist/i18n/locales/es.d.ts.map +1 -1
  385. package/dist/i18n/locales/es.js +22 -0
  386. package/dist/i18n/locales/es.js.map +1 -1
  387. package/dist/i18n/locales/fr.d.ts +22 -0
  388. package/dist/i18n/locales/fr.d.ts.map +1 -1
  389. package/dist/i18n/locales/fr.js +22 -0
  390. package/dist/i18n/locales/fr.js.map +1 -1
  391. package/dist/i18n/locales/hi.d.ts +22 -0
  392. package/dist/i18n/locales/hi.d.ts.map +1 -1
  393. package/dist/i18n/locales/hi.js +22 -0
  394. package/dist/i18n/locales/hi.js.map +1 -1
  395. package/dist/i18n/locales/it.d.ts +22 -0
  396. package/dist/i18n/locales/it.d.ts.map +1 -1
  397. package/dist/i18n/locales/it.js +22 -0
  398. package/dist/i18n/locales/it.js.map +1 -1
  399. package/dist/i18n/locales/ja.d.ts +22 -0
  400. package/dist/i18n/locales/ja.d.ts.map +1 -1
  401. package/dist/i18n/locales/ja.js +22 -0
  402. package/dist/i18n/locales/ja.js.map +1 -1
  403. package/dist/i18n/locales/nl.d.ts +22 -0
  404. package/dist/i18n/locales/nl.d.ts.map +1 -1
  405. package/dist/i18n/locales/nl.js +22 -0
  406. package/dist/i18n/locales/nl.js.map +1 -1
  407. package/dist/i18n/locales/pl.d.ts +22 -0
  408. package/dist/i18n/locales/pl.d.ts.map +1 -1
  409. package/dist/i18n/locales/pl.js +22 -0
  410. package/dist/i18n/locales/pl.js.map +1 -1
  411. package/dist/i18n/locales/pt.d.ts +22 -0
  412. package/dist/i18n/locales/pt.d.ts.map +1 -1
  413. package/dist/i18n/locales/pt.js +22 -0
  414. package/dist/i18n/locales/pt.js.map +1 -1
  415. package/dist/i18n/locales/ro.d.ts +22 -0
  416. package/dist/i18n/locales/ro.d.ts.map +1 -1
  417. package/dist/i18n/locales/ro.js +22 -0
  418. package/dist/i18n/locales/ro.js.map +1 -1
  419. package/dist/i18n/locales/ru.d.ts +22 -0
  420. package/dist/i18n/locales/ru.d.ts.map +1 -1
  421. package/dist/i18n/locales/ru.js +22 -0
  422. package/dist/i18n/locales/ru.js.map +1 -1
  423. package/dist/i18n/locales/sq.d.ts +22 -0
  424. package/dist/i18n/locales/sq.d.ts.map +1 -1
  425. package/dist/i18n/locales/sq.js +22 -0
  426. package/dist/i18n/locales/sq.js.map +1 -1
  427. package/dist/i18n/locales/sv.d.ts +22 -0
  428. package/dist/i18n/locales/sv.d.ts.map +1 -1
  429. package/dist/i18n/locales/sv.js +22 -0
  430. package/dist/i18n/locales/sv.js.map +1 -1
  431. package/dist/i18n/locales/tr.d.ts +22 -0
  432. package/dist/i18n/locales/tr.d.ts.map +1 -1
  433. package/dist/i18n/locales/tr.js +22 -0
  434. package/dist/i18n/locales/tr.js.map +1 -1
  435. package/dist/i18n/locales/zh.d.ts +22 -0
  436. package/dist/i18n/locales/zh.d.ts.map +1 -1
  437. package/dist/i18n/locales/zh.js +22 -0
  438. package/dist/i18n/locales/zh.js.map +1 -1
  439. package/dist/index.js +1194 -1183
  440. package/dist/index.js.map +1 -1
  441. package/dist/locales/ar.json +22 -0
  442. package/dist/locales/de.json +22 -0
  443. package/dist/locales/el.json +22 -0
  444. package/dist/locales/en.json +22 -0
  445. package/dist/locales/es.json +22 -0
  446. package/dist/locales/fr.json +22 -0
  447. package/dist/locales/hi.json +22 -0
  448. package/dist/locales/it.json +22 -0
  449. package/dist/locales/ja.json +22 -0
  450. package/dist/locales/nl.json +22 -0
  451. package/dist/locales/pl.json +22 -0
  452. package/dist/locales/pt.json +22 -0
  453. package/dist/locales/ro.json +22 -0
  454. package/dist/locales/ru.json +22 -0
  455. package/dist/locales/sq.json +22 -0
  456. package/dist/locales/sv.json +22 -0
  457. package/dist/locales/tr.json +22 -0
  458. package/dist/locales/zh.json +22 -0
  459. package/dist/patterns/alia-assistant/index.js +1 -1
  460. package/dist/patterns/anamnesis/anamnesis-export-pdf.d.ts.map +1 -1
  461. package/dist/patterns/anamnesis/index.js +1 -1
  462. package/dist/patterns/calendar/index.js +1 -1
  463. package/dist/patterns/forgot-password-form/index.js +1 -1
  464. package/dist/patterns/help-me-write-templates/index.js +2 -2
  465. package/dist/patterns/login-form/index.js +1 -1
  466. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  467. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  468. package/dist/patterns/registration-form/index.js +1 -1
  469. package/dist/patterns/signature-request/index.js +1 -1
  470. package/dist/tokens.css +1 -1
  471. package/package.json +9 -1
  472. package/dist/_chunks/ai-prompt-input-DSGSe4LH.js.map +0 -1
  473. package/dist/_chunks/alert-DjsJMGRE.js.map +0 -1
  474. package/dist/_chunks/anamnesis-summary-rows-BQ_EokKz.js.map +0 -1
  475. package/dist/_chunks/avatar-WZY3eGE7.js +0 -123
  476. package/dist/_chunks/avatar-WZY3eGE7.js.map +0 -1
  477. package/dist/_chunks/booking-tTVxKPQY.js.map +0 -1
  478. package/dist/_chunks/color-picker-BsggJovx.js.map +0 -1
  479. package/dist/_chunks/combobox-U5yfO6o0.js.map +0 -1
  480. package/dist/_chunks/contact-profile-card-C4-OCshj.js.map +0 -1
  481. package/dist/_chunks/dashboard-grid-B2MB7SRS.js +0 -1428
  482. package/dist/_chunks/dashboard-grid-B2MB7SRS.js.map +0 -1
  483. package/dist/_chunks/header-settings-BSH9Gk0J.js.map +0 -1
  484. package/dist/_chunks/map-view-BuVfJMEa.js.map +0 -1
  485. package/dist/_chunks/multi-select-CMaAQQgb.js.map +0 -1
  486. package/dist/_chunks/operator-hero-3_RG4Dkj.js.map +0 -1
  487. package/dist/_chunks/optical-prescription-CxfMsbxi.js.map +0 -1
  488. package/dist/_chunks/panel-header-BJkaUwnl.js +0 -128
  489. package/dist/_chunks/panel-header-BJkaUwnl.js.map +0 -1
  490. package/dist/_chunks/periodontal-risk-chart-CPy7CNFe.js.map +0 -1
  491. package/dist/_chunks/practice-profile-hero-Dfc0F60y.js +0 -193
  492. package/dist/_chunks/practice-profile-hero-Dfc0F60y.js.map +0 -1
  493. package/dist/_chunks/practice-results-BrUDDMXC.js.map +0 -1
  494. package/dist/_chunks/rating-C1Vrmpsi.js.map +0 -1
  495. package/dist/_chunks/reviews-panel-AvsVgtJu.js.map +0 -1
  496. package/dist/_chunks/select-k4gBdS8N.js.map +0 -1
  497. package/dist/_chunks/skeleton-B1KTdJ4N.js +0 -116
  498. package/dist/_chunks/skeleton-B1KTdJ4N.js.map +0 -1
  499. package/dist/_chunks/theme-toggle-Ctb77x6O.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ai-permission-notice-qsdm4Sx4.js","sources":["../../src/components/ai-permission-notice/ai-permission-notice.agent.ts","../../src/components/ai-permission-notice/ai-permission-notice.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — AiConsentBanner. */\n/* */\n/* Read-only structural surface: the current consent state and whether */\n/* the grant affordance is armed. Identifiers / structural state ONLY — */\n/* never the grantee's name or any PHI. The real consent gate lives */\n/* server-side; this adapter does not expose a grant action so an agent */\n/* cannot consent on a user's behalf. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { AiConsentBannerHandle } from './ai-permission-notice';\n\nexport const aiConsentBannerAgent: AgentAdapter<AiConsentBannerHandle> = {\n id: 'ai-consent-banner',\n capabilities: [],\n state: {\n consentState: {\n type: \"'granted' | 'required' | 'pending'\",\n descriptionKey: 'ui.agent.aiConsentBanner.state.consentState',\n description:\n 'Current consent state. Structural only — never the grantee identity.',\n read: (handle) => handle.getState(),\n },\n armed: {\n type: 'boolean',\n descriptionKey: 'ui.agent.aiConsentBanner.state.armed',\n description:\n 'Whether the consent confirmation checkbox is ticked (required state only).',\n read: (handle) => handle.isArmed(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'ai-consent-banner',\n description: 'Marks the AiConsentBanner root region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific banner from the agent.',\n },\n },\n};\n","import {\n forwardRef,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Alert } from '../alert/alert';\nimport { Badge } from '../badge/badge';\nimport { Button } from '../button/button';\nimport { Checkbox } from '../checkbox/checkbox';\nimport { Spinner } from '../spinner/spinner';\nimport { Timestamp } from '../timestamp/timestamp';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { aiConsentBannerAgent } from './ai-permission-notice.agent';\n\n/* -------------------------------------------------------------------- */\n/* AiConsentBanner */\n/* */\n/* Presentational AI-consent gate surfaced above an AI-assisted surface */\n/* (e.g. Alfascribe consultation transcription). The SERVER owns the */\n/* real gate — this component only reflects the consent record and lets */\n/* the operator initiate a grant; it never enforces access itself. */\n/* */\n/* Three states drive the Alert variant + body: */\n/* - granted → success Alert with a Badge + when/who it was granted. */\n/* - required → info Alert with a Checkbox-gated Grant Button. */\n/* - pending → info Alert in a disabled, Spinner-busy state while the */\n/* server persists the grant. */\n/* */\n/* All kit text flows through useTranslation('ui') against the */\n/* `aiConsentBanner.*` namespace. `subject` picks the kit-owned wording */\n/* preset; `copy` lets a host replace single strings with its own text. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* CVA — root */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva('ds:w-full ds:text-[color:var(--foreground)]', {\n variants: {\n state: {\n granted: '',\n required: '',\n pending: '',\n },\n },\n defaultVariants: {\n state: 'required',\n },\n});\n\n/* -------------------------------------------------------------------- */\n/* State derivation */\n/* -------------------------------------------------------------------- */\n\nexport type AiConsentState = NonNullable<\n VariantProps<typeof rootVariants>['state']\n>;\n\n/** Heading levels `AiConsentBanner.headingLevel` accepts. */\nexport type AiConsentBannerHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\n/** Pending wins over granted/required so the busy state is never masked. */\nfunction deriveState(granted: boolean, pending: boolean): AiConsentState {\n if (pending) return 'pending';\n return granted ? 'granted' : 'required';\n}\n\n/* -------------------------------------------------------------------- */\n/* Subject presets */\n/* -------------------------------------------------------------------- */\n\n/** What the consent covers; each subject has kit-owned, translated wording.\n * `'patient-record'` (default) is one patient's record. `'practice-statistics'`\n * is the practice's aggregate figures (totals, rates), never patient data. */\nexport type AiConsentSubject = 'patient-record' | 'practice-statistics';\n\ntype AiConsentSubjectField =\n | 'descriptionRequired'\n | 'descriptionGranted'\n | 'confirmLabel'\n | 'notAllowed';\n\n/* Only these four strings differ by subject; the rest share one key each. */\nconst SUBJECT_KEYS = {\n 'patient-record': {\n descriptionRequired: {\n key: 'aiConsentBanner.description.required',\n fallback: 'AI assistance requires recorded consent before it can run.',\n },\n descriptionGranted: {\n key: 'aiConsentBanner.description.granted',\n fallback: 'AI assistance is enabled for this record.',\n },\n confirmLabel: {\n key: 'aiConsentBanner.confirmLabel',\n fallback: 'I confirm consent has been obtained for AI assistance.',\n },\n notAllowed: {\n key: 'aiConsentBanner.notAllowed',\n fallback: 'You do not have permission to grant AI assistance consent.',\n },\n },\n 'practice-statistics': {\n descriptionRequired: {\n key: 'aiConsentBanner.practiceStatistics.description.required',\n fallback:\n \"AI assistance needs consent before it can read this practice's statistics. It uses aggregate figures only, never patient data.\",\n },\n descriptionGranted: {\n key: 'aiConsentBanner.practiceStatistics.description.granted',\n fallback:\n \"AI assistance can read this practice's statistics. It uses aggregate figures only, never patient data.\",\n },\n confirmLabel: {\n key: 'aiConsentBanner.practiceStatistics.confirmLabel',\n fallback:\n 'I may decide for this practice, and I agree to AI assistance reading its statistics.',\n },\n notAllowed: {\n key: 'aiConsentBanner.practiceStatistics.notAllowed',\n fallback:\n 'You do not have permission to grant AI assistance consent for this practice.',\n },\n },\n} as const satisfies Record<\n AiConsentSubject,\n Record<AiConsentSubjectField, { key: string; fallback: string }>\n>;\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\n/**\n * Patient AI-consent gate for an AI surface that sends patient data to a\n * service: the RichTextEditor's Help-me-write action and dictation mics, and\n * the VoiceControlPanel's microphone. Omit entirely for today's ungated\n * behaviour — no existing host breaks.\n *\n * Present and `granted: false`: the affordances stay visible (this never\n * hides a control), but using one shows the kit's `AiConsentBanner` instead\n * of starting the AI action. When `granted` flips `true` after a Grant click\n * in that banner, the surface resumes exactly the action it gated; when it\n * flips for any other reason (another patient, another tab) it only closes\n * the banner.\n *\n * Present and `granted: true`: normal behaviour.\n */\nexport interface AiConsentGate {\n /** Whether AI consent has already been recorded for the current patient. */\n granted: boolean;\n /** When consent was granted — passed straight to `AiConsentBanner`. */\n grantedAt?: string | number | Date;\n /** Who granted consent — passed straight to `AiConsentBanner`. */\n grantedBy?: string;\n /** Whether the signed-in reader may grant consent. Default `true`; treated\n * as `false` when `onGrant` is absent, so no dead Grant control shows. */\n canGrant?: boolean;\n /** The grant is being persisted server-side (host-driven busy state). */\n pending?: boolean;\n /**\n * Fired when the reader confirms the grant in the banner. A returned\n * promise drives the banner's own pending/Spinner state until it settles,\n * in addition to (or absent) a host-supplied `pending`.\n */\n onGrant?: () => void | Promise<void>;\n}\n\n/** Host-translated strings; the host owns their wording and translation.\n * Each one replaces the `subject` preset for that string only. Plain text,\n * not i18n keys: interpolate any values (a practice name) before passing. */\nexport interface AiConsentBannerCopy {\n /** Banner heading. */\n title?: string;\n /** Description in the required and pending states. */\n descriptionRequired?: string;\n /** Description in the granted state. */\n descriptionGranted?: string;\n /** Label of the confirmation checkbox. */\n confirmLabel?: string;\n /** Label of the Grant button. */\n grantButton?: string;\n /** Note shown instead of the grant controls when `canGrant` is false. */\n notAllowed?: string;\n /** Badge text in the granted state. */\n badgeGranted?: string;\n /** Busy text (and Spinner label) in the pending state. */\n pendingLabel?: string;\n}\n\n/** Agent-readiness curated handle. Exposes the structural consent state only. */\nexport interface AiConsentBannerHandle {\n /** Current derived state: 'granted' | 'required' | 'pending'. */\n getState: () => AiConsentState;\n /** Whether the Grant affordance is currently armed (checkbox ticked). */\n isArmed: () => boolean;\n}\n\nexport interface AiConsentBannerProps extends Omit<\n ComponentPropsWithoutRef<'div'>,\n 'aria-label' | 'children' | 'role'\n> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so an\n * agent / MCP UI bridge can address this specific banner. Mirrored to the\n * real DOM `id`.\n */\n id?: string;\n /** Whether consent has already been granted. Server-sourced. */\n granted: boolean;\n /**\n * When consent was granted — ISO-8601 string, ms-epoch, or Date. Rendered\n * via `Timestamp` in the granted state.\n */\n grantedAt?: string | number | Date;\n /** Who granted consent (operator display name / role). Granted state only. */\n grantedBy?: string;\n /**\n * Whether the current user is allowed to grant consent. When `false`, the\n * required-state Grant affordance is hidden and a not-allowed note shows.\n * Default `true`.\n */\n canGrant?: boolean;\n /** The grant is being persisted server-side — shows the busy Spinner state. */\n pending?: boolean;\n /** Fired when the operator confirms the consent grant. */\n onGrantConsent?: () => void;\n /**\n * Heading level for the banner's own title, so it can be nested under a\n * host section's heading without skipping levels (axe `heading-order`).\n * Additive: default `5` matches the banner's original, unconditional\n * `<h5>` — every existing consumer is unaffected.\n */\n headingLevel?: AiConsentBannerHeadingLevel;\n /** What the consent covers; picks the kit's translated wording. Default\n * `'patient-record'`, which renders exactly as before this prop existed. */\n subject?: AiConsentSubject;\n /** Host-translated strings; the host owns their wording and translation.\n * Each key overrides only its own string. `title` also names the region,\n * unless `aria-label` is passed. */\n copy?: Partial<AiConsentBannerCopy>;\n /** Override the region's accessible name. */\n 'aria-label'?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const AiConsentBanner = forwardRef<HTMLDivElement, AiConsentBannerProps>(\n (\n {\n id,\n granted,\n grantedAt,\n grantedBy,\n canGrant = true,\n pending = false,\n onGrantConsent,\n headingLevel = 5,\n subject = 'patient-record',\n copy,\n 'aria-label': ariaLabel,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const state = deriveState(granted, pending);\n\n // A host string wins over the preset for that string only. A blank or\n // whitespace-only one counts as missing, so no control loses its name.\n const own = (value?: string) => value?.trim() || undefined;\n // An unknown subject from an untyped host falls back to the default.\n const keys = SUBJECT_KEYS[subject] ?? SUBJECT_KEYS['patient-record'];\n const text = {\n title:\n own(copy?.title) || t('aiConsentBanner.title', 'AI assistance consent'),\n descriptionRequired:\n own(copy?.descriptionRequired) ||\n t(keys.descriptionRequired.key, keys.descriptionRequired.fallback),\n descriptionGranted:\n own(copy?.descriptionGranted) ||\n t(keys.descriptionGranted.key, keys.descriptionGranted.fallback),\n confirmLabel:\n own(copy?.confirmLabel) ||\n t(keys.confirmLabel.key, keys.confirmLabel.fallback),\n grantButton:\n own(copy?.grantButton) ||\n t('aiConsentBanner.grantButton', 'Grant consent'),\n notAllowed:\n own(copy?.notAllowed) ||\n t(keys.notAllowed.key, keys.notAllowed.fallback),\n badgeGranted:\n own(copy?.badgeGranted) ||\n t('aiConsentBanner.badge.granted', 'Consent granted'),\n pendingLabel:\n own(copy?.pendingLabel) ||\n t('aiConsentBanner.pendingLabel', 'Saving consent…'),\n };\n\n // Grant stays disabled until the checkbox is ticked. Any change of subject\n // or statement unticks it, even back to an earlier one, so a tick only\n // confirms what was on screen when it was given.\n const statement = [\n subject,\n text.confirmLabel,\n text.descriptionRequired,\n ].join('\\u0000');\n const [ticked, setTicked] = useState(false);\n const [tickedFor, setTickedFor] = useState(statement);\n if (tickedFor !== statement) {\n setTickedFor(statement);\n setTicked(false);\n }\n const armed = ticked && tickedFor === statement;\n\n const armedRef = useRef(armed);\n armedRef.current = armed;\n\n const handle = useMemo<AiConsentBannerHandle>(\n () => ({\n getState: () => deriveState(granted, pending),\n isArmed: () => armedRef.current,\n }),\n [granted, pending],\n );\n useAgentRegistration(aiConsentBannerAgent, handle, id);\n\n // A host title also names the region, so the name matches the heading.\n const resolvedAriaLabel =\n own(ariaLabel) ||\n own(copy?.title) ||\n t('aiConsentBanner.regionLabel', 'AI assistance consent');\n\n // Alert variant per state: granted → success, required/pending → info.\n const alertVariant = state === 'granted' ? 'success' : 'info';\n\n let body: React.ReactNode;\n if (state === 'granted') {\n body = (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n <Badge variant=\"success\">{text.badgeGranted}</Badge>\n {grantedAt !== undefined ? (\n <span className=\"type-body-sm ds:text-[color:var(--muted-foreground)]\">\n {t('aiConsentBanner.grantedAtPrefix', 'Granted')}{' '}\n <Timestamp value={grantedAt} format=\"relative\" shape=\"inline\" />\n </span>\n ) : null}\n </div>\n {grantedBy ? (\n <p className=\"type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]\">\n {t('aiConsentBanner.grantedBy', {\n name: grantedBy,\n defaultValue: 'By {{name}}',\n })}\n </p>\n ) : null}\n </div>\n );\n } else if (state === 'pending') {\n body = (\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <Spinner variant=\"pulse\" size=\"sm\" label={text.pendingLabel} />\n <span className=\"type-body-sm ds:text-[color:var(--muted-foreground)]\">\n {text.pendingLabel}\n </span>\n </div>\n );\n } else {\n // required\n body = canGrant ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <Checkbox\n checked={armed}\n onCheckedChange={(next) => setTicked(next === true)}\n label={text.confirmLabel}\n />\n <Alert.Action>\n <Button\n intent=\"primary\"\n size=\"sm\"\n disabled={!armed}\n onClick={onGrantConsent}\n >\n {text.grantButton}\n </Button>\n </Alert.Action>\n </div>\n ) : (\n <p className=\"type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]\">\n {text.notAllowed}\n </p>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-label={resolvedAriaLabel}\n aria-busy={state === 'pending' ? true : undefined}\n data-component=\"ai-consent-banner\"\n data-component-id={id}\n data-state={state}\n id={id}\n className={rootVariants({ state, className })}\n {...rest}\n >\n <Alert\n variant={alertVariant}\n icon={state === 'pending' ? null : undefined}\n >\n <Alert.Title as={`h${headingLevel}` as const}>\n {text.title}\n </Alert.Title>\n <Alert.Description>\n {state === 'granted'\n ? text.descriptionGranted\n : text.descriptionRequired}\n </Alert.Description>\n {body}\n </Alert>\n </div>\n );\n },\n);\n\nAiConsentBanner.displayName = 'AiConsentBanner';\n"],"names":["aiConsentBannerAgent","handle","rootVariants","cva","deriveState","granted","pending","SUBJECT_KEYS","AiConsentBanner","forwardRef","id","grantedAt","grantedBy","canGrant","onGrantConsent","headingLevel","subject","copy","ariaLabel","className","rest","ref","useTranslation","state","own","value","keys","text","statement","ticked","setTicked","useState","tickedFor","setTickedFor","armed","armedRef","useRef","useMemo","useAgentRegistration","resolvedAriaLabel","alertVariant","body","jsxs","jsx","Badge","Timestamp","Spinner","Checkbox","next","Alert","Button"],"mappings":"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"}
1
+ {"version":3,"file":"ai-permission-notice-C00i6VhY.js","sources":["../../src/components/ai-permission-notice/ai-permission-notice.agent.ts","../../src/components/ai-permission-notice/ai-permission-notice.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — AiConsentBanner. */\n/* */\n/* Read-only structural surface: the current consent state and whether */\n/* the grant affordance is armed. Identifiers / structural state ONLY — */\n/* never the grantee's name or any PHI. The real consent gate lives */\n/* server-side; this adapter does not expose a grant action so an agent */\n/* cannot consent on a user's behalf. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { AiConsentBannerHandle } from './ai-permission-notice';\n\nexport const aiConsentBannerAgent: AgentAdapter<AiConsentBannerHandle> = {\n id: 'ai-consent-banner',\n capabilities: [],\n state: {\n consentState: {\n type: \"'granted' | 'required' | 'pending'\",\n descriptionKey: 'ui.agent.aiConsentBanner.state.consentState',\n description:\n 'Current consent state. Structural only — never the grantee identity.',\n read: (handle) => handle.getState(),\n },\n armed: {\n type: 'boolean',\n descriptionKey: 'ui.agent.aiConsentBanner.state.armed',\n description:\n 'Whether the consent confirmation checkbox is ticked (required state only).',\n read: (handle) => handle.isArmed(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'ai-consent-banner',\n description: 'Marks the AiConsentBanner root region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific banner from the agent.',\n },\n },\n};\n","import {\n forwardRef,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Alert } from '../alert/alert';\nimport { Badge } from '../badge/badge';\nimport { Button } from '../button/button';\nimport { Checkbox } from '../checkbox/checkbox';\nimport { Spinner } from '../spinner/spinner';\nimport { Timestamp } from '../timestamp/timestamp';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { aiConsentBannerAgent } from './ai-permission-notice.agent';\n\n/* -------------------------------------------------------------------- */\n/* AiConsentBanner */\n/* */\n/* Presentational AI-consent gate surfaced above an AI-assisted surface */\n/* (e.g. Alfascribe consultation transcription). The SERVER owns the */\n/* real gate — this component only reflects the consent record and lets */\n/* the operator initiate a grant; it never enforces access itself. */\n/* */\n/* Three states drive the Alert variant + body: */\n/* - granted → success Alert with a Badge + when/who it was granted. */\n/* - required → info Alert with a Checkbox-gated Grant Button. */\n/* - pending → info Alert in a disabled, Spinner-busy state while the */\n/* server persists the grant. */\n/* */\n/* All kit text flows through useTranslation('ui') against the */\n/* `aiConsentBanner.*` namespace. `subject` picks the kit-owned wording */\n/* preset; `copy` lets a host replace single strings with its own text. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* CVA — root */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva('ds:w-full ds:text-[color:var(--foreground)]', {\n variants: {\n state: {\n granted: '',\n required: '',\n pending: '',\n },\n },\n defaultVariants: {\n state: 'required',\n },\n});\n\n/* -------------------------------------------------------------------- */\n/* State derivation */\n/* -------------------------------------------------------------------- */\n\nexport type AiConsentState = NonNullable<\n VariantProps<typeof rootVariants>['state']\n>;\n\n/** Heading levels `AiConsentBanner.headingLevel` accepts. */\nexport type AiConsentBannerHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\n/** Pending wins over granted/required so the busy state is never masked. */\nfunction deriveState(granted: boolean, pending: boolean): AiConsentState {\n if (pending) return 'pending';\n return granted ? 'granted' : 'required';\n}\n\n/* -------------------------------------------------------------------- */\n/* Subject presets */\n/* -------------------------------------------------------------------- */\n\n/** What the consent covers; each subject has kit-owned, translated wording.\n * `'patient-record'` (default) is one patient's record. `'practice-statistics'`\n * is the practice's aggregate figures (totals, rates), never patient data. */\nexport type AiConsentSubject = 'patient-record' | 'practice-statistics';\n\ntype AiConsentSubjectField =\n | 'descriptionRequired'\n | 'descriptionGranted'\n | 'confirmLabel'\n | 'notAllowed';\n\n/* Only these four strings differ by subject; the rest share one key each. */\nconst SUBJECT_KEYS = {\n 'patient-record': {\n descriptionRequired: {\n key: 'aiConsentBanner.description.required',\n fallback: 'AI assistance requires recorded consent before it can run.',\n },\n descriptionGranted: {\n key: 'aiConsentBanner.description.granted',\n fallback: 'AI assistance is enabled for this record.',\n },\n confirmLabel: {\n key: 'aiConsentBanner.confirmLabel',\n fallback: 'I confirm consent has been obtained for AI assistance.',\n },\n notAllowed: {\n key: 'aiConsentBanner.notAllowed',\n fallback: 'You do not have permission to grant AI assistance consent.',\n },\n },\n 'practice-statistics': {\n descriptionRequired: {\n key: 'aiConsentBanner.practiceStatistics.description.required',\n fallback:\n \"AI assistance needs consent before it can read this practice's statistics. It uses aggregate figures only, never patient data.\",\n },\n descriptionGranted: {\n key: 'aiConsentBanner.practiceStatistics.description.granted',\n fallback:\n \"AI assistance can read this practice's statistics. It uses aggregate figures only, never patient data.\",\n },\n confirmLabel: {\n key: 'aiConsentBanner.practiceStatistics.confirmLabel',\n fallback:\n 'I may decide for this practice, and I agree to AI assistance reading its statistics.',\n },\n notAllowed: {\n key: 'aiConsentBanner.practiceStatistics.notAllowed',\n fallback:\n 'You do not have permission to grant AI assistance consent for this practice.',\n },\n },\n} as const satisfies Record<\n AiConsentSubject,\n Record<AiConsentSubjectField, { key: string; fallback: string }>\n>;\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\n/**\n * Patient AI-consent gate for an AI surface that sends patient data to a\n * service: the RichTextEditor's Help-me-write action and dictation mics, and\n * the VoiceControlPanel's microphone. Omit entirely for today's ungated\n * behaviour — no existing host breaks.\n *\n * Present and `granted: false`: the affordances stay visible (this never\n * hides a control), but using one shows the kit's `AiConsentBanner` instead\n * of starting the AI action. When `granted` flips `true` after a Grant click\n * in that banner, the surface resumes exactly the action it gated; when it\n * flips for any other reason (another patient, another tab) it only closes\n * the banner.\n *\n * Present and `granted: true`: normal behaviour.\n */\nexport interface AiConsentGate {\n /** Whether AI consent has already been recorded for the current patient. */\n granted: boolean;\n /** When consent was granted — passed straight to `AiConsentBanner`. */\n grantedAt?: string | number | Date;\n /** Who granted consent — passed straight to `AiConsentBanner`. */\n grantedBy?: string;\n /** Whether the signed-in reader may grant consent. Default `true`; treated\n * as `false` when `onGrant` is absent, so no dead Grant control shows. */\n canGrant?: boolean;\n /** The grant is being persisted server-side (host-driven busy state). */\n pending?: boolean;\n /**\n * Fired when the reader confirms the grant in the banner. A returned\n * promise drives the banner's own pending/Spinner state until it settles,\n * in addition to (or absent) a host-supplied `pending`.\n */\n onGrant?: () => void | Promise<void>;\n}\n\n/** Host-translated strings; the host owns their wording and translation.\n * Each one replaces the `subject` preset for that string only. Plain text,\n * not i18n keys: interpolate any values (a practice name) before passing. */\nexport interface AiConsentBannerCopy {\n /** Banner heading. */\n title?: string;\n /** Description in the required and pending states. */\n descriptionRequired?: string;\n /** Description in the granted state. */\n descriptionGranted?: string;\n /** Label of the confirmation checkbox. */\n confirmLabel?: string;\n /** Label of the Grant button. */\n grantButton?: string;\n /** Note shown instead of the grant controls when `canGrant` is false. */\n notAllowed?: string;\n /** Badge text in the granted state. */\n badgeGranted?: string;\n /** Busy text (and Spinner label) in the pending state. */\n pendingLabel?: string;\n}\n\n/** Agent-readiness curated handle. Exposes the structural consent state only. */\nexport interface AiConsentBannerHandle {\n /** Current derived state: 'granted' | 'required' | 'pending'. */\n getState: () => AiConsentState;\n /** Whether the Grant affordance is currently armed (checkbox ticked). */\n isArmed: () => boolean;\n}\n\nexport interface AiConsentBannerProps extends Omit<\n ComponentPropsWithoutRef<'div'>,\n 'aria-label' | 'children' | 'role'\n> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so an\n * agent / MCP UI bridge can address this specific banner. Mirrored to the\n * real DOM `id`.\n */\n id?: string;\n /** Whether consent has already been granted. Server-sourced. */\n granted: boolean;\n /**\n * When consent was granted — ISO-8601 string, ms-epoch, or Date. Rendered\n * via `Timestamp` in the granted state.\n */\n grantedAt?: string | number | Date;\n /** Who granted consent (operator display name / role). Granted state only. */\n grantedBy?: string;\n /**\n * Whether the current user is allowed to grant consent. When `false`, the\n * required-state Grant affordance is hidden and a not-allowed note shows.\n * Default `true`.\n */\n canGrant?: boolean;\n /** The grant is being persisted server-side — shows the busy Spinner state. */\n pending?: boolean;\n /** Fired when the operator confirms the consent grant. */\n onGrantConsent?: () => void;\n /**\n * Heading level for the banner's own title, so it can be nested under a\n * host section's heading without skipping levels (axe `heading-order`).\n * Additive: default `5` matches the banner's original, unconditional\n * `<h5>` — every existing consumer is unaffected.\n */\n headingLevel?: AiConsentBannerHeadingLevel;\n /** What the consent covers; picks the kit's translated wording. Default\n * `'patient-record'`, which renders exactly as before this prop existed. */\n subject?: AiConsentSubject;\n /** Host-translated strings; the host owns their wording and translation.\n * Each key overrides only its own string. `title` also names the region,\n * unless `aria-label` is passed. */\n copy?: Partial<AiConsentBannerCopy>;\n /** Override the region's accessible name. */\n 'aria-label'?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const AiConsentBanner = forwardRef<HTMLDivElement, AiConsentBannerProps>(\n (\n {\n id,\n granted,\n grantedAt,\n grantedBy,\n canGrant = true,\n pending = false,\n onGrantConsent,\n headingLevel = 5,\n subject = 'patient-record',\n copy,\n 'aria-label': ariaLabel,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const state = deriveState(granted, pending);\n\n // A host string wins over the preset for that string only. A blank or\n // whitespace-only one counts as missing, so no control loses its name.\n const own = (value?: string) => value?.trim() || undefined;\n // An unknown subject from an untyped host falls back to the default.\n const keys = SUBJECT_KEYS[subject] ?? SUBJECT_KEYS['patient-record'];\n const text = {\n title:\n own(copy?.title) || t('aiConsentBanner.title', 'AI assistance consent'),\n descriptionRequired:\n own(copy?.descriptionRequired) ||\n t(keys.descriptionRequired.key, keys.descriptionRequired.fallback),\n descriptionGranted:\n own(copy?.descriptionGranted) ||\n t(keys.descriptionGranted.key, keys.descriptionGranted.fallback),\n confirmLabel:\n own(copy?.confirmLabel) ||\n t(keys.confirmLabel.key, keys.confirmLabel.fallback),\n grantButton:\n own(copy?.grantButton) ||\n t('aiConsentBanner.grantButton', 'Grant consent'),\n notAllowed:\n own(copy?.notAllowed) ||\n t(keys.notAllowed.key, keys.notAllowed.fallback),\n badgeGranted:\n own(copy?.badgeGranted) ||\n t('aiConsentBanner.badge.granted', 'Consent granted'),\n pendingLabel:\n own(copy?.pendingLabel) ||\n t('aiConsentBanner.pendingLabel', 'Saving consent…'),\n };\n\n // Grant stays disabled until the checkbox is ticked. Any change of subject\n // or statement unticks it, even back to an earlier one, so a tick only\n // confirms what was on screen when it was given.\n const statement = [\n subject,\n text.confirmLabel,\n text.descriptionRequired,\n ].join('\\u0000');\n const [ticked, setTicked] = useState(false);\n const [tickedFor, setTickedFor] = useState(statement);\n if (tickedFor !== statement) {\n setTickedFor(statement);\n setTicked(false);\n }\n const armed = ticked && tickedFor === statement;\n\n const armedRef = useRef(armed);\n armedRef.current = armed;\n\n const handle = useMemo<AiConsentBannerHandle>(\n () => ({\n getState: () => deriveState(granted, pending),\n isArmed: () => armedRef.current,\n }),\n [granted, pending],\n );\n useAgentRegistration(aiConsentBannerAgent, handle, id);\n\n // A host title also names the region, so the name matches the heading.\n const resolvedAriaLabel =\n own(ariaLabel) ||\n own(copy?.title) ||\n t('aiConsentBanner.regionLabel', 'AI assistance consent');\n\n // Alert variant per state: granted → success, required/pending → info.\n const alertVariant = state === 'granted' ? 'success' : 'info';\n\n let body: React.ReactNode;\n if (state === 'granted') {\n body = (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n <Badge variant=\"success\">{text.badgeGranted}</Badge>\n {grantedAt !== undefined ? (\n <span className=\"type-body-sm ds:text-[color:var(--muted-foreground)]\">\n {t('aiConsentBanner.grantedAtPrefix', 'Granted')}{' '}\n <Timestamp value={grantedAt} format=\"relative\" shape=\"inline\" />\n </span>\n ) : null}\n </div>\n {grantedBy ? (\n <p className=\"type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]\">\n {t('aiConsentBanner.grantedBy', {\n name: grantedBy,\n defaultValue: 'By {{name}}',\n })}\n </p>\n ) : null}\n </div>\n );\n } else if (state === 'pending') {\n body = (\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <Spinner variant=\"pulse\" size=\"sm\" label={text.pendingLabel} />\n <span className=\"type-body-sm ds:text-[color:var(--muted-foreground)]\">\n {text.pendingLabel}\n </span>\n </div>\n );\n } else {\n // required\n body = canGrant ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <Checkbox\n checked={armed}\n onCheckedChange={(next) => setTicked(next === true)}\n label={text.confirmLabel}\n />\n <Alert.Action>\n <Button\n intent=\"primary\"\n size=\"sm\"\n disabled={!armed}\n onClick={onGrantConsent}\n >\n {text.grantButton}\n </Button>\n </Alert.Action>\n </div>\n ) : (\n <p className=\"type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]\">\n {text.notAllowed}\n </p>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-label={resolvedAriaLabel}\n aria-busy={state === 'pending' ? true : undefined}\n data-component=\"ai-consent-banner\"\n data-component-id={id}\n data-state={state}\n id={id}\n className={rootVariants({ state, className })}\n {...rest}\n >\n <Alert\n variant={alertVariant}\n icon={state === 'pending' ? null : undefined}\n >\n <Alert.Title as={`h${headingLevel}` as const}>\n {text.title}\n </Alert.Title>\n <Alert.Description>\n {state === 'granted'\n ? text.descriptionGranted\n : text.descriptionRequired}\n </Alert.Description>\n {body}\n </Alert>\n </div>\n );\n },\n);\n\nAiConsentBanner.displayName = 'AiConsentBanner';\n"],"names":["aiConsentBannerAgent","handle","rootVariants","cva","deriveState","granted","pending","SUBJECT_KEYS","AiConsentBanner","forwardRef","id","grantedAt","grantedBy","canGrant","onGrantConsent","headingLevel","subject","copy","ariaLabel","className","rest","ref","useTranslation","state","own","value","keys","text","statement","ticked","setTicked","useState","tickedFor","setTickedFor","armed","armedRef","useRef","useMemo","useAgentRegistration","resolvedAriaLabel","alertVariant","body","jsxs","jsx","Badge","Timestamp","Spinner","Checkbox","next","Alert","Button"],"mappings":";;;;;;;;;;;AAaO,MAAMA,IAA4D;AAAA,EACvE,IAAI;AAAA,EACJ,cAAc,CAAA;AAAA,EACd,OAAO;AAAA,IACL,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACC,MAAWA,EAAO,SAAA;AAAA,IAAS;AAAA,IAEpC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACA,MAAWA,EAAO,QAAA;AAAA,IAAQ;AAAA,EACnC;AAAA,EAEF,SAAS,CAAA;AAAA,EACT,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aACE;AAAA,IAAA;AAAA,EACJ;AAEJ,GCLMC,IAAeC,EAAI,+CAA+C;AAAA,EACtE,UAAU;AAAA,IACR,OAAO;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS;AAAA,IAAA;AAAA,EACX;AAAA,EAEF,iBAAiB;AAAA,IACf,OAAO;AAAA,EAAA;AAEX,CAAC;AAcD,SAASC,EAAYC,GAAkBC,GAAkC;AACvE,SAAIA,IAAgB,YACbD,IAAU,YAAY;AAC/B;AAkBA,MAAME,IAAe;AAAA,EACnB,kBAAkB;AAAA,IAChB,qBAAqB;AAAA,MACnB,KAAK;AAAA,MACL,UAAU;AAAA,IAAA;AAAA,IAEZ,oBAAoB;AAAA,MAClB,KAAK;AAAA,MACL,UAAU;AAAA,IAAA;AAAA,IAEZ,cAAc;AAAA,MACZ,KAAK;AAAA,MACL,UAAU;AAAA,IAAA;AAAA,IAEZ,YAAY;AAAA,MACV,KAAK;AAAA,MACL,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,uBAAuB;AAAA,IACrB,qBAAqB;AAAA,MACnB,KAAK;AAAA,MACL,UACE;AAAA,IAAA;AAAA,IAEJ,oBAAoB;AAAA,MAClB,KAAK;AAAA,MACL,UACE;AAAA,IAAA;AAAA,IAEJ,cAAc;AAAA,MACZ,KAAK;AAAA,MACL,UACE;AAAA,IAAA;AAAA,IAEJ,YAAY;AAAA,MACV,KAAK;AAAA,MACL,UACE;AAAA,IAAA;AAAA,EACJ;AAEJ,GA6HaC,IAAkBC;AAAA,EAC7B,CACE;AAAA,IACE,IAAAC;AAAA,IACA,SAAAL;AAAA,IACA,WAAAM;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,SAAAP,IAAU;AAAA,IACV,gBAAAQ;AAAA,IACA,cAAAC,IAAe;AAAA,IACf,SAAAC,IAAU;AAAA,IACV,MAAAC;AAAA,IACA,cAAcC;AAAA,IACd,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,EAAA,IAAMC,EAAe,IAAI,GAC3BC,IAAQnB,EAAYC,GAASC,CAAO,GAIpCkB,IAAM,CAACC,OAAmBA,KAAA,gBAAAA,EAAO,WAAU,QAE3CC,IAAOnB,EAAaS,CAAO,KAAKT,EAAa,gBAAgB,GAC7DoB,IAAO;AAAA,MACX,OACEH,EAAIP,KAAA,gBAAAA,EAAM,KAAK,KAAK,EAAE,yBAAyB,uBAAuB;AAAA,MACxE,qBACEO,EAAIP,KAAA,gBAAAA,EAAM,mBAAmB,KAC7B,EAAES,EAAK,oBAAoB,KAAKA,EAAK,oBAAoB,QAAQ;AAAA,MACnE,oBACEF,EAAIP,KAAA,gBAAAA,EAAM,kBAAkB,KAC5B,EAAES,EAAK,mBAAmB,KAAKA,EAAK,mBAAmB,QAAQ;AAAA,MACjE,cACEF,EAAIP,KAAA,gBAAAA,EAAM,YAAY,KACtB,EAAES,EAAK,aAAa,KAAKA,EAAK,aAAa,QAAQ;AAAA,MACrD,aACEF,EAAIP,KAAA,gBAAAA,EAAM,WAAW,KACrB,EAAE,+BAA+B,eAAe;AAAA,MAClD,YACEO,EAAIP,KAAA,gBAAAA,EAAM,UAAU,KACpB,EAAES,EAAK,WAAW,KAAKA,EAAK,WAAW,QAAQ;AAAA,MACjD,cACEF,EAAIP,KAAA,gBAAAA,EAAM,YAAY,KACtB,EAAE,iCAAiC,iBAAiB;AAAA,MACtD,cACEO,EAAIP,KAAA,gBAAAA,EAAM,YAAY,KACtB,EAAE,gCAAgC,iBAAiB;AAAA,IAAA,GAMjDW,IAAY;AAAA,MAChBZ;AAAA,MACAW,EAAK;AAAA,MACLA,EAAK;AAAA,IAAA,EACL,KAAK,IAAQ,GACT,CAACE,GAAQC,CAAS,IAAIC,EAAS,EAAK,GACpC,CAACC,GAAWC,CAAY,IAAIF,EAASH,CAAS;AACpD,IAAII,MAAcJ,MAChBK,EAAaL,CAAS,GACtBE,EAAU,EAAK;AAEjB,UAAMI,IAAQL,KAAUG,MAAcJ,GAEhCO,IAAWC,EAAOF,CAAK;AAC7B,IAAAC,EAAS,UAAUD;AAEnB,UAAMjC,IAASoC;AAAA,MACb,OAAO;AAAA,QACL,UAAU,MAAMjC,EAAYC,GAASC,CAAO;AAAA,QAC5C,SAAS,MAAM6B,EAAS;AAAA,MAAA;AAAA,MAE1B,CAAC9B,GAASC,CAAO;AAAA,IAAA;AAEnB,IAAAgC,EAAqBtC,GAAsBC,GAAQS,CAAE;AAGrD,UAAM6B,IACJf,EAAIN,CAAS,KACbM,EAAIP,KAAA,gBAAAA,EAAM,KAAK,KACf,EAAE,+BAA+B,uBAAuB,GAGpDuB,IAAejB,MAAU,YAAY,YAAY;AAEvD,QAAIkB;AACJ,WAAIlB,MAAU,YACZkB,IACE,gBAAAC,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,mEACb,UAAA;AAAA,QAAA,gBAAAC,EAACC,GAAA,EAAM,SAAQ,WAAW,UAAAjB,EAAK,cAAa;AAAA,QAC3ChB,MAAc,SACb,gBAAA+B,EAAC,QAAA,EAAK,WAAU,wDACb,UAAA;AAAA,UAAA,EAAE,mCAAmC,SAAS;AAAA,UAAG;AAAA,4BACjDG,GAAA,EAAU,OAAOlC,GAAW,QAAO,YAAW,OAAM,SAAA,CAAS;AAAA,QAAA,EAAA,CAChE,IACE;AAAA,MAAA,GACN;AAAA,MACCC,IACC,gBAAA+B,EAAC,KAAA,EAAE,WAAU,+DACV,YAAE,6BAA6B;AAAA,QAC9B,MAAM/B;AAAA,QACN,cAAc;AAAA,MAAA,CACf,GACH,IACE;AAAA,IAAA,GACN,IAEOW,MAAU,YACnBkB,IACE,gBAAAC,EAAC,OAAA,EAAI,WAAU,sDACb,UAAA;AAAA,MAAA,gBAAAC,EAACG,KAAQ,SAAQ,SAAQ,MAAK,MAAK,OAAOnB,EAAK,cAAc;AAAA,MAC7D,gBAAAgB,EAAC,QAAA,EAAK,WAAU,wDACb,YAAK,aAAA,CACR;AAAA,IAAA,GACF,IAIFF,IAAO5B,IACL,gBAAA6B,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,SAASb;AAAA,UACT,iBAAiB,CAACc,MAASlB,EAAUkB,MAAS,EAAI;AAAA,UAClD,OAAOrB,EAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAEd,gBAAAgB,EAACM,EAAM,QAAN,EACC,UAAA,gBAAAN;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,QAAO;AAAA,UACP,MAAK;AAAA,UACL,UAAU,CAAChB;AAAA,UACX,SAASpB;AAAA,UAER,UAAAa,EAAK;AAAA,QAAA;AAAA,MAAA,EACR,CACF;AAAA,IAAA,GACF,IAEA,gBAAAgB,EAAC,KAAA,EAAE,WAAU,+DACV,YAAK,YACR,GAKF,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAtB;AAAA,QACA,MAAK;AAAA,QACL,cAAYkB;AAAA,QACZ,aAAWhB,MAAU,YAAY,KAAO;AAAA,QACxC,kBAAe;AAAA,QACf,qBAAmBb;AAAA,QACnB,cAAYa;AAAA,QACZ,IAAAb;AAAA,QACA,WAAWR,EAAa,EAAE,OAAAqB,GAAO,WAAAJ,GAAW;AAAA,QAC3C,GAAGC;AAAA,QAEJ,UAAA,gBAAAsB;AAAA,UAACO;AAAA,UAAA;AAAA,YACC,SAAST;AAAA,YACT,MAAMjB,MAAU,YAAY,OAAO;AAAA,YAEnC,UAAA;AAAA,cAAA,gBAAAoB,EAACM,EAAM,OAAN,EAAY,IAAI,IAAIlC,CAAY,IAC9B,YAAK,MAAA,CACR;AAAA,cACA,gBAAA4B,EAACM,EAAM,aAAN,EACE,gBAAU,YACPtB,EAAK,qBACLA,EAAK,oBAAA,CACX;AAAA,cACCc;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAGN;AACF;AAEAjC,EAAgB,cAAc;"}
@@ -1,18 +1,19 @@
1
1
  import { jsxs as u, jsx as a } from "react/jsx-runtime";
2
- import { forwardRef as Fe, useId as Be, useRef as H, useCallback as v, useState as W, useImperativeHandle as $e, useMemo as Ce } from "react";
3
- import { c as Oe } from "./index-D2ZczOXr.js";
4
- import { useTranslation as ee } from "react-i18next";
5
- import { u as J } from "./use-controllable-state-BiY4xTzM.js";
6
- import { u as Re } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
2
+ import { forwardRef as Ce, useId as Oe, useRef as H, useCallback as v, useState as L, useImperativeHandle as $e, useMemo as De } from "react";
3
+ import { c as Re } from "./index-D2ZczOXr.js";
4
+ import { useTranslation as ae } from "react-i18next";
5
+ import { u as te } from "./use-controllable-state-BiY4xTzM.js";
6
+ import { u as _e } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
7
7
  import { u as je } from "./registry-DvAUVLHh.js";
8
8
  import { _ as g } from "./index-4xgbg-sn.js";
9
- import { u as _e } from "./index-BcMWc8W2.js";
10
- import { I as te } from "./icon-button-C_1TgRiK.js";
11
- import { S as We } from "./select-k4gBdS8N.js";
12
- import { b as De } from "./menu-row-BAr8bx1I.js";
13
- import { S as Le } from "./send-C5kDJ-Mz.js";
14
- import { X as Ue } from "./x-B5YnXwCz.js";
15
- const Ae = {
9
+ import { u as Le } from "./index-BcMWc8W2.js";
10
+ import { I as re } from "./icon-button-C_1TgRiK.js";
11
+ import { S as We } from "./select-4S-eYZUf.js";
12
+ import { b as Ae } from "./menu-row-BAr8bx1I.js";
13
+ import { a as W } from "./format-number-DdzqwMs1.js";
14
+ import { S as Ue } from "./send-C5kDJ-Mz.js";
15
+ import { X as Ge } from "./x-B5YnXwCz.js";
16
+ const Ze = {
16
17
  id: "ai-prompt-input",
17
18
  capabilities: ["edit_inline", "submit"],
18
19
  state: {
@@ -54,8 +55,8 @@ const Ae = {
54
55
  note: "Replace composer text."
55
56
  }
56
57
  ],
57
- invoke: (s, d) => {
58
- s.setValue(d.value);
58
+ invoke: (s, o) => {
59
+ s.setValue(o.value);
59
60
  }
60
61
  },
61
62
  clear: {
@@ -101,7 +102,7 @@ const Ae = {
101
102
  description: "Sourced from the id prop; addresses a specific composer instance."
102
103
  }
103
104
  }
104
- }, Ze = Oe(
105
+ }, qe = Re(
105
106
  [
106
107
  "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:w-full",
107
108
  "ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--control-border)] ds:bg-input",
@@ -120,58 +121,58 @@ const Ae = {
120
121
  },
121
122
  defaultVariants: { size: "md" }
122
123
  }
123
- ), qe = Fe(
124
+ ), Qe = Ce(
124
125
  ({
125
126
  commands: s = [],
126
- models: d,
127
- defaultModelId: T,
128
- modelId: se,
129
- onModelChange: ae,
127
+ models: o,
128
+ defaultModelId: E,
129
+ modelId: T,
130
+ onModelChange: ne,
130
131
  maxSize: h,
131
- accept: re,
132
- context: E,
132
+ accept: ie,
133
+ context: K,
133
134
  onContextDismiss: b,
134
135
  onSubmit: x,
135
136
  onAttach: y,
136
137
  onAttachmentRejected: I,
137
- minRows: K = 2,
138
- maxRows: D = 8,
139
- value: L,
140
- defaultValue: ne,
141
- size: ie = "md",
142
- disabled: U,
143
- className: oe,
144
- placeholder: de,
145
- onChange: F,
146
- onKeyDown: B,
147
- onCompositionStart: $,
148
- onCompositionEnd: C,
149
- onPaste: O,
138
+ minRows: F = 2,
139
+ maxRows: A = 8,
140
+ value: U,
141
+ defaultValue: oe,
142
+ size: de = "md",
143
+ disabled: G,
144
+ className: le,
145
+ placeholder: ce,
146
+ onChange: B,
147
+ onKeyDown: C,
148
+ onCompositionStart: O,
149
+ onCompositionEnd: $,
150
+ onPaste: D,
150
151
  id: R,
151
- ...le
152
- }, ce) => {
153
- var X;
154
- const { t: o } = ee("ui"), pe = Be(), w = H(null), N = H(!1), ue = H(null), me = v((e) => {
152
+ ...pe
153
+ }, ue) => {
154
+ var J;
155
+ const { t: d } = ae("ui"), me = Oe(), w = H(null), N = H(!1), fe = H(null), ve = v((e) => {
155
156
  w.current = e;
156
- }, []), [fe, m] = J({
157
- value: L === void 0 ? void 0 : String(L),
158
- defaultValue: String(ne ?? "")
159
- }), i = fe ?? "", [p, S] = W([]), [f, k] = W(!1), [ve, M] = W(""), [ge, he] = J({
160
- value: se,
161
- defaultValue: T ?? ((X = d == null ? void 0 : d[0]) == null ? void 0 : X.id) ?? "",
162
- onChange: ae
163
- }), j = ge ?? "", A = v(() => {
157
+ }, []), [ge, m] = te({
158
+ value: U === void 0 ? void 0 : String(U),
159
+ defaultValue: String(oe ?? "")
160
+ }), i = ge ?? "", [p, S] = L([]), [f, k] = L(!1), [he, M] = L(""), [be, xe] = te({
161
+ value: T,
162
+ defaultValue: E ?? ((J = o == null ? void 0 : o[0]) == null ? void 0 : J.id) ?? "",
163
+ onChange: ne
164
+ }), _ = be ?? "", Z = v(() => {
164
165
  const e = w.current;
165
166
  if (!e) return;
166
- const t = window.getComputedStyle(e), n = parseFloat(t.lineHeight) || 24, r = parseFloat(t.paddingTop) || 0, c = parseFloat(t.paddingBottom) || 0, l = parseFloat(t.borderTopWidth) || 0, _ = parseFloat(t.borderBottomWidth) || 0, V = r + c + l + _, Ee = n * K + V, Y = n * D + V;
167
+ const t = window.getComputedStyle(e), n = parseFloat(t.lineHeight) || 24, r = parseFloat(t.paddingTop) || 0, c = parseFloat(t.paddingBottom) || 0, l = parseFloat(t.borderTopWidth) || 0, j = parseFloat(t.borderBottomWidth) || 0, V = r + c + l + j, Fe = n * F + V, ee = n * A + V;
167
168
  e.style.height = "auto";
168
- const Ke = Math.max(Ee, Math.min(e.scrollHeight, Y));
169
- e.style.height = `${Ke}px`, e.style.overflowY = e.scrollHeight > Y ? "auto" : "hidden";
170
- }, [K, D]);
171
- Re(() => {
172
- A();
173
- }, [A, i]);
174
- const be = v((e, t) => {
169
+ const Be = Math.max(Fe, Math.min(e.scrollHeight, ee));
170
+ e.style.height = `${Be}px`, e.style.overflowY = e.scrollHeight > ee ? "auto" : "hidden";
171
+ }, [F, A]);
172
+ _e(() => {
173
+ Z();
174
+ }, [Z, i]);
175
+ const ye = v((e, t) => {
175
176
  const r = e.slice(0, t).lastIndexOf(`
176
177
  `) + 1, c = e.slice(r, t);
177
178
  if (c.startsWith("/")) {
@@ -182,16 +183,16 @@ const Ae = {
182
183
  }
183
184
  }
184
185
  k(!1), M("");
185
- }, []), xe = (e) => {
186
+ }, []), Ie = (e) => {
186
187
  if (m(e.target.value), N.current) return;
187
- F == null || F(e);
188
+ B == null || B(e);
188
189
  const t = e.target.selectionStart ?? e.target.value.length;
189
- be(e.target.value, t);
190
- }, ye = (e) => {
191
- N.current = !0, $ == null || $(e);
192
- }, Ie = (e) => {
193
- N.current = !1, C == null || C(e);
194
- }, we = (e) => e.nativeEvent.isComposing || e.keyCode === 229 || N.current, P = v(() => {
190
+ ye(e.target.value, t);
191
+ }, we = (e) => {
192
+ N.current = !0, O == null || O(e);
193
+ }, Ne = (e) => {
194
+ N.current = !1, $ == null || $(e);
195
+ }, Se = (e) => e.nativeEvent.isComposing || e.keyCode === 229 || N.current, P = v(() => {
195
196
  if (!i.trim() && p.length === 0) return;
196
197
  let t, n = i;
197
198
  const r = i.match(/^\/(\S+)\s?/);
@@ -199,11 +200,11 @@ const Ae = {
199
200
  text: n,
200
201
  command: t,
201
202
  attachments: p,
202
- modelId: j || void 0
203
+ modelId: _ || void 0
203
204
  }), m(""), S([]);
204
- }, [i, p, x, j, m]), Z = H(null);
205
- $e(ce, () => Z.current, []);
206
- const Ne = Ce(
205
+ }, [i, p, x, _, m]), q = H(null);
206
+ $e(ue, () => q.current, []);
207
+ const ke = De(
207
208
  () => ({
208
209
  getValue: () => i,
209
210
  isEmpty: () => !i.trim() && p.length === 0,
@@ -224,16 +225,16 @@ const Ae = {
224
225
  }),
225
226
  [i, p, m, P]
226
227
  );
227
- je(Ae, Ne, R);
228
- const Se = (e) => {
229
- if (B == null || B(e), !e.defaultPrevented && !we(e)) {
228
+ je(Ze, ke, R);
229
+ const Me = (e) => {
230
+ if (C == null || C(e), !e.defaultPrevented && !Se(e)) {
230
231
  if (f && e.key === "Escape") {
231
232
  e.preventDefault(), k(!1);
232
233
  return;
233
234
  }
234
235
  e.key === "Enter" && (e.metaKey || e.ctrlKey) && (e.preventDefault(), P());
235
236
  }
236
- }, ke = (e) => {
237
+ }, Pe = (e) => {
237
238
  const t = w.current;
238
239
  if (!t) return;
239
240
  const n = t.selectionStart ?? i.length, c = i.slice(0, n).lastIndexOf(`
@@ -241,10 +242,10 @@ const Ae = {
241
242
  let l = n;
242
243
  for (; l < i.length && !/\s/.test(i[l]); )
243
244
  l += 1;
244
- const _ = i.slice(l), V = i.slice(0, c) + `/${e.id} ` + _;
245
+ const j = i.slice(l), V = i.slice(0, c) + `/${e.id} ` + j;
245
246
  m(V), k(!1), M(""), queueMicrotask(() => t.focus());
246
- }, Me = (e) => {
247
- if (O == null || O(e), e.defaultPrevented) return;
247
+ }, ze = (e) => {
248
+ if (D == null || D(e), e.defaultPrevented) return;
248
249
  const { clipboardData: t } = e;
249
250
  if (!t) return;
250
251
  const n = [];
@@ -255,15 +256,15 @@ const Ae = {
255
256
  l && n.push(l);
256
257
  }
257
258
  }
258
- n.length > 0 && (e.preventDefault(), q(n));
259
- }, q = v(
259
+ n.length > 0 && (e.preventDefault(), Q(n));
260
+ }, Q = v(
260
261
  (e) => {
261
262
  var n;
262
263
  const t = [];
263
264
  for (const r of e) {
264
265
  if (typeof h == "number" && r.size > h) {
265
266
  I == null || I(
266
- o("chat.attachment.rejected", { reason: "size" })
267
+ d("chat.attachment.rejected", { reason: "size" })
267
268
  );
268
269
  continue;
269
270
  }
@@ -274,36 +275,36 @@ const Ae = {
274
275
  }
275
276
  t.length > 0 && (S((r) => [...r, ...t]), y == null || y(t.map((r) => r.file)));
276
277
  },
277
- [h, y, I, o]
278
- ), { getRootProps: Pe, getInputProps: ze, isDragActive: Ve } = _e({
279
- onDrop: q,
278
+ [h, y, I, d]
279
+ ), { getRootProps: Ve, getInputProps: He, isDragActive: Ee } = Le({
280
+ onDrop: Q,
280
281
  maxSize: h,
281
- accept: re,
282
+ accept: ie,
282
283
  noClick: !0,
283
284
  noKeyboard: !0
284
- }), He = (e) => {
285
+ }), Te = (e) => {
285
286
  S((t) => t.filter((n) => n.id !== e));
286
- }, z = R ?? pe, G = `${z}-label`, Q = `${z}-slash-list`, Te = (d == null ? void 0 : d.map((e) => ({ value: e.id, label: e.label }))) ?? [];
287
+ }, z = R ?? me, X = `${z}-label`, Y = `${z}-slash-list`, Ke = (o == null ? void 0 : o.map((e) => ({ value: e.id, label: e.label }))) ?? [];
287
288
  return /* @__PURE__ */ u(
288
289
  "div",
289
290
  {
290
- ref: Z,
291
- ...Pe({
291
+ ref: q,
292
+ ...Ve({
292
293
  className: [
293
- Ze({ size: ie, className: oe }),
294
- Ve ? "ds:outline ds:outline-dashed ds:outline-[color:var(--primary)] ds:outline-offset-2 ds:bg-[color:var(--primary)]/5" : ""
294
+ qe({ size: de, className: le }),
295
+ Ee ? "ds:outline ds:outline-dashed ds:outline-[color:var(--primary)] ds:outline-offset-2 ds:bg-[color:var(--primary)]/5" : ""
295
296
  ].join(" ")
296
297
  }),
297
- "aria-label": o("chat.attachmentZone"),
298
+ "aria-label": d("chat.attachmentZone"),
298
299
  "data-component": "ai-prompt-input",
299
300
  "data-component-id": R,
300
301
  children: [
301
- /* @__PURE__ */ a("input", { "aria-label": o("chat.attachmentZone"), ...ze() }),
302
- E ? /* @__PURE__ */ a("div", { className: "ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-xs)] ds:pt-[var(--spacing-xs)]", children: /* @__PURE__ */ a(
302
+ /* @__PURE__ */ a("input", { "aria-label": d("chat.attachmentZone"), ...He() }),
303
+ K ? /* @__PURE__ */ a("div", { className: "ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-xs)] ds:pt-[var(--spacing-xs)]", children: /* @__PURE__ */ a(
303
304
  "button",
304
305
  {
305
306
  type: "button",
306
- "aria-label": o("chat.contextActive", { name: E }),
307
+ "aria-label": d("chat.contextActive", { name: K }),
307
308
  onClick: b,
308
309
  onKeyDown: (e) => {
309
310
  (e.key === "Backspace" || e.key === "Delete") && (e.preventDefault(), b == null || b());
@@ -318,29 +319,29 @@ const Ae = {
318
319
  "ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)]",
319
320
  "ds:forced-colors:focus-visible:outline-[CanvasText]"
320
321
  ].join(" "),
321
- children: o("chat.contextActive", { name: E })
322
+ children: d("chat.contextActive", { name: K })
322
323
  }
323
324
  ) }) : null,
324
- /* @__PURE__ */ a("label", { id: G, htmlFor: z, className: "ds:sr-only", children: o("chat.prompt") }),
325
+ /* @__PURE__ */ a("label", { id: X, htmlFor: z, className: "ds:sr-only", children: d("chat.prompt") }),
325
326
  /* @__PURE__ */ u("div", { className: "ds:relative", children: [
326
327
  /* @__PURE__ */ a(
327
328
  "textarea",
328
329
  {
329
- ref: me,
330
+ ref: ve,
330
331
  id: z,
331
- rows: K,
332
+ rows: F,
332
333
  value: i,
333
- disabled: U,
334
- placeholder: de ?? o("chat.input.placeholder"),
335
- "aria-labelledby": G,
334
+ disabled: G,
335
+ placeholder: ce ?? d("chat.input.placeholder"),
336
+ "aria-labelledby": X,
336
337
  role: f ? "combobox" : void 0,
337
- "aria-controls": f ? Q : void 0,
338
+ "aria-controls": f ? Y : void 0,
338
339
  "aria-expanded": f ? !0 : void 0,
339
- onChange: xe,
340
- onKeyDown: Se,
341
- onPaste: Me,
342
- onCompositionStart: ye,
343
- onCompositionEnd: Ie,
340
+ onChange: Ie,
341
+ onKeyDown: Me,
342
+ onPaste: ze,
343
+ onCompositionStart: we,
344
+ onCompositionEnd: Ne,
344
345
  className: [
345
346
  "ds:w-full ds:resize-none ds:bg-transparent ds:outline-none",
346
347
  "ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-xs)]",
@@ -348,13 +349,13 @@ const Ae = {
348
349
  "ds:leading-[var(--line-height-base)]",
349
350
  "ds:disabled:opacity-50 ds:disabled:cursor-not-allowed"
350
351
  ].join(" "),
351
- ...le
352
+ ...pe
352
353
  }
353
354
  ),
354
355
  f ? /* @__PURE__ */ a(
355
356
  "div",
356
357
  {
357
- ref: ue,
358
+ ref: fe,
358
359
  className: [
359
360
  "ds:absolute ds:start-[var(--spacing-md)] ds:top-full ds:z-50",
360
361
  "ds:mt-[var(--spacing-xs)]",
@@ -367,29 +368,29 @@ const Ae = {
367
368
  "ds:origin-top ds:motion-safe:animate-in ds:motion-safe:fade-in-0 ds:motion-safe:zoom-in-95",
368
369
  "ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]"
369
370
  ].join(" "),
370
- id: Q,
371
- children: /* @__PURE__ */ u(g, { label: o("chat.slashMenu.label"), loop: !0, children: [
371
+ id: Y,
372
+ children: /* @__PURE__ */ u(g, { label: d("chat.slashMenu.label"), loop: !0, children: [
372
373
  /* @__PURE__ */ a(
373
374
  g.Input,
374
375
  {
375
- value: ve,
376
+ value: he,
376
377
  onValueChange: M,
377
378
  className: "ds:sr-only"
378
379
  }
379
380
  ),
380
381
  /* @__PURE__ */ u(g.List, { className: "ds:max-h-60 ds:overflow-y-auto ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]", children: [
381
- /* @__PURE__ */ a(g.Empty, { className: "type-body-sm ds:text-[color:var(--muted-foreground)] ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]", children: o("chat.slashMenu.empty") }),
382
+ /* @__PURE__ */ a(g.Empty, { className: "type-body-sm ds:text-[color:var(--muted-foreground)] ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]", children: d("chat.slashMenu.empty") }),
382
383
  s.map((e) => /* @__PURE__ */ u(
383
384
  g.Item,
384
385
  {
385
386
  value: e.id,
386
- onSelect: () => ke(e),
387
+ onSelect: () => Pe(e),
387
388
  className: [
388
389
  "ds:flex ds:flex-col ds:gap-[2px]",
389
390
  "ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]",
390
391
  "ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]",
391
392
  "type-body-sm ds:cursor-pointer",
392
- De.selected
393
+ Ae.selected
393
394
  ].join(" "),
394
395
  children: [
395
396
  /* @__PURE__ */ u("span", { className: "ds:font-medium", children: [
@@ -410,40 +411,40 @@ const Ae = {
410
411
  "div",
411
412
  {
412
413
  role: "group",
413
- "aria-label": o("chat.attachmentZone"),
414
+ "aria-label": d("chat.attachmentZone"),
414
415
  className: "ds:flex ds:flex-wrap ds:gap-[var(--spacing-xs)] ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]",
415
416
  children: p.map((e) => /* @__PURE__ */ a(
416
- Qe,
417
+ Ye,
417
418
  {
418
419
  file: e.file,
419
- onRemove: () => He(e.id)
420
+ onRemove: () => Te(e.id)
420
421
  },
421
422
  e.id
422
423
  ))
423
424
  }
424
425
  ) : null,
425
426
  /* @__PURE__ */ u("div", { className: "ds:flex ds:items-center ds:gap-[var(--spacing-xs)] ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]", children: [
426
- d && d.length > 0 ? /* @__PURE__ */ a("div", { className: "ds:me-auto ds:min-w-[140px]", children: /* @__PURE__ */ a(
427
+ o && o.length > 0 ? /* @__PURE__ */ a("div", { className: "ds:me-auto ds:min-w-[140px]", children: /* @__PURE__ */ a(
427
428
  We,
428
429
  {
429
- "aria-label": o("chat.model.select"),
430
- options: Te,
431
- value: j || "",
430
+ "aria-label": d("chat.model.select"),
431
+ options: Ke,
432
+ value: _ || "",
432
433
  onValueChange: (e) => {
433
- he(e);
434
+ xe(e);
434
435
  },
435
436
  size: "sm"
436
437
  }
437
438
  ) }) : /* @__PURE__ */ a("div", { className: "ds:me-auto" }),
438
- /* @__PURE__ */ a("span", { className: "ds:sr-only", children: o("chat.input.sendHint") }),
439
+ /* @__PURE__ */ a("span", { className: "ds:sr-only", children: d("chat.input.sendHint") }),
439
440
  /* @__PURE__ */ a(
440
- te,
441
+ re,
441
442
  {
442
- icon: /* @__PURE__ */ a(Le, {}),
443
- "aria-label": o("chat.send"),
443
+ icon: /* @__PURE__ */ a(Ue, {}),
444
+ "aria-label": d("chat.send"),
444
445
  intent: "primary",
445
446
  size: "sm",
446
- disabled: U || !i.trim() && p.length === 0,
447
+ disabled: G || !i.trim() && p.length === 0,
447
448
  onClick: P,
448
449
  "aria-keyshortcuts": "Meta+Enter Control+Enter"
449
450
  }
@@ -454,15 +455,16 @@ const Ae = {
454
455
  );
455
456
  }
456
457
  );
457
- qe.displayName = "AIPromptInput";
458
- function Ge(s) {
459
- return s < 1024 ? `${s} B` : s < 1024 * 1024 ? `${(s / 1024).toFixed(1)} KB` : `${(s / (1024 * 1024)).toFixed(1)} MB`;
458
+ Qe.displayName = "AIPromptInput";
459
+ const se = { minimumFractionDigits: 1, maximumFractionDigits: 1 };
460
+ function Xe(s, o) {
461
+ return s < 1024 ? `${W(s, o, { useGrouping: !1 })} B` : s < 1024 * 1024 ? `${W(s / 1024, o, se)} KB` : `${W(s / (1024 * 1024), o, se)} MB`;
460
462
  }
461
- function Qe({
463
+ function Ye({
462
464
  file: s,
463
- onRemove: d
465
+ onRemove: o
464
466
  }) {
465
- const { t: T } = ee("ui");
467
+ const { t: E, i18n: T } = ae("ui");
466
468
  return /* @__PURE__ */ u(
467
469
  "span",
468
470
  {
@@ -478,15 +480,15 @@ function Qe({
478
480
  ].join(" "),
479
481
  children: [
480
482
  /* @__PURE__ */ a("span", { className: "ds:truncate ds:max-w-[16ch]", children: s.name }),
481
- /* @__PURE__ */ a("span", { className: "ds:text-[color:var(--muted-foreground)] ds:tabular-nums", children: Ge(s.size) }),
483
+ /* @__PURE__ */ a("span", { className: "ds:text-[color:var(--muted-foreground)] ds:tabular-nums", children: Xe(s.size, T.language) }),
482
484
  /* @__PURE__ */ a(
483
- te,
485
+ re,
484
486
  {
485
- icon: /* @__PURE__ */ a(Ue, {}),
486
- "aria-label": T("chat.attachment.remove", { name: s.name }),
487
+ icon: /* @__PURE__ */ a(Ge, {}),
488
+ "aria-label": E("chat.attachment.remove", { name: s.name }),
487
489
  intent: "ghost",
488
490
  size: "sm",
489
- onClick: d
491
+ onClick: o
490
492
  }
491
493
  )
492
494
  ]
@@ -494,7 +496,7 @@ function Qe({
494
496
  );
495
497
  }
496
498
  export {
497
- qe as A,
498
- Ae as a
499
+ Qe as A,
500
+ Ze as a
499
501
  };
500
- //# sourceMappingURL=ai-prompt-input-DSGSe4LH.js.map
502
+ //# sourceMappingURL=ai-prompt-input-DzgyoKyk.js.map