@alfadocs/ui-kit-debug 1.56.0 → 1.58.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 (445) hide show
  1. package/dist/_chunks/{address-fields-BfjxS05Z.js → address-fields-CJtu7LQU.js} +2 -2
  2. package/dist/_chunks/{address-fields-BfjxS05Z.js.map → address-fields-CJtu7LQU.js.map} +1 -1
  3. package/dist/_chunks/{ai-credits-notice-BoNJtOuE.js → ai-credits-notice-ktklr8fy.js} +2 -2
  4. package/dist/_chunks/{ai-credits-notice-BoNJtOuE.js.map → ai-credits-notice-ktklr8fy.js.map} +1 -1
  5. package/dist/_chunks/ai-permission-notice-DyuEGwAt.js +206 -0
  6. package/dist/_chunks/ai-permission-notice-DyuEGwAt.js.map +1 -0
  7. package/dist/_chunks/alia-sidebar-dybRpWml.js +1284 -0
  8. package/dist/_chunks/alia-sidebar-dybRpWml.js.map +1 -0
  9. package/dist/_chunks/{anamnesis-summary-rows-CQ-XGr0T.js → anamnesis-summary-rows-M-FUkw9p.js} +6 -6
  10. package/dist/_chunks/{anamnesis-summary-rows-CQ-XGr0T.js.map → anamnesis-summary-rows-M-FUkw9p.js.map} +1 -1
  11. package/dist/_chunks/{app-frame-B-0O9CrU.js → app-frame-CqmDh2v5.js} +2 -2
  12. package/dist/_chunks/{app-frame-B-0O9CrU.js.map → app-frame-CqmDh2v5.js.map} +1 -1
  13. package/dist/_chunks/{appointment-peek-BIZaDeCi.js → appointment-peek-WvNbE4JG.js} +2 -2
  14. package/dist/_chunks/{appointment-peek-BIZaDeCi.js.map → appointment-peek-WvNbE4JG.js.map} +1 -1
  15. package/dist/_chunks/{appointment-timeline-DmqYEIT9.js → appointment-timeline-Z0494xO-.js} +2 -2
  16. package/dist/_chunks/{appointment-timeline-DmqYEIT9.js.map → appointment-timeline-Z0494xO-.js.map} +1 -1
  17. package/dist/_chunks/{balance-badge-cell-DmDcXw0c.js → balance-badge-cell-CGoJZlKf.js} +3 -3
  18. package/dist/_chunks/{balance-badge-cell-DmDcXw0c.js.map → balance-badge-cell-CGoJZlKf.js.map} +1 -1
  19. package/dist/_chunks/{booking-WyNGKPE2.js → booking-CiFSAMR-.js} +4 -4
  20. package/dist/_chunks/{booking-WyNGKPE2.js.map → booking-CiFSAMR-.js.map} +1 -1
  21. package/dist/_chunks/{calculator-dialog-pCPWta7h.js → calculator-dialog-CzQv03p0.js} +2 -2
  22. package/dist/_chunks/{calculator-dialog-pCPWta7h.js.map → calculator-dialog-CzQv03p0.js.map} +1 -1
  23. package/dist/_chunks/{calendar-workspace-Du2ryaI-.js → calendar-workspace-DNHzjG7O.js} +19 -19
  24. package/dist/_chunks/calendar-workspace-DNHzjG7O.js.map +1 -0
  25. package/dist/_chunks/{care-plan-card-Ddjh5Doc.js → care-plan-card-DxrRLRdW.js} +2 -2
  26. package/dist/_chunks/{care-plan-card-Ddjh5Doc.js.map → care-plan-card-DxrRLRdW.js.map} +1 -1
  27. package/dist/_chunks/{care-plan-header-DUX_SVvF.js → care-plan-header-BMwZIgHJ.js} +2 -2
  28. package/dist/_chunks/{care-plan-header-DUX_SVvF.js.map → care-plan-header-BMwZIgHJ.js.map} +1 -1
  29. package/dist/_chunks/{chart-HsF1KHbx.js → chart-ZMkX-Gqy.js} +338 -341
  30. package/dist/_chunks/chart-ZMkX-Gqy.js.map +1 -0
  31. package/dist/_chunks/{city-input-BC_nYINn.js → city-input-3J3bz9EO.js} +2 -2
  32. package/dist/_chunks/{city-input-BC_nYINn.js.map → city-input-3J3bz9EO.js.map} +1 -1
  33. package/dist/_chunks/{clinical-note-card-14JIoUR0.js → clinical-note-card-hx939bvw.js} +2 -2
  34. package/dist/_chunks/{clinical-note-card-14JIoUR0.js.map → clinical-note-card-hx939bvw.js.map} +1 -1
  35. package/dist/_chunks/{color-picker-BRQ4Y9SO.js → color-picker-BsggJovx.js} +128 -123
  36. package/dist/_chunks/color-picker-BsggJovx.js.map +1 -0
  37. package/dist/_chunks/{contact-card-CmK05vNb.js → contact-card-fHBMwEsx.js} +2 -2
  38. package/dist/_chunks/{contact-card-CmK05vNb.js.map → contact-card-fHBMwEsx.js.map} +1 -1
  39. package/dist/_chunks/{contact-profile-card-Ci8lBQ6a.js → contact-profile-card-CMyBYgRR.js} +2 -2
  40. package/dist/_chunks/{contact-profile-card-Ci8lBQ6a.js.map → contact-profile-card-CMyBYgRR.js.map} +1 -1
  41. package/dist/_chunks/{control-room-rail-Tx2jW250.js → control-room-rail-CJ85HkS2.js} +2 -2
  42. package/dist/_chunks/{control-room-rail-Tx2jW250.js.map → control-room-rail-CJ85HkS2.js.map} +1 -1
  43. package/dist/_chunks/{cycle-calculator-Dgfqr4Q4.js → cycle-calculator-Cww9DzIa.js} +2 -2
  44. package/dist/_chunks/{cycle-calculator-Dgfqr4Q4.js.map → cycle-calculator-Cww9DzIa.js.map} +1 -1
  45. package/dist/_chunks/dashboard-grid-Cs7cJAsA.js +933 -0
  46. package/dist/_chunks/dashboard-grid-Cs7cJAsA.js.map +1 -0
  47. package/dist/_chunks/{data-table-D8fuhqO1.js → data-table-Yn5xiGzs.js} +3 -3
  48. package/dist/_chunks/{data-table-D8fuhqO1.js.map → data-table-Yn5xiGzs.js.map} +1 -1
  49. package/dist/_chunks/{data-table-tabs-Xhg5G0gU.js → data-table-tabs-CHYAAeHy.js} +2 -2
  50. package/dist/_chunks/{data-table-tabs-Xhg5G0gU.js.map → data-table-tabs-CHYAAeHy.js.map} +1 -1
  51. package/dist/_chunks/{date-picker-wRAcq2lt.js → date-picker-BSZuKo13.js} +69 -62
  52. package/dist/_chunks/date-picker-BSZuKo13.js.map +1 -0
  53. package/dist/_chunks/{date-range-picker-CtUOI38x.js → date-range-picker-CFk-5O3R.js} +176 -171
  54. package/dist/_chunks/date-range-picker-CFk-5O3R.js.map +1 -0
  55. package/dist/_chunks/{date-time-picker-CLeLKuv9.js → date-time-picker-CjxTkblD.js} +92 -85
  56. package/dist/_chunks/date-time-picker-CjxTkblD.js.map +1 -0
  57. package/dist/_chunks/{dialog-CUzbnKLw.js → dialog-Dn-iQ0Jp.js} +2 -2
  58. package/dist/_chunks/{dialog-CUzbnKLw.js.map → dialog-Dn-iQ0Jp.js.map} +1 -1
  59. package/dist/_chunks/{document-preview-uoTekVR7.js → document-preview-CHGGG0l_.js} +2 -2
  60. package/dist/_chunks/{document-preview-uoTekVR7.js.map → document-preview-CHGGG0l_.js.map} +1 -1
  61. package/dist/_chunks/{due-date-calculator-CSjklbyw.js → due-date-calculator-D_qFUiHp.js} +2 -2
  62. package/dist/_chunks/{due-date-calculator-CSjklbyw.js.map → due-date-calculator-D_qFUiHp.js.map} +1 -1
  63. package/dist/_chunks/{entity-summary-DcB0fIiv.js → entity-summary-CWcCSThK.js} +2 -2
  64. package/dist/_chunks/{entity-summary-DcB0fIiv.js.map → entity-summary-CWcCSThK.js.map} +1 -1
  65. package/dist/_chunks/{face-scheme-BicuUA2K.js → face-scheme-DSKDdIsb.js} +2 -2
  66. package/dist/_chunks/{face-scheme-BicuUA2K.js.map → face-scheme-DSKDdIsb.js.map} +1 -1
  67. package/dist/_chunks/{file-manager-Cc_uO8r2.js → file-manager-DEtkQR1F.js} +4 -4
  68. package/dist/_chunks/{file-manager-Cc_uO8r2.js.map → file-manager-DEtkQR1F.js.map} +1 -1
  69. package/dist/_chunks/{forgot-password-form-DEx-M_QR.js → forgot-password-form-CEqOmNuX.js} +2 -2
  70. package/dist/_chunks/{forgot-password-form-DEx-M_QR.js.map → forgot-password-form-CEqOmNuX.js.map} +1 -1
  71. package/dist/_chunks/{gestational-age-calculator-DqVeJke2.js → gestational-age-calculator-CZi43xKG.js} +2 -2
  72. package/dist/_chunks/{gestational-age-calculator-DqVeJke2.js.map → gestational-age-calculator-CZi43xKG.js.map} +1 -1
  73. package/dist/_chunks/{hcg-doubling-BIYyI2Yo.js → hcg-doubling-Ccvh7OaU.js} +2 -2
  74. package/dist/_chunks/{hcg-doubling-BIYyI2Yo.js.map → hcg-doubling-Ccvh7OaU.js.map} +1 -1
  75. package/dist/_chunks/{header-settings-ge_3gYEq.js → header-settings-BMcCx2LC.js} +2 -2
  76. package/dist/_chunks/{header-settings-ge_3gYEq.js.map → header-settings-BMcCx2LC.js.map} +1 -1
  77. package/dist/_chunks/{heatmap-Gf9r7Tn1.js → heatmap-DiyOSQk9.js} +2 -2
  78. package/dist/_chunks/{heatmap-Gf9r7Tn1.js.map → heatmap-DiyOSQk9.js.map} +1 -1
  79. package/dist/_chunks/{help-me-write-templates-fV-Apf72.js → help-me-write-templates-CM1p6qkm.js} +3 -3
  80. package/dist/_chunks/{help-me-write-templates-fV-Apf72.js.map → help-me-write-templates-CM1p6qkm.js.map} +1 -1
  81. package/dist/_chunks/{hover-card-BnTueNS2.js → hover-card-U_ZYoh1n.js} +201 -187
  82. package/dist/_chunks/hover-card-U_ZYoh1n.js.map +1 -0
  83. package/dist/_chunks/{icon-picker-DWrqmI1c.js → icon-picker-rOFTawXk.js} +3 -3
  84. package/dist/_chunks/{icon-picker-DWrqmI1c.js.map → icon-picker-rOFTawXk.js.map} +1 -1
  85. package/dist/_chunks/{info-tip-B0jmIt6M.js → info-tip-CJpNpzZe.js} +2 -2
  86. package/dist/_chunks/{info-tip-B0jmIt6M.js.map → info-tip-CJpNpzZe.js.map} +1 -1
  87. package/dist/_chunks/{kit-extensions-Byfxy6sy.js → kit-extensions-DYVxWcqv.js} +4 -4
  88. package/dist/_chunks/{kit-extensions-Byfxy6sy.js.map → kit-extensions-DYVxWcqv.js.map} +1 -1
  89. package/dist/_chunks/{link-cell-renderer-TeJNvymP.js → link-cell-renderer-C1wOyxDF.js} +3 -3
  90. package/dist/_chunks/{link-cell-renderer-TeJNvymP.js.map → link-cell-renderer-C1wOyxDF.js.map} +1 -1
  91. package/dist/_chunks/link-gRw3NtOt.js +137 -0
  92. package/dist/_chunks/link-gRw3NtOt.js.map +1 -0
  93. package/dist/_chunks/{list-RRN2TJ_7.js → list-CNnn7DOD.js} +75 -73
  94. package/dist/_chunks/list-CNnn7DOD.js.map +1 -0
  95. package/dist/_chunks/{locale-picker-DfNSdOpy.js → locale-picker-BGfrZyTw.js} +2 -2
  96. package/dist/_chunks/{locale-picker-DfNSdOpy.js.map → locale-picker-BGfrZyTw.js.map} +1 -1
  97. package/dist/_chunks/{login-dev-card-DmZ1B0lB.js → login-dev-card-CIim81VB.js} +2 -2
  98. package/dist/_chunks/{login-dev-card-DmZ1B0lB.js.map → login-dev-card-CIim81VB.js.map} +1 -1
  99. package/dist/_chunks/marketplace-app-shell-CSDmGLPW.js +613 -0
  100. package/dist/_chunks/marketplace-app-shell-CSDmGLPW.js.map +1 -0
  101. package/dist/_chunks/{message-tray-BB95DA82.js → message-tray-DmU0poD7.js} +76 -69
  102. package/dist/_chunks/message-tray-DmU0poD7.js.map +1 -0
  103. package/dist/_chunks/{nav-grid-BqCPH8sm.js → nav-grid-Byx8PxuB.js} +2 -2
  104. package/dist/_chunks/{nav-grid-BqCPH8sm.js.map → nav-grid-Byx8PxuB.js.map} +1 -1
  105. package/dist/_chunks/navigation-dismiss-B1mcW1CT.js +9 -0
  106. package/dist/_chunks/navigation-dismiss-B1mcW1CT.js.map +1 -0
  107. package/dist/_chunks/non-modal-tab-exit-j3CPOuE3.js +89 -0
  108. package/dist/_chunks/non-modal-tab-exit-j3CPOuE3.js.map +1 -0
  109. package/dist/_chunks/{note-attachment-I1NLoeRZ.js → note-attachment-Bt2cddsZ.js} +2 -2
  110. package/dist/_chunks/{note-attachment-I1NLoeRZ.js.map → note-attachment-Bt2cddsZ.js.map} +1 -1
  111. package/dist/_chunks/{note-timeline-CsY8YOE7.js → note-timeline-CX9nAgAR.js} +2 -2
  112. package/dist/_chunks/{note-timeline-CsY8YOE7.js.map → note-timeline-CX9nAgAR.js.map} +1 -1
  113. package/dist/_chunks/{notes-panel-DceRhthG.js → notes-panel-DHLHsxpW.js} +4 -4
  114. package/dist/_chunks/{notes-panel-DceRhthG.js.map → notes-panel-DHLHsxpW.js.map} +1 -1
  115. package/dist/_chunks/{notification-tray-__sJXnsz.js → notification-tray-DPU-Xg0i.js} +83 -76
  116. package/dist/_chunks/notification-tray-DPU-Xg0i.js.map +1 -0
  117. package/dist/_chunks/{panel-subview-BT-Apwgb.js → panel-subview-D4o6ar6_.js} +61 -47
  118. package/dist/_chunks/panel-subview-D4o6ar6_.js.map +1 -0
  119. package/dist/_chunks/{patient-details-DsTtjpuX.js → patient-details-BCaVuaXz.js} +2 -2
  120. package/dist/_chunks/{patient-details-DsTtjpuX.js.map → patient-details-BCaVuaXz.js.map} +1 -1
  121. package/dist/_chunks/{patient-field-row-BvZ9luz-.js → patient-field-row-jcRSTrp4.js} +7 -7
  122. package/dist/_chunks/{patient-field-row-BvZ9luz-.js.map → patient-field-row-jcRSTrp4.js.map} +1 -1
  123. package/dist/_chunks/{patient-summary-card-9nQWTQf6.js → patient-summary-card-kQIfPQOE.js} +4 -4
  124. package/dist/_chunks/{patient-summary-card-9nQWTQf6.js.map → patient-summary-card-kQIfPQOE.js.map} +1 -1
  125. package/dist/_chunks/{payment-automation-upsell-DiHovmUL.js → payment-automation-upsell-C4wHOxsp.js} +2 -2
  126. package/dist/_chunks/{payment-automation-upsell-DiHovmUL.js.map → payment-automation-upsell-C4wHOxsp.js.map} +1 -1
  127. package/dist/_chunks/{payment-request-card-CwDpwXUC.js → payment-request-card-DAniJNLX.js} +2 -2
  128. package/dist/_chunks/{payment-request-card-CwDpwXUC.js.map → payment-request-card-DAniJNLX.js.map} +1 -1
  129. package/dist/_chunks/{pdf-viewer-C3minW5b.js → pdf-viewer-CNQxa4tv.js} +396 -391
  130. package/dist/_chunks/pdf-viewer-CNQxa4tv.js.map +1 -0
  131. package/dist/_chunks/{phone-input-DxkHMYmu.js → phone-input-O9camxkq.js} +156 -151
  132. package/dist/_chunks/phone-input-O9camxkq.js.map +1 -0
  133. package/dist/_chunks/popover-BG75rYjN.js +367 -0
  134. package/dist/_chunks/popover-BG75rYjN.js.map +1 -0
  135. package/dist/_chunks/{practice-results-Dhbo-fc_.js → practice-results-D07wgCqV.js} +2 -2
  136. package/dist/_chunks/{practice-results-Dhbo-fc_.js.map → practice-results-D07wgCqV.js.map} +1 -1
  137. package/dist/_chunks/{pregnancy-dating-Bfu0Cq4H.js → pregnancy-dating-BFzv9g1N.js} +2 -2
  138. package/dist/_chunks/{pregnancy-dating-Bfu0Cq4H.js.map → pregnancy-dating-BFzv9g1N.js.map} +1 -1
  139. package/dist/_chunks/{product-hub-panel-BSSiGGG4.js → product-hub-panel-DCYX0rPG.js} +103 -96
  140. package/dist/_chunks/product-hub-panel-DCYX0rPG.js.map +1 -0
  141. package/dist/_chunks/{public-footer-CxpG6J1M.js → public-footer-ZWTEG1Rq.js} +2 -2
  142. package/dist/_chunks/{public-footer-CxpG6J1M.js.map → public-footer-ZWTEG1Rq.js.map} +1 -1
  143. package/dist/_chunks/{public-header.agent-pr2hyiND.js → public-header.agent-C1SlVSYt.js} +2 -2
  144. package/dist/_chunks/{public-header.agent-pr2hyiND.js.map → public-header.agent-C1SlVSYt.js.map} +1 -1
  145. package/dist/_chunks/{radiograph-panel.agent-DkUokbEa.js → radiograph-panel.agent-DyqbTECc.js} +4 -4
  146. package/dist/_chunks/{radiograph-panel.agent-DkUokbEa.js.map → radiograph-panel.agent-DyqbTECc.js.map} +1 -1
  147. package/dist/_chunks/{registration-form-D7iNqMBF.js → registration-form-DrSR9Sjk.js} +4 -4
  148. package/dist/_chunks/{registration-form-D7iNqMBF.js.map → registration-form-DrSR9Sjk.js.map} +1 -1
  149. package/dist/_chunks/{rich-text-editor-CkFfmA3v.js → rich-text-editor-UgXri8h6.js} +490 -485
  150. package/dist/_chunks/rich-text-editor-UgXri8h6.js.map +1 -0
  151. package/dist/_chunks/{scroll-area-ZtFCv9K7.js → scroll-area-CY5SLYNw.js} +104 -74
  152. package/dist/_chunks/scroll-area-CY5SLYNw.js.map +1 -0
  153. package/dist/_chunks/{search-bar-DQJS0wJN.js → search-bar-mA4bPe3t.js} +294 -255
  154. package/dist/_chunks/search-bar-mA4bPe3t.js.map +1 -0
  155. package/dist/_chunks/{sheet-C7SwIxwB.js → sheet-Dtjk0CVv.js} +3 -3
  156. package/dist/_chunks/{sheet-C7SwIxwB.js.map → sheet-Dtjk0CVv.js.map} +1 -1
  157. package/dist/_chunks/sidebar-D4Wllqfz.js +2029 -0
  158. package/dist/_chunks/sidebar-D4Wllqfz.js.map +1 -0
  159. package/dist/_chunks/{sign-document-B6HlyCGV.js → sign-document-D4iHS_Ug.js} +2 -2
  160. package/dist/_chunks/{sign-document-B6HlyCGV.js.map → sign-document-D4iHS_Ug.js.map} +1 -1
  161. package/dist/_chunks/{signature-request-DhbpB9N9.js → signature-request-dAVgE0_5.js} +3 -3
  162. package/dist/_chunks/{signature-request-DhbpB9N9.js.map → signature-request-dAVgE0_5.js.map} +1 -1
  163. package/dist/_chunks/{signed-out-frame-B2GTIeqA.js → signed-out-frame-DOJpobp8.js} +3 -3
  164. package/dist/_chunks/{signed-out-frame-B2GTIeqA.js.map → signed-out-frame-DOJpobp8.js.map} +1 -1
  165. package/dist/_chunks/{state-backed-text-input-DECQy5aA.js → state-backed-text-input-Cgh4ms3p.js} +2 -2
  166. package/dist/_chunks/{state-backed-text-input-DECQy5aA.js.map → state-backed-text-input-Cgh4ms3p.js.map} +1 -1
  167. package/dist/_chunks/{task-editor-ByyRu29Y.js → task-editor-BflEZmcF.js} +7 -6
  168. package/dist/_chunks/task-editor-BflEZmcF.js.map +1 -0
  169. package/dist/_chunks/{tool-rail-Bwyuw_Ot.js → tool-rail-CTq1KwxW.js} +115 -114
  170. package/dist/_chunks/{tool-rail-Bwyuw_Ot.js.map → tool-rail-CTq1KwxW.js.map} +1 -1
  171. package/dist/_chunks/{use-appointment-details-read-JsDM48tf.js → use-appointment-details-read-izwoXh-G.js} +8 -8
  172. package/dist/_chunks/{use-appointment-details-read-JsDM48tf.js.map → use-appointment-details-read-izwoXh-G.js.map} +1 -1
  173. package/dist/_chunks/use-state-backed-input-DhRQo6gM.js +57 -0
  174. package/dist/_chunks/use-state-backed-input-DhRQo6gM.js.map +1 -0
  175. package/dist/_chunks/{voice-control-panel-Bg1eklL0.js → voice-control-panel-an-bpQfF.js} +3 -3
  176. package/dist/_chunks/{voice-control-panel-Bg1eklL0.js.map → voice-control-panel-an-bpQfF.js.map} +1 -1
  177. package/dist/_chunks/{widget-picker-DXYBMTfe.js → widget-picker-DlJOgYrZ.js} +80 -57
  178. package/dist/_chunks/widget-picker-DlJOgYrZ.js.map +1 -0
  179. package/dist/agent-catalog.json +3 -3
  180. package/dist/agent-i18n/en.json +1 -1
  181. package/dist/components/_shared/navigation-dismiss.d.ts +8 -0
  182. package/dist/components/_shared/navigation-dismiss.d.ts.map +1 -0
  183. package/dist/components/_shared/non-modal-tab-exit.d.ts +15 -4
  184. package/dist/components/_shared/non-modal-tab-exit.d.ts.map +1 -1
  185. package/dist/components/_shared/use-state-backed-input.d.ts +3 -2
  186. package/dist/components/_shared/use-state-backed-input.d.ts.map +1 -1
  187. package/dist/components/address-fields/index.js +1 -1
  188. package/dist/components/ai-credits-notice/index.js +1 -1
  189. package/dist/components/ai-permission-notice/ai-permission-notice.d.ts +32 -0
  190. package/dist/components/ai-permission-notice/ai-permission-notice.d.ts.map +1 -1
  191. package/dist/components/ai-permission-notice/index.d.ts +1 -1
  192. package/dist/components/ai-permission-notice/index.d.ts.map +1 -1
  193. package/dist/components/ai-permission-notice/index.js +1 -1
  194. package/dist/components/app-frame/index.js +1 -1
  195. package/dist/components/appointment-details-panel/index.js +1 -1
  196. package/dist/components/appointment-peek/index.js +1 -1
  197. package/dist/components/appointment-timeline/index.js +1 -1
  198. package/dist/components/booking/index.js +1 -1
  199. package/dist/components/calculator-dialog/index.js +1 -1
  200. package/dist/components/care-plan-card/index.js +1 -1
  201. package/dist/components/care-plan-header/index.js +1 -1
  202. package/dist/components/chart/chart.d.ts +5 -5
  203. package/dist/components/chart/chart.d.ts.map +1 -1
  204. package/dist/components/chart/index.js +1 -1
  205. package/dist/components/city-input/index.js +1 -1
  206. package/dist/components/clinical-note-card/index.js +1 -1
  207. package/dist/components/color-picker/color-picker.d.ts.map +1 -1
  208. package/dist/components/color-picker/index.js +1 -1
  209. package/dist/components/contact-card/index.js +1 -1
  210. package/dist/components/contact-profile-card/index.js +1 -1
  211. package/dist/components/control-room-rail/index.js +1 -1
  212. package/dist/components/cycle-calculator/index.js +1 -1
  213. package/dist/components/dashboard-grid/dashboard-grid.d.ts +33 -8
  214. package/dist/components/dashboard-grid/dashboard-grid.d.ts.map +1 -1
  215. package/dist/components/dashboard-grid/index.js +1 -1
  216. package/dist/components/data-table/index.js +2 -2
  217. package/dist/components/data-table-tabs/index.js +1 -1
  218. package/dist/components/date-picker/date-picker.d.ts.map +1 -1
  219. package/dist/components/date-picker/index.js +1 -1
  220. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
  221. package/dist/components/date-range-picker/index.js +1 -1
  222. package/dist/components/date-time-picker/date-time-picker.d.ts.map +1 -1
  223. package/dist/components/date-time-picker/index.js +1 -1
  224. package/dist/components/dialog/index.js +1 -1
  225. package/dist/components/document-preview/index.js +1 -1
  226. package/dist/components/due-date-calculator/index.js +1 -1
  227. package/dist/components/entity-summary/index.js +1 -1
  228. package/dist/components/face-scheme/index.js +1 -1
  229. package/dist/components/file-manager/index.js +1 -1
  230. package/dist/components/gestational-age-calculator/index.js +1 -1
  231. package/dist/components/hcg-doubling/index.js +1 -1
  232. package/dist/components/header-settings/index.js +1 -1
  233. package/dist/components/heatmap/index.js +1 -1
  234. package/dist/components/hover-card/hover-card.d.ts.map +1 -1
  235. package/dist/components/hover-card/index.js +1 -1
  236. package/dist/components/icon-picker/index.js +1 -1
  237. package/dist/components/info-tip/index.js +1 -1
  238. package/dist/components/link/index.js +1 -1
  239. package/dist/components/link/link.d.ts +5 -3
  240. package/dist/components/link/link.d.ts.map +1 -1
  241. package/dist/components/list/index.js +1 -1
  242. package/dist/components/list/list.d.ts.map +1 -1
  243. package/dist/components/locale-picker/index.js +1 -1
  244. package/dist/components/message-tray/index.js +1 -1
  245. package/dist/components/message-tray/message-tray.d.ts.map +1 -1
  246. package/dist/components/nav-grid/index.js +1 -1
  247. package/dist/components/note-timeline/index.js +1 -1
  248. package/dist/components/notes-panel/index.js +1 -1
  249. package/dist/components/notification-tray/index.js +1 -1
  250. package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
  251. package/dist/components/panel-subview/index.js +1 -1
  252. package/dist/components/panel-subview/panel-subview.d.ts.map +1 -1
  253. package/dist/components/patient-details/index.js +1 -1
  254. package/dist/components/patient-summary-card/index.js +1 -1
  255. package/dist/components/patient-table/index.js +1 -1
  256. package/dist/components/payment-card/index.js +1 -1
  257. package/dist/components/pdf-viewer/index.js +1 -1
  258. package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  259. package/dist/components/phone-input/index.js +1 -1
  260. package/dist/components/phone-input/phone-input.d.ts.map +1 -1
  261. package/dist/components/popover/index.js +1 -1
  262. package/dist/components/popover/popover.d.ts +1 -1
  263. package/dist/components/popover/popover.d.ts.map +1 -1
  264. package/dist/components/practice-results/index.js +1 -1
  265. package/dist/components/pregnancy-dating/index.js +1 -1
  266. package/dist/components/product-hub-tray/index.js +1 -1
  267. package/dist/components/product-hub-tray/product-hub-tray.d.ts.map +1 -1
  268. package/dist/components/public-footer/index.js +1 -1
  269. package/dist/components/public-header/index.js +1 -1
  270. package/dist/components/radiograph-panel/index.js +1 -1
  271. package/dist/components/rich-text-editor/editor-toolbar.d.ts.map +1 -1
  272. package/dist/components/rich-text-editor/index.js +2 -2
  273. package/dist/components/scroll-area/index.js +1 -1
  274. package/dist/components/scroll-area/scroll-area.d.ts +6 -5
  275. package/dist/components/scroll-area/scroll-area.d.ts.map +1 -1
  276. package/dist/components/search-bar/index.js +1 -1
  277. package/dist/components/search-bar/search-bar.d.ts +1 -1
  278. package/dist/components/search-bar/search-bar.d.ts.map +1 -1
  279. package/dist/components/sheet/index.js +1 -1
  280. package/dist/components/sidebar/index.d.ts +1 -1
  281. package/dist/components/sidebar/index.d.ts.map +1 -1
  282. package/dist/components/sidebar/index.js +1 -1
  283. package/dist/components/sidebar/sidebar-move.d.ts +88 -0
  284. package/dist/components/sidebar/sidebar-move.d.ts.map +1 -0
  285. package/dist/components/sidebar/sidebar.d.ts +26 -1
  286. package/dist/components/sidebar/sidebar.d.ts.map +1 -1
  287. package/dist/components/sign-document/index.js +1 -1
  288. package/dist/components/task-editor/index.js +1 -1
  289. package/dist/components/task-editor/task-editor.d.ts.map +1 -1
  290. package/dist/components/tool-rail/index.js +1 -1
  291. package/dist/components/tool-rail/tool-rail.d.ts.map +1 -1
  292. package/dist/components/voice-control-panel/index.js +1 -1
  293. package/dist/components/widget-picker/index.js +1 -1
  294. package/dist/components/widget-picker/widget-picker.d.ts.map +1 -1
  295. package/dist/host-compat.css +2 -1
  296. package/dist/i18n/locales/ar.d.ts +24 -0
  297. package/dist/i18n/locales/ar.d.ts.map +1 -1
  298. package/dist/i18n/locales/ar.js +26 -2
  299. package/dist/i18n/locales/ar.js.map +1 -1
  300. package/dist/i18n/locales/de.d.ts +24 -0
  301. package/dist/i18n/locales/de.d.ts.map +1 -1
  302. package/dist/i18n/locales/de.js +26 -2
  303. package/dist/i18n/locales/de.js.map +1 -1
  304. package/dist/i18n/locales/el.d.ts +24 -0
  305. package/dist/i18n/locales/el.d.ts.map +1 -1
  306. package/dist/i18n/locales/el.js +26 -2
  307. package/dist/i18n/locales/el.js.map +1 -1
  308. package/dist/i18n/locales/en.d.ts +24 -0
  309. package/dist/i18n/locales/en.d.ts.map +1 -1
  310. package/dist/i18n/locales/en.js +26 -2
  311. package/dist/i18n/locales/en.js.map +1 -1
  312. package/dist/i18n/locales/es.d.ts +24 -0
  313. package/dist/i18n/locales/es.d.ts.map +1 -1
  314. package/dist/i18n/locales/es.js +26 -2
  315. package/dist/i18n/locales/es.js.map +1 -1
  316. package/dist/i18n/locales/fr.d.ts +24 -0
  317. package/dist/i18n/locales/fr.d.ts.map +1 -1
  318. package/dist/i18n/locales/fr.js +26 -2
  319. package/dist/i18n/locales/fr.js.map +1 -1
  320. package/dist/i18n/locales/hi.d.ts +24 -0
  321. package/dist/i18n/locales/hi.d.ts.map +1 -1
  322. package/dist/i18n/locales/hi.js +26 -2
  323. package/dist/i18n/locales/hi.js.map +1 -1
  324. package/dist/i18n/locales/it.d.ts +24 -0
  325. package/dist/i18n/locales/it.d.ts.map +1 -1
  326. package/dist/i18n/locales/it.js +26 -2
  327. package/dist/i18n/locales/it.js.map +1 -1
  328. package/dist/i18n/locales/ja.d.ts +24 -0
  329. package/dist/i18n/locales/ja.d.ts.map +1 -1
  330. package/dist/i18n/locales/ja.js +26 -2
  331. package/dist/i18n/locales/ja.js.map +1 -1
  332. package/dist/i18n/locales/nl.d.ts +24 -0
  333. package/dist/i18n/locales/nl.d.ts.map +1 -1
  334. package/dist/i18n/locales/nl.js +26 -2
  335. package/dist/i18n/locales/nl.js.map +1 -1
  336. package/dist/i18n/locales/pl.d.ts +24 -0
  337. package/dist/i18n/locales/pl.d.ts.map +1 -1
  338. package/dist/i18n/locales/pl.js +26 -2
  339. package/dist/i18n/locales/pl.js.map +1 -1
  340. package/dist/i18n/locales/pt.d.ts +24 -0
  341. package/dist/i18n/locales/pt.d.ts.map +1 -1
  342. package/dist/i18n/locales/pt.js +26 -2
  343. package/dist/i18n/locales/pt.js.map +1 -1
  344. package/dist/i18n/locales/ro.d.ts +24 -0
  345. package/dist/i18n/locales/ro.d.ts.map +1 -1
  346. package/dist/i18n/locales/ro.js +26 -2
  347. package/dist/i18n/locales/ro.js.map +1 -1
  348. package/dist/i18n/locales/ru.d.ts +24 -0
  349. package/dist/i18n/locales/ru.d.ts.map +1 -1
  350. package/dist/i18n/locales/ru.js +26 -2
  351. package/dist/i18n/locales/ru.js.map +1 -1
  352. package/dist/i18n/locales/sq.d.ts +24 -0
  353. package/dist/i18n/locales/sq.d.ts.map +1 -1
  354. package/dist/i18n/locales/sq.js +26 -2
  355. package/dist/i18n/locales/sq.js.map +1 -1
  356. package/dist/i18n/locales/sv.d.ts +24 -0
  357. package/dist/i18n/locales/sv.d.ts.map +1 -1
  358. package/dist/i18n/locales/sv.js +26 -2
  359. package/dist/i18n/locales/sv.js.map +1 -1
  360. package/dist/i18n/locales/tr.d.ts +24 -0
  361. package/dist/i18n/locales/tr.d.ts.map +1 -1
  362. package/dist/i18n/locales/tr.js +26 -2
  363. package/dist/i18n/locales/tr.js.map +1 -1
  364. package/dist/i18n/locales/zh.d.ts +24 -0
  365. package/dist/i18n/locales/zh.d.ts.map +1 -1
  366. package/dist/i18n/locales/zh.js +26 -2
  367. package/dist/i18n/locales/zh.js.map +1 -1
  368. package/dist/index.js +204 -203
  369. package/dist/locales/ar.json +26 -2
  370. package/dist/locales/de.json +26 -2
  371. package/dist/locales/el.json +26 -2
  372. package/dist/locales/en.json +26 -2
  373. package/dist/locales/es.json +26 -2
  374. package/dist/locales/fr.json +26 -2
  375. package/dist/locales/hi.json +26 -2
  376. package/dist/locales/it.json +26 -2
  377. package/dist/locales/ja.json +26 -2
  378. package/dist/locales/nl.json +26 -2
  379. package/dist/locales/pl.json +26 -2
  380. package/dist/locales/pt.json +26 -2
  381. package/dist/locales/ro.json +26 -2
  382. package/dist/locales/ru.json +26 -2
  383. package/dist/locales/sq.json +26 -2
  384. package/dist/locales/sv.json +26 -2
  385. package/dist/locales/tr.json +26 -2
  386. package/dist/locales/zh.json +26 -2
  387. package/dist/patterns/alia-assistant/alia-asteroid-icon.d.ts +10 -13
  388. package/dist/patterns/alia-assistant/alia-asteroid-icon.d.ts.map +1 -1
  389. package/dist/patterns/alia-assistant/alia-chat-surface.d.ts.map +1 -1
  390. package/dist/patterns/alia-assistant/alia-popout.d.ts +5 -3
  391. package/dist/patterns/alia-assistant/alia-popout.d.ts.map +1 -1
  392. package/dist/patterns/alia-assistant/index.d.ts +2 -0
  393. package/dist/patterns/alia-assistant/index.d.ts.map +1 -1
  394. package/dist/patterns/alia-assistant/index.js +6 -5
  395. package/dist/patterns/anamnesis/index.js +1 -1
  396. package/dist/patterns/calendar/index.js +1 -1
  397. package/dist/patterns/forgot-password-form/index.js +1 -1
  398. package/dist/patterns/help-me-write-templates/index.js +1 -1
  399. package/dist/patterns/login-form/index.js +1 -1
  400. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  401. package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts +40 -10
  402. package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts.map +1 -1
  403. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  404. package/dist/patterns/registration-form/index.js +1 -1
  405. package/dist/patterns/signature-request/index.js +1 -1
  406. package/dist/patterns/signed-out-frame/index.js +1 -1
  407. package/dist/tokens.css +1 -1
  408. package/package.json +1 -1
  409. package/dist/_chunks/ai-permission-notice-5vpblPCx.js +0 -171
  410. package/dist/_chunks/ai-permission-notice-5vpblPCx.js.map +0 -1
  411. package/dist/_chunks/alia-sidebar-DOei4Iyu.js +0 -1183
  412. package/dist/_chunks/alia-sidebar-DOei4Iyu.js.map +0 -1
  413. package/dist/_chunks/calendar-workspace-Du2ryaI-.js.map +0 -1
  414. package/dist/_chunks/chart-HsF1KHbx.js.map +0 -1
  415. package/dist/_chunks/color-picker-BRQ4Y9SO.js.map +0 -1
  416. package/dist/_chunks/dashboard-grid-DfEY2qci.js +0 -844
  417. package/dist/_chunks/dashboard-grid-DfEY2qci.js.map +0 -1
  418. package/dist/_chunks/date-picker-wRAcq2lt.js.map +0 -1
  419. package/dist/_chunks/date-range-picker-CtUOI38x.js.map +0 -1
  420. package/dist/_chunks/date-time-picker-CLeLKuv9.js.map +0 -1
  421. package/dist/_chunks/hover-card-BnTueNS2.js.map +0 -1
  422. package/dist/_chunks/link-2HokYuIi.js +0 -130
  423. package/dist/_chunks/link-2HokYuIi.js.map +0 -1
  424. package/dist/_chunks/list-RRN2TJ_7.js.map +0 -1
  425. package/dist/_chunks/marketplace-app-shell-Dcx-JEjg.js +0 -541
  426. package/dist/_chunks/marketplace-app-shell-Dcx-JEjg.js.map +0 -1
  427. package/dist/_chunks/message-tray-BB95DA82.js.map +0 -1
  428. package/dist/_chunks/non-modal-tab-exit-D2Bd93Bq.js +0 -65
  429. package/dist/_chunks/non-modal-tab-exit-D2Bd93Bq.js.map +0 -1
  430. package/dist/_chunks/notification-tray-__sJXnsz.js.map +0 -1
  431. package/dist/_chunks/panel-subview-BT-Apwgb.js.map +0 -1
  432. package/dist/_chunks/pdf-viewer-C3minW5b.js.map +0 -1
  433. package/dist/_chunks/phone-input-DxkHMYmu.js.map +0 -1
  434. package/dist/_chunks/popover-BI3oV3eY.js +0 -305
  435. package/dist/_chunks/popover-BI3oV3eY.js.map +0 -1
  436. package/dist/_chunks/product-hub-panel-BSSiGGG4.js.map +0 -1
  437. package/dist/_chunks/rich-text-editor-CkFfmA3v.js.map +0 -1
  438. package/dist/_chunks/scroll-area-ZtFCv9K7.js.map +0 -1
  439. package/dist/_chunks/search-bar-DQJS0wJN.js.map +0 -1
  440. package/dist/_chunks/sidebar-DLsG2AIk.js +0 -1349
  441. package/dist/_chunks/sidebar-DLsG2AIk.js.map +0 -1
  442. package/dist/_chunks/task-editor-ByyRu29Y.js.map +0 -1
  443. package/dist/_chunks/use-state-backed-input-C7ESmxKB.js +0 -59
  444. package/dist/_chunks/use-state-backed-input-C7ESmxKB.js.map +0 -1
  445. package/dist/_chunks/widget-picker-DXYBMTfe.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-bar-mA4bPe3t.js","sources":["../../src/components/search-bar/search-bar.agent.ts","../../src/components/search-bar/search-bar.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — SearchBar. */\n/* */\n/* SearchBar is the kit's saved-search / global-search surface. In */\n/* `inline` mode it filters + opens a result popover; in `launcher` */\n/* mode it opens the CommandPalette. The adapter exposes the query, */\n/* a submit action, and an apply_saved_search hook so future MCP */\n/* tooling can drive the SearchBar by saved-search id. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { SearchBarHandle } from './search-bar';\n\nexport const searchBarAgent: AgentAdapter<SearchBarHandle> = {\n id: 'search-bar',\n // The query is a transient filter (set_query/clear), not inline content\n // editing — `filter` covers it. `submit` opens the palette / commits a hit.\n capabilities: ['filter', 'submit'],\n state: {\n query: {\n type: 'string',\n descriptionKey: 'ui.agent.searchBar.state.query',\n description:\n 'Current raw query string (inline mode). Empty in launcher mode.',\n read: (handle) => handle.getQuery(),\n },\n isEmpty: {\n type: 'boolean',\n descriptionKey: 'ui.agent.searchBar.state.isEmpty',\n description: 'True when the query is empty.',\n read: (handle) => handle.getQuery().length === 0,\n },\n },\n actions: {\n set_query: {\n // Pure ephemeral filter text — narrows the result popover, no persisted change.\n safety: 'read',\n argsType: '{ query: string }',\n argsSchema: {\n type: 'object',\n properties: {\n query: { type: 'string', description: 'Filter text for the search.' },\n },\n required: ['query'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.searchBar.actions.setQuery',\n description:\n 'Replace the current query (inline mode only). No-op in launcher mode.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n clear: {\n // Clears transient search state — no user content lost.\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.searchBar.actions.clear',\n description: 'Clear the query and close the result popover.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n submit: {\n // Opens the palette / commits the highlighted option — ephemeral UI navigation.\n safety: 'read',\n descriptionKey: 'ui.agent.searchBar.actions.submit',\n description:\n 'In launcher mode opens the CommandPalette; in inline mode commits the highlighted option.',\n invoke: (handle) => {\n handle.submit();\n },\n },\n focus: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.searchBar.actions.focus',\n description: 'Move keyboard focus to the SearchBar.',\n invoke: (handle) => {\n handle.focus();\n },\n },\n apply_saved_search: {\n // Selects a stored search by id — pure UI routing into the existing handler.\n safety: 'read',\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Saved-search id resolved by the host handler.',\n },\n },\n required: ['id'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.searchBar.actions.applySavedSearch',\n description:\n 'Apply a saved-search by id. The host wires the actual query lookup; the adapter routes the id to its onApplySavedSearch handler. No-op when no handler is wired.',\n invoke: (handle, args: { id: string }) => {\n handle.applySavedSearch(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'search-bar',\n description: 'Marks the SearchBar root.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Search } from 'lucide-react';\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport {\n SearchInput,\n type SearchInputRefValue,\n} from '../search-input/search-input';\nimport { useDebouncedCallback, normalizeDiacritics } from '../_shared';\nimport { MENU_ROW_HIGHLIGHT } from '../_shared/menu-row';\nimport { useNavigationDismiss } from '../_shared/navigation-dismiss';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { searchBarAgent } from './search-bar.agent';\n\n/* ------------------------------------------------------------------ */\n/* Shortcut detection */\n/* ------------------------------------------------------------------ */\n\nfunction isMacLike(): boolean {\n if (typeof navigator === 'undefined') return false;\n // Prefer `userAgentData.platform` where supported; fall back to the\n // deprecated `navigator.platform`. Both are strings; we just look for\n // `mac`.\n const uaData = (\n navigator as unknown as {\n userAgentData?: { platform?: string };\n }\n ).userAgentData;\n const platformString = uaData?.platform ?? navigator.platform ?? '';\n return /mac/i.test(platformString);\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst launcherVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n // Same visual language as <SearchInput> so the launcher truly looks\n // like an input. --muted-foreground over --background meets AA 4.5:1\n // in every theme; --muted is a mid-tone not suitable as a surface.\n 'ds:bg-[var(--background)] ds:border ds:border-[color:var(--control-border)]',\n 'ds:text-[color:var(--muted-foreground)]',\n // Opaque hover — mix 20% muted into --background so the launcher stays a\n // solid surface even when placed over a brand-tinted parent (e.g. the\n // Header's `brand` variant).\n 'ds:hover:bg-[color-mix(in_srgb,var(--muted)_20%,var(--background))]',\n 'ds:transition-colors ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:disabled:opacity-50 ds:disabled:cursor-not-allowed',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:text-[length:var(--font-size-sm)]',\n md: 'ds:text-[length:var(--font-size-base)]',\n lg: 'ds:text-[length:var(--font-size-lg)]',\n },\n density: {\n default: '',\n compact: 'ds:min-h-0 ds:h-8',\n },\n },\n defaultVariants: {\n size: 'md',\n density: 'default',\n },\n },\n);\n\nconst inlineWrapperVariants = cva(\n ['ds:inline-flex ds:flex-col', 'ds:w-full'].join(' '),\n {\n variants: {\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n density: {\n default: '',\n compact: '',\n },\n },\n defaultVariants: {\n size: 'md',\n density: 'default',\n },\n },\n);\n\nconst shortcutPillVariants = cva(\n [\n 'ds:hidden ds:md:inline-flex ds:items-center ds:gap-[calc(var(--spacing-xs)/2)]',\n 'ds:ms-auto',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)]',\n 'ds:ps-[calc(var(--spacing-xs)/1.2)] ds:pe-[calc(var(--spacing-xs)/1.2)]',\n 'ds:py-[calc(var(--spacing-xs)/2)]',\n // Use full --foreground (not --muted-foreground) so axe's contrast\n // check clears 4.5:1 even against the 1px --border edge region.\n 'ds:text-[length:var(--font-size-xs)] ds:text-[color:var(--foreground)]',\n 'ds:font-[family-name:var(--font-mono)]',\n ].join(' '),\n);\n\nconst popoverContentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:p-[var(--spacing-xs)]',\n // Motion gates — reduced-motion honoured via .theme-accessible's 0ms\n // animation-duration token.\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface SearchBarResultItem {\n id: string;\n /** Display label. */\n label: string;\n /** Optional icon rendered on inline-start (aria-hidden). */\n icon?: ReactNode;\n /** Optional right-aligned meta text (tag, count, section label). */\n meta?: string;\n /** Optional href — the list renders anchors when present. */\n href?: string;\n}\n\nexport interface SearchBarResultGroup {\n /** Heading displayed above the items (aria-hidden=\"true\" — visual only). */\n heading?: string;\n items: SearchBarResultItem[];\n}\n\ntype SharedProps = {\n size?: 'sm' | 'md' | 'lg';\n density?: 'default' | 'compact';\n /** `true` wraps in <search role=\"search\"> when this is the page's primary search. */\n topLevel?: boolean;\n placeholder?: string;\n /** Platform-aware shortcut pill — default `true` (hidden below `md` breakpoint). */\n shortcutHint?: boolean;\n className?: string;\n /**\n * Consumer-supplied instance id, surfaced as `data-component-id` so an\n * agent / UI bridge can address this instance.\n */\n id?: string;\n /**\n * Called when an external driver (agent adapter) asks the host to apply\n * a saved search by id. The host is responsible for resolving the saved\n * search and feeding the resulting query back through `value` /\n * `onQueryChange`. No-op when not provided.\n */\n onApplySavedSearch?: (id: string) => void;\n};\n\n/**\n * Imperative handle for agent-readiness + programmatic control. Replaces\n * the previously-forwarded `HTMLDivElement` ref. Consumers who needed the\n * DOM element for layout queries should wrap the SearchBar in their own\n * div with a ref attached.\n */\nexport interface SearchBarHandle {\n getQuery: () => string;\n setQuery: (query: string) => void;\n clear: () => void;\n submit: () => void;\n focus: () => void;\n applySavedSearch: (id: string) => void;\n}\n\ntype LauncherProps = SharedProps & {\n mode?: 'launcher';\n /** Called on click / Enter / global Cmd/Ctrl+K. */\n onOpenCommandPalette: () => void;\n // Not used in launcher mode.\n value?: never;\n defaultValue?: never;\n onQueryChange?: never;\n results?: never;\n onSelect?: never;\n debounceMs?: never;\n};\n\ntype InlineProps = SharedProps & {\n mode: 'inline';\n value?: string;\n defaultValue?: string;\n onQueryChange?: (query: string) => void;\n /** Groups of results rendered in the popover. */\n results?: SearchBarResultGroup[];\n onSelect?: (item: SearchBarResultItem) => void;\n debounceMs?: number;\n // Not used in inline mode.\n onOpenCommandPalette?: never;\n};\n\n// `onSelect` is the result callback, so the DOM event of the same name is\n// dropped; merged, a handler reading the selected item would not compile.\nexport type SearchBarProps = (LauncherProps | InlineProps) &\n Omit<\n HTMLAttributes<HTMLDivElement>,\n 'role' | 'onChange' | 'onSelect' | 'children' | 'defaultValue' | 'results'\n > &\n VariantProps<typeof launcherVariants>;\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nexport function filterSearchResults(\n query: string,\n groups: SearchBarResultGroup[],\n): SearchBarResultGroup[] {\n const needle = normalizeDiacritics(query.trim());\n if (needle === '') return groups;\n return groups\n .map((g) => ({\n ...g,\n items: g.items.filter((item) =>\n normalizeDiacritics(item.label).includes(needle),\n ),\n }))\n .filter((g) => g.items.length > 0);\n}\n\n/* ------------------------------------------------------------------ */\n/* SearchBar */\n/* ------------------------------------------------------------------ */\n\nexport const SearchBar = forwardRef<HTMLDivElement, SearchBarProps>(\n (props, ref) => {\n // Strip every API prop from `...rest` so nothing leaks to the DOM as\n // an unknown attribute (React warns in DEV and some become invalid\n // HTML in production).\n const {\n mode = 'launcher',\n size = 'md',\n density = 'default',\n topLevel = false,\n placeholder,\n shortcutHint = true,\n className,\n onOpenCommandPalette,\n id,\n onApplySavedSearch,\n value: _value,\n defaultValue: _defaultValue,\n onQueryChange: _onQueryChange,\n results: _results,\n onSelect: _onSelect,\n debounceMs: _debounceMs,\n ...rest\n } = props as SearchBarProps & { className?: string };\n // silence unused-var warnings for the destructured siblings we only\n // needed to peel off the spread target.\n void _value;\n void _defaultValue;\n void _onQueryChange;\n void _results;\n void _onSelect;\n void _debounceMs;\n\n const { t } = useTranslation('ui');\n const [isMac, setIsMac] = useState(false);\n useEffect(() => {\n setIsMac(isMacLike());\n }, []);\n\n const shortcutLabel = isMac ? '\\u2318K' : 'Ctrl+K';\n // Advertise the shortcut on the launcher button. The binding itself\n // lives in `useCommandPalette()` (CommandPalette owns its open state);\n // duplicating the listener here would cause a double-fire.\n const ariaKeyshortcuts = 'Meta+K Control+K';\n\n /* ---- Landmark role --------------------------------------------- */\n const landmarkProps = topLevel\n ? { role: 'search' as const }\n : { role: undefined };\n\n /* ---- LAUNCHER MODE -------------------------------------------- */\n if (mode === 'launcher') {\n const resolvedPlaceholder =\n placeholder ?? t('search.placeholder', 'Search\\u2026');\n return (\n <LauncherSearchBar\n forwardedRef={ref}\n id={id}\n landmarkProps={landmarkProps}\n className={className}\n onOpenCommandPalette={onOpenCommandPalette}\n onApplySavedSearch={onApplySavedSearch}\n resolvedPlaceholder={resolvedPlaceholder}\n openLabel={t('search.open', 'Open search')}\n ariaKeyshortcuts={ariaKeyshortcuts}\n launcherClass={launcherVariants({ size, density })}\n shortcutHint={shortcutHint}\n shortcutLabel={shortcutLabel}\n rest={rest as HTMLAttributes<HTMLButtonElement>}\n />\n );\n }\n\n /* ---- INLINE MODE ---------------------------------------------- */\n const inlineProps = props as InlineProps;\n return (\n <InlineSearchBar\n forwardedRef={ref}\n size={size}\n density={density}\n landmarkProps={landmarkProps}\n placeholder={placeholder}\n shortcutHint={shortcutHint}\n shortcutLabel={shortcutLabel}\n ariaKeyshortcuts={ariaKeyshortcuts}\n className={className}\n id={id}\n onApplySavedSearch={onApplySavedSearch}\n {...inlineProps}\n />\n );\n },\n);\n\nSearchBar.displayName = 'SearchBar';\n\n/* ------------------------------------------------------------------ */\n/* LauncherSearchBar \\u2014 internal */\n/* ------------------------------------------------------------------ */\n\ninterface LauncherInternalProps {\n forwardedRef: React.ForwardedRef<HTMLDivElement>;\n id?: string;\n landmarkProps: { role?: 'search' };\n className?: string;\n onOpenCommandPalette?: () => void;\n onApplySavedSearch?: (id: string) => void;\n resolvedPlaceholder: string;\n openLabel: string;\n ariaKeyshortcuts: string;\n launcherClass: string;\n shortcutHint: boolean;\n shortcutLabel: string;\n rest: HTMLAttributes<HTMLButtonElement>;\n}\n\nfunction LauncherSearchBar(props: LauncherInternalProps): ReactNode {\n const {\n forwardedRef,\n id,\n landmarkProps,\n className,\n onOpenCommandPalette,\n onApplySavedSearch,\n resolvedPlaceholder,\n openLabel,\n ariaKeyshortcuts,\n launcherClass,\n shortcutHint,\n shortcutLabel,\n rest,\n } = props;\n const buttonRef = useRef<HTMLButtonElement>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n\n const handle = useMemo<SearchBarHandle>(\n () => ({\n getQuery: () => '',\n // Launcher mode is stateless \\u2014 it delegates to CommandPalette.\n setQuery: () => {},\n clear: () => {},\n submit: () => onOpenCommandPalette?.(),\n focus: () => buttonRef.current?.focus(),\n applySavedSearch: (savedId: string) => onApplySavedSearch?.(savedId),\n }),\n [onOpenCommandPalette, onApplySavedSearch],\n );\n useImperativeHandle(\n forwardedRef,\n () => rootRef.current as HTMLDivElement,\n [],\n );\n useAgentRegistration(searchBarAgent, handle, id);\n\n return (\n <div\n ref={rootRef}\n {...landmarkProps}\n data-component=\"search-bar\"\n data-component-id={id}\n id={id}\n className={className}\n >\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={onOpenCommandPalette}\n aria-haspopup=\"dialog\"\n aria-label={openLabel}\n aria-keyshortcuts={ariaKeyshortcuts}\n className={launcherClass}\n {...rest}\n >\n <Search\n aria-hidden\n className=\"ds:size-4 ds:shrink-0\"\n focusable=\"false\"\n />\n <span aria-hidden=\"true\" className=\"ds:truncate ds:text-start\">\n {resolvedPlaceholder}\n </span>\n {shortcutHint ? (\n <kbd className={shortcutPillVariants()}>{shortcutLabel}</kbd>\n ) : null}\n </button>\n </div>\n );\n}\n\n// A safety bound, not a window: an echo settles every report before it, so\n// only a host that never echoes reaches it. No real echo comes 100 pauses late.\nconst PENDING_REPORTS = 100;\n\n/* ------------------------------------------------------------------ */\n/* InlineSearchBar — internal */\n/* ------------------------------------------------------------------ */\n\ninterface InlineInternalProps extends InlineProps {\n forwardedRef: React.ForwardedRef<HTMLDivElement>;\n size: 'sm' | 'md' | 'lg';\n density: 'default' | 'compact';\n landmarkProps: { role?: 'search' };\n shortcutHint: boolean;\n shortcutLabel: string;\n ariaKeyshortcuts: string;\n className?: string;\n id?: string;\n onApplySavedSearch?: (id: string) => void;\n}\n\nfunction InlineSearchBar(props: InlineInternalProps): ReactNode {\n const {\n forwardedRef,\n size,\n density,\n landmarkProps,\n placeholder,\n shortcutHint,\n shortcutLabel,\n ariaKeyshortcuts,\n className,\n id,\n onApplySavedSearch,\n value,\n defaultValue,\n onQueryChange,\n results,\n onSelect,\n debounceMs = 150,\n } = props;\n\n const { t } = useTranslation('ui');\n const isControlled = value !== undefined;\n // The field's own text, in both modes: a typed character is never reverted\n // while the debounced `onQueryChange` is on its way to the host.\n const [internalValue, setInternalValue] = useState(\n value ?? defaultValue ?? '',\n );\n const query = internalValue;\n\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(0);\n // SearchInput forwards an `HTMLInputElement` with the curated handle\n // methods grafted on — for our purposes we just need `.focus()`.\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listboxId = useId();\n const dismissNavigation = useNavigationDismiss();\n\n // Reports a controlled host has not echoed back yet, oldest first. A\n // `value` equal to one is its late echo and settles the reports before it.\n // Uncontrolled, nothing echoes, so nothing is kept.\n const reportedRef = useRef<string[]>([]);\n const isControlledRef = useRef(isControlled);\n isControlledRef.current = isControlled;\n const report = useCallback(\n (next: string) => {\n if (isControlledRef.current) {\n reportedRef.current = [\n ...reportedRef.current.slice(1 - PENDING_REPORTS),\n next,\n ];\n }\n onQueryChange?.(next);\n },\n [onQueryChange],\n );\n const debouncedQueryChange = useDebouncedCallback(report, debounceMs);\n\n // SearchInput is always left uncontrolled, so the query stays out of the\n // `value` attribute. A change made here rather than typed goes in through\n // SearchInput's own handle; handleInput ignores the echo.\n const writingRef = useRef(false);\n const writeQuery = useCallback((next: string) => {\n const node = inputRef.current as SearchInputRefValue | null;\n if (!node || typeof node.setQuery !== 'function') return;\n writingRef.current = true;\n try {\n node.setQuery(next);\n } finally {\n writingRef.current = false;\n }\n }, []);\n\n // Show a controlled `value` on mount. Later, follow it only when the host\n // changes it to something that is neither the field's text nor an echo.\n useIsomorphicLayoutEffect(() => {\n if (isControlled && value !== '') writeQuery(value);\n // Mount only: later values go through the effect below.\n }, []);\n const lastValueRef = useRef(value);\n // Set by a pick: the host may clear to the `value` it already had.\n const afterPickRef = useRef(false);\n useIsomorphicLayoutEffect(() => {\n const changed = value !== lastValueRef.current;\n lastValueRef.current = value;\n const afterPick = afterPickRef.current;\n afterPickRef.current = false;\n if (value === undefined) {\n reportedRef.current = [];\n return;\n }\n if (changed) {\n const echo = reportedRef.current.indexOf(value);\n if (echo >= 0) {\n reportedRef.current = reportedRef.current.slice(echo + 1);\n if (!afterPick) return;\n }\n }\n if (value === internalValue || (!changed && !afterPick)) return;\n reportedRef.current = [];\n debouncedQueryChange.cancel();\n setInternalValue(value);\n writeQuery(value);\n });\n\n const flatResults = useMemo<SearchBarResultItem[]>(() => {\n if (!results) return [];\n return results.flatMap((g) => g.items);\n }, [results]);\n\n // Reset active index whenever the result count changes.\n useEffect(() => {\n if (activeIndex > flatResults.length - 1) setActiveIndex(0);\n }, [flatResults.length, activeIndex]);\n\n const handleInput = useCallback(\n (raw: string) => {\n if (writingRef.current) return;\n setInternalValue(raw);\n debouncedQueryChange(raw);\n setOpen(raw.trim().length > 0);\n },\n [debouncedQueryChange],\n );\n\n const commit = useCallback(\n (item: SearchBarResultItem) => {\n // Report what was typed first, so a host that clears its `value` in\n // `onSelect` clears the field even before the debounce has fired.\n debouncedQueryChange.flush();\n afterPickRef.current = isControlled;\n onSelect?.(item);\n setOpen(false);\n if (!isControlled) {\n setInternalValue('');\n writeQuery('');\n }\n // A pick navigates, so a phone drawer holding this search closes.\n dismissNavigation?.();\n },\n [\n debouncedQueryChange,\n onSelect,\n isControlled,\n writeQuery,\n dismissNavigation,\n ],\n );\n\n const handleKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (event.nativeEvent.isComposing || event.keyCode === 229) return;\n if (!open && event.key === 'ArrowDown' && flatResults.length > 0) {\n event.preventDefault();\n setOpen(true);\n return;\n }\n if (!open) return;\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n setActiveIndex((i) => (i + 1) % Math.max(flatResults.length, 1));\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n setActiveIndex(\n (i) =>\n (i - 1 + Math.max(flatResults.length, 1)) %\n Math.max(flatResults.length, 1),\n );\n } else if (event.key === 'Enter') {\n const item = flatResults[activeIndex];\n if (item) {\n event.preventDefault();\n commit(item);\n }\n } else if (event.key === 'Escape') {\n event.preventDefault();\n setOpen(false);\n }\n },\n [open, flatResults, activeIndex, commit],\n );\n\n const resolvedPlaceholder =\n placeholder ?? t('search.placeholder', 'Search\\u2026');\n\n const hasResults = flatResults.length > 0;\n // aria-activedescendant may only reference an element that actually exists\n // in the DOM — so only set it when the popover is open AND there are\n // results to land on. Referencing a non-existent option is an a11y\n // violation (aria-valid-attr-value).\n const activeDescendantId =\n open && hasResults ? `${listboxId}-option-${activeIndex}` : undefined;\n\n const setQueryProgrammatic = useCallback(\n (next: string) => {\n setInternalValue(next);\n writeQuery(next);\n debouncedQueryChange.cancel();\n report(next);\n setOpen(next.trim().length > 0);\n },\n [debouncedQueryChange, report, writeQuery],\n );\n\n const rootRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(\n forwardedRef,\n () => rootRef.current as HTMLDivElement,\n [],\n );\n\n const agentHandle = useMemo<SearchBarHandle>(\n () => ({\n getQuery: () => query,\n setQuery: setQueryProgrammatic,\n clear: () => {\n setQueryProgrammatic('');\n },\n submit: () => {\n const item = flatResults[activeIndex];\n if (item) commit(item);\n },\n focus: () => inputRef.current?.focus(),\n applySavedSearch: (savedId: string) => onApplySavedSearch?.(savedId),\n }),\n [\n query,\n setQueryProgrammatic,\n flatResults,\n activeIndex,\n commit,\n onApplySavedSearch,\n ],\n );\n useAgentRegistration(searchBarAgent, agentHandle, id);\n\n return (\n <RadixPopover.Root open={open && hasResults} onOpenChange={setOpen}>\n <div\n ref={rootRef}\n {...landmarkProps}\n id={id}\n data-component=\"search-bar\"\n data-component-id={id}\n className={[inlineWrapperVariants({ size, density }), className]\n .filter(Boolean)\n .join(' ')}\n >\n <RadixPopover.Anchor asChild>\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions -- keyboard handling propagates to the inner SearchInput; this wrapper captures combobox/listbox keys */}\n <div\n className=\"ds:relative ds:flex ds:items-center\"\n onKeyDown={handleKeyDown}\n >\n <SearchInput\n ref={inputRef}\n size={size}\n {...(isControlled ? {} : { defaultValue })}\n onInput={handleInput}\n placeholder={resolvedPlaceholder}\n aria-label={t('search.label', 'Search')}\n aria-keyshortcuts={ariaKeyshortcuts}\n role=\"combobox\"\n aria-expanded={open && hasResults}\n aria-controls={listboxId}\n aria-activedescendant={activeDescendantId}\n />\n {shortcutHint ? (\n <kbd\n className={[\n shortcutPillVariants(),\n 'ds:absolute ds:end-[var(--spacing-sm)] ds:top-1/2 ds:-translate-y-1/2',\n 'ds:pointer-events-none',\n ].join(' ')}\n >\n {shortcutLabel}\n </kbd>\n ) : null}\n </div>\n </RadixPopover.Anchor>\n <RadixPopover.Portal>\n <RadixPopover.Content\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n aria-label={t('search.resultsLabel', 'Search results')}\n onOpenAutoFocus={(e) => e.preventDefault()}\n // Width matches the anchor via Radix's CSS variable. Applied\n // as a Tailwind arbitrary-value class so no inline style is\n // needed (23-constraints §4).\n className={[\n popoverContentVariants(),\n 'ds:w-[var(--radix-popover-trigger-width)]',\n ].join(' ')}\n >\n {/* listbox uses <div> rather than <ul> so the option role\n children don't trip the `<ul> must only contain <li>` axe\n rule. Options are direct descendants of the listbox root\n per the WAI-ARIA listbox pattern. */}\n <div\n id={listboxId}\n role=\"listbox\"\n aria-label={t('search.resultsLabel', 'Search results')}\n className=\"ds:flex ds:flex-col ds:gap-[calc(var(--spacing-xs)/2)]\"\n >\n {results && results.length > 0 ? (\n renderGroups(\n results,\n activeIndex,\n listboxId,\n commit,\n setActiveIndex,\n )\n ) : (\n <div\n role=\"presentation\"\n className=\"ds:p-[var(--spacing-sm)] type-body-sm ds:text-[color:var(--foreground)]\"\n >\n {t(\n 'search.noResults',\n 'No results for \\u201C{{query}}\\u201D',\n {\n query,\n },\n )}\n </div>\n )}\n </div>\n </RadixPopover.Content>\n </RadixPopover.Portal>\n </div>\n </RadixPopover.Root>\n );\n}\n\nfunction renderGroups(\n groups: SearchBarResultGroup[],\n activeIndex: number,\n listboxId: string,\n onCommit: (item: SearchBarResultItem) => void,\n setActive: (index: number) => void,\n): ReactNode {\n let flatIndex = 0;\n // Flatten groups + headings into a single-level sequence of divs at the\n // listbox root. `role=\"group\"` wrappers keep the visual grouping while\n // keeping options as direct descendants of the listbox.\n return groups.map((group, gi) => {\n const headingId = group.heading\n ? `${listboxId}-group-${gi}-heading`\n : undefined;\n return (\n <div\n key={`g-${gi}`}\n role={group.heading ? 'group' : 'presentation'}\n aria-labelledby={headingId}\n >\n {group.heading ? (\n <div\n id={headingId}\n aria-hidden=\"true\"\n className=\"ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)] type-eyebrow ds:text-[color:var(--foreground)]\"\n >\n {group.heading}\n </div>\n ) : null}\n {group.items.map((item) => {\n const myIndex = flatIndex;\n flatIndex += 1;\n const isActive = myIndex === activeIndex;\n const optionId = `${listboxId}-option-${myIndex}`;\n const safeHref = safeNavigationHref(item.href);\n const commonClass = [\n 'ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:cursor-pointer',\n 'ds:no-underline ds:text-[color:var(--foreground)]',\n 'ds:min-h-[var(--min-target-size)]',\n MENU_ROW_HIGHLIGHT.active,\n ].join(' ');\n const body = (\n <>\n {item.icon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {item.icon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:text-[length:var(--font-size-sm)]\">\n {item.label}\n </span>\n {item.meta ? (\n <span className=\"ds:ms-auto type-meta ds:text-[color:var(--foreground)]\">\n {item.meta}\n </span>\n ) : null}\n </>\n );\n const shared = {\n id: optionId,\n role: 'option' as const,\n 'aria-selected': isActive,\n 'data-active': isActive || undefined,\n // onMouseDown rather than onClick so we trigger before the\n // input loses focus to the pointer-down on the popover.\n onMouseDown: (e: React.MouseEvent) => {\n e.preventDefault();\n onCommit(item);\n },\n onMouseEnter: () => setActive(myIndex),\n className: commonClass,\n };\n if (safeHref) {\n return (\n <a key={item.id} href={safeHref} {...shared}>\n {body}\n </a>\n );\n }\n return (\n <div key={item.id} {...shared}>\n {body}\n </div>\n );\n })}\n </div>\n );\n });\n}\n\n/**\n * Allow-list for result-item `href` strings. Same allow-list as the\n * chat-message token renderer: http(s) + mailto + tel + same-origin\n * relative paths. Anything else (including `javascript:` and `data:`)\n * returns `undefined`, causing the renderer to fall back to a <div>.\n */\nfunction safeNavigationHref(href: string | undefined): string | undefined {\n if (!href) return undefined;\n const trimmed = href.trim();\n if (trimmed === '') return undefined;\n if (/^(https?:|mailto:|tel:)/i.test(trimmed)) return trimmed;\n // Same-origin relative paths are safe because the browser resolves\n // against `window.location`. Leading `/` or `./` or `../` qualify.\n if (/^(\\/|\\.\\/|\\.\\.\\/)/.test(trimmed)) return trimmed;\n return undefined;\n}\n"],"names":["searchBarAgent","handle","args","isMacLike","uaData","platformString","launcherVariants","cva","inlineWrapperVariants","shortcutPillVariants","popoverContentVariants","filterSearchResults","query","groups","needle","normalizeDiacritics","g","item","SearchBar","forwardRef","props","ref","mode","size","density","topLevel","placeholder","shortcutHint","className","onOpenCommandPalette","id","onApplySavedSearch","_value","_defaultValue","_onQueryChange","_results","_onSelect","_debounceMs","rest","t","useTranslation","isMac","setIsMac","useState","useEffect","shortcutLabel","ariaKeyshortcuts","landmarkProps","resolvedPlaceholder","jsx","LauncherSearchBar","InlineSearchBar","forwardedRef","openLabel","launcherClass","buttonRef","useRef","rootRef","useMemo","_a","savedId","useImperativeHandle","useAgentRegistration","jsxs","Search","PENDING_REPORTS","value","defaultValue","onQueryChange","results","onSelect","debounceMs","isControlled","internalValue","setInternalValue","open","setOpen","activeIndex","setActiveIndex","inputRef","listboxId","useId","dismissNavigation","useNavigationDismiss","reportedRef","isControlledRef","report","useCallback","next","debouncedQueryChange","useDebouncedCallback","writingRef","writeQuery","node","useIsomorphicLayoutEffect","lastValueRef","afterPickRef","changed","afterPick","echo","flatResults","handleInput","raw","commit","handleKeyDown","event","i","hasResults","activeDescendantId","setQueryProgrammatic","agentHandle","RadixPopover","SearchInput","renderGroups","onCommit","setActive","flatIndex","group","gi","headingId","myIndex","isActive","optionId","safeHref","safeNavigationHref","commonClass","MENU_ROW_HIGHLIGHT","body","Fragment","shared","e","href","trimmed"],"mappings":"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"}
@@ -4,9 +4,9 @@ import * as d from "@radix-ui/react-dialog";
4
4
  import { c as F } from "./index-D2ZczOXr.js";
5
5
  import { useTranslation as L } from "react-i18next";
6
6
  import { I as V } from "./icon-button-COX76Jdj.js";
7
- import { S as M } from "./scroll-area-ZtFCv9K7.js";
7
+ import { S as M } from "./scroll-area-CY5SLYNw.js";
8
8
  import { u as P } from "./registry-DvAUVLHh.js";
9
- import { u as K } from "./non-modal-tab-exit-D2Bd93Bq.js";
9
+ import { u as K } from "./non-modal-tab-exit-j3CPOuE3.js";
10
10
  import { X } from "./x-B5YnXwCz.js";
11
11
  const Y = {
12
12
  id: "sheet",
@@ -309,4 +309,4 @@ export {
309
309
  oe as S,
310
310
  Y as s
311
311
  };
312
- //# sourceMappingURL=sheet-C7SwIxwB.js.map
312
+ //# sourceMappingURL=sheet-Dtjk0CVv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sheet-C7SwIxwB.js","sources":["../../src/components/sheet/sheet.agent.ts","../../src/components/sheet/sheet.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { SheetHandle } from './sheet';\n\nexport const sheetAgent: AgentAdapter<SheetHandle> = {\n id: 'sheet',\n // `dismiss` shares the handle's close() — it is the same imperative close\n // path with destructive intent (loses uncommitted input). Backed.\n capabilities: ['open', 'close', 'dismiss'],\n state: {\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.sheet.state.isOpen',\n description: 'True when the sheet is currently open.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n // Pure ephemeral UI state — opening loses no data.\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.sheet.actions.open',\n description: 'Open the sheet.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n // Pure ephemeral UI state — closing is reversible by reopening and\n // loses no committed data.\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.sheet.actions.close',\n description: 'Close the sheet. Reversible by reopening.',\n invoke: (handle) => {\n handle.close();\n },\n },\n dismiss: {\n // Same close() path, but flagged destructive because dismissing a sheet\n // mid-edit discards any in-progress input that was not committed.\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.sheet.actions.dismiss',\n description:\n 'Dismiss the sheet. Loses any in-progress input that has not been committed.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'sheet' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on Sheet.Root.',\n },\n },\n};\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { X } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { ScrollArea } from '../scroll-area/scroll-area';\nimport { useAgentRegistration } from '../../agent';\nimport { useNonModalTabExit } from '../_shared/non-modal-tab-exit';\nimport { sheetAgent } from './sheet.agent';\n\nconst OVERLAY_CLASSES = [\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[var(--background)]/[var(--opacity-70)]',\n 'ds:backdrop-blur-sm',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:fade-in-0',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0',\n 'ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n].join(' ');\n\nconst contentVariants = cva(\n [\n 'ds:fixed ds:z-[var(--z-modal)] ds:flex ds:flex-col',\n 'ds:bg-[var(--popover)] ds:text-[var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-xl)]',\n 'ds:focus-visible:outline-none',\n 'ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n side: {\n start: [\n 'ds:start-0 ds:inset-y-0',\n 'ds:border-e ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:ltr:data-[state=open]:slide-in-from-left-full ds:rtl:data-[state=open]:slide-in-from-right-full',\n 'ds:data-[state=closed]:animate-out ds:ltr:data-[state=closed]:slide-out-to-left-full ds:rtl:data-[state=closed]:slide-out-to-right-full',\n 'ds:max-sm:[inline-size:100dvw] ds:max-sm:[block-size:100dvh]',\n ].join(' '),\n end: [\n 'ds:end-0 ds:inset-y-0',\n 'ds:border-s ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:ltr:data-[state=open]:slide-in-from-right-full ds:rtl:data-[state=open]:slide-in-from-left-full',\n 'ds:data-[state=closed]:animate-out ds:ltr:data-[state=closed]:slide-out-to-right-full ds:rtl:data-[state=closed]:slide-out-to-left-full',\n 'ds:max-sm:[inline-size:100dvw] ds:max-sm:[block-size:100dvh]',\n ].join(' '),\n top: [\n 'ds:top-0 ds:inset-x-0',\n 'ds:border-b ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:slide-in-from-top-full',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:slide-out-to-top-full',\n ].join(' '),\n bottom: [\n 'ds:bottom-0 ds:inset-x-0',\n 'ds:border-t ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:slide-in-from-bottom-full',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:slide-out-to-bottom-full',\n ].join(' '),\n },\n },\n defaultVariants: { side: 'end' },\n },\n);\n\nfunction getSizeClass(\n side: 'start' | 'end' | 'top' | 'bottom',\n size: 'sm' | 'md' | 'lg',\n): string {\n if (side === 'start' || side === 'end') {\n // These MUST carry the `ds:` prefix — a bare `[inline-size:…]` is not a\n // recognised utility under `prefix: 'ds'`, so Tailwind emits no rule and the\n // sheet renders full-bleed (the mobile `ds:max-sm:[inline-size:100dvw]`\n // classes work precisely because they are prefixed).\n const map = {\n sm: 'ds:[inline-size:360px]',\n md: 'ds:[inline-size:480px]',\n lg: 'ds:[inline-size:640px]',\n } as const;\n return map[size];\n }\n\n const map = {\n sm: 'ds:[block-size:40dvh]',\n md: 'ds:[block-size:60dvh]',\n lg: 'ds:[block-size:80dvh]',\n } as const;\n return map[size];\n}\n\n// Curated agent-readiness handle — see sheet.agent.ts.\nexport interface SheetHandle {\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n}\n\nexport interface SheetRootProps extends ComponentPropsWithoutRef<\n typeof RadixDialog.Root\n> {\n /** Opaque instance id — forwarded to Sheet.Content as `data-component-id`. */\n id?: string;\n}\n\ninterface SheetContextValue {\n id?: string;\n modal: boolean;\n}\n\nconst SheetContext = createContext<SheetContextValue>({ modal: true });\n\nconst SheetRoot = ({\n children,\n id,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n ...props\n}: SheetRootProps) => {\n const isControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(\n defaultOpen ?? false,\n );\n const open = isControlled ? Boolean(openProp) : internalOpen;\n\n const openRef = useRef(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const handle = useMemo<SheetHandle>(\n () => ({\n getIsOpen: () => openRef.current,\n open: () => setOpen(true),\n close: () => setOpen(false),\n }),\n [setOpen],\n );\n useAgentRegistration(sheetAgent, handle, id);\n\n const context = useMemo(() => ({ id, modal }), [id, modal]);\n\n return (\n <SheetContext.Provider value={context}>\n <RadixDialog.Root\n open={open}\n onOpenChange={setOpen}\n modal={modal}\n {...props}\n >\n {children}\n </RadixDialog.Root>\n </SheetContext.Provider>\n );\n};\nSheetRoot.displayName = 'Sheet.Root';\n\nconst SheetTrigger = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Trigger>\n>(({ children, ...props }, ref) => (\n <RadixDialog.Trigger ref={ref} {...props}>\n {children}\n </RadixDialog.Trigger>\n));\nSheetTrigger.displayName = 'Sheet.Trigger';\n\nconst SheetClose = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Close>\n>(({ children, ...props }, ref) => (\n <RadixDialog.Close ref={ref} {...props}>\n {children}\n </RadixDialog.Close>\n));\nSheetClose.displayName = 'Sheet.Close';\n\nexport interface SheetContentProps\n extends\n Omit<ComponentPropsWithoutRef<typeof RadixDialog.Content>, 'className'>,\n VariantProps<typeof contentVariants> {\n side?: 'start' | 'end' | 'top' | 'bottom';\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n children: ReactNode;\n}\n\nconst SheetContent = forwardRef<HTMLDivElement, SheetContentProps>(\n (\n { side = 'end', size = 'md', className, children, onKeyDown, ...props },\n ref,\n ) => {\n const { id: instanceId, modal } = useContext(SheetContext);\n const exitOnTab = useNonModalTabExit(!modal);\n return (\n <RadixDialog.Portal>\n <RadixDialog.Overlay\n data-component=\"sheet-overlay\"\n className={OVERLAY_CLASSES}\n />\n <RadixDialog.Content\n ref={ref}\n className={[\n contentVariants({ side }),\n getSizeClass(side, size),\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n data-component=\"sheet\"\n data-component-id={instanceId}\n {...props}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n exitOnTab(event);\n }}\n >\n {children}\n </RadixDialog.Content>\n </RadixDialog.Portal>\n );\n },\n);\nSheetContent.displayName = 'Sheet.Content';\n\nconst SheetHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const { t } = useTranslation('ui');\n\n return (\n <div\n ref={ref}\n className={[\n 'ds:sticky ds:top-0 ds:z-10 ds:flex ds:items-center ds:justify-between',\n 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-md)]',\n 'ds:border-b ds:border-[color:var(--border)] ds:bg-[var(--popover)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children}\n <SheetClose asChild>\n <IconButton\n icon={<X />}\n intent=\"ghost\"\n size=\"sm\"\n aria-label={t('common.close', 'Close')}\n />\n </SheetClose>\n </div>\n );\n },\n);\nSheetHeader.displayName = 'Sheet.Header';\n\nconst SheetBody = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n // ScrollArea forwards its ref to the scroll container (Radix viewport), so\n // SheetBody's ref still points at the scroller — preserving scrollTop access.\n <ScrollArea\n ref={ref}\n orientation=\"vertical\"\n className=\"ds:flex-1 ds:min-h-0\"\n >\n <div\n className={[\n 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-lg)]',\n 'ds:break-words',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n </ScrollArea>\n ),\n);\nSheetBody.displayName = 'Sheet.Body';\n\nconst SheetFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={[\n 'ds:sticky ds:bottom-0 ds:z-10 ds:flex ds:items-center ds:justify-end ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-md)]',\n 'ds:border-t ds:border-[color:var(--border)] ds:bg-[var(--popover)]',\n 'ds:max-sm:flex-col ds:max-sm:[&>*]:w-full',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n ),\n);\nSheetFooter.displayName = 'Sheet.Footer';\n\nconst SheetTitle = forwardRef<\n HTMLHeadingElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Title>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Title\n ref={ref}\n className={['type-title-card ds:break-words', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n));\nSheetTitle.displayName = 'Sheet.Title';\n\nconst SheetDescription = forwardRef<\n HTMLParagraphElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Description>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Description\n ref={ref}\n className={['type-body-sm ds:text-[var(--muted-foreground)]', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n));\nSheetDescription.displayName = 'Sheet.Description';\n\nexport const Sheet = Object.assign(SheetRoot, {\n Root: SheetRoot,\n Trigger: SheetTrigger,\n Content: SheetContent,\n Header: SheetHeader,\n Body: SheetBody,\n Footer: SheetFooter,\n Title: SheetTitle,\n Description: SheetDescription,\n Close: SheetClose,\n});\n\nexport type SheetHeaderProps = HTMLAttributes<HTMLDivElement>;\nexport type SheetBodyProps = HTMLAttributes<HTMLDivElement>;\nexport type SheetFooterProps = HTMLAttributes<HTMLDivElement>;\n"],"names":["sheetAgent","handle","OVERLAY_CLASSES","contentVariants","cva","getSizeClass","side","size","SheetContext","createContext","SheetRoot","children","id","openProp","defaultOpen","onOpenChange","modal","props","isControlled","internalOpen","setInternalOpen","useState","open","openRef","useRef","useEffect","setOpen","useCallback","next","useMemo","useAgentRegistration","context","jsx","RadixDialog","SheetTrigger","forwardRef","ref","SheetClose","SheetContent","className","onKeyDown","instanceId","useContext","exitOnTab","useNonModalTabExit","jsxs","event","SheetHeader","t","useTranslation","IconButton","SheetBody","ScrollArea","SheetFooter","SheetTitle","SheetDescription","Sheet"],"mappings":"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"}
1
+ {"version":3,"file":"sheet-Dtjk0CVv.js","sources":["../../src/components/sheet/sheet.agent.ts","../../src/components/sheet/sheet.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { SheetHandle } from './sheet';\n\nexport const sheetAgent: AgentAdapter<SheetHandle> = {\n id: 'sheet',\n // `dismiss` shares the handle's close() — it is the same imperative close\n // path with destructive intent (loses uncommitted input). Backed.\n capabilities: ['open', 'close', 'dismiss'],\n state: {\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.sheet.state.isOpen',\n description: 'True when the sheet is currently open.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n // Pure ephemeral UI state — opening loses no data.\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.sheet.actions.open',\n description: 'Open the sheet.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n // Pure ephemeral UI state — closing is reversible by reopening and\n // loses no committed data.\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.sheet.actions.close',\n description: 'Close the sheet. Reversible by reopening.',\n invoke: (handle) => {\n handle.close();\n },\n },\n dismiss: {\n // Same close() path, but flagged destructive because dismissing a sheet\n // mid-edit discards any in-progress input that was not committed.\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.sheet.actions.dismiss',\n description:\n 'Dismiss the sheet. Loses any in-progress input that has not been committed.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'sheet' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on Sheet.Root.',\n },\n },\n};\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { X } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { ScrollArea } from '../scroll-area/scroll-area';\nimport { useAgentRegistration } from '../../agent';\nimport { useNonModalTabExit } from '../_shared/non-modal-tab-exit';\nimport { sheetAgent } from './sheet.agent';\n\nconst OVERLAY_CLASSES = [\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[var(--background)]/[var(--opacity-70)]',\n 'ds:backdrop-blur-sm',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:fade-in-0',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0',\n 'ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n].join(' ');\n\nconst contentVariants = cva(\n [\n 'ds:fixed ds:z-[var(--z-modal)] ds:flex ds:flex-col',\n 'ds:bg-[var(--popover)] ds:text-[var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-xl)]',\n 'ds:focus-visible:outline-none',\n 'ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n side: {\n start: [\n 'ds:start-0 ds:inset-y-0',\n 'ds:border-e ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:ltr:data-[state=open]:slide-in-from-left-full ds:rtl:data-[state=open]:slide-in-from-right-full',\n 'ds:data-[state=closed]:animate-out ds:ltr:data-[state=closed]:slide-out-to-left-full ds:rtl:data-[state=closed]:slide-out-to-right-full',\n 'ds:max-sm:[inline-size:100dvw] ds:max-sm:[block-size:100dvh]',\n ].join(' '),\n end: [\n 'ds:end-0 ds:inset-y-0',\n 'ds:border-s ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:ltr:data-[state=open]:slide-in-from-right-full ds:rtl:data-[state=open]:slide-in-from-left-full',\n 'ds:data-[state=closed]:animate-out ds:ltr:data-[state=closed]:slide-out-to-right-full ds:rtl:data-[state=closed]:slide-out-to-left-full',\n 'ds:max-sm:[inline-size:100dvw] ds:max-sm:[block-size:100dvh]',\n ].join(' '),\n top: [\n 'ds:top-0 ds:inset-x-0',\n 'ds:border-b ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:slide-in-from-top-full',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:slide-out-to-top-full',\n ].join(' '),\n bottom: [\n 'ds:bottom-0 ds:inset-x-0',\n 'ds:border-t ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:slide-in-from-bottom-full',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:slide-out-to-bottom-full',\n ].join(' '),\n },\n },\n defaultVariants: { side: 'end' },\n },\n);\n\nfunction getSizeClass(\n side: 'start' | 'end' | 'top' | 'bottom',\n size: 'sm' | 'md' | 'lg',\n): string {\n if (side === 'start' || side === 'end') {\n // These MUST carry the `ds:` prefix — a bare `[inline-size:…]` is not a\n // recognised utility under `prefix: 'ds'`, so Tailwind emits no rule and the\n // sheet renders full-bleed (the mobile `ds:max-sm:[inline-size:100dvw]`\n // classes work precisely because they are prefixed).\n const map = {\n sm: 'ds:[inline-size:360px]',\n md: 'ds:[inline-size:480px]',\n lg: 'ds:[inline-size:640px]',\n } as const;\n return map[size];\n }\n\n const map = {\n sm: 'ds:[block-size:40dvh]',\n md: 'ds:[block-size:60dvh]',\n lg: 'ds:[block-size:80dvh]',\n } as const;\n return map[size];\n}\n\n// Curated agent-readiness handle — see sheet.agent.ts.\nexport interface SheetHandle {\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n}\n\nexport interface SheetRootProps extends ComponentPropsWithoutRef<\n typeof RadixDialog.Root\n> {\n /** Opaque instance id — forwarded to Sheet.Content as `data-component-id`. */\n id?: string;\n}\n\ninterface SheetContextValue {\n id?: string;\n modal: boolean;\n}\n\nconst SheetContext = createContext<SheetContextValue>({ modal: true });\n\nconst SheetRoot = ({\n children,\n id,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n ...props\n}: SheetRootProps) => {\n const isControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(\n defaultOpen ?? false,\n );\n const open = isControlled ? Boolean(openProp) : internalOpen;\n\n const openRef = useRef(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const handle = useMemo<SheetHandle>(\n () => ({\n getIsOpen: () => openRef.current,\n open: () => setOpen(true),\n close: () => setOpen(false),\n }),\n [setOpen],\n );\n useAgentRegistration(sheetAgent, handle, id);\n\n const context = useMemo(() => ({ id, modal }), [id, modal]);\n\n return (\n <SheetContext.Provider value={context}>\n <RadixDialog.Root\n open={open}\n onOpenChange={setOpen}\n modal={modal}\n {...props}\n >\n {children}\n </RadixDialog.Root>\n </SheetContext.Provider>\n );\n};\nSheetRoot.displayName = 'Sheet.Root';\n\nconst SheetTrigger = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Trigger>\n>(({ children, ...props }, ref) => (\n <RadixDialog.Trigger ref={ref} {...props}>\n {children}\n </RadixDialog.Trigger>\n));\nSheetTrigger.displayName = 'Sheet.Trigger';\n\nconst SheetClose = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Close>\n>(({ children, ...props }, ref) => (\n <RadixDialog.Close ref={ref} {...props}>\n {children}\n </RadixDialog.Close>\n));\nSheetClose.displayName = 'Sheet.Close';\n\nexport interface SheetContentProps\n extends\n Omit<ComponentPropsWithoutRef<typeof RadixDialog.Content>, 'className'>,\n VariantProps<typeof contentVariants> {\n side?: 'start' | 'end' | 'top' | 'bottom';\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n children: ReactNode;\n}\n\nconst SheetContent = forwardRef<HTMLDivElement, SheetContentProps>(\n (\n { side = 'end', size = 'md', className, children, onKeyDown, ...props },\n ref,\n ) => {\n const { id: instanceId, modal } = useContext(SheetContext);\n const exitOnTab = useNonModalTabExit(!modal);\n return (\n <RadixDialog.Portal>\n <RadixDialog.Overlay\n data-component=\"sheet-overlay\"\n className={OVERLAY_CLASSES}\n />\n <RadixDialog.Content\n ref={ref}\n className={[\n contentVariants({ side }),\n getSizeClass(side, size),\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n data-component=\"sheet\"\n data-component-id={instanceId}\n {...props}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n exitOnTab(event);\n }}\n >\n {children}\n </RadixDialog.Content>\n </RadixDialog.Portal>\n );\n },\n);\nSheetContent.displayName = 'Sheet.Content';\n\nconst SheetHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const { t } = useTranslation('ui');\n\n return (\n <div\n ref={ref}\n className={[\n 'ds:sticky ds:top-0 ds:z-10 ds:flex ds:items-center ds:justify-between',\n 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-md)]',\n 'ds:border-b ds:border-[color:var(--border)] ds:bg-[var(--popover)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children}\n <SheetClose asChild>\n <IconButton\n icon={<X />}\n intent=\"ghost\"\n size=\"sm\"\n aria-label={t('common.close', 'Close')}\n />\n </SheetClose>\n </div>\n );\n },\n);\nSheetHeader.displayName = 'Sheet.Header';\n\nconst SheetBody = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n // ScrollArea forwards its ref to the scroll container (Radix viewport), so\n // SheetBody's ref still points at the scroller — preserving scrollTop access.\n <ScrollArea\n ref={ref}\n orientation=\"vertical\"\n className=\"ds:flex-1 ds:min-h-0\"\n >\n <div\n className={[\n 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-lg)]',\n 'ds:break-words',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n </ScrollArea>\n ),\n);\nSheetBody.displayName = 'Sheet.Body';\n\nconst SheetFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={[\n 'ds:sticky ds:bottom-0 ds:z-10 ds:flex ds:items-center ds:justify-end ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-md)]',\n 'ds:border-t ds:border-[color:var(--border)] ds:bg-[var(--popover)]',\n 'ds:max-sm:flex-col ds:max-sm:[&>*]:w-full',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n ),\n);\nSheetFooter.displayName = 'Sheet.Footer';\n\nconst SheetTitle = forwardRef<\n HTMLHeadingElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Title>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Title\n ref={ref}\n className={['type-title-card ds:break-words', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n));\nSheetTitle.displayName = 'Sheet.Title';\n\nconst SheetDescription = forwardRef<\n HTMLParagraphElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Description>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Description\n ref={ref}\n className={['type-body-sm ds:text-[var(--muted-foreground)]', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n));\nSheetDescription.displayName = 'Sheet.Description';\n\nexport const Sheet = Object.assign(SheetRoot, {\n Root: SheetRoot,\n Trigger: SheetTrigger,\n Content: SheetContent,\n Header: SheetHeader,\n Body: SheetBody,\n Footer: SheetFooter,\n Title: SheetTitle,\n Description: SheetDescription,\n Close: SheetClose,\n});\n\nexport type SheetHeaderProps = HTMLAttributes<HTMLDivElement>;\nexport type SheetBodyProps = HTMLAttributes<HTMLDivElement>;\nexport type SheetFooterProps = HTMLAttributes<HTMLDivElement>;\n"],"names":["sheetAgent","handle","OVERLAY_CLASSES","contentVariants","cva","getSizeClass","side","size","SheetContext","createContext","SheetRoot","children","id","openProp","defaultOpen","onOpenChange","modal","props","isControlled","internalOpen","setInternalOpen","useState","open","openRef","useRef","useEffect","setOpen","useCallback","next","useMemo","useAgentRegistration","context","jsx","RadixDialog","SheetTrigger","forwardRef","ref","SheetClose","SheetContent","className","onKeyDown","instanceId","useContext","exitOnTab","useNonModalTabExit","jsxs","event","SheetHeader","t","useTranslation","IconButton","SheetBody","ScrollArea","SheetFooter","SheetTitle","SheetDescription","Sheet"],"mappings":"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"}