@alfadocs/ui-kit-debug 1.55.0 → 1.57.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 (448) hide show
  1. package/dist/_chunks/{ai-credits-notice-BoNJtOuE.js → ai-credits-notice-ktklr8fy.js} +2 -2
  2. package/dist/_chunks/{ai-credits-notice-BoNJtOuE.js.map → ai-credits-notice-ktklr8fy.js.map} +1 -1
  3. package/dist/_chunks/ai-permission-notice-DyuEGwAt.js +206 -0
  4. package/dist/_chunks/ai-permission-notice-DyuEGwAt.js.map +1 -0
  5. package/dist/_chunks/alia-sidebar-BBKBJCv6.js +1284 -0
  6. package/dist/_chunks/alia-sidebar-BBKBJCv6.js.map +1 -0
  7. package/dist/_chunks/{anamnesis-summary-rows-Dtw5Hpg4.js → anamnesis-summary-rows-CCQ62mMN.js} +5 -5
  8. package/dist/_chunks/{anamnesis-summary-rows-Dtw5Hpg4.js.map → anamnesis-summary-rows-CCQ62mMN.js.map} +1 -1
  9. package/dist/_chunks/{appointment-peek-BIZaDeCi.js → appointment-peek-WvNbE4JG.js} +2 -2
  10. package/dist/_chunks/{appointment-peek-BIZaDeCi.js.map → appointment-peek-WvNbE4JG.js.map} +1 -1
  11. package/dist/_chunks/{appointment-timeline-DmqYEIT9.js → appointment-timeline-Z0494xO-.js} +2 -2
  12. package/dist/_chunks/{appointment-timeline-DmqYEIT9.js.map → appointment-timeline-Z0494xO-.js.map} +1 -1
  13. package/dist/_chunks/{balance-badge-cell-zP-iN-Pd.js → balance-badge-cell-CII3SDmR.js} +3 -3
  14. package/dist/_chunks/{balance-badge-cell-zP-iN-Pd.js.map → balance-badge-cell-CII3SDmR.js.map} +1 -1
  15. package/dist/_chunks/{bmi-calculator-DTZhRhXe.js → bmi-calculator-C0UTxB7R.js} +2 -2
  16. package/dist/_chunks/{bmi-calculator-DTZhRhXe.js.map → bmi-calculator-C0UTxB7R.js.map} +1 -1
  17. package/dist/_chunks/{booking-uZO10TLK.js → booking-81WnKDsH.js} +4 -4
  18. package/dist/_chunks/{booking-uZO10TLK.js.map → booking-81WnKDsH.js.map} +1 -1
  19. package/dist/_chunks/{breadcrumb-xgVpPH2H.js → breadcrumb-Boan-5n8.js} +39 -39
  20. package/dist/_chunks/breadcrumb-Boan-5n8.js.map +1 -0
  21. package/dist/_chunks/{calculator-dialog-BRjZMWuE.js → calculator-dialog-CzQv03p0.js} +2 -2
  22. package/dist/_chunks/{calculator-dialog-BRjZMWuE.js.map → calculator-dialog-CzQv03p0.js.map} +1 -1
  23. package/dist/_chunks/{calendar-workspace-DVajSkKA.js → calendar-workspace-D5-k_9zE.js} +15 -15
  24. package/dist/_chunks/{calendar-workspace-DVajSkKA.js.map → calendar-workspace-D5-k_9zE.js.map} +1 -1
  25. package/dist/_chunks/{care-plan-card-Ddjh5Doc.js → care-plan-card-DxrRLRdW.js} +2 -2
  26. package/dist/_chunks/{care-plan-card-Ddjh5Doc.js.map → care-plan-card-DxrRLRdW.js.map} +1 -1
  27. package/dist/_chunks/{care-plan-header-BeMYMiI7.js → care-plan-header-BMwZIgHJ.js} +3 -3
  28. package/dist/_chunks/{care-plan-header-BeMYMiI7.js.map → care-plan-header-BMwZIgHJ.js.map} +1 -1
  29. package/dist/_chunks/chart-DQ5GxqgT.js +906 -0
  30. package/dist/_chunks/chart-DQ5GxqgT.js.map +1 -0
  31. package/dist/_chunks/{clinical-note-card-14JIoUR0.js → clinical-note-card-hx939bvw.js} +2 -2
  32. package/dist/_chunks/{clinical-note-card-14JIoUR0.js.map → clinical-note-card-hx939bvw.js.map} +1 -1
  33. package/dist/_chunks/{color-picker-BRQ4Y9SO.js → color-picker-BsggJovx.js} +128 -123
  34. package/dist/_chunks/color-picker-BsggJovx.js.map +1 -0
  35. package/dist/_chunks/{contact-card-CmK05vNb.js → contact-card-fHBMwEsx.js} +2 -2
  36. package/dist/_chunks/{contact-card-CmK05vNb.js.map → contact-card-fHBMwEsx.js.map} +1 -1
  37. package/dist/_chunks/{contact-profile-card-C5DbP_X3.js → contact-profile-card-CMyBYgRR.js} +3 -3
  38. package/dist/_chunks/{contact-profile-card-C5DbP_X3.js.map → contact-profile-card-CMyBYgRR.js.map} +1 -1
  39. package/dist/_chunks/{cycle-calculator-Dgfqr4Q4.js → cycle-calculator-Cww9DzIa.js} +2 -2
  40. package/dist/_chunks/{cycle-calculator-Dgfqr4Q4.js.map → cycle-calculator-Cww9DzIa.js.map} +1 -1
  41. package/dist/_chunks/dashboard-grid-DfEY2qci.js +844 -0
  42. package/dist/_chunks/dashboard-grid-DfEY2qci.js.map +1 -0
  43. package/dist/_chunks/{data-table-C6T31E33.js → data-table-fAMTeAjM.js} +2 -2
  44. package/dist/_chunks/{data-table-C6T31E33.js.map → data-table-fAMTeAjM.js.map} +1 -1
  45. package/dist/_chunks/{data-table-tabs-Xhg5G0gU.js → data-table-tabs-CHYAAeHy.js} +2 -2
  46. package/dist/_chunks/{data-table-tabs-Xhg5G0gU.js.map → data-table-tabs-CHYAAeHy.js.map} +1 -1
  47. package/dist/_chunks/{date-picker-wRAcq2lt.js → date-picker-BSZuKo13.js} +69 -62
  48. package/dist/_chunks/date-picker-BSZuKo13.js.map +1 -0
  49. package/dist/_chunks/{date-range-picker-BOvHwWO5.js → date-range-picker-CFk-5O3R.js} +188 -177
  50. package/dist/_chunks/date-range-picker-CFk-5O3R.js.map +1 -0
  51. package/dist/_chunks/{date-time-picker-CLeLKuv9.js → date-time-picker-CjxTkblD.js} +92 -85
  52. package/dist/_chunks/date-time-picker-CjxTkblD.js.map +1 -0
  53. package/dist/_chunks/{dependent-selector-Bet3XAFj.js → dependent-selector-DgaAQc-c.js} +91 -86
  54. package/dist/_chunks/dependent-selector-DgaAQc-c.js.map +1 -0
  55. package/dist/_chunks/{dialog-D52AI4nF.js → dialog-Dn-iQ0Jp.js} +86 -69
  56. package/dist/_chunks/dialog-Dn-iQ0Jp.js.map +1 -0
  57. package/dist/_chunks/{document-preview-uoTekVR7.js → document-preview-CHGGG0l_.js} +2 -2
  58. package/dist/_chunks/{document-preview-uoTekVR7.js.map → document-preview-CHGGG0l_.js.map} +1 -1
  59. package/dist/_chunks/{due-date-calculator-DXDJbUzo.js → due-date-calculator-D_qFUiHp.js} +3 -3
  60. package/dist/_chunks/{due-date-calculator-DXDJbUzo.js.map → due-date-calculator-D_qFUiHp.js.map} +1 -1
  61. package/dist/_chunks/{entity-summary-DcB0fIiv.js → entity-summary-CWcCSThK.js} +2 -2
  62. package/dist/_chunks/{entity-summary-DcB0fIiv.js.map → entity-summary-CWcCSThK.js.map} +1 -1
  63. package/dist/_chunks/{file-manager-dIJQUZvq.js → file-manager-CFsL1KVt.js} +4 -4
  64. package/dist/_chunks/{file-manager-dIJQUZvq.js.map → file-manager-CFsL1KVt.js.map} +1 -1
  65. package/dist/_chunks/{freemium-paywall-B6ojVXq7.js → freemium-paywall-DIKuhX8b.js} +90 -86
  66. package/dist/_chunks/freemium-paywall-DIKuhX8b.js.map +1 -0
  67. package/dist/_chunks/{gestational-age-calculator-BfGpt3du.js → gestational-age-calculator-CZi43xKG.js} +3 -3
  68. package/dist/_chunks/{gestational-age-calculator-BfGpt3du.js.map → gestational-age-calculator-CZi43xKG.js.map} +1 -1
  69. package/dist/_chunks/{hcg-doubling-BIYyI2Yo.js → hcg-doubling-Ccvh7OaU.js} +2 -2
  70. package/dist/_chunks/{hcg-doubling-BIYyI2Yo.js.map → hcg-doubling-Ccvh7OaU.js.map} +1 -1
  71. package/dist/_chunks/{header-settings-ge_3gYEq.js → header-settings-BMcCx2LC.js} +2 -2
  72. package/dist/_chunks/{header-settings-ge_3gYEq.js.map → header-settings-BMcCx2LC.js.map} +1 -1
  73. package/dist/_chunks/{heatmap-BARGZZt2.js → heatmap-BEeOThkW.js} +2 -2
  74. package/dist/_chunks/{heatmap-BARGZZt2.js.map → heatmap-BEeOThkW.js.map} +1 -1
  75. package/dist/_chunks/{help-me-write-templates-B7L3zGsE.js → help-me-write-templates-BUoYGo6f.js} +2 -2
  76. package/dist/_chunks/help-me-write-templates-BUoYGo6f.js.map +1 -0
  77. package/dist/_chunks/{hover-card-BnTueNS2.js → hover-card-U_ZYoh1n.js} +201 -187
  78. package/dist/_chunks/hover-card-U_ZYoh1n.js.map +1 -0
  79. package/dist/_chunks/{icon-picker-DWrqmI1c.js → icon-picker-C86lQTIA.js} +2 -2
  80. package/dist/_chunks/{icon-picker-DWrqmI1c.js.map → icon-picker-C86lQTIA.js.map} +1 -1
  81. package/dist/_chunks/{info-tip-B0jmIt6M.js → info-tip-CJpNpzZe.js} +2 -2
  82. package/dist/_chunks/{info-tip-B0jmIt6M.js.map → info-tip-CJpNpzZe.js.map} +1 -1
  83. package/dist/_chunks/{key-value-pair-Ax8IJr1M.js → key-value-pair-BNNITp6S.js} +25 -19
  84. package/dist/_chunks/key-value-pair-BNNITp6S.js.map +1 -0
  85. package/dist/_chunks/{kit-extensions-C9-v8Dih.js → kit-extensions-DYVxWcqv.js} +5 -5
  86. package/dist/_chunks/{kit-extensions-C9-v8Dih.js.map → kit-extensions-DYVxWcqv.js.map} +1 -1
  87. package/dist/_chunks/{link-cell-renderer-DlBVPMTi.js → link-cell-renderer-CxW_oLa5.js} +2 -2
  88. package/dist/_chunks/{link-cell-renderer-DlBVPMTi.js.map → link-cell-renderer-CxW_oLa5.js.map} +1 -1
  89. package/dist/_chunks/link-gRw3NtOt.js +137 -0
  90. package/dist/_chunks/link-gRw3NtOt.js.map +1 -0
  91. package/dist/_chunks/{locale-picker-DfNSdOpy.js → locale-picker-BGfrZyTw.js} +2 -2
  92. package/dist/_chunks/{locale-picker-DfNSdOpy.js.map → locale-picker-BGfrZyTw.js.map} +1 -1
  93. package/dist/_chunks/{marketplace-app-shell-Dcx-JEjg.js → marketplace-app-shell-BZcA9Z06.js} +143 -129
  94. package/dist/_chunks/marketplace-app-shell-BZcA9Z06.js.map +1 -0
  95. package/dist/_chunks/{message-tray-BB95DA82.js → message-tray-QKQutwxj.js} +76 -69
  96. package/dist/_chunks/message-tray-QKQutwxj.js.map +1 -0
  97. package/dist/_chunks/{nav-grid-BqCPH8sm.js → nav-grid-Byx8PxuB.js} +2 -2
  98. package/dist/_chunks/{nav-grid-BqCPH8sm.js.map → nav-grid-Byx8PxuB.js.map} +1 -1
  99. package/dist/_chunks/non-modal-tab-exit-j3CPOuE3.js +89 -0
  100. package/dist/_chunks/non-modal-tab-exit-j3CPOuE3.js.map +1 -0
  101. package/dist/_chunks/{note-attachment-I1NLoeRZ.js → note-attachment-Bt2cddsZ.js} +2 -2
  102. package/dist/_chunks/{note-attachment-I1NLoeRZ.js.map → note-attachment-Bt2cddsZ.js.map} +1 -1
  103. package/dist/_chunks/{note-timeline-CsY8YOE7.js → note-timeline-CX9nAgAR.js} +2 -2
  104. package/dist/_chunks/{note-timeline-CsY8YOE7.js.map → note-timeline-CX9nAgAR.js.map} +1 -1
  105. package/dist/_chunks/{notes-panel-I8ntrrUW.js → notes-panel-Cm4pttpl.js} +4 -4
  106. package/dist/_chunks/{notes-panel-I8ntrrUW.js.map → notes-panel-Cm4pttpl.js.map} +1 -1
  107. package/dist/_chunks/{notification-tray-__sJXnsz.js → notification-tray-C5VtbGjd.js} +83 -76
  108. package/dist/_chunks/notification-tray-C5VtbGjd.js.map +1 -0
  109. package/dist/_chunks/{patient-details-DsTtjpuX.js → patient-details-99kEdtc5.js} +2 -2
  110. package/dist/_chunks/{patient-details-DsTtjpuX.js.map → patient-details-99kEdtc5.js.map} +1 -1
  111. package/dist/_chunks/{patient-field-row-BvZ9luz-.js → patient-field-row-DkxY13T6.js} +5 -5
  112. package/dist/_chunks/{patient-field-row-BvZ9luz-.js.map → patient-field-row-DkxY13T6.js.map} +1 -1
  113. package/dist/_chunks/{patient-summary-card-3dspc2tR.js → patient-summary-card-opdyfeW2.js} +10 -6
  114. package/dist/_chunks/{patient-summary-card-3dspc2tR.js.map → patient-summary-card-opdyfeW2.js.map} +1 -1
  115. package/dist/_chunks/{payment-automation-upsell-DEUfM7EU.js → payment-automation-upsell-DiHovmUL.js} +2 -2
  116. package/dist/_chunks/{payment-automation-upsell-DEUfM7EU.js.map → payment-automation-upsell-DiHovmUL.js.map} +1 -1
  117. package/dist/_chunks/{payment-request-card-DAGqh9Yx.js → payment-request-card-DAniJNLX.js} +3 -3
  118. package/dist/_chunks/{payment-request-card-DAGqh9Yx.js.map → payment-request-card-DAniJNLX.js.map} +1 -1
  119. package/dist/_chunks/{pdf-viewer-C3minW5b.js → pdf-viewer-CNQxa4tv.js} +396 -391
  120. package/dist/_chunks/pdf-viewer-CNQxa4tv.js.map +1 -0
  121. package/dist/_chunks/{periodontal-chart-BqwLxy2m.js → periodontal-chart-DD5C0M3l.js} +2 -2
  122. package/dist/_chunks/{periodontal-chart-BqwLxy2m.js.map → periodontal-chart-DD5C0M3l.js.map} +1 -1
  123. package/dist/_chunks/{periodontal-chart-card-CWZ1YM1h.js → periodontal-chart-card-CxdXvsPU.js} +2 -2
  124. package/dist/_chunks/{periodontal-chart-card-CWZ1YM1h.js.map → periodontal-chart-card-CxdXvsPU.js.map} +1 -1
  125. package/dist/_chunks/{periodontal-diagnosis-C9IuvLId.js → periodontal-diagnosis-D-PJv7KS.js} +2 -2
  126. package/dist/_chunks/{periodontal-diagnosis-C9IuvLId.js.map → periodontal-diagnosis-D-PJv7KS.js.map} +1 -1
  127. package/dist/_chunks/{phone-input-DxkHMYmu.js → phone-input-O9camxkq.js} +156 -151
  128. package/dist/_chunks/phone-input-O9camxkq.js.map +1 -0
  129. package/dist/_chunks/popover-BG75rYjN.js +367 -0
  130. package/dist/_chunks/popover-BG75rYjN.js.map +1 -0
  131. package/dist/_chunks/{position-grid-D2D5_Tze.js → position-grid-CBB88EaH.js} +38 -36
  132. package/dist/_chunks/position-grid-CBB88EaH.js.map +1 -0
  133. package/dist/_chunks/{practice-results-DxOgbPDy.js → practice-results-CfRkjzsI.js} +2 -2
  134. package/dist/_chunks/{practice-results-DxOgbPDy.js.map → practice-results-CfRkjzsI.js.map} +1 -1
  135. package/dist/_chunks/{pregnancy-dating-R3q5n1Wh.js → pregnancy-dating-BFzv9g1N.js} +3 -3
  136. package/dist/_chunks/{pregnancy-dating-R3q5n1Wh.js.map → pregnancy-dating-BFzv9g1N.js.map} +1 -1
  137. package/dist/_chunks/{pregnancy-weight-gain-DwmNklDU.js → pregnancy-weight-gain-CUUrBTBo.js} +2 -2
  138. package/dist/_chunks/{pregnancy-weight-gain-DwmNklDU.js.map → pregnancy-weight-gain-CUUrBTBo.js.map} +1 -1
  139. package/dist/_chunks/{product-hub-panel-BSSiGGG4.js → product-hub-panel-DlVRK7Ue.js} +103 -96
  140. package/dist/_chunks/product-hub-panel-DlVRK7Ue.js.map +1 -0
  141. package/dist/_chunks/{public-footer-CxpG6J1M.js → public-footer-ZWTEG1Rq.js} +2 -2
  142. package/dist/_chunks/{public-footer-CxpG6J1M.js.map → public-footer-ZWTEG1Rq.js.map} +1 -1
  143. package/dist/_chunks/{public-header.agent-BWusjxY8.js → public-header.agent-BctevbuY.js} +2 -2
  144. package/dist/_chunks/{public-header.agent-BWusjxY8.js.map → public-header.agent-BctevbuY.js.map} +1 -1
  145. package/dist/_chunks/{radio-group-BT97ty7o.js → radio-group-DicxWJXP.js} +111 -106
  146. package/dist/_chunks/radio-group-DicxWJXP.js.map +1 -0
  147. package/dist/_chunks/{radiograph-panel.agent-BA90I3Mu.js → radiograph-panel.agent-DyqbTECc.js} +4 -4
  148. package/dist/_chunks/{radiograph-panel.agent-BA90I3Mu.js.map → radiograph-panel.agent-DyqbTECc.js.map} +1 -1
  149. package/dist/_chunks/{registration-form-D7iNqMBF.js → registration-form-BlTzYywa.js} +2 -2
  150. package/dist/_chunks/{registration-form-D7iNqMBF.js.map → registration-form-BlTzYywa.js.map} +1 -1
  151. package/dist/_chunks/{rich-text-editor-Blp4smUr.js → rich-text-editor-DTnNZ4Ff.js} +489 -484
  152. package/dist/_chunks/rich-text-editor-DTnNZ4Ff.js.map +1 -0
  153. package/dist/_chunks/{sheet-CNFW8mYZ.js → sheet-8qsiMoUI.js} +95 -79
  154. package/dist/_chunks/sheet-8qsiMoUI.js.map +1 -0
  155. package/dist/_chunks/{sign-document-B6HlyCGV.js → sign-document-D4iHS_Ug.js} +2 -2
  156. package/dist/_chunks/{sign-document-B6HlyCGV.js.map → sign-document-D4iHS_Ug.js.map} +1 -1
  157. package/dist/_chunks/{signature-request-rgMsgo-C.js → signature-request-DRuYAG5I.js} +2 -2
  158. package/dist/_chunks/{signature-request-rgMsgo-C.js.map → signature-request-DRuYAG5I.js.map} +1 -1
  159. package/dist/_chunks/{signed-out-frame-B2GTIeqA.js → signed-out-frame-AhMsNW1r.js} +2 -2
  160. package/dist/_chunks/{signed-out-frame-B2GTIeqA.js.map → signed-out-frame-AhMsNW1r.js.map} +1 -1
  161. package/dist/_chunks/{stat-51CDL4au.js → stat-DmjGfXND.js} +117 -108
  162. package/dist/_chunks/stat-DmjGfXND.js.map +1 -0
  163. package/dist/_chunks/{stepper-accordion-D7lnBGh2.js → stepper-accordion-DDTSOUHc.js} +17 -6
  164. package/dist/_chunks/stepper-accordion-DDTSOUHc.js.map +1 -0
  165. package/dist/_chunks/{task-editor-Ctxsa1BY.js → task-editor-NkcopDna.js} +4 -4
  166. package/dist/_chunks/{task-editor-Ctxsa1BY.js.map → task-editor-NkcopDna.js.map} +1 -1
  167. package/dist/_chunks/{use-appointment-details-read-DinTrRIW.js → use-appointment-details-read-CfFQNOF_.js} +5 -5
  168. package/dist/_chunks/{use-appointment-details-read-DinTrRIW.js.map → use-appointment-details-read-CfFQNOF_.js.map} +1 -1
  169. package/dist/_chunks/use-select-on-arrow-Cr4iBuW5.js +26 -0
  170. package/dist/_chunks/use-select-on-arrow-Cr4iBuW5.js.map +1 -0
  171. package/dist/_chunks/{voice-control-panel-Bg1eklL0.js → voice-control-panel-BKbgb7FM.js} +2 -2
  172. package/dist/_chunks/{voice-control-panel-Bg1eklL0.js.map → voice-control-panel-BKbgb7FM.js.map} +1 -1
  173. package/dist/_chunks/{widget-picker-D8RiWrJd.js → widget-picker-rBA7MR5P.js} +2 -2
  174. package/dist/_chunks/{widget-picker-D8RiWrJd.js.map → widget-picker-rBA7MR5P.js.map} +1 -1
  175. package/dist/_chunks/{workflow-map-D3mezmGB.js → workflow-map-Demlpy39.js} +2 -2
  176. package/dist/_chunks/{workflow-map-D3mezmGB.js.map → workflow-map-Demlpy39.js.map} +1 -1
  177. package/dist/agent-catalog.json +28 -11
  178. package/dist/agent-i18n/en.json +8 -7
  179. package/dist/components/_shared/non-modal-tab-exit.d.ts +19 -0
  180. package/dist/components/_shared/non-modal-tab-exit.d.ts.map +1 -0
  181. package/dist/components/_shared/use-apex-chart-semantics.d.ts +6 -0
  182. package/dist/components/_shared/use-apex-chart-semantics.d.ts.map +1 -0
  183. package/dist/components/_shared/use-select-on-arrow.d.ts +20 -0
  184. package/dist/components/_shared/use-select-on-arrow.d.ts.map +1 -0
  185. package/dist/components/ai-credits-notice/index.js +1 -1
  186. package/dist/components/ai-permission-notice/ai-permission-notice.d.ts +32 -0
  187. package/dist/components/ai-permission-notice/ai-permission-notice.d.ts.map +1 -1
  188. package/dist/components/ai-permission-notice/index.d.ts +1 -1
  189. package/dist/components/ai-permission-notice/index.d.ts.map +1 -1
  190. package/dist/components/ai-permission-notice/index.js +1 -1
  191. package/dist/components/appointment-details-panel/index.js +1 -1
  192. package/dist/components/appointment-peek/index.js +1 -1
  193. package/dist/components/appointment-timeline/index.js +1 -1
  194. package/dist/components/bmi-calculator/index.js +1 -1
  195. package/dist/components/booking/index.js +1 -1
  196. package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -1
  197. package/dist/components/breadcrumb/index.js +1 -1
  198. package/dist/components/calculator-dialog/index.js +1 -1
  199. package/dist/components/care-plan-card/index.js +1 -1
  200. package/dist/components/care-plan-header/index.js +1 -1
  201. package/dist/components/chart/chart.d.ts +15 -10
  202. package/dist/components/chart/chart.d.ts.map +1 -1
  203. package/dist/components/chart/index.js +1 -1
  204. package/dist/components/clinical-note-card/index.js +1 -1
  205. package/dist/components/color-picker/color-picker.d.ts.map +1 -1
  206. package/dist/components/color-picker/index.js +1 -1
  207. package/dist/components/contact-card/index.js +1 -1
  208. package/dist/components/contact-profile-card/index.js +1 -1
  209. package/dist/components/cycle-calculator/index.js +1 -1
  210. package/dist/components/dashboard-grid/dashboard-grid-engine.d.ts +22 -0
  211. package/dist/components/dashboard-grid/dashboard-grid-engine.d.ts.map +1 -1
  212. package/dist/components/dashboard-grid/dashboard-grid.agent.d.ts.map +1 -1
  213. package/dist/components/dashboard-grid/dashboard-grid.d.ts +48 -4
  214. package/dist/components/dashboard-grid/dashboard-grid.d.ts.map +1 -1
  215. package/dist/components/dashboard-grid/index.js +1 -1
  216. package/dist/components/data-table/index.js +2 -2
  217. package/dist/components/data-table-tabs/index.js +1 -1
  218. package/dist/components/date-picker/date-picker.d.ts.map +1 -1
  219. package/dist/components/date-picker/index.js +1 -1
  220. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
  221. package/dist/components/date-range-picker/index.js +1 -1
  222. package/dist/components/date-time-picker/date-time-picker.d.ts.map +1 -1
  223. package/dist/components/date-time-picker/index.js +1 -1
  224. package/dist/components/dependent-selector/dependent-selector.d.ts.map +1 -1
  225. package/dist/components/dependent-selector/index.js +1 -1
  226. package/dist/components/dialog/dialog.d.ts +2 -2
  227. package/dist/components/dialog/dialog.d.ts.map +1 -1
  228. package/dist/components/dialog/index.js +1 -1
  229. package/dist/components/document-preview/index.js +1 -1
  230. package/dist/components/due-date-calculator/index.js +1 -1
  231. package/dist/components/entity-summary/index.js +1 -1
  232. package/dist/components/file-manager/index.js +1 -1
  233. package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +1 -1
  234. package/dist/components/freemium-paywall/index.js +1 -1
  235. package/dist/components/gestational-age-calculator/index.js +1 -1
  236. package/dist/components/hcg-doubling/index.js +1 -1
  237. package/dist/components/header-settings/index.js +1 -1
  238. package/dist/components/heatmap/index.js +1 -1
  239. package/dist/components/hover-card/hover-card.d.ts.map +1 -1
  240. package/dist/components/hover-card/index.js +1 -1
  241. package/dist/components/icon-picker/index.js +1 -1
  242. package/dist/components/info-tip/index.js +1 -1
  243. package/dist/components/key-value-pair/index.js +1 -1
  244. package/dist/components/key-value-pair/key-value-pair.d.ts.map +1 -1
  245. package/dist/components/link/index.js +1 -1
  246. package/dist/components/link/link.d.ts +5 -3
  247. package/dist/components/link/link.d.ts.map +1 -1
  248. package/dist/components/locale-picker/index.js +1 -1
  249. package/dist/components/message-tray/index.js +1 -1
  250. package/dist/components/message-tray/message-tray.d.ts.map +1 -1
  251. package/dist/components/nav-grid/index.js +1 -1
  252. package/dist/components/note-timeline/index.js +1 -1
  253. package/dist/components/notes-panel/index.js +1 -1
  254. package/dist/components/notification-tray/index.js +1 -1
  255. package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
  256. package/dist/components/patient-details/index.js +1 -1
  257. package/dist/components/patient-summary-card/index.js +1 -1
  258. package/dist/components/patient-summary-card/patient-summary-card.d.ts.map +1 -1
  259. package/dist/components/patient-table/index.js +1 -1
  260. package/dist/components/payment-card/index.js +1 -1
  261. package/dist/components/pdf-viewer/index.js +1 -1
  262. package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  263. package/dist/components/periodontal-chart/index.js +1 -1
  264. package/dist/components/periodontal-chart-card/index.js +1 -1
  265. package/dist/components/periodontal-diagnosis/index.js +1 -1
  266. package/dist/components/phone-input/index.js +1 -1
  267. package/dist/components/phone-input/phone-input.d.ts.map +1 -1
  268. package/dist/components/popover/index.js +1 -1
  269. package/dist/components/popover/popover.d.ts +1 -1
  270. package/dist/components/popover/popover.d.ts.map +1 -1
  271. package/dist/components/position-grid/index.js +1 -1
  272. package/dist/components/position-grid/position-grid.d.ts.map +1 -1
  273. package/dist/components/practice-results/index.js +1 -1
  274. package/dist/components/pregnancy-dating/index.js +1 -1
  275. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  276. package/dist/components/product-hub-tray/index.js +1 -1
  277. package/dist/components/product-hub-tray/product-hub-tray.d.ts.map +1 -1
  278. package/dist/components/public-footer/index.js +1 -1
  279. package/dist/components/public-header/index.js +1 -1
  280. package/dist/components/radio-group/index.js +1 -1
  281. package/dist/components/radio-group/radio-group.d.ts.map +1 -1
  282. package/dist/components/radiograph-panel/index.js +1 -1
  283. package/dist/components/rich-text-editor/editor-toolbar.d.ts.map +1 -1
  284. package/dist/components/rich-text-editor/index.js +2 -2
  285. package/dist/components/sheet/index.js +1 -1
  286. package/dist/components/sheet/sheet.d.ts +2 -2
  287. package/dist/components/sheet/sheet.d.ts.map +1 -1
  288. package/dist/components/sign-document/index.js +1 -1
  289. package/dist/components/stat/index.d.ts +1 -1
  290. package/dist/components/stat/index.d.ts.map +1 -1
  291. package/dist/components/stat/index.js +1 -1
  292. package/dist/components/stat/stat.d.ts +9 -0
  293. package/dist/components/stat/stat.d.ts.map +1 -1
  294. package/dist/components/stepper-accordion/index.js +1 -1
  295. package/dist/components/stepper-accordion/stepper-accordion.d.ts.map +1 -1
  296. package/dist/components/task-editor/index.js +1 -1
  297. package/dist/components/voice-control-panel/index.js +1 -1
  298. package/dist/components/widget-picker/index.js +1 -1
  299. package/dist/components/workflow/index.js +1 -1
  300. package/dist/host-legacy.css +13 -2
  301. package/dist/i18n/locales/ar.d.ts +17 -2
  302. package/dist/i18n/locales/ar.d.ts.map +1 -1
  303. package/dist/i18n/locales/ar.js +20 -5
  304. package/dist/i18n/locales/ar.js.map +1 -1
  305. package/dist/i18n/locales/de.d.ts +17 -2
  306. package/dist/i18n/locales/de.d.ts.map +1 -1
  307. package/dist/i18n/locales/de.js +20 -5
  308. package/dist/i18n/locales/de.js.map +1 -1
  309. package/dist/i18n/locales/el.d.ts +17 -2
  310. package/dist/i18n/locales/el.d.ts.map +1 -1
  311. package/dist/i18n/locales/el.js +20 -5
  312. package/dist/i18n/locales/el.js.map +1 -1
  313. package/dist/i18n/locales/en.d.ts +17 -2
  314. package/dist/i18n/locales/en.d.ts.map +1 -1
  315. package/dist/i18n/locales/en.js +20 -5
  316. package/dist/i18n/locales/en.js.map +1 -1
  317. package/dist/i18n/locales/es.d.ts +17 -2
  318. package/dist/i18n/locales/es.d.ts.map +1 -1
  319. package/dist/i18n/locales/es.js +20 -5
  320. package/dist/i18n/locales/es.js.map +1 -1
  321. package/dist/i18n/locales/fr.d.ts +17 -2
  322. package/dist/i18n/locales/fr.d.ts.map +1 -1
  323. package/dist/i18n/locales/fr.js +20 -5
  324. package/dist/i18n/locales/fr.js.map +1 -1
  325. package/dist/i18n/locales/hi.d.ts +17 -2
  326. package/dist/i18n/locales/hi.d.ts.map +1 -1
  327. package/dist/i18n/locales/hi.js +20 -5
  328. package/dist/i18n/locales/hi.js.map +1 -1
  329. package/dist/i18n/locales/it.d.ts +17 -2
  330. package/dist/i18n/locales/it.d.ts.map +1 -1
  331. package/dist/i18n/locales/it.js +20 -5
  332. package/dist/i18n/locales/it.js.map +1 -1
  333. package/dist/i18n/locales/ja.d.ts +17 -2
  334. package/dist/i18n/locales/ja.d.ts.map +1 -1
  335. package/dist/i18n/locales/ja.js +20 -5
  336. package/dist/i18n/locales/ja.js.map +1 -1
  337. package/dist/i18n/locales/nl.d.ts +17 -2
  338. package/dist/i18n/locales/nl.d.ts.map +1 -1
  339. package/dist/i18n/locales/nl.js +20 -5
  340. package/dist/i18n/locales/nl.js.map +1 -1
  341. package/dist/i18n/locales/pl.d.ts +17 -2
  342. package/dist/i18n/locales/pl.d.ts.map +1 -1
  343. package/dist/i18n/locales/pl.js +20 -5
  344. package/dist/i18n/locales/pl.js.map +1 -1
  345. package/dist/i18n/locales/pt.d.ts +17 -2
  346. package/dist/i18n/locales/pt.d.ts.map +1 -1
  347. package/dist/i18n/locales/pt.js +20 -5
  348. package/dist/i18n/locales/pt.js.map +1 -1
  349. package/dist/i18n/locales/ro.d.ts +17 -2
  350. package/dist/i18n/locales/ro.d.ts.map +1 -1
  351. package/dist/i18n/locales/ro.js +20 -5
  352. package/dist/i18n/locales/ro.js.map +1 -1
  353. package/dist/i18n/locales/ru.d.ts +17 -2
  354. package/dist/i18n/locales/ru.d.ts.map +1 -1
  355. package/dist/i18n/locales/ru.js +20 -5
  356. package/dist/i18n/locales/ru.js.map +1 -1
  357. package/dist/i18n/locales/sq.d.ts +17 -2
  358. package/dist/i18n/locales/sq.d.ts.map +1 -1
  359. package/dist/i18n/locales/sq.js +20 -5
  360. package/dist/i18n/locales/sq.js.map +1 -1
  361. package/dist/i18n/locales/sv.d.ts +17 -2
  362. package/dist/i18n/locales/sv.d.ts.map +1 -1
  363. package/dist/i18n/locales/sv.js +20 -5
  364. package/dist/i18n/locales/sv.js.map +1 -1
  365. package/dist/i18n/locales/tr.d.ts +17 -2
  366. package/dist/i18n/locales/tr.d.ts.map +1 -1
  367. package/dist/i18n/locales/tr.js +20 -5
  368. package/dist/i18n/locales/tr.js.map +1 -1
  369. package/dist/i18n/locales/zh.d.ts +17 -2
  370. package/dist/i18n/locales/zh.d.ts.map +1 -1
  371. package/dist/i18n/locales/zh.js +20 -5
  372. package/dist/i18n/locales/zh.js.map +1 -1
  373. package/dist/index.js +207 -206
  374. package/dist/locales/ar.json +20 -5
  375. package/dist/locales/de.json +20 -5
  376. package/dist/locales/el.json +20 -5
  377. package/dist/locales/en.json +20 -5
  378. package/dist/locales/es.json +20 -5
  379. package/dist/locales/fr.json +20 -5
  380. package/dist/locales/hi.json +20 -5
  381. package/dist/locales/it.json +20 -5
  382. package/dist/locales/ja.json +20 -5
  383. package/dist/locales/nl.json +20 -5
  384. package/dist/locales/pl.json +20 -5
  385. package/dist/locales/pt.json +20 -5
  386. package/dist/locales/ro.json +20 -5
  387. package/dist/locales/ru.json +20 -5
  388. package/dist/locales/sq.json +20 -5
  389. package/dist/locales/sv.json +20 -5
  390. package/dist/locales/tr.json +20 -5
  391. package/dist/locales/zh.json +20 -5
  392. package/dist/patterns/alia-assistant/alia-asteroid-icon.d.ts +10 -13
  393. package/dist/patterns/alia-assistant/alia-asteroid-icon.d.ts.map +1 -1
  394. package/dist/patterns/alia-assistant/alia-chat-surface.d.ts.map +1 -1
  395. package/dist/patterns/alia-assistant/alia-popout.d.ts +5 -3
  396. package/dist/patterns/alia-assistant/alia-popout.d.ts.map +1 -1
  397. package/dist/patterns/alia-assistant/index.d.ts +2 -0
  398. package/dist/patterns/alia-assistant/index.d.ts.map +1 -1
  399. package/dist/patterns/alia-assistant/index.js +6 -5
  400. package/dist/patterns/anamnesis/index.js +1 -1
  401. package/dist/patterns/calendar/index.js +1 -1
  402. package/dist/patterns/help-me-write-templates/help-me-write-templates.d.ts +2 -2
  403. package/dist/patterns/help-me-write-templates/help-me-write-templates.d.ts.map +1 -1
  404. package/dist/patterns/help-me-write-templates/index.js +1 -1
  405. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  406. package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts +7 -2
  407. package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts.map +1 -1
  408. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  409. package/dist/patterns/registration-form/index.js +1 -1
  410. package/dist/patterns/signature-request/index.js +1 -1
  411. package/dist/patterns/signed-out-frame/index.js +1 -1
  412. package/dist/tokens.css +13 -2
  413. package/package.json +1 -1
  414. package/dist/_chunks/ai-permission-notice-5vpblPCx.js +0 -171
  415. package/dist/_chunks/ai-permission-notice-5vpblPCx.js.map +0 -1
  416. package/dist/_chunks/alia-sidebar-DS0b54Mv.js +0 -1183
  417. package/dist/_chunks/alia-sidebar-DS0b54Mv.js.map +0 -1
  418. package/dist/_chunks/breadcrumb-xgVpPH2H.js.map +0 -1
  419. package/dist/_chunks/chart-C2RBJERE.js +0 -705
  420. package/dist/_chunks/chart-C2RBJERE.js.map +0 -1
  421. package/dist/_chunks/color-picker-BRQ4Y9SO.js.map +0 -1
  422. package/dist/_chunks/dashboard-grid-SAGoyCtL.js +0 -691
  423. package/dist/_chunks/dashboard-grid-SAGoyCtL.js.map +0 -1
  424. package/dist/_chunks/date-picker-wRAcq2lt.js.map +0 -1
  425. package/dist/_chunks/date-range-picker-BOvHwWO5.js.map +0 -1
  426. package/dist/_chunks/date-time-picker-CLeLKuv9.js.map +0 -1
  427. package/dist/_chunks/dependent-selector-Bet3XAFj.js.map +0 -1
  428. package/dist/_chunks/dialog-D52AI4nF.js.map +0 -1
  429. package/dist/_chunks/freemium-paywall-B6ojVXq7.js.map +0 -1
  430. package/dist/_chunks/help-me-write-templates-B7L3zGsE.js.map +0 -1
  431. package/dist/_chunks/hover-card-BnTueNS2.js.map +0 -1
  432. package/dist/_chunks/key-value-pair-Ax8IJr1M.js.map +0 -1
  433. package/dist/_chunks/link-2HokYuIi.js +0 -130
  434. package/dist/_chunks/link-2HokYuIi.js.map +0 -1
  435. package/dist/_chunks/marketplace-app-shell-Dcx-JEjg.js.map +0 -1
  436. package/dist/_chunks/message-tray-BB95DA82.js.map +0 -1
  437. package/dist/_chunks/notification-tray-__sJXnsz.js.map +0 -1
  438. package/dist/_chunks/pdf-viewer-C3minW5b.js.map +0 -1
  439. package/dist/_chunks/phone-input-DxkHMYmu.js.map +0 -1
  440. package/dist/_chunks/popover-BI3oV3eY.js +0 -305
  441. package/dist/_chunks/popover-BI3oV3eY.js.map +0 -1
  442. package/dist/_chunks/position-grid-D2D5_Tze.js.map +0 -1
  443. package/dist/_chunks/product-hub-panel-BSSiGGG4.js.map +0 -1
  444. package/dist/_chunks/radio-group-BT97ty7o.js.map +0 -1
  445. package/dist/_chunks/rich-text-editor-Blp4smUr.js.map +0 -1
  446. package/dist/_chunks/sheet-CNFW8mYZ.js.map +0 -1
  447. package/dist/_chunks/stat-51CDL4au.js.map +0 -1
  448. package/dist/_chunks/stepper-accordion-D7lnBGh2.js.map +0 -1
