@alfadocs/ui-kit-debug 1.56.0 → 1.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. package/dist/_chunks/{address-fields-BfjxS05Z.js → address-fields-CJtu7LQU.js} +2 -2
  2. package/dist/_chunks/{address-fields-BfjxS05Z.js.map → address-fields-CJtu7LQU.js.map} +1 -1
  3. package/dist/_chunks/{ai-credits-notice-BoNJtOuE.js → ai-credits-notice-ktklr8fy.js} +2 -2
  4. package/dist/_chunks/{ai-credits-notice-BoNJtOuE.js.map → ai-credits-notice-ktklr8fy.js.map} +1 -1
  5. package/dist/_chunks/ai-permission-notice-DyuEGwAt.js +206 -0
  6. package/dist/_chunks/ai-permission-notice-DyuEGwAt.js.map +1 -0
  7. package/dist/_chunks/alia-sidebar-dybRpWml.js +1284 -0
  8. package/dist/_chunks/alia-sidebar-dybRpWml.js.map +1 -0
  9. package/dist/_chunks/{anamnesis-summary-rows-CQ-XGr0T.js → anamnesis-summary-rows-M-FUkw9p.js} +6 -6
  10. package/dist/_chunks/{anamnesis-summary-rows-CQ-XGr0T.js.map → anamnesis-summary-rows-M-FUkw9p.js.map} +1 -1
  11. package/dist/_chunks/{app-frame-B-0O9CrU.js → app-frame-CqmDh2v5.js} +2 -2
  12. package/dist/_chunks/{app-frame-B-0O9CrU.js.map → app-frame-CqmDh2v5.js.map} +1 -1
  13. package/dist/_chunks/{appointment-peek-BIZaDeCi.js → appointment-peek-WvNbE4JG.js} +2 -2
  14. package/dist/_chunks/{appointment-peek-BIZaDeCi.js.map → appointment-peek-WvNbE4JG.js.map} +1 -1
  15. package/dist/_chunks/{appointment-timeline-DmqYEIT9.js → appointment-timeline-Z0494xO-.js} +2 -2
  16. package/dist/_chunks/{appointment-timeline-DmqYEIT9.js.map → appointment-timeline-Z0494xO-.js.map} +1 -1
  17. package/dist/_chunks/{balance-badge-cell-DmDcXw0c.js → balance-badge-cell-CGoJZlKf.js} +3 -3
  18. package/dist/_chunks/{balance-badge-cell-DmDcXw0c.js.map → balance-badge-cell-CGoJZlKf.js.map} +1 -1
  19. package/dist/_chunks/{booking-WyNGKPE2.js → booking-CiFSAMR-.js} +4 -4
  20. package/dist/_chunks/{booking-WyNGKPE2.js.map → booking-CiFSAMR-.js.map} +1 -1
  21. package/dist/_chunks/{calculator-dialog-pCPWta7h.js → calculator-dialog-CzQv03p0.js} +2 -2
  22. package/dist/_chunks/{calculator-dialog-pCPWta7h.js.map → calculator-dialog-CzQv03p0.js.map} +1 -1
  23. package/dist/_chunks/{calendar-workspace-Du2ryaI-.js → calendar-workspace-DNHzjG7O.js} +19 -19
  24. package/dist/_chunks/calendar-workspace-DNHzjG7O.js.map +1 -0
  25. package/dist/_chunks/{care-plan-card-Ddjh5Doc.js → care-plan-card-DxrRLRdW.js} +2 -2
  26. package/dist/_chunks/{care-plan-card-Ddjh5Doc.js.map → care-plan-card-DxrRLRdW.js.map} +1 -1
  27. package/dist/_chunks/{care-plan-header-DUX_SVvF.js → care-plan-header-BMwZIgHJ.js} +2 -2
  28. package/dist/_chunks/{care-plan-header-DUX_SVvF.js.map → care-plan-header-BMwZIgHJ.js.map} +1 -1
  29. package/dist/_chunks/{chart-HsF1KHbx.js → chart-ZMkX-Gqy.js} +338 -341
  30. package/dist/_chunks/chart-ZMkX-Gqy.js.map +1 -0
  31. package/dist/_chunks/{city-input-BC_nYINn.js → city-input-3J3bz9EO.js} +2 -2
  32. package/dist/_chunks/{city-input-BC_nYINn.js.map → city-input-3J3bz9EO.js.map} +1 -1
  33. package/dist/_chunks/{clinical-note-card-14JIoUR0.js → clinical-note-card-hx939bvw.js} +2 -2
  34. package/dist/_chunks/{clinical-note-card-14JIoUR0.js.map → clinical-note-card-hx939bvw.js.map} +1 -1
  35. package/dist/_chunks/{color-picker-BRQ4Y9SO.js → color-picker-BsggJovx.js} +128 -123
  36. package/dist/_chunks/color-picker-BsggJovx.js.map +1 -0
  37. package/dist/_chunks/{contact-card-CmK05vNb.js → contact-card-fHBMwEsx.js} +2 -2
  38. package/dist/_chunks/{contact-card-CmK05vNb.js.map → contact-card-fHBMwEsx.js.map} +1 -1
  39. package/dist/_chunks/{contact-profile-card-Ci8lBQ6a.js → contact-profile-card-CMyBYgRR.js} +2 -2
  40. package/dist/_chunks/{contact-profile-card-Ci8lBQ6a.js.map → contact-profile-card-CMyBYgRR.js.map} +1 -1
  41. package/dist/_chunks/{control-room-rail-Tx2jW250.js → control-room-rail-CJ85HkS2.js} +2 -2
  42. package/dist/_chunks/{control-room-rail-Tx2jW250.js.map → control-room-rail-CJ85HkS2.js.map} +1 -1
  43. package/dist/_chunks/{cycle-calculator-Dgfqr4Q4.js → cycle-calculator-Cww9DzIa.js} +2 -2
  44. package/dist/_chunks/{cycle-calculator-Dgfqr4Q4.js.map → cycle-calculator-Cww9DzIa.js.map} +1 -1
  45. package/dist/_chunks/dashboard-grid-Cs7cJAsA.js +933 -0
  46. package/dist/_chunks/dashboard-grid-Cs7cJAsA.js.map +1 -0
  47. package/dist/_chunks/{data-table-D8fuhqO1.js → data-table-Yn5xiGzs.js} +3 -3
  48. package/dist/_chunks/{data-table-D8fuhqO1.js.map → data-table-Yn5xiGzs.js.map} +1 -1
  49. package/dist/_chunks/{data-table-tabs-Xhg5G0gU.js → data-table-tabs-CHYAAeHy.js} +2 -2
  50. package/dist/_chunks/{data-table-tabs-Xhg5G0gU.js.map → data-table-tabs-CHYAAeHy.js.map} +1 -1
  51. package/dist/_chunks/{date-picker-wRAcq2lt.js → date-picker-BSZuKo13.js} +69 -62
  52. package/dist/_chunks/date-picker-BSZuKo13.js.map +1 -0
  53. package/dist/_chunks/{date-range-picker-CtUOI38x.js → date-range-picker-CFk-5O3R.js} +176 -171
  54. package/dist/_chunks/date-range-picker-CFk-5O3R.js.map +1 -0
  55. package/dist/_chunks/{date-time-picker-CLeLKuv9.js → date-time-picker-CjxTkblD.js} +92 -85
  56. package/dist/_chunks/date-time-picker-CjxTkblD.js.map +1 -0
  57. package/dist/_chunks/{dialog-CUzbnKLw.js → dialog-Dn-iQ0Jp.js} +2 -2
  58. package/dist/_chunks/{dialog-CUzbnKLw.js.map → dialog-Dn-iQ0Jp.js.map} +1 -1
  59. package/dist/_chunks/{document-preview-uoTekVR7.js → document-preview-CHGGG0l_.js} +2 -2
  60. package/dist/_chunks/{document-preview-uoTekVR7.js.map → document-preview-CHGGG0l_.js.map} +1 -1
  61. package/dist/_chunks/{due-date-calculator-CSjklbyw.js → due-date-calculator-D_qFUiHp.js} +2 -2
  62. package/dist/_chunks/{due-date-calculator-CSjklbyw.js.map → due-date-calculator-D_qFUiHp.js.map} +1 -1
  63. package/dist/_chunks/{entity-summary-DcB0fIiv.js → entity-summary-CWcCSThK.js} +2 -2
  64. package/dist/_chunks/{entity-summary-DcB0fIiv.js.map → entity-summary-CWcCSThK.js.map} +1 -1
  65. package/dist/_chunks/{face-scheme-BicuUA2K.js → face-scheme-DSKDdIsb.js} +2 -2
  66. package/dist/_chunks/{face-scheme-BicuUA2K.js.map → face-scheme-DSKDdIsb.js.map} +1 -1
  67. package/dist/_chunks/{file-manager-Cc_uO8r2.js → file-manager-DEtkQR1F.js} +4 -4
  68. package/dist/_chunks/{file-manager-Cc_uO8r2.js.map → file-manager-DEtkQR1F.js.map} +1 -1
  69. package/dist/_chunks/{forgot-password-form-DEx-M_QR.js → forgot-password-form-CEqOmNuX.js} +2 -2
  70. package/dist/_chunks/{forgot-password-form-DEx-M_QR.js.map → forgot-password-form-CEqOmNuX.js.map} +1 -1
  71. package/dist/_chunks/{gestational-age-calculator-DqVeJke2.js → gestational-age-calculator-CZi43xKG.js} +2 -2
  72. package/dist/_chunks/{gestational-age-calculator-DqVeJke2.js.map → gestational-age-calculator-CZi43xKG.js.map} +1 -1
  73. package/dist/_chunks/{hcg-doubling-BIYyI2Yo.js → hcg-doubling-Ccvh7OaU.js} +2 -2
  74. package/dist/_chunks/{hcg-doubling-BIYyI2Yo.js.map → hcg-doubling-Ccvh7OaU.js.map} +1 -1
  75. package/dist/_chunks/{header-settings-ge_3gYEq.js → header-settings-BMcCx2LC.js} +2 -2
  76. package/dist/_chunks/{header-settings-ge_3gYEq.js.map → header-settings-BMcCx2LC.js.map} +1 -1
  77. package/dist/_chunks/{heatmap-Gf9r7Tn1.js → heatmap-DiyOSQk9.js} +2 -2
  78. package/dist/_chunks/{heatmap-Gf9r7Tn1.js.map → heatmap-DiyOSQk9.js.map} +1 -1
  79. package/dist/_chunks/{help-me-write-templates-fV-Apf72.js → help-me-write-templates-CM1p6qkm.js} +3 -3
  80. package/dist/_chunks/{help-me-write-templates-fV-Apf72.js.map → help-me-write-templates-CM1p6qkm.js.map} +1 -1
  81. package/dist/_chunks/{hover-card-BnTueNS2.js → hover-card-U_ZYoh1n.js} +201 -187
  82. package/dist/_chunks/hover-card-U_ZYoh1n.js.map +1 -0
  83. package/dist/_chunks/{icon-picker-DWrqmI1c.js → icon-picker-rOFTawXk.js} +3 -3
  84. package/dist/_chunks/{icon-picker-DWrqmI1c.js.map → icon-picker-rOFTawXk.js.map} +1 -1
  85. package/dist/_chunks/{info-tip-B0jmIt6M.js → info-tip-CJpNpzZe.js} +2 -2
  86. package/dist/_chunks/{info-tip-B0jmIt6M.js.map → info-tip-CJpNpzZe.js.map} +1 -1
  87. package/dist/_chunks/{kit-extensions-Byfxy6sy.js → kit-extensions-DYVxWcqv.js} +4 -4
  88. package/dist/_chunks/{kit-extensions-Byfxy6sy.js.map → kit-extensions-DYVxWcqv.js.map} +1 -1
  89. package/dist/_chunks/{link-cell-renderer-TeJNvymP.js → link-cell-renderer-C1wOyxDF.js} +3 -3
  90. package/dist/_chunks/{link-cell-renderer-TeJNvymP.js.map → link-cell-renderer-C1wOyxDF.js.map} +1 -1
  91. package/dist/_chunks/link-gRw3NtOt.js +137 -0
  92. package/dist/_chunks/link-gRw3NtOt.js.map +1 -0
  93. package/dist/_chunks/{list-RRN2TJ_7.js → list-CNnn7DOD.js} +75 -73
  94. package/dist/_chunks/list-CNnn7DOD.js.map +1 -0
  95. package/dist/_chunks/{locale-picker-DfNSdOpy.js → locale-picker-BGfrZyTw.js} +2 -2
  96. package/dist/_chunks/{locale-picker-DfNSdOpy.js.map → locale-picker-BGfrZyTw.js.map} +1 -1
  97. package/dist/_chunks/{login-dev-card-DmZ1B0lB.js → login-dev-card-CIim81VB.js} +2 -2
  98. package/dist/_chunks/{login-dev-card-DmZ1B0lB.js.map → login-dev-card-CIim81VB.js.map} +1 -1
  99. package/dist/_chunks/marketplace-app-shell-CSDmGLPW.js +613 -0
  100. package/dist/_chunks/marketplace-app-shell-CSDmGLPW.js.map +1 -0
  101. package/dist/_chunks/{message-tray-BB95DA82.js → message-tray-DmU0poD7.js} +76 -69
  102. package/dist/_chunks/message-tray-DmU0poD7.js.map +1 -0
  103. package/dist/_chunks/{nav-grid-BqCPH8sm.js → nav-grid-Byx8PxuB.js} +2 -2
  104. package/dist/_chunks/{nav-grid-BqCPH8sm.js.map → nav-grid-Byx8PxuB.js.map} +1 -1
  105. package/dist/_chunks/navigation-dismiss-B1mcW1CT.js +9 -0
  106. package/dist/_chunks/navigation-dismiss-B1mcW1CT.js.map +1 -0
  107. package/dist/_chunks/non-modal-tab-exit-j3CPOuE3.js +89 -0
  108. package/dist/_chunks/non-modal-tab-exit-j3CPOuE3.js.map +1 -0
  109. package/dist/_chunks/{note-attachment-I1NLoeRZ.js → note-attachment-Bt2cddsZ.js} +2 -2
  110. package/dist/_chunks/{note-attachment-I1NLoeRZ.js.map → note-attachment-Bt2cddsZ.js.map} +1 -1
  111. package/dist/_chunks/{note-timeline-CsY8YOE7.js → note-timeline-CX9nAgAR.js} +2 -2
  112. package/dist/_chunks/{note-timeline-CsY8YOE7.js.map → note-timeline-CX9nAgAR.js.map} +1 -1
  113. package/dist/_chunks/{notes-panel-DceRhthG.js → notes-panel-DHLHsxpW.js} +4 -4
  114. package/dist/_chunks/{notes-panel-DceRhthG.js.map → notes-panel-DHLHsxpW.js.map} +1 -1
  115. package/dist/_chunks/{notification-tray-__sJXnsz.js → notification-tray-DPU-Xg0i.js} +83 -76
  116. package/dist/_chunks/notification-tray-DPU-Xg0i.js.map +1 -0
  117. package/dist/_chunks/{panel-subview-BT-Apwgb.js → panel-subview-D4o6ar6_.js} +61 -47
  118. package/dist/_chunks/panel-subview-D4o6ar6_.js.map +1 -0
  119. package/dist/_chunks/{patient-details-DsTtjpuX.js → patient-details-BCaVuaXz.js} +2 -2
  120. package/dist/_chunks/{patient-details-DsTtjpuX.js.map → patient-details-BCaVuaXz.js.map} +1 -1
  121. package/dist/_chunks/{patient-field-row-BvZ9luz-.js → patient-field-row-jcRSTrp4.js} +7 -7
  122. package/dist/_chunks/{patient-field-row-BvZ9luz-.js.map → patient-field-row-jcRSTrp4.js.map} +1 -1
  123. package/dist/_chunks/{patient-summary-card-9nQWTQf6.js → patient-summary-card-kQIfPQOE.js} +4 -4
  124. package/dist/_chunks/{patient-summary-card-9nQWTQf6.js.map → patient-summary-card-kQIfPQOE.js.map} +1 -1
  125. package/dist/_chunks/{payment-automation-upsell-DiHovmUL.js → payment-automation-upsell-C4wHOxsp.js} +2 -2
  126. package/dist/_chunks/{payment-automation-upsell-DiHovmUL.js.map → payment-automation-upsell-C4wHOxsp.js.map} +1 -1
  127. package/dist/_chunks/{payment-request-card-CwDpwXUC.js → payment-request-card-DAniJNLX.js} +2 -2
  128. package/dist/_chunks/{payment-request-card-CwDpwXUC.js.map → payment-request-card-DAniJNLX.js.map} +1 -1
  129. package/dist/_chunks/{pdf-viewer-C3minW5b.js → pdf-viewer-CNQxa4tv.js} +396 -391
  130. package/dist/_chunks/pdf-viewer-CNQxa4tv.js.map +1 -0
  131. package/dist/_chunks/{phone-input-DxkHMYmu.js → phone-input-O9camxkq.js} +156 -151
  132. package/dist/_chunks/phone-input-O9camxkq.js.map +1 -0
  133. package/dist/_chunks/popover-BG75rYjN.js +367 -0
  134. package/dist/_chunks/popover-BG75rYjN.js.map +1 -0
  135. package/dist/_chunks/{practice-results-Dhbo-fc_.js → practice-results-D07wgCqV.js} +2 -2
  136. package/dist/_chunks/{practice-results-Dhbo-fc_.js.map → practice-results-D07wgCqV.js.map} +1 -1
  137. package/dist/_chunks/{pregnancy-dating-Bfu0Cq4H.js → pregnancy-dating-BFzv9g1N.js} +2 -2
  138. package/dist/_chunks/{pregnancy-dating-Bfu0Cq4H.js.map → pregnancy-dating-BFzv9g1N.js.map} +1 -1
  139. package/dist/_chunks/{product-hub-panel-BSSiGGG4.js → product-hub-panel-DCYX0rPG.js} +103 -96
  140. package/dist/_chunks/product-hub-panel-DCYX0rPG.js.map +1 -0
  141. package/dist/_chunks/{public-footer-CxpG6J1M.js → public-footer-ZWTEG1Rq.js} +2 -2
  142. package/dist/_chunks/{public-footer-CxpG6J1M.js.map → public-footer-ZWTEG1Rq.js.map} +1 -1
  143. package/dist/_chunks/{public-header.agent-pr2hyiND.js → public-header.agent-C1SlVSYt.js} +2 -2
  144. package/dist/_chunks/{public-header.agent-pr2hyiND.js.map → public-header.agent-C1SlVSYt.js.map} +1 -1
  145. package/dist/_chunks/{radiograph-panel.agent-DkUokbEa.js → radiograph-panel.agent-DyqbTECc.js} +4 -4
  146. package/dist/_chunks/{radiograph-panel.agent-DkUokbEa.js.map → radiograph-panel.agent-DyqbTECc.js.map} +1 -1
  147. package/dist/_chunks/{registration-form-D7iNqMBF.js → registration-form-DrSR9Sjk.js} +4 -4
  148. package/dist/_chunks/{registration-form-D7iNqMBF.js.map → registration-form-DrSR9Sjk.js.map} +1 -1
  149. package/dist/_chunks/{rich-text-editor-CkFfmA3v.js → rich-text-editor-UgXri8h6.js} +490 -485
  150. package/dist/_chunks/rich-text-editor-UgXri8h6.js.map +1 -0
  151. package/dist/_chunks/{scroll-area-ZtFCv9K7.js → scroll-area-CY5SLYNw.js} +104 -74
  152. package/dist/_chunks/scroll-area-CY5SLYNw.js.map +1 -0
  153. package/dist/_chunks/{search-bar-DQJS0wJN.js → search-bar-mA4bPe3t.js} +294 -255
  154. package/dist/_chunks/search-bar-mA4bPe3t.js.map +1 -0
  155. package/dist/_chunks/{sheet-C7SwIxwB.js → sheet-Dtjk0CVv.js} +3 -3
  156. package/dist/_chunks/{sheet-C7SwIxwB.js.map → sheet-Dtjk0CVv.js.map} +1 -1
  157. package/dist/_chunks/sidebar-D4Wllqfz.js +2029 -0
  158. package/dist/_chunks/sidebar-D4Wllqfz.js.map +1 -0
  159. package/dist/_chunks/{sign-document-B6HlyCGV.js → sign-document-D4iHS_Ug.js} +2 -2
  160. package/dist/_chunks/{sign-document-B6HlyCGV.js.map → sign-document-D4iHS_Ug.js.map} +1 -1
  161. package/dist/_chunks/{signature-request-DhbpB9N9.js → signature-request-dAVgE0_5.js} +3 -3
  162. package/dist/_chunks/{signature-request-DhbpB9N9.js.map → signature-request-dAVgE0_5.js.map} +1 -1
  163. package/dist/_chunks/{signed-out-frame-B2GTIeqA.js → signed-out-frame-DOJpobp8.js} +3 -3
  164. package/dist/_chunks/{signed-out-frame-B2GTIeqA.js.map → signed-out-frame-DOJpobp8.js.map} +1 -1
  165. package/dist/_chunks/{state-backed-text-input-DECQy5aA.js → state-backed-text-input-Cgh4ms3p.js} +2 -2
  166. package/dist/_chunks/{state-backed-text-input-DECQy5aA.js.map → state-backed-text-input-Cgh4ms3p.js.map} +1 -1
  167. package/dist/_chunks/{task-editor-ByyRu29Y.js → task-editor-BflEZmcF.js} +7 -6
  168. package/dist/_chunks/task-editor-BflEZmcF.js.map +1 -0
  169. package/dist/_chunks/{tool-rail-Bwyuw_Ot.js → tool-rail-CTq1KwxW.js} +115 -114
  170. package/dist/_chunks/{tool-rail-Bwyuw_Ot.js.map → tool-rail-CTq1KwxW.js.map} +1 -1
  171. package/dist/_chunks/{use-appointment-details-read-JsDM48tf.js → use-appointment-details-read-izwoXh-G.js} +8 -8
  172. package/dist/_chunks/{use-appointment-details-read-JsDM48tf.js.map → use-appointment-details-read-izwoXh-G.js.map} +1 -1
  173. package/dist/_chunks/use-state-backed-input-DhRQo6gM.js +57 -0
  174. package/dist/_chunks/use-state-backed-input-DhRQo6gM.js.map +1 -0
  175. package/dist/_chunks/{voice-control-panel-Bg1eklL0.js → voice-control-panel-an-bpQfF.js} +3 -3
  176. package/dist/_chunks/{voice-control-panel-Bg1eklL0.js.map → voice-control-panel-an-bpQfF.js.map} +1 -1
  177. package/dist/_chunks/{widget-picker-DXYBMTfe.js → widget-picker-DlJOgYrZ.js} +80 -57
  178. package/dist/_chunks/widget-picker-DlJOgYrZ.js.map +1 -0
  179. package/dist/agent-catalog.json +3 -3
  180. package/dist/agent-i18n/en.json +1 -1
  181. package/dist/components/_shared/navigation-dismiss.d.ts +8 -0
  182. package/dist/components/_shared/navigation-dismiss.d.ts.map +1 -0
  183. package/dist/components/_shared/non-modal-tab-exit.d.ts +15 -4
  184. package/dist/components/_shared/non-modal-tab-exit.d.ts.map +1 -1
  185. package/dist/components/_shared/use-state-backed-input.d.ts +3 -2
  186. package/dist/components/_shared/use-state-backed-input.d.ts.map +1 -1
  187. package/dist/components/address-fields/index.js +1 -1
  188. package/dist/components/ai-credits-notice/index.js +1 -1
  189. package/dist/components/ai-permission-notice/ai-permission-notice.d.ts +32 -0
  190. package/dist/components/ai-permission-notice/ai-permission-notice.d.ts.map +1 -1
  191. package/dist/components/ai-permission-notice/index.d.ts +1 -1
  192. package/dist/components/ai-permission-notice/index.d.ts.map +1 -1
  193. package/dist/components/ai-permission-notice/index.js +1 -1
  194. package/dist/components/app-frame/index.js +1 -1
  195. package/dist/components/appointment-details-panel/index.js +1 -1
  196. package/dist/components/appointment-peek/index.js +1 -1
  197. package/dist/components/appointment-timeline/index.js +1 -1
  198. package/dist/components/booking/index.js +1 -1
  199. package/dist/components/calculator-dialog/index.js +1 -1
  200. package/dist/components/care-plan-card/index.js +1 -1
  201. package/dist/components/care-plan-header/index.js +1 -1
  202. package/dist/components/chart/chart.d.ts +5 -5
  203. package/dist/components/chart/chart.d.ts.map +1 -1
  204. package/dist/components/chart/index.js +1 -1
  205. package/dist/components/city-input/index.js +1 -1
  206. package/dist/components/clinical-note-card/index.js +1 -1
  207. package/dist/components/color-picker/color-picker.d.ts.map +1 -1
  208. package/dist/components/color-picker/index.js +1 -1
  209. package/dist/components/contact-card/index.js +1 -1
  210. package/dist/components/contact-profile-card/index.js +1 -1
  211. package/dist/components/control-room-rail/index.js +1 -1
  212. package/dist/components/cycle-calculator/index.js +1 -1
  213. package/dist/components/dashboard-grid/dashboard-grid.d.ts +33 -8
  214. package/dist/components/dashboard-grid/dashboard-grid.d.ts.map +1 -1
  215. package/dist/components/dashboard-grid/index.js +1 -1
  216. package/dist/components/data-table/index.js +2 -2
  217. package/dist/components/data-table-tabs/index.js +1 -1
  218. package/dist/components/date-picker/date-picker.d.ts.map +1 -1
  219. package/dist/components/date-picker/index.js +1 -1
  220. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
  221. package/dist/components/date-range-picker/index.js +1 -1
  222. package/dist/components/date-time-picker/date-time-picker.d.ts.map +1 -1
  223. package/dist/components/date-time-picker/index.js +1 -1
  224. package/dist/components/dialog/index.js +1 -1
  225. package/dist/components/document-preview/index.js +1 -1
  226. package/dist/components/due-date-calculator/index.js +1 -1
  227. package/dist/components/entity-summary/index.js +1 -1
  228. package/dist/components/face-scheme/index.js +1 -1
  229. package/dist/components/file-manager/index.js +1 -1
  230. package/dist/components/gestational-age-calculator/index.js +1 -1
  231. package/dist/components/hcg-doubling/index.js +1 -1
  232. package/dist/components/header-settings/index.js +1 -1
  233. package/dist/components/heatmap/index.js +1 -1
  234. package/dist/components/hover-card/hover-card.d.ts.map +1 -1
  235. package/dist/components/hover-card/index.js +1 -1
  236. package/dist/components/icon-picker/index.js +1 -1
  237. package/dist/components/info-tip/index.js +1 -1
  238. package/dist/components/link/index.js +1 -1
  239. package/dist/components/link/link.d.ts +5 -3
  240. package/dist/components/link/link.d.ts.map +1 -1
  241. package/dist/components/list/index.js +1 -1
  242. package/dist/components/list/list.d.ts.map +1 -1
  243. package/dist/components/locale-picker/index.js +1 -1
  244. package/dist/components/message-tray/index.js +1 -1
  245. package/dist/components/message-tray/message-tray.d.ts.map +1 -1
  246. package/dist/components/nav-grid/index.js +1 -1
  247. package/dist/components/note-timeline/index.js +1 -1
  248. package/dist/components/notes-panel/index.js +1 -1
  249. package/dist/components/notification-tray/index.js +1 -1
  250. package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
  251. package/dist/components/panel-subview/index.js +1 -1
  252. package/dist/components/panel-subview/panel-subview.d.ts.map +1 -1
  253. package/dist/components/patient-details/index.js +1 -1
  254. package/dist/components/patient-summary-card/index.js +1 -1
  255. package/dist/components/patient-table/index.js +1 -1
  256. package/dist/components/payment-card/index.js +1 -1
  257. package/dist/components/pdf-viewer/index.js +1 -1
  258. package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  259. package/dist/components/phone-input/index.js +1 -1
  260. package/dist/components/phone-input/phone-input.d.ts.map +1 -1
  261. package/dist/components/popover/index.js +1 -1
  262. package/dist/components/popover/popover.d.ts +1 -1
  263. package/dist/components/popover/popover.d.ts.map +1 -1
  264. package/dist/components/practice-results/index.js +1 -1
  265. package/dist/components/pregnancy-dating/index.js +1 -1
  266. package/dist/components/product-hub-tray/index.js +1 -1
  267. package/dist/components/product-hub-tray/product-hub-tray.d.ts.map +1 -1
  268. package/dist/components/public-footer/index.js +1 -1
  269. package/dist/components/public-header/index.js +1 -1
  270. package/dist/components/radiograph-panel/index.js +1 -1
  271. package/dist/components/rich-text-editor/editor-toolbar.d.ts.map +1 -1
  272. package/dist/components/rich-text-editor/index.js +2 -2
  273. package/dist/components/scroll-area/index.js +1 -1
  274. package/dist/components/scroll-area/scroll-area.d.ts +6 -5
  275. package/dist/components/scroll-area/scroll-area.d.ts.map +1 -1
  276. package/dist/components/search-bar/index.js +1 -1
  277. package/dist/components/search-bar/search-bar.d.ts +1 -1
  278. package/dist/components/search-bar/search-bar.d.ts.map +1 -1
  279. package/dist/components/sheet/index.js +1 -1
  280. package/dist/components/sidebar/index.d.ts +1 -1
  281. package/dist/components/sidebar/index.d.ts.map +1 -1
  282. package/dist/components/sidebar/index.js +1 -1
  283. package/dist/components/sidebar/sidebar-move.d.ts +88 -0
  284. package/dist/components/sidebar/sidebar-move.d.ts.map +1 -0
  285. package/dist/components/sidebar/sidebar.d.ts +26 -1
  286. package/dist/components/sidebar/sidebar.d.ts.map +1 -1
  287. package/dist/components/sign-document/index.js +1 -1
  288. package/dist/components/task-editor/index.js +1 -1
  289. package/dist/components/task-editor/task-editor.d.ts.map +1 -1
  290. package/dist/components/tool-rail/index.js +1 -1
  291. package/dist/components/tool-rail/tool-rail.d.ts.map +1 -1
  292. package/dist/components/voice-control-panel/index.js +1 -1
  293. package/dist/components/widget-picker/index.js +1 -1
  294. package/dist/components/widget-picker/widget-picker.d.ts.map +1 -1
  295. package/dist/host-compat.css +2 -1
  296. package/dist/i18n/locales/ar.d.ts +24 -0
  297. package/dist/i18n/locales/ar.d.ts.map +1 -1
  298. package/dist/i18n/locales/ar.js +26 -2
  299. package/dist/i18n/locales/ar.js.map +1 -1
  300. package/dist/i18n/locales/de.d.ts +24 -0
  301. package/dist/i18n/locales/de.d.ts.map +1 -1
  302. package/dist/i18n/locales/de.js +26 -2
  303. package/dist/i18n/locales/de.js.map +1 -1
  304. package/dist/i18n/locales/el.d.ts +24 -0
  305. package/dist/i18n/locales/el.d.ts.map +1 -1
  306. package/dist/i18n/locales/el.js +26 -2
  307. package/dist/i18n/locales/el.js.map +1 -1
  308. package/dist/i18n/locales/en.d.ts +24 -0
  309. package/dist/i18n/locales/en.d.ts.map +1 -1
  310. package/dist/i18n/locales/en.js +26 -2
  311. package/dist/i18n/locales/en.js.map +1 -1
  312. package/dist/i18n/locales/es.d.ts +24 -0
  313. package/dist/i18n/locales/es.d.ts.map +1 -1
  314. package/dist/i18n/locales/es.js +26 -2
  315. package/dist/i18n/locales/es.js.map +1 -1
  316. package/dist/i18n/locales/fr.d.ts +24 -0
  317. package/dist/i18n/locales/fr.d.ts.map +1 -1
  318. package/dist/i18n/locales/fr.js +26 -2
  319. package/dist/i18n/locales/fr.js.map +1 -1
  320. package/dist/i18n/locales/hi.d.ts +24 -0
  321. package/dist/i18n/locales/hi.d.ts.map +1 -1
  322. package/dist/i18n/locales/hi.js +26 -2
  323. package/dist/i18n/locales/hi.js.map +1 -1
  324. package/dist/i18n/locales/it.d.ts +24 -0
  325. package/dist/i18n/locales/it.d.ts.map +1 -1
  326. package/dist/i18n/locales/it.js +26 -2
  327. package/dist/i18n/locales/it.js.map +1 -1
  328. package/dist/i18n/locales/ja.d.ts +24 -0
  329. package/dist/i18n/locales/ja.d.ts.map +1 -1
  330. package/dist/i18n/locales/ja.js +26 -2
  331. package/dist/i18n/locales/ja.js.map +1 -1
  332. package/dist/i18n/locales/nl.d.ts +24 -0
  333. package/dist/i18n/locales/nl.d.ts.map +1 -1
  334. package/dist/i18n/locales/nl.js +26 -2
  335. package/dist/i18n/locales/nl.js.map +1 -1
  336. package/dist/i18n/locales/pl.d.ts +24 -0
  337. package/dist/i18n/locales/pl.d.ts.map +1 -1
  338. package/dist/i18n/locales/pl.js +26 -2
  339. package/dist/i18n/locales/pl.js.map +1 -1
  340. package/dist/i18n/locales/pt.d.ts +24 -0
  341. package/dist/i18n/locales/pt.d.ts.map +1 -1
  342. package/dist/i18n/locales/pt.js +26 -2
  343. package/dist/i18n/locales/pt.js.map +1 -1
  344. package/dist/i18n/locales/ro.d.ts +24 -0
  345. package/dist/i18n/locales/ro.d.ts.map +1 -1
  346. package/dist/i18n/locales/ro.js +26 -2
  347. package/dist/i18n/locales/ro.js.map +1 -1
  348. package/dist/i18n/locales/ru.d.ts +24 -0
  349. package/dist/i18n/locales/ru.d.ts.map +1 -1
  350. package/dist/i18n/locales/ru.js +26 -2
  351. package/dist/i18n/locales/ru.js.map +1 -1
  352. package/dist/i18n/locales/sq.d.ts +24 -0
  353. package/dist/i18n/locales/sq.d.ts.map +1 -1
  354. package/dist/i18n/locales/sq.js +26 -2
  355. package/dist/i18n/locales/sq.js.map +1 -1
  356. package/dist/i18n/locales/sv.d.ts +24 -0
  357. package/dist/i18n/locales/sv.d.ts.map +1 -1
  358. package/dist/i18n/locales/sv.js +26 -2
  359. package/dist/i18n/locales/sv.js.map +1 -1
  360. package/dist/i18n/locales/tr.d.ts +24 -0
  361. package/dist/i18n/locales/tr.d.ts.map +1 -1
  362. package/dist/i18n/locales/tr.js +26 -2
  363. package/dist/i18n/locales/tr.js.map +1 -1
  364. package/dist/i18n/locales/zh.d.ts +24 -0
  365. package/dist/i18n/locales/zh.d.ts.map +1 -1
  366. package/dist/i18n/locales/zh.js +26 -2
  367. package/dist/i18n/locales/zh.js.map +1 -1
  368. package/dist/index.js +204 -203
  369. package/dist/locales/ar.json +26 -2
  370. package/dist/locales/de.json +26 -2
  371. package/dist/locales/el.json +26 -2
  372. package/dist/locales/en.json +26 -2
  373. package/dist/locales/es.json +26 -2
  374. package/dist/locales/fr.json +26 -2
  375. package/dist/locales/hi.json +26 -2
  376. package/dist/locales/it.json +26 -2
  377. package/dist/locales/ja.json +26 -2
  378. package/dist/locales/nl.json +26 -2
  379. package/dist/locales/pl.json +26 -2
  380. package/dist/locales/pt.json +26 -2
  381. package/dist/locales/ro.json +26 -2
  382. package/dist/locales/ru.json +26 -2
  383. package/dist/locales/sq.json +26 -2
  384. package/dist/locales/sv.json +26 -2
  385. package/dist/locales/tr.json +26 -2
  386. package/dist/locales/zh.json +26 -2
  387. package/dist/patterns/alia-assistant/alia-asteroid-icon.d.ts +10 -13
  388. package/dist/patterns/alia-assistant/alia-asteroid-icon.d.ts.map +1 -1
  389. package/dist/patterns/alia-assistant/alia-chat-surface.d.ts.map +1 -1
  390. package/dist/patterns/alia-assistant/alia-popout.d.ts +5 -3
  391. package/dist/patterns/alia-assistant/alia-popout.d.ts.map +1 -1
  392. package/dist/patterns/alia-assistant/index.d.ts +2 -0
  393. package/dist/patterns/alia-assistant/index.d.ts.map +1 -1
  394. package/dist/patterns/alia-assistant/index.js +6 -5
  395. package/dist/patterns/anamnesis/index.js +1 -1
  396. package/dist/patterns/calendar/index.js +1 -1
  397. package/dist/patterns/forgot-password-form/index.js +1 -1
  398. package/dist/patterns/help-me-write-templates/index.js +1 -1
  399. package/dist/patterns/login-form/index.js +1 -1
  400. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  401. package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts +40 -10
  402. package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts.map +1 -1
  403. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  404. package/dist/patterns/registration-form/index.js +1 -1
  405. package/dist/patterns/signature-request/index.js +1 -1
  406. package/dist/patterns/signed-out-frame/index.js +1 -1
  407. package/dist/tokens.css +1 -1
  408. package/package.json +1 -1
  409. package/dist/_chunks/ai-permission-notice-5vpblPCx.js +0 -171
  410. package/dist/_chunks/ai-permission-notice-5vpblPCx.js.map +0 -1
  411. package/dist/_chunks/alia-sidebar-DOei4Iyu.js +0 -1183
  412. package/dist/_chunks/alia-sidebar-DOei4Iyu.js.map +0 -1
  413. package/dist/_chunks/calendar-workspace-Du2ryaI-.js.map +0 -1
  414. package/dist/_chunks/chart-HsF1KHbx.js.map +0 -1
  415. package/dist/_chunks/color-picker-BRQ4Y9SO.js.map +0 -1
  416. package/dist/_chunks/dashboard-grid-DfEY2qci.js +0 -844
  417. package/dist/_chunks/dashboard-grid-DfEY2qci.js.map +0 -1
  418. package/dist/_chunks/date-picker-wRAcq2lt.js.map +0 -1
  419. package/dist/_chunks/date-range-picker-CtUOI38x.js.map +0 -1
  420. package/dist/_chunks/date-time-picker-CLeLKuv9.js.map +0 -1
  421. package/dist/_chunks/hover-card-BnTueNS2.js.map +0 -1
  422. package/dist/_chunks/link-2HokYuIi.js +0 -130
  423. package/dist/_chunks/link-2HokYuIi.js.map +0 -1
  424. package/dist/_chunks/list-RRN2TJ_7.js.map +0 -1
  425. package/dist/_chunks/marketplace-app-shell-Dcx-JEjg.js +0 -541
  426. package/dist/_chunks/marketplace-app-shell-Dcx-JEjg.js.map +0 -1
  427. package/dist/_chunks/message-tray-BB95DA82.js.map +0 -1
  428. package/dist/_chunks/non-modal-tab-exit-D2Bd93Bq.js +0 -65
  429. package/dist/_chunks/non-modal-tab-exit-D2Bd93Bq.js.map +0 -1
  430. package/dist/_chunks/notification-tray-__sJXnsz.js.map +0 -1
  431. package/dist/_chunks/panel-subview-BT-Apwgb.js.map +0 -1
  432. package/dist/_chunks/pdf-viewer-C3minW5b.js.map +0 -1
  433. package/dist/_chunks/phone-input-DxkHMYmu.js.map +0 -1
  434. package/dist/_chunks/popover-BI3oV3eY.js +0 -305
  435. package/dist/_chunks/popover-BI3oV3eY.js.map +0 -1
  436. package/dist/_chunks/product-hub-panel-BSSiGGG4.js.map +0 -1
  437. package/dist/_chunks/rich-text-editor-CkFfmA3v.js.map +0 -1
  438. package/dist/_chunks/scroll-area-ZtFCv9K7.js.map +0 -1
  439. package/dist/_chunks/search-bar-DQJS0wJN.js.map +0 -1
  440. package/dist/_chunks/sidebar-DLsG2AIk.js +0 -1349
  441. package/dist/_chunks/sidebar-DLsG2AIk.js.map +0 -1
  442. package/dist/_chunks/task-editor-ByyRu29Y.js.map +0 -1
  443. package/dist/_chunks/use-state-backed-input-C7ESmxKB.js +0 -59
  444. package/dist/_chunks/use-state-backed-input-C7ESmxKB.js.map +0 -1
  445. package/dist/_chunks/widget-picker-DXYBMTfe.js.map +0 -1
@@ -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":"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]}