@alfadocs/ui-kit-debug 1.112.2 → 1.114.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 (336) hide show
  1. package/dist/_chunks/{anamnesis-card-BzuluoD1.js → anamnesis-card-Ddnrdfx3.js} +2 -2
  2. package/dist/_chunks/{anamnesis-card-BzuluoD1.js.map → anamnesis-card-Ddnrdfx3.js.map} +1 -1
  3. package/dist/_chunks/{anamnesis-summary-card-DdTRdNrQ.js → anamnesis-summary-card-S1H_AARG.js} +2 -2
  4. package/dist/_chunks/{anamnesis-summary-card-DdTRdNrQ.js.map → anamnesis-summary-card-S1H_AARG.js.map} +1 -1
  5. package/dist/_chunks/{anamnesis-summary-rows-DfDulR_c.js → anamnesis-summary-rows-DaS-j8Jd.js} +2 -2
  6. package/dist/_chunks/{anamnesis-summary-rows-DfDulR_c.js.map → anamnesis-summary-rows-DaS-j8Jd.js.map} +1 -1
  7. package/dist/_chunks/{antenatal-schedule-timeline-DmsY5g28.js → antenatal-schedule-timeline-DmlXxevC.js} +2 -2
  8. package/dist/_chunks/{antenatal-schedule-timeline-DmsY5g28.js.map → antenatal-schedule-timeline-DmlXxevC.js.map} +1 -1
  9. package/dist/_chunks/{bishop-score-CnIft4eV.js → bishop-score-QJu-sM1y.js} +2 -2
  10. package/dist/_chunks/{bishop-score-CnIft4eV.js.map → bishop-score-QJu-sM1y.js.map} +1 -1
  11. package/dist/_chunks/{bmi-calculator-NMkXc079.js → bmi-calculator-Ba4yoR31.js} +2 -2
  12. package/dist/_chunks/{bmi-calculator-NMkXc079.js.map → bmi-calculator-Ba4yoR31.js.map} +1 -1
  13. package/dist/_chunks/{calendar-appointment-editor-dialog-FvdoKZ54.js → calendar-appointment-editor-dialog-iyh9QqNw.js} +6 -6
  14. package/dist/_chunks/{calendar-appointment-editor-dialog-FvdoKZ54.js.map → calendar-appointment-editor-dialog-iyh9QqNw.js.map} +1 -1
  15. package/dist/_chunks/{card-C85_Ndhb.js → card-DVO3x8E-.js} +23 -19
  16. package/dist/_chunks/{card-C85_Ndhb.js.map → card-DVO3x8E-.js.map} +1 -1
  17. package/dist/_chunks/{clinical-note-card-BVkxGiGl.js → clinical-note-card-Zz5_GEz-.js} +2 -2
  18. package/dist/_chunks/{clinical-note-card-BVkxGiGl.js.map → clinical-note-card-Zz5_GEz-.js.map} +1 -1
  19. package/dist/_chunks/{connection-status-CWSU3eiq.js → connection-status-DjarASoU.js} +2 -2
  20. package/dist/_chunks/{connection-status-CWSU3eiq.js.map → connection-status-DjarASoU.js.map} +1 -1
  21. package/dist/_chunks/{contact-card-CymtNvy3.js → contact-card-Cv-Nwvac.js} +2 -2
  22. package/dist/_chunks/{contact-card-CymtNvy3.js.map → contact-card-Cv-Nwvac.js.map} +1 -1
  23. package/dist/_chunks/{contact-profile-card-CAL66GaH.js → contact-profile-card-DMXWBBkU.js} +2 -2
  24. package/dist/_chunks/{contact-profile-card-CAL66GaH.js.map → contact-profile-card-DMXWBBkU.js.map} +1 -1
  25. package/dist/_chunks/{cycle-calculator-ZMDvToIm.js → cycle-calculator-Dd-XbKmZ.js} +2 -2
  26. package/dist/_chunks/{cycle-calculator-ZMDvToIm.js.map → cycle-calculator-Dd-XbKmZ.js.map} +1 -1
  27. package/dist/_chunks/{document-preview-5xs64jME.js → document-preview-WvJKHJOP.js} +2 -2
  28. package/dist/_chunks/{document-preview-5xs64jME.js.map → document-preview-WvJKHJOP.js.map} +1 -1
  29. package/dist/_chunks/{due-date-calculator-Dr2cDa64.js → due-date-calculator-Dl6SyMHO.js} +3 -3
  30. package/dist/_chunks/{due-date-calculator-Dr2cDa64.js.map → due-date-calculator-Dl6SyMHO.js.map} +1 -1
  31. package/dist/_chunks/email-input-DxwbREpx.js +156 -0
  32. package/dist/_chunks/email-input-DxwbREpx.js.map +1 -0
  33. package/dist/_chunks/{entity-summary-BbqqYqF1.js → entity-summary-DGCBQDt1.js} +2 -2
  34. package/dist/_chunks/{entity-summary-BbqqYqF1.js.map → entity-summary-DGCBQDt1.js.map} +1 -1
  35. package/dist/_chunks/{face-scheme-e2M2HJGz.js → face-scheme-DlcQaQVR.js} +2 -2
  36. package/dist/_chunks/{face-scheme-e2M2HJGz.js.map → face-scheme-DlcQaQVR.js.map} +1 -1
  37. package/dist/_chunks/{fetal-weight-CkIwJgiH.js → fetal-weight-DmZzMRzB.js} +2 -2
  38. package/dist/_chunks/{fetal-weight-CkIwJgiH.js.map → fetal-weight-DmZzMRzB.js.map} +1 -1
  39. package/dist/_chunks/{finished-terminal-DXVAfhRr.js → finished-terminal-BKTFUk3S.js} +2 -2
  40. package/dist/_chunks/{finished-terminal-DXVAfhRr.js.map → finished-terminal-BKTFUk3S.js.map} +1 -1
  41. package/dist/_chunks/{forgot-password-form-vfCO2-Tt.js → forgot-password-form-Bc_UPax6.js} +9 -8
  42. package/dist/_chunks/{forgot-password-form-vfCO2-Tt.js.map → forgot-password-form-Bc_UPax6.js.map} +1 -1
  43. package/dist/_chunks/{gestational-age-calculator-Dv3IePb-.js → gestational-age-calculator-DmzYdW5e.js} +3 -3
  44. package/dist/_chunks/{gestational-age-calculator-Dv3IePb-.js.map → gestational-age-calculator-DmzYdW5e.js.map} +1 -1
  45. package/dist/_chunks/{hcg-doubling-DdyUt4gz.js → hcg-doubling-Tr72PetS.js} +2 -2
  46. package/dist/_chunks/{hcg-doubling-DdyUt4gz.js.map → hcg-doubling-Tr72PetS.js.map} +1 -1
  47. package/dist/_chunks/{heatmap-BiwC7Gdx.js → heatmap-CNxCDl0D.js} +2 -2
  48. package/dist/_chunks/{heatmap-BiwC7Gdx.js.map → heatmap-CNxCDl0D.js.map} +1 -1
  49. package/dist/_chunks/isEmail-BfVspSvV.js +248 -0
  50. package/dist/_chunks/isEmail-BfVspSvV.js.map +1 -0
  51. package/dist/_chunks/{kit-extensions-BOsUgWnE.js → kit-extensions-DZJRmDI6.js} +7 -7
  52. package/dist/_chunks/{kit-extensions-BOsUgWnE.js.map → kit-extensions-DZJRmDI6.js.map} +1 -1
  53. package/dist/_chunks/{login-dev-card-Cz1Clugq.js → login-dev-card-D7orCfJT.js} +48 -47
  54. package/dist/_chunks/{login-dev-card-Cz1Clugq.js.map → login-dev-card-D7orCfJT.js.map} +1 -1
  55. package/dist/_chunks/map-view-Bny79cWa.js +856 -0
  56. package/dist/_chunks/map-view-Bny79cWa.js.map +1 -0
  57. package/dist/_chunks/{marketplace-app-shell-C-4QF6mp.js → marketplace-app-shell-CPNVBVLH.js} +2 -2
  58. package/dist/_chunks/{marketplace-app-shell-C-4QF6mp.js.map → marketplace-app-shell-CPNVBVLH.js.map} +1 -1
  59. package/dist/_chunks/motion-is-off-BvAuNV5O.js +15 -0
  60. package/dist/_chunks/motion-is-off-BvAuNV5O.js.map +1 -0
  61. package/dist/_chunks/{notes-panel-Cz621DWV.js → notes-panel-DXMTObBv.js} +3 -3
  62. package/dist/_chunks/{notes-panel-Cz621DWV.js.map → notes-panel-DXMTObBv.js.map} +1 -1
  63. package/dist/_chunks/{operator-hero-BELhrv9o.js → operator-hero-BWayX73x.js} +71 -62
  64. package/dist/_chunks/{operator-hero-BELhrv9o.js.map → operator-hero-BWayX73x.js.map} +1 -1
  65. package/dist/_chunks/{patient-details-BwkDIm4D.js → patient-details-DdtXBNjt.js} +3 -3
  66. package/dist/_chunks/{patient-details-BwkDIm4D.js.map → patient-details-DdtXBNjt.js.map} +1 -1
  67. package/dist/_chunks/{patient-field-row-CBba7w9V.js → patient-field-row-D9rb-QJH.js} +2 -2
  68. package/dist/_chunks/{patient-field-row-CBba7w9V.js.map → patient-field-row-D9rb-QJH.js.map} +1 -1
  69. package/dist/_chunks/{patient-search-CxuqVUTB.js → patient-search-DDRDCjZi.js} +439 -482
  70. package/dist/_chunks/patient-search-DDRDCjZi.js.map +1 -0
  71. package/dist/_chunks/{patient-summary-card-DtYTo9w_.js → patient-summary-card-CGHz-Bvm.js} +3 -3
  72. package/dist/_chunks/{patient-summary-card-DtYTo9w_.js.map → patient-summary-card-CGHz-Bvm.js.map} +1 -1
  73. package/dist/_chunks/{payment-automation-upsell-u5EuFyCY.js → payment-automation-upsell-D7yaD4u1.js} +3 -3
  74. package/dist/_chunks/{payment-automation-upsell-u5EuFyCY.js.map → payment-automation-upsell-D7yaD4u1.js.map} +1 -1
  75. package/dist/_chunks/{payment-request-card-IR83TJax.js → payment-request-card-BmV2pLoM.js} +2 -2
  76. package/dist/_chunks/{payment-request-card-IR83TJax.js.map → payment-request-card-BmV2pLoM.js.map} +1 -1
  77. package/dist/_chunks/{periodontal-chart-DqdUEFxK.js → periodontal-chart-Bjz7O4wT.js} +2 -2
  78. package/dist/_chunks/{periodontal-chart-DqdUEFxK.js.map → periodontal-chart-Bjz7O4wT.js.map} +1 -1
  79. package/dist/_chunks/{periodontal-chart-card-CCkzStlm.js → periodontal-chart-card-CxEXHl2x.js} +2 -2
  80. package/dist/_chunks/{periodontal-chart-card-CCkzStlm.js.map → periodontal-chart-card-CxEXHl2x.js.map} +1 -1
  81. package/dist/_chunks/{periodontal-diagnosis-CF1d_0yl.js → periodontal-diagnosis-xheWfi4g.js} +2 -2
  82. package/dist/_chunks/{periodontal-diagnosis-CF1d_0yl.js.map → periodontal-diagnosis-xheWfi4g.js.map} +1 -1
  83. package/dist/_chunks/{periodontal-risk-chart-D2zyID0H.js → periodontal-risk-chart-BBPB9wf1.js} +2 -2
  84. package/dist/_chunks/{periodontal-risk-chart-D2zyID0H.js.map → periodontal-risk-chart-BBPB9wf1.js.map} +1 -1
  85. package/dist/_chunks/{practice-profile-hero-Bb4YyxHA.js → practice-profile-hero-Cw4NZp0A.js} +2 -2
  86. package/dist/_chunks/{practice-profile-hero-Bb4YyxHA.js.map → practice-profile-hero-Cw4NZp0A.js.map} +1 -1
  87. package/dist/_chunks/practice-results-BlxfBx-D.js +2181 -0
  88. package/dist/_chunks/practice-results-BlxfBx-D.js.map +1 -0
  89. package/dist/_chunks/{pregnancy-dating-Cs8xpZA8.js → pregnancy-dating-BvorzHrd.js} +3 -3
  90. package/dist/_chunks/{pregnancy-dating-Cs8xpZA8.js.map → pregnancy-dating-BvorzHrd.js.map} +1 -1
  91. package/dist/_chunks/{pregnancy-weight-gain-B_Zldlzq.js → pregnancy-weight-gain-DQoOM8QV.js} +2 -2
  92. package/dist/_chunks/{pregnancy-weight-gain-B_Zldlzq.js.map → pregnancy-weight-gain-DQoOM8QV.js.map} +1 -1
  93. package/dist/_chunks/{privacy-mask-DbEKI-Jv.js → privacy-mask-Dc3kdkCR.js} +2 -2
  94. package/dist/_chunks/{privacy-mask-DbEKI-Jv.js.map → privacy-mask-Dc3kdkCR.js.map} +1 -1
  95. package/dist/_chunks/{public-footer-DGjLTtNK.js → public-footer-CB7ruuLI.js} +295 -260
  96. package/dist/_chunks/public-footer-CB7ruuLI.js.map +1 -0
  97. package/dist/_chunks/{public-header.agent-_ArDD1Xr.js → public-header.agent-Db4wm6_S.js} +203 -193
  98. package/dist/_chunks/public-header.agent-Db4wm6_S.js.map +1 -0
  99. package/dist/_chunks/{registration-form-DEyUFysm.js → registration-form-Lw9T7IXr.js} +7 -6
  100. package/dist/_chunks/{registration-form-DEyUFysm.js.map → registration-form-Lw9T7IXr.js.map} +1 -1
  101. package/dist/_chunks/{reserved.agent-W_Zgj564.js → reserved.agent-D2jwJPac.js} +22 -32
  102. package/dist/_chunks/reserved.agent-D2jwJPac.js.map +1 -0
  103. package/dist/_chunks/{reset-password-form-B0acanDD.js → reset-password-form-C93SH0Tx.js} +3 -3
  104. package/dist/_chunks/{reset-password-form-B0acanDD.js.map → reset-password-form-C93SH0Tx.js.map} +1 -1
  105. package/dist/_chunks/{reviews-panel-B03auSpQ.js → reviews-panel-CfJPEkH7.js} +2 -2
  106. package/dist/_chunks/{reviews-panel-B03auSpQ.js.map → reviews-panel-CfJPEkH7.js.map} +1 -1
  107. package/dist/_chunks/{section-card-D1sV4Voz.js → section-card-DFr2wGal.js} +2 -2
  108. package/dist/_chunks/{section-card-D1sV4Voz.js.map → section-card-DFr2wGal.js.map} +1 -1
  109. package/dist/_chunks/{send-registration-link-form-Nn0jf65G.js → send-registration-link-form-DfbTjrEK.js} +9 -8
  110. package/dist/_chunks/{send-registration-link-form-Nn0jf65G.js.map → send-registration-link-form-DfbTjrEK.js.map} +1 -1
  111. package/dist/_chunks/{signed-out-frame-CPow3aCZ.js → signed-out-frame-bh7fn_Px.js} +2 -2
  112. package/dist/_chunks/{signed-out-frame-CPow3aCZ.js.map → signed-out-frame-bh7fn_Px.js.map} +1 -1
  113. package/dist/_chunks/{stat-BFKZV50y.js → stat-WGLdn5Vn.js} +113 -107
  114. package/dist/_chunks/stat-WGLdn5Vn.js.map +1 -0
  115. package/dist/_chunks/{task-card-TSJjuuDe.js → task-card-DqVoitRk.js} +2 -2
  116. package/dist/_chunks/{task-card-TSJjuuDe.js.map → task-card-DqVoitRk.js.map} +1 -1
  117. package/dist/_chunks/{task-editor-gqWF1jI6.js → task-editor-D--LwVrg.js} +2 -2
  118. package/dist/_chunks/{task-editor-gqWF1jI6.js.map → task-editor-D--LwVrg.js.map} +1 -1
  119. package/dist/_chunks/{task-tray-DrXfMCuf.js → task-tray-C6j8HVMv.js} +2 -2
  120. package/dist/_chunks/{task-tray-DrXfMCuf.js.map → task-tray-C6j8HVMv.js.map} +1 -1
  121. package/dist/_chunks/{tasks-panel-OuIaydK5.js → tasks-panel-D6PuF4MQ.js} +2 -2
  122. package/dist/_chunks/{tasks-panel-OuIaydK5.js.map → tasks-panel-D6PuF4MQ.js.map} +1 -1
  123. package/dist/_chunks/{timeline-CKUaBZOx.js → timeline-AMqE-c2T.js} +2 -2
  124. package/dist/_chunks/{timeline-CKUaBZOx.js.map → timeline-AMqE-c2T.js.map} +1 -1
  125. package/dist/_chunks/{use-appointment-details-read-DYyCYI9f.js → use-appointment-details-read-BK_Gw1GG.js} +5 -5
  126. package/dist/_chunks/{use-appointment-details-read-DYyCYI9f.js.map → use-appointment-details-read-BK_Gw1GG.js.map} +1 -1
  127. package/dist/_chunks/verify-identity-types-C85EXNzy.js +707 -0
  128. package/dist/_chunks/verify-identity-types-C85EXNzy.js.map +1 -0
  129. package/dist/_chunks/{workflow-map-DWk-rZse.js → workflow-map-B4XkcET0.js} +2 -2
  130. package/dist/_chunks/{workflow-map-DWk-rZse.js.map → workflow-map-B4XkcET0.js.map} +1 -1
  131. package/dist/_chunks/{workflow-webhook-action-DILFqAVd.js → workflow-webhook-action-CtBn5JvO.js} +2 -2
  132. package/dist/_chunks/{workflow-webhook-action-DILFqAVd.js.map → workflow-webhook-action-CtBn5JvO.js.map} +1 -1
  133. package/dist/agent-catalog.json +111 -7
  134. package/dist/agent-i18n/en.json +13 -2
  135. package/dist/components/_shared/motion-is-off.d.ts +7 -0
  136. package/dist/components/_shared/motion-is-off.d.ts.map +1 -0
  137. package/dist/components/anamnesis-card/index.js +1 -1
  138. package/dist/components/anamnesis-summary-card/index.js +1 -1
  139. package/dist/components/appointment-details-panel/index.js +1 -1
  140. package/dist/components/bishop-score/index.js +1 -1
  141. package/dist/components/bmi-calculator/index.js +1 -1
  142. package/dist/components/booking/index.js +1 -1
  143. package/dist/components/booking/step-focus.d.ts +0 -6
  144. package/dist/components/booking/step-focus.d.ts.map +1 -1
  145. package/dist/components/card/card.d.ts.map +1 -1
  146. package/dist/components/card/index.js +1 -1
  147. package/dist/components/clinical-note-card/index.js +1 -1
  148. package/dist/components/connection-status/index.js +1 -1
  149. package/dist/components/contact-card/index.js +1 -1
  150. package/dist/components/contact-profile-card/index.js +1 -1
  151. package/dist/components/cycle-calculator/index.js +1 -1
  152. package/dist/components/document-preview/index.js +1 -1
  153. package/dist/components/due-date-calculator/index.js +2 -2
  154. package/dist/components/email-input/index.js +1 -1
  155. package/dist/components/entity-summary/index.js +1 -1
  156. package/dist/components/face-scheme/index.js +1 -1
  157. package/dist/components/fetal-weight/index.js +1 -1
  158. package/dist/components/finished-terminal/index.js +1 -1
  159. package/dist/components/gestational-age-calculator/index.js +1 -1
  160. package/dist/components/hcg-doubling/index.js +1 -1
  161. package/dist/components/heatmap/index.js +1 -1
  162. package/dist/components/index.d.ts +1 -0
  163. package/dist/components/index.d.ts.map +1 -1
  164. package/dist/components/map-view/index.js +1 -1
  165. package/dist/components/map-view/map-view.d.ts +16 -0
  166. package/dist/components/map-view/map-view.d.ts.map +1 -1
  167. package/dist/components/notes-panel/index.js +1 -1
  168. package/dist/components/operator-hero/index.js +1 -1
  169. package/dist/components/operator-hero/operator-hero.d.ts.map +1 -1
  170. package/dist/components/patient-details/index.js +1 -1
  171. package/dist/components/patient-search/index.js +1 -1
  172. package/dist/components/patient-search/patient-search.d.ts +6 -2
  173. package/dist/components/patient-search/patient-search.d.ts.map +1 -1
  174. package/dist/components/patient-summary-card/index.js +1 -1
  175. package/dist/components/payment-card/index.js +1 -1
  176. package/dist/components/periodontal-chart/index.js +1 -1
  177. package/dist/components/periodontal-chart-card/index.js +1 -1
  178. package/dist/components/periodontal-diagnosis/index.js +1 -1
  179. package/dist/components/periodontal-risk-chart/index.js +1 -1
  180. package/dist/components/practice-profile-hero/index.js +1 -1
  181. package/dist/components/practice-results/index.js +1 -1
  182. package/dist/components/practice-results/practice-results.agent.d.ts.map +1 -1
  183. package/dist/components/practice-results/practice-results.d.ts +43 -2
  184. package/dist/components/practice-results/practice-results.d.ts.map +1 -1
  185. package/dist/components/pregnancy-dating/index.js +1 -1
  186. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  187. package/dist/components/public-footer/index.js +1 -1
  188. package/dist/components/public-footer/public-footer.d.ts +23 -0
  189. package/dist/components/public-footer/public-footer.d.ts.map +1 -1
  190. package/dist/components/public-header/index.js +1 -1
  191. package/dist/components/public-header/public-header.d.ts +7 -0
  192. package/dist/components/public-header/public-header.d.ts.map +1 -1
  193. package/dist/components/reviews-panel/index.js +1 -1
  194. package/dist/components/rich-text-editor/index.js +1 -1
  195. package/dist/components/section-card/index.js +1 -1
  196. package/dist/components/stat/index.js +1 -1
  197. package/dist/components/stat/stat.d.ts +7 -0
  198. package/dist/components/stat/stat.d.ts.map +1 -1
  199. package/dist/components/task-card/index.js +1 -1
  200. package/dist/components/task-editor/index.js +1 -1
  201. package/dist/components/task-tray/index.js +1 -1
  202. package/dist/components/tasks-panel/index.js +1 -1
  203. package/dist/components/timeline/index.js +1 -1
  204. package/dist/components/workflow/index.js +1 -1
  205. package/dist/core.css +1 -1
  206. package/dist/host-compat.css +4 -1
  207. package/dist/i18n/locales/ar.d.ts +68 -0
  208. package/dist/i18n/locales/ar.d.ts.map +1 -1
  209. package/dist/i18n/locales/ar.js +70 -2
  210. package/dist/i18n/locales/ar.js.map +1 -1
  211. package/dist/i18n/locales/de.d.ts +68 -0
  212. package/dist/i18n/locales/de.d.ts.map +1 -1
  213. package/dist/i18n/locales/de.js +70 -2
  214. package/dist/i18n/locales/de.js.map +1 -1
  215. package/dist/i18n/locales/el.d.ts +68 -0
  216. package/dist/i18n/locales/el.d.ts.map +1 -1
  217. package/dist/i18n/locales/el.js +70 -2
  218. package/dist/i18n/locales/el.js.map +1 -1
  219. package/dist/i18n/locales/en.d.ts +68 -0
  220. package/dist/i18n/locales/en.d.ts.map +1 -1
  221. package/dist/i18n/locales/en.js +68 -0
  222. package/dist/i18n/locales/en.js.map +1 -1
  223. package/dist/i18n/locales/es.d.ts +68 -0
  224. package/dist/i18n/locales/es.d.ts.map +1 -1
  225. package/dist/i18n/locales/es.js +70 -2
  226. package/dist/i18n/locales/es.js.map +1 -1
  227. package/dist/i18n/locales/fr.d.ts +68 -0
  228. package/dist/i18n/locales/fr.d.ts.map +1 -1
  229. package/dist/i18n/locales/fr.js +70 -2
  230. package/dist/i18n/locales/fr.js.map +1 -1
  231. package/dist/i18n/locales/hi.d.ts +68 -0
  232. package/dist/i18n/locales/hi.d.ts.map +1 -1
  233. package/dist/i18n/locales/hi.js +70 -2
  234. package/dist/i18n/locales/hi.js.map +1 -1
  235. package/dist/i18n/locales/it.d.ts +68 -0
  236. package/dist/i18n/locales/it.d.ts.map +1 -1
  237. package/dist/i18n/locales/it.js +70 -2
  238. package/dist/i18n/locales/it.js.map +1 -1
  239. package/dist/i18n/locales/ja.d.ts +68 -0
  240. package/dist/i18n/locales/ja.d.ts.map +1 -1
  241. package/dist/i18n/locales/ja.js +70 -2
  242. package/dist/i18n/locales/ja.js.map +1 -1
  243. package/dist/i18n/locales/nl.d.ts +68 -0
  244. package/dist/i18n/locales/nl.d.ts.map +1 -1
  245. package/dist/i18n/locales/nl.js +70 -2
  246. package/dist/i18n/locales/nl.js.map +1 -1
  247. package/dist/i18n/locales/pl.d.ts +68 -0
  248. package/dist/i18n/locales/pl.d.ts.map +1 -1
  249. package/dist/i18n/locales/pl.js +70 -2
  250. package/dist/i18n/locales/pl.js.map +1 -1
  251. package/dist/i18n/locales/pt.d.ts +68 -0
  252. package/dist/i18n/locales/pt.d.ts.map +1 -1
  253. package/dist/i18n/locales/pt.js +70 -2
  254. package/dist/i18n/locales/pt.js.map +1 -1
  255. package/dist/i18n/locales/ro.d.ts +68 -0
  256. package/dist/i18n/locales/ro.d.ts.map +1 -1
  257. package/dist/i18n/locales/ro.js +70 -2
  258. package/dist/i18n/locales/ro.js.map +1 -1
  259. package/dist/i18n/locales/ru.d.ts +68 -0
  260. package/dist/i18n/locales/ru.d.ts.map +1 -1
  261. package/dist/i18n/locales/ru.js +70 -2
  262. package/dist/i18n/locales/ru.js.map +1 -1
  263. package/dist/i18n/locales/sq.d.ts +68 -0
  264. package/dist/i18n/locales/sq.d.ts.map +1 -1
  265. package/dist/i18n/locales/sq.js +70 -2
  266. package/dist/i18n/locales/sq.js.map +1 -1
  267. package/dist/i18n/locales/sv.d.ts +68 -0
  268. package/dist/i18n/locales/sv.d.ts.map +1 -1
  269. package/dist/i18n/locales/sv.js +70 -2
  270. package/dist/i18n/locales/sv.js.map +1 -1
  271. package/dist/i18n/locales/tr.d.ts +68 -0
  272. package/dist/i18n/locales/tr.d.ts.map +1 -1
  273. package/dist/i18n/locales/tr.js +70 -2
  274. package/dist/i18n/locales/tr.js.map +1 -1
  275. package/dist/i18n/locales/zh.d.ts +68 -0
  276. package/dist/i18n/locales/zh.d.ts.map +1 -1
  277. package/dist/i18n/locales/zh.js +70 -2
  278. package/dist/i18n/locales/zh.js.map +1 -1
  279. package/dist/index.js +373 -368
  280. package/dist/index.js.map +1 -1
  281. package/dist/locales/ar.json +70 -2
  282. package/dist/locales/de.json +70 -2
  283. package/dist/locales/el.json +70 -2
  284. package/dist/locales/en.json +68 -0
  285. package/dist/locales/es.json +70 -2
  286. package/dist/locales/fr.json +70 -2
  287. package/dist/locales/hi.json +70 -2
  288. package/dist/locales/it.json +70 -2
  289. package/dist/locales/ja.json +70 -2
  290. package/dist/locales/nl.json +70 -2
  291. package/dist/locales/pl.json +70 -2
  292. package/dist/locales/pt.json +70 -2
  293. package/dist/locales/ro.json +70 -2
  294. package/dist/locales/ru.json +70 -2
  295. package/dist/locales/sq.json +70 -2
  296. package/dist/locales/sv.json +70 -2
  297. package/dist/locales/tr.json +70 -2
  298. package/dist/locales/zh.json +70 -2
  299. package/dist/patterns/anamnesis/index.js +1 -1
  300. package/dist/patterns/calendar/index.js +1 -1
  301. package/dist/patterns/forgot-password-form/index.js +1 -1
  302. package/dist/patterns/login-form/index.js +1 -1
  303. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  304. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  305. package/dist/patterns/registration-form/index.js +1 -1
  306. package/dist/patterns/reset-password-form/index.js +1 -1
  307. package/dist/patterns/send-registration-link-form/index.js +1 -1
  308. package/dist/patterns/signed-out-frame/index.js +1 -1
  309. package/dist/patterns/verify-identity/change-email-dialog.d.ts +26 -0
  310. package/dist/patterns/verify-identity/change-email-dialog.d.ts.map +1 -0
  311. package/dist/patterns/verify-identity/index.d.ts +7 -0
  312. package/dist/patterns/verify-identity/index.d.ts.map +1 -0
  313. package/dist/patterns/verify-identity/index.js +8 -0
  314. package/dist/patterns/verify-identity/index.js.map +1 -0
  315. package/dist/patterns/verify-identity/use-countdown.d.ts +12 -0
  316. package/dist/patterns/verify-identity/use-countdown.d.ts.map +1 -0
  317. package/dist/patterns/verify-identity/verify-identity-steps.d.ts +21 -0
  318. package/dist/patterns/verify-identity/verify-identity-steps.d.ts.map +1 -0
  319. package/dist/patterns/verify-identity/verify-identity-types.d.ts +47 -0
  320. package/dist/patterns/verify-identity/verify-identity-types.d.ts.map +1 -0
  321. package/dist/patterns/verify-identity/verify-identity.d.ts +54 -0
  322. package/dist/patterns/verify-identity/verify-identity.d.ts.map +1 -0
  323. package/dist/patterns/workflow-webhook-action/index.js +1 -1
  324. package/dist/tokens.css +1 -1
  325. package/package.json +5 -1
  326. package/dist/_chunks/email-input-BEO3vonE.js +0 -399
  327. package/dist/_chunks/email-input-BEO3vonE.js.map +0 -1
  328. package/dist/_chunks/map-view-Dn7aXZJw.js +0 -731
  329. package/dist/_chunks/map-view-Dn7aXZJw.js.map +0 -1
  330. package/dist/_chunks/patient-search-CxuqVUTB.js.map +0 -1
  331. package/dist/_chunks/practice-results-BOpaPaav.js +0 -1923
  332. package/dist/_chunks/practice-results-BOpaPaav.js.map +0 -1
  333. package/dist/_chunks/public-footer-DGjLTtNK.js.map +0 -1
  334. package/dist/_chunks/public-header.agent-_ArDD1Xr.js.map +0 -1
  335. package/dist/_chunks/reserved.agent-W_Zgj564.js.map +0 -1
  336. package/dist/_chunks/stat-BFKZV50y.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-input-DxwbREpx.js","sources":["../../src/components/email-input/email-input.agent.ts","../../src/components/email-input/email-input.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — EmailInput. */\n/* */\n/* Presentational specialisation of TextInput — no actions of its own. */\n/* The handle re-exposes the underlying input's value-setter so agents */\n/* can drive the field through the normal TextInput contract without */\n/* needing to know it's wrapped. See `src/docs/26-agent-readiness.mdx` */\n/* for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\n\n/**\n * Curated agent handle for EmailInput. State stays scoped to the visible\n * value + the kit-derived validity flag; never PHI (per PRS §Security).\n */\nexport interface EmailInputHandle {\n /** Returns the current input value. */\n getValue: () => string;\n /** Returns whether the current value parses as a valid email (non-empty + RFC). */\n isValid: () => boolean;\n}\n\nexport const emailInputAgent: AgentAdapter<EmailInputHandle> = {\n id: 'email-input',\n capabilities: [],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.emailInput.state.value',\n description: 'The current email address typed into the field.',\n read: (handle) => handle.getValue(),\n },\n isValid: {\n type: 'boolean',\n descriptionKey: 'ui.agent.emailInput.state.isValid',\n description:\n 'True when the value is non-empty AND parses as a valid email per RFC 5322.',\n read: (handle) => handle.isValid(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'email-input',\n description:\n 'Marks the EmailInput wrapper. The inline error element carries `role=\"alert\"` when validation fails.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop, when provided.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type FocusEvent,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { CircleAlert } from 'lucide-react';\n// Tree-shaken import — pulling `validator/lib/isEmail` instead of the\n// barrel keeps the bundle to ~3 KB. `import { isEmail } from 'validator'`\n// drags in ~50 KB of unused validators.\nimport isEmail from 'validator/lib/isEmail';\nimport { TextInput, type TextInputProps } from '../text-input';\nimport { useFormField } from '../form-field/form-field-context';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { useAgentRegistration } from '../../agent';\nimport { emailInputAgent, type EmailInputHandle } from './email-input.agent';\n\n/* ------------------------------------------------------------------ */\n/* Public API */\n/* */\n/* `type`, `inputMode`, and `tone` are baked in — the component decides */\n/* those itself. `autoComplete` is `email` unless a sign-in form asks */\n/* for `username`. `tone` is computed from the */\n/* validation state so consumers can never wedge it into an inconsistent*/\n/* visual signal. */\n/* ------------------------------------------------------------------ */\n\nexport interface EmailInputProps extends Omit<\n TextInputProps,\n 'type' | 'autoComplete' | 'inputMode' | 'tone'\n> {\n /**\n * Override the \"Enter a valid email address.\" error message. When omitted, the\n * translated default `t('inputs.email.invalid')` is used.\n *\n * Pass `null` when the host shows the message itself (a `FormField`\n * `error`, or its own element). The input then never marks itself\n * invalid: it turns red only when the host says so, through the\n * FormField's `error` or `aria-invalid`. `onValidityChange` still fires.\n */\n errorMessage?: ReactNode | null;\n /**\n * Called whenever the validation state flips. `valid` is `true` when\n * the value is non-empty AND parses as a valid email, `false`\n * otherwise. The callback fires on every blur AND on every change\n * after the first blur — never before the user has had a chance to\n * type something.\n */\n onValidityChange?: (valid: boolean) => void;\n /**\n * Skip the built-in validation entirely. The input behaves like a\n * plain `<TextInput type=\"email\">` — useful when the consumer is\n * wiring `FormField`'s `invalid` prop themselves, or running their\n * own schema validation (zod, react-hook-form). Default: `false`.\n */\n disableBuiltInValidation?: boolean;\n /**\n * Autocomplete hint. Default `email`. Use `username` on a sign-in form,\n * where the email is what the account is known by: browsers and\n * password managers pair `username` with `current-password`.\n */\n autoComplete?: 'email' | 'username';\n}\n\n/* ------------------------------------------------------------------ */\n/* Validation engine */\n/* */\n/* Pure helper — empty values are NOT flagged (let `required` handle */\n/* empty separately). Whitespace-only values fall through to validator */\n/* which rejects them as malformed. */\n/* ------------------------------------------------------------------ */\n\nfunction checkValidity(value: string): boolean {\n if (value.length === 0) return true;\n return isEmail(value);\n}\n\nexport const EmailInput = forwardRef<HTMLInputElement, EmailInputProps>(\n (\n {\n errorMessage,\n onValidityChange,\n disableBuiltInValidation = false,\n autoComplete = 'email',\n value,\n defaultValue,\n onChange,\n onBlur,\n id,\n 'aria-describedby': consumerDescribedBy,\n 'aria-invalid': consumerAriaInvalid,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const ctx = useFormField();\n\n const innerRef = useRef<HTMLInputElement | null>(null);\n const composedRef = composeRefs(ref, innerRef);\n\n // An id of its own: the FormField's error element owns `ctx.errorId`.\n const errorElementId = useId();\n\n const isControlled = value !== undefined;\n\n // Seed once from controlled `value` or `defaultValue` so we can\n // validate an already-populated field at mount (e.g. server-side\n // rehydration). Recomputing on prop changes would defeat the React\n // \"defaultValue is initial only\" contract — we read it once via the\n // lazy initialiser and let `currentValue` track every change after.\n const [internalValue, setInternalValue] = useState<string>(() => {\n if (typeof value === 'string') return value;\n if (typeof defaultValue === 'string') return defaultValue;\n return '';\n });\n const currentValue = isControlled ? String(value) : internalValue;\n\n // `touched` flips to `true` on first blur, or immediately if the\n // field is seeded with a non-empty value (consumer is asking us to\n // validate something they already collected).\n const [touched, setTouched] = useState<boolean>(\n () => currentValue.length > 0,\n );\n\n const computedValid = useMemo(\n () => checkValidity(currentValue),\n [currentValue],\n );\n\n // The format fails only when the field has been touched AND the\n // value is non-empty AND the value fails RFC. Empty is always\n // \"not yet invalid\" — `required` covers the empty case separately.\n const formatInvalid =\n !disableBuiltInValidation &&\n touched &&\n currentValue.length > 0 &&\n !computedValid;\n\n // Notify consumers on every validity flip after the first blur.\n // Empty before first blur is reported as `true` so consumers don't\n // light up a \"valid\" indicator prematurely — we only fire after\n // touched so the first emission reflects user intent.\n const lastValidRef = useRef<boolean | null>(null);\n useEffect(() => {\n if (!touched) return;\n // Empty value after touch -> `valid` is `false` because the user\n // emptied a field they were editing. This mirrors the spec note\n // that empty is reported as `false` in `onValidityChange`.\n const nextValid = currentValue.length > 0 && computedValid;\n if (lastValidRef.current !== nextValid) {\n lastValidRef.current = nextValid;\n onValidityChange?.(nextValid);\n }\n }, [touched, currentValue, computedValid, onValidityChange]);\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalValue(event.target.value);\n }\n onChange?.(event);\n },\n [isControlled, onChange],\n );\n\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n setTouched(true);\n onBlur?.(event);\n },\n [onBlur],\n );\n\n /* ------------------------------------------------------------------ */\n /* Agent adapter */\n /* ------------------------------------------------------------------ */\n\n // Stable handle — both `getValue` and `isValid` read the live DOM\n // node, so the closure captures no React state. Empty dep array\n // keeps the agent registry from churning on every keystroke.\n const agentHandle = useMemo<EmailInputHandle>(\n () => ({\n getValue: () => innerRef.current?.value ?? '',\n isValid: () => {\n const v = innerRef.current?.value ?? '';\n return v.length > 0 && isEmail(v);\n },\n }),\n [],\n );\n useAgentRegistration(emailInputAgent, agentHandle, id);\n\n /* ------------------------------------------------------------------ */\n /* One message at a time */\n /* */\n /* A FormField `error` wins: its element is already in the context's */\n /* `describedBy`, so the inline message is not rendered beside it. With */\n /* `errorMessage={null}` the host owns the message, so the input never */\n /* looks invalid on its own account, with nothing to say why. */\n /* ------------------------------------------------------------------ */\n\n const showInlineError =\n formatInvalid && errorMessage !== null && !ctx.invalid;\n const contextDescribedBy = ctx.describedBy || undefined;\n const describedBy = useMemo(() => {\n const parts = [\n consumerDescribedBy,\n contextDescribedBy,\n showInlineError ? errorElementId : null,\n ].filter(Boolean) as string[];\n return parts.length > 0 ? parts.join(' ') : undefined;\n }, [\n consumerDescribedBy,\n contextDescribedBy,\n showInlineError,\n errorElementId,\n ]);\n\n // A wrapping consumer may assert invalidity for a BUSINESS reason while the\n // format is fine (e.g. \"already in use\") — honour it on the a11y attribute\n // so it's announced. Visual `tone` stays format-only, except when the\n // host owns the message: then its `aria-invalid` is the only signal.\n const consumerInvalid =\n consumerAriaInvalid === true || consumerAriaInvalid === 'true';\n const hostOwnsMessage = errorMessage === null;\n // The TextInput adds the FormField's own invalid tone.\n const effectiveTone =\n showInlineError || (hostOwnsMessage && consumerInvalid)\n ? 'error'\n : 'default';\n const effectiveAriaInvalid =\n showInlineError || ctx.invalid || consumerInvalid || undefined;\n\n const resolvedErrorMessage =\n errorMessage !== undefined\n ? errorMessage\n : t('inputs.email.invalid', 'Enter a valid email address.');\n\n return (\n <div\n data-component=\"email-input\"\n data-component-id={id}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\"\n >\n <TextInput\n {...rest}\n ref={composedRef}\n id={id}\n type=\"email\"\n inputMode=\"email\"\n autoComplete={autoComplete}\n tone={effectiveTone}\n value={isControlled ? currentValue : undefined}\n defaultValue={!isControlled ? defaultValue : undefined}\n onChange={handleChange}\n onBlur={handleBlur}\n aria-invalid={effectiveAriaInvalid}\n aria-describedby={describedBy}\n />\n {showInlineError ? (\n <p\n id={errorElementId}\n role=\"alert\"\n data-slot=\"email-input-error\"\n className=\"ds:inline-flex ds:items-center 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>{resolvedErrorMessage}</span>\n </p>\n ) : null}\n </div>\n );\n },\n);\n\nEmailInput.displayName = 'EmailInput';\n"],"names":["emailInputAgent","handle","checkValidity","value","isEmail","EmailInput","forwardRef","errorMessage","onValidityChange","disableBuiltInValidation","autoComplete","defaultValue","onChange","onBlur","id","consumerDescribedBy","consumerAriaInvalid","rest","ref","t","useTranslation","ctx","useFormField","innerRef","useRef","composedRef","composeRefs","errorElementId","useId","isControlled","internalValue","setInternalValue","useState","currentValue","touched","setTouched","computedValid","useMemo","formatInvalid","lastValidRef","useEffect","nextValid","handleChange","useCallback","event","handleBlur","agentHandle","_a","v","useAgentRegistration","showInlineError","contextDescribedBy","describedBy","parts","consumerInvalid","effectiveTone","effectiveAriaInvalid","resolvedErrorMessage","jsxs","jsx","TextInput","CircleAlert"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { A as I } from "./alert-C4WKViaS.js";
5
5
  import { A as H } from "./avatar-Dp5apm1d.js";
6
6
  import { B as $ } from "./button-DohK_Ak_.js";
7
7
  import { I as O } from "./icon-button-S8_weU3g.js";
8
- import { C } from "./card-C85_Ndhb.js";
8
+ import { C } from "./card-DVO3x8E-.js";
9
9
  import { L as F } from "./link-DtCfnLnF.js";
10
10
  import { P as G } from "./panel-header-CbtlTe85.js";
11
11
  import { T as W } from "./timestamp-DPLDWdxA.js";
@@ -274,4 +274,4 @@ function ae({ section: t }) {
274
274
  export {
275
275
  be as E
276
276
  };
277
- //# sourceMappingURL=entity-summary-BbqqYqF1.js.map
277
+ //# sourceMappingURL=entity-summary-DGCBQDt1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-summary-BbqqYqF1.js","sources":["../../node_modules/lucide-react/dist/esm/icons/contact-round.mjs","../../src/components/entity-summary/entity-summary.agent.ts","../../src/components/entity-summary/entity-summary.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: \"M16 2v2\", key: \"scm5qe\" }],\n [\"path\", { d: \"M17.915 22a6 6 0 0 0-12 0\", key: \"suqz9p\" }],\n [\"path\", { d: \"M8 2v2\", key: \"pbkmx\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"4\", key: \"4exip2\" }],\n [\"rect\", { x: \"3\", y: \"4\", width: \"18\", height: \"18\", rx: \"2\", key: \"12vinp\" }]\n];\nconst ContactRound = createLucideIcon(\"contact-round\", __iconNode);\n\nexport { __iconNode, ContactRound as default };\n//# sourceMappingURL=contact-round.mjs.map\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — EntitySummary. */\n/* */\n/* The AI narrative brief (\"Sintesi IA\") for an entity. The agent can */\n/* read the brief's STRUCTURE (generated-at + section ids / headings / */\n/* tone / item counts — fixed category labels, never the entity name or */\n/* the bullet items, both PHI) and drive the two affordances: regenerate */\n/* the brief and dismiss the panel. Generation itself is gated upstream */\n/* by AiConsentBanner; this adapter only re-requests an already-consented */\n/* brief. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { EntitySummaryHandle } from './entity-summary';\n\nexport const entitySummaryAgent: AgentAdapter<EntitySummaryHandle> = {\n id: 'entity-summary',\n // 'close' backs close; regenerate is a host-driven refresh with no\n // dedicated capability in the closed vocabulary.\n capabilities: ['close'],\n state: {\n sections: {\n type: 'Array<{ id: string; heading: string; tone: \"default\" | \"attention\"; itemCount: number }>',\n descriptionKey: 'ui.agent.entitySummary.state.sections',\n description:\n 'Structural section list — ids, fixed category headings, tone and item counts. Never the entity name or the bullet items (both PHI).',\n read: (handle) => handle.getState().sections,\n },\n generatedAtIso: {\n type: 'string | undefined',\n descriptionKey: 'ui.agent.entitySummary.state.generatedAtIso',\n description: 'ISO-8601 instant the brief was generated, when known.',\n read: (handle) => handle.getState().generatedAtIso,\n },\n },\n actions: {\n regenerate: {\n // Re-requests a fresh brief from the model — reaches an external system.\n safety: 'write',\n openWorld: true,\n descriptionKey: 'ui.agent.entitySummary.actions.regenerate',\n description:\n 'Request the host to regenerate the AI brief. No-op when the regenerate affordance is not available.',\n invoke: (handle) => {\n if (handle.canRegenerate()) handle.regenerate();\n },\n },\n close: {\n // Ephemeral panel-visibility change — read.\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.entitySummary.actions.close',\n description:\n 'Dismiss the summary panel. No-op when the close affordance is not available (e.g. docked in the rail).',\n invoke: (handle) => {\n if (handle.canClose()) handle.close();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'entity-summary',\n description: 'Marks the EntitySummary panel region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific summary panel from the agent.',\n },\n },\n};\n","import {\n forwardRef,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ContactRound, Clock, RefreshCw, X } from 'lucide-react';\nimport { Alert } from '../alert';\nimport { Avatar } from '../avatar';\nimport { Button } from '../button';\nimport { Card } from '../card';\nimport { IconButton } from '../button/icon-button';\nimport { Link } from '../link';\nimport { PanelHeader } from '../panel-header';\nimport { Timestamp } from '../timestamp';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { entitySummaryAgent } from './entity-summary.agent';\n\n/* ------------------------------------------------------------------ */\n/* EntitySummary — the AI narrative brief for an entity. */\n/* */\n/* The kit form of platform's \"Sintesi IA\": a generated, sectioned */\n/* brief of a patient / care plan — header (entity · generated-at · */\n/* regenerate · corpus stats), N labelled sections of bullet items */\n/* (with inline entity links), and a BETA disclaimer. The `attention` */\n/* section tone carries the clinically valuable risk flags. */\n/* */\n/* The kit owns the layout, i18n and theming; the consumer passes */\n/* structured `sections` (data-in) so the brief re-themes and */\n/* localises rather than rendering a model HTML blob. Gate generation */\n/* behind `AiConsentBanner` upstream. */\n/* ------------------------------------------------------------------ */\n\n/** A corpus stat shown in the header (e.g. `{ value: 5, label: 'care plans' }`). */\nexport interface EntitySummaryStat {\n value: string | number;\n label: string;\n}\n\n/** One narrative section — a heading over a list of bullet items. */\nexport interface EntitySummarySection {\n id: string;\n heading: string;\n /**\n * Leading glyph for the section. On default sections it's the scannability\n * anchor shown in a `--primary`-tinted medallion beside the heading (e.g. a\n * calendar for \"Scheduled\", a wallet for \"Financial\"); omit it to render no\n * medallion. On `attention` sections it overrides the warning Alert's icon\n * (which defaults to an alert triangle).\n */\n icon?: ReactNode;\n /**\n * `attention` renders the section as the kit's warning `Alert` — the\n * standard risk-flag treatment (border, warning surface, alert glyph,\n * `--warning-foreground` text) — for clinically important callouts.\n */\n tone?: 'default' | 'attention';\n /** Bullet items — `ReactNode` so consumers compose inline entity links. */\n items: ReactNode[];\n}\n\n/**\n * Curated agent handle for EntitySummary. Exposes structural state only —\n * never the entity name or the section items (both PHI). See\n * `entity-summary.agent.ts`.\n */\nexport interface EntitySummaryHandle {\n /** Structural snapshot — generated-at + section ids/headings/tone/count. No PHI. */\n getState: () => {\n generatedAtIso?: string;\n sections: Array<{\n id: string;\n heading: string;\n tone: 'default' | 'attention';\n itemCount: number;\n }>;\n };\n /** Whether the regenerate affordance is available. */\n canRegenerate: () => boolean;\n /** Request the host to regenerate the brief (mirrors onRegenerate). */\n regenerate: () => void;\n /** Whether the close affordance is available. */\n canClose: () => boolean;\n /** Dismiss the panel (mirrors onClose). */\n close: () => void;\n}\n\nexport interface EntitySummaryProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title' | 'children'\n> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so an\n * agent / MCP UI bridge can address this specific summary panel.\n */\n id?: string;\n /** Panel title. Defaults to the localised \"AI summary\". */\n title?: string;\n /** Entity name shown beside its avatar in the header (links when `entityHref` is set). */\n entityName?: string;\n /** Entity href for the name link. */\n entityHref?: string;\n /** Avatar image URL for the entity. Falls back to initials derived from `entityName`. */\n entityAvatarSrc?: string;\n /** ISO-8601 instant the brief was generated. */\n generatedAtIso?: string;\n /** Corpus the brief was built from, shown as a compact KPI card. */\n stats?: EntitySummaryStat[];\n /** The narrative sections, in order. */\n sections: EntitySummarySection[];\n /** Regenerate the brief. Omit to hide the affordance. */\n onRegenerate?: () => void;\n /** Regenerate-button label. */\n regenerateLabel?: string;\n /**\n * Dismiss the panel. Renders a close button in the panel header for\n * STANDALONE use (outside the rail). When docked in `ControlRoomRail`, omit\n * this — the rail injects its own close via `PanelHeaderActionsProvider`\n * (passing it while docked would render a duplicate close control).\n */\n onClose?: () => void;\n /** Footer disclaimer. Defaults to the BETA clinical-judgement note. */\n disclaimer?: ReactNode;\n /** BCP-47 locale for the generated-at timestamp. */\n locale?: string;\n /** Accessible name for the panel region (defaults to `title`). */\n 'aria-label'?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Section presentation. The `attention` tone renders a different */\n/* element tree (the kit's warning Alert) rather than a class variant, */\n/* so the branch lives in `Section`; these constants carry the shared */\n/* class sets for the default (prose) sections. */\n/* ------------------------------------------------------------------ */\n\n// The default section's leading icon chip — a --primary-tinted medallion\n// that anchors the heading. No tone variants: the attention tone is owned\n// by the Alert primitive, so this stays a plain class set.\nconst MEDALLION_CLASSES =\n 'ds:flex ds:size-7 ds:shrink-0 ds:items-center ds:justify-center ds:rounded-[var(--radius-md)] ds:[&_svg]:size-4 ds:bg-primary/10 ds:text-[color:var(--primary)]';\n\n// The bullet list shared by every section — indented disc items.\nconst ITEMS_CLASSES =\n 'ds:m-0 ds:flex ds:list-disc ds:flex-col ds:gap-[var(--spacing-2xs)] ds:ps-[var(--spacing-md)] type-body-sm';\n\nexport const EntitySummary = forwardRef<HTMLElement, EntitySummaryProps>(\n function EntitySummary(\n {\n id,\n title,\n entityName,\n entityHref,\n entityAvatarSrc,\n generatedAtIso,\n stats,\n sections,\n onRegenerate,\n regenerateLabel,\n onClose,\n disclaimer,\n locale,\n className,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref,\n ) {\n const { t } = useTranslation('ui');\n const headingId = useId();\n const heading =\n title ?? t('entitySummary.title', { defaultValue: 'AI summary' });\n\n /* ----- Agent handle (structural state + regenerate / close) ----- */\n const sectionsRef = useRef(sections);\n sectionsRef.current = sections;\n const generatedAtRef = useRef(generatedAtIso);\n generatedAtRef.current = generatedAtIso;\n const onRegenerateRef = useRef(onRegenerate);\n onRegenerateRef.current = onRegenerate;\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n\n const rootRef = useRef<HTMLElement>(null);\n useImperativeHandle(ref, () => rootRef.current as HTMLElement, []);\n\n const handle = useMemo<EntitySummaryHandle>(\n () => ({\n // Structural only — section headings are fixed category labels, never\n // the entity name or the bullet items (both PHI).\n getState: () => ({\n generatedAtIso: generatedAtRef.current,\n sections: sectionsRef.current.map((s) => ({\n id: s.id,\n heading: s.heading,\n tone: s.tone ?? 'default',\n itemCount: s.items.length,\n })),\n }),\n canRegenerate: () => !!onRegenerateRef.current,\n regenerate: () => onRegenerateRef.current?.(),\n canClose: () => !!onCloseRef.current,\n close: () => onCloseRef.current?.(),\n }),\n [],\n );\n useAgentRegistration(entitySummaryAgent, handle, id);\n\n // The generated-at line — the brief's \"subtitle\" under the entity name,\n // or a standalone line when there's no entity. A clock glyph leads it.\n const generatedLine = generatedAtIso ? (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)] type-meta ds:text-[color:var(--muted-foreground)]\">\n <Clock aria-hidden=\"true\" className=\"ds:size-3.5 ds:shrink-0\" />\n <span>\n {t('entitySummary.generatedAt', { defaultValue: 'Generated' })}\n </span>\n <Timestamp value={generatedAtIso} format=\"absolute\" locale={locale} />\n </span>\n ) : null;\n\n return (\n <section\n ref={rootRef}\n data-component=\"entity-summary\"\n data-component-id={id}\n aria-labelledby={ariaLabel ? undefined : headingId}\n aria-label={ariaLabel}\n className={['ds:flex ds:flex-col', className].filter(Boolean).join(' ')}\n {...rest}\n >\n {/* Header — the shared rail-panel pattern. Title + Regenerate;\n the close affordance is injected by the rail, not the panel. */}\n <PanelHeader\n title={heading}\n icon={<ContactRound aria-hidden=\"true\" />}\n headingId={ariaLabel ? undefined : headingId}\n sticky\n divider\n actions={\n onRegenerate || onClose ? (\n <>\n {onRegenerate ? (\n <Button\n type=\"button\"\n size=\"sm\"\n intent=\"ghost\"\n startIcon={<RefreshCw aria-hidden=\"true\" />}\n onClick={onRegenerate}\n >\n {regenerateLabel ??\n t('entitySummary.regenerate', {\n defaultValue: 'Regenerate',\n })}\n </Button>\n ) : null}\n {onClose ? (\n <IconButton\n icon={<X aria-hidden=\"true\" />}\n size=\"sm\"\n intent=\"ghost\"\n aria-label={t('common.close', { defaultValue: 'Close' })}\n onClick={onClose}\n />\n ) : null}\n </>\n ) : undefined\n }\n />\n\n {/* Body */}\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)] ds:p-[var(--spacing-md)]\">\n {entityName || generatedAtIso || (stats && stats.length > 0) ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n {/* Identity — the entity's avatar + name, generated-at as the\n subtitle beneath. Without a name, the generated line stands\n alone. */}\n {entityName ? (\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <Avatar\n name={entityName}\n src={entityAvatarSrc}\n size=\"sm\"\n className=\"ds:shrink-0\"\n />\n <div className=\"ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n {entityHref ? (\n <Link\n href={entityHref}\n className=\"type-body-sm ds:font-semibold\"\n >\n {entityName}\n </Link>\n ) : (\n <span className=\"type-body-sm ds:font-semibold ds:text-[color:var(--foreground)]\">\n {entityName}\n </span>\n )}\n {generatedLine}\n </div>\n </div>\n ) : (\n generatedLine\n )}\n\n {/* Corpus stats — a compact KPI card: value over label, with a\n hairline divider between cells. */}\n {stats && stats.length > 0 ? (\n <Card variant=\"elevated\">\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles -- role=\"list\" restores list semantics that ds:list-none strips in Safari/VoiceOver */}\n <ul\n role=\"list\"\n className=\"ds:m-0 ds:flex ds:list-none ds:items-stretch\"\n >\n {stats.map((stat, index) => (\n <li\n key={`${stat.label}-${index}`}\n className={[\n 'ds:flex ds:flex-1 ds:flex-col ds:items-center ds:gap-[var(--spacing-2xs)] ds:p-[var(--spacing-sm)] ds:text-center',\n index > 0\n ? 'ds:border-s ds:border-[color:var(--card-border)]'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <span className=\"type-metric ds:[--type-metric-size:var(--font-size-lg)] ds:text-[color:var(--foreground)]\">\n {stat.value}\n </span>\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)]\">\n {stat.label}\n </span>\n </li>\n ))}\n </ul>\n </Card>\n ) : null}\n </div>\n ) : null}\n\n {/* Sections */}\n {sections.map((section) => (\n <Section key={section.id} section={section} />\n ))}\n\n {/* Disclaimer */}\n <p className=\"ds:m-0 type-meta ds:text-[color:var(--muted-foreground)]\">\n {disclaimer ??\n t('entitySummary.disclaimer', {\n defaultValue:\n 'Does not replace clinical judgement · verify accuracy before clinical use · BETA',\n })}\n </p>\n </div>\n </section>\n );\n },\n);\n\nfunction Section({ section }: { section: EntitySummarySection }): ReactNode {\n const headingId = useId();\n\n // The risk-flag section composes the kit's warning `Alert` primitive rather\n // than re-painting the warning tokens by hand — same border, surface, alert\n // glyph, and `--warning-foreground` treatment as every other warning in the\n // app. `live=\"off\"`: the brief is static content, not a just-occurred event,\n // so the items read in normal flow instead of being announced assertively.\n // A per-section `icon` overrides Alert's default alert triangle.\n if (section.tone === 'attention') {\n // The shared `--shadow-card` lifts the warning callout to the same\n // elevation as the surrounding section cards, so the stack reads as one\n // set of raised panels rather than a flat warning band among cards.\n return (\n <Alert\n variant=\"warning\"\n live=\"off\"\n icon={section.icon}\n className=\"ds:shadow-[var(--shadow-card)]\"\n >\n <Alert.Title as=\"h3\">{section.heading}</Alert.Title>\n <ul className={ITEMS_CLASSES}>\n {section.items.map((item, index) => (\n <li key={index}>{item}</li>\n ))}\n </ul>\n </Alert>\n );\n }\n\n // Default sections are raised cards — the scannable \"panel per topic\" stack,\n // matching platform's Sintesi IA. The card owns its own padding (so we drive\n // it from a single content div rather than Card.Header/Body) and is named by\n // its heading for assistive tech.\n return (\n <Card variant=\"elevated\" aria-labelledby={headingId}>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-md)]\">\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n {section.icon ? (\n <span aria-hidden=\"true\" className={MEDALLION_CLASSES}>\n {section.icon}\n </span>\n ) : null}\n <h3\n id={headingId}\n className=\"ds:m-0 type-eyebrow ds:text-[color:var(--foreground)]\"\n >\n {section.heading}\n </h3>\n </div>\n <ul className={`${ITEMS_CLASSES} ds:text-[color:var(--foreground)]`}>\n {section.items.map((item, index) => (\n <li key={index}>{item}</li>\n ))}\n </ul>\n </div>\n </Card>\n );\n}\n"],"names":["__iconNode","ContactRound","createLucideIcon","entitySummaryAgent","handle","MEDALLION_CLASSES","ITEMS_CLASSES","EntitySummary","forwardRef","id","title","entityName","entityHref","entityAvatarSrc","generatedAtIso","stats","sections","onRegenerate","regenerateLabel","onClose","disclaimer","locale","className","ariaLabel","rest","ref","t","useTranslation","headingId","useId","heading","sectionsRef","useRef","generatedAtRef","onRegenerateRef","onCloseRef","rootRef","useImperativeHandle","useMemo","s","_a","useAgentRegistration","generatedLine","jsxs","jsx","Clock","Timestamp","PanelHeader","Fragment","Button","RefreshCw","IconButton","X","Avatar","Link","Card","stat","index","section","Section","Alert","item"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"entity-summary-DGCBQDt1.js","sources":["../../node_modules/lucide-react/dist/esm/icons/contact-round.mjs","../../src/components/entity-summary/entity-summary.agent.ts","../../src/components/entity-summary/entity-summary.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: \"M16 2v2\", key: \"scm5qe\" }],\n [\"path\", { d: \"M17.915 22a6 6 0 0 0-12 0\", key: \"suqz9p\" }],\n [\"path\", { d: \"M8 2v2\", key: \"pbkmx\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"4\", key: \"4exip2\" }],\n [\"rect\", { x: \"3\", y: \"4\", width: \"18\", height: \"18\", rx: \"2\", key: \"12vinp\" }]\n];\nconst ContactRound = createLucideIcon(\"contact-round\", __iconNode);\n\nexport { __iconNode, ContactRound as default };\n//# sourceMappingURL=contact-round.mjs.map\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — EntitySummary. */\n/* */\n/* The AI narrative brief (\"Sintesi IA\") for an entity. The agent can */\n/* read the brief's STRUCTURE (generated-at + section ids / headings / */\n/* tone / item counts — fixed category labels, never the entity name or */\n/* the bullet items, both PHI) and drive the two affordances: regenerate */\n/* the brief and dismiss the panel. Generation itself is gated upstream */\n/* by AiConsentBanner; this adapter only re-requests an already-consented */\n/* brief. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { EntitySummaryHandle } from './entity-summary';\n\nexport const entitySummaryAgent: AgentAdapter<EntitySummaryHandle> = {\n id: 'entity-summary',\n // 'close' backs close; regenerate is a host-driven refresh with no\n // dedicated capability in the closed vocabulary.\n capabilities: ['close'],\n state: {\n sections: {\n type: 'Array<{ id: string; heading: string; tone: \"default\" | \"attention\"; itemCount: number }>',\n descriptionKey: 'ui.agent.entitySummary.state.sections',\n description:\n 'Structural section list — ids, fixed category headings, tone and item counts. Never the entity name or the bullet items (both PHI).',\n read: (handle) => handle.getState().sections,\n },\n generatedAtIso: {\n type: 'string | undefined',\n descriptionKey: 'ui.agent.entitySummary.state.generatedAtIso',\n description: 'ISO-8601 instant the brief was generated, when known.',\n read: (handle) => handle.getState().generatedAtIso,\n },\n },\n actions: {\n regenerate: {\n // Re-requests a fresh brief from the model — reaches an external system.\n safety: 'write',\n openWorld: true,\n descriptionKey: 'ui.agent.entitySummary.actions.regenerate',\n description:\n 'Request the host to regenerate the AI brief. No-op when the regenerate affordance is not available.',\n invoke: (handle) => {\n if (handle.canRegenerate()) handle.regenerate();\n },\n },\n close: {\n // Ephemeral panel-visibility change — read.\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.entitySummary.actions.close',\n description:\n 'Dismiss the summary panel. No-op when the close affordance is not available (e.g. docked in the rail).',\n invoke: (handle) => {\n if (handle.canClose()) handle.close();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'entity-summary',\n description: 'Marks the EntitySummary panel region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific summary panel from the agent.',\n },\n },\n};\n","import {\n forwardRef,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ContactRound, Clock, RefreshCw, X } from 'lucide-react';\nimport { Alert } from '../alert';\nimport { Avatar } from '../avatar';\nimport { Button } from '../button';\nimport { Card } from '../card';\nimport { IconButton } from '../button/icon-button';\nimport { Link } from '../link';\nimport { PanelHeader } from '../panel-header';\nimport { Timestamp } from '../timestamp';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { entitySummaryAgent } from './entity-summary.agent';\n\n/* ------------------------------------------------------------------ */\n/* EntitySummary — the AI narrative brief for an entity. */\n/* */\n/* The kit form of platform's \"Sintesi IA\": a generated, sectioned */\n/* brief of a patient / care plan — header (entity · generated-at · */\n/* regenerate · corpus stats), N labelled sections of bullet items */\n/* (with inline entity links), and a BETA disclaimer. The `attention` */\n/* section tone carries the clinically valuable risk flags. */\n/* */\n/* The kit owns the layout, i18n and theming; the consumer passes */\n/* structured `sections` (data-in) so the brief re-themes and */\n/* localises rather than rendering a model HTML blob. Gate generation */\n/* behind `AiConsentBanner` upstream. */\n/* ------------------------------------------------------------------ */\n\n/** A corpus stat shown in the header (e.g. `{ value: 5, label: 'care plans' }`). */\nexport interface EntitySummaryStat {\n value: string | number;\n label: string;\n}\n\n/** One narrative section — a heading over a list of bullet items. */\nexport interface EntitySummarySection {\n id: string;\n heading: string;\n /**\n * Leading glyph for the section. On default sections it's the scannability\n * anchor shown in a `--primary`-tinted medallion beside the heading (e.g. a\n * calendar for \"Scheduled\", a wallet for \"Financial\"); omit it to render no\n * medallion. On `attention` sections it overrides the warning Alert's icon\n * (which defaults to an alert triangle).\n */\n icon?: ReactNode;\n /**\n * `attention` renders the section as the kit's warning `Alert` — the\n * standard risk-flag treatment (border, warning surface, alert glyph,\n * `--warning-foreground` text) — for clinically important callouts.\n */\n tone?: 'default' | 'attention';\n /** Bullet items — `ReactNode` so consumers compose inline entity links. */\n items: ReactNode[];\n}\n\n/**\n * Curated agent handle for EntitySummary. Exposes structural state only —\n * never the entity name or the section items (both PHI). See\n * `entity-summary.agent.ts`.\n */\nexport interface EntitySummaryHandle {\n /** Structural snapshot — generated-at + section ids/headings/tone/count. No PHI. */\n getState: () => {\n generatedAtIso?: string;\n sections: Array<{\n id: string;\n heading: string;\n tone: 'default' | 'attention';\n itemCount: number;\n }>;\n };\n /** Whether the regenerate affordance is available. */\n canRegenerate: () => boolean;\n /** Request the host to regenerate the brief (mirrors onRegenerate). */\n regenerate: () => void;\n /** Whether the close affordance is available. */\n canClose: () => boolean;\n /** Dismiss the panel (mirrors onClose). */\n close: () => void;\n}\n\nexport interface EntitySummaryProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title' | 'children'\n> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so an\n * agent / MCP UI bridge can address this specific summary panel.\n */\n id?: string;\n /** Panel title. Defaults to the localised \"AI summary\". */\n title?: string;\n /** Entity name shown beside its avatar in the header (links when `entityHref` is set). */\n entityName?: string;\n /** Entity href for the name link. */\n entityHref?: string;\n /** Avatar image URL for the entity. Falls back to initials derived from `entityName`. */\n entityAvatarSrc?: string;\n /** ISO-8601 instant the brief was generated. */\n generatedAtIso?: string;\n /** Corpus the brief was built from, shown as a compact KPI card. */\n stats?: EntitySummaryStat[];\n /** The narrative sections, in order. */\n sections: EntitySummarySection[];\n /** Regenerate the brief. Omit to hide the affordance. */\n onRegenerate?: () => void;\n /** Regenerate-button label. */\n regenerateLabel?: string;\n /**\n * Dismiss the panel. Renders a close button in the panel header for\n * STANDALONE use (outside the rail). When docked in `ControlRoomRail`, omit\n * this — the rail injects its own close via `PanelHeaderActionsProvider`\n * (passing it while docked would render a duplicate close control).\n */\n onClose?: () => void;\n /** Footer disclaimer. Defaults to the BETA clinical-judgement note. */\n disclaimer?: ReactNode;\n /** BCP-47 locale for the generated-at timestamp. */\n locale?: string;\n /** Accessible name for the panel region (defaults to `title`). */\n 'aria-label'?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Section presentation. The `attention` tone renders a different */\n/* element tree (the kit's warning Alert) rather than a class variant, */\n/* so the branch lives in `Section`; these constants carry the shared */\n/* class sets for the default (prose) sections. */\n/* ------------------------------------------------------------------ */\n\n// The default section's leading icon chip — a --primary-tinted medallion\n// that anchors the heading. No tone variants: the attention tone is owned\n// by the Alert primitive, so this stays a plain class set.\nconst MEDALLION_CLASSES =\n 'ds:flex ds:size-7 ds:shrink-0 ds:items-center ds:justify-center ds:rounded-[var(--radius-md)] ds:[&_svg]:size-4 ds:bg-primary/10 ds:text-[color:var(--primary)]';\n\n// The bullet list shared by every section — indented disc items.\nconst ITEMS_CLASSES =\n 'ds:m-0 ds:flex ds:list-disc ds:flex-col ds:gap-[var(--spacing-2xs)] ds:ps-[var(--spacing-md)] type-body-sm';\n\nexport const EntitySummary = forwardRef<HTMLElement, EntitySummaryProps>(\n function EntitySummary(\n {\n id,\n title,\n entityName,\n entityHref,\n entityAvatarSrc,\n generatedAtIso,\n stats,\n sections,\n onRegenerate,\n regenerateLabel,\n onClose,\n disclaimer,\n locale,\n className,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref,\n ) {\n const { t } = useTranslation('ui');\n const headingId = useId();\n const heading =\n title ?? t('entitySummary.title', { defaultValue: 'AI summary' });\n\n /* ----- Agent handle (structural state + regenerate / close) ----- */\n const sectionsRef = useRef(sections);\n sectionsRef.current = sections;\n const generatedAtRef = useRef(generatedAtIso);\n generatedAtRef.current = generatedAtIso;\n const onRegenerateRef = useRef(onRegenerate);\n onRegenerateRef.current = onRegenerate;\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n\n const rootRef = useRef<HTMLElement>(null);\n useImperativeHandle(ref, () => rootRef.current as HTMLElement, []);\n\n const handle = useMemo<EntitySummaryHandle>(\n () => ({\n // Structural only — section headings are fixed category labels, never\n // the entity name or the bullet items (both PHI).\n getState: () => ({\n generatedAtIso: generatedAtRef.current,\n sections: sectionsRef.current.map((s) => ({\n id: s.id,\n heading: s.heading,\n tone: s.tone ?? 'default',\n itemCount: s.items.length,\n })),\n }),\n canRegenerate: () => !!onRegenerateRef.current,\n regenerate: () => onRegenerateRef.current?.(),\n canClose: () => !!onCloseRef.current,\n close: () => onCloseRef.current?.(),\n }),\n [],\n );\n useAgentRegistration(entitySummaryAgent, handle, id);\n\n // The generated-at line — the brief's \"subtitle\" under the entity name,\n // or a standalone line when there's no entity. A clock glyph leads it.\n const generatedLine = generatedAtIso ? (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)] type-meta ds:text-[color:var(--muted-foreground)]\">\n <Clock aria-hidden=\"true\" className=\"ds:size-3.5 ds:shrink-0\" />\n <span>\n {t('entitySummary.generatedAt', { defaultValue: 'Generated' })}\n </span>\n <Timestamp value={generatedAtIso} format=\"absolute\" locale={locale} />\n </span>\n ) : null;\n\n return (\n <section\n ref={rootRef}\n data-component=\"entity-summary\"\n data-component-id={id}\n aria-labelledby={ariaLabel ? undefined : headingId}\n aria-label={ariaLabel}\n className={['ds:flex ds:flex-col', className].filter(Boolean).join(' ')}\n {...rest}\n >\n {/* Header — the shared rail-panel pattern. Title + Regenerate;\n the close affordance is injected by the rail, not the panel. */}\n <PanelHeader\n title={heading}\n icon={<ContactRound aria-hidden=\"true\" />}\n headingId={ariaLabel ? undefined : headingId}\n sticky\n divider\n actions={\n onRegenerate || onClose ? (\n <>\n {onRegenerate ? (\n <Button\n type=\"button\"\n size=\"sm\"\n intent=\"ghost\"\n startIcon={<RefreshCw aria-hidden=\"true\" />}\n onClick={onRegenerate}\n >\n {regenerateLabel ??\n t('entitySummary.regenerate', {\n defaultValue: 'Regenerate',\n })}\n </Button>\n ) : null}\n {onClose ? (\n <IconButton\n icon={<X aria-hidden=\"true\" />}\n size=\"sm\"\n intent=\"ghost\"\n aria-label={t('common.close', { defaultValue: 'Close' })}\n onClick={onClose}\n />\n ) : null}\n </>\n ) : undefined\n }\n />\n\n {/* Body */}\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)] ds:p-[var(--spacing-md)]\">\n {entityName || generatedAtIso || (stats && stats.length > 0) ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n {/* Identity — the entity's avatar + name, generated-at as the\n subtitle beneath. Without a name, the generated line stands\n alone. */}\n {entityName ? (\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <Avatar\n name={entityName}\n src={entityAvatarSrc}\n size=\"sm\"\n className=\"ds:shrink-0\"\n />\n <div className=\"ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n {entityHref ? (\n <Link\n href={entityHref}\n className=\"type-body-sm ds:font-semibold\"\n >\n {entityName}\n </Link>\n ) : (\n <span className=\"type-body-sm ds:font-semibold ds:text-[color:var(--foreground)]\">\n {entityName}\n </span>\n )}\n {generatedLine}\n </div>\n </div>\n ) : (\n generatedLine\n )}\n\n {/* Corpus stats — a compact KPI card: value over label, with a\n hairline divider between cells. */}\n {stats && stats.length > 0 ? (\n <Card variant=\"elevated\">\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles -- role=\"list\" restores list semantics that ds:list-none strips in Safari/VoiceOver */}\n <ul\n role=\"list\"\n className=\"ds:m-0 ds:flex ds:list-none ds:items-stretch\"\n >\n {stats.map((stat, index) => (\n <li\n key={`${stat.label}-${index}`}\n className={[\n 'ds:flex ds:flex-1 ds:flex-col ds:items-center ds:gap-[var(--spacing-2xs)] ds:p-[var(--spacing-sm)] ds:text-center',\n index > 0\n ? 'ds:border-s ds:border-[color:var(--card-border)]'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <span className=\"type-metric ds:[--type-metric-size:var(--font-size-lg)] ds:text-[color:var(--foreground)]\">\n {stat.value}\n </span>\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)]\">\n {stat.label}\n </span>\n </li>\n ))}\n </ul>\n </Card>\n ) : null}\n </div>\n ) : null}\n\n {/* Sections */}\n {sections.map((section) => (\n <Section key={section.id} section={section} />\n ))}\n\n {/* Disclaimer */}\n <p className=\"ds:m-0 type-meta ds:text-[color:var(--muted-foreground)]\">\n {disclaimer ??\n t('entitySummary.disclaimer', {\n defaultValue:\n 'Does not replace clinical judgement · verify accuracy before clinical use · BETA',\n })}\n </p>\n </div>\n </section>\n );\n },\n);\n\nfunction Section({ section }: { section: EntitySummarySection }): ReactNode {\n const headingId = useId();\n\n // The risk-flag section composes the kit's warning `Alert` primitive rather\n // than re-painting the warning tokens by hand — same border, surface, alert\n // glyph, and `--warning-foreground` treatment as every other warning in the\n // app. `live=\"off\"`: the brief is static content, not a just-occurred event,\n // so the items read in normal flow instead of being announced assertively.\n // A per-section `icon` overrides Alert's default alert triangle.\n if (section.tone === 'attention') {\n // The shared `--shadow-card` lifts the warning callout to the same\n // elevation as the surrounding section cards, so the stack reads as one\n // set of raised panels rather than a flat warning band among cards.\n return (\n <Alert\n variant=\"warning\"\n live=\"off\"\n icon={section.icon}\n className=\"ds:shadow-[var(--shadow-card)]\"\n >\n <Alert.Title as=\"h3\">{section.heading}</Alert.Title>\n <ul className={ITEMS_CLASSES}>\n {section.items.map((item, index) => (\n <li key={index}>{item}</li>\n ))}\n </ul>\n </Alert>\n );\n }\n\n // Default sections are raised cards — the scannable \"panel per topic\" stack,\n // matching platform's Sintesi IA. The card owns its own padding (so we drive\n // it from a single content div rather than Card.Header/Body) and is named by\n // its heading for assistive tech.\n return (\n <Card variant=\"elevated\" aria-labelledby={headingId}>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-md)]\">\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n {section.icon ? (\n <span aria-hidden=\"true\" className={MEDALLION_CLASSES}>\n {section.icon}\n </span>\n ) : null}\n <h3\n id={headingId}\n className=\"ds:m-0 type-eyebrow ds:text-[color:var(--foreground)]\"\n >\n {section.heading}\n </h3>\n </div>\n <ul className={`${ITEMS_CLASSES} ds:text-[color:var(--foreground)]`}>\n {section.items.map((item, index) => (\n <li key={index}>{item}</li>\n ))}\n </ul>\n </div>\n </Card>\n );\n}\n"],"names":["__iconNode","ContactRound","createLucideIcon","entitySummaryAgent","handle","MEDALLION_CLASSES","ITEMS_CLASSES","EntitySummary","forwardRef","id","title","entityName","entityHref","entityAvatarSrc","generatedAtIso","stats","sections","onRegenerate","regenerateLabel","onClose","disclaimer","locale","className","ariaLabel","rest","ref","t","useTranslation","headingId","useId","heading","sectionsRef","useRef","generatedAtRef","onRegenerateRef","onCloseRef","rootRef","useImperativeHandle","useMemo","s","_a","useAgentRegistration","generatedLine","jsxs","jsx","Clock","Timestamp","PanelHeader","Fragment","Button","RefreshCw","IconButton","X","Avatar","Link","Card","stat","index","section","Section","Alert","item"],"mappings":"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","x_google_ignoreList":[0]}
@@ -11,7 +11,7 @@ import { B as ts } from "./button-group-CUnNnt8a.js";
11
11
  import { C as ns } from "./combobox-duuDRI1t.js";
12
12
  import { I as vn } from "./icon-button-group-mXvYDaba.js";
13
13
  import { S as Ar } from "./state-backed-text-input-DVETOhSS.js";
14
- import { C as Ze } from "./card-C85_Ndhb.js";
14
+ import { C as Ze } from "./card-DVO3x8E-.js";
15
15
  import { S as Tt } from "./separator-Bdc9bqoJ.js";
16
16
  import { S as rs } from "./slider-pZ95bEm7.js";
17
17
  import { S as is } from "./switch-DO6uC4HJ.js";
@@ -3131,4 +3131,4 @@ export {
3131
3131
  Nn as t,
3132
3132
  Kr as u
3133
3133
  };
3134
- //# sourceMappingURL=face-scheme-e2M2HJGz.js.map
3134
+ //# sourceMappingURL=face-scheme-DlcQaQVR.js.map