@alfadocs/ui-kit-debug 1.61.0 → 1.63.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 (502) hide show
  1. package/dist/_chunks/{actions-cell-renderer-CZWGQFKV.js → actions-cell-renderer-BXCpK2_0.js} +3 -3
  2. package/dist/_chunks/{actions-cell-renderer-CZWGQFKV.js.map → actions-cell-renderer-BXCpK2_0.js.map} +1 -1
  3. package/dist/_chunks/{agenda-card-DauvvKX6.js → agenda-card-DR9gDdKp.js} +2 -2
  4. package/dist/_chunks/{agenda-card-DauvvKX6.js.map → agenda-card-DR9gDdKp.js.map} +1 -1
  5. package/dist/_chunks/{agenda-tray-DU7O5Z7R.js → agenda-tray-DGB1Zup-.js} +3 -3
  6. package/dist/_chunks/{agenda-tray-DU7O5Z7R.js.map → agenda-tray-DGB1Zup-.js.map} +1 -1
  7. package/dist/_chunks/{ai-credits-notice-MBgQXxsx.js → ai-credits-notice-pK9BOmEz.js} +2 -2
  8. package/dist/_chunks/{ai-credits-notice-MBgQXxsx.js.map → ai-credits-notice-pK9BOmEz.js.map} +1 -1
  9. package/dist/_chunks/{ai-permission-notice-BJHutKLE.js → ai-permission-notice-DpRmZ9Q3.js} +4 -4
  10. package/dist/_chunks/{ai-permission-notice-BJHutKLE.js.map → ai-permission-notice-DpRmZ9Q3.js.map} +1 -1
  11. package/dist/_chunks/{ai-prompt-input-Dzos37rf.js → ai-prompt-input-DSGSe4LH.js} +2 -2
  12. package/dist/_chunks/{ai-prompt-input-Dzos37rf.js.map → ai-prompt-input-DSGSe4LH.js.map} +1 -1
  13. package/dist/_chunks/{alert-BhCstf2h.js → alert-DdDpOi-P.js} +2 -2
  14. package/dist/_chunks/{alert-BhCstf2h.js.map → alert-DdDpOi-P.js.map} +1 -1
  15. package/dist/_chunks/{alia-sidebar-CU3mVL9J.js → alia-sidebar-qe0quZkB.js} +6 -6
  16. package/dist/_chunks/{alia-sidebar-CU3mVL9J.js.map → alia-sidebar-qe0quZkB.js.map} +1 -1
  17. package/dist/_chunks/{anamnesis-card-VjJOUl-t.js → anamnesis-card-CsUBOG32.js} +3 -3
  18. package/dist/_chunks/{anamnesis-card-VjJOUl-t.js.map → anamnesis-card-CsUBOG32.js.map} +1 -1
  19. package/dist/_chunks/{anamnesis-summary-card-cCj7LPh3.js → anamnesis-summary-card-CMzBLTiN.js} +3 -3
  20. package/dist/_chunks/{anamnesis-summary-card-cCj7LPh3.js.map → anamnesis-summary-card-CMzBLTiN.js.map} +1 -1
  21. package/dist/_chunks/{anamnesis-summary-rows-C5F08WT6.js → anamnesis-summary-rows-DFWws7mM.js} +11 -11
  22. package/dist/_chunks/{anamnesis-summary-rows-C5F08WT6.js.map → anamnesis-summary-rows-DFWws7mM.js.map} +1 -1
  23. package/dist/_chunks/{antenatal-schedule-timeline-CfNFrej5.js → antenatal-schedule-timeline-DuaAQj1m.js} +2 -2
  24. package/dist/_chunks/{antenatal-schedule-timeline-CfNFrej5.js.map → antenatal-schedule-timeline-DuaAQj1m.js.map} +1 -1
  25. package/dist/_chunks/app-frame-DUPEwu4E.js +179 -0
  26. package/dist/_chunks/app-frame-DUPEwu4E.js.map +1 -0
  27. package/dist/_chunks/app-frame-context-CPszhDDb.js +10 -0
  28. package/dist/_chunks/app-frame-context-CPszhDDb.js.map +1 -0
  29. package/dist/_chunks/{appointment-card-BXQUZlAJ.js → appointment-card-CL32sux-.js} +3 -3
  30. package/dist/_chunks/{appointment-card-BXQUZlAJ.js.map → appointment-card-CL32sux-.js.map} +1 -1
  31. package/dist/_chunks/{appointment-peek-BvzXHYiD.js → appointment-peek-B5mcDcXt.js} +3 -3
  32. package/dist/_chunks/{appointment-peek-BvzXHYiD.js.map → appointment-peek-B5mcDcXt.js.map} +1 -1
  33. package/dist/_chunks/{appointment-timeline-r-q97cec.js → appointment-timeline-DaHKV81s.js} +4 -4
  34. package/dist/_chunks/{appointment-timeline-r-q97cec.js.map → appointment-timeline-DaHKV81s.js.map} +1 -1
  35. package/dist/_chunks/{appointment-tray-DF_R9ldY.js → appointment-tray-qtpJt8e0.js} +3 -3
  36. package/dist/_chunks/{appointment-tray-DF_R9ldY.js.map → appointment-tray-qtpJt8e0.js.map} +1 -1
  37. package/dist/_chunks/{audio-recorder-Cssm6jVh.js → audio-recorder-DR-u1qbl.js} +3 -3
  38. package/dist/_chunks/{audio-recorder-Cssm6jVh.js.map → audio-recorder-DR-u1qbl.js.map} +1 -1
  39. package/dist/_chunks/{auth-form-parts-CravOf0L.js → auth-form-parts-Cmb41LSQ.js} +2 -2
  40. package/dist/_chunks/{auth-form-parts-CravOf0L.js.map → auth-form-parts-Cmb41LSQ.js.map} +1 -1
  41. package/dist/_chunks/{badge-hnBt8o7n.js → badge-BUk4RjTS.js} +2 -2
  42. package/dist/_chunks/{badge-hnBt8o7n.js.map → badge-BUk4RjTS.js.map} +1 -1
  43. package/dist/_chunks/{balance-badge-cell-DMG06b2C.js → balance-badge-cell-tB4u0Nr4.js} +5 -5
  44. package/dist/_chunks/{balance-badge-cell-DMG06b2C.js.map → balance-badge-cell-tB4u0Nr4.js.map} +1 -1
  45. package/dist/_chunks/{bishop-score-DxfkcxiV.js → bishop-score-CaNTrikJ.js} +2 -2
  46. package/dist/_chunks/{bishop-score-DxfkcxiV.js.map → bishop-score-CaNTrikJ.js.map} +1 -1
  47. package/dist/_chunks/{bmi-calculator-B4kgPqt5.js → bmi-calculator-DjmQ04Ch.js} +4 -4
  48. package/dist/_chunks/{bmi-calculator-B4kgPqt5.js.map → bmi-calculator-DjmQ04Ch.js.map} +1 -1
  49. package/dist/_chunks/{booking-CXaqmdF7.js → booking-CGhOtxad.js} +8 -8
  50. package/dist/_chunks/{booking-CXaqmdF7.js.map → booking-CGhOtxad.js.map} +1 -1
  51. package/dist/_chunks/{button-group-Cfpyu6pc.js → button-group-DCOJhvm3.js} +3 -3
  52. package/dist/_chunks/{button-group-Cfpyu6pc.js.map → button-group-DCOJhvm3.js.map} +1 -1
  53. package/dist/_chunks/{calendar-DNTVaK6b.js → calendar-DCr65Kt1.js} +3 -3
  54. package/dist/_chunks/{calendar-DNTVaK6b.js.map → calendar-DCr65Kt1.js.map} +1 -1
  55. package/dist/_chunks/{calendar-workspace-UL5xcpWa.js → calendar-workspace-BgcqB0PI.js} +29 -29
  56. package/dist/_chunks/{calendar-workspace-UL5xcpWa.js.map → calendar-workspace-BgcqB0PI.js.map} +1 -1
  57. package/dist/_chunks/{care-plan-card-DFQbU_Gd.js → care-plan-card-DJzbwJLl.js} +4 -4
  58. package/dist/_chunks/{care-plan-card-DFQbU_Gd.js.map → care-plan-card-DJzbwJLl.js.map} +1 -1
  59. package/dist/_chunks/{care-plan-entry-card-bj784KRk.js → care-plan-entry-card-DPJcP34v.js} +4 -4
  60. package/dist/_chunks/{care-plan-entry-card-bj784KRk.js.map → care-plan-entry-card-DPJcP34v.js.map} +1 -1
  61. package/dist/_chunks/{care-plan-header-DDhyAfVK.js → care-plan-header-1HzbkYcR.js} +4 -4
  62. package/dist/_chunks/{care-plan-header-DDhyAfVK.js.map → care-plan-header-1HzbkYcR.js.map} +1 -1
  63. package/dist/_chunks/{carousel.agent-Csn24G1k.js → carousel.agent-BaRsN-8H.js} +2 -2
  64. package/dist/_chunks/{carousel.agent-Csn24G1k.js.map → carousel.agent-BaRsN-8H.js.map} +1 -1
  65. package/dist/_chunks/chart-BAeJ7pvD.js +1120 -0
  66. package/dist/_chunks/chart-BAeJ7pvD.js.map +1 -0
  67. package/dist/_chunks/{chat-input-Ck34Pnmp.js → chat-input-HtTbUUD6.js} +2 -2
  68. package/dist/_chunks/{chat-input-Ck34Pnmp.js.map → chat-input-HtTbUUD6.js.map} +1 -1
  69. package/dist/_chunks/{chat-message-DU0X3Xnl.js → chat-message-fRLZ95O5.js} +2 -2
  70. package/dist/_chunks/{chat-message-DU0X3Xnl.js.map → chat-message-fRLZ95O5.js.map} +1 -1
  71. package/dist/_chunks/{checkbox--ndmyokr.js → checkbox-BjDv-r3o.js} +2 -2
  72. package/dist/_chunks/{checkbox--ndmyokr.js.map → checkbox-BjDv-r3o.js.map} +1 -1
  73. package/dist/_chunks/{checkbox-group-B0oZHNT3.js → checkbox-group-Cw2H5qaq.js} +2 -2
  74. package/dist/_chunks/{checkbox-group-B0oZHNT3.js.map → checkbox-group-Cw2H5qaq.js.map} +1 -1
  75. package/dist/_chunks/{clinical-note-card-L6FVM9Gx.js → clinical-note-card-D2bbWksq.js} +3 -3
  76. package/dist/_chunks/{clinical-note-card-L6FVM9Gx.js.map → clinical-note-card-D2bbWksq.js.map} +1 -1
  77. package/dist/_chunks/{code-block-DiC4bg-o.js → code-block-vwEv1jEa.js} +2 -2
  78. package/dist/_chunks/{code-block-DiC4bg-o.js.map → code-block-vwEv1jEa.js.map} +1 -1
  79. package/dist/_chunks/{connection-status-BAnuwayz.js → connection-status--wYsgreh.js} +3 -3
  80. package/dist/_chunks/{connection-status-BAnuwayz.js.map → connection-status--wYsgreh.js.map} +1 -1
  81. package/dist/_chunks/{contact-card-C8rEsC4Q.js → contact-card-Czu60UvU.js} +2 -2
  82. package/dist/_chunks/{contact-card-C8rEsC4Q.js.map → contact-card-Czu60UvU.js.map} +1 -1
  83. package/dist/_chunks/{contact-profile-card-JTRbnbxy.js → contact-profile-card-B4sjoIqf.js} +4 -4
  84. package/dist/_chunks/{contact-profile-card-JTRbnbxy.js.map → contact-profile-card-B4sjoIqf.js.map} +1 -1
  85. package/dist/_chunks/control-room-rail-DUerqHeo.js +416 -0
  86. package/dist/_chunks/control-room-rail-DUerqHeo.js.map +1 -0
  87. package/dist/_chunks/{cycle-calculator-BuFi6ZJa.js → cycle-calculator-D-rwX9Pj.js} +2 -2
  88. package/dist/_chunks/{cycle-calculator-BuFi6ZJa.js.map → cycle-calculator-D-rwX9Pj.js.map} +1 -1
  89. package/dist/_chunks/{dashboard-grid-DRnhIlT-.js → dashboard-grid-B2MB7SRS.js} +627 -603
  90. package/dist/_chunks/dashboard-grid-B2MB7SRS.js.map +1 -0
  91. package/dist/_chunks/{data-table-DAPkhyXO.js → data-table-Ck2rIwWF.js} +6 -6
  92. package/dist/_chunks/{data-table-DAPkhyXO.js.map → data-table-Ck2rIwWF.js.map} +1 -1
  93. package/dist/_chunks/{data-table-tabs-2t0cdk0h.js → data-table-tabs-BfrnefV5.js} +3 -3
  94. package/dist/_chunks/{data-table-tabs-2t0cdk0h.js.map → data-table-tabs-BfrnefV5.js.map} +1 -1
  95. package/dist/_chunks/{dependent-selector-DgaAQc-c.js → dependent-selector-DBr1AhLg.js} +3 -3
  96. package/dist/_chunks/{dependent-selector-DgaAQc-c.js.map → dependent-selector-DBr1AhLg.js.map} +1 -1
  97. package/dist/_chunks/{description-list-CFEw__MT.js → description-list-Q8640NHu.js} +2 -2
  98. package/dist/_chunks/{description-list-CFEw__MT.js.map → description-list-Q8640NHu.js.map} +1 -1
  99. package/dist/_chunks/{dev-bypass-button-dTuUuzsT.js → dev-bypass-button--CPzzRSj.js} +2 -2
  100. package/dist/_chunks/{dev-bypass-button-dTuUuzsT.js.map → dev-bypass-button--CPzzRSj.js.map} +1 -1
  101. package/dist/_chunks/{document-preview-DYX669jE.js → document-preview-B1dQm292.js} +4 -4
  102. package/dist/_chunks/{document-preview-DYX669jE.js.map → document-preview-B1dQm292.js.map} +1 -1
  103. package/dist/_chunks/{document-scanner-C41n4pNq.js → document-scanner-CVPVLK7z.js} +2 -2
  104. package/dist/_chunks/{document-scanner-C41n4pNq.js.map → document-scanner-CVPVLK7z.js.map} +1 -1
  105. package/dist/_chunks/{due-date-calculator-yYvX8Ww_.js → due-date-calculator-DTfxFJCM.js} +5 -5
  106. package/dist/_chunks/{due-date-calculator-yYvX8Ww_.js.map → due-date-calculator-DTfxFJCM.js.map} +1 -1
  107. package/dist/_chunks/{editable-currency-cell-renderer-6LDFAWUE.js → editable-currency-cell-renderer-1ijmzNWh.js} +4 -4
  108. package/dist/_chunks/{editable-currency-cell-renderer-6LDFAWUE.js.map → editable-currency-cell-renderer-1ijmzNWh.js.map} +1 -1
  109. package/dist/_chunks/{editable-description-D9FsTi8e.js → editable-description-ChGNdYY8.js} +2 -2
  110. package/dist/_chunks/{editable-description-D9FsTi8e.js.map → editable-description-ChGNdYY8.js.map} +1 -1
  111. package/dist/_chunks/{editor-overlay-BYkcaLCj.js → editor-overlay-CpVO1-Kk.js} +2 -2
  112. package/dist/_chunks/{editor-overlay-BYkcaLCj.js.map → editor-overlay-CpVO1-Kk.js.map} +1 -1
  113. package/dist/_chunks/{entity-summary-oD_63dlz.js → entity-summary-BQ9_KA8S.js} +5 -5
  114. package/dist/_chunks/{entity-summary-oD_63dlz.js.map → entity-summary-BQ9_KA8S.js.map} +1 -1
  115. package/dist/_chunks/{error-summary-BhM8FEkl.js → error-summary-DrUfuKu1.js} +2 -2
  116. package/dist/_chunks/{error-summary-BhM8FEkl.js.map → error-summary-DrUfuKu1.js.map} +1 -1
  117. package/dist/_chunks/{face-scheme-C-5V3MsY.js → face-scheme-DAD-mXzM.js} +4 -4
  118. package/dist/_chunks/{face-scheme-C-5V3MsY.js.map → face-scheme-DAD-mXzM.js.map} +1 -1
  119. package/dist/_chunks/{fetal-weight-CHv2winC.js → fetal-weight-DycD_Vqr.js} +2 -2
  120. package/dist/_chunks/{fetal-weight-CHv2winC.js.map → fetal-weight-DycD_Vqr.js.map} +1 -1
  121. package/dist/_chunks/{field-array-dSkD_ePA.js → field-array-BJYc1xSu.js} +2 -2
  122. package/dist/_chunks/{field-array-dSkD_ePA.js.map → field-array-BJYc1xSu.js.map} +1 -1
  123. package/dist/_chunks/{file-manager-C8bdHsYy.js → file-manager-k85OOFr4.js} +6 -6
  124. package/dist/_chunks/{file-manager-C8bdHsYy.js.map → file-manager-k85OOFr4.js.map} +1 -1
  125. package/dist/_chunks/{fiscal-code-input-BSWwda0C.js → fiscal-code-input-DwHb2nVW.js} +2 -2
  126. package/dist/_chunks/{fiscal-code-input-BSWwda0C.js.map → fiscal-code-input-DwHb2nVW.js.map} +1 -1
  127. package/dist/_chunks/{forgot-password-form-CGWV5Q1-.js → forgot-password-form-CgZkEvZy.js} +4 -4
  128. package/dist/_chunks/{forgot-password-form-CGWV5Q1-.js.map → forgot-password-form-CgZkEvZy.js.map} +1 -1
  129. package/dist/_chunks/{freemium-paywall-DjjVPC-5.js → freemium-paywall-r-z48YaT.js} +2 -2
  130. package/dist/_chunks/{freemium-paywall-DjjVPC-5.js.map → freemium-paywall-r-z48YaT.js.map} +1 -1
  131. package/dist/_chunks/{gestational-age-calculator-BLccWS_4.js → gestational-age-calculator-BnCAL5a-.js} +5 -5
  132. package/dist/_chunks/{gestational-age-calculator-BLccWS_4.js.map → gestational-age-calculator-BnCAL5a-.js.map} +1 -1
  133. package/dist/_chunks/{hcg-doubling-CnrY2OVu.js → hcg-doubling-DVDiqFyp.js} +2 -2
  134. package/dist/_chunks/{hcg-doubling-CnrY2OVu.js.map → hcg-doubling-DVDiqFyp.js.map} +1 -1
  135. package/dist/_chunks/{header-BVHAt7Fi.js → header-_TppWBpK.js} +2 -2
  136. package/dist/_chunks/{header-BVHAt7Fi.js.map → header-_TppWBpK.js.map} +1 -1
  137. package/dist/_chunks/{header-settings-C200bKyp.js → header-settings-BSH9Gk0J.js} +3 -3
  138. package/dist/_chunks/{header-settings-C200bKyp.js.map → header-settings-BSH9Gk0J.js.map} +1 -1
  139. package/dist/_chunks/{heatmap-CRMr7VWC.js → heatmap-Cp8Gn9q-.js} +4 -4
  140. package/dist/_chunks/{heatmap-CRMr7VWC.js.map → heatmap-Cp8Gn9q-.js.map} +1 -1
  141. package/dist/_chunks/{help-me-write-templates-C9T8-DcT.js → help-me-write-templates-DFmqnsAa.js} +4 -4
  142. package/dist/_chunks/{help-me-write-templates-C9T8-DcT.js.map → help-me-write-templates-DFmqnsAa.js.map} +1 -1
  143. package/dist/_chunks/{hover-card-DbTmj-ea.js → hover-card-CTNhQXWS.js} +2 -2
  144. package/dist/_chunks/{hover-card-DbTmj-ea.js.map → hover-card-CTNhQXWS.js.map} +1 -1
  145. package/dist/_chunks/{icon-button-dNE6ENLn.js → icon-button-C_1TgRiK.js} +2 -2
  146. package/dist/_chunks/{icon-button-dNE6ENLn.js.map → icon-button-C_1TgRiK.js.map} +1 -1
  147. package/dist/_chunks/{icon-button-group-Du8IvZek.js → icon-button-group-NIHji7_y.js} +2 -2
  148. package/dist/_chunks/{icon-button-group-Du8IvZek.js.map → icon-button-group-NIHji7_y.js.map} +1 -1
  149. package/dist/_chunks/{icon-picker-D5NdDbCL.js → icon-picker-Dq4O32K8.js} +2 -2
  150. package/dist/_chunks/{icon-picker-D5NdDbCL.js.map → icon-picker-Dq4O32K8.js.map} +1 -1
  151. package/dist/_chunks/{info-tip-DObdz3w3.js → info-tip-cYszyg6h.js} +2 -2
  152. package/dist/_chunks/{info-tip-DObdz3w3.js.map → info-tip-cYszyg6h.js.map} +1 -1
  153. package/dist/_chunks/{key-value-pair-BNYHAZwD.js → key-value-pair-BscGwZsJ.js} +2 -2
  154. package/dist/_chunks/{key-value-pair-BNYHAZwD.js.map → key-value-pair-BscGwZsJ.js.map} +1 -1
  155. package/dist/_chunks/{kit-extensions-DI2nHVNw.js → kit-extensions-RnddkrXn.js} +6 -6
  156. package/dist/_chunks/{kit-extensions-DI2nHVNw.js.map → kit-extensions-RnddkrXn.js.map} +1 -1
  157. package/dist/_chunks/{link-gRw3NtOt.js → link-N5_YpLtm.js} +7 -6
  158. package/dist/_chunks/link-N5_YpLtm.js.map +1 -0
  159. package/dist/_chunks/{link-cell-renderer-DvhzS6lu.js → link-cell-renderer-dtEYlxi2.js} +6 -6
  160. package/dist/_chunks/{link-cell-renderer-DvhzS6lu.js.map → link-cell-renderer-dtEYlxi2.js.map} +1 -1
  161. package/dist/_chunks/{locale-picker-Bu4YE5b2.js → locale-picker-CeveTnDK.js} +3 -3
  162. package/dist/_chunks/{locale-picker-Bu4YE5b2.js.map → locale-picker-CeveTnDK.js.map} +1 -1
  163. package/dist/_chunks/{login-dev-card-DwWWHclZ.js → login-dev-card-PnADNcI9.js} +3 -3
  164. package/dist/_chunks/{login-dev-card-DwWWHclZ.js.map → login-dev-card-PnADNcI9.js.map} +1 -1
  165. package/dist/_chunks/{marketplace-app-shell-p6hPgVwy.js → marketplace-app-shell-C-2e4eCD.js} +139 -136
  166. package/dist/_chunks/marketplace-app-shell-C-2e4eCD.js.map +1 -0
  167. package/dist/_chunks/{message-card-CvZlo3Fn.js → message-card-A3mJNqfy.js} +2 -2
  168. package/dist/_chunks/{message-card-CvZlo3Fn.js.map → message-card-A3mJNqfy.js.map} +1 -1
  169. package/dist/_chunks/{message-tray-DrS_LOed.js → message-tray-Ft6vSr71.js} +3 -3
  170. package/dist/_chunks/{message-tray-DrS_LOed.js.map → message-tray-Ft6vSr71.js.map} +1 -1
  171. package/dist/_chunks/{multi-select-BT23EnSA.js → multi-select-CMaAQQgb.js} +2 -2
  172. package/dist/_chunks/{multi-select-BT23EnSA.js.map → multi-select-CMaAQQgb.js.map} +1 -1
  173. package/dist/_chunks/{nav-grid-Byx8PxuB.js → nav-grid-Oc4aCPrg.js} +2 -2
  174. package/dist/_chunks/{nav-grid-Byx8PxuB.js.map → nav-grid-Oc4aCPrg.js.map} +1 -1
  175. package/dist/_chunks/{note-attachment-Bt2cddsZ.js → note-attachment-D8V7PUiR.js} +3 -3
  176. package/dist/_chunks/{note-attachment-Bt2cddsZ.js.map → note-attachment-D8V7PUiR.js.map} +1 -1
  177. package/dist/_chunks/{note-timeline-CX9nAgAR.js → note-timeline-CwxPQ2Ak.js} +2 -2
  178. package/dist/_chunks/{note-timeline-CX9nAgAR.js.map → note-timeline-CwxPQ2Ak.js.map} +1 -1
  179. package/dist/_chunks/{notes-panel-6TElt7jQ.js → notes-panel-BRLc2ozF.js} +7 -7
  180. package/dist/_chunks/{notes-panel-6TElt7jQ.js.map → notes-panel-BRLc2ozF.js.map} +1 -1
  181. package/dist/_chunks/{notification-card-Qrs52HIA.js → notification-card-c2oX8j3F.js} +2 -2
  182. package/dist/_chunks/{notification-card-Qrs52HIA.js.map → notification-card-c2oX8j3F.js.map} +1 -1
  183. package/dist/_chunks/{notification-tray-DRm1z97G.js → notification-tray-BR3seWA7.js} +3 -3
  184. package/dist/_chunks/{notification-tray-DRm1z97G.js.map → notification-tray-BR3seWA7.js.map} +1 -1
  185. package/dist/_chunks/{operator-hero-C_Khr5IU.js → operator-hero-3_RG4Dkj.js} +2 -2
  186. package/dist/_chunks/{operator-hero-C_Khr5IU.js.map → operator-hero-3_RG4Dkj.js.map} +1 -1
  187. package/dist/_chunks/{optical-prescription-DLIAhJ6f.js → optical-prescription-CxfMsbxi.js} +2 -2
  188. package/dist/_chunks/{optical-prescription-DLIAhJ6f.js.map → optical-prescription-CxfMsbxi.js.map} +1 -1
  189. package/dist/_chunks/{panel-header-D_mTdhUp.js → panel-header-BJkaUwnl.js} +2 -2
  190. package/dist/_chunks/{panel-header-D_mTdhUp.js.map → panel-header-BJkaUwnl.js.map} +1 -1
  191. package/dist/_chunks/{panel-subview-CjZgdWwO.js → panel-subview-yP4qIbKS.js} +3 -3
  192. package/dist/_chunks/{panel-subview-CjZgdWwO.js.map → panel-subview-yP4qIbKS.js.map} +1 -1
  193. package/dist/_chunks/{patient-details-BjqKBY2x.js → patient-details-BY8Rwwpi.js} +4 -4
  194. package/dist/_chunks/{patient-details-BjqKBY2x.js.map → patient-details-BY8Rwwpi.js.map} +1 -1
  195. package/dist/_chunks/{patient-field-row-BiI0BPPK.js → patient-field-row-C8ymfffP.js} +8 -8
  196. package/dist/_chunks/{patient-field-row-BiI0BPPK.js.map → patient-field-row-C8ymfffP.js.map} +1 -1
  197. package/dist/_chunks/{patient-search-B5R7FyFO.js → patient-search-DOnDUVsl.js} +2 -2
  198. package/dist/_chunks/{patient-search-B5R7FyFO.js.map → patient-search-DOnDUVsl.js.map} +1 -1
  199. package/dist/_chunks/{patient-summary-card-BOgnWKRV.js → patient-summary-card-cmqjIXMk.js} +9 -9
  200. package/dist/_chunks/{patient-summary-card-BOgnWKRV.js.map → patient-summary-card-cmqjIXMk.js.map} +1 -1
  201. package/dist/_chunks/{payment-automation-upsell-39d5ykBi.js → payment-automation-upsell-C8MEu0t6.js} +4 -4
  202. package/dist/_chunks/{payment-automation-upsell-39d5ykBi.js.map → payment-automation-upsell-C8MEu0t6.js.map} +1 -1
  203. package/dist/_chunks/{payment-form-v6zZuV1_.js → payment-form-i90DUuNK.js} +2 -2
  204. package/dist/_chunks/{payment-form-v6zZuV1_.js.map → payment-form-i90DUuNK.js.map} +1 -1
  205. package/dist/_chunks/{payment-request-card-E3G4aVt6.js → payment-request-card-0DjQgVgX.js} +5 -5
  206. package/dist/_chunks/{payment-request-card-E3G4aVt6.js.map → payment-request-card-0DjQgVgX.js.map} +1 -1
  207. package/dist/_chunks/{pdf-viewer-CNQxa4tv.js → pdf-viewer-DJ9VN7cu.js} +2 -2
  208. package/dist/_chunks/{pdf-viewer-CNQxa4tv.js.map → pdf-viewer-DJ9VN7cu.js.map} +1 -1
  209. package/dist/_chunks/{periodontal-chart-BZ1d6S36.js → periodontal-chart-DCcOEYC6.js} +2 -2
  210. package/dist/_chunks/{periodontal-chart-BZ1d6S36.js.map → periodontal-chart-DCcOEYC6.js.map} +1 -1
  211. package/dist/_chunks/{periodontal-chart-card-BE5hiQnn.js → periodontal-chart-card-CxdjXFb3.js} +3 -3
  212. package/dist/_chunks/{periodontal-chart-card-BE5hiQnn.js.map → periodontal-chart-card-CxdjXFb3.js.map} +1 -1
  213. package/dist/_chunks/{periodontal-diagnosis-6wybid_W.js → periodontal-diagnosis-B9YmmVmM.js} +5 -5
  214. package/dist/_chunks/{periodontal-diagnosis-6wybid_W.js.map → periodontal-diagnosis-B9YmmVmM.js.map} +1 -1
  215. package/dist/_chunks/{periodontal-risk-chart-CgLwBj5c.js → periodontal-risk-chart-CPy7CNFe.js} +2 -2
  216. package/dist/_chunks/{periodontal-risk-chart-CgLwBj5c.js.map → periodontal-risk-chart-CPy7CNFe.js.map} +1 -1
  217. package/dist/_chunks/{permission-matrix-DuTkUHxe.js → permission-matrix-BoQjENGV.js} +3 -3
  218. package/dist/_chunks/{permission-matrix-DuTkUHxe.js.map → permission-matrix-BoQjENGV.js.map} +1 -1
  219. package/dist/_chunks/{popover-DQr_tljb.js → popover-4ZVtH_At.js} +2 -2
  220. package/dist/_chunks/{popover-DQr_tljb.js.map → popover-4ZVtH_At.js.map} +1 -1
  221. package/dist/_chunks/{practice-profile-hero-DPbvYfCs.js → practice-profile-hero-Dfc0F60y.js} +2 -2
  222. package/dist/_chunks/{practice-profile-hero-DPbvYfCs.js.map → practice-profile-hero-Dfc0F60y.js.map} +1 -1
  223. package/dist/_chunks/{practice-results-Cktx7KaC.js → practice-results-B8L9ZmtR.js} +4 -4
  224. package/dist/_chunks/{practice-results-Cktx7KaC.js.map → practice-results-B8L9ZmtR.js.map} +1 -1
  225. package/dist/_chunks/{pregnancy-dating-26fcvhAx.js → pregnancy-dating-D2XTELiw.js} +5 -5
  226. package/dist/_chunks/{pregnancy-dating-26fcvhAx.js.map → pregnancy-dating-D2XTELiw.js.map} +1 -1
  227. package/dist/_chunks/{pregnancy-weight-gain-D8q1IUCT.js → pregnancy-weight-gain-BVvyL-j1.js} +4 -4
  228. package/dist/_chunks/{pregnancy-weight-gain-D8q1IUCT.js.map → pregnancy-weight-gain-BVvyL-j1.js.map} +1 -1
  229. package/dist/_chunks/{privacy-lock-BpVgSgMb.js → privacy-lock-CEYJ8ehu.js} +2 -2
  230. package/dist/_chunks/{privacy-lock-BpVgSgMb.js.map → privacy-lock-CEYJ8ehu.js.map} +1 -1
  231. package/dist/_chunks/{privacy-mask-BfMC57ST.js → privacy-mask-Ch7743uk.js} +2 -2
  232. package/dist/_chunks/{privacy-mask-BfMC57ST.js.map → privacy-mask-Ch7743uk.js.map} +1 -1
  233. package/dist/_chunks/{product-hub-panel-CH4B49ij.js → product-hub-panel-C_ZosrBt.js} +3 -3
  234. package/dist/_chunks/{product-hub-panel-CH4B49ij.js.map → product-hub-panel-C_ZosrBt.js.map} +1 -1
  235. package/dist/_chunks/{public-footer-ZWTEG1Rq.js → public-footer-CXOrdAaS.js} +2 -2
  236. package/dist/_chunks/{public-footer-ZWTEG1Rq.js.map → public-footer-CXOrdAaS.js.map} +1 -1
  237. package/dist/_chunks/{public-header.agent-BHTDKMsw.js → public-header.agent-DXRA7ebK.js} +3 -3
  238. package/dist/_chunks/{public-header.agent-BHTDKMsw.js.map → public-header.agent-DXRA7ebK.js.map} +1 -1
  239. package/dist/_chunks/{radio-BBbMdbE_.js → radio-BZQs6_36.js} +2 -2
  240. package/dist/_chunks/{radio-BBbMdbE_.js.map → radio-BZQs6_36.js.map} +1 -1
  241. package/dist/_chunks/{radio-group-DicxWJXP.js → radio-group-ChIKyeSJ.js} +3 -3
  242. package/dist/_chunks/{radio-group-DicxWJXP.js.map → radio-group-ChIKyeSJ.js.map} +1 -1
  243. package/dist/_chunks/{radiograph-panel.agent-DR0gOeSc.js → radiograph-panel.agent-DDNUo4Ul.js} +4 -4
  244. package/dist/_chunks/{radiograph-panel.agent-DR0gOeSc.js.map → radiograph-panel.agent-DDNUo4Ul.js.map} +1 -1
  245. package/dist/_chunks/{registration-form-B8IeB9kd.js → registration-form-BQyT_kBX.js} +5 -5
  246. package/dist/_chunks/{registration-form-B8IeB9kd.js.map → registration-form-BQyT_kBX.js.map} +1 -1
  247. package/dist/_chunks/{resource-chip-DQeCJzJf.js → resource-chip-DB5jDwUO.js} +2 -2
  248. package/dist/_chunks/{resource-chip-DQeCJzJf.js.map → resource-chip-DB5jDwUO.js.map} +1 -1
  249. package/dist/_chunks/{reviews-panel-CHzDqerd.js → reviews-panel-AvsVgtJu.js} +3 -3
  250. package/dist/_chunks/{reviews-panel-CHzDqerd.js.map → reviews-panel-AvsVgtJu.js.map} +1 -1
  251. package/dist/_chunks/{rich-text-editor-BRuTo2hm.js → rich-text-editor-M2gT_E7f.js} +9 -9
  252. package/dist/_chunks/{rich-text-editor-BRuTo2hm.js.map → rich-text-editor-M2gT_E7f.js.map} +1 -1
  253. package/dist/_chunks/{sheet-CqvPYNLn.js → sheet-D2PfJl8n.js} +2 -2
  254. package/dist/_chunks/{sheet-CqvPYNLn.js.map → sheet-D2PfJl8n.js.map} +1 -1
  255. package/dist/_chunks/{sidebar-C9Zof0z1.js → sidebar-BS24EnYd.js} +2 -2
  256. package/dist/_chunks/{sidebar-C9Zof0z1.js.map → sidebar-BS24EnYd.js.map} +1 -1
  257. package/dist/_chunks/{sign-document-D4iHS_Ug.js → sign-document-CY7xTXbm.js} +2 -2
  258. package/dist/_chunks/{sign-document-D4iHS_Ug.js.map → sign-document-CY7xTXbm.js.map} +1 -1
  259. package/dist/_chunks/{signature-request-BH7yKI01.js → signature-request-BMCHy2ZO.js} +5 -5
  260. package/dist/_chunks/{signature-request-BH7yKI01.js.map → signature-request-BMCHy2ZO.js.map} +1 -1
  261. package/dist/_chunks/{signature-status-chip-DP3qRijv.js → signature-status-chip-pIoQjvH8.js} +3 -3
  262. package/dist/_chunks/{signature-status-chip-DP3qRijv.js.map → signature-status-chip-pIoQjvH8.js.map} +1 -1
  263. package/dist/_chunks/{signed-out-frame-eaOWHpDr.js → signed-out-frame-Rg_GVDnl.js} +4 -4
  264. package/dist/_chunks/{signed-out-frame-eaOWHpDr.js.map → signed-out-frame-Rg_GVDnl.js.map} +1 -1
  265. package/dist/_chunks/{slot-grid-DELa2Nwz.js → slot-grid-dj5f6R2w.js} +2 -2
  266. package/dist/_chunks/{slot-grid-DELa2Nwz.js.map → slot-grid-dj5f6R2w.js.map} +1 -1
  267. package/dist/_chunks/{stat-DmjGfXND.js → stat-D2PNJujA.js} +2 -2
  268. package/dist/_chunks/stat-D2PNJujA.js.map +1 -0
  269. package/dist/_chunks/{streaming-text-bPDoG7Y3.js → streaming-text-zFViGexf.js} +2 -2
  270. package/dist/_chunks/{streaming-text-bPDoG7Y3.js.map → streaming-text-zFViGexf.js.map} +1 -1
  271. package/dist/_chunks/{tab-bar-5GppbMGc.js → tab-bar-BEODTG6k.js} +2 -2
  272. package/dist/_chunks/{tab-bar-5GppbMGc.js.map → tab-bar-BEODTG6k.js.map} +1 -1
  273. package/dist/_chunks/{tag-CS5cXpfx.js → tag-DOZGz0fT.js} +2 -2
  274. package/dist/_chunks/{tag-CS5cXpfx.js.map → tag-DOZGz0fT.js.map} +1 -1
  275. package/dist/_chunks/{task-card-zaTU1rQa.js → task-card-BS7Uqevr.js} +2 -2
  276. package/dist/_chunks/{task-card-zaTU1rQa.js.map → task-card-BS7Uqevr.js.map} +1 -1
  277. package/dist/_chunks/{task-editor-CgGcg-2c.js → task-editor-DoiOzNiC.js} +9 -9
  278. package/dist/_chunks/{task-editor-CgGcg-2c.js.map → task-editor-DoiOzNiC.js.map} +1 -1
  279. package/dist/_chunks/{task-tray-DGMwogWu.js → task-tray-eQU4KJcA.js} +3 -3
  280. package/dist/_chunks/{task-tray-DGMwogWu.js.map → task-tray-eQU4KJcA.js.map} +1 -1
  281. package/dist/_chunks/{tasks-panel-xGtiEdcj.js → tasks-panel-8nLwBw6P.js} +7 -7
  282. package/dist/_chunks/{tasks-panel-xGtiEdcj.js.map → tasks-panel-8nLwBw6P.js.map} +1 -1
  283. package/dist/_chunks/{theme-toggle-_cfYEK73.js → theme-toggle-Ctb77x6O.js} +3 -3
  284. package/dist/_chunks/{theme-toggle-_cfYEK73.js.map → theme-toggle-Ctb77x6O.js.map} +1 -1
  285. package/dist/_chunks/{toast-CNUydTgT.js → toast-6T519aLz.js} +2 -2
  286. package/dist/_chunks/{toast-CNUydTgT.js.map → toast-6T519aLz.js.map} +1 -1
  287. package/dist/_chunks/tool-rail-C-03rH2I.js +973 -0
  288. package/dist/_chunks/tool-rail-C-03rH2I.js.map +1 -0
  289. package/dist/_chunks/tooltip-uEBdD1-5.js +178 -0
  290. package/dist/_chunks/tooltip-uEBdD1-5.js.map +1 -0
  291. package/dist/_chunks/{tooth-scheme-05DsRMA5.js → tooth-scheme-Dkh4JwzT.js} +2 -2
  292. package/dist/_chunks/{tooth-scheme-05DsRMA5.js.map → tooth-scheme-Dkh4JwzT.js.map} +1 -1
  293. package/dist/_chunks/{transcript-panel-CjsiDB1K.js → transcript-panel-XudW5l6l.js} +2 -2
  294. package/dist/_chunks/{transcript-panel-CjsiDB1K.js.map → transcript-panel-XudW5l6l.js.map} +1 -1
  295. package/dist/_chunks/{treatment-receipt-BSVOfStA.js → treatment-receipt-BdJ36vNP.js} +3 -3
  296. package/dist/_chunks/{treatment-receipt-BSVOfStA.js.map → treatment-receipt-BdJ36vNP.js.map} +1 -1
  297. package/dist/_chunks/{use-appointment-details-read-BGVthJFx.js → use-appointment-details-read-D6Gb_OuN.js} +16 -16
  298. package/dist/_chunks/{use-appointment-details-read-BGVthJFx.js.map → use-appointment-details-read-D6Gb_OuN.js.map} +1 -1
  299. package/dist/_chunks/use-edge-resize-CBtem0j2.js +171 -0
  300. package/dist/_chunks/use-edge-resize-CBtem0j2.js.map +1 -0
  301. package/dist/_chunks/{voice-control-panel-DyKEaFxt.js → voice-control-panel-C0BfY23Y.js} +4 -4
  302. package/dist/_chunks/{voice-control-panel-DyKEaFxt.js.map → voice-control-panel-C0BfY23Y.js.map} +1 -1
  303. package/dist/_chunks/{warning-stack-CAL9xVo1.js → warning-stack-HYWAytZV.js} +3 -3
  304. package/dist/_chunks/{warning-stack-CAL9xVo1.js.map → warning-stack-HYWAytZV.js.map} +1 -1
  305. package/dist/_chunks/{widget-picker-CkhoG4Rj.js → widget-picker-DlNPGcnu.js} +2 -2
  306. package/dist/_chunks/{widget-picker-CkhoG4Rj.js.map → widget-picker-DlNPGcnu.js.map} +1 -1
  307. package/dist/_chunks/{workflow-map-BUYG1oXU.js → workflow-map-C2B2qIr1.js} +5 -5
  308. package/dist/_chunks/{workflow-map-BUYG1oXU.js.map → workflow-map-C2B2qIr1.js.map} +1 -1
  309. package/dist/agent-catalog.json +13 -1
  310. package/dist/agent-i18n/en.json +10 -0
  311. package/dist/components/_shared/use-apex-legend-scroll.d.ts +11 -0
  312. package/dist/components/_shared/use-apex-legend-scroll.d.ts.map +1 -0
  313. package/dist/components/_shared/use-apex-x-label-spacing.d.ts +11 -0
  314. package/dist/components/_shared/use-apex-x-label-spacing.d.ts.map +1 -0
  315. package/dist/components/agenda-card/index.js +1 -1
  316. package/dist/components/agenda-tray/index.js +1 -1
  317. package/dist/components/ai-credits-notice/index.js +1 -1
  318. package/dist/components/ai-permission-notice/index.js +1 -1
  319. package/dist/components/ai-prompt-input/index.js +1 -1
  320. package/dist/components/alert/index.js +1 -1
  321. package/dist/components/anamnesis-card/index.js +1 -1
  322. package/dist/components/anamnesis-summary-card/index.js +1 -1
  323. package/dist/components/app-frame/app-frame-context.d.ts +19 -0
  324. package/dist/components/app-frame/app-frame-context.d.ts.map +1 -0
  325. package/dist/components/app-frame/app-frame.d.ts +3 -0
  326. package/dist/components/app-frame/app-frame.d.ts.map +1 -1
  327. package/dist/components/app-frame/index.d.ts +2 -0
  328. package/dist/components/app-frame/index.d.ts.map +1 -1
  329. package/dist/components/app-frame/index.js +4 -2
  330. package/dist/components/app-frame/index.js.map +1 -1
  331. package/dist/components/appointment-card/index.js +2 -2
  332. package/dist/components/appointment-details-panel/index.js +1 -1
  333. package/dist/components/appointment-peek/index.js +1 -1
  334. package/dist/components/appointment-timeline/index.js +1 -1
  335. package/dist/components/audio-recorder/index.js +1 -1
  336. package/dist/components/badge/index.js +1 -1
  337. package/dist/components/bishop-score/index.js +1 -1
  338. package/dist/components/bmi-calculator/index.js +1 -1
  339. package/dist/components/booking/index.js +1 -1
  340. package/dist/components/button/index.js +1 -1
  341. package/dist/components/button-group/index.js +1 -1
  342. package/dist/components/calendar/index.js +1 -1
  343. package/dist/components/care-plan-card/index.js +1 -1
  344. package/dist/components/care-plan-entry-card/index.js +1 -1
  345. package/dist/components/care-plan-header/index.js +1 -1
  346. package/dist/components/carousel/index.js +1 -1
  347. package/dist/components/chart/chart.d.ts +3 -1
  348. package/dist/components/chart/chart.d.ts.map +1 -1
  349. package/dist/components/chart/index.js +1 -1
  350. package/dist/components/chat-input/index.js +1 -1
  351. package/dist/components/chat-message/index.js +1 -1
  352. package/dist/components/checkbox/index.js +1 -1
  353. package/dist/components/checkbox-group/index.js +1 -1
  354. package/dist/components/clinical-note-card/index.js +1 -1
  355. package/dist/components/connection-status/index.js +1 -1
  356. package/dist/components/contact-card/index.js +1 -1
  357. package/dist/components/contact-profile-card/index.js +1 -1
  358. package/dist/components/control-room-rail/control-room-context.d.ts +10 -4
  359. package/dist/components/control-room-rail/control-room-context.d.ts.map +1 -1
  360. package/dist/components/control-room-rail/control-room-rail.agent.d.ts.map +1 -1
  361. package/dist/components/control-room-rail/control-room-rail.d.ts.map +1 -1
  362. package/dist/components/control-room-rail/index.js +1 -1
  363. package/dist/components/cycle-calculator/index.js +1 -1
  364. package/dist/components/dashboard-grid/dashboard-grid.d.ts.map +1 -1
  365. package/dist/components/dashboard-grid/index.js +1 -1
  366. package/dist/components/data-table/index.js +4 -4
  367. package/dist/components/data-table-tabs/index.js +1 -1
  368. package/dist/components/dependent-selector/index.js +1 -1
  369. package/dist/components/description-list/index.js +1 -1
  370. package/dist/components/dev-bypass-button/index.js +1 -1
  371. package/dist/components/document-preview/index.js +1 -1
  372. package/dist/components/document-scanner/index.js +1 -1
  373. package/dist/components/due-date-calculator/index.js +2 -2
  374. package/dist/components/editable-description/index.js +1 -1
  375. package/dist/components/editor-overlay/index.js +1 -1
  376. package/dist/components/entity-summary/index.js +1 -1
  377. package/dist/components/error-summary/index.js +1 -1
  378. package/dist/components/face-scheme/index.js +1 -1
  379. package/dist/components/fetal-weight/index.js +1 -1
  380. package/dist/components/field-array/index.js +1 -1
  381. package/dist/components/file-manager/index.js +1 -1
  382. package/dist/components/fiscal-code-input/index.js +1 -1
  383. package/dist/components/freemium-paywall/index.js +1 -1
  384. package/dist/components/gestational-age-calculator/index.js +1 -1
  385. package/dist/components/hcg-doubling/index.js +1 -1
  386. package/dist/components/header/index.js +1 -1
  387. package/dist/components/header-settings/index.js +1 -1
  388. package/dist/components/heatmap/index.js +1 -1
  389. package/dist/components/hover-card/index.js +1 -1
  390. package/dist/components/icon-button/index.js +1 -1
  391. package/dist/components/icon-button-group/index.js +1 -1
  392. package/dist/components/icon-picker/index.js +1 -1
  393. package/dist/components/info-tip/index.js +1 -1
  394. package/dist/components/key-value-pair/index.js +1 -1
  395. package/dist/components/link/index.js +1 -1
  396. package/dist/components/link/link.d.ts.map +1 -1
  397. package/dist/components/locale-picker/index.js +1 -1
  398. package/dist/components/message-card/index.js +1 -1
  399. package/dist/components/message-tray/index.js +1 -1
  400. package/dist/components/multi-select/index.js +1 -1
  401. package/dist/components/nav-grid/index.js +1 -1
  402. package/dist/components/note-timeline/index.js +1 -1
  403. package/dist/components/notes-panel/index.js +1 -1
  404. package/dist/components/notification-card/index.js +1 -1
  405. package/dist/components/notification-tray/index.js +1 -1
  406. package/dist/components/operator-hero/index.js +1 -1
  407. package/dist/components/optical-prescription/index.js +1 -1
  408. package/dist/components/panel-header/index.js +1 -1
  409. package/dist/components/panel-subview/index.js +1 -1
  410. package/dist/components/patient-details/index.js +1 -1
  411. package/dist/components/patient-search/index.js +1 -1
  412. package/dist/components/patient-summary-card/index.js +1 -1
  413. package/dist/components/patient-table/index.js +1 -1
  414. package/dist/components/payment-card/index.js +1 -1
  415. package/dist/components/payment-form/index.js +1 -1
  416. package/dist/components/pdf-viewer/index.js +1 -1
  417. package/dist/components/periodontal-chart/index.js +1 -1
  418. package/dist/components/periodontal-chart-card/index.js +1 -1
  419. package/dist/components/periodontal-diagnosis/index.js +1 -1
  420. package/dist/components/periodontal-risk-chart/index.js +1 -1
  421. package/dist/components/permission-matrix/index.js +1 -1
  422. package/dist/components/popover/index.js +1 -1
  423. package/dist/components/practice-profile-hero/index.js +1 -1
  424. package/dist/components/practice-results/index.js +1 -1
  425. package/dist/components/pregnancy-dating/index.js +1 -1
  426. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  427. package/dist/components/privacy-lock/index.js +1 -1
  428. package/dist/components/product-hub-tray/index.js +1 -1
  429. package/dist/components/public-footer/index.js +1 -1
  430. package/dist/components/public-header/index.js +1 -1
  431. package/dist/components/radio/index.js +1 -1
  432. package/dist/components/radio-group/index.js +2 -2
  433. package/dist/components/radiograph-panel/index.js +1 -1
  434. package/dist/components/resource-chip/index.js +1 -1
  435. package/dist/components/reviews-panel/index.js +1 -1
  436. package/dist/components/rich-text-editor/index.js +2 -2
  437. package/dist/components/sheet/index.js +1 -1
  438. package/dist/components/sidebar/index.js +1 -1
  439. package/dist/components/sign-document/index.js +1 -1
  440. package/dist/components/signature-status-chip/index.js +1 -1
  441. package/dist/components/slot-grid/index.js +1 -1
  442. package/dist/components/stat/index.js +1 -1
  443. package/dist/components/stat/stat.d.ts +7 -2
  444. package/dist/components/stat/stat.d.ts.map +1 -1
  445. package/dist/components/streaming-text/index.js +1 -1
  446. package/dist/components/tab-bar/index.js +1 -1
  447. package/dist/components/tag/index.js +1 -1
  448. package/dist/components/task-card/index.js +1 -1
  449. package/dist/components/task-editor/index.js +1 -1
  450. package/dist/components/task-tray/index.js +1 -1
  451. package/dist/components/tasks-panel/index.js +1 -1
  452. package/dist/components/theme-toggle/index.js +1 -1
  453. package/dist/components/toast/index.js +1 -1
  454. package/dist/components/tool-rail/index.js +1 -1
  455. package/dist/components/tool-rail/tool-rail.agent.d.ts.map +1 -1
  456. package/dist/components/tool-rail/tool-rail.d.ts +7 -0
  457. package/dist/components/tool-rail/tool-rail.d.ts.map +1 -1
  458. package/dist/components/tooltip/index.js +1 -1
  459. package/dist/components/tooltip/tooltip.d.ts.map +1 -1
  460. package/dist/components/tooth-scheme/index.js +1 -1
  461. package/dist/components/transcript-panel/index.js +1 -1
  462. package/dist/components/treatment-receipt/index.js +1 -1
  463. package/dist/components/voice-control-panel/index.js +1 -1
  464. package/dist/components/warning-stack/index.js +1 -1
  465. package/dist/components/widget-picker/index.js +1 -1
  466. package/dist/components/workflow/index.js +1 -1
  467. package/dist/hooks/index.js +1 -1
  468. package/dist/hooks/use-edge-resize.d.ts +5 -1
  469. package/dist/hooks/use-edge-resize.d.ts.map +1 -1
  470. package/dist/index.js +781 -779
  471. package/dist/index.js.map +1 -1
  472. package/dist/patterns/alia-assistant/index.js +1 -1
  473. package/dist/patterns/anamnesis/index.js +1 -1
  474. package/dist/patterns/calendar/index.js +1 -1
  475. package/dist/patterns/forgot-password-form/index.js +1 -1
  476. package/dist/patterns/help-me-write-templates/index.js +1 -1
  477. package/dist/patterns/login-form/index.js +1 -1
  478. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  479. package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts +3 -0
  480. package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts.map +1 -1
  481. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  482. package/dist/patterns/registration-form/index.js +1 -1
  483. package/dist/patterns/signature-request/index.js +1 -1
  484. package/dist/patterns/signed-out-frame/index.js +1 -1
  485. package/dist/tokens.css +10 -1
  486. package/package.json +1 -1
  487. package/dist/_chunks/app-frame-CqmDh2v5.js +0 -134
  488. package/dist/_chunks/app-frame-CqmDh2v5.js.map +0 -1
  489. package/dist/_chunks/chart-D7PbNO_M.js +0 -920
  490. package/dist/_chunks/chart-D7PbNO_M.js.map +0 -1
  491. package/dist/_chunks/control-room-rail-BbBEIdws.js +0 -379
  492. package/dist/_chunks/control-room-rail-BbBEIdws.js.map +0 -1
  493. package/dist/_chunks/dashboard-grid-DRnhIlT-.js.map +0 -1
  494. package/dist/_chunks/link-gRw3NtOt.js.map +0 -1
  495. package/dist/_chunks/marketplace-app-shell-p6hPgVwy.js.map +0 -1
  496. package/dist/_chunks/stat-DmjGfXND.js.map +0 -1
  497. package/dist/_chunks/tool-rail-Blgibz0a.js +0 -816
  498. package/dist/_chunks/tool-rail-Blgibz0a.js.map +0 -1
  499. package/dist/_chunks/tooltip-Cp-PLePW.js +0 -119
  500. package/dist/_chunks/tooltip-Cp-PLePW.js.map +0 -1
  501. package/dist/_chunks/use-edge-resize-DHbyQwu8.js +0 -149
  502. package/dist/_chunks/use-edge-resize-DHbyQwu8.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"multi-select-BT23EnSA.js","sources":["../../src/components/multi-select/multi-select.agent.ts","../../src/components/multi-select/multi-select.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { MultiSelectHandle } from './multi-select';\n\nexport const multiSelectAgent: AgentAdapter<MultiSelectHandle> = {\n id: 'multi-select',\n // Persisted multi-choice (selection state + set_selection) → select_multiple,\n // plus type-to-filter and open/close of the option list.\n capabilities: ['select_multiple', 'filter', 'open', 'close'],\n state: {\n selection: {\n type: 'string[]',\n descriptionKey: 'ui.agent.multiSelect.state.selection',\n description: 'Values of currently-selected options.',\n read: (handle) => handle.getSelection(),\n },\n query: {\n type: 'string',\n descriptionKey: 'ui.agent.multiSelect.state.query',\n description: 'Current filter query.',\n read: (handle) => handle.getQuery(),\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.multiSelect.state.isOpen',\n description: 'True when the option list is visible.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n set_selection: {\n // Persists the user's chosen options — reversible via the same UI.\n safety: 'write',\n argsType: '{ values: string[] }',\n argsSchema: {\n type: 'object',\n properties: {\n values: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Option values to select (replaces the current selection).',\n },\n },\n required: ['values'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.setSelection',\n description:\n 'Replace the current selection with the given list of values.',\n examples: [\n {\n args: { values: ['a', 'b'] },\n note: 'Select exactly options \"a\" and \"b\".',\n },\n ],\n invoke: (handle, args: { values: string[] }) => {\n handle.setSelection(args.values);\n },\n },\n clear_selection: {\n // Discards the persisted selection — destructive (loses the choices).\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.clearSelection',\n description: 'Clear the current selection.',\n invoke: (handle) => {\n handle.clearSelection();\n },\n },\n apply_filter: {\n // Pure ephemeral filter of the visible options — 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 list.' },\n },\n required: ['query'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.applyFilter',\n description: 'Set the filter query for the option list.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.open',\n description: 'Open the option list.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.close',\n description: 'Close the option list.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'multi-select' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description: 'Each option emits its value as data-option-id.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type Ref,\n} from 'react';\nimport * as Popover from '@radix-ui/react-popover';\nimport { Command } from 'cmdk';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Check, X } from 'lucide-react';\nimport {\n FormFieldContext,\n useFormField,\n useFormFieldControlRef,\n} from '../form-field/form-field-context';\nimport { Tooltip } from '../tooltip';\nimport type { OptionShape } from '../_shared/option';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { groupOptions } from '../_shared/group-options';\nimport { MENU_ROW_HIGHLIGHT } from '../_shared/menu-row';\nimport {\n OPTION_BODY_CLASSES,\n OPTION_END_CLASSES,\n OPTION_LABEL_ROW_CLASSES,\n optionDescriptionVariants,\n optionLabelVariants,\n} from '../_shared/option-row';\nimport {\n INPUT_SURFACE_CHROME,\n INPUT_SURFACE_TEXT,\n} from '../_shared/input-surface';\nimport { useAgentRegistration } from '../../agent';\nimport { multiSelectAgent } from './multi-select.agent';\n\n// MultiSelect uses `min-h-*` (not `h-*`) because the wrapper grows vertically\n// as chips wrap to additional lines. The height floor per size mirrors the\n// other inputs' fixed heights in _shared/input-surface.ts.\nconst multiSelectVariants = cva(\n [\n 'ds:inline-flex ds:flex-wrap ds:items-center ds:gap-1 ds:w-full',\n INPUT_SURFACE_CHROME,\n 'ds:aria-[invalid=true]:border-destructive',\n 'ds:aria-disabled:cursor-not-allowed ds:aria-disabled:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: `ds:min-h-8 ds:ps-2 ds:pe-2 ds:py-1 ${INPUT_SURFACE_TEXT.sm}`,\n md: `ds:min-h-[var(--min-target-size)] ds:ps-3 ds:pe-3 ds:py-1.5 ${INPUT_SURFACE_TEXT.md}`,\n lg: `ds:min-h-12 ds:ps-4 ds:pe-4 ds:py-2 ${INPUT_SURFACE_TEXT.lg}`,\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst chipVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-1',\n 'ds:rounded-[var(--radius-sm)] ds:border ds:border-border ds:bg-muted',\n 'ds:text-foreground ds:select-none',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ],\n {\n variants: {\n size: {\n sm: 'ds:ps-2 ds:pe-1 ds:py-0.5 ds:text-[length:var(--font-size-xs)]',\n md: 'ds:ps-2 ds:pe-1 ds:py-0.5 ds:text-[length:var(--font-size-sm)]',\n lg: 'ds:ps-3 ds:pe-1.5 ds:py-1 ds:text-[length:var(--font-size-base)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst chipDismissClasses = [\n 'ds:inline-flex ds:items-center ds:justify-center ds:shrink-0',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:text-muted-foreground ds:hover:text-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:size-4',\n 'ds:relative ds:before:absolute ds:before:inset-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"]',\n].join(' ');\n\nconst popoverContentClasses = [\n 'ds:z-[var(--z-dropdown)] ds:overflow-hidden',\n // At least as wide as the field, at most as wide as the screen allows: a\n // long option wraps or ends in an ellipsis instead of running off the\n // edge. The floor gives way to the cap on a field wider than that.\n 'ds:min-w-[min(var(--radix-popover-trigger-width),var(--radix-popover-content-available-width))]',\n 'ds:max-w-[var(--radix-popover-content-available-width)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-background ds:text-foreground',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:animate-in ds:fade-in ds:zoom-in-95',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out',\n 'ds:data-[state=closed]:zoom-out-95',\n 'ds:data-[side=bottom]:slide-in-from-top-2',\n 'ds:data-[side=top]:slide-in-from-bottom-2',\n 'ds:motion-reduce:animate-none',\n].join(' ');\n\nconst commandItemClasses = [\n 'ds:relative ds:flex ds:cursor-pointer ds:items-center',\n 'ds:rounded-[var(--radius-sm)] ds:ps-2 ds:pe-2 ds:py-1.5',\n 'ds:text-[var(--font-size-sm)] ds:text-foreground ds:outline-none ds:select-none',\n MENU_ROW_HIGHLIGHT.selected,\n 'ds:aria-[disabled=true]:pointer-events-none ds:aria-[disabled=true]:opacity-50',\n 'ds:data-[disabled=true]:pointer-events-none ds:data-[disabled=true]:opacity-50',\n].join(' ');\n\nconst actionItemClasses = [\n 'ds:relative ds:flex ds:cursor-pointer ds:items-center',\n 'ds:rounded-[var(--radius-sm)] ds:ps-2 ds:pe-2 ds:py-1.5',\n 'ds:text-[var(--font-size-sm)] ds:font-medium ds:text-primary ds:outline-none ds:select-none',\n MENU_ROW_HIGHLIGHT.selected,\n].join(' ');\n\nconst SELECT_ALL_VALUE = '__ui-multiselect-select-all__';\nconst CLEAR_ALL_VALUE = '__ui-multiselect-clear-all__';\n\ntype HTMLDivAttributes = HTMLAttributes<HTMLDivElement>;\n\n// Curated agent-readiness handle — see multi-select.agent.ts.\nexport interface MultiSelectHandle {\n getSelection: () => string[];\n getQuery: () => string;\n getIsOpen: () => boolean;\n setSelection: (values: string[]) => void;\n clearSelection: () => void;\n setQuery: (query: string) => void;\n open: () => void;\n close: () => void;\n}\n\nexport interface MultiSelectProps<T extends string = string>\n extends\n Omit<HTMLDivAttributes, 'onChange'>,\n VariantProps<typeof multiSelectVariants> {\n options: OptionShape<T>[];\n value?: T[];\n defaultValue?: T[];\n onChange?: (next: T[]) => void;\n onComplete?: (values: T[]) => void;\n placeholder?: string;\n maxSelections?: number;\n allowSelectAll?: boolean;\n allowClear?: boolean;\n filter?: (query: string, option: OptionShape<T>) => boolean;\n size?: 'sm' | 'md' | 'lg';\n disabled?: boolean;\n /**\n * Let a long option label wrap onto a second line instead of ending in an\n * ellipsis. Longer still, it is clipped after two lines. Off by default.\n * An option's `description` always sits on its own line under the label.\n */\n wrapOptionLabels?: boolean;\n}\n\nconst MultiSelectImpl = forwardRef<HTMLDivElement, MultiSelectProps>(\n function MultiSelect(\n {\n options,\n value,\n defaultValue,\n onChange,\n onComplete,\n placeholder,\n maxSelections,\n allowSelectAll = false,\n allowClear = false,\n filter,\n size = 'md',\n disabled,\n wrapOptionLabels = false,\n className,\n id,\n // Pull `aria-label` out of the div spread so it names the combobox\n // INPUT (the interactive control) rather than the wrapper div. Lets a\n // consumer give the trigger a meaningful name when there's no visible\n // label or FormField (e.g. a data-table floating filter naming itself\n // after its column). Untouched callers fall back to the placeholder.\n // Inside a FormField the field's label names the input and this is\n // ignored, so it can never override the visible text (WCAG 2.5.3).\n 'aria-label': ariaLabel,\n ...divProps\n },\n ref,\n ) {\n const { t } = useTranslation('ui');\n const ctx = useFormField();\n const inFormField = useContext(FormFieldContext) !== null;\n\n const [currentValueRaw, setMultiSelectValue] = useControllableState<\n string[]\n >({\n value,\n defaultValue: defaultValue ?? [],\n onChange,\n });\n const currentValue = currentValueRaw ?? [];\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n\n const inputRef = useRef<HTMLInputElement>(null);\n const counterId = `${useId()}-count`;\n const chipRefs = useRef<Array<HTMLSpanElement | null>>([]);\n const triggerRef = useRef<HTMLDivElement>(null);\n const composedRef = composeRefs<HTMLDivElement>(ref, triggerRef);\n\n const effectiveDisabled =\n (inFormField && ctx.disabled) || Boolean(disabled);\n const effectiveRequired = inFormField && ctx.required;\n const effectiveInvalid = inFormField && ctx.invalid;\n const describedBy =\n inFormField && ctx.describedBy ? ctx.describedBy : undefined;\n const triggerId = id ?? (inFormField ? ctx.id : undefined);\n /* cmdk writes its own id on the input, so the field's label follows\n that one. */\n useFormFieldControlRef(ctx, inputRef);\n\n const labelByValue = useMemo(() => {\n const map = new Map<string, string>();\n for (const option of options) map.set(option.value, option.label);\n return map;\n }, [options]);\n\n const atCap =\n typeof maxSelections === 'number' && currentValue.length >= maxSelections;\n\n const commit = (next: string[]): void => {\n setMultiSelectValue(next);\n };\n\n const toggle = (val: string): void => {\n if (currentValue.includes(val)) {\n commit(currentValue.filter((v) => v !== val));\n return;\n }\n if (atCap) return;\n commit([...currentValue, val]);\n };\n\n const removeAt = (index: number): string[] => {\n const next = currentValue.filter((_, i) => i !== index);\n commit(next);\n return next;\n };\n\n const handleSelectAll = (): void => {\n const selectable = options.filter((o) => !o.disabled).map((o) => o.value);\n const cap =\n typeof maxSelections === 'number' ? maxSelections : selectable.length;\n commit(selectable.slice(0, cap));\n };\n\n const handleClearAll = (): void => {\n commit([]);\n };\n\n // Agent handle — refs for fresh reads from the memoized handle.\n const valueRef = useRef<string[]>(currentValue);\n useEffect(() => {\n valueRef.current = currentValue;\n }, [currentValue]);\n const queryRef = useRef<string>(query);\n useEffect(() => {\n queryRef.current = query;\n }, [query]);\n const openRef = useRef<boolean>(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n\n const commitStable = useCallback(\n (next: string[]) => {\n setMultiSelectValue(next);\n },\n [setMultiSelectValue],\n );\n\n const agentHandle = useMemo<MultiSelectHandle>(\n () => ({\n getSelection: () => [...valueRef.current],\n getQuery: () => queryRef.current,\n getIsOpen: () => openRef.current,\n setSelection: (values) => commitStable(values),\n clearSelection: () => commitStable([]),\n setQuery: (next) => setQuery(next),\n open: () => setOpen(true),\n close: () => setOpen(false),\n }),\n [commitStable],\n );\n useAgentRegistration(multiSelectAgent, agentHandle, id);\n\n const resolvedPlaceholder =\n placeholder ?? t('inputs.multiSelect.placeholder', 'Select…');\n\n const filteredOptions = useMemo(() => {\n if (!query) return options;\n const needle = query.toLowerCase();\n return options.filter((option) => {\n if (filter) return filter(query, option);\n return option.label.toLowerCase().includes(needle);\n });\n }, [options, query, filter]);\n\n const groups = useMemo(\n () => groupOptions(filteredOptions),\n [filteredOptions],\n );\n\n const handleInputKeyDown = (e: KeyboardEvent<HTMLInputElement>): void => {\n const target = e.currentTarget;\n if (e.key === 'Backspace' && query === '' && currentValue.length > 0) {\n e.preventDefault();\n const removedIndex = currentValue.length - 1;\n const next = removeAt(removedIndex);\n const newLast = next.length - 1;\n if (newLast >= 0) {\n requestAnimationFrame(() => {\n chipRefs.current[newLast]?.focus();\n });\n }\n return;\n }\n const caretAtStart =\n target.selectionStart === 0 && target.selectionEnd === 0;\n if (\n (e.key === 'ArrowLeft' || e.key === 'ArrowRight') &&\n caretAtStart &&\n currentValue.length > 0\n ) {\n const isRTL = document.dir === 'rtl' || target.dir === 'rtl';\n const shouldNavigate =\n (isRTL && e.key === 'ArrowRight') ||\n (!isRTL && e.key === 'ArrowLeft');\n if (shouldNavigate) {\n e.preventDefault();\n const lastIdx = currentValue.length - 1;\n chipRefs.current[lastIdx]?.focus();\n }\n return;\n }\n if (e.key === 'Escape') {\n setOpen(false);\n return;\n }\n if (!open && (e.key === 'ArrowDown' || e.key === 'Enter')) {\n setOpen(true);\n }\n };\n\n const handleChipKeyDown =\n (index: number) =>\n (e: KeyboardEvent<HTMLSpanElement>): void => {\n if (\n e.key === 'Backspace' ||\n e.key === 'Delete' ||\n e.key === 'Enter' ||\n e.key === ' '\n ) {\n e.preventDefault();\n e.stopPropagation();\n const next = removeAt(index);\n if (next.length === 0) {\n requestAnimationFrame(() => inputRef.current?.focus());\n return;\n }\n const focusIdx = Math.min(index, next.length - 1);\n requestAnimationFrame(() => {\n chipRefs.current[focusIdx]?.focus();\n });\n return;\n }\n const isRTL = document.dir === 'rtl';\n const prevKey = isRTL ? 'ArrowRight' : 'ArrowLeft';\n const nextKey = isRTL ? 'ArrowLeft' : 'ArrowRight';\n if (e.key === prevKey) {\n e.preventDefault();\n const newIdx = Math.max(0, index - 1);\n chipRefs.current[newIdx]?.focus();\n return;\n }\n if (e.key === nextKey) {\n e.preventDefault();\n if (index < currentValue.length - 1) {\n chipRefs.current[index + 1]?.focus();\n } else {\n inputRef.current?.focus();\n }\n return;\n }\n if (e.key === 'Escape') {\n setOpen(false);\n inputRef.current?.focus();\n }\n };\n\n // ----- Chip overflow measurement -----\n // The measurement must read the FULL chip row, never the collapsed one.\n // Counting only the rendered (collapsed) chips is self-referential: hiding\n // the overflow behind \"+N more\" leaves a subset that trivially fits row 1,\n // the next measure concludes \"everything fits\", it expands, re-wraps, and\n // the ResizeObserver oscillates every frame (the visible flicker).\n //\n // Instead we run a two-pass cycle driven by `measureNonce`: a request first\n // renders every chip (visibleCount → ∞), then the layout effect measures\n // that complete row and sets the collapsed count. Both passes are layout\n // effects, so React flushes them before paint — the browser only ever shows\n // the settled, single-line result, with no full-row flash.\n const [visibleCount, setVisibleCount] = useState<number>(\n Number.POSITIVE_INFINITY,\n );\n const [measureNonce, setMeasureNonce] = useState<number>(0);\n const lastWidthRef = useRef<number>(-1);\n\n const requestMeasure = useCallback((): void => {\n setVisibleCount(Number.POSITIVE_INFINITY);\n setMeasureNonce((n) => n + 1);\n }, []);\n\n // Pass two: the \"show all\" render has committed — measure the true wrap\n // point off the complete chip row and collapse to it. Runs once per request\n // (keyed on measureNonce); collapsing does not bump the nonce, so it settles.\n useIsomorphicLayoutEffect(() => {\n const el = triggerRef.current;\n if (!el) return;\n const chipEls = Array.from(\n el.querySelectorAll<HTMLElement>('[data-ui-chip=\"true\"]'),\n );\n if (chipEls.length === 0) {\n setVisibleCount(Number.POSITIVE_INFINITY);\n return;\n }\n const firstTop = chipEls[0].offsetTop;\n let firstRowCount = 0;\n for (const chip of chipEls) {\n if (chip.offsetTop === firstTop) firstRowCount++;\n else break;\n }\n setVisibleCount(\n firstRowCount === chipEls.length\n ? Number.POSITIVE_INFINITY\n : Math.max(1, firstRowCount - 1),\n );\n }, [measureNonce]);\n\n // Re-measure whenever the selected set or the size variant changes.\n useIsomorphicLayoutEffect(() => {\n requestMeasure();\n }, [currentValue.length, size, requestMeasure]);\n\n // Re-measure on a real width change only. Collapsing shrinks the trigger's\n // height, not its width, so a width guard keeps that from re-triggering the\n // cycle — the ResizeObserver never chases its own output.\n useIsomorphicLayoutEffect(() => {\n const el = triggerRef.current;\n if (!el) return;\n const ro = new ResizeObserver((entries) => {\n const width = Math.round(\n entries[0]?.contentRect.width ?? el.clientWidth,\n );\n if (width === lastWidthRef.current) return;\n lastWidthRef.current = width;\n requestMeasure();\n });\n ro.observe(el);\n return () => ro.disconnect();\n }, [requestMeasure]);\n\n const chips = currentValue.map((val) => ({\n value: val,\n label: labelByValue.get(val) ?? val,\n }));\n\n const showAllChips =\n visibleCount === Number.POSITIVE_INFINITY || visibleCount >= chips.length;\n const visibleChips = showAllChips ? chips : chips.slice(0, visibleCount);\n const overflowChips = showAllChips ? [] : chips.slice(visibleCount);\n const overflowCount = overflowChips.length;\n\n const handleTriggerClick = (event: MouseEvent<HTMLDivElement>): void => {\n if (effectiveDisabled) return;\n // Ignore clicks on chips/buttons so they can manage their own focus.\n const target = event.target as HTMLElement;\n if (target.closest('[data-ui-chip=\"true\"]')) return;\n if (target.closest('[data-ui-chip-dismiss=\"true\"]')) return;\n setOpen(true);\n inputRef.current?.focus();\n };\n\n const handleOpenChange = (next: boolean): void => {\n if (effectiveDisabled) {\n setOpen(false);\n return;\n }\n setOpen(next);\n if (!next) {\n setQuery('');\n onComplete?.(currentValue);\n }\n };\n\n const hasActionRow = allowSelectAll || allowClear;\n\n const counterMessage = t('inputs.multiSelect.selected', {\n count: currentValue.length,\n defaultValue: `${currentValue.length} selected`,\n });\n\n /* cmdk writes `aria-labelledby` on the input after the props it is\n given, pointing at its own hidden `<label cmdk-label>` whose text is\n the Command root's `label`. So that label is the input's name: the\n host's `aria-label`, else the placeholder, so the input is never\n unnamed. The count of chosen options describes the input rather than\n naming it. */\n const accessibleName =\n (inFormField ? ctx.label || ariaLabel : ariaLabel) || resolvedPlaceholder;\n const inputDescribedBy = [counterId, describedBy].filter(Boolean).join(' ');\n\n /* Inside a FormField the name is the field's own `<label>`, read whole,\n as for every other control: its labelStart and labelEnd marks and\n \"(optional)\" join it, and the host's `aria-label` never overrides\n that visible text. cmdk's hidden label holds the label string only,\n so the input is pointed at the field's label instead. React leaves\n the attribute alone afterwards: cmdk's prop for it never changes. */\n const fieldLabelId = inFormField ? `${ctx.id}-label` : undefined;\n const cmdkLabelledBy = useRef<string | null>(null);\n useIsomorphicLayoutEffect(() => {\n const input = inputRef.current;\n if (!input) return;\n const current = input.getAttribute('aria-labelledby');\n if (fieldLabelId) {\n if (current === fieldLabelId) return;\n cmdkLabelledBy.current = current;\n input.setAttribute('aria-labelledby', fieldLabelId);\n } else if (cmdkLabelledBy.current !== null) {\n // Out of the field again: back to cmdk's own label.\n input.setAttribute('aria-labelledby', cmdkLabelledBy.current);\n cmdkLabelledBy.current = null;\n }\n });\n\n const { onClick: onClickProp, ...restDivProps } = divProps;\n\n return (\n <Command shouldFilter={false} label={accessibleName}>\n <Popover.Root open={open} onOpenChange={handleOpenChange}>\n <Popover.Anchor asChild>\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions -- compound input shell; keyboard handling lives on the inner searchable input which is always rendered */}\n <div\n ref={composedRef}\n className={multiSelectVariants({ size, className })}\n aria-disabled={effectiveDisabled || undefined}\n aria-invalid={effectiveInvalid || undefined}\n data-component=\"multi-select\"\n data-component-id={id}\n onClick={(event) => {\n onClickProp?.(event);\n handleTriggerClick(event);\n }}\n {...restDivProps}\n >\n {visibleChips.map((chip, idx) => (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions -- chip pill receives focus via roving tabindex; chip removal uses an inner button\n <span\n key={chip.value}\n ref={(el) => {\n chipRefs.current[idx] = el;\n }}\n tabIndex={effectiveDisabled ? -1 : 0}\n data-ui-chip=\"true\"\n className={chipVariants({ size })}\n onKeyDown={handleChipKeyDown(idx)}\n aria-label={chip.label}\n >\n <span>{chip.label}</span>\n <button\n type=\"button\"\n tabIndex={-1}\n data-ui-chip-dismiss=\"true\"\n aria-label={t('inputs.multiSelect.remove', {\n label: chip.label,\n defaultValue: `Remove ${chip.label}`,\n })}\n disabled={effectiveDisabled}\n onClick={(event) => {\n event.stopPropagation();\n removeAt(idx);\n requestAnimationFrame(() => inputRef.current?.focus());\n }}\n className={chipDismissClasses}\n >\n <X aria-hidden=\"true\" className=\"ds:size-3.5\" />\n </button>\n </span>\n ))}\n {overflowCount > 0 ? (\n <Tooltip\n label={overflowChips.map((c) => c.label).join(', ')}\n delayDuration={200}\n >\n <span\n className={chipVariants({ size })}\n tabIndex={0}\n role=\"button\"\n aria-label={t('inputs.multiSelect.overflow', {\n count: overflowCount,\n defaultValue: `+${overflowCount} more`,\n })}\n >\n <span>\n {t('inputs.multiSelect.overflow', {\n count: overflowCount,\n defaultValue: `+${overflowCount} more`,\n })}\n </span>\n </span>\n </Tooltip>\n ) : null}\n <Command.Input\n ref={inputRef}\n value={query}\n onValueChange={setQuery}\n onKeyDown={handleInputKeyDown}\n onFocus={() => {\n if (!effectiveDisabled) setOpen(true);\n }}\n placeholder={\n currentValue.length === 0 ? resolvedPlaceholder : ''\n }\n id={triggerId}\n // The name comes from the Command root's `label` above, or\n // from the FormField's label: cmdk writes `aria-labelledby`\n // after these props, and a layout effect above re-points it.\n aria-describedby={inputDescribedBy}\n aria-invalid={effectiveInvalid || undefined}\n aria-required={effectiveRequired || undefined}\n disabled={effectiveDisabled}\n className={[\n 'ds:flex-1 ds:min-w-[6rem] ds:bg-transparent ds:outline-none',\n 'ds:placeholder:text-muted-foreground ds:text-start',\n 'ds:disabled:cursor-not-allowed',\n ].join(' ')}\n />\n {/* Hidden: read only as the input's description, not as stray\n text on the page. */}\n <span id={counterId} hidden>\n {counterMessage}\n </span>\n </div>\n </Popover.Anchor>\n <Popover.Portal>\n {/* Portalled to <body>, so the list carries its own bounding\n marker: the kit's cascade reset — and a host's shield against\n its own bare-element CSS — scope to [data-component]. */}\n <Popover.Content\n data-component=\"multi-select-list\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={4}\n collisionPadding={8}\n className={popoverContentClasses}\n >\n <Command.List\n role=\"listbox\"\n aria-multiselectable=\"true\"\n aria-label={resolvedPlaceholder}\n className=\"ds:max-h-[20rem] ds:overflow-y-auto ds:p-1\"\n >\n {hasActionRow ? (\n <Command.Group>\n {allowSelectAll ? (\n <Command.Item\n value={SELECT_ALL_VALUE}\n onSelect={handleSelectAll}\n className={actionItemClasses}\n >\n {t('inputs.multiSelect.selectAll', 'Select all')}\n </Command.Item>\n ) : null}\n {allowClear ? (\n <Command.Item\n value={CLEAR_ALL_VALUE}\n onSelect={handleClearAll}\n className={actionItemClasses}\n >\n {t('inputs.multiSelect.clearAll', 'Clear all')}\n </Command.Item>\n ) : null}\n </Command.Group>\n ) : null}\n <Command.Empty className=\"ds:ps-2 ds:pe-2 ds:py-2 type-body-sm ds:text-muted-foreground\">\n {t('inputs.multiSelect.noOptions', 'No options found')}\n </Command.Empty>\n {groups.map(({ group, items }, gi) => {\n const body = items.map((option) => {\n const isSelected = currentValue.includes(option.value);\n const isCapped = !isSelected && atCap;\n const isDisabled = Boolean(option.disabled) || isCapped;\n const item = (\n <Command.Item\n key={option.value}\n value={option.value}\n // Agent DOM hook — see multi-select.agent.ts item.\n data-option-id={option.value}\n disabled={isDisabled}\n onSelect={() => {\n if (isDisabled) return;\n toggle(option.value);\n }}\n aria-selected={isSelected}\n aria-disabled={isDisabled || undefined}\n className={commandItemClasses}\n >\n <span\n // Off, the box is a state indicator, so its edge is\n // the 3:1 --control-border (WCAG 1.4.11), as on\n // Checkbox.\n className={[\n 'ds:inline-flex ds:items-center ds:justify-center ds:me-[var(--spacing-xs)] ds:shrink-0',\n 'ds:size-4 ds:rounded-[var(--radius-sm)] ds:border',\n isSelected\n ? 'ds:bg-primary ds:border-primary ds:text-primary-foreground'\n : 'ds:bg-background ds:border-[color:var(--control-border)]',\n ].join(' ')}\n aria-hidden=\"true\"\n >\n {isSelected ? (\n <Check className=\"ds:size-3.5\" />\n ) : null}\n </span>\n {option.startAdornment ? (\n // Decorative by contract — the accessible name comes\n // from the option label.\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:items-center ds:shrink-0 ds:me-[var(--spacing-xs)]\"\n >\n {option.startAdornment}\n </span>\n ) : null}\n {option.description || wrapOptionLabels ? (\n // Stacked, as in Combobox: the label and its end\n // content on one row, the description under them.\n // The option's name reads in that order.\n <span className={OPTION_BODY_CLASSES}>\n <span className={OPTION_LABEL_ROW_CLASSES}>\n <span\n className={optionLabelVariants({\n wrap: wrapOptionLabels,\n className: 'ds:flex-1 ds:text-start',\n })}\n >\n {option.label}\n </span>\n {option.endContent ? (\n // Announced, as below.\n <span className={OPTION_END_CLASSES}>\n {option.endContent}\n </span>\n ) : null}\n </span>\n {option.description ? (\n <span\n className={optionDescriptionVariants({\n tone: option.descriptionTone,\n className: 'ds:text-start',\n })}\n >\n {option.description}\n </span>\n ) : null}\n </span>\n ) : (\n <>\n {/* `min-w-0 truncate` matches Combobox and Select.\n Without it a long service name cannot be\n clipped, so it pushes the trailing content and\n overflows the row instead of the name\n ellipsing — the CJK and long-label case. */}\n <span className=\"ds:flex-1 ds:min-w-0 ds:truncate ds:text-start\">\n {option.label}\n </span>\n {option.endContent ? (\n // Deliberately NOT aria-hidden — unlike\n // `startAdornment`, this slot carries meaning\n // (a price, a count) and must reach the\n // option's accessible name. `ms-auto` pins it\n // to the inline-end and flips under RTL.\n <span className=\"ds:inline-flex ds:items-center ds:ms-auto ds:shrink-0 ds:ps-[var(--spacing-xs)]\">\n {option.endContent}\n </span>\n ) : null}\n </>\n )}\n </Command.Item>\n );\n if (isCapped) {\n return (\n <Tooltip\n key={option.value}\n label={t('inputs.multiSelect.maxReached', {\n count: maxSelections,\n defaultValue: `Maximum ${maxSelections} selections`,\n })}\n delayDuration={200}\n >\n {item}\n </Tooltip>\n );\n }\n return item;\n });\n if (!group) {\n return (\n <Command.Group key={`group-${gi}`}>{body}</Command.Group>\n );\n }\n return (\n <Command.Group\n key={`group-${group}`}\n heading={group}\n className=\"ds:[&_[cmdk-group-heading]]:ps-2 ds:[&_[cmdk-group-heading]]:pe-2 ds:[&_[cmdk-group-heading]]:py-1 ds:[&_[cmdk-group-heading]]:type-eyebrow ds:[&_[cmdk-group-heading]]:text-muted-foreground\"\n >\n {body}\n </Command.Group>\n );\n })}\n </Command.List>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </Command>\n );\n },\n);\nMultiSelectImpl.displayName = 'MultiSelect';\n\ninterface MultiSelectComponent {\n <T extends string = string>(\n props: MultiSelectProps<T> & { ref?: Ref<HTMLDivElement> },\n ): ReactElement | null;\n displayName?: string;\n}\n\nexport const MultiSelect = MultiSelectImpl as unknown as MultiSelectComponent;\n\nexport { multiSelectVariants };\n"],"names":["multiSelectAgent","handle","args","multiSelectVariants","cva","INPUT_SURFACE_CHROME","INPUT_SURFACE_TEXT","chipVariants","chipDismissClasses","popoverContentClasses","commandItemClasses","MENU_ROW_HIGHLIGHT","actionItemClasses","SELECT_ALL_VALUE","CLEAR_ALL_VALUE","MultiSelectImpl","forwardRef","options","value","defaultValue","onChange","onComplete","placeholder","maxSelections","allowSelectAll","allowClear","filter","size","disabled","wrapOptionLabels","className","id","ariaLabel","divProps","ref","t","useTranslation","ctx","useFormField","inFormField","useContext","FormFieldContext","currentValueRaw","setMultiSelectValue","useControllableState","currentValue","open","setOpen","useState","query","setQuery","inputRef","useRef","counterId","useId","chipRefs","triggerRef","composedRef","composeRefs","effectiveDisabled","effectiveRequired","effectiveInvalid","describedBy","triggerId","useFormFieldControlRef","labelByValue","useMemo","map","option","atCap","commit","next","toggle","val","v","removeAt","index","_","i","handleSelectAll","selectable","o","cap","handleClearAll","valueRef","useEffect","queryRef","openRef","commitStable","useCallback","agentHandle","values","useAgentRegistration","resolvedPlaceholder","filteredOptions","needle","groups","groupOptions","handleInputKeyDown","target","removedIndex","newLast","_a","caretAtStart","isRTL","lastIdx","handleChipKeyDown","e","focusIdx","prevKey","nextKey","newIdx","_b","_c","_d","visibleCount","setVisibleCount","measureNonce","setMeasureNonce","lastWidthRef","requestMeasure","n","useIsomorphicLayoutEffect","el","chipEls","firstTop","firstRowCount","chip","ro","entries","width","chips","showAllChips","visibleChips","overflowChips","overflowCount","handleTriggerClick","event","handleOpenChange","hasActionRow","counterMessage","accessibleName","inputDescribedBy","fieldLabelId","cmdkLabelledBy","input","current","onClickProp","restDivProps","jsx","Command","jsxs","Popover","idx","X","Tooltip","c","group","items","gi","body","isSelected","isCapped","isDisabled","item","Check","OPTION_BODY_CLASSES","OPTION_LABEL_ROW_CLASSES","optionLabelVariants","OPTION_END_CLASSES","optionDescriptionVariants","Fragment","MultiSelect"],"mappings":"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"}
1
+ {"version":3,"file":"multi-select-CMaAQQgb.js","sources":["../../src/components/multi-select/multi-select.agent.ts","../../src/components/multi-select/multi-select.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { MultiSelectHandle } from './multi-select';\n\nexport const multiSelectAgent: AgentAdapter<MultiSelectHandle> = {\n id: 'multi-select',\n // Persisted multi-choice (selection state + set_selection) → select_multiple,\n // plus type-to-filter and open/close of the option list.\n capabilities: ['select_multiple', 'filter', 'open', 'close'],\n state: {\n selection: {\n type: 'string[]',\n descriptionKey: 'ui.agent.multiSelect.state.selection',\n description: 'Values of currently-selected options.',\n read: (handle) => handle.getSelection(),\n },\n query: {\n type: 'string',\n descriptionKey: 'ui.agent.multiSelect.state.query',\n description: 'Current filter query.',\n read: (handle) => handle.getQuery(),\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.multiSelect.state.isOpen',\n description: 'True when the option list is visible.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n set_selection: {\n // Persists the user's chosen options — reversible via the same UI.\n safety: 'write',\n argsType: '{ values: string[] }',\n argsSchema: {\n type: 'object',\n properties: {\n values: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Option values to select (replaces the current selection).',\n },\n },\n required: ['values'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.setSelection',\n description:\n 'Replace the current selection with the given list of values.',\n examples: [\n {\n args: { values: ['a', 'b'] },\n note: 'Select exactly options \"a\" and \"b\".',\n },\n ],\n invoke: (handle, args: { values: string[] }) => {\n handle.setSelection(args.values);\n },\n },\n clear_selection: {\n // Discards the persisted selection — destructive (loses the choices).\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.clearSelection',\n description: 'Clear the current selection.',\n invoke: (handle) => {\n handle.clearSelection();\n },\n },\n apply_filter: {\n // Pure ephemeral filter of the visible options — 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 list.' },\n },\n required: ['query'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.applyFilter',\n description: 'Set the filter query for the option list.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.open',\n description: 'Open the option list.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.close',\n description: 'Close the option list.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'multi-select' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description: 'Each option emits its value as data-option-id.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type Ref,\n} from 'react';\nimport * as Popover from '@radix-ui/react-popover';\nimport { Command } from 'cmdk';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Check, X } from 'lucide-react';\nimport {\n FormFieldContext,\n useFormField,\n useFormFieldControlRef,\n} from '../form-field/form-field-context';\nimport { Tooltip } from '../tooltip';\nimport type { OptionShape } from '../_shared/option';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { groupOptions } from '../_shared/group-options';\nimport { MENU_ROW_HIGHLIGHT } from '../_shared/menu-row';\nimport {\n OPTION_BODY_CLASSES,\n OPTION_END_CLASSES,\n OPTION_LABEL_ROW_CLASSES,\n optionDescriptionVariants,\n optionLabelVariants,\n} from '../_shared/option-row';\nimport {\n INPUT_SURFACE_CHROME,\n INPUT_SURFACE_TEXT,\n} from '../_shared/input-surface';\nimport { useAgentRegistration } from '../../agent';\nimport { multiSelectAgent } from './multi-select.agent';\n\n// MultiSelect uses `min-h-*` (not `h-*`) because the wrapper grows vertically\n// as chips wrap to additional lines. The height floor per size mirrors the\n// other inputs' fixed heights in _shared/input-surface.ts.\nconst multiSelectVariants = cva(\n [\n 'ds:inline-flex ds:flex-wrap ds:items-center ds:gap-1 ds:w-full',\n INPUT_SURFACE_CHROME,\n 'ds:aria-[invalid=true]:border-destructive',\n 'ds:aria-disabled:cursor-not-allowed ds:aria-disabled:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: `ds:min-h-8 ds:ps-2 ds:pe-2 ds:py-1 ${INPUT_SURFACE_TEXT.sm}`,\n md: `ds:min-h-[var(--min-target-size)] ds:ps-3 ds:pe-3 ds:py-1.5 ${INPUT_SURFACE_TEXT.md}`,\n lg: `ds:min-h-12 ds:ps-4 ds:pe-4 ds:py-2 ${INPUT_SURFACE_TEXT.lg}`,\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst chipVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-1',\n 'ds:rounded-[var(--radius-sm)] ds:border ds:border-border ds:bg-muted',\n 'ds:text-foreground ds:select-none',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ],\n {\n variants: {\n size: {\n sm: 'ds:ps-2 ds:pe-1 ds:py-0.5 ds:text-[length:var(--font-size-xs)]',\n md: 'ds:ps-2 ds:pe-1 ds:py-0.5 ds:text-[length:var(--font-size-sm)]',\n lg: 'ds:ps-3 ds:pe-1.5 ds:py-1 ds:text-[length:var(--font-size-base)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst chipDismissClasses = [\n 'ds:inline-flex ds:items-center ds:justify-center ds:shrink-0',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:text-muted-foreground ds:hover:text-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:size-4',\n 'ds:relative ds:before:absolute ds:before:inset-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"]',\n].join(' ');\n\nconst popoverContentClasses = [\n 'ds:z-[var(--z-dropdown)] ds:overflow-hidden',\n // At least as wide as the field, at most as wide as the screen allows: a\n // long option wraps or ends in an ellipsis instead of running off the\n // edge. The floor gives way to the cap on a field wider than that.\n 'ds:min-w-[min(var(--radix-popover-trigger-width),var(--radix-popover-content-available-width))]',\n 'ds:max-w-[var(--radix-popover-content-available-width)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-background ds:text-foreground',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:animate-in ds:fade-in ds:zoom-in-95',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out',\n 'ds:data-[state=closed]:zoom-out-95',\n 'ds:data-[side=bottom]:slide-in-from-top-2',\n 'ds:data-[side=top]:slide-in-from-bottom-2',\n 'ds:motion-reduce:animate-none',\n].join(' ');\n\nconst commandItemClasses = [\n 'ds:relative ds:flex ds:cursor-pointer ds:items-center',\n 'ds:rounded-[var(--radius-sm)] ds:ps-2 ds:pe-2 ds:py-1.5',\n 'ds:text-[var(--font-size-sm)] ds:text-foreground ds:outline-none ds:select-none',\n MENU_ROW_HIGHLIGHT.selected,\n 'ds:aria-[disabled=true]:pointer-events-none ds:aria-[disabled=true]:opacity-50',\n 'ds:data-[disabled=true]:pointer-events-none ds:data-[disabled=true]:opacity-50',\n].join(' ');\n\nconst actionItemClasses = [\n 'ds:relative ds:flex ds:cursor-pointer ds:items-center',\n 'ds:rounded-[var(--radius-sm)] ds:ps-2 ds:pe-2 ds:py-1.5',\n 'ds:text-[var(--font-size-sm)] ds:font-medium ds:text-primary ds:outline-none ds:select-none',\n MENU_ROW_HIGHLIGHT.selected,\n].join(' ');\n\nconst SELECT_ALL_VALUE = '__ui-multiselect-select-all__';\nconst CLEAR_ALL_VALUE = '__ui-multiselect-clear-all__';\n\ntype HTMLDivAttributes = HTMLAttributes<HTMLDivElement>;\n\n// Curated agent-readiness handle — see multi-select.agent.ts.\nexport interface MultiSelectHandle {\n getSelection: () => string[];\n getQuery: () => string;\n getIsOpen: () => boolean;\n setSelection: (values: string[]) => void;\n clearSelection: () => void;\n setQuery: (query: string) => void;\n open: () => void;\n close: () => void;\n}\n\nexport interface MultiSelectProps<T extends string = string>\n extends\n Omit<HTMLDivAttributes, 'onChange'>,\n VariantProps<typeof multiSelectVariants> {\n options: OptionShape<T>[];\n value?: T[];\n defaultValue?: T[];\n onChange?: (next: T[]) => void;\n onComplete?: (values: T[]) => void;\n placeholder?: string;\n maxSelections?: number;\n allowSelectAll?: boolean;\n allowClear?: boolean;\n filter?: (query: string, option: OptionShape<T>) => boolean;\n size?: 'sm' | 'md' | 'lg';\n disabled?: boolean;\n /**\n * Let a long option label wrap onto a second line instead of ending in an\n * ellipsis. Longer still, it is clipped after two lines. Off by default.\n * An option's `description` always sits on its own line under the label.\n */\n wrapOptionLabels?: boolean;\n}\n\nconst MultiSelectImpl = forwardRef<HTMLDivElement, MultiSelectProps>(\n function MultiSelect(\n {\n options,\n value,\n defaultValue,\n onChange,\n onComplete,\n placeholder,\n maxSelections,\n allowSelectAll = false,\n allowClear = false,\n filter,\n size = 'md',\n disabled,\n wrapOptionLabels = false,\n className,\n id,\n // Pull `aria-label` out of the div spread so it names the combobox\n // INPUT (the interactive control) rather than the wrapper div. Lets a\n // consumer give the trigger a meaningful name when there's no visible\n // label or FormField (e.g. a data-table floating filter naming itself\n // after its column). Untouched callers fall back to the placeholder.\n // Inside a FormField the field's label names the input and this is\n // ignored, so it can never override the visible text (WCAG 2.5.3).\n 'aria-label': ariaLabel,\n ...divProps\n },\n ref,\n ) {\n const { t } = useTranslation('ui');\n const ctx = useFormField();\n const inFormField = useContext(FormFieldContext) !== null;\n\n const [currentValueRaw, setMultiSelectValue] = useControllableState<\n string[]\n >({\n value,\n defaultValue: defaultValue ?? [],\n onChange,\n });\n const currentValue = currentValueRaw ?? [];\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n\n const inputRef = useRef<HTMLInputElement>(null);\n const counterId = `${useId()}-count`;\n const chipRefs = useRef<Array<HTMLSpanElement | null>>([]);\n const triggerRef = useRef<HTMLDivElement>(null);\n const composedRef = composeRefs<HTMLDivElement>(ref, triggerRef);\n\n const effectiveDisabled =\n (inFormField && ctx.disabled) || Boolean(disabled);\n const effectiveRequired = inFormField && ctx.required;\n const effectiveInvalid = inFormField && ctx.invalid;\n const describedBy =\n inFormField && ctx.describedBy ? ctx.describedBy : undefined;\n const triggerId = id ?? (inFormField ? ctx.id : undefined);\n /* cmdk writes its own id on the input, so the field's label follows\n that one. */\n useFormFieldControlRef(ctx, inputRef);\n\n const labelByValue = useMemo(() => {\n const map = new Map<string, string>();\n for (const option of options) map.set(option.value, option.label);\n return map;\n }, [options]);\n\n const atCap =\n typeof maxSelections === 'number' && currentValue.length >= maxSelections;\n\n const commit = (next: string[]): void => {\n setMultiSelectValue(next);\n };\n\n const toggle = (val: string): void => {\n if (currentValue.includes(val)) {\n commit(currentValue.filter((v) => v !== val));\n return;\n }\n if (atCap) return;\n commit([...currentValue, val]);\n };\n\n const removeAt = (index: number): string[] => {\n const next = currentValue.filter((_, i) => i !== index);\n commit(next);\n return next;\n };\n\n const handleSelectAll = (): void => {\n const selectable = options.filter((o) => !o.disabled).map((o) => o.value);\n const cap =\n typeof maxSelections === 'number' ? maxSelections : selectable.length;\n commit(selectable.slice(0, cap));\n };\n\n const handleClearAll = (): void => {\n commit([]);\n };\n\n // Agent handle — refs for fresh reads from the memoized handle.\n const valueRef = useRef<string[]>(currentValue);\n useEffect(() => {\n valueRef.current = currentValue;\n }, [currentValue]);\n const queryRef = useRef<string>(query);\n useEffect(() => {\n queryRef.current = query;\n }, [query]);\n const openRef = useRef<boolean>(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n\n const commitStable = useCallback(\n (next: string[]) => {\n setMultiSelectValue(next);\n },\n [setMultiSelectValue],\n );\n\n const agentHandle = useMemo<MultiSelectHandle>(\n () => ({\n getSelection: () => [...valueRef.current],\n getQuery: () => queryRef.current,\n getIsOpen: () => openRef.current,\n setSelection: (values) => commitStable(values),\n clearSelection: () => commitStable([]),\n setQuery: (next) => setQuery(next),\n open: () => setOpen(true),\n close: () => setOpen(false),\n }),\n [commitStable],\n );\n useAgentRegistration(multiSelectAgent, agentHandle, id);\n\n const resolvedPlaceholder =\n placeholder ?? t('inputs.multiSelect.placeholder', 'Select…');\n\n const filteredOptions = useMemo(() => {\n if (!query) return options;\n const needle = query.toLowerCase();\n return options.filter((option) => {\n if (filter) return filter(query, option);\n return option.label.toLowerCase().includes(needle);\n });\n }, [options, query, filter]);\n\n const groups = useMemo(\n () => groupOptions(filteredOptions),\n [filteredOptions],\n );\n\n const handleInputKeyDown = (e: KeyboardEvent<HTMLInputElement>): void => {\n const target = e.currentTarget;\n if (e.key === 'Backspace' && query === '' && currentValue.length > 0) {\n e.preventDefault();\n const removedIndex = currentValue.length - 1;\n const next = removeAt(removedIndex);\n const newLast = next.length - 1;\n if (newLast >= 0) {\n requestAnimationFrame(() => {\n chipRefs.current[newLast]?.focus();\n });\n }\n return;\n }\n const caretAtStart =\n target.selectionStart === 0 && target.selectionEnd === 0;\n if (\n (e.key === 'ArrowLeft' || e.key === 'ArrowRight') &&\n caretAtStart &&\n currentValue.length > 0\n ) {\n const isRTL = document.dir === 'rtl' || target.dir === 'rtl';\n const shouldNavigate =\n (isRTL && e.key === 'ArrowRight') ||\n (!isRTL && e.key === 'ArrowLeft');\n if (shouldNavigate) {\n e.preventDefault();\n const lastIdx = currentValue.length - 1;\n chipRefs.current[lastIdx]?.focus();\n }\n return;\n }\n if (e.key === 'Escape') {\n setOpen(false);\n return;\n }\n if (!open && (e.key === 'ArrowDown' || e.key === 'Enter')) {\n setOpen(true);\n }\n };\n\n const handleChipKeyDown =\n (index: number) =>\n (e: KeyboardEvent<HTMLSpanElement>): void => {\n if (\n e.key === 'Backspace' ||\n e.key === 'Delete' ||\n e.key === 'Enter' ||\n e.key === ' '\n ) {\n e.preventDefault();\n e.stopPropagation();\n const next = removeAt(index);\n if (next.length === 0) {\n requestAnimationFrame(() => inputRef.current?.focus());\n return;\n }\n const focusIdx = Math.min(index, next.length - 1);\n requestAnimationFrame(() => {\n chipRefs.current[focusIdx]?.focus();\n });\n return;\n }\n const isRTL = document.dir === 'rtl';\n const prevKey = isRTL ? 'ArrowRight' : 'ArrowLeft';\n const nextKey = isRTL ? 'ArrowLeft' : 'ArrowRight';\n if (e.key === prevKey) {\n e.preventDefault();\n const newIdx = Math.max(0, index - 1);\n chipRefs.current[newIdx]?.focus();\n return;\n }\n if (e.key === nextKey) {\n e.preventDefault();\n if (index < currentValue.length - 1) {\n chipRefs.current[index + 1]?.focus();\n } else {\n inputRef.current?.focus();\n }\n return;\n }\n if (e.key === 'Escape') {\n setOpen(false);\n inputRef.current?.focus();\n }\n };\n\n // ----- Chip overflow measurement -----\n // The measurement must read the FULL chip row, never the collapsed one.\n // Counting only the rendered (collapsed) chips is self-referential: hiding\n // the overflow behind \"+N more\" leaves a subset that trivially fits row 1,\n // the next measure concludes \"everything fits\", it expands, re-wraps, and\n // the ResizeObserver oscillates every frame (the visible flicker).\n //\n // Instead we run a two-pass cycle driven by `measureNonce`: a request first\n // renders every chip (visibleCount → ∞), then the layout effect measures\n // that complete row and sets the collapsed count. Both passes are layout\n // effects, so React flushes them before paint — the browser only ever shows\n // the settled, single-line result, with no full-row flash.\n const [visibleCount, setVisibleCount] = useState<number>(\n Number.POSITIVE_INFINITY,\n );\n const [measureNonce, setMeasureNonce] = useState<number>(0);\n const lastWidthRef = useRef<number>(-1);\n\n const requestMeasure = useCallback((): void => {\n setVisibleCount(Number.POSITIVE_INFINITY);\n setMeasureNonce((n) => n + 1);\n }, []);\n\n // Pass two: the \"show all\" render has committed — measure the true wrap\n // point off the complete chip row and collapse to it. Runs once per request\n // (keyed on measureNonce); collapsing does not bump the nonce, so it settles.\n useIsomorphicLayoutEffect(() => {\n const el = triggerRef.current;\n if (!el) return;\n const chipEls = Array.from(\n el.querySelectorAll<HTMLElement>('[data-ui-chip=\"true\"]'),\n );\n if (chipEls.length === 0) {\n setVisibleCount(Number.POSITIVE_INFINITY);\n return;\n }\n const firstTop = chipEls[0].offsetTop;\n let firstRowCount = 0;\n for (const chip of chipEls) {\n if (chip.offsetTop === firstTop) firstRowCount++;\n else break;\n }\n setVisibleCount(\n firstRowCount === chipEls.length\n ? Number.POSITIVE_INFINITY\n : Math.max(1, firstRowCount - 1),\n );\n }, [measureNonce]);\n\n // Re-measure whenever the selected set or the size variant changes.\n useIsomorphicLayoutEffect(() => {\n requestMeasure();\n }, [currentValue.length, size, requestMeasure]);\n\n // Re-measure on a real width change only. Collapsing shrinks the trigger's\n // height, not its width, so a width guard keeps that from re-triggering the\n // cycle — the ResizeObserver never chases its own output.\n useIsomorphicLayoutEffect(() => {\n const el = triggerRef.current;\n if (!el) return;\n const ro = new ResizeObserver((entries) => {\n const width = Math.round(\n entries[0]?.contentRect.width ?? el.clientWidth,\n );\n if (width === lastWidthRef.current) return;\n lastWidthRef.current = width;\n requestMeasure();\n });\n ro.observe(el);\n return () => ro.disconnect();\n }, [requestMeasure]);\n\n const chips = currentValue.map((val) => ({\n value: val,\n label: labelByValue.get(val) ?? val,\n }));\n\n const showAllChips =\n visibleCount === Number.POSITIVE_INFINITY || visibleCount >= chips.length;\n const visibleChips = showAllChips ? chips : chips.slice(0, visibleCount);\n const overflowChips = showAllChips ? [] : chips.slice(visibleCount);\n const overflowCount = overflowChips.length;\n\n const handleTriggerClick = (event: MouseEvent<HTMLDivElement>): void => {\n if (effectiveDisabled) return;\n // Ignore clicks on chips/buttons so they can manage their own focus.\n const target = event.target as HTMLElement;\n if (target.closest('[data-ui-chip=\"true\"]')) return;\n if (target.closest('[data-ui-chip-dismiss=\"true\"]')) return;\n setOpen(true);\n inputRef.current?.focus();\n };\n\n const handleOpenChange = (next: boolean): void => {\n if (effectiveDisabled) {\n setOpen(false);\n return;\n }\n setOpen(next);\n if (!next) {\n setQuery('');\n onComplete?.(currentValue);\n }\n };\n\n const hasActionRow = allowSelectAll || allowClear;\n\n const counterMessage = t('inputs.multiSelect.selected', {\n count: currentValue.length,\n defaultValue: `${currentValue.length} selected`,\n });\n\n /* cmdk writes `aria-labelledby` on the input after the props it is\n given, pointing at its own hidden `<label cmdk-label>` whose text is\n the Command root's `label`. So that label is the input's name: the\n host's `aria-label`, else the placeholder, so the input is never\n unnamed. The count of chosen options describes the input rather than\n naming it. */\n const accessibleName =\n (inFormField ? ctx.label || ariaLabel : ariaLabel) || resolvedPlaceholder;\n const inputDescribedBy = [counterId, describedBy].filter(Boolean).join(' ');\n\n /* Inside a FormField the name is the field's own `<label>`, read whole,\n as for every other control: its labelStart and labelEnd marks and\n \"(optional)\" join it, and the host's `aria-label` never overrides\n that visible text. cmdk's hidden label holds the label string only,\n so the input is pointed at the field's label instead. React leaves\n the attribute alone afterwards: cmdk's prop for it never changes. */\n const fieldLabelId = inFormField ? `${ctx.id}-label` : undefined;\n const cmdkLabelledBy = useRef<string | null>(null);\n useIsomorphicLayoutEffect(() => {\n const input = inputRef.current;\n if (!input) return;\n const current = input.getAttribute('aria-labelledby');\n if (fieldLabelId) {\n if (current === fieldLabelId) return;\n cmdkLabelledBy.current = current;\n input.setAttribute('aria-labelledby', fieldLabelId);\n } else if (cmdkLabelledBy.current !== null) {\n // Out of the field again: back to cmdk's own label.\n input.setAttribute('aria-labelledby', cmdkLabelledBy.current);\n cmdkLabelledBy.current = null;\n }\n });\n\n const { onClick: onClickProp, ...restDivProps } = divProps;\n\n return (\n <Command shouldFilter={false} label={accessibleName}>\n <Popover.Root open={open} onOpenChange={handleOpenChange}>\n <Popover.Anchor asChild>\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions -- compound input shell; keyboard handling lives on the inner searchable input which is always rendered */}\n <div\n ref={composedRef}\n className={multiSelectVariants({ size, className })}\n aria-disabled={effectiveDisabled || undefined}\n aria-invalid={effectiveInvalid || undefined}\n data-component=\"multi-select\"\n data-component-id={id}\n onClick={(event) => {\n onClickProp?.(event);\n handleTriggerClick(event);\n }}\n {...restDivProps}\n >\n {visibleChips.map((chip, idx) => (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions -- chip pill receives focus via roving tabindex; chip removal uses an inner button\n <span\n key={chip.value}\n ref={(el) => {\n chipRefs.current[idx] = el;\n }}\n tabIndex={effectiveDisabled ? -1 : 0}\n data-ui-chip=\"true\"\n className={chipVariants({ size })}\n onKeyDown={handleChipKeyDown(idx)}\n aria-label={chip.label}\n >\n <span>{chip.label}</span>\n <button\n type=\"button\"\n tabIndex={-1}\n data-ui-chip-dismiss=\"true\"\n aria-label={t('inputs.multiSelect.remove', {\n label: chip.label,\n defaultValue: `Remove ${chip.label}`,\n })}\n disabled={effectiveDisabled}\n onClick={(event) => {\n event.stopPropagation();\n removeAt(idx);\n requestAnimationFrame(() => inputRef.current?.focus());\n }}\n className={chipDismissClasses}\n >\n <X aria-hidden=\"true\" className=\"ds:size-3.5\" />\n </button>\n </span>\n ))}\n {overflowCount > 0 ? (\n <Tooltip\n label={overflowChips.map((c) => c.label).join(', ')}\n delayDuration={200}\n >\n <span\n className={chipVariants({ size })}\n tabIndex={0}\n role=\"button\"\n aria-label={t('inputs.multiSelect.overflow', {\n count: overflowCount,\n defaultValue: `+${overflowCount} more`,\n })}\n >\n <span>\n {t('inputs.multiSelect.overflow', {\n count: overflowCount,\n defaultValue: `+${overflowCount} more`,\n })}\n </span>\n </span>\n </Tooltip>\n ) : null}\n <Command.Input\n ref={inputRef}\n value={query}\n onValueChange={setQuery}\n onKeyDown={handleInputKeyDown}\n onFocus={() => {\n if (!effectiveDisabled) setOpen(true);\n }}\n placeholder={\n currentValue.length === 0 ? resolvedPlaceholder : ''\n }\n id={triggerId}\n // The name comes from the Command root's `label` above, or\n // from the FormField's label: cmdk writes `aria-labelledby`\n // after these props, and a layout effect above re-points it.\n aria-describedby={inputDescribedBy}\n aria-invalid={effectiveInvalid || undefined}\n aria-required={effectiveRequired || undefined}\n disabled={effectiveDisabled}\n className={[\n 'ds:flex-1 ds:min-w-[6rem] ds:bg-transparent ds:outline-none',\n 'ds:placeholder:text-muted-foreground ds:text-start',\n 'ds:disabled:cursor-not-allowed',\n ].join(' ')}\n />\n {/* Hidden: read only as the input's description, not as stray\n text on the page. */}\n <span id={counterId} hidden>\n {counterMessage}\n </span>\n </div>\n </Popover.Anchor>\n <Popover.Portal>\n {/* Portalled to <body>, so the list carries its own bounding\n marker: the kit's cascade reset — and a host's shield against\n its own bare-element CSS — scope to [data-component]. */}\n <Popover.Content\n data-component=\"multi-select-list\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={4}\n collisionPadding={8}\n className={popoverContentClasses}\n >\n <Command.List\n role=\"listbox\"\n aria-multiselectable=\"true\"\n aria-label={resolvedPlaceholder}\n className=\"ds:max-h-[20rem] ds:overflow-y-auto ds:p-1\"\n >\n {hasActionRow ? (\n <Command.Group>\n {allowSelectAll ? (\n <Command.Item\n value={SELECT_ALL_VALUE}\n onSelect={handleSelectAll}\n className={actionItemClasses}\n >\n {t('inputs.multiSelect.selectAll', 'Select all')}\n </Command.Item>\n ) : null}\n {allowClear ? (\n <Command.Item\n value={CLEAR_ALL_VALUE}\n onSelect={handleClearAll}\n className={actionItemClasses}\n >\n {t('inputs.multiSelect.clearAll', 'Clear all')}\n </Command.Item>\n ) : null}\n </Command.Group>\n ) : null}\n <Command.Empty className=\"ds:ps-2 ds:pe-2 ds:py-2 type-body-sm ds:text-muted-foreground\">\n {t('inputs.multiSelect.noOptions', 'No options found')}\n </Command.Empty>\n {groups.map(({ group, items }, gi) => {\n const body = items.map((option) => {\n const isSelected = currentValue.includes(option.value);\n const isCapped = !isSelected && atCap;\n const isDisabled = Boolean(option.disabled) || isCapped;\n const item = (\n <Command.Item\n key={option.value}\n value={option.value}\n // Agent DOM hook — see multi-select.agent.ts item.\n data-option-id={option.value}\n disabled={isDisabled}\n onSelect={() => {\n if (isDisabled) return;\n toggle(option.value);\n }}\n aria-selected={isSelected}\n aria-disabled={isDisabled || undefined}\n className={commandItemClasses}\n >\n <span\n // Off, the box is a state indicator, so its edge is\n // the 3:1 --control-border (WCAG 1.4.11), as on\n // Checkbox.\n className={[\n 'ds:inline-flex ds:items-center ds:justify-center ds:me-[var(--spacing-xs)] ds:shrink-0',\n 'ds:size-4 ds:rounded-[var(--radius-sm)] ds:border',\n isSelected\n ? 'ds:bg-primary ds:border-primary ds:text-primary-foreground'\n : 'ds:bg-background ds:border-[color:var(--control-border)]',\n ].join(' ')}\n aria-hidden=\"true\"\n >\n {isSelected ? (\n <Check className=\"ds:size-3.5\" />\n ) : null}\n </span>\n {option.startAdornment ? (\n // Decorative by contract — the accessible name comes\n // from the option label.\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:items-center ds:shrink-0 ds:me-[var(--spacing-xs)]\"\n >\n {option.startAdornment}\n </span>\n ) : null}\n {option.description || wrapOptionLabels ? (\n // Stacked, as in Combobox: the label and its end\n // content on one row, the description under them.\n // The option's name reads in that order.\n <span className={OPTION_BODY_CLASSES}>\n <span className={OPTION_LABEL_ROW_CLASSES}>\n <span\n className={optionLabelVariants({\n wrap: wrapOptionLabels,\n className: 'ds:flex-1 ds:text-start',\n })}\n >\n {option.label}\n </span>\n {option.endContent ? (\n // Announced, as below.\n <span className={OPTION_END_CLASSES}>\n {option.endContent}\n </span>\n ) : null}\n </span>\n {option.description ? (\n <span\n className={optionDescriptionVariants({\n tone: option.descriptionTone,\n className: 'ds:text-start',\n })}\n >\n {option.description}\n </span>\n ) : null}\n </span>\n ) : (\n <>\n {/* `min-w-0 truncate` matches Combobox and Select.\n Without it a long service name cannot be\n clipped, so it pushes the trailing content and\n overflows the row instead of the name\n ellipsing — the CJK and long-label case. */}\n <span className=\"ds:flex-1 ds:min-w-0 ds:truncate ds:text-start\">\n {option.label}\n </span>\n {option.endContent ? (\n // Deliberately NOT aria-hidden — unlike\n // `startAdornment`, this slot carries meaning\n // (a price, a count) and must reach the\n // option's accessible name. `ms-auto` pins it\n // to the inline-end and flips under RTL.\n <span className=\"ds:inline-flex ds:items-center ds:ms-auto ds:shrink-0 ds:ps-[var(--spacing-xs)]\">\n {option.endContent}\n </span>\n ) : null}\n </>\n )}\n </Command.Item>\n );\n if (isCapped) {\n return (\n <Tooltip\n key={option.value}\n label={t('inputs.multiSelect.maxReached', {\n count: maxSelections,\n defaultValue: `Maximum ${maxSelections} selections`,\n })}\n delayDuration={200}\n >\n {item}\n </Tooltip>\n );\n }\n return item;\n });\n if (!group) {\n return (\n <Command.Group key={`group-${gi}`}>{body}</Command.Group>\n );\n }\n return (\n <Command.Group\n key={`group-${group}`}\n heading={group}\n className=\"ds:[&_[cmdk-group-heading]]:ps-2 ds:[&_[cmdk-group-heading]]:pe-2 ds:[&_[cmdk-group-heading]]:py-1 ds:[&_[cmdk-group-heading]]:type-eyebrow ds:[&_[cmdk-group-heading]]:text-muted-foreground\"\n >\n {body}\n </Command.Group>\n );\n })}\n </Command.List>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </Command>\n );\n },\n);\nMultiSelectImpl.displayName = 'MultiSelect';\n\ninterface MultiSelectComponent {\n <T extends string = string>(\n props: MultiSelectProps<T> & { ref?: Ref<HTMLDivElement> },\n ): ReactElement | null;\n displayName?: string;\n}\n\nexport const MultiSelect = MultiSelectImpl as unknown as MultiSelectComponent;\n\nexport { multiSelectVariants };\n"],"names":["multiSelectAgent","handle","args","multiSelectVariants","cva","INPUT_SURFACE_CHROME","INPUT_SURFACE_TEXT","chipVariants","chipDismissClasses","popoverContentClasses","commandItemClasses","MENU_ROW_HIGHLIGHT","actionItemClasses","SELECT_ALL_VALUE","CLEAR_ALL_VALUE","MultiSelectImpl","forwardRef","options","value","defaultValue","onChange","onComplete","placeholder","maxSelections","allowSelectAll","allowClear","filter","size","disabled","wrapOptionLabels","className","id","ariaLabel","divProps","ref","t","useTranslation","ctx","useFormField","inFormField","useContext","FormFieldContext","currentValueRaw","setMultiSelectValue","useControllableState","currentValue","open","setOpen","useState","query","setQuery","inputRef","useRef","counterId","useId","chipRefs","triggerRef","composedRef","composeRefs","effectiveDisabled","effectiveRequired","effectiveInvalid","describedBy","triggerId","useFormFieldControlRef","labelByValue","useMemo","map","option","atCap","commit","next","toggle","val","v","removeAt","index","_","i","handleSelectAll","selectable","o","cap","handleClearAll","valueRef","useEffect","queryRef","openRef","commitStable","useCallback","agentHandle","values","useAgentRegistration","resolvedPlaceholder","filteredOptions","needle","groups","groupOptions","handleInputKeyDown","target","removedIndex","newLast","_a","caretAtStart","isRTL","lastIdx","handleChipKeyDown","e","focusIdx","prevKey","nextKey","newIdx","_b","_c","_d","visibleCount","setVisibleCount","measureNonce","setMeasureNonce","lastWidthRef","requestMeasure","n","useIsomorphicLayoutEffect","el","chipEls","firstTop","firstRowCount","chip","ro","entries","width","chips","showAllChips","visibleChips","overflowChips","overflowCount","handleTriggerClick","event","handleOpenChange","hasActionRow","counterMessage","accessibleName","inputDescribedBy","fieldLabelId","cmdkLabelledBy","input","current","onClickProp","restDivProps","jsx","Command","jsxs","Popover","idx","X","Tooltip","c","group","items","gi","body","isSelected","isCapped","isDisabled","item","Check","OPTION_BODY_CLASSES","OPTION_LABEL_ROW_CLASSES","optionLabelVariants","OPTION_END_CLASSES","optionDescriptionVariants","Fragment","MultiSelect"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as s, jsxs as w, Fragment as x } from "react/jsx-runtime";
2
2
  import { forwardRef as N, useMemo as l } from "react";
3
3
  import { c as p } from "./index-D2ZczOXr.js";
4
- import { L as C } from "./link-gRw3NtOt.js";
4
+ import { L as C } from "./link-N5_YpLtm.js";
5
5
  import { u as G } from "./registry-DvAUVLHh.js";
6
6
  const I = {
7
7
  id: "nav-grid",
@@ -165,4 +165,4 @@ export {
165
165
  I as n,
166
166
  c as t
167
167
  };
168
- //# sourceMappingURL=nav-grid-Byx8PxuB.js.map
168
+ //# sourceMappingURL=nav-grid-Oc4aCPrg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nav-grid-Byx8PxuB.js","sources":["../../src/components/nav-grid/nav-grid.agent.ts","../../src/components/nav-grid/nav-grid.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — NavGrid. */\n/* */\n/* A responsive grid of navigable tiles (the composition primitive behind */\n/* a settings hub). It exposes the live tile count and lets an agent */\n/* activate a tile by id — which either follows the tile's href or fires */\n/* its select handler. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the full contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { NavGridHandle } from './nav-grid';\n\nexport const navGridAgent: AgentAdapter<NavGridHandle> = {\n id: 'nav-grid',\n capabilities: ['navigate'],\n state: {\n itemCount: {\n type: 'number',\n descriptionKey: 'ui.agent.navGrid.state.itemCount',\n description: 'Number of navigable tiles currently rendered in the grid.',\n read: (handle) => handle.getItemCount(),\n },\n },\n actions: {\n open_item: {\n safety: 'write',\n openWorld: false,\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description:\n 'Stable opaque tile id (emitted as data-nav-item-id on each tile).',\n },\n },\n required: ['id'],\n },\n descriptionKey: 'ui.agent.navGrid.actions.openItem',\n description:\n 'Activate the tile with the given id (navigates or fires its select handler).',\n examples: [\n {\n args: { id: 'billing' },\n note: 'Open the \"billing\" settings section.',\n },\n ],\n invoke: (handle, args: { id: string }) => {\n handle.openItem(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'nav-grid',\n description: 'Marks the NavGrid nav landmark.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific grid from the agent.',\n },\n item: {\n attr: 'data-nav-item-id',\n sourceProp: 'item id',\n description:\n 'Stable opaque id of a tile, sourced from each item.id. open_item targets this attribute.',\n },\n },\n};\n","import { forwardRef, useMemo, type ReactNode } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { Link } from '../link/link';\nimport { useAgentRegistration } from '../../agent';\nimport { navGridAgent } from './nav-grid.agent';\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface NavGridItem {\n /** Stable, opaque id. Emitted as `data-nav-item-id`; agents target it. */\n id: string;\n /** Localised tile label — supplied by the consumer (never bundled here). */\n label: string;\n /** Optional localised supporting text shown under the label. */\n description?: string;\n /** Decorative leading glyph. Rendered `aria-hidden`. */\n icon?: ReactNode;\n /** When set, the tile is a navigating anchor (kit Link). */\n href?: string;\n /** When `href` is absent, the tile is a button firing this handler. */\n onSelect?: () => void;\n /** Render the tile non-interactive and visually muted. */\n disabled?: boolean;\n}\n\n/** Agent-readiness curated handle for NavGrid. */\nexport interface NavGridHandle {\n getItemCount: () => number;\n /** Activate the tile with the given id (navigate, or fire its onSelect). */\n openItem: (id: string) => void;\n}\n\nexport interface NavGridProps {\n /** Tiles to render. label / description / icon are consumer-supplied props. */\n items: NavGridItem[];\n /** REQUIRED — the nav landmark's accessible name (e.g. \"Settings sections\"). */\n ariaLabel: string;\n /** Column count. Omit for the responsive default (1 → 2 → 3 at sm / lg). */\n columns?: 1 | 2 | 3 | 4;\n /** `label` sorts tiles by `label.localeCompare`; `none` (default) preserves order. */\n sort?: 'label' | 'none';\n id?: string;\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst gridVariants = cva(\n 'ds:grid ds:list-none ds:m-0 ds:p-0 ds:gap-[var(--spacing-md)]',\n {\n variants: {\n columns: {\n // Responsive default: one column on mobile, two from sm, three from lg.\n responsive: 'ds:grid-cols-1 ds:sm:grid-cols-2 ds:lg:grid-cols-3',\n '1': 'ds:grid-cols-1',\n '2': 'ds:grid-cols-1 ds:sm:grid-cols-2',\n '3': 'ds:grid-cols-1 ds:sm:grid-cols-2 ds:lg:grid-cols-3',\n '4': 'ds:grid-cols-1 ds:sm:grid-cols-2 ds:lg:grid-cols-4',\n },\n },\n defaultVariants: { columns: 'responsive' },\n },\n);\n\n// Shared tile look applied to BOTH the Link (href) and the button (onSelect)\n// so the two render identically. Focus ring is included here so the native\n// button gets a visible ring too (Link also carries its own — same tokens).\nconst tileVariants = cva(\n [\n 'ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)] ds:text-start',\n 'ds:h-full ds:w-full ds:min-h-[var(--min-target-size)] ds:p-[var(--spacing-md)]',\n 'ds:rounded-[var(--radius-lg)] ds:[:where(&)]:border-[length:var(--surface-border-width,var(--border-width-sm))] ds:border-[color:var(--card-border)]',\n 'ds:bg-[var(--card)] ds:text-[var(--card-foreground)] ds:no-underline',\n 'ds:transition-shadow ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:outline-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n {\n variants: {\n disabled: {\n true: 'ds:opacity-50 ds:cursor-not-allowed ds:pointer-events-none',\n false: 'ds:cursor-pointer ds:hover:shadow-[var(--shadow-hover)]',\n },\n },\n defaultVariants: { disabled: false },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Tile content */\n/* ------------------------------------------------------------------ */\n\nfunction TileContent({ item }: { item: NavGridItem }) {\n return (\n <>\n {item.icon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:items-center ds:text-[var(--muted-foreground)] ds:[&_svg]:size-6\"\n >\n {item.icon}\n </span>\n ) : null}\n {/* `no-underline` on the span reliably suppresses the Link's underline\n across this text regardless of stylesheet order (own decoration box). */}\n <span className=\"type-body ds:font-medium ds:text-[var(--card-foreground)] ds:no-underline\">\n {item.label}\n </span>\n {item.description ? (\n <span className=\"type-body-sm ds:text-[var(--muted-foreground)] ds:no-underline\">\n {item.description}\n </span>\n ) : null}\n </>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const NavGrid = forwardRef<HTMLElement, NavGridProps>(function NavGrid(\n { items, ariaLabel, columns, sort = 'none', id, className },\n ref,\n) {\n // Locale-aware sort is the consumer's opt-in; otherwise render as given.\n const resolvedItems = useMemo(\n () =>\n sort === 'label'\n ? [...items].sort((a, b) => a.label.localeCompare(b.label))\n : items,\n [items, sort],\n );\n\n const handle = useMemo<NavGridHandle>(\n () => ({\n getItemCount: () => items.length,\n openItem: (itemId) => {\n const target = items.find((it) => it.id === itemId);\n if (!target || target.disabled) return;\n if (target.href) {\n if (typeof window !== 'undefined') window.location.href = target.href;\n } else {\n target.onSelect?.();\n }\n },\n }),\n [items],\n );\n useAgentRegistration(navGridAgent, handle, id);\n\n const columnKey =\n columns === undefined\n ? ('responsive' as const)\n : (String(columns) as '1' | '2' | '3' | '4');\n\n return (\n <nav\n ref={ref}\n id={id}\n aria-label={ariaLabel}\n data-component=\"nav-grid\"\n data-component-id={id}\n className={className}\n >\n <ul className={gridVariants({ columns: columnKey })}>\n {resolvedItems.map((item) => (\n <li key={item.id} data-nav-item-id={item.id}>\n {item.href !== undefined ? (\n <Link\n href={item.href}\n intent=\"subtle\"\n disabled={item.disabled}\n className={tileVariants({ disabled: Boolean(item.disabled) })}\n >\n <TileContent item={item} />\n </Link>\n ) : (\n <button\n type=\"button\"\n onClick={item.disabled ? undefined : item.onSelect}\n disabled={item.disabled}\n aria-disabled={item.disabled || undefined}\n className={tileVariants({ disabled: Boolean(item.disabled) })}\n >\n <TileContent item={item} />\n </button>\n )}\n </li>\n ))}\n </ul>\n </nav>\n );\n});\n\nNavGrid.displayName = 'NavGrid';\n\nexport { tileVariants as navGridTileVariants };\n"],"names":["navGridAgent","handle","args","gridVariants","cva","tileVariants","TileContent","item","jsxs","Fragment","jsx","NavGrid","forwardRef","items","ariaLabel","columns","sort","id","className","ref","resolvedItems","useMemo","a","b","itemId","target","it","_a","useAgentRegistration","columnKey","Link"],"mappings":"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"}
1
+ {"version":3,"file":"nav-grid-Oc4aCPrg.js","sources":["../../src/components/nav-grid/nav-grid.agent.ts","../../src/components/nav-grid/nav-grid.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — NavGrid. */\n/* */\n/* A responsive grid of navigable tiles (the composition primitive behind */\n/* a settings hub). It exposes the live tile count and lets an agent */\n/* activate a tile by id — which either follows the tile's href or fires */\n/* its select handler. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the full contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { NavGridHandle } from './nav-grid';\n\nexport const navGridAgent: AgentAdapter<NavGridHandle> = {\n id: 'nav-grid',\n capabilities: ['navigate'],\n state: {\n itemCount: {\n type: 'number',\n descriptionKey: 'ui.agent.navGrid.state.itemCount',\n description: 'Number of navigable tiles currently rendered in the grid.',\n read: (handle) => handle.getItemCount(),\n },\n },\n actions: {\n open_item: {\n safety: 'write',\n openWorld: false,\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description:\n 'Stable opaque tile id (emitted as data-nav-item-id on each tile).',\n },\n },\n required: ['id'],\n },\n descriptionKey: 'ui.agent.navGrid.actions.openItem',\n description:\n 'Activate the tile with the given id (navigates or fires its select handler).',\n examples: [\n {\n args: { id: 'billing' },\n note: 'Open the \"billing\" settings section.',\n },\n ],\n invoke: (handle, args: { id: string }) => {\n handle.openItem(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'nav-grid',\n description: 'Marks the NavGrid nav landmark.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific grid from the agent.',\n },\n item: {\n attr: 'data-nav-item-id',\n sourceProp: 'item id',\n description:\n 'Stable opaque id of a tile, sourced from each item.id. open_item targets this attribute.',\n },\n },\n};\n","import { forwardRef, useMemo, type ReactNode } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { Link } from '../link/link';\nimport { useAgentRegistration } from '../../agent';\nimport { navGridAgent } from './nav-grid.agent';\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface NavGridItem {\n /** Stable, opaque id. Emitted as `data-nav-item-id`; agents target it. */\n id: string;\n /** Localised tile label — supplied by the consumer (never bundled here). */\n label: string;\n /** Optional localised supporting text shown under the label. */\n description?: string;\n /** Decorative leading glyph. Rendered `aria-hidden`. */\n icon?: ReactNode;\n /** When set, the tile is a navigating anchor (kit Link). */\n href?: string;\n /** When `href` is absent, the tile is a button firing this handler. */\n onSelect?: () => void;\n /** Render the tile non-interactive and visually muted. */\n disabled?: boolean;\n}\n\n/** Agent-readiness curated handle for NavGrid. */\nexport interface NavGridHandle {\n getItemCount: () => number;\n /** Activate the tile with the given id (navigate, or fire its onSelect). */\n openItem: (id: string) => void;\n}\n\nexport interface NavGridProps {\n /** Tiles to render. label / description / icon are consumer-supplied props. */\n items: NavGridItem[];\n /** REQUIRED — the nav landmark's accessible name (e.g. \"Settings sections\"). */\n ariaLabel: string;\n /** Column count. Omit for the responsive default (1 → 2 → 3 at sm / lg). */\n columns?: 1 | 2 | 3 | 4;\n /** `label` sorts tiles by `label.localeCompare`; `none` (default) preserves order. */\n sort?: 'label' | 'none';\n id?: string;\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst gridVariants = cva(\n 'ds:grid ds:list-none ds:m-0 ds:p-0 ds:gap-[var(--spacing-md)]',\n {\n variants: {\n columns: {\n // Responsive default: one column on mobile, two from sm, three from lg.\n responsive: 'ds:grid-cols-1 ds:sm:grid-cols-2 ds:lg:grid-cols-3',\n '1': 'ds:grid-cols-1',\n '2': 'ds:grid-cols-1 ds:sm:grid-cols-2',\n '3': 'ds:grid-cols-1 ds:sm:grid-cols-2 ds:lg:grid-cols-3',\n '4': 'ds:grid-cols-1 ds:sm:grid-cols-2 ds:lg:grid-cols-4',\n },\n },\n defaultVariants: { columns: 'responsive' },\n },\n);\n\n// Shared tile look applied to BOTH the Link (href) and the button (onSelect)\n// so the two render identically. Focus ring is included here so the native\n// button gets a visible ring too (Link also carries its own — same tokens).\nconst tileVariants = cva(\n [\n 'ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)] ds:text-start',\n 'ds:h-full ds:w-full ds:min-h-[var(--min-target-size)] ds:p-[var(--spacing-md)]',\n 'ds:rounded-[var(--radius-lg)] ds:[:where(&)]:border-[length:var(--surface-border-width,var(--border-width-sm))] ds:border-[color:var(--card-border)]',\n 'ds:bg-[var(--card)] ds:text-[var(--card-foreground)] ds:no-underline',\n 'ds:transition-shadow ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:outline-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n {\n variants: {\n disabled: {\n true: 'ds:opacity-50 ds:cursor-not-allowed ds:pointer-events-none',\n false: 'ds:cursor-pointer ds:hover:shadow-[var(--shadow-hover)]',\n },\n },\n defaultVariants: { disabled: false },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Tile content */\n/* ------------------------------------------------------------------ */\n\nfunction TileContent({ item }: { item: NavGridItem }) {\n return (\n <>\n {item.icon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:items-center ds:text-[var(--muted-foreground)] ds:[&_svg]:size-6\"\n >\n {item.icon}\n </span>\n ) : null}\n {/* `no-underline` on the span reliably suppresses the Link's underline\n across this text regardless of stylesheet order (own decoration box). */}\n <span className=\"type-body ds:font-medium ds:text-[var(--card-foreground)] ds:no-underline\">\n {item.label}\n </span>\n {item.description ? (\n <span className=\"type-body-sm ds:text-[var(--muted-foreground)] ds:no-underline\">\n {item.description}\n </span>\n ) : null}\n </>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const NavGrid = forwardRef<HTMLElement, NavGridProps>(function NavGrid(\n { items, ariaLabel, columns, sort = 'none', id, className },\n ref,\n) {\n // Locale-aware sort is the consumer's opt-in; otherwise render as given.\n const resolvedItems = useMemo(\n () =>\n sort === 'label'\n ? [...items].sort((a, b) => a.label.localeCompare(b.label))\n : items,\n [items, sort],\n );\n\n const handle = useMemo<NavGridHandle>(\n () => ({\n getItemCount: () => items.length,\n openItem: (itemId) => {\n const target = items.find((it) => it.id === itemId);\n if (!target || target.disabled) return;\n if (target.href) {\n if (typeof window !== 'undefined') window.location.href = target.href;\n } else {\n target.onSelect?.();\n }\n },\n }),\n [items],\n );\n useAgentRegistration(navGridAgent, handle, id);\n\n const columnKey =\n columns === undefined\n ? ('responsive' as const)\n : (String(columns) as '1' | '2' | '3' | '4');\n\n return (\n <nav\n ref={ref}\n id={id}\n aria-label={ariaLabel}\n data-component=\"nav-grid\"\n data-component-id={id}\n className={className}\n >\n <ul className={gridVariants({ columns: columnKey })}>\n {resolvedItems.map((item) => (\n <li key={item.id} data-nav-item-id={item.id}>\n {item.href !== undefined ? (\n <Link\n href={item.href}\n intent=\"subtle\"\n disabled={item.disabled}\n className={tileVariants({ disabled: Boolean(item.disabled) })}\n >\n <TileContent item={item} />\n </Link>\n ) : (\n <button\n type=\"button\"\n onClick={item.disabled ? undefined : item.onSelect}\n disabled={item.disabled}\n aria-disabled={item.disabled || undefined}\n className={tileVariants({ disabled: Boolean(item.disabled) })}\n >\n <TileContent item={item} />\n </button>\n )}\n </li>\n ))}\n </ul>\n </nav>\n );\n});\n\nNavGrid.displayName = 'NavGrid';\n\nexport { tileVariants as navGridTileVariants };\n"],"names":["navGridAgent","handle","args","gridVariants","cva","tileVariants","TileContent","item","jsxs","Fragment","jsx","NavGrid","forwardRef","items","ariaLabel","columns","sort","id","className","ref","resolvedItems","useMemo","a","b","itemId","target","it","_a","useAgentRegistration","columnKey","Link"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { c as f } from "./createLucideIcon-DhHxpK9K.js";
2
2
  import { jsx as a } from "react/jsx-runtime";
3
3
  import { useTranslation as g } from "react-i18next";
4
- import { B as u } from "./badge-hnBt8o7n.js";
5
- import { L as h } from "./link-gRw3NtOt.js";
4
+ import { B as u } from "./badge-BUk4RjTS.js";
5
+ import { L as h } from "./link-N5_YpLtm.js";
6
6
  import { i as b } from "./is-safe-url-DkETxeHz.js";
7
7
  import { S as y } from "./scan-line-CNseIHQ0.js";
8
8
  import { L as N } from "./layers-DcAENmsZ.js";
@@ -121,4 +121,4 @@ export {
121
121
  M as P,
122
122
  U as n
123
123
  };
124
- //# sourceMappingURL=note-attachment-Bt2cddsZ.js.map
124
+ //# sourceMappingURL=note-attachment-D8V7PUiR.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"note-attachment-Bt2cddsZ.js","sources":["../../node_modules/lucide-react/dist/esm/icons/flag.mjs","../../node_modules/lucide-react/dist/esm/icons/pin.mjs","../../src/components/_shared/note-markdown.ts","../../src/components/_shared/note-attachment.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528\",\n key: \"1jaruq\"\n }\n ]\n];\nconst Flag = createLucideIcon(\"flag\", __iconNode);\n\nexport { __iconNode, Flag as default };\n//# sourceMappingURL=flag.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 17v5\", key: \"bb1du9\" }],\n [\n \"path\",\n {\n d: \"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z\",\n key: \"1nkz8b\"\n }\n ]\n];\nconst Pin = createLucideIcon(\"pin\", __iconNode);\n\nexport { __iconNode, Pin as default };\n//# sourceMappingURL=pin.mjs.map\n","/* -------------------------------------------------------------------- */\n/* Note markdown → safe HTML */\n/* */\n/* Shared by every surface that renders a note body — ClinicalNoteCard */\n/* and NoteTimeline today. One implementation, so the small Markdown */\n/* subset a note supports cannot drift between the card and the timeline. */\n/* */\n/* The output is always handed to `SafeHtml` (markdown profile), which */\n/* strips everything outside the allow-list, so even a hostile note can */\n/* only ever emit the sanitised tag set. Nothing here calls */\n/* dangerouslySetInnerHTML — SafeHtml is the single carrier. */\n/* -------------------------------------------------------------------- */\n\n/** HTML-escape a raw text run before re-inserting our own safe markup. */\nfunction escapeHtml(input: string): string {\n return input\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n\n/** Apply inline markdown (bold, italic, code, links) to an escaped run. */\nfunction renderInlineHtml(escaped: string): string {\n let out = escaped;\n // Inline code first so its contents aren't re-processed.\n out = out.replace(/`([^`]+)`/g, '<code>$1</code>');\n out = out.replace(/\\*\\*([^*]+)\\*\\*/g, '<strong>$1</strong>');\n out = out.replace(/\\*([^*]+)\\*/g, '<em>$1</em>');\n // Links — the href is left as-authored; SafeHtml's markdown profile\n // rejects any scheme outside http(s)/mailto/tel at sanitise time.\n out = out.replace(\n /\\[([^\\]]+)\\]\\(([^)\\s]+)\\)/g,\n '<a href=\"$2\" target=\"_blank\" rel=\"noopener noreferrer\">$1</a>',\n );\n return out;\n}\n\n/** Convert the supported Markdown subset into an HTML string. */\nexport function noteMarkdownToHtml(input: string): string {\n const blocks = input.split(/\\n{2,}/);\n return blocks\n .map((block) => {\n const lines = block.split('\\n');\n const isUnordered = lines.every((l) => /^\\s*[-*]\\s+/.test(l));\n const isOrdered = lines.every((l) => /^\\s*\\d+\\.\\s+/.test(l));\n if (isUnordered && lines.length > 0) {\n const items = lines\n .map((l) => l.replace(/^\\s*[-*]\\s+/, ''))\n .map((l) => `<li>${renderInlineHtml(escapeHtml(l))}</li>`)\n .join('');\n return `<ul>${items}</ul>`;\n }\n if (isOrdered && lines.length > 0) {\n const items = lines\n .map((l) => l.replace(/^\\s*\\d+\\.\\s+/, ''))\n .map((l) => `<li>${renderInlineHtml(escapeHtml(l))}</li>`)\n .join('');\n return `<ol>${items}</ol>`;\n }\n const paragraph = renderInlineHtml(escapeHtml(block)).replace(\n /\\n/g,\n '<br />',\n );\n return `<p>${paragraph}</p>`;\n })\n .join('');\n}\n","/* -------------------------------------------------------------------- */\n/* Note attachment chip */\n/* */\n/* The entity a note is bound to, rendered as one chip — or as a link */\n/* when the host supplies a safe url. Shared by every surface that shows */\n/* a note (ClinicalNoteCard and NoteTimeline today) so the wording, the */\n/* glyph and the link-vs-chip rule cannot drift between them. */\n/* */\n/* The strings stay under `clinicalNoteCard.attachment.*`: they name the */\n/* ATTACHED ENTITY, not the surface showing it, so they are already the */\n/* right words wherever a note is rendered. */\n/* -------------------------------------------------------------------- */\n\nimport type { ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FileText, Layers, ScanLine, User } from 'lucide-react';\nimport { Badge } from '../badge/badge';\nimport { Link } from '../link/link';\nimport { isSafeEntityUrl } from './is-safe-url';\n\n/**\n * What a note is attached to.\n *\n * - `patient` — the patient record itself.\n * - `carePlan` — a numbered care plan.\n * - `carePlanEntry`— one treatment in a plan, optionally with tooth elements.\n * - `phase` — a scheduled phase.\n * - `xray` — an x-ray / radiograph, optionally labelled.\n *\n * Every non-patient kind takes an optional `url`: a safe one turns the chip\n * into a link, an unsafe one keeps the chip.\n */\nexport type NoteAttachment =\n | { kind: 'patient' }\n | { kind: 'carePlan'; number: string; url?: string }\n | {\n kind: 'carePlanEntry';\n careName: string;\n elements?: string[];\n url?: string;\n }\n | { kind: 'phase'; label: string; url?: string }\n | { kind: 'xray'; label?: string; url?: string };\n\n/**\n * Renders the attachment as a chip, or a link when `url` is safe. Returns\n * `null` for an unattached note, so a caller can render it unconditionally.\n */\nexport function NoteAttachmentChip({\n attachedTo,\n}: {\n attachedTo?: NoteAttachment;\n}): ReactNode {\n const { t } = useTranslation('ui');\n\n if (!attachedTo) return null;\n\n // A safe host url turns the chip into a link; otherwise it stays a chip.\n const linkOrChip = (\n label: string,\n icon: ReactNode,\n variant: 'info' | 'neutral',\n url: string | undefined,\n ): ReactNode =>\n url && isSafeEntityUrl(url) ? (\n <Link href={url} intent=\"default\" startIcon={icon}>\n {label}\n </Link>\n ) : (\n <Badge variant={variant} size=\"sm\" leading={icon}>\n {label}\n </Badge>\n );\n\n switch (attachedTo.kind) {\n case 'patient':\n return (\n <Badge\n variant=\"neutral\"\n size=\"sm\"\n leading={<User aria-hidden=\"true\" />}\n >\n {t('clinicalNoteCard.attachment.patient')}\n </Badge>\n );\n case 'carePlan':\n return linkOrChip(\n t('clinicalNoteCard.attachment.carePlan', {\n number: attachedTo.number,\n }),\n <FileText aria-hidden=\"true\" />,\n 'info',\n attachedTo.url,\n );\n case 'carePlanEntry':\n return linkOrChip(\n attachedTo.elements && attachedTo.elements.length > 0\n ? t('clinicalNoteCard.attachment.carePlanEntryWithElements', {\n care: attachedTo.careName,\n elements: attachedTo.elements.join(', '),\n })\n : t('clinicalNoteCard.attachment.carePlanEntry', {\n care: attachedTo.careName,\n }),\n <FileText aria-hidden=\"true\" />,\n 'info',\n attachedTo.url,\n );\n case 'phase':\n return linkOrChip(\n t('clinicalNoteCard.attachment.phase', { label: attachedTo.label }),\n <Layers aria-hidden=\"true\" />,\n 'neutral',\n attachedTo.url,\n );\n case 'xray':\n return linkOrChip(\n attachedTo.label\n ? t('clinicalNoteCard.attachment.xrayWithLabel', {\n label: attachedTo.label,\n })\n : t('clinicalNoteCard.attachment.xray'),\n <ScanLine aria-hidden=\"true\" />,\n 'neutral',\n attachedTo.url,\n );\n }\n}\n"],"names":["__iconNode","Flag","createLucideIcon","Pin","escapeHtml","input","renderInlineHtml","escaped","out","noteMarkdownToHtml","block","lines","isUnordered","isOrdered","l","NoteAttachmentChip","attachedTo","t","useTranslation","linkOrChip","label","icon","variant","url","isSafeEntityUrl","jsx","Link","Badge","User","FileText","Layers","ScanLine"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"note-attachment-D8V7PUiR.js","sources":["../../node_modules/lucide-react/dist/esm/icons/flag.mjs","../../node_modules/lucide-react/dist/esm/icons/pin.mjs","../../src/components/_shared/note-markdown.ts","../../src/components/_shared/note-attachment.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528\",\n key: \"1jaruq\"\n }\n ]\n];\nconst Flag = createLucideIcon(\"flag\", __iconNode);\n\nexport { __iconNode, Flag as default };\n//# sourceMappingURL=flag.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 17v5\", key: \"bb1du9\" }],\n [\n \"path\",\n {\n d: \"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z\",\n key: \"1nkz8b\"\n }\n ]\n];\nconst Pin = createLucideIcon(\"pin\", __iconNode);\n\nexport { __iconNode, Pin as default };\n//# sourceMappingURL=pin.mjs.map\n","/* -------------------------------------------------------------------- */\n/* Note markdown → safe HTML */\n/* */\n/* Shared by every surface that renders a note body — ClinicalNoteCard */\n/* and NoteTimeline today. One implementation, so the small Markdown */\n/* subset a note supports cannot drift between the card and the timeline. */\n/* */\n/* The output is always handed to `SafeHtml` (markdown profile), which */\n/* strips everything outside the allow-list, so even a hostile note can */\n/* only ever emit the sanitised tag set. Nothing here calls */\n/* dangerouslySetInnerHTML — SafeHtml is the single carrier. */\n/* -------------------------------------------------------------------- */\n\n/** HTML-escape a raw text run before re-inserting our own safe markup. */\nfunction escapeHtml(input: string): string {\n return input\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n\n/** Apply inline markdown (bold, italic, code, links) to an escaped run. */\nfunction renderInlineHtml(escaped: string): string {\n let out = escaped;\n // Inline code first so its contents aren't re-processed.\n out = out.replace(/`([^`]+)`/g, '<code>$1</code>');\n out = out.replace(/\\*\\*([^*]+)\\*\\*/g, '<strong>$1</strong>');\n out = out.replace(/\\*([^*]+)\\*/g, '<em>$1</em>');\n // Links — the href is left as-authored; SafeHtml's markdown profile\n // rejects any scheme outside http(s)/mailto/tel at sanitise time.\n out = out.replace(\n /\\[([^\\]]+)\\]\\(([^)\\s]+)\\)/g,\n '<a href=\"$2\" target=\"_blank\" rel=\"noopener noreferrer\">$1</a>',\n );\n return out;\n}\n\n/** Convert the supported Markdown subset into an HTML string. */\nexport function noteMarkdownToHtml(input: string): string {\n const blocks = input.split(/\\n{2,}/);\n return blocks\n .map((block) => {\n const lines = block.split('\\n');\n const isUnordered = lines.every((l) => /^\\s*[-*]\\s+/.test(l));\n const isOrdered = lines.every((l) => /^\\s*\\d+\\.\\s+/.test(l));\n if (isUnordered && lines.length > 0) {\n const items = lines\n .map((l) => l.replace(/^\\s*[-*]\\s+/, ''))\n .map((l) => `<li>${renderInlineHtml(escapeHtml(l))}</li>`)\n .join('');\n return `<ul>${items}</ul>`;\n }\n if (isOrdered && lines.length > 0) {\n const items = lines\n .map((l) => l.replace(/^\\s*\\d+\\.\\s+/, ''))\n .map((l) => `<li>${renderInlineHtml(escapeHtml(l))}</li>`)\n .join('');\n return `<ol>${items}</ol>`;\n }\n const paragraph = renderInlineHtml(escapeHtml(block)).replace(\n /\\n/g,\n '<br />',\n );\n return `<p>${paragraph}</p>`;\n })\n .join('');\n}\n","/* -------------------------------------------------------------------- */\n/* Note attachment chip */\n/* */\n/* The entity a note is bound to, rendered as one chip — or as a link */\n/* when the host supplies a safe url. Shared by every surface that shows */\n/* a note (ClinicalNoteCard and NoteTimeline today) so the wording, the */\n/* glyph and the link-vs-chip rule cannot drift between them. */\n/* */\n/* The strings stay under `clinicalNoteCard.attachment.*`: they name the */\n/* ATTACHED ENTITY, not the surface showing it, so they are already the */\n/* right words wherever a note is rendered. */\n/* -------------------------------------------------------------------- */\n\nimport type { ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FileText, Layers, ScanLine, User } from 'lucide-react';\nimport { Badge } from '../badge/badge';\nimport { Link } from '../link/link';\nimport { isSafeEntityUrl } from './is-safe-url';\n\n/**\n * What a note is attached to.\n *\n * - `patient` — the patient record itself.\n * - `carePlan` — a numbered care plan.\n * - `carePlanEntry`— one treatment in a plan, optionally with tooth elements.\n * - `phase` — a scheduled phase.\n * - `xray` — an x-ray / radiograph, optionally labelled.\n *\n * Every non-patient kind takes an optional `url`: a safe one turns the chip\n * into a link, an unsafe one keeps the chip.\n */\nexport type NoteAttachment =\n | { kind: 'patient' }\n | { kind: 'carePlan'; number: string; url?: string }\n | {\n kind: 'carePlanEntry';\n careName: string;\n elements?: string[];\n url?: string;\n }\n | { kind: 'phase'; label: string; url?: string }\n | { kind: 'xray'; label?: string; url?: string };\n\n/**\n * Renders the attachment as a chip, or a link when `url` is safe. Returns\n * `null` for an unattached note, so a caller can render it unconditionally.\n */\nexport function NoteAttachmentChip({\n attachedTo,\n}: {\n attachedTo?: NoteAttachment;\n}): ReactNode {\n const { t } = useTranslation('ui');\n\n if (!attachedTo) return null;\n\n // A safe host url turns the chip into a link; otherwise it stays a chip.\n const linkOrChip = (\n label: string,\n icon: ReactNode,\n variant: 'info' | 'neutral',\n url: string | undefined,\n ): ReactNode =>\n url && isSafeEntityUrl(url) ? (\n <Link href={url} intent=\"default\" startIcon={icon}>\n {label}\n </Link>\n ) : (\n <Badge variant={variant} size=\"sm\" leading={icon}>\n {label}\n </Badge>\n );\n\n switch (attachedTo.kind) {\n case 'patient':\n return (\n <Badge\n variant=\"neutral\"\n size=\"sm\"\n leading={<User aria-hidden=\"true\" />}\n >\n {t('clinicalNoteCard.attachment.patient')}\n </Badge>\n );\n case 'carePlan':\n return linkOrChip(\n t('clinicalNoteCard.attachment.carePlan', {\n number: attachedTo.number,\n }),\n <FileText aria-hidden=\"true\" />,\n 'info',\n attachedTo.url,\n );\n case 'carePlanEntry':\n return linkOrChip(\n attachedTo.elements && attachedTo.elements.length > 0\n ? t('clinicalNoteCard.attachment.carePlanEntryWithElements', {\n care: attachedTo.careName,\n elements: attachedTo.elements.join(', '),\n })\n : t('clinicalNoteCard.attachment.carePlanEntry', {\n care: attachedTo.careName,\n }),\n <FileText aria-hidden=\"true\" />,\n 'info',\n attachedTo.url,\n );\n case 'phase':\n return linkOrChip(\n t('clinicalNoteCard.attachment.phase', { label: attachedTo.label }),\n <Layers aria-hidden=\"true\" />,\n 'neutral',\n attachedTo.url,\n );\n case 'xray':\n return linkOrChip(\n attachedTo.label\n ? t('clinicalNoteCard.attachment.xrayWithLabel', {\n label: attachedTo.label,\n })\n : t('clinicalNoteCard.attachment.xray'),\n <ScanLine aria-hidden=\"true\" />,\n 'neutral',\n attachedTo.url,\n );\n }\n}\n"],"names":["__iconNode","Flag","createLucideIcon","Pin","escapeHtml","input","renderInlineHtml","escaped","out","noteMarkdownToHtml","block","lines","isUnordered","isOrdered","l","NoteAttachmentChip","attachedTo","t","useTranslation","linkOrChip","label","icon","variant","url","isSafeEntityUrl","jsx","Link","Badge","User","FileText","Layers","ScanLine"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -4,7 +4,7 @@ import { c as h } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as L } from "react-i18next";
5
5
  import { SafeHtml as A } from "../safe-html/index.js";
6
6
  import { C as P, S as b } from "./skeleton-B1KTdJ4N.js";
7
- import { n as B, P as K, F as O, N as q } from "./note-attachment-Bt2cddsZ.js";
7
+ import { n as B, P as K, F as O, N as q } from "./note-attachment-D8V7PUiR.js";
8
8
  import { u as G } from "./registry-DvAUVLHh.js";
9
9
  const J = {
10
10
  id: "note-timeline",
@@ -330,4 +330,4 @@ export {
330
330
  X as N,
331
331
  J as n
332
332
  };
333
- //# sourceMappingURL=note-timeline-CX9nAgAR.js.map
333
+ //# sourceMappingURL=note-timeline-CwxPQ2Ak.js.map