@@ -1,305 +0,0 @@
1
- import { jsx as s, jsxs as X } from "react/jsx-runtime";
2
- import { useState as C, useCallback as g, useRef as z, useEffect as h, useMemo as q, forwardRef as f, useId as D, useContext as u, createContext as N } from "react";
3
- import * as p from "@radix-ui/react-popover";
4
- import { c as G } from "./index-D2ZczOXr.js";
5
- import { useTranslation as J } from "react-i18next";
6
- import { I as Q } from "./icon-button-COX76Jdj.js";
7
- import { u as U } from "./registry-DvAUVLHh.js";
8
- import { X as Y } from "./x-B5YnXwCz.js";
9
- const Z = {
10
- id: "popover",
11
- capabilities: ["open", "close"],
12
- state: {
13
- isOpen: {
14
- type: "boolean",
15
- descriptionKey: "ui.agent.popover.state.isOpen",
16
- description: "True when the popover is currently open.",
17
- read: (e) => e.getIsOpen()
18
- }
19
- },
20
- actions: {
21
- open: {
22
- safety: "read",
23
- idempotent: !0,
24
- descriptionKey: "ui.agent.popover.actions.open",
25
- description: "Open the popover.",
26
- invoke: (e) => {
27
- e.open();
28
- }
29
- },
30
- close: {
31
- safety: "read",
32
- idempotent: !0,
33
- descriptionKey: "ui.agent.popover.actions.close",
34
- description: "Close the popover.",
35
- invoke: (e) => {
36
- e.close();
37
- }
38
- }
39
- },
40
- domHooks: {
41
- root: { attr: "data-component", value: "popover" },
42
- instanceId: {
43
- attr: "data-component-id",
44
- sourceProp: "id",
45
- description: "Sourced from the id prop on Popover.Root."
46
- }
47
- }
48
- }, y = N({
49
- headingId: void 0,
50
- setHeadingId: () => {
51
- },
52
- descriptionId: void 0,
53
- setDescriptionId: () => {
54
- }
55
- }), k = N({
56
- isHoverMode: !1,
57
- clearHoverTimer: () => {
58
- },
59
- closeWithDelay: () => {
60
- }
61
- });
62
- function _(e) {
63
- if (e === "top" || e === "bottom") return e;
64
- const o = typeof document < "u" && document.documentElement.dir === "rtl";
65
- return e === "start" ? o ? "right" : "left" : o ? "left" : "right";
66
- }
67
- const $ = G(
68
- [
69
- // `--card-border` 32% alpha provides a subtle edge that survives dark
70
- // without becoming a heavy outline. The previous transparent border
71
- // relied on the drop-shadow alone, which reads as a faint halo against
72
- // dark surfaces and lets the popover float as an unbounded blob; the
73
- // earlier heavy `--border` (grey-800 since WCAG 1.4.11 bump in 67fef8c)
74
- // overcorrected the other way and made the popover read as a charcoal
75
- // box. The forced-colors override below upgrades the border to
76
- // `CanvasText` so HCM still repaints a fully visible edge.
77
- "ds:relative ds:bg-[var(--popover)] ds:border ds:border-[color:var(--card-border)] ds:rounded-[var(--radius-md)]",
78
- "ds:p-[var(--spacing-md)]",
79
- "ds:shadow-[var(--shadow-lg)]",
80
- "ds:z-[var(--z-popover)]",
81
- "ds:text-[var(--popover-foreground)] ds:text-[length:var(--font-size-sm)]",
82
- "ds:break-words",
83
- "ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out",
84
- "ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0",
85
- "ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95",
86
- "ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2",
87
- "ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2",
88
- "ds:motion-reduce:transition-none ds:motion-reduce:animate-none",
89
- "ds:forced-colors:border-[CanvasText]",
90
- "ds:focus-visible:outline-none"
91
- ].join(" "),
92
- {
93
- variants: {
94
- size: {
95
- sm: "ds:max-w-[var(--popover-size-sm)]",
96
- md: "ds:max-w-[var(--popover-size-md)]",
97
- lg: "ds:max-w-[var(--popover-size-lg)]"
98
- }
99
- },
100
- defaultVariants: {
101
- size: "md"
102
- }
103
- }
104
- ), M = N(void 0);
105
- function T({
106
- openOn: e = "click",
107
- children: o,
108
- id: r,
109
- open: i,
110
- onOpenChange: t,
111
- defaultOpen: c,
112
- modal: P
113
- }) {
114
- const [b, I] = C(c ?? !1), m = i !== void 0, l = m ? i : b, n = g(
115
- (w) => {
116
- m || I(w), t == null || t(w);
117
- },
118
- [m, t]
119
- ), d = z(null), v = e === "hover" || e === "hover-or-click", a = g(() => {
120
- d.current && (clearTimeout(d.current), d.current = null);
121
- }, []), H = g(() => {
122
- a(), d.current = setTimeout(() => {
123
- n(!0);
124
- }, 300);
125
- }, [a, n]), x = g(() => {
126
- a(), d.current = setTimeout(() => {
127
- n(!1);
128
- }, 300);
129
- }, [a, n]);
130
- h(() => () => a(), [a]);
131
- const R = z(l);
132
- h(() => {
133
- R.current = l;
134
- }, [l]);
135
- const W = q(
136
- () => ({
137
- getIsOpen: () => R.current,
138
- open: () => n(!0),
139
- close: () => n(!1)
140
- }),
141
- [n]
142
- );
143
- U(Z, W, r);
144
- const [K, F] = C(void 0), [L, V] = C(
145
- void 0
146
- ), S = v ? {
147
- onMouseEnter: H,
148
- onMouseLeave: x,
149
- onFocus: () => {
150
- a(), n(!0);
151
- },
152
- onBlur: x
153
- } : {};
154
- return /* @__PURE__ */ s(M.Provider, { value: r, children: /* @__PURE__ */ s(
155
- y.Provider,
156
- {
157
- value: { headingId: K, setHeadingId: F, descriptionId: L, setDescriptionId: V },
158
- children: /* @__PURE__ */ s(
159
- k.Provider,
160
- {
161
- value: { isHoverMode: v, clearHoverTimer: a, closeWithDelay: x },
162
- children: /* @__PURE__ */ s(
163
- p.Root,
164
- {
165
- open: l,
166
- onOpenChange: n,
167
- modal: P,
168
- children: v ? /* @__PURE__ */ s("span", { className: "ds:inline-flex", ...S, children: o }) : o
169
- }
170
- )
171
- }
172
- )
173
- }
174
- ) });
175
- }
176
- T.displayName = "Popover.Root";
177
- const j = f(({ children: e, ...o }, r) => /* @__PURE__ */ s(p.Trigger, { ref: r, ...o, children: e }));
178
- j.displayName = "Popover.Trigger";
179
- const A = f(
180
- ({
181
- side: e = "bottom",
182
- align: o = "center",
183
- size: r = "md",
184
- showArrow: i = !0,
185
- className: t,
186
- children: c,
187
- ...P
188
- }, b) => {
189
- const { headingId: I, descriptionId: m } = u(y), l = u(M), {
190
- isHoverMode: n,
191
- clearHoverTimer: d,
192
- closeWithDelay: v
193
- } = u(k), a = _(e), H = n ? {
194
- onMouseEnter: d,
195
- onMouseLeave: v,
196
- onFocus: d,
197
- onBlur: v
198
- } : {};
199
- return /* @__PURE__ */ s(p.Portal, { children: /* @__PURE__ */ X(
200
- p.Content,
201
- {
202
- ref: b,
203
- side: a,
204
- align: o,
205
- sideOffset: 8,
206
- collisionPadding: 8,
207
- "aria-labelledby": I,
208
- "aria-describedby": m,
209
- className: $({ size: r, className: t }),
210
- "data-component": "popover",
211
- "data-component-id": l,
212
- ...H,
213
- ...P,
214
- children: [
215
- c,
216
- i && /* @__PURE__ */ s(
217
- p.Arrow,
218
- {
219
- width: 12,
220
- height: 6,
221
- className: "ds:fill-[var(--popover)]"
222
- }
223
- )
224
- ]
225
- }
226
- ) });
227
- }
228
- );
229
- A.displayName = "Popover.Content";
230
- const B = f(
231
- ({ className: e }, o) => {
232
- const { t: r } = J("ui");
233
- return /* @__PURE__ */ s(
234
- "div",
235
- {
236
- className: [
237
- "ds:absolute ds:top-[var(--spacing-sm)] ds:end-[var(--spacing-sm)]",
238
- e
239
- ].filter(Boolean).join(" "),
240
- children: /* @__PURE__ */ s(p.Close, { asChild: !0, children: /* @__PURE__ */ s(
241
- Q,
242
- {
243
- ref: o,
244
- icon: /* @__PURE__ */ s(Y, {}),
245
- intent: "ghost",
246
- size: "sm",
247
- "aria-label": r("common.close", "Close")
248
- }
249
- ) })
250
- }
251
- );
252
- }
253
- );
254
- B.displayName = "Popover.Close";
255
- const E = f(
256
- ({ as: e = "h3", className: o, ...r }, i) => {
257
- const t = D(), { setHeadingId: c } = u(y);
258
- return h(() => (c(t), () => c(void 0)), [t, c]), /* @__PURE__ */ s(
259
- e,
260
- {
261
- ref: i,
262
- id: t,
263
- className: [
264
- "type-title-item ds:leading-snug ds:break-words",
265
- "ds:pe-[var(--spacing-xl)]",
266
- o
267
- ].filter(Boolean).join(" "),
268
- ...r
269
- }
270
- );
271
- }
272
- );
273
- E.displayName = "Popover.Heading";
274
- const O = f(({ className: e, ...o }, r) => {
275
- const i = D(), { setDescriptionId: t } = u(y);
276
- return h(() => (t(i), () => t(void 0)), [i, t]), /* @__PURE__ */ s(
277
- "div",
278
- {
279
- ref: r,
280
- id: i,
281
- className: [
282
- "ds:text-[var(--muted-foreground)] type-body-sm ds:mt-[var(--spacing-xs)]",
283
- e
284
- ].filter(Boolean).join(" "),
285
- ...o
286
- }
287
- );
288
- });
289
- O.displayName = "Popover.Description";
290
- const ae = Object.assign(T, {
291
- Root: T,
292
- Trigger: j,
293
- // Radix pass-through: position Content against an arbitrary element when a
294
- // Trigger button is unsuitable (e.g. anchoring an editor to a role=tab).
295
- Anchor: p.Anchor,
296
- Content: A,
297
- Close: B,
298
- Heading: E,
299
- Description: O
300
- });
301
- export {
302
- ae as P,
303
- Z as p
304
- };
305
- //# sourceMappingURL=popover-BI3oV3eY.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"popover-BI3oV3eY.js","sources":["../../src/components/popover/popover.agent.ts","../../src/components/popover/popover.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { PopoverHandle } from './popover';\n\nexport const popoverAgent: AgentAdapter<PopoverHandle> = {\n id: 'popover',\n capabilities: ['open', 'close'],\n state: {\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.popover.state.isOpen',\n description: 'True when the popover is currently open.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.popover.actions.open',\n description: 'Open the popover.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.popover.actions.close',\n description: 'Close the popover.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'popover' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on Popover.Root.',\n },\n },\n};\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { X } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { useAgentRegistration } from '../../agent';\nimport { popoverAgent } from './popover.agent';\n\ninterface PopoverA11yContext {\n headingId: string | undefined;\n setHeadingId: (id: string | undefined) => void;\n descriptionId: string | undefined;\n setDescriptionId: (id: string | undefined) => void;\n}\n\nconst A11yContext = createContext<PopoverA11yContext>({\n headingId: undefined,\n setHeadingId: () => {},\n descriptionId: undefined,\n setDescriptionId: () => {},\n});\n\ninterface PopoverHoverContext {\n isHoverMode: boolean;\n clearHoverTimer: () => void;\n closeWithDelay: () => void;\n}\n\nconst HoverContext = createContext<PopoverHoverContext>({\n isHoverMode: false,\n clearHoverTimer: () => {},\n closeWithDelay: () => {},\n});\n\nfunction resolvePhysicalSide(\n logicalSide: 'start' | 'top' | 'end' | 'bottom',\n): 'left' | 'top' | 'right' | 'bottom' {\n if (logicalSide === 'top' || logicalSide === 'bottom') return logicalSide;\n const isRtl =\n typeof document !== 'undefined' && document.documentElement.dir === 'rtl';\n if (logicalSide === 'start') return isRtl ? 'right' : 'left';\n /* logicalSide === 'end' */\n return isRtl ? 'left' : 'right';\n}\n\nconst contentVariants = cva(\n [\n // `--card-border` 32% alpha provides a subtle edge that survives dark\n // without becoming a heavy outline. The previous transparent border\n // relied on the drop-shadow alone, which reads as a faint halo against\n // dark surfaces and lets the popover float as an unbounded blob; the\n // earlier heavy `--border` (grey-800 since WCAG 1.4.11 bump in 67fef8c)\n // overcorrected the other way and made the popover read as a charcoal\n // box. The forced-colors override below upgrades the border to\n // `CanvasText` so HCM still repaints a fully visible edge.\n 'ds:relative ds:bg-[var(--popover)] ds:border ds:border-[color:var(--card-border)] ds:rounded-[var(--radius-md)]',\n 'ds:p-[var(--spacing-md)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:z-[var(--z-popover)]',\n 'ds:text-[var(--popover-foreground)] ds:text-[length:var(--font-size-sm)]',\n 'ds:break-words',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0',\n 'ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95',\n 'ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2',\n 'ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2',\n 'ds:motion-reduce:transition-none ds:motion-reduce:animate-none',\n 'ds:forced-colors:border-[CanvasText]',\n 'ds:focus-visible:outline-none',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:max-w-[var(--popover-size-sm)]',\n md: 'ds:max-w-[var(--popover-size-md)]',\n lg: 'ds:max-w-[var(--popover-size-lg)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\n// Curated agent-readiness handle — see popover.agent.ts.\nexport interface PopoverHandle {\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n}\n\nexport interface PopoverRootProps extends ComponentPropsWithoutRef<\n typeof RadixPopover.Root\n> {\n openOn?: 'click' | 'hover' | 'hover-or-click';\n /** Opaque instance id — forwarded to Popover.Content as `data-component-id`. */\n id?: string;\n children: ReactNode;\n}\n\nconst PopoverIdContext = createContext<string | undefined>(undefined);\n\nfunction PopoverRoot({\n openOn = 'click',\n children,\n id,\n open: controlledOpen,\n onOpenChange,\n defaultOpen,\n modal,\n}: PopoverRootProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) setInternalOpen(nextOpen);\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n const hoverTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isHoverMode = openOn === 'hover' || openOn === 'hover-or-click';\n\n const clearHoverTimer = useCallback(() => {\n if (hoverTimerRef.current) {\n clearTimeout(hoverTimerRef.current);\n hoverTimerRef.current = null;\n }\n }, []);\n\n const openWithDelay = useCallback(() => {\n clearHoverTimer();\n hoverTimerRef.current = setTimeout(() => {\n handleOpenChange(true);\n }, 300);\n }, [clearHoverTimer, handleOpenChange]);\n\n const closeWithDelay = useCallback(() => {\n clearHoverTimer();\n hoverTimerRef.current = setTimeout(() => {\n handleOpenChange(false);\n }, 300);\n }, [clearHoverTimer, handleOpenChange]);\n\n useEffect(() => {\n return () => clearHoverTimer();\n }, [clearHoverTimer]);\n\n // Agent handle.\n const openRef = useRef(isOpen);\n useEffect(() => {\n openRef.current = isOpen;\n }, [isOpen]);\n\n const agentHandle = useMemo<PopoverHandle>(\n () => ({\n getIsOpen: () => openRef.current,\n open: () => handleOpenChange(true),\n close: () => handleOpenChange(false),\n }),\n [handleOpenChange],\n );\n useAgentRegistration(popoverAgent, agentHandle, id);\n\n /* a11y context state */\n const [headingId, setHeadingId] = useState<string | undefined>(undefined);\n const [descriptionId, setDescriptionId] = useState<string | undefined>(\n undefined,\n );\n\n const hoverHandlers = isHoverMode\n ? {\n onMouseEnter: openWithDelay,\n onMouseLeave: closeWithDelay,\n onFocus: () => {\n clearHoverTimer();\n handleOpenChange(true);\n },\n onBlur: closeWithDelay,\n }\n : {};\n\n return (\n <PopoverIdContext.Provider value={id}>\n <A11yContext.Provider\n value={{ headingId, setHeadingId, descriptionId, setDescriptionId }}\n >\n <HoverContext.Provider\n value={{ isHoverMode, clearHoverTimer, closeWithDelay }}\n >\n <RadixPopover.Root\n open={isOpen}\n onOpenChange={handleOpenChange}\n modal={modal}\n >\n {isHoverMode ? (\n <span className=\"ds:inline-flex\" {...hoverHandlers}>\n {children}\n </span>\n ) : (\n children\n )}\n </RadixPopover.Root>\n </HoverContext.Provider>\n </A11yContext.Provider>\n </PopoverIdContext.Provider>\n );\n}\nPopoverRoot.displayName = 'Popover.Root';\n\nconst PopoverTrigger = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof RadixPopover.Trigger>\n>(({ children, ...props }, ref) => (\n <RadixPopover.Trigger ref={ref} {...props}>\n {children}\n </RadixPopover.Trigger>\n));\nPopoverTrigger.displayName = 'Popover.Trigger';\n\nexport interface PopoverContentProps\n extends\n Omit<\n ComponentPropsWithoutRef<typeof RadixPopover.Content>,\n 'side' | 'align'\n >,\n VariantProps<typeof contentVariants> {\n side?: 'start' | 'top' | 'end' | 'bottom';\n align?: 'start' | 'center' | 'end';\n size?: 'sm' | 'md' | 'lg';\n showArrow?: boolean;\n className?: string;\n children: ReactNode;\n}\n\nconst PopoverContent = forwardRef<HTMLDivElement, PopoverContentProps>(\n (\n {\n side = 'bottom',\n align = 'center',\n size = 'md',\n showArrow = true,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const { headingId, descriptionId } = useContext(A11yContext);\n const instanceId = useContext(PopoverIdContext);\n const {\n isHoverMode: isHover,\n clearHoverTimer: cancelTimer,\n closeWithDelay: delayClose,\n } = useContext(HoverContext);\n const physicalSide = resolvePhysicalSide(side);\n\n const contentHoverHandlers = isHover\n ? {\n onMouseEnter: cancelTimer,\n onMouseLeave: delayClose,\n onFocus: cancelTimer,\n onBlur: delayClose,\n }\n : {};\n\n return (\n <RadixPopover.Portal>\n <RadixPopover.Content\n ref={ref}\n side={physicalSide}\n align={align}\n sideOffset={8}\n collisionPadding={8}\n aria-labelledby={headingId}\n aria-describedby={descriptionId}\n className={contentVariants({ size, className })}\n data-component=\"popover\"\n data-component-id={instanceId}\n {...contentHoverHandlers}\n {...props}\n >\n {children}\n {showArrow && (\n <RadixPopover.Arrow\n width={12}\n height={6}\n className=\"ds:fill-[var(--popover)]\"\n />\n )}\n </RadixPopover.Content>\n </RadixPopover.Portal>\n );\n },\n);\nPopoverContent.displayName = 'Popover.Content';\n\nconst PopoverClose = forwardRef<HTMLButtonElement, { className?: string }>(\n ({ className }, ref) => {\n const { t } = useTranslation('ui');\n\n return (\n <div\n className={[\n 'ds:absolute ds:top-[var(--spacing-sm)] ds:end-[var(--spacing-sm)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <RadixPopover.Close asChild>\n <IconButton\n ref={ref}\n icon={<X />}\n intent=\"ghost\"\n size=\"sm\"\n aria-label={t('common.close', 'Close')}\n />\n </RadixPopover.Close>\n </div>\n );\n },\n);\nPopoverClose.displayName = 'Popover.Close';\n\ninterface PopoverHeadingProps extends HTMLAttributes<HTMLHeadingElement> {\n as?: 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\n\nconst PopoverHeading = forwardRef<HTMLHeadingElement, PopoverHeadingProps>(\n ({ as: Tag = 'h3', className, ...props }, ref) => {\n const generatedId = useId();\n const { setHeadingId } = useContext(A11yContext);\n\n useEffect(() => {\n setHeadingId(generatedId);\n return () => setHeadingId(undefined);\n }, [generatedId, setHeadingId]);\n\n return (\n <Tag\n ref={ref}\n id={generatedId}\n className={[\n 'type-title-item ds:leading-snug ds:break-words',\n 'ds:pe-[var(--spacing-xl)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n );\n },\n);\nPopoverHeading.displayName = 'Popover.Heading';\n\n/**\n * The popover's description region.\n *\n * A `div`, not a `p`. A popover body routinely holds structured content —\n * the calendar's hover peek puts `KeyValuePair`s in here — and a `p` may\n * only contain phrasing content, so the browser silently closed the\n * paragraph and re-parented the rest. That breaks the DOM the\n * `aria-describedby` region points at, so the description a screen reader\n * announces was not the description on screen. React said so on every\n * open: \"validateDOMNesting: <div> cannot appear as a descendant of <p>\".\n *\n * The accessible wiring is by id, not by tag, so nothing about the\n * announcement depends on the element being a paragraph.\n */\nconst PopoverDescription = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const generatedId = useId();\n const { setDescriptionId } = useContext(A11yContext);\n\n useEffect(() => {\n setDescriptionId(generatedId);\n return () => setDescriptionId(undefined);\n }, [generatedId, setDescriptionId]);\n\n return (\n <div\n ref={ref}\n id={generatedId}\n className={[\n 'ds:text-[var(--muted-foreground)] type-body-sm ds:mt-[var(--spacing-xs)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n );\n});\nPopoverDescription.displayName = 'Popover.Description';\n\nexport const Popover = Object.assign(PopoverRoot, {\n Root: PopoverRoot,\n Trigger: PopoverTrigger,\n // Radix pass-through: position Content against an arbitrary element when a\n // Trigger button is unsuitable (e.g. anchoring an editor to a role=tab).\n Anchor: RadixPopover.Anchor,\n Content: PopoverContent,\n Close: PopoverClose,\n Heading: PopoverHeading,\n Description: PopoverDescription,\n});\n\nexport type { PopoverRootProps as PopoverProps, PopoverHeadingProps };\n"],"names":["popoverAgent","handle","A11yContext","createContext","HoverContext","resolvePhysicalSide","logicalSide","isRtl","contentVariants","cva","PopoverIdContext","PopoverRoot","openOn","children","id","controlledOpen","onOpenChange","defaultOpen","modal","internalOpen","setInternalOpen","useState","isControlled","isOpen","handleOpenChange","useCallback","nextOpen","hoverTimerRef","useRef","isHoverMode","clearHoverTimer","openWithDelay","closeWithDelay","useEffect","openRef","agentHandle","useMemo","useAgentRegistration","headingId","setHeadingId","descriptionId","setDescriptionId","hoverHandlers","jsx","RadixPopover","PopoverTrigger","forwardRef","props","ref","PopoverContent","side","align","size","showArrow","className","useContext","instanceId","isHover","cancelTimer","delayClose","physicalSide","contentHoverHandlers","jsxs","PopoverClose","t","useTranslation","IconButton","X","PopoverHeading","Tag","generatedId","useId","PopoverDescription","Popover"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"position-grid-D2D5_Tze.js","sources":["../../src/components/position-grid/position-grid.agent.ts","../../src/components/position-grid/position-grid.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — PositionGrid. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { PositionGridHandle } from './position-grid';\n\nexport const positionGridAgent: AgentAdapter<PositionGridHandle> = {\n id: 'position-grid',\n capabilities: ['select_single'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.positionGrid.state.value',\n description:\n 'Currently selected position value (e.g. \"top-start\"), or empty string when none.',\n read: (handle) => handle.getValue(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string }',\n argsSchema: {\n type: 'object',\n properties: { value: { type: 'string' } },\n required: ['value'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.positionGrid.actions.setValue',\n description: 'Select the cell with the given position value.',\n examples: [\n {\n args: { value: 'center' },\n note: 'Selects the centre cell of the default 3×3 grid.',\n },\n ],\n invoke: (handle, args: { value: string }) => {\n handle.setValue(args.value);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'position-grid',\n description: 'Marks the PositionGrid root.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description: 'Position value emitted on each rendered cell.',\n },\n },\n};\n","import { forwardRef, useMemo, useRef, useState } from 'react';\nimport * as RadixRadioGroup from '@radix-ui/react-radio-group';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useDirection } from '../_shared/use-direction';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { useAgentRegistration } from '../../agent';\nimport { positionGridAgent } from './position-grid.agent';\n\n/** Agent-readiness curated handle for PositionGrid. */\nexport interface PositionGridHandle {\n getValue: () => string;\n setValue: (value: string) => void;\n focus: () => void;\n}\n\n/** One selectable cell in the grid. */\nexport interface PositionGridOption {\n /** Stable value emitted on selection (logical, e.g. `top-start`). */\n value: string;\n /** Accessible name for the cell — sighted users read the dot's position. */\n label: string;\n}\n\nexport interface PositionGridProps {\n /** Controlled selected value. Pair with onChange. */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n /** Fires with the newly-selected value. */\n onChange?: (value: string) => void;\n /**\n * Override the default 9-cell set. When omitted, the default 3×3 anchor grid\n * renders with bundled `positionGrid.*` labels. Cells flow in array order\n * across the three columns.\n */\n positions?: PositionGridOption[];\n /** Native form name for the underlying radio group. */\n name?: string;\n /** Disables every cell. */\n disabled?: boolean;\n id?: string;\n className?: string;\n /** Group accessible name. Defaults to the bundled `positionGrid.groupLabel`. */\n 'aria-label'?: string;\n}\n\n/** Default 3×3 anchor set. `labelKey` resolves against the bundled\n * `positionGrid` i18n root; values use logical start/end naming (never\n * left/right), so the layout mirrors correctly under `dir=\"rtl\"`. */\nconst DEFAULT_POSITIONS: ReadonlyArray<{ value: string; labelKey: string }> = [\n { value: 'top-start', labelKey: 'topStart' },\n { value: 'top', labelKey: 'top' },\n { value: 'top-end', labelKey: 'topEnd' },\n { value: 'start', labelKey: 'start' },\n { value: 'center', labelKey: 'center' },\n { value: 'end', labelKey: 'end' },\n { value: 'bottom-start', labelKey: 'bottomStart' },\n { value: 'bottom', labelKey: 'bottom' },\n { value: 'bottom-end', labelKey: 'bottomEnd' },\n];\n\n// grid-cols-3 is intentional: the picker is a fixed-column anchor grid; custom\n// `positions` flow across the same three columns in array order.\nconst gridVariants = cva(\n 'ds:grid ds:grid-cols-3 ds:gap-[var(--spacing-2xs)] ds:w-fit',\n);\n\nconst cellVariants = cva(\n [\n 'ds:group ds:relative ds:inline-flex ds:items-center ds:justify-center ds:shrink-0',\n 'ds:aspect-square ds:min-h-[var(--min-target-size)] ds:min-w-[var(--min-target-size)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-background',\n 'ds:cursor-pointer',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:border-ring',\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:disabled:cursor-not-allowed ds:disabled:opacity-50',\n 'ds:data-[state=checked]:border-primary',\n 'ds:data-[state=checked]:bg-[color-mix(in_srgb,var(--accent)_8%,transparent)]',\n 'ds:data-[disabled]:border-muted',\n ].join(' '),\n);\n\nconst markerVariants = cva(\n [\n 'ds:size-2.5 ds:rounded-full ds:bg-muted-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:group-data-[state=checked]:bg-primary',\n 'ds:group-data-[disabled]:bg-muted',\n ].join(' '),\n);\n\nexport const PositionGrid = forwardRef<HTMLDivElement, PositionGridProps>(\n function PositionGrid(\n {\n value,\n defaultValue,\n onChange,\n positions,\n name,\n disabled,\n id,\n className,\n 'aria-label': ariaLabel,\n },\n ref,\n ) {\n const { t } = useTranslation('ui');\n\n const rootRef = useRef<HTMLDivElement>(null);\n const composedRef = composeRefs(ref, rootRef);\n // Pass the resolved direction to Radix so arrow-key navigation (and the\n // CSS grid's inline flow) mirror correctly under dir=\"rtl\".\n const dir = useDirection(rootRef);\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? '',\n );\n const currentValue = isControlled ? (value ?? '') : internalValue;\n const currentValueRef = useRef<string>(currentValue);\n currentValueRef.current = currentValue;\n\n const items = useMemo<PositionGridOption[]>(\n () =>\n positions ??\n DEFAULT_POSITIONS.map((p) => ({\n value: p.value,\n label: t(`positionGrid.${p.labelKey}`),\n })),\n [positions, t],\n );\n\n const groupLabel = ariaLabel ?? t('positionGrid.groupLabel');\n\n const handleValueChange = (next: string) => {\n if (!isControlled) setInternalValue(next);\n onChange?.(next);\n };\n\n const agentHandle = useMemo<PositionGridHandle>(\n () => ({\n getValue: () => currentValueRef.current,\n setValue: (next) => handleValueChange(next),\n focus: () => {\n const root = rootRef.current;\n if (!root) return;\n const checked = root.querySelector<HTMLElement>(\n '[role=\"radio\"][aria-checked=\"true\"]',\n );\n const target =\n checked ?? root.querySelector<HTMLElement>('[role=\"radio\"]');\n target?.focus();\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isControlled, onChange],\n );\n useAgentRegistration(positionGridAgent, agentHandle, id);\n\n return (\n <RadixRadioGroup.Root\n ref={composedRef}\n id={id}\n name={name}\n dir={dir}\n disabled={disabled}\n value={isControlled ? value : undefined}\n defaultValue={!isControlled ? defaultValue : undefined}\n onValueChange={handleValueChange}\n aria-label={groupLabel}\n className={gridVariants({ className })}\n data-component=\"position-grid\"\n data-component-id={id}\n >\n {items.map((pos) => (\n <RadixRadioGroup.Item\n key={pos.value}\n value={pos.value}\n aria-label={pos.label}\n data-option-id={pos.value}\n className={cellVariants()}\n >\n <span aria-hidden=\"true\" className={markerVariants()} />\n </RadixRadioGroup.Item>\n ))}\n </RadixRadioGroup.Root>\n );\n },\n);\n\nPositionGrid.displayName = 'PositionGrid';\n\nexport { gridVariants as positionGridVariants };\n"],"names":["positionGridAgent","handle","args","DEFAULT_POSITIONS","gridVariants","cva","cellVariants","markerVariants","PositionGrid","forwardRef","value","defaultValue","onChange","positions","name","disabled","id","className","ariaLabel","ref","t","useTranslation","rootRef","useRef","composedRef","composeRefs","dir","useDirection","isControlled","internalValue","setInternalValue","useState","currentValue","currentValueRef","items","useMemo","p","groupLabel","handleValueChange","next","agentHandle","root","target","useAgentRegistration","jsx","RadixRadioGroup","pos"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"product-hub-panel-BSSiGGG4.js","sources":["../../node_modules/lucide-react/dist/esm/icons/gift.mjs","../../src/components/product-hub-tray/product-hub-tray.agent.ts","../../src/components/product-hub-tray/product-hub-tray.tsx","../../src/components/product-hub-tray/product-hub-panel.agent.ts","../../src/components/product-hub-tray/product-hub-panel.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 [\"path\", { d: \"M12 7v14\", key: \"1akyts\" }],\n [\"path\", { d: \"M20 11v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8\", key: \"1sqzm4\" }],\n [\n \"path\",\n { d: \"M7.5 7a1 1 0 0 1 0-5A4.8 8 0 0 1 12 7a4.8 8 0 0 1 4.5-5 1 1 0 0 1 0 5\", key: \"kc0143\" }\n ],\n [\"rect\", { x: \"3\", y: \"7\", width: \"18\", height: \"4\", rx: \"1\", key: \"1hberx\" }]\n];\nconst Gift = createLucideIcon(\"gift\", __iconNode);\n\nexport { __iconNode, Gift as default };\n//# sourceMappingURL=gift.mjs.map\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — ProductHubTray. */\n/* */\n/* Tray-level surface: an agent can open / close the dropdown panel and */\n/* read the unseen-release count. Release content (titles, summaries, */\n/* URLs) is never exposed — counts and booleans only. All actions are */\n/* routed through the curated imperative handle; the adapter never */\n/* touches the DOM directly. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { ProductHubTrayHandle } from './product-hub-tray';\n\nexport const productHubTrayAgent: AgentAdapter<ProductHubTrayHandle> = {\n id: 'product-hub-tray',\n capabilities: ['open', 'close'],\n state: {\n unseenCount: {\n type: 'number',\n descriptionKey: 'ui.agent.productHubTray.state.unseenCount',\n description:\n 'Number of unseen product releases — the trigger badge count.',\n read: (handle) => handle.getUnseenCount(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.productHubTray.actions.open',\n description: 'Open the product-updates panel.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.productHubTray.actions.close',\n description: 'Close the product-updates panel.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'product-hub-tray',\n description: 'Marks the ProductHubTray wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific tray from the agent.',\n },\n item: {\n attr: 'data-update-id',\n description:\n 'Stable release id emitted on each rendered release row inside the tray.',\n },\n },\n};\n","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Gift, X } from 'lucide-react';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { IconButton } from '../button/icon-button';\nimport { Link } from '../link';\nimport { ScrollArea } from '../scroll-area/scroll-area';\nimport { Separator } from '../separator/separator';\nimport { Skeleton } from '../skeleton/skeleton';\nimport { Timestamp } from '../timestamp';\nimport { isSafeEntityUrl } from '../_shared/is-safe-url';\nimport { safeImageSrc } from '../_shared/safe-image-src';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { productHubTrayAgent } from './product-hub-tray.agent';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\n/**\n * One product-hub release entry. The kit is purely presentational —\n * the consumer fetches releases (Supabase, REST, …) and maps them into\n * this shape.\n */\nexport interface ProductHubItem {\n /** Unique identifier for the release. */\n id: string;\n /** Release title — rendered bold on the first line. */\n title: string;\n /** Short release summary — rendered as plain text, clamped to 2 lines. */\n summary?: string;\n /** ISO-8601 publish date — rendered as a localised, italic absolute date. */\n dateIso?: string;\n /**\n * Thumbnail URL. Guarded through the shared `safeImageSrc` allow-list\n * and rendered with `referrerPolicy=\"no-referrer\"`. Unsafe or missing\n * sources fall back to a Gift glyph tile.\n */\n imageUrl?: string;\n /**\n * Release deep link. Guarded through `isSafeEntityUrl`; safe URLs make\n * the row title an anchor that opens in a new tab. Unsafe URLs render\n * the title as plain text.\n */\n url?: string;\n /** Marks the release as not yet seen — highlights the row and counts toward the trigger badge. */\n unseen?: boolean;\n}\n\n/**\n * Curated imperative handle for ProductHubTray. Exposed to the agent\n * registry so a future MCP UI bridge can drive the tray without touching\n * the DOM. See `product-hub-tray.agent.ts`.\n */\nexport interface ProductHubTrayHandle {\n open: () => void;\n close: () => void;\n getUnseenCount: () => number;\n}\n\nexport interface ProductHubTrayProps\n extends\n Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onClick' | 'children' | 'role' | 'id'\n >,\n VariantProps<typeof productHubTrayVariants> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so\n * an agent / MCP UI bridge can address this specific tray.\n */\n id?: string;\n /** Releases rendered in the dropdown panel, newest first. */\n items: ProductHubItem[];\n /**\n * Product-hub landing URL. When set (and safe) the panel renders a\n * pinned \"Open in Product Hub\" footer link that opens in a new tab.\n */\n hubUrl?: string;\n /** When true the panel shows skeleton placeholders. */\n loading?: boolean;\n /** Error-state slot — rendered inside the panel instead of the list. */\n error?: ReactNode;\n /**\n * Unseen-release count override. Defaults to the number of `items`\n * with `unseen: true`. Drives the trigger badge.\n */\n unseenCount?: number;\n /** Fires when the open state changes. */\n onOpenChange?: (open: boolean) => void;\n /**\n * Analytics hook — fires when a row is activated. Navigation itself is\n * owned by the row anchor (new tab); this callback must not be relied\n * on for routing.\n */\n onItemActivate?: (item: ProductHubItem) => void;\n /** Override for the trigger's accessible label. */\n triggerLabel?: string;\n /** Number of releases rendered before the rest are cut off. Default 10. */\n maxVisible?: number;\n /** Empty-state slot — replaces the built-in \"No product updates yet\" panel. */\n emptyState?: ReactNode;\n /** Open the panel on first mount (uncontrolled). */\n defaultOpen?: boolean;\n /** BCP-47 locale override for the per-row dates. Falls back to `i18n.language`. */\n locale?: string;\n /** Panel alignment relative to the trigger. Default `'end'`. */\n align?: 'start' | 'center' | 'end';\n /** Side of the trigger to open on. Default `'bottom'`. */\n side?: 'top' | 'bottom';\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst productHubTrayVariants = cva(\n 'ds:relative ds:inline-flex ds:items-center',\n {\n variants: {\n size: {\n sm: '',\n md: '',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst panelVariants = cva(\n [\n 'ds:flex ds:flex-col',\n 'ds:bg-[var(--popover)] ds:text-[var(--popover-foreground)]',\n 'ds:border ds:border-[color:var(--card-border)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:z-[var(--z-popover)]',\n // Fluid below the design cap so narrow viewports keep a gutter on\n // both sides of the panel (shadow included).\n 'ds:w-[min(24rem,calc(100vw-2*var(--spacing-md)))]',\n // Near-full-screen sheet below `sm`; auto above, where the list's\n // own `--product-hub-tray-max-block-size` cap governs the height.\n 'ds:h-[calc(100dvh-6rem)] ds:sm:h-auto',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0',\n 'ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95',\n 'ds:motion-reduce:transition-none ds:motion-reduce:animate-none',\n 'ds:focus-visible:outline-none',\n 'ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:p-[var(--spacing-xs)]',\n md: 'ds:p-[var(--spacing-sm)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst badgeVariants = cva(\n [\n // Anchored to the top-end corner of the trigger, nudged outward so\n // the gift glyph isn't covered.\n 'ds:absolute ds:-top-[var(--spacing-xs)] ds:-end-[var(--spacing-xs)]',\n 'ds:inline-flex ds:items-center ds:justify-center',\n // Circle at 1-2 digits; widens into a pill only for \"99+\".\n 'ds:min-w-[calc(var(--spacing-md)+var(--spacing-xs))] ds:h-[calc(var(--spacing-md)+var(--spacing-xs))] ds:ps-[calc(var(--spacing-xs)/1.5)] ds:pe-[calc(var(--spacing-xs)/1.5)]',\n 'ds:rounded-[var(--radius-full)]',\n // One red unseen-count chip across every header tray — matches the\n // platform header and the NotificationTray badge convention.\n 'ds:bg-[color:var(--destructive)] ds:text-[color:var(--destructive-foreground)]',\n 'ds:text-[length:var(--font-size-xs)] ds:font-semibold ds:leading-none',\n 'ds:pointer-events-none ds:select-none',\n 'ds:forced-colors:outline ds:forced-colors:outline-1 ds:forced-colors:outline-[CanvasText]',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Shared release row — used by both ProductHubTray (compact) and */\n/* ProductHubPanel (roomier). Internal seam, not part of the barrel. */\n/* ------------------------------------------------------------------ */\n\nconst rowVariants = cva(\n [\n // `group` so the hover/focus-revealed close button can react to the whole\n // row, not just itself.\n 'ds:group ds:relative ds:flex ds:items-start',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:text-start',\n 'ds:transition-colors ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n density: {\n tray: 'ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]',\n panel: 'ds:gap-[var(--spacing-md)] ds:p-[var(--spacing-md)]',\n },\n // Unseen no longer tints the background — the read/new state is carried\n // by the leading-corner Gift indicator instead, matching the\n // notification / message cards.\n unseen: {\n true: 'ds:hover:bg-[color:var(--muted)]/40',\n false: 'ds:hover:bg-[color:var(--muted)]/40',\n },\n // Row chrome: flat (inside a bordered tray/panel) vs elevated (own card\n // on a rail). Mirrors AppointmentCard / NotificationCard so the Inbox\n // feed reads consistently with the other rail panels.\n surface: {\n flat: '',\n elevated:\n 'ds:[:where(&)]:border-[length:var(--surface-border-width,var(--border-width-sm))] ds:border-[color:var(--card-border)] ds:shadow-[var(--shadow-sm)]',\n },\n },\n defaultVariants: {\n density: 'tray',\n unseen: false,\n surface: 'flat',\n },\n },\n);\n\nconst thumbVariants = cva(\n [\n 'ds:shrink-0 ds:rounded-[var(--radius-sm)] ds:object-cover',\n // Tile backdrop so transparent / still-loading thumbnails keep a\n // visible square instead of collapsing into whitespace.\n 'ds:bg-[color:var(--muted)]',\n 'ds:forced-colors:border ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n {\n variants: {\n density: {\n tray: 'ds:size-10',\n panel: 'ds:size-12',\n },\n },\n defaultVariants: {\n density: 'tray',\n },\n },\n);\n\nconst stretchedLinkClass = [\n 'ds:focus-visible:outline-none',\n \"ds:after:content-[''] ds:after:absolute ds:after:inset-0 ds:after:rounded-[var(--radius-sm)]\",\n 'ds:after:pointer-events-auto',\n 'ds:focus-visible:after:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:after:outline-solid',\n 'ds:focus-visible:after:outline-[color:var(--ring)]',\n 'ds:focus-visible:after:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:after:outline-[CanvasText]',\n].join(' ');\n\nexport interface ProductHubUpdateRowProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onClick' | 'role' | 'title'\n> {\n /** The release to render. */\n item: ProductHubItem;\n /** `tray` — compact dropdown row. `panel` — roomier dashboard row. */\n density?: 'tray' | 'panel';\n /**\n * Row chrome. `'flat'` (default) — chrome-less row inside a bordered\n * tray/panel. `'elevated'` — own card chrome (border + `--shadow-sm`) for\n * rail feeds (e.g. the Inbox), matching the sibling notification/message\n * cards.\n */\n surface?: 'flat' | 'elevated';\n /** BCP-47 locale override for the date. */\n locale?: string;\n /** Analytics hook — navigation is owned by the row anchor. */\n onActivate?: (item: ProductHubItem) => void;\n /**\n * When supplied, renders a close affordance (revealed on row hover / focus)\n * that fires with this item — e.g. dismissing the update from an Inbox feed.\n */\n onDismiss?: (item: ProductHubItem) => void;\n}\n\n/**\n * @internal Shared row between ProductHubTray and ProductHubPanel.\n * Exported for the sibling panel only — import the trays, not this.\n */\nexport function ProductHubUpdateRow({\n item,\n density = 'tray',\n surface = 'flat',\n locale,\n onActivate,\n onDismiss,\n className,\n ...rest\n}: ProductHubUpdateRowProps) {\n const { t } = useTranslation('ui');\n const safeSrc = safeImageSrc(item.imageUrl);\n const hasSafeUrl = !!item.url && isSafeEntityUrl(item.url);\n const unseen = !!item.unseen;\n\n // Close insets track the row padding so it aligns with the title's first\n // line at either density.\n const closeInset =\n density === 'panel'\n ? 'ds:top-[var(--spacing-md)] ds:end-[var(--spacing-md)]'\n : 'ds:top-[var(--spacing-sm)] ds:end-[var(--spacing-sm)]';\n\n // Read after the title when the row gets focus / is traversed:\n // \"<title>, new, (opens in a new tab)\". The unseen dot itself is\n // decorative — state never relies on colour alone.\n const unseenHint = unseen ? (\n <span className=\"ds:sr-only\">\n {t('productHubTray.unseenLabel', ', new')}\n </span>\n ) : null;\n\n return (\n <div\n role=\"listitem\"\n data-component=\"product-hub-update\"\n data-update-id={item.id}\n data-unseen={unseen ? 'true' : 'false'}\n className={rowVariants({ density, unseen, surface, className })}\n {...rest}\n >\n <span className=\"ds:relative ds:shrink-0\">\n {safeSrc ? (\n <img\n src={safeSrc}\n alt=\"\"\n aria-hidden=\"true\"\n referrerPolicy=\"no-referrer\"\n loading=\"lazy\"\n className={thumbVariants({ density })}\n />\n ) : (\n <span\n aria-hidden=\"true\"\n className={`${thumbVariants({ density })} ds:inline-flex ds:items-center ds:justify-center ds:text-[color:var(--muted-foreground)] ds:[&>svg]:size-5`}\n >\n <Gift />\n </span>\n )}\n {/* Unseen \"new\" marker — a dot on the thumbnail corner (the read /\n unread indicator moved inline-start). Decorative; the title link\n carries the sr-only \"new\" hint for assistive tech. */}\n {unseen ? (\n <span\n aria-hidden=\"true\"\n data-testid=\"product-hub-unseen-dot\"\n className=\"ds:absolute ds:top-[calc(var(--spacing-xs)*-1)] ds:end-[calc(var(--spacing-xs)*-1)] ds:z-[1] ds:block ds:size-[calc(var(--spacing-sm)+var(--spacing-xs))] ds:rounded-[var(--radius-full)] ds:bg-[color:var(--primary)] ds:ring-2 ds:ring-[color:var(--card)] ds:forced-colors:bg-[Highlight]\"\n />\n ) : null}\n </span>\n\n <div className=\"ds:min-w-0 ds:flex-1 ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <span className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)] type-title-item ds:text-[color:var(--foreground)]\">\n {hasSafeUrl ? (\n // A real (non-display:contents) anchor so the row is reliably\n // keyboard-focusable; the ::after stretch keeps the whole row\n // clickable and carries the focus ring.\n <a\n href={item.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`${stretchedLinkClass} ds:min-w-0 ds:flex-1 ds:no-underline ds:text-[color:var(--foreground)]`}\n onClick={() => onActivate?.(item)}\n >\n <span className=\"ds:block ds:truncate ds:font-semibold\">\n {item.title}\n </span>\n {unseenHint}\n <span className=\"ds:sr-only\">\n {t('productHubTray.opensInNewTab', '(opens in a new tab)')}\n </span>\n </a>\n ) : (\n <>\n <span className=\"ds:min-w-0 ds:flex-1 ds:truncate ds:font-semibold\">\n {item.title}\n </span>\n {unseenHint}\n </>\n )}\n </span>\n\n {item.summary ? (\n <p className=\"ds:m-0 type-body-sm ds:text-[color:var(--muted-foreground)] ds:[overflow:hidden] ds:[display:-webkit-box] ds:[-webkit-box-orient:vertical] ds:[-webkit-line-clamp:2] ds:break-words\">\n {item.summary}\n </p>\n ) : null}\n\n {item.dateIso ? (\n <Timestamp\n value={item.dateIso}\n format=\"absolute\"\n locale={locale}\n className=\"ds:italic ds:text-[color:var(--muted-foreground)]\"\n />\n ) : null}\n </div>\n\n {/* Close — inline-end, hover/focus-revealed. Absolutely positioned so it\n claims no width at rest: the title fills the row and there's no empty\n gap when the row isn't hovered. */}\n {onDismiss ? (\n <span\n className={\n 'ds:absolute ds:z-[2] ds:opacity-0 ds:pointer-events-none ds:transition-opacity ds:motion-reduce:transition-none ds:group-hover:opacity-100 ds:group-hover:pointer-events-auto ds:group-focus-within:opacity-100 ds:group-focus-within:pointer-events-auto ' +\n closeInset\n }\n >\n <IconButton\n icon={<X />}\n intent=\"ghost\"\n size=\"sm\"\n aria-label={t('productHubTray.dismiss', 'Dismiss update')}\n onClick={() => onDismiss(item)}\n />\n </span>\n ) : null}\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Shared loading / status helpers (also consumed by ProductHubPanel) */\n/* ------------------------------------------------------------------ */\n\n/** @internal Skeleton placeholder mirroring the row layout. */\nexport function UpdateSkeletonRow({\n density = 'tray',\n}: {\n density?: 'tray' | 'panel';\n}) {\n return (\n <div\n aria-hidden=\"true\"\n className={\n density === 'panel'\n ? 'ds:flex ds:items-start ds:gap-[var(--spacing-md)] ds:p-[var(--spacing-md)]'\n : 'ds:flex ds:items-start ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]'\n }\n >\n <Skeleton\n variant=\"rounded\"\n width={density === 'panel' ? '3rem' : '2.5rem'}\n height={density === 'panel' ? '3rem' : '2.5rem'}\n />\n <div className=\"ds:flex-1 ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <Skeleton variant=\"text\" size=\"md\" width=\"60%\" />\n <Skeleton variant=\"text\" size=\"sm\" width=\"90%\" />\n <Skeleton variant=\"text\" size=\"sm\" width=\"30%\" />\n </div>\n </div>\n );\n}\n\n/** @internal Centered status container for error / consumer-slot states. */\nexport function UpdateStatusPanel({ children }: { children: ReactNode }) {\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"ds:flex ds:flex-col ds:items-center ds:justify-center ds:gap-[var(--spacing-xs)] ds:p-[var(--spacing-lg)] ds:text-center type-body-sm ds:text-[color:var(--muted-foreground)]\"\n >\n {children}\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nfunction formatBadgeCount(count: number, overflowLabel: string): string {\n return count > 99 ? overflowLabel : String(count);\n}\n\nfunction EmptyPanel() {\n const { t } = useTranslation('ui');\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"ds:flex ds:flex-col ds:items-center ds:justify-center ds:gap-[var(--spacing-xs)] ds:p-[var(--spacing-lg)] ds:text-center\"\n >\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:items-center ds:justify-center ds:size-10 ds:rounded-[var(--radius-full)] ds:bg-[color:var(--muted)] ds:text-[color:var(--muted-foreground)] ds:[&>svg]:size-5\"\n >\n <Gift />\n </span>\n <p className=\"type-title-item ds:text-[color:var(--foreground)]\">\n {t('productHubTray.emptyTitle', 'No product updates yet')}\n </p>\n <p className=\"type-meta ds:text-[color:var(--muted-foreground)]\">\n {t(\n 'productHubTray.emptyDescription',\n 'New releases and improvements will appear here.',\n )}\n </p>\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nexport const ProductHubTray = forwardRef<HTMLDivElement, ProductHubTrayProps>(\n (\n {\n id,\n items,\n hubUrl,\n loading = false,\n error,\n unseenCount,\n onOpenChange,\n onItemActivate,\n triggerLabel,\n maxVisible = 10,\n emptyState,\n defaultOpen = false,\n locale,\n align = 'end',\n side = 'bottom',\n size = 'md',\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n\n const [isOpenRaw, handleOpenChange] = useControllableState<boolean>({\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n const isOpen = isOpenRaw ?? false;\n\n const displayCount = unseenCount ?? items.filter((i) => i.unseen).length;\n const resolvedTriggerLabel =\n triggerLabel ??\n (displayCount > 0\n ? t('productHubTray.triggerLabel', {\n count: displayCount,\n defaultValue: \"What's new, {{count}} unseen updates\",\n })\n : t('productHubTray.triggerLabelNone', \"What's new\"));\n\n const badgeLabel = formatBadgeCount(\n displayCount,\n t('productHubTray.badgeCountOverflow', '99+'),\n );\n\n const visible = items.slice(0, Math.max(0, maxVisible));\n const showList = !error && !loading && visible.length > 0;\n const safeHubUrl = hubUrl && isSafeEntityUrl(hubUrl) ? hubUrl : undefined;\n\n /* Curated handle — refs keep the look-ups current without\n * re-memoising on every items update. */\n const itemsRef = useRef<ProductHubItem[]>(items);\n itemsRef.current = items;\n const unseenRef = useRef<number | undefined>(unseenCount);\n unseenRef.current = unseenCount;\n\n const handle = useMemo<ProductHubTrayHandle>(\n () => ({\n open: () => handleOpenChange(true),\n close: () => handleOpenChange(false),\n getUnseenCount: () =>\n unseenRef.current ?? itemsRef.current.filter((i) => i.unseen).length,\n }),\n [handleOpenChange],\n );\n\n const rootRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(ref, () => rootRef.current as HTMLDivElement, []);\n useAgentRegistration(productHubTrayAgent, handle, id);\n\n let body: ReactNode;\n if (error) {\n body = <UpdateStatusPanel>{error}</UpdateStatusPanel>;\n } else if (loading) {\n body = (\n <>\n <UpdateSkeletonRow />\n <UpdateSkeletonRow />\n <UpdateSkeletonRow />\n </>\n );\n } else if (visible.length === 0) {\n body = emptyState ?? <EmptyPanel />;\n } else {\n body = visible.map((item) => (\n <ProductHubUpdateRow\n key={item.id}\n item={item}\n density=\"tray\"\n locale={locale}\n onActivate={onItemActivate}\n />\n ));\n }\n\n return (\n <div\n ref={rootRef}\n data-component=\"product-hub-tray\"\n data-component-id={id}\n className={[productHubTrayVariants({ size }), className]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n <RadixPopover.Root open={isOpen} onOpenChange={handleOpenChange}>\n <RadixPopover.Trigger asChild>\n <IconButton\n icon={<Gift />}\n intent=\"outline\"\n size={size === 'sm' ? 'sm' : 'md'}\n aria-label={resolvedTriggerLabel}\n aria-haspopup=\"dialog\"\n />\n </RadixPopover.Trigger>\n {displayCount > 0 ? (\n <span\n aria-hidden=\"true\"\n data-testid=\"product-hub-tray-badge\"\n className={badgeVariants()}\n >\n {badgeLabel}\n </span>\n ) : null}\n <RadixPopover.Portal>\n <RadixPopover.Content\n role=\"dialog\"\n aria-label={t('productHubTray.panelTitle', \"What's new\")}\n side={side}\n align={align}\n sideOffset={8}\n // Keeps Radix's collision-avoidance from flush-mounting the\n // panel against the viewport edge on narrow screens.\n collisionPadding={16}\n className={panelVariants({ size })}\n >\n <div className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)] ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pb-[var(--spacing-xs)]\">\n <h3 className=\"ds:m-0 type-title-card ds:text-[color:var(--foreground)]\">\n {t('productHubTray.panelTitle', \"What's new\")}\n </h3>\n </div>\n <Separator />\n {/* The release list is the ONLY scroll region. `role=\"list\"`\n requires `listitem` children, so it is applied only when\n rows render (axe aria-required-children). Consumers\n override the height cap via the\n `--product-hub-tray-max-block-size` custom property. */}\n <ScrollArea\n orientation=\"vertical\"\n className=\"ds:flex-1 ds:sm:flex-none ds:sm:[max-block-size:var(--product-hub-tray-max-block-size,24rem)]\"\n >\n <div\n role={showList ? 'list' : undefined}\n data-max-visible={maxVisible}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:pt-[var(--spacing-xs)]\"\n >\n {body}\n </div>\n </ScrollArea>\n {safeHubUrl ? (\n <>\n <Separator />\n <div className=\"ds:flex ds:justify-center ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-xs)]\">\n <Link href={safeHubUrl} external>\n {t('productHubTray.openHub', 'Open in Product Hub')}\n </Link>\n </div>\n </>\n ) : null}\n </RadixPopover.Content>\n </RadixPopover.Portal>\n </RadixPopover.Root>\n </div>\n );\n },\n);\n\nProductHubTray.displayName = 'ProductHubTray';\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — ProductHubPanel. */\n/* */\n/* Read-mostly dashboard surface: an agent can read the displayed */\n/* release ids + unseen flags (never titles / summaries / URLs) and */\n/* route a per-item activation through the curated handle. The adapter */\n/* never touches the DOM directly. */\n/* */\n/* NOTE: catalog discovery only picks up `<dirName>.agent.ts`, so this */\n/* sibling adapter is registered at runtime but not yet listed in */\n/* dist/agent-catalog.json (same situation as appointment-tray inside */\n/* the appointment-card directory). */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { ProductHubPanelHandle } from './product-hub-panel';\n\nexport const productHubPanelAgent: AgentAdapter<ProductHubPanelHandle> = {\n id: 'product-hub-panel',\n // selectItem activates one release row (fires the host hook) without\n // persisting a stored selection → `pick`, not `select_single`.\n capabilities: ['pick'],\n state: {\n items: {\n type: 'Array<{ id: string; unseen: boolean }>',\n descriptionKey: 'ui.agent.productHubPanel.state.items',\n description:\n 'Currently-displayed releases. Ids + unseen flag only — no content.',\n read: (handle) => handle.getItems(),\n },\n unseenCount: {\n type: 'number',\n descriptionKey: 'ui.agent.productHubPanel.state.unseenCount',\n description: 'Number of displayed releases still marked unseen.',\n read: (handle) => handle.getUnseenCount(),\n },\n },\n actions: {\n select_item: {\n safety: 'read',\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Stable release id (the data-update-id of the row).',\n },\n },\n required: ['id'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.productHubPanel.actions.selectItem',\n description:\n 'Activate the release with the given id (fires the host analytics hook).',\n examples: [\n { args: { id: 'rel-0680' }, note: 'Activate a specific release row.' },\n ],\n invoke: (handle, args: { id: string }) => {\n handle.selectItem(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'product-hub-panel',\n description: 'Marks the ProductHubPanel section.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific panel from the agent.',\n },\n item: {\n attr: 'data-update-id',\n description:\n 'Stable release id emitted on each rendered release row inside the panel.',\n },\n },\n};\n","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Gift } from 'lucide-react';\nimport { EmptyState } from '../empty-state/empty-state';\nimport { Link } from '../link';\nimport { Separator } from '../separator/separator';\nimport { isSafeEntityUrl } from '../_shared/is-safe-url';\nimport { useAgentRegistration } from '../../agent/registry';\nimport {\n ProductHubUpdateRow,\n UpdateSkeletonRow,\n UpdateStatusPanel,\n type ProductHubItem,\n} from './product-hub-tray';\nimport { productHubPanelAgent } from './product-hub-panel.agent';\n\n/* -------------------------------------------------------------------- */\n/* ProductHubPanel */\n/* */\n/* Dashboard-panel sibling of ProductHubTray: a titled, bordered card */\n/* (model: AgendaTray + the dashboard \"Recent notifications\" panel) */\n/* listing the same release rows at a roomier density — no popover. */\n/* The consumer fetches the data; loading / empty / error are props. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* CVA */\n/* -------------------------------------------------------------------- */\n\nconst productHubPanelVariants = cva(\n [\n 'ds:flex ds:flex-col',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:[:where(&)]:border-[length:var(--surface-border-width,var(--border-width-sm))] ds:border-[color:var(--card-border)]',\n 'ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:overflow-hidden',\n 'ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n {\n variants: {\n surface: {\n flat: '',\n elevated: 'ds:shadow-[var(--shadow-card)]',\n },\n },\n defaultVariants: {\n surface: 'elevated',\n },\n },\n);\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\n/**\n * Curated imperative handle for ProductHubPanel — read-only ids / counts\n * plus a select delegation. See `product-hub-panel.agent.ts`.\n */\nexport interface ProductHubPanelHandle {\n getItems: () => Array<{ id: string; unseen: boolean }>;\n getUnseenCount: () => number;\n selectItem: (id: string) => void;\n}\n\nexport interface ProductHubPanelProps\n extends\n Omit<HTMLAttributes<HTMLElement>, 'onClick' | 'children' | 'id'>,\n VariantProps<typeof productHubPanelVariants> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so\n * an agent / MCP UI bridge can address this specific panel.\n */\n id?: string;\n /** Releases rendered in the panel, newest first. */\n items: ProductHubItem[];\n /**\n * Product-hub landing URL. When set (and safe) the panel renders an\n * \"Open in Product Hub\" footer link that opens in a new tab.\n */\n hubUrl?: string;\n /** When true the panel shows skeleton placeholders. */\n loading?: boolean;\n /** Error-state slot — rendered instead of the list. */\n error?: ReactNode;\n /** Panel heading. Defaults to the localised \"What's new\". */\n title?: string;\n /** Optional sub-heading rendered under the title. */\n description?: string;\n /** Number of releases rendered before the rest are cut off. Default 5. */\n maxVisible?: number;\n /** Empty-state slot — replaces the built-in EmptyState. */\n emptyState?: ReactNode;\n /**\n * Analytics hook — fires when a row is activated. Navigation itself is\n * owned by the row anchor (new tab).\n */\n onItemActivate?: (item: ProductHubItem) => void;\n /** BCP-47 locale override for the per-row dates. */\n locale?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const ProductHubPanel = forwardRef<HTMLElement, ProductHubPanelProps>(\n (\n {\n id,\n items,\n hubUrl,\n loading = false,\n error,\n title,\n description,\n maxVisible = 5,\n emptyState,\n onItemActivate,\n locale,\n surface = 'elevated',\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const heading = title ?? t('productHubPanel.title', \"What's new\");\n\n const visible = items.slice(0, Math.max(0, maxVisible));\n const safeHubUrl = hubUrl && isSafeEntityUrl(hubUrl) ? hubUrl : undefined;\n\n let body: ReactNode;\n if (error) {\n body = <UpdateStatusPanel>{error}</UpdateStatusPanel>;\n } else if (loading) {\n body = (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:p-[var(--spacing-sm)] ds:pt-0\">\n {[0, 1, 2].map((i) => (\n <UpdateSkeletonRow key={i} density=\"panel\" />\n ))}\n </div>\n );\n } else if (visible.length === 0) {\n body = emptyState ?? (\n <div className=\"ds:p-[var(--spacing-md)]\">\n <EmptyState\n variant=\"first-use\"\n size=\"sm\"\n title={t('productHubPanel.emptyTitle', 'No product updates yet')}\n description={t(\n 'productHubPanel.emptyDescription',\n 'New releases and improvements will appear here.',\n )}\n />\n </div>\n );\n } else {\n body = (\n <div\n role=\"list\"\n data-max-visible={maxVisible}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:p-[var(--spacing-sm)] ds:pt-0\"\n >\n {visible.map((item) => (\n <ProductHubUpdateRow\n key={item.id}\n item={item}\n density=\"panel\"\n locale={locale}\n onActivate={onItemActivate}\n />\n ))}\n </div>\n );\n }\n\n /* Curated imperative handle for agent integration. */\n const itemsRef = useRef<ProductHubItem[]>(items);\n itemsRef.current = items;\n\n const handle = useMemo<ProductHubPanelHandle>(\n () => ({\n getItems: () =>\n itemsRef.current.map((i) => ({ id: i.id, unseen: !!i.unseen })),\n getUnseenCount: () => itemsRef.current.filter((i) => i.unseen).length,\n selectItem: (targetId: string) => {\n const found = itemsRef.current.find((i) => i.id === targetId);\n if (found) onItemActivate?.(found);\n },\n }),\n [onItemActivate],\n );\n\n const innerRef = useRef<HTMLElement>(null);\n useImperativeHandle(ref, () => innerRef.current as HTMLElement, []);\n useAgentRegistration(productHubPanelAgent, handle, id);\n\n return (\n <section\n ref={innerRef}\n aria-label={heading}\n data-component=\"product-hub-panel\"\n data-component-id={id}\n className={productHubPanelVariants({ surface, className })}\n {...rest}\n >\n <header className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:p-[var(--spacing-md)] ds:pb-[var(--spacing-sm)]\">\n {/* h2 — visual peer of the dashboard's other titled regions.\n Heading ladder: h1 (page) → h2 (this panel) → row titles. */}\n <h2 className=\"ds:m-0 ds:flex ds:items-center ds:gap-[var(--spacing-xs)] ds:text-start type-title-section ds:text-[color:var(--foreground)]\">\n <Gift aria-hidden=\"true\" className=\"ds:size-5 ds:shrink-0\" />\n {heading}\n </h2>\n {description ? (\n <p className=\"ds:m-0 ds:text-start type-body-sm ds:text-[color:var(--muted-foreground)]\">\n {description}\n </p>\n ) : null}\n </header>\n {body}\n {safeHubUrl ? (\n <>\n <Separator />\n <div className=\"ds:flex ds:justify-center ds:p-[var(--spacing-sm)]\">\n <Link href={safeHubUrl} external>\n {t('productHubPanel.openHub', 'Open in Product Hub')}\n </Link>\n </div>\n </>\n ) : null}\n </section>\n );\n },\n);\n\nProductHubPanel.displayName = 'ProductHubPanel';\n"],"names":["__iconNode","Gift","createLucideIcon","productHubTrayAgent","handle","productHubTrayVariants","cva","panelVariants","badgeVariants","rowVariants","thumbVariants","stretchedLinkClass","ProductHubUpdateRow","item","density","surface","locale","onActivate","onDismiss","className","rest","t","useTranslation","safeSrc","safeImageSrc","hasSafeUrl","isSafeEntityUrl","unseen","closeInset","unseenHint","jsx","jsxs","Fragment","Timestamp","IconButton","X","UpdateSkeletonRow","Skeleton","UpdateStatusPanel","children","formatBadgeCount","count","overflowLabel","EmptyPanel","ProductHubTray","forwardRef","id","items","hubUrl","loading","error","unseenCount","onOpenChange","onItemActivate","triggerLabel","maxVisible","emptyState","defaultOpen","align","side","size","ref","isOpenRaw","handleOpenChange","useControllableState","isOpen","displayCount","i","resolvedTriggerLabel","badgeLabel","visible","showList","safeHubUrl","itemsRef","useRef","unseenRef","useMemo","rootRef","useImperativeHandle","useAgentRegistration","body","RadixPopover","Separator","ScrollArea","Link","productHubPanelAgent","args","productHubPanelVariants","ProductHubPanel","title","description","heading","EmptyState","targetId","found","innerRef"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"radio-group-BT97ty7o.js","sources":["../../src/components/radio-group/radio-group.agent.ts","../../src/components/radio-group/radio-group.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — RadioGroup. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { RadioGroupHandle } from './radio-group';\n\nexport const radioGroupAgent: AgentAdapter<RadioGroupHandle> = {\n id: 'radio-group',\n capabilities: ['select_single'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.radioGroup.state.value',\n description: 'Currently selected radio value, or empty string when none.',\n read: (handle) => handle.getValue(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string }',\n argsSchema: {\n type: 'object',\n properties: {\n value: {\n type: 'string',\n description: 'Value of the radio to select (its data-option-id).',\n },\n },\n required: ['value'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.radioGroup.actions.setValue',\n description:\n 'Select the radio with the given value. A value that matches no enabled radio is ignored.',\n invoke: (handle, args: { value: string }) => {\n handle.setValue(args.value);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'radio-group',\n description: 'Marks the RadioGroup root.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description: 'Stable opaque value emitted on each rendered Radio child.',\n },\n },\n};\n","import {\n Children,\n forwardRef,\n isValidElement,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport * as RadixRadioGroup from '@radix-ui/react-radio-group';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { CircleAlert } from 'lucide-react';\nimport {\n RadioGroupInternalContext,\n type RadioGroupInternalContextShape,\n type RadioGroupVariant,\n} from './radio-group-context';\nimport { RadioSegmentFace, radioSegmentVariants } from './radio';\nimport { TooltipProvider } from '../tooltip';\nimport { useDirection } from '../_shared/use-direction';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { useAgentRegistration } from '../../agent';\nimport { radioGroupAgent } from './radio-group.agent';\n\n/** Agent-readiness curated handle for RadioGroup. */\nexport interface RadioGroupHandle {\n getValue: () => string;\n setValue: (value: string) => void;\n}\n\n// The segmented track: one bordered strip, segments never wrap.\nconst SEGMENTED_TRACK =\n 'ds:flex ds:flex-nowrap ds:items-stretch ds:gap-[var(--spacing-2xs)] ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-background ds:p-[var(--spacing-2xs)]';\n\nconst radioGroupVariants = cva('ds:flex', {\n variants: {\n variant: {\n vertical: 'ds:flex-col ds:gap-[var(--spacing-sm)]',\n horizontal: 'ds:flex-row ds:flex-wrap ds:gap-[var(--spacing-md)]',\n card: 'ds:flex-col ds:gap-[var(--spacing-md)]',\n segmented: `${SEGMENTED_TRACK} ds:w-fit ds:max-w-full ds:min-w-0`,\n },\n },\n defaultVariants: {\n variant: 'vertical',\n },\n});\n\ntype RadixRootProps = ComponentPropsWithoutRef<typeof RadixRadioGroup.Root>;\n\ntype SegmentChildProps = {\n value?: string;\n icon?: ReactNode;\n label?: string;\n shortLabel?: string;\n};\n\nconst noop = () => undefined;\n\n/**\n * Collapse rule for the segmented variant. A hidden, always-mounted copy of\n * the track holds every segment at full width; the labels collapse once that\n * copy is wider than the line (less any `controlEnd`). A CSS container query\n * cannot do this: its breakpoint is a fixed length, but the width the labels\n * need changes with the locale and the accessible type scale, and the\n * per-segment tooltips have to switch on and off in script anyway. The copy\n * never collapses, so the result cannot flip back and forth.\n *\n * `structureKey` changes when the measured elements remount (controlEnd or\n * the legend added or removed): only then is the observer rebuilt.\n * `contentKey` changes with the segments' text and icons: a cheap re-measure.\n */\nfunction useSegmentedCollapse(\n enabled: boolean,\n structureKey: string,\n contentKey: string,\n) {\n const containerRef = useRef<HTMLDivElement>(null);\n const measureRef = useRef<HTMLDivElement>(null);\n const lineRef = useRef<HTMLDivElement>(null);\n const endRef = useRef<HTMLSpanElement>(null);\n const [collapsed, setCollapsed] = useState(false);\n const measureNowRef = useRef<() => void>(noop);\n\n useIsomorphicLayoutEffect(() => {\n const container = containerRef.current;\n const measure = measureRef.current;\n if (!enabled || !container || !measure) {\n setCollapsed(false);\n return;\n }\n const update = () => {\n const available = container.clientWidth;\n // Not laid out yet (hidden tab, test DOM): keep the labels.\n if (available <= 0) {\n setCollapsed(false);\n return;\n }\n const end = endRef.current;\n const line = lineRef.current;\n const endWidth =\n end && line\n ? end.offsetWidth +\n (Number.parseFloat(window.getComputedStyle(line).columnGap) || 0)\n : 0;\n // +1 absorbs sub-pixel rounding.\n setCollapsed(measure.scrollWidth > available - endWidth + 1);\n };\n measureNowRef.current = update;\n update();\n if (typeof ResizeObserver === 'undefined') {\n return () => {\n measureNowRef.current = noop;\n };\n }\n const observer = new ResizeObserver(update);\n observer.observe(container);\n observer.observe(measure);\n if (endRef.current) observer.observe(endRef.current);\n return () => {\n observer.disconnect();\n measureNowRef.current = noop;\n };\n }, [enabled, structureKey]);\n\n // New labels or icons: measure before paint rather than a frame later.\n useIsomorphicLayoutEffect(() => {\n measureNowRef.current();\n }, [contentKey]);\n\n return { containerRef, measureRef, lineRef, endRef, collapsed };\n}\n\nexport interface RadioGroupProps\n extends\n Omit<RadixRootProps, 'children' | 'orientation'>,\n VariantProps<typeof radioGroupVariants> {\n children: React.ReactNode;\n /**\n * `segmented` is a one-line strip of icon + label segments (give each\n * `Radio` an `icon`, and a `shortLabel` when the full label is long). It\n * fills its container's inline size; when the labels no longer fit, every\n * segment shows its icon alone with its label in a tooltip. Its `Radio`\n * children must be direct elements (a `.map` is fine) so the group can\n * measure them.\n */\n variant?: RadioGroupVariant;\n label?: string;\n /** Rendered at the inline START of the legend line, `--spacing-xs` before\n * the text — a status chip or a marker, never a control. Its text joins\n * the group's accessible name, and it leads the question so a reader\n * never has to cross the line to learn what the mark refers to. */\n labelStart?: React.ReactNode;\n /** Rendered at the inline end of the legend line — a status chip or a\n * marker, never a control. Its text joins the group's accessible name. */\n labelEnd?: React.ReactNode;\n /** Segmented variant only: rendered just after the track, on the same\n * line and outside the radiogroup — e.g. an `InfoTip` explaining a\n * disabled segment. Its width is kept out of the labels' budget. */\n controlEnd?: React.ReactNode;\n description?: string;\n error?: string;\n required?: boolean;\n}\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n (\n {\n children,\n variant = 'vertical',\n label,\n labelStart,\n labelEnd,\n controlEnd,\n description,\n error,\n required,\n disabled,\n className,\n id,\n value,\n defaultValue,\n onValueChange,\n ...props\n },\n ref,\n ) => {\n const baseId = useId();\n const legendId = `${baseId}-legend`;\n const descriptionId = `${baseId}-description`;\n const errorId = `${baseId}-error`;\n\n const describedBy =\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined;\n\n // When a visible label is provided it names the inner radiogroup via\n // aria-labelledby. The outer <fieldset> is neutralised to role=\"presentation\"\n // (below) so screen readers announce ONE named radiogroup, not a named group\n // wrapping a named radiogroup.\n const labelledBy = label ? legendId : undefined;\n\n const isSegmented = variant === 'segmented';\n const orientation: 'vertical' | 'horizontal' =\n variant === 'horizontal' || isSegmented ? 'horizontal' : 'vertical';\n\n const segmentChildren = isSegmented\n ? (Children.toArray(children).filter(isValidElement) as Array<\n ReactElement<SegmentChildProps>\n >)\n : [];\n const segmentContentKey = segmentChildren\n .map(\n (child) =>\n `${child.props.value ?? ''}:${child.props.shortLabel ?? child.props.label ?? ''}:${child.props.icon ? 1 : 0}`,\n )\n .join('|');\n\n const segmented = useSegmentedCollapse(\n isSegmented,\n `${Boolean(controlEnd)}:${Boolean(label)}`,\n segmentContentKey,\n );\n const collapsed = isSegmented && segmented.collapsed;\n\n const ctxValue: RadioGroupInternalContextShape = useMemo(\n () => ({ variant, collapsed }),\n [variant, collapsed],\n );\n\n const descriptionNode = description ? (\n <p id={descriptionId} className=\"type-body-sm ds:text-muted-foreground\">\n {description}\n </p>\n ) : null;\n\n const errorNode = error ? (\n <p\n id={errorId}\n role=\"alert\"\n className=\"ds:inline-flex ds:items-start ds:gap-[var(--spacing-xs)] type-body-sm ds:text-destructive\"\n >\n <CircleAlert aria-hidden=\"true\" className=\"ds:size-4 ds:shrink-0\" />\n <span>{error}</span>\n </p>\n ) : null;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const composedRef = composeRefs(ref, rootRef);\n const dir = useDirection(rootRef);\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? '',\n );\n const currentValue = isControlled ? (value ?? '') : internalValue;\n const currentValueRef = useRef<string>(currentValue);\n currentValueRef.current = currentValue;\n\n const handleValueChange = (next: string) => {\n if (!isControlled) setInternalValue(next);\n onValueChange?.(next);\n };\n\n const agentHandle = useMemo<RadioGroupHandle>(\n () => ({\n getValue: () => currentValueRef.current,\n // An agent may only pick what a user could: a value with a rendered,\n // enabled radio. Unoffered or disabled values are ignored.\n setValue: (next) => {\n const offered = Array.from(\n rootRef.current?.querySelectorAll<HTMLElement>('[role=\"radio\"]') ??\n [],\n ).some(\n (radio) =>\n radio.getAttribute('data-option-id') === next &&\n !radio.hasAttribute('data-disabled'),\n );\n if (offered) handleValueChange(next);\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isControlled, onValueChange],\n );\n useAgentRegistration(radioGroupAgent, agentHandle, id);\n\n const root = (\n <RadixRadioGroup.Root\n ref={composedRef}\n id={id}\n orientation={orientation}\n dir={dir}\n disabled={disabled}\n required={required}\n value={isControlled ? value : undefined}\n defaultValue={!isControlled ? defaultValue : undefined}\n onValueChange={handleValueChange}\n aria-labelledby={labelledBy}\n aria-describedby={describedBy}\n aria-invalid={Boolean(error) || undefined}\n aria-required={required || undefined}\n className={radioGroupVariants({ variant, className })}\n data-component=\"radio-group\"\n data-component-id={id}\n data-collapsed={collapsed ? '' : undefined}\n {...props}\n >\n {children}\n </RadixRadioGroup.Root>\n );\n\n const control = isSegmented ? (\n // Segments carry a tooltip each; bring a provider so the variant is\n // safe in a host without one at its root.\n <TooltipProvider>\n <div\n ref={segmented.containerRef}\n className=\"ds:relative ds:w-full ds:min-w-0\"\n >\n {/* Measuring copy: laid out but invisible (so unfocusable) and out\n of the a11y tree; it holds no controls. The clipping box keeps\n it from widening a scroll container. Never display:none — it\n must keep its width. */}\n <div\n aria-hidden=\"true\"\n className=\"ds:pointer-events-none ds:invisible ds:absolute ds:inset-0 ds:overflow-hidden\"\n >\n <div\n ref={segmented.measureRef}\n data-segment-measure=\"\"\n className={`ds:absolute ds:start-0 ds:top-0 ds:w-max ${SEGMENTED_TRACK}`}\n >\n {segmentChildren.map((child, index) => (\n <span\n key={child.key ?? index}\n className={radioSegmentVariants()}\n >\n <RadioSegmentFace\n icon={child.props.icon}\n text={child.props.shortLabel ?? child.props.label ?? ''}\n collapsed={false}\n />\n </span>\n ))}\n </div>\n </div>\n <div\n ref={segmented.lineRef}\n className=\"ds:flex ds:min-w-0 ds:items-center ds:gap-[var(--spacing-md)]\"\n >\n {root}\n {controlEnd ? (\n <span\n ref={segmented.endRef}\n className=\"ds:inline-flex ds:shrink-0 ds:items-center\"\n >\n {controlEnd}\n </span>\n ) : null}\n </div>\n </div>\n </TooltipProvider>\n ) : (\n root\n );\n\n const outerClasses =\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:min-w-0';\n\n const hasLegendSlot = Boolean(labelStart || labelEnd);\n\n const legendText = (\n <>\n {label}\n {required ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:text-destructive ds:ms-[var(--spacing-xs)]\"\n >\n *\n </span>\n ) : null}\n </>\n );\n if (label) {\n return (\n <RadioGroupInternalContext.Provider value={ctxValue}>\n <fieldset\n role=\"presentation\"\n className={`${outerClasses} ds:border-0 ds:p-0 ds:m-0`}\n >\n {/* A legend cannot flex itself reliably, so the row lives in a\n span inside it; the legend goes full-width only when there is\n something to push to the end. */}\n <legend\n id={legendId}\n className={\n hasLegendSlot\n ? 'type-label ds:text-foreground ds:p-0 ds:w-full'\n : 'type-label ds:text-foreground ds:p-0'\n }\n >\n {hasLegendSlot ? (\n <span className=\"ds:flex ds:items-start ds:gap-[var(--spacing-xs)]\">\n {labelStart ? (\n <span className=\"ds:inline-flex ds:shrink-0 ds:items-center\">\n {labelStart}\n </span>\n ) : null}\n {/* An explicit separator, so the accessible name reads\n \"Highlighted, Smoker\" and not one run-on word. The row\n is a flex box, which drops a whitespace-only text node —\n it costs nothing on screen. */}\n {labelStart ? ' ' : null}\n <span>{legendText}</span>\n {labelEnd ? ' ' : null}\n {labelEnd ? (\n <span className=\"ds:ms-auto ds:inline-flex ds:shrink-0 ds:items-center\">\n {labelEnd}\n </span>\n ) : null}\n </span>\n ) : (\n legendText\n )}\n </legend>\n {descriptionNode}\n {control}\n {errorNode}\n </fieldset>\n </RadioGroupInternalContext.Provider>\n );\n }\n\n return (\n <RadioGroupInternalContext.Provider value={ctxValue}>\n <div className={outerClasses}>\n {descriptionNode}\n {control}\n {errorNode}\n </div>\n </RadioGroupInternalContext.Provider>\n );\n },\n);\n\nRadioGroup.displayName = 'RadioGroup';\n"],"names":["radioGroupAgent","handle","args","SEGMENTED_TRACK","radioGroupVariants","cva","noop","useSegmentedCollapse","enabled","structureKey","contentKey","containerRef","useRef","measureRef","lineRef","endRef","collapsed","setCollapsed","useState","measureNowRef","useIsomorphicLayoutEffect","container","measure","update","available","end","line","endWidth","observer","RadioGroup","forwardRef","children","variant","label","labelStart","labelEnd","controlEnd","description","error","required","disabled","className","id","value","defaultValue","onValueChange","props","ref","baseId","useId","legendId","descriptionId","errorId","describedBy","labelledBy","isSegmented","orientation","segmentChildren","Children","isValidElement","segmentContentKey","child","segmented","ctxValue","useMemo","descriptionNode","jsx","errorNode","jsxs","CircleAlert","rootRef","composedRef","composeRefs","dir","useDirection","isControlled","internalValue","setInternalValue","currentValue","currentValueRef","handleValueChange","next","agentHandle","_a","radio","useAgentRegistration","root","RadixRadioGroup","control","TooltipProvider","index","radioSegmentVariants","RadioSegmentFace","outerClasses","hasLegendSlot","legendText","Fragment","RadioGroupInternalContext"],"mappings":"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"}