@alfadocs/ui-kit 1.47.1 → 1.48.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 (440) hide show
  1. package/dist/_chunks/{actions-cell-renderer-B5m9lwgC.js → actions-cell-renderer-DMittsR3.js} +4 -4
  2. package/dist/_chunks/{address-autocomplete-Bq-1n1UX.js → address-autocomplete-Dp5uMvKP.js} +61 -60
  3. package/dist/_chunks/{address-fields-jFfjxOQR.js → address-fields-QfC-N3pw.js} +5 -5
  4. package/dist/_chunks/{agenda-card-DyQtHb9z.js → agenda-card-C4h0xMGi.js} +2 -2
  5. package/dist/_chunks/{agenda-tray-CBaJASb5.js → agenda-tray-DNZYW2xt.js} +4 -4
  6. package/dist/_chunks/{ai-credits-notice-xszqOZTC.js → ai-credits-notice-C-kz_RrY.js} +3 -3
  7. package/dist/_chunks/{ai-permission-notice-D7I2U-cz.js → ai-permission-notice-BRZeS3mT.js} +3 -3
  8. package/dist/_chunks/{ai-prompt-input-DXknpQCB.js → ai-prompt-input-CxvnXsAs.js} +82 -82
  9. package/dist/_chunks/{alia-sidebar-CUqaJNPQ.js → alia-sidebar-Crn8OGPF.js} +7 -7
  10. package/dist/_chunks/{anamnesis-card-xtEhyojD.js → anamnesis-card-D8Si-2GV.js} +3 -3
  11. package/dist/_chunks/{anamnesis-summary-card-CclBbiXg.js → anamnesis-summary-card-DPyScUMM.js} +2 -2
  12. package/dist/_chunks/{anamnesis-summary-rows-DI-UX5r6.js → anamnesis-summary-rows-CZirLRuv.js} +12 -12
  13. package/dist/_chunks/{antenatal-schedule-timeline-CXk_tzWG.js → antenatal-schedule-timeline-8fm3vPSV.js} +2 -2
  14. package/dist/_chunks/{appointment-card-DluZy8Iv.js → appointment-card-CvGU0QP6.js} +5 -5
  15. package/dist/_chunks/{appointment-peek-BsfCpiJs.js → appointment-peek--dmWznLZ.js} +5 -5
  16. package/dist/_chunks/{appointment-timeline-Cs5f9viN.js → appointment-timeline-y9uYZMUd.js} +6 -6
  17. package/dist/_chunks/{appointment-tray-CLrGGnKR.js → appointment-tray-BTecNeSb.js} +4 -4
  18. package/dist/_chunks/appointment-workflow-status-CS8ufF1f.js +66 -0
  19. package/dist/_chunks/{audio-recorder-B7dT-Y3v.js → audio-recorder-DZBtAvLH.js} +4 -4
  20. package/dist/_chunks/{autocomplete-MpBhz-fG.js → autocomplete-DSasZUf6.js} +65 -64
  21. package/dist/_chunks/{badge-BudgzTe_.js → badge-BAkd6_Pj.js} +24 -17
  22. package/dist/_chunks/{balance-badge-cell-YGrYdrvR.js → balance-badge-cell-CA0YNJMR.js} +6 -6
  23. package/dist/_chunks/{bishop-score-Cu70iv9C.js → bishop-score-BMLRvXYF.js} +4 -4
  24. package/dist/_chunks/{bmi-calculator-C9N19aLX.js → bmi-calculator-DUhRyyrA.js} +3 -3
  25. package/dist/_chunks/{booking-C4MwImkS.js → booking-BQYFDcrz.js} +10 -10
  26. package/dist/_chunks/{breadcrumb-agut0PwN.js → breadcrumb-D3boYzD4.js} +50 -49
  27. package/dist/_chunks/{button-CaUe1uyd.js → button-18oBsI3n.js} +54 -50
  28. package/dist/_chunks/button-group-BSDqso_C.js +408 -0
  29. package/dist/_chunks/{calendar-OzSeTb4V.js → calendar-DjoJ9ovF.js} +11 -17
  30. package/dist/_chunks/{calendar-event-card-B6N5h1dO.js → calendar-event-card-BUbKBPv_.js} +55 -73
  31. package/dist/_chunks/calendar-workspace-D8zX9JWm.js +10423 -0
  32. package/dist/_chunks/{care-plan-card-BOv0NRle.js → care-plan-card-ciBaaguw.js} +4 -4
  33. package/dist/_chunks/{care-plan-entry-card-d-rZD4li.js → care-plan-entry-card-D7A0whiZ.js} +5 -5
  34. package/dist/_chunks/{care-plan-header-CEmBXn6-.js → care-plan-header-DKV1gLqv.js} +4 -4
  35. package/dist/_chunks/{carousel.agent-z1yLBpyC.js → carousel.agent-DqDGR2yH.js} +2 -2
  36. package/dist/_chunks/{chart-D8ucl8hH.js → chart-VjuXDXOZ.js} +3 -3
  37. package/dist/_chunks/{chat-input-Cj7ZYQr5.js → chat-input-BVho_SqP.js} +2 -2
  38. package/dist/_chunks/{chat-message-BMVxiUIX.js → chat-message-Co_NRGM4.js} +3 -3
  39. package/dist/_chunks/{smartphone-DaPcFw-X.js → circle-dashed-CUj6o2cA.js} +3 -14
  40. package/dist/_chunks/{city-input-DaQc-Hbj.js → city-input-BGYc4lRV.js} +2 -2
  41. package/dist/_chunks/{clinical-note-card-DdsGYMmI.js → clinical-note-card-DYDQ3q2x.js} +89 -74
  42. package/dist/_chunks/{code-block-BB-viuTn.js → code-block-C_eNHWaa.js} +2 -2
  43. package/dist/_chunks/combobox-B_rLwmSv.js +578 -0
  44. package/dist/_chunks/{command-palette-DQl_SNEv.js → command-palette-DhgGo7GJ.js} +82 -80
  45. package/dist/_chunks/{connection-status-BmA9T0UO.js → connection-status-Cfux3TvH.js} +4 -4
  46. package/dist/_chunks/{contact-profile-card-C0WpwpVV.js → contact-profile-card-Dj4NgBL-.js} +3 -3
  47. package/dist/_chunks/control-room-rail-DAO0qfOI.js +379 -0
  48. package/dist/_chunks/{copy-field-B8XRVmQv.js → copy-field-Cm4y5Bff.js} +2 -2
  49. package/dist/_chunks/{country-select-CfDNFG5c.js → country-select-C5jZjO8O.js} +2 -2
  50. package/dist/_chunks/{cycle-calculator-BH2StWoT.js → cycle-calculator-B9lBRNiZ.js} +3 -3
  51. package/dist/_chunks/{dashboard-grid-BcXWL5S9.js → dashboard-grid-uX7x1ePj.js} +2 -2
  52. package/dist/_chunks/{data-table-DnKOmEVw.js → data-table-DWOSxlsy.js} +9 -9
  53. package/dist/_chunks/{data-table-tabs-B9SXA5VP.js → data-table-tabs-CzYYKp2_.js} +3 -3
  54. package/dist/_chunks/{dependent-selector-BHDP0nBB.js → dependent-selector-BR_8D2Qu.js} +2 -2
  55. package/dist/_chunks/{description-list-BsJ_6CQE.js → description-list-1A2DEbE6.js} +2 -2
  56. package/dist/_chunks/{document-preview-COV0BC6n.js → document-preview-Od2Hz4z5.js} +13 -12
  57. package/dist/_chunks/{document-scanner-B1abl-A4.js → document-scanner-p0aGlzCy.js} +3 -3
  58. package/dist/_chunks/{dropdown-menu-DU-Hrf33.js → dropdown-menu-C8PaW3lR.js} +110 -96
  59. package/dist/_chunks/{due-date-calculator-Buh_mVHq.js → due-date-calculator-BVqJaxzd.js} +4 -4
  60. package/dist/_chunks/{editable-currency-cell-renderer-OUkUv7U4.js → editable-currency-cell-renderer-D_G2Ap61.js} +4 -4
  61. package/dist/_chunks/{editable-description-ADMVFPUz.js → editable-description-B4NVdjvd.js} +3 -3
  62. package/dist/_chunks/{editor-overlay-DwNKaI22.js → editor-overlay-BDiBvQmL.js} +2 -2
  63. package/dist/_chunks/{empty-state-BUN_UAWf.js → empty-state-DTBZ1ENT.js} +2 -2
  64. package/dist/_chunks/{entity-card-I-Gio5wo.js → entity-card-D1Yrh9wf.js} +2 -1
  65. package/dist/_chunks/{entity-summary-DXejuQ8i.js → entity-summary-Ckz_U00H.js} +3 -3
  66. package/dist/_chunks/{error-boundary-BNT2iQ1w.js → error-boundary-BxTqEXqj.js} +2 -2
  67. package/dist/_chunks/euro-Dsuz4ixO.js +22 -0
  68. package/dist/_chunks/{face-scheme-mIhwrQXt.js → face-scheme-fku-RShg.js} +71 -71
  69. package/dist/_chunks/{fetal-weight-wx4ycKc6.js → fetal-weight-B69yOS9W.js} +3 -3
  70. package/dist/_chunks/{field-array-BW9KeeXG.js → field-array-lIXrFWS0.js} +3 -3
  71. package/dist/_chunks/file-BuG1VMAy.js +21 -0
  72. package/dist/_chunks/{file-Cwe9VC1A.js → file-image-cDgE-BTy.js} +2 -19
  73. package/dist/_chunks/{file-manager-DOcJGIx2.js → file-manager-CqgxLqoA.js} +15 -14
  74. package/dist/_chunks/{file-upload-BDpb08GM.js → file-upload-B242a_Y1.js} +53 -52
  75. package/dist/_chunks/{finished-terminal-DJd7Z_po.js → finished-terminal-B2oqXO0Y.js} +2 -2
  76. package/dist/_chunks/fiscal-code-input-BEF8eKIG.js +572 -0
  77. package/dist/_chunks/{freemium-paywall-BaW5ODc9.js → freemium-paywall-B6JITu4l.js} +2 -2
  78. package/dist/_chunks/{gestational-age-calculator-CwbecTul.js → gestational-age-calculator-DsGN6_HS.js} +5 -5
  79. package/dist/_chunks/handled-rejection-6gqCf5vt.js +13 -0
  80. package/dist/_chunks/{hcg-doubling-BcXriXJe.js → hcg-doubling-D2SH-e7t.js} +3 -3
  81. package/dist/_chunks/{header-3o9o9v_T.js → header-CCjp5GvE.js} +2 -2
  82. package/dist/_chunks/{header-settings-BEfx_-TF.js → header-settings-ZXa6hXuu.js} +5 -5
  83. package/dist/_chunks/{help-me-write-templates-DHIwa4xR.js → help-me-write-templates-DQtT1qs_.js} +5 -5
  84. package/dist/_chunks/history-CK2JaU2g.js +16 -0
  85. package/dist/_chunks/{hover-card-nUae8NPJ.js → hover-card-BplP5SzQ.js} +2 -2
  86. package/dist/_chunks/{icon-button-CehAeZoP.js → icon-button-CY7GU_Se.js} +2 -2
  87. package/dist/_chunks/icon-button-group-B_426QN_.js +431 -0
  88. package/dist/_chunks/{icon-picker-DMEelg9v.js → icon-picker-ZLebyB0U.js} +3 -3
  89. package/dist/_chunks/{image-cropper-BjPjT7wU.js → image-cropper-_HiNN79d.js} +2 -2
  90. package/dist/_chunks/{info-tip-iP2Pm9dh.js → info-tip-laBxZhKu.js} +2 -2
  91. package/dist/_chunks/{insert-result-DPnOBD85.js → insert-result-CSuPQyKL.js} +2 -2
  92. package/dist/_chunks/{key-value-pair-DaQI_LZB.js → key-value-pair-Dcdl3Gni.js} +2 -2
  93. package/dist/_chunks/{kit-extensions-DuoFF1R3.js → kit-extensions-BTJSnM_H.js} +6 -6
  94. package/dist/_chunks/{link-cell-renderer-s3oHzOwi.js → link-cell-renderer-Tswqf6BT.js} +7 -7
  95. package/dist/_chunks/{locale-picker-CH3kfrIG.js → locale-picker-DGkQmhV9.js} +170 -180
  96. package/dist/_chunks/{map-view-CHw4RL6w.js → map-view-Bb7ClKSF.js} +2 -2
  97. package/dist/_chunks/{marketplace-app-shell-PB89Dkk_.js → marketplace-app-shell-Dehuxbi-.js} +6 -6
  98. package/dist/_chunks/menu-row-BAr8bx1I.js +95 -0
  99. package/dist/_chunks/{message-card-V3sFPiQI.js → message-card-DKOtnBHy.js} +3 -3
  100. package/dist/_chunks/{message-tray-CrRIHfiQ.js → message-tray-COMEtmyr.js} +4 -4
  101. package/dist/_chunks/{multi-select-CtPd7g4x.js → multi-select-N4Smh-gj.js} +114 -113
  102. package/dist/_chunks/{muscle-scheme-UVz_x4iE.js → muscle-scheme-Co0NIgbU.js} +3 -3
  103. package/dist/_chunks/{note-attachment-CwDir3kK.js → note-attachment-CGjNTrAC.js} +2 -2
  104. package/dist/_chunks/{note-timeline-Dn_XTo1s.js → note-timeline-CVnKL0p6.js} +2 -2
  105. package/dist/_chunks/notes-panel-BiOxZL_0.js +1111 -0
  106. package/dist/_chunks/{notification-card-B2gLO6dK.js → notification-card-DDzBCi8l.js} +3 -3
  107. package/dist/_chunks/{notification-tray-BOEKegVV.js → notification-tray-PnH2PBlZ.js} +4 -4
  108. package/dist/_chunks/{operator-hero-XIdwDmN2.js → operator-hero-5061fkY5.js} +3 -3
  109. package/dist/_chunks/{optical-prescription-LGgmtcST.js → optical-prescription-DUufWXfZ.js} +3 -3
  110. package/dist/_chunks/{pagination-EkD5SiCK.js → pagination-B0N2qGy_.js} +83 -82
  111. package/dist/_chunks/panel-subview-CzHutkA8.js +217 -0
  112. package/dist/_chunks/{patient-details-yrgkSeEY.js → patient-details-C23Hdm8v.js} +3 -3
  113. package/dist/_chunks/{patient-field-row-DCMkFGqI.js → patient-field-row-DElFbpKc.js} +12 -12
  114. package/dist/_chunks/{patient-search-5QcmQKJD.js → patient-search-DgXdGkhK.js} +4 -4
  115. package/dist/_chunks/{patient-summary-card-CmEFflGS.js → patient-summary-card-C36L3h7h.js} +7 -7
  116. package/dist/_chunks/{payment-automation-upsell-BKmBXU4i.js → payment-automation-upsell-ugi4np1l.js} +3 -3
  117. package/dist/_chunks/{payment-request-card-Cer6XXCn.js → payment-request-card-DMJB57Tv.js} +5 -5
  118. package/dist/_chunks/{periodontal-chart-DJoZS_o7.js → periodontal-chart-DbGzKDj7.js} +2 -2
  119. package/dist/_chunks/{periodontal-chart-card-Nd1ZoYWb.js → periodontal-chart-card-DvHyP47v.js} +3 -3
  120. package/dist/_chunks/{periodontal-diagnosis-C7pfPOct.js → periodontal-diagnosis-B8WqI0eU.js} +2 -2
  121. package/dist/_chunks/{periodontal-risk-chart-B2tNFa15.js → periodontal-risk-chart-DsFRFFSz.js} +2 -2
  122. package/dist/_chunks/{phone-input-IWrGOCwm.js → phone-input-sQj-zi59.js} +85 -86
  123. package/dist/_chunks/{popover-DO-pssF3.js → popover-Dvb40vPH.js} +2 -2
  124. package/dist/_chunks/{practice-profile-hero-DxoLlQr5.js → practice-profile-hero-CPy5h2yI.js} +2 -2
  125. package/dist/_chunks/{practice-results-D11Zpt27.js → practice-results-t2BHht91.js} +7 -7
  126. package/dist/_chunks/{pregnancy-dating-DcyV9ZRD.js → pregnancy-dating-lfjjZVZH.js} +5 -5
  127. package/dist/_chunks/{pregnancy-weight-gain-Bfq4Kwt5.js → pregnancy-weight-gain-WpNt-S0q.js} +3 -3
  128. package/dist/_chunks/{privacy-lock-CbFCAMM3.js → privacy-lock-D6gq0GDg.js} +3 -3
  129. package/dist/_chunks/privacy-mask-BC5lw2zB.js +81 -0
  130. package/dist/_chunks/{product-hub-panel-w40-_-1s.js → product-hub-panel-CKeSCSeE.js} +3 -3
  131. package/dist/_chunks/{province-select-BaUnkg4S.js → province-select-BiszMRRY.js} +2 -2
  132. package/dist/_chunks/{public-header.agent-D-EBVskf.js → public-header.agent-B9wDmUeB.js} +3 -3
  133. package/dist/_chunks/{radiograph-panel.agent-LrILY2lN.js → radiograph-panel.agent-TmyIvTOa.js} +6 -6
  134. package/dist/_chunks/{reviews-panel-2GVuxGeT.js → reviews-panel-BdwFp_0c.js} +4 -4
  135. package/dist/_chunks/{rich-text-editor-BwDV2XkZ.js → rich-text-editor-y6ML0KeV.js} +12 -11
  136. package/dist/_chunks/{search-bar-CCmViqaa.js → search-bar-6bHatpYJ.js} +69 -67
  137. package/dist/_chunks/{select-CLSUnKjF.js → select-upNAltly.js} +89 -88
  138. package/dist/_chunks/{session-countdown-BqppPrw6.js → session-countdown-ACJyTXH2.js} +2 -2
  139. package/dist/_chunks/{sheet-C8WIDFS8.js → sheet-D0Lh0KR2.js} +2 -2
  140. package/dist/_chunks/{sign-in-with-alfadocs-button-DWwBJtyE.js → sign-in-with-alfadocs-button-CDyJAIzW.js} +2 -2
  141. package/dist/_chunks/{signature-request-D_j2aQu1.js → signature-request-15D363w5.js} +6 -6
  142. package/dist/_chunks/{signature-status-chip-D4NsrdeI.js → signature-status-chip-Dz6sS2oA.js} +2 -2
  143. package/dist/_chunks/{slot-grid-B3eOPkKD.js → slot-grid-4fWH3Euk.js} +4 -4
  144. package/dist/_chunks/smartphone-C0rFF2if.js +15 -0
  145. package/dist/_chunks/{streaming-text-CE1u_oGa.js → streaming-text-eRiizArc.js} +2 -2
  146. package/dist/_chunks/{tab-bar-Cw9UK18Z.js → tab-bar-BHFf6knq.js} +9 -9
  147. package/dist/_chunks/{tabs-BnRaLT0y.js → tabs-CFsuMQ5H.js} +82 -81
  148. package/dist/_chunks/{tag-Ci3xJPcH.js → tag-B65tLWvD.js} +24 -21
  149. package/dist/_chunks/{task-card-qTKD1fIT.js → task-card-CTTQfPS6.js} +72 -55
  150. package/dist/_chunks/task-editor-DlvTwAfv.js +1243 -0
  151. package/dist/_chunks/{task-tray-DIwjAIes.js → task-tray-JA-qp_pB.js} +4 -4
  152. package/dist/_chunks/tasks-panel-C_dVDQKJ.js +1243 -0
  153. package/dist/_chunks/{theme-toggle-BP0XRGMM.js → theme-toggle-LUBxlNDm.js} +4 -4
  154. package/dist/_chunks/{toast-ZZfhA5u0.js → toast-CT8hjr9r.js} +2 -2
  155. package/dist/_chunks/{token-insert-menu-A9B5AJw6.js → token-insert-menu-klwbxVKh.js} +3 -3
  156. package/dist/_chunks/{tool-rail-CCFqDfAn.js → tool-rail-DEeX4PdN.js} +144 -137
  157. package/dist/_chunks/{tooth-scheme-DPAq0vQK.js → tooth-scheme-BkjhkI8g.js} +4 -4
  158. package/dist/_chunks/{treatment-receipt-DU0OewqH.js → treatment-receipt-C-gWZ6uv.js} +3 -3
  159. package/dist/_chunks/{unit-converter-C-LpGzrN.js → unit-converter-Dp_KDxE6.js} +3 -3
  160. package/dist/_chunks/use-appointment-details-read-D2FH-cHF.js +2045 -0
  161. package/dist/_chunks/use-list-reflow-C7O4Uqnl.js +133 -0
  162. package/dist/_chunks/use-priority-overflow-Cdmb5EiR.js +108 -0
  163. package/dist/_chunks/{variables-menu-vXUaSBj4.js → variables-menu-aJLKJ_cu.js} +127 -136
  164. package/dist/_chunks/{warning-stack-C0glSB7p.js → warning-stack-CEgYkI1z.js} +3 -3
  165. package/dist/_chunks/{widget-picker-B1sj6uyf.js → widget-picker-CilQvcNL.js} +2 -2
  166. package/dist/_chunks/{workflow-map-DhR_h5yw.js → workflow-map-qGkQTNvS.js} +30 -29
  167. package/dist/_chunks/{workflow-status-CuJAOuKL.js → workflow-status-ClHfz4Kr.js} +209 -167
  168. package/dist/agent-catalog.json +371 -26
  169. package/dist/agent-i18n/en.json +41 -9
  170. package/dist/components/_shared/appointment-format.d.ts +52 -0
  171. package/dist/{patterns/calendar/calendar-editor-fields.d.ts → components/_shared/compact-editor-fields.d.ts} +6 -5
  172. package/dist/components/_shared/handled-rejection.d.ts +2 -0
  173. package/dist/components/_shared/menu-row.d.ts +17 -0
  174. package/dist/components/_shared/patient-identity.d.ts +7 -0
  175. package/dist/components/_shared/patient-picker.d.ts +24 -0
  176. package/dist/components/_shared/privacy-mask.d.ts +29 -0
  177. package/dist/components/address-autocomplete/index.js +1 -1
  178. package/dist/components/address-fields/index.js +1 -1
  179. package/dist/components/agenda-card/index.js +1 -1
  180. package/dist/components/agenda-tray/index.js +1 -1
  181. package/dist/components/ai-credits-notice/index.js +1 -1
  182. package/dist/components/ai-permission-notice/index.js +1 -1
  183. package/dist/components/ai-prompt-input/index.js +1 -1
  184. package/dist/components/anamnesis-card/index.js +1 -1
  185. package/dist/components/anamnesis-summary-card/index.js +1 -1
  186. package/dist/components/appointment-card/index.js +2 -2
  187. package/dist/components/appointment-details-panel/appointment-details-panel.agent.d.ts +4 -0
  188. package/dist/components/appointment-details-panel/appointment-details-panel.d.ts +134 -0
  189. package/dist/components/appointment-details-panel/appointment-details-panel.focus.d.ts +7 -0
  190. package/dist/components/appointment-details-panel/appointment-details-panel.history.d.ts +12 -0
  191. package/dist/components/appointment-details-panel/appointment-details-panel.identity.d.ts +41 -0
  192. package/dist/{patterns/calendar/calendar-info-hover.d.ts → components/appointment-details-panel/appointment-details-panel.info-hover.d.ts} +1 -1
  193. package/dist/components/appointment-details-panel/appointment-details-panel.sections.d.ts +51 -0
  194. package/dist/components/appointment-details-panel/appointment-details-panel.types.d.ts +326 -0
  195. package/dist/components/appointment-details-panel/index.d.ts +8 -0
  196. package/dist/components/appointment-details-panel/index.js +8 -0
  197. package/dist/components/appointment-details-panel/use-appointment-details-read.d.ts +32 -0
  198. package/dist/components/appointment-peek/index.js +1 -1
  199. package/dist/components/appointment-timeline/index.js +1 -1
  200. package/dist/components/audio-recorder/index.js +1 -1
  201. package/dist/components/autocomplete/index.js +1 -1
  202. package/dist/components/badge/index.js +1 -1
  203. package/dist/components/bishop-score/index.js +1 -1
  204. package/dist/components/bmi-calculator/index.js +1 -1
  205. package/dist/components/booking/index.js +1 -1
  206. package/dist/components/breadcrumb/index.js +1 -1
  207. package/dist/components/button/button.d.ts +2 -1
  208. package/dist/components/button/index.js +2 -2
  209. package/dist/components/button-group/button-group.d.ts +19 -2
  210. package/dist/components/button-group/index.js +1 -1
  211. package/dist/components/calendar/calendar.d.ts +5 -1
  212. package/dist/components/calendar/index.js +1 -1
  213. package/dist/components/calendar-event-card/index.js +1 -1
  214. package/dist/components/care-plan-card/index.js +1 -1
  215. package/dist/components/care-plan-entry-card/index.js +1 -1
  216. package/dist/components/care-plan-header/index.js +1 -1
  217. package/dist/components/carousel/index.js +1 -1
  218. package/dist/components/chart/index.js +1 -1
  219. package/dist/components/chat-input/index.js +1 -1
  220. package/dist/components/chat-message/index.js +1 -1
  221. package/dist/components/city-input/index.js +1 -1
  222. package/dist/components/clinical-note-card/clinical-note-card.d.ts +13 -5
  223. package/dist/components/clinical-note-card/index.js +1 -1
  224. package/dist/components/combobox/combobox.d.ts +9 -4
  225. package/dist/components/combobox/index.js +1 -1
  226. package/dist/components/command-palette/index.js +1 -1
  227. package/dist/components/connection-status/index.js +1 -1
  228. package/dist/components/contact-profile-card/index.js +1 -1
  229. package/dist/components/control-room-rail/control-room-rail.d.ts +14 -3
  230. package/dist/components/control-room-rail/index.js +1 -1
  231. package/dist/components/copy-field/index.js +1 -1
  232. package/dist/components/country-select/index.js +1 -1
  233. package/dist/components/cycle-calculator/index.js +1 -1
  234. package/dist/components/dashboard-grid/index.js +1 -1
  235. package/dist/components/data-table/index.js +4 -4
  236. package/dist/components/data-table-tabs/index.js +1 -1
  237. package/dist/components/dependent-selector/index.js +1 -1
  238. package/dist/components/description-list/index.js +1 -1
  239. package/dist/components/document-preview/index.js +1 -1
  240. package/dist/components/document-scanner/index.js +1 -1
  241. package/dist/components/dropdown-menu/index.js +1 -1
  242. package/dist/components/due-date-calculator/index.js +2 -2
  243. package/dist/components/editable-description/index.js +1 -1
  244. package/dist/components/editor-overlay/index.js +1 -1
  245. package/dist/components/empty-state/index.js +1 -1
  246. package/dist/components/entity-summary/index.js +1 -1
  247. package/dist/components/error-boundary/index.js +1 -1
  248. package/dist/components/face-scheme/index.js +1 -1
  249. package/dist/components/fetal-weight/index.js +1 -1
  250. package/dist/components/field-array/index.js +1 -1
  251. package/dist/components/file-manager/index.js +1 -1
  252. package/dist/components/file-upload/index.js +1 -1
  253. package/dist/components/finished-terminal/index.js +1 -1
  254. package/dist/components/fiscal-code-input/fiscal-code-input.d.ts +7 -0
  255. package/dist/components/fiscal-code-input/index.d.ts +1 -1
  256. package/dist/components/fiscal-code-input/index.js +8 -7
  257. package/dist/components/fiscal-code-input/is-valid-codice-fiscale.d.ts +19 -4
  258. package/dist/components/freemium-paywall/index.js +1 -1
  259. package/dist/components/gestational-age-calculator/index.js +1 -1
  260. package/dist/components/hcg-doubling/index.js +1 -1
  261. package/dist/components/header/index.js +1 -1
  262. package/dist/components/header-settings/index.js +1 -1
  263. package/dist/components/hover-card/index.js +1 -1
  264. package/dist/components/icon-button/index.js +1 -1
  265. package/dist/components/icon-button-group/index.js +1 -1
  266. package/dist/components/icon-picker/index.js +1 -1
  267. package/dist/components/image-cropper/index.js +1 -1
  268. package/dist/components/index.d.ts +2 -0
  269. package/dist/components/info-tip/index.js +1 -1
  270. package/dist/components/key-value-pair/index.js +1 -1
  271. package/dist/components/locale-picker/index.js +1 -1
  272. package/dist/components/map-view/index.js +1 -1
  273. package/dist/components/message-card/index.js +1 -1
  274. package/dist/components/message-tray/index.js +1 -1
  275. package/dist/components/multi-select/index.js +1 -1
  276. package/dist/components/muscle-scheme/index.js +1 -1
  277. package/dist/components/note-timeline/index.js +1 -1
  278. package/dist/components/notes-panel/index.d.ts +1 -1
  279. package/dist/components/notes-panel/index.js +1 -1
  280. package/dist/components/notes-panel/notes-panel.d.ts +102 -26
  281. package/dist/components/notification-card/index.js +1 -1
  282. package/dist/components/notification-tray/index.js +1 -1
  283. package/dist/components/operator-hero/index.js +1 -1
  284. package/dist/components/optical-prescription/index.js +1 -1
  285. package/dist/components/pagination/index.js +1 -1
  286. package/dist/components/panel-subview/index.js +1 -1
  287. package/dist/components/patient-details/index.js +1 -1
  288. package/dist/components/patient-search/index.js +1 -1
  289. package/dist/components/patient-summary-card/index.js +1 -1
  290. package/dist/components/patient-table/index.js +1 -1
  291. package/dist/components/payment-card/index.js +1 -1
  292. package/dist/components/periodontal-chart/index.js +1 -1
  293. package/dist/components/periodontal-chart-card/index.js +1 -1
  294. package/dist/components/periodontal-diagnosis/index.js +1 -1
  295. package/dist/components/periodontal-risk-chart/index.js +1 -1
  296. package/dist/components/phone-input/index.js +1 -1
  297. package/dist/components/popover/index.js +1 -1
  298. package/dist/components/practice-profile-hero/index.js +1 -1
  299. package/dist/components/practice-results/index.js +1 -1
  300. package/dist/components/pregnancy-dating/index.js +1 -1
  301. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  302. package/dist/components/privacy-lock/index.js +1 -1
  303. package/dist/components/product-hub-tray/index.js +1 -1
  304. package/dist/components/province-select/index.js +1 -1
  305. package/dist/components/public-header/index.js +1 -1
  306. package/dist/components/radiograph-panel/index.js +1 -1
  307. package/dist/components/reviews-panel/index.js +1 -1
  308. package/dist/components/rich-text-editor/index.js +2 -2
  309. package/dist/components/search-bar/index.js +1 -1
  310. package/dist/components/select/index.js +1 -1
  311. package/dist/components/session-countdown/index.js +1 -1
  312. package/dist/components/sheet/index.js +1 -1
  313. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  314. package/dist/components/signature-field/signature-field.d.ts +1 -1
  315. package/dist/components/signature-status-chip/index.js +1 -1
  316. package/dist/components/skeleton-scheme/index.js +17 -17
  317. package/dist/components/slot-grid/index.js +1 -1
  318. package/dist/components/streaming-text/index.js +1 -1
  319. package/dist/components/tab-bar/index.js +1 -1
  320. package/dist/components/tabs/index.js +1 -1
  321. package/dist/components/tag/index.js +1 -1
  322. package/dist/components/task-card/index.js +1 -1
  323. package/dist/components/task-card/task-card.d.ts +6 -0
  324. package/dist/components/task-editor/index.d.ts +4 -0
  325. package/dist/components/task-editor/index.js +6 -0
  326. package/dist/components/task-editor/task-editor.agent.d.ts +4 -0
  327. package/dist/components/task-editor/task-editor.d.ts +240 -0
  328. package/dist/components/task-editor/use-task-editor-form.d.ts +101 -0
  329. package/dist/components/task-tray/index.js +1 -1
  330. package/dist/components/tasks-panel/index.d.ts +1 -1
  331. package/dist/components/tasks-panel/index.js +1 -1
  332. package/dist/components/tasks-panel/tasks-panel.d.ts +84 -12
  333. package/dist/components/theme-toggle/index.js +1 -1
  334. package/dist/components/toast/index.js +1 -1
  335. package/dist/components/token-insert-menu/index.js +1 -1
  336. package/dist/components/tool-rail/index.js +1 -1
  337. package/dist/components/tooth-scheme/index.js +1 -1
  338. package/dist/components/treatment-receipt/index.js +1 -1
  339. package/dist/components/unit-converter/index.js +1 -1
  340. package/dist/components/variables-menu/index.js +1 -1
  341. package/dist/components/warning-stack/index.js +1 -1
  342. package/dist/components/widget-picker/index.js +1 -1
  343. package/dist/components/workflow/index.js +1 -1
  344. package/dist/components/workflow-status/appointment-workflow-status.d.ts +55 -0
  345. package/dist/components/workflow-status/index.d.ts +2 -0
  346. package/dist/components/workflow-status/index.js +7 -2
  347. package/dist/components/workflow-status/workflow-status.d.ts +35 -0
  348. package/dist/hooks/index.js +2 -2
  349. package/dist/hooks/use-exit-transition.d.ts +5 -0
  350. package/dist/hooks/use-priority-overflow.d.ts +11 -2
  351. package/dist/host-compat.css +7 -1
  352. package/dist/i18n/locales/ar.d.ts +29 -10
  353. package/dist/i18n/locales/ar.js +33 -14
  354. package/dist/i18n/locales/de.d.ts +29 -10
  355. package/dist/i18n/locales/de.js +33 -14
  356. package/dist/i18n/locales/el.d.ts +29 -10
  357. package/dist/i18n/locales/el.js +33 -14
  358. package/dist/i18n/locales/en.d.ts +29 -10
  359. package/dist/i18n/locales/en.js +33 -14
  360. package/dist/i18n/locales/es.d.ts +29 -10
  361. package/dist/i18n/locales/es.js +33 -14
  362. package/dist/i18n/locales/fr.d.ts +29 -10
  363. package/dist/i18n/locales/fr.js +33 -14
  364. package/dist/i18n/locales/hi.d.ts +29 -10
  365. package/dist/i18n/locales/hi.js +33 -14
  366. package/dist/i18n/locales/it.d.ts +29 -10
  367. package/dist/i18n/locales/it.js +33 -14
  368. package/dist/i18n/locales/ja.d.ts +29 -10
  369. package/dist/i18n/locales/ja.js +33 -14
  370. package/dist/i18n/locales/nl.d.ts +29 -10
  371. package/dist/i18n/locales/nl.js +33 -14
  372. package/dist/i18n/locales/pl.d.ts +29 -10
  373. package/dist/i18n/locales/pl.js +33 -14
  374. package/dist/i18n/locales/pt.d.ts +29 -10
  375. package/dist/i18n/locales/pt.js +33 -14
  376. package/dist/i18n/locales/ro.d.ts +29 -10
  377. package/dist/i18n/locales/ro.js +33 -14
  378. package/dist/i18n/locales/ru.d.ts +29 -10
  379. package/dist/i18n/locales/ru.js +33 -14
  380. package/dist/i18n/locales/sq.d.ts +29 -10
  381. package/dist/i18n/locales/sq.js +33 -14
  382. package/dist/i18n/locales/sv.d.ts +29 -10
  383. package/dist/i18n/locales/sv.js +33 -14
  384. package/dist/i18n/locales/tr.d.ts +29 -10
  385. package/dist/i18n/locales/tr.js +33 -14
  386. package/dist/i18n/locales/zh.d.ts +29 -10
  387. package/dist/i18n/locales/zh.js +33 -14
  388. package/dist/i18n/registerUiBundle.d.ts +5 -9
  389. package/dist/index.js +742 -728
  390. package/dist/locales/ar.json +33 -14
  391. package/dist/locales/de.json +33 -14
  392. package/dist/locales/el.json +33 -14
  393. package/dist/locales/en.json +33 -14
  394. package/dist/locales/es.json +33 -14
  395. package/dist/locales/fr.json +33 -14
  396. package/dist/locales/hi.json +33 -14
  397. package/dist/locales/it.json +33 -14
  398. package/dist/locales/ja.json +33 -14
  399. package/dist/locales/nl.json +33 -14
  400. package/dist/locales/pl.json +33 -14
  401. package/dist/locales/pt.json +33 -14
  402. package/dist/locales/ro.json +33 -14
  403. package/dist/locales/ru.json +33 -14
  404. package/dist/locales/sq.json +33 -14
  405. package/dist/locales/sv.json +33 -14
  406. package/dist/locales/tr.json +33 -14
  407. package/dist/locales/zh.json +33 -14
  408. package/dist/patterns/alia-assistant/index.js +1 -1
  409. package/dist/patterns/anamnesis/index.js +1 -1
  410. package/dist/patterns/calendar/calendar-appointment-details.d.ts +25 -95
  411. package/dist/patterns/calendar/calendar-patient-picker.d.ts +4 -3
  412. package/dist/patterns/calendar/calendar-privacy.d.ts +1 -22
  413. package/dist/patterns/calendar/calendar-sticky-offset.d.ts +20 -13
  414. package/dist/patterns/calendar/calendar-task-editor.d.ts +9 -13
  415. package/dist/patterns/calendar/calendar-workspace.d.ts +79 -8
  416. package/dist/patterns/calendar/calendar-workspace.model.d.ts +17 -12
  417. package/dist/patterns/calendar/calendar.journey.d.ts +40 -6
  418. package/dist/patterns/calendar/calendar.model.d.ts +10 -17
  419. package/dist/patterns/calendar/calendar.sheets.d.ts +18 -16
  420. package/dist/patterns/calendar/calendar.types.d.ts +24 -100
  421. package/dist/patterns/calendar/index.d.ts +4 -3
  422. package/dist/patterns/calendar/index.js +1 -1
  423. package/dist/patterns/help-me-write-templates/index.js +1 -1
  424. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  425. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  426. package/dist/patterns/signature-request/index.js +1 -1
  427. package/dist/tokens.css +1 -1
  428. package/package.json +22 -5
  429. package/dist/_chunks/button-group-CA1tmu39.js +0 -325
  430. package/dist/_chunks/calendar-workspace-BmscntRR.js +0 -12528
  431. package/dist/_chunks/combobox-DnSdYssy.js +0 -522
  432. package/dist/_chunks/control-room-rail-CdBOXIqX.js +0 -366
  433. package/dist/_chunks/fiscal-code-input-ODQRd_Sw.js +0 -553
  434. package/dist/_chunks/icon-button-group-DZKC6KGf.js +0 -428
  435. package/dist/_chunks/notes-panel-CHbDDMx8.js +0 -683
  436. package/dist/_chunks/panel-subview-CYnuX-KR.js +0 -171
  437. package/dist/_chunks/tasks-panel-DncuBPIZ.js +0 -844
  438. package/dist/_chunks/use-list-reflow-Cw43nxw5.js +0 -100
  439. package/dist/_chunks/use-priority-overflow-c9SjxZkZ.js +0 -101
  440. package/dist/patterns/calendar/calendar-appointment-details.sections.d.ts +0 -37
@@ -73,6 +73,23 @@
73
73
  "selectItem": "Activate the appointment with the given id."
74
74
  }
75
75
  },
76
+ "appointmentDetailsPanel": {
77
+ "state": {
78
+ "eventId": "The occurrence on screen or being read, as the host identifies it. After a failed or refused read, the occurrence it was for when the host says so. Null when there is none, or the host did not say.",
79
+ "loadStatus": "Where the read is: loading, ready, failed (with Retry) or refused. Actions need ready.",
80
+ "appointmentStatus": "The appointment status as last saved here or read. Null when none is recorded or nothing is on screen.",
81
+ "allowedStatuses": "The statuses set_status accepts now, in menu order. Empty when the status is read-only.",
82
+ "offeredActions": "The footer actions on offer, as their data-action values (for example edit-appointment, delete-appointment), in footer order, including any folded into More.",
83
+ "historyOpen": "Whether the History sub-view covers the details.",
84
+ "privacy": "Whether privacy mode is on. The patient identity and personal fields are then masked on screen."
85
+ },
86
+ "actions": {
87
+ "openHistory": "Slide the appointment's history over the details, as its header button does; the host reads it then if it did not send it with the details. It lists who changed what, and when.",
88
+ "closeHistory": "Return from History to the details.",
89
+ "setStatus": "Save a new appointment status through the host, as the footer control does. Resolves once the host has saved it.",
90
+ "retry": "Ask the host to read the appointment again, after a failed read or a refusal it marked retryable."
91
+ }
92
+ },
76
93
  "appointmentTimeline": {
77
94
  "state": {
78
95
  "items": "Currently-rendered appointments. Ids + lifecycle state only — never patient identity."
@@ -168,19 +185,20 @@
168
185
  "workflows": {
169
186
  "browseAgenda": "Navigate the agenda: today, previous / next range, jump to a date through the navigation row's date picker, or change what the grid shows from the one view menu — a range (day, three days, week, month, also reachable as the bare keys D · X · W · M) and a column axis (plain, chairs, operators), plus a remembered \"Show weekends\" item that hides Saturday and Sunday in every range. Each range change hands the new window to the host, which fetches the appointments for it.",
170
187
  "filterColumns": "Narrow the grid to particular chairs or operators from the two filter popovers, with the platform's semantics: nothing ticked shows everyone and ticking narrows. Operators list under their groups with a tri-state row per group; \"Only available operators\" is on by default in the operator views, and a session-local \"Show disabled operators\" switch reveals the operators the practice has disabled. A count badge rides each filter button while it narrows, and the \"Reset filters\" chip beside them clears both selections and restores both switches without ever changing the view. Selection only — no appointment is touched.",
171
- "maskPatientNames": "Turn privacy mode on or off from the toolbar. While on, patient identity is masked across the grid and the whole rail: the cards, the hover peek, the Appointments panel, the appointment details panel (patient card, description, booking contact, notes preview and the WhatsApp link are hidden), the online bookings, the waiting list and the printed call sheet; the Notes tool and the edit form show a notice instead of their content. The page can stay open beside a waiting patient. It is a display mask, not a permission: it is not persisted and it changes no record.",
188
+ "maskPatientNames": "Turn privacy mode on or off from the toolbar. While on, patient identity is masked across the grid and the whole rail: the cards, the hover peek, the Appointments panel, the appointment details panel (patient card, description, booking contact, notes preview and the WhatsApp link are hidden), the online bookings, the waiting list and the printed call sheet; the Notes tool and the edit form show a notice instead of their content, and so does a tool the host adds, unless the host masks it itself. The page can stay open beside a waiting patient. It is a display mask, not a permission: it is not persisted and it changes no record.",
172
189
  "configureDisplay": "Set the per-user display knobs in the cog popover — layout, zebra rows, show times, slot precision, the day window, the care-description mode, what the cards are coloured by, the default duration of a new appointment (5–240 minutes), whether operators read as an initials disc or a dot plus full name, whether chairs read as a full name or a short code, and whether the details panel offers the map link. The choices are remembered per user through the host's preferences adapter under `calendarWorkspace.*` keys, so they persist beyond the page load; they change presentation only and touch no patient record.",
173
- "dockTool": "Open a workspace rail tool: Appointments, appointment editor / details, waiting list, patient notes, online bookings or free-slot finder. Read the actual strip: hosts may withhold tools, and patient-notes is registered only with patient context. Notes uses the host's note permissions, independently of appointment-edit rights. Clearing its patient context returns to the previous available tool and focuses its rail button. Opening notes from a panel may address a note id and moves focus into Notes. Closing other tools returns to Appointments.",
190
+ "dockTool": "Open a workspace rail tool: Appointments, appointment editor / details, waiting list, patient notes, online bookings or free-slot finder. Read the actual strip: hosts may withhold tools, and patient-notes is registered only with patient context. Notes uses the host's note permissions, independently of appointment-edit rights. Clearing its patient context returns to the previous available tool and focuses its rail button. Opening notes from a panel may address a note id and moves focus into Notes. Closing other tools returns to Appointments. A host may add its own tools after these; they carry the host's ids, so read the strip's data-tool-id before opening one. open ignores an id no tool carries; select_tool with one, or a host tool the host withdraws while open, docks Appointments. patient-notes is the exception: withheld or without a patient, it returns to the previous tool, unannounced.",
174
191
  "reviewUpcoming": "Read the rail's resting panel: the practice's upcoming appointments — now to the end of the seventh day, cancelled excluded, earliest first — each row led by the patient. The preset row, the jump-to-date picker and the edge loaders widen the derived window up to ±180 days. Activating a row selects that appointment on the grid, which docks its details. Read-only; the rows carry ids and lifecycle state, never patient identity.",
175
- "readAppointmentDetails": "Read one appointment in the docked details panel. With the host's details read, any card click, including a patient-less block and a chip whose names are still loading, focuses the appointment and docks a read-only panel: appointment, booking, money, contact, treatments, signing and series sections, the patient's latest three notes and a History sub-view. See more or a note opens the separate Notes rail tool when the host offers it. While the read is loading, failed or refused the panel shows that status instead. Edit, withheld from a read-only viewer, opens the editor. Without the host's read a pending chip stays inert and the editor form is the details. Reads patient-identifiable data.",
192
+ "readAppointmentDetails": "Read one appointment in the docked details panel (appointment-details-panel). With the host's details read, any card click, including a patient-less block and a chip whose names are still loading, focuses the appointment and docks a read-only panel: appointment, booking, money, contact, treatments, signing and series sections, the patient's latest three notes and a History sub-view. See more or a note opens the separate Notes rail tool when the host offers it. While the read is loading, failed or refused the panel shows that status instead. Edit, withheld from a read-only viewer, opens the editor. Without the host's read a pending chip stays inert and the editor form is the details. Reads patient-identifiable data.",
176
193
  "createAppointment": "Book a new appointment in the editor panel, docked from the New appointment button, from a click on an empty slot (prefilled with the slot, the clicked column and the cog's default duration) or from an online booking being processed. Set the patient, the linked care or care-plan lines, the date, start time and duration, the operator, chair, branch and colour, the description (255 characters at most — a longer one blocks the save), and, once a patient is chosen, the SMS and e-mail reminders, the first-visit question and — where the patient has unsigned required documents — how they are asked to sign. Busy chair, busy operator and operator-away warnings are advisory and do not hold the save; only a practice closure does. Enter submits from any text field. Writes patient-identifiable data.",
177
194
  "editAppointment": "Amend an existing appointment in the docked editor. With the host's details read the editor opens from Edit on the details panel and Cancel or Save returns there; without it the details panel is the form. A remote host first loads canonical data; loading, failure and whole-appointment refusal expose no editable form. When that data carries a series, the editor first asks the scope: this occurrence, this and following, or the whole series. Honour the returned patient, care, description and recurrence capabilities. A refused recurring scope cannot be treated as an ordinary edit. Save waits for host acceptance before closing or announcing success; rejection preserves the entered draft for correction or retry. Writes patient-identifiable data.",
178
- "changeAppointmentStatus": "Set an appointment's attendance status from the Status select in the details panel. The status is patient-identifiable attendance data.",
195
+ "changeAppointmentStatus": "Set an appointment's attendance status from the status control in the details panel (appointment-details-panel). The workspace offers all six statuses; allowedStatuses lists what set_status accepts. A refusal keeps the previous status and shows the host's message. The status is patient-identifiable attendance data.",
179
196
  "moveAppointment": "Reschedule an appointment either by dragging its card to a new slot or by arming \"Move…\" in the details panel and then clicking the target slot — the panel stays docked and a banner tinted with the appointment's own colour names what is being placed. Either route ends in the confirmation dialog, which offers the SMS and e-mail notify channels and, for a series member, the recurring scope. A host recurring parent always confirms, asks the scope and hides the notify channels, as the platform does. Cancelling reverts the card and commits nothing. Writes patient-identifiable data.",
180
197
  "resizeAppointment": "Change an appointment's duration by dragging its card edge. Unlike a move this SAVES AT ONCE with no confirmation, exactly as the platform does; the toast that follows carries an Undo that restores the previous duration and logs both changes on the appointment's history. Writes patient-identifiable data.",
181
198
  "copyAppointment": "Duplicate an appointment onto another slot: arm \"Copy…\" in the details panel, then click the target. The copy lands immediately with no confirmation, and its toast carries an Undo. A plan-linked appointment first asks whether to copy the appointment only or the appointment and its treatments. Writes patient-identifiable data.",
182
199
  "deleteAppointment": "Remove an appointment from the details panel behind an alert dialog. The dialog asks for the recurring scope when the appointment belongs to a series, and for the care-plan cleanup when it is the parent of a price-list recurrence — so confirming can drop far more than the one card. Irreversible from this surface.",
183
- "managePatientNotes": "Read and write the patient's notes from the conditional Notes rail tool: add a note through the composer, pin one, edit one in a dialog or delete one behind an alert dialog. Every write goes to the host, which stamps the note's id, time and author. The kit attributes nothing to a clinical note. An HTML note edits in a rich text editor and saves as HTML; a clinical or deleted note offers no edit. With no host seam, or when the host's seam is not writable, the tool is a read-only timeline. Explicit note permissions take precedence over appointment-edit permission. Details and the editor have no Notes sub-view. The rows carry ids and pin / flag / clinical markers only; the body and author are never exposed as state. Writes patient-identifiable clinical data.",
200
+ "managePatientNotes": "Read and write the patient's notes from the conditional Notes rail tool: add a note through the composer, edit one in place, pin or flag one, or delete one behind the panel's alert dialog. Every write goes to the host on the click, and the host stamps the note's id, time and author. The kit attributes nothing to a clinical note. A refused delete, pin or flag is rolled back and explained in the panel. An HTML note edits in a rich text editor and saves as HTML; a clinical or deleted note offers no edit. With no host seam, or when the host's seam is not writable, the tool is a read-only timeline. Explicit note permissions take precedence over appointment-edit permission. Details and the editor have no Notes sub-view. The rows carry ids and pin / flag / clinical markers only; the body and author are never exposed as state. Writes patient-identifiable clinical data.",
201
+ "manageTask": "Create, edit, complete or delete a practice task in the editor tool's slot, in the published task editor. The toolbar's New task member opens an empty task, dated from the grid's selection or now; a click on a task row on the grid opens that task, read through the host. Set the date, the note, the type, the assignee and at most one counterpart (a patient, a company or an operator), then save through the host. Done and Delete act on a saved task at once. Each action is withheld when the host passes no seam for it. A task can link a patient, so writes are patient-identifiable.",
184
202
  "readModificationHistory": "Open the History sub-view of the details panel and read the appointment's modification ledger, newest first — what changed, from what to what, and when. No mutation.",
185
203
  "requestSignature": "Ask the patient to sign the appointment's documents from the details panel, by SMS or e-mail through the kit menu. The chip beside it reports the channel a request has already gone out on. There is no \"On this device…\" item: on-device signing is the host's own e-signature surface and no seam here mounts it, so the menu offers only the two channels it can honour. Sends a patient-identifiable request.",
186
204
  "createDocument": "Open the appointment details create menu through data-action=\"open-create-document\" and select an offered data-action=\"create-document-<kind>\" item: bill, folder, template, empty, identification or webcam. The host supplies permitted kinds and owns navigation, confirmation and persistence. Appointment read-only mode does not withhold document rights. A selection starts the host workflow; it does not prove that a document or bill was created. May write patient-identifiable data.",
@@ -811,14 +829,14 @@
811
829
  },
812
830
  "notesPanel": {
813
831
  "state": {
814
- "notes": "Timeline note ids + pinned / flagged / clinical flags. Never the note body or author (both PHI).",
832
+ "notes": "Timeline note ids + pinned / flagged / clinical / deleted flags. Never the note body or author (both PHI). A note whose delete is in flight is left out; a pin or flag in flight is reported with its new value. A deleted note takes no pin or flag.",
815
833
  "canAddClinical": "Whether the current user may write clinical notes (the practice_add_clinical_note permission gate).",
816
834
  "currentNoteId": "Id of the note the host has addressed — the one marked, scrolled to and focused. Null when none is. An id only, never note content."
817
835
  },
818
836
  "actions": {
819
837
  "addNote": "Compose and commit a new note. A clinical note requires the clinical-note permission (read canAddClinical first).",
820
- "togglePin": "Toggle the pinned state of the note with the given id. Refused for a deleted note or one whose actions.pin is false.",
821
- "toggleFlag": "Toggle the flagged state of the note with the given id."
838
+ "togglePin": "Toggle the pinned state of the note with the given id. Returns the host's promise; a refusal restores the pin and the panel shows the host's message. Rejects without reaching the host when the panel refuses: a deleted note, actions.pin false, or a write for the note still pending.",
839
+ "toggleFlag": "Toggle the flagged state of the note with the given id. Returns the host's promise; a refusal restores the flag and the panel shows the host's message. Rejects without reaching the host when the panel refuses: a deleted note, or a write for the note still pending."
822
840
  }
823
841
  },
824
842
  "notificationTray": {
@@ -1394,6 +1412,20 @@
1394
1412
  "selectTab": "Activate the tab with the given value."
1395
1413
  }
1396
1414
  },
1415
+ "taskEditor": {
1416
+ "state": {
1417
+ "status": "Where the form is: loading the task, ready, failed to load, locked (edit mode with nothing to load) or withheld behind the privacy notice. Writes need 'ready'.",
1418
+ "draft": "The draft as Save would send it: ids and structure only, never the note body. done is the last value the host confirmed.",
1419
+ "canSave": "Whether save would reach the host now: the form is ready, the note is filled, a chosen counterpart has an id and no write is pending."
1420
+ },
1421
+ "actions": {
1422
+ "setFields": "Set draft fields. Ids must come from the host lists, a patient the host search returned, or equal the stored one. At most one counterpart per call, and it selects its branch; assigneeId null is nobody. Nothing is saved.",
1423
+ "save": "Save the task through the host. Resolves once the write lands and rejects with the host error, which the form also shows.",
1424
+ "setDone": "Mark an existing task done or not done through the host. A rejection rolls the switch back.",
1425
+ "delete": "Delete the task through the host, without the confirmation dialog. Resolves once the delete lands.",
1426
+ "cancel": "Close the editor without saving. Anything typed since the last save is lost. Refused while a save or delete is in flight."
1427
+ }
1428
+ },
1397
1429
  "taskTray": {
1398
1430
  "state": {
1399
1431
  "items": "Currently-displayed tasks. Ids + status only — never task title / patient."
@@ -1413,7 +1445,7 @@
1413
1445
  "toggleDone": "Request the host to toggle the done state of a task.",
1414
1446
  "dismiss": "Request the host to dismiss / remove the task with the given id.",
1415
1447
  "jumpToOverdue": "Re-anchor the panel scroll on the overdue tasks.",
1416
- "setFilter": "Set the task filters (status segment, type, assignee, overdue-only). Omitted keys are left unchanged.",
1448
+ "setFilter": "Set the task filters (status segment, type, assignee, overdue-only). Omitted keys are left unchanged. Unchanged values are not re-sent. In server-filtered panels, choosing status 'done' clears overdueOnly.",
1417
1449
  "changeScope": "Switch the task scope segment between this patient ('patient') and the operator's own tasks ('mine'). The host re-feeds the items.",
1418
1450
  "loadMore": "Request the host to append the next page of tasks."
1419
1451
  }
@@ -0,0 +1,52 @@
1
+ import type { AppointmentPhoneNumber, AppointmentRecurrenceFrequency } from '../appointment-details-panel/appointment-details-panel.types';
2
+ /** A date-only value (a birthday, an all-day start) is already a local day;
3
+ * anything else parses as the wall clock it carries. */
4
+ export declare function parseEventDate(value: string | Date): Date;
5
+ /** "Wednesday, 24 June 2026" in the reader's locale; '' when unreadable. */
6
+ export declare function formatDay(locale: string, value: Date | string): string;
7
+ /** "09:00–09:45" in the reader's locale, 24-hour; '' when unreadable. */
8
+ export declare function formatTimeRange(locale: string, start: Date | string, end?: Date | string): string;
9
+ /** Absolute stamp for booked-at and history lines: day and time. */
10
+ export declare const DETAIL_STAMP_FORMAT: Intl.DateTimeFormatOptions;
11
+ /** Completed years between a birth date and `on`, the practice's clock
12
+ * rather than the real one, so the figure never drifts under a test. */
13
+ export declare function ageInYears(dobIso: string, on: Date | string): number;
14
+ /** The host's zone-less wall clock as a local Date, or undefined when it is
15
+ * not a real 'YYYY-MM-DDTHH:mm:ss' reading. Ranges are checked rather than
16
+ * round-tripped, so a time inside a daylight-saving gap still parses. */
17
+ export declare function parseAppointmentStartIso(startIso: string | undefined): Date | undefined;
18
+ /** A Timeline set to 'newest-first' is a plain column, so the DOM order
19
+ * must already be newest first. Unreadable dates stay last, in input
20
+ * order; equal instants keep theirs. The input is not changed. */
21
+ export declare function sortHistoryNewestFirst<T extends {
22
+ atIso: string;
23
+ }>(entries: readonly T[]): T[];
24
+ /** The editor's label key for each frequency, under
25
+ * `calendarWorkspace.editor.*`. A literal map, so key extractors see
26
+ * every key. */
27
+ export declare const RECURRENCE_LABEL_KEY: Record<AppointmentRecurrenceFrequency, string>;
28
+ /** What a patient record needs for its phones. */
29
+ export interface PhonesSource {
30
+ phone?: string;
31
+ phones?: AppointmentPhoneNumber[];
32
+ }
33
+ /** Every labelled phone number. The single `phone` is the mobile when the
34
+ * record carries no list. A record with neither has no numbers, which is
35
+ * not the same as one labelled blank: the list comes back empty and the
36
+ * caller omits the rows. */
37
+ export declare function patientPhones(patient: PhonesSource): AppointmentPhoneNumber[];
38
+ /** What a patient record needs for its address. */
39
+ export interface AddressSource {
40
+ address?: string;
41
+ postalCode?: string;
42
+ city?: string;
43
+ }
44
+ /** The address as one line, the map search's text. Empty when the host
45
+ * sent no address at all: the caller then offers no search. */
46
+ export declare function patientAddressLine(patient: AddressSource): string;
47
+ /** The map link's visible label: street and city, as the platform popover
48
+ * prints them. The postcode belongs in the search, not in the label. */
49
+ export declare function patientAddressLabel(patient: AddressSource): string;
50
+ /** Google Maps search for the patient's address: the popover's map link. */
51
+ export declare function patientMapsUrl(patient: AddressSource): string;
52
+ //# sourceMappingURL=appointment-format.d.ts.map
@@ -1,8 +1,9 @@
1
1
  /**
2
- * Compact fields for the calendar's three editors (appointment, task and
3
- * waiting-list entry): 32px high with `--radius-md` corners, the height and
4
- * shape of the calendar toolbar's controls, where the kit default is 44px
5
- * with `--radius-sm`.
2
+ * Compact fields for the calendar's appointment and waiting-list entry
3
+ * editors and for the published TaskEditor, which the calendar's task route
4
+ * also renders: 32px high with `--radius-md` corners, the height and shape
5
+ * of the calendar toolbar's controls, where the kit default is 44px with
6
+ * `--radius-sm`. Shared here so a published component can use it.
6
7
  *
7
8
  * INTENTIONAL EXCEPTION — do not "fix" these back to 44px. 32px sits below
8
9
  * `--min-target-size` on purpose: it is the toolbar's sanctioned sub-target
@@ -30,4 +31,4 @@ export declare const EDITOR_COMPACT_FIELDS_CLASS: string;
30
31
  * give each segment `--min-target-size` back and let the track grow.
31
32
  */
32
33
  export declare const EDITOR_COMPACT_SEGMENTED_CLASS: string;
33
- //# sourceMappingURL=calendar-editor-fields.d.ts.map
34
+ //# sourceMappingURL=compact-editor-fields.d.ts.map
@@ -0,0 +1,2 @@
1
+ export declare function handledRejection<T = void>(reason: unknown): Promise<T>;
2
+ //# sourceMappingURL=handled-rejection.d.ts.map
@@ -0,0 +1,17 @@
1
+ export declare const MENU_ROW_HIGHLIGHT: {
2
+ /** Radix DropdownMenu and Select items: `data-highlighted` is present. */
3
+ readonly highlighted: string;
4
+ /** cmdk items: `data-selected="true"` (cmdk writes the same flag to aria-selected). */
5
+ readonly selected: string;
6
+ /** Hand-rolled listboxes (VariablesMenu, AddressAutocomplete, SearchBar): `data-active="true"`. */
7
+ readonly active: string;
8
+ /** Radix SubTrigger while its submenu is open, so the path stays lit. */
9
+ readonly open: string;
10
+ };
11
+ export type MenuRowHighlightState = keyof typeof MENU_ROW_HIGHLIGHT;
12
+ /** Text in the row's ink on a lit row, e.g. a status dot. */
13
+ export declare const MENU_ROW_INK: string;
14
+ /** A bordered chip (Badge, Tag) on a lit row: no fill, an outline and text in
15
+ * the row's ink, whatever its tone. */
16
+ export declare const MENU_ROW_CHIP: string;
17
+ //# sourceMappingURL=menu-row.d.ts.map
@@ -0,0 +1,7 @@
1
+ /** The least a surface needs to name a patient: a stable id and a display
2
+ * name. Richer shapes, such as `CalendarPatient`, satisfy it. */
3
+ export interface PatientIdentity {
4
+ id: string;
5
+ name: string;
6
+ }
7
+ //# sourceMappingURL=patient-identity.d.ts.map
@@ -0,0 +1,24 @@
1
+ import type { PatientIdentity } from './patient-identity';
2
+ /** Host typeahead. Called 250 ms after typing stops, for non-blank trimmed
3
+ * queries only. Abort a superseded call through `signal`. The host's order
4
+ * is kept, so matches by phone or number stay. Reject on failure; `[]` is a
5
+ * successful search with no match. */
6
+ export type PatientSearch = (query: string, options: {
7
+ signal: AbortSignal;
8
+ }) => Promise<readonly PatientIdentity[]>;
9
+ export interface PatientPickerProps {
10
+ value: string;
11
+ onValueChange: (value: string) => void;
12
+ /** Filtered on the client when `searchPatients` is absent. */
13
+ patients?: readonly PatientIdentity[];
14
+ /** Wins over `patients` for listing. */
15
+ searchPatients?: PatientSearch;
16
+ /** Names `value` when neither the list nor a search result does. */
17
+ selectedLabel?: string;
18
+ /** Already translated. Also the idle line under a search. */
19
+ placeholder: string;
20
+ size?: 'sm' | 'md';
21
+ disabled?: boolean;
22
+ }
23
+ export declare function PatientPicker({ patients, searchPatients, ...props }: PatientPickerProps): import("react/jsx-runtime").JSX.Element;
24
+ //# sourceMappingURL=patient-picker.d.ts.map
@@ -0,0 +1,29 @@
1
+ import type { ReactNode } from 'react';
2
+ /** The mask privacy mode shows for a name. TOTAL, as `maskedTitle` is: an
3
+ * empty or absent host mask degrades to the bullets, never to a blank. */
4
+ export declare function privacyMask(mask?: string): string;
5
+ /** One muted line where a personal value would have been. */
6
+ export declare function PrivacyHiddenLine({ block }: {
7
+ block?: string;
8
+ }): import("react/jsx-runtime").JSX.Element;
9
+ /** The patient card under privacy: the grid's mask, no photo, no contact
10
+ * fields and no chips. Keeps `data-card="patient"` for host hooks. */
11
+ export declare function PrivacyIdentityCard({ mask }: {
12
+ mask?: string;
13
+ }): import("react/jsx-runtime").JSX.Element;
14
+ interface PrivacyNoticeProps {
15
+ /** Absent: the notice explains, and the toolbar's toggle is the way out. */
16
+ onTurnOff?: () => void;
17
+ }
18
+ /** The notice alone, with no heading of its own: for a surface that already
19
+ * has one, such as a PanelSubview body. */
20
+ export declare function PrivacyNotice({ onTurnOff }: PrivacyNoticeProps): import("react/jsx-runtime").JSX.Element;
21
+ /** A whole rail panel withheld under privacy: a form or a notes list that
22
+ * could only open by showing what the mask hides. */
23
+ export declare function PrivacyNoticePanel({ title, icon, onTurnOff, }: PrivacyNoticeProps & {
24
+ /** The panel's own title, so the rail still says which tool this is. */
25
+ title: string;
26
+ icon?: ReactNode;
27
+ }): import("react/jsx-runtime").JSX.Element;
28
+ export {};
29
+ //# sourceMappingURL=privacy-mask.d.ts.map
@@ -1,4 +1,4 @@
1
- import { A as o, a as t, p as a } from "../../_chunks/address-autocomplete-Bq-1n1UX.js";
1
+ import { A as o, a as t, p as a } from "../../_chunks/address-autocomplete-Dp5uMvKP.js";
2
2
  export {
3
3
  o as AddressAutocomplete,
4
4
  t as addressAutocompleteAgent,
@@ -1,4 +1,4 @@
1
- import { A as e, a } from "../../_chunks/address-fields-jFfjxOQR.js";
1
+ import { A as e, a } from "../../_chunks/address-fields-QfC-N3pw.js";
2
2
  export {
3
3
  e as AddressFields,
4
4
  a as addressFieldsAgent
@@ -1,4 +1,4 @@
1
- import { A as e } from "../../_chunks/agenda-card-DyQtHb9z.js";
1
+ import { A as e } from "../../_chunks/agenda-card-C4h0xMGi.js";
2
2
  import { a as d } from "../../_chunks/agenda-card.agent-Cb5tuEh3.js";
3
3
  import { i as g } from "../../_chunks/is-safe-url-DkETxeHz.js";
4
4
  export {
@@ -1,4 +1,4 @@
1
- import { A as r, a as g } from "../../_chunks/agenda-tray-CBaJASb5.js";
1
+ import { A as r, a as g } from "../../_chunks/agenda-tray-DNZYW2xt.js";
2
2
  export {
3
3
  r as AgendaTray,
4
4
  g as agendaTrayAgent
@@ -1,4 +1,4 @@
1
- import { A as i } from "../../_chunks/ai-credits-notice-xszqOZTC.js";
1
+ import { A as i } from "../../_chunks/ai-credits-notice-C-kz_RrY.js";
2
2
  import { a as r } from "../../_chunks/ai-credits-notice.agent-C9L7orrP.js";
3
3
  export {
4
4
  i as AiCreditsNotice,
@@ -1,4 +1,4 @@
1
- import { A as e, a as o } from "../../_chunks/ai-permission-notice-D7I2U-cz.js";
1
+ import { A as e, a as o } from "../../_chunks/ai-permission-notice-BRZeS3mT.js";
2
2
  export {
3
3
  e as AiConsentBanner,
4
4
  o as aiConsentBannerAgent
@@ -1,4 +1,4 @@
1
- import { A as a, a as o } from "../../_chunks/ai-prompt-input-DXknpQCB.js";
1
+ import { A as a, a as o } from "../../_chunks/ai-prompt-input-CxvnXsAs.js";
2
2
  export {
3
3
  a as AIPromptInput,
4
4
  o as aiPromptInputAgent
@@ -1,4 +1,4 @@
1
- import { A as s } from "../../_chunks/anamnesis-card-xtEhyojD.js";
1
+ import { A as s } from "../../_chunks/anamnesis-card-D8Si-2GV.js";
2
2
  export {
3
3
  s as AnamnesisCard
4
4
  };
@@ -1,4 +1,4 @@
1
- import { A as r, a as s } from "../../_chunks/anamnesis-summary-card-CclBbiXg.js";
1
+ import { A as r, a as s } from "../../_chunks/anamnesis-summary-card-DPyScUMM.js";
2
2
  export {
3
3
  r as AnamnesisSummaryCard,
4
4
  s as anamnesisSummaryCardAgent
@@ -1,5 +1,5 @@
1
- import { A as p } from "../../_chunks/appointment-card-DluZy8Iv.js";
2
- import { A as e, a as o, b as r } from "../../_chunks/appointment-tray-CLrGGnKR.js";
1
+ import { A as p } from "../../_chunks/appointment-card-CvGU0QP6.js";
2
+ import { A as e, a as o, b as r } from "../../_chunks/appointment-tray-BTecNeSb.js";
3
3
  import { i } from "../../_chunks/is-safe-url-DkETxeHz.js";
4
4
  export {
5
5
  p as AppointmentCard,
@@ -0,0 +1,4 @@
1
+ import type { AgentAdapter } from '../../agent/types';
2
+ import type { AppointmentDetailsPanelHandle } from './appointment-details-panel';
3
+ export declare const appointmentDetailsPanelAgent: AgentAdapter<AppointmentDetailsPanelHandle>;
4
+ //# sourceMappingURL=appointment-details-panel.agent.d.ts.map
@@ -0,0 +1,134 @@
1
+ import { type HTMLAttributes } from 'react';
2
+ import type { CalendarEventStatus } from '../calendar';
3
+ import type { AppointmentDetailsChairLabel, AppointmentDetailsHistory, AppointmentDetailsNotesPreview, AppointmentDetailsOperatorLabel, AppointmentDetailsState, AppointmentDocumentKind } from './appointment-details-panel.types';
4
+ export interface AppointmentDetailsPanelProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'title' | 'onCopy'> {
5
+ /** The read, or the shell state while there is none. Pair it with
6
+ * `useAppointmentDetailsRead`, which keeps the latest selection. */
7
+ state: AppointmentDetailsState;
8
+ /** Retry from the error shell and from a retryable refusal. Without it,
9
+ * no Retry button. */
10
+ onRetry?: () => void;
11
+ /** The appointment's patient id when the read carries no record: an id
12
+ * without a record reads "Patient record not loaded", never "no
13
+ * patient". Default `read.patient?.id`. */
14
+ patientId?: string;
15
+ /** The operator's label, resolved by the host from
16
+ * `appointment.operatorId`. Absent = no operator row. */
17
+ operator?: AppointmentDetailsOperatorLabel;
18
+ /** The chair's label. Absent = no chair row. */
19
+ chair?: AppointmentDetailsChairLabel;
20
+ /** ISO 4217 code for the money chips, the paid-online row and the
21
+ * treatment prices. Default 'EUR'. */
22
+ currency?: string;
23
+ /** The practice clock the patient's age is computed against. Default:
24
+ * the real clock. */
25
+ now?: Date | string;
26
+ /** Locale for dates, times and amounts. Default: the active language. */
27
+ locale?: string;
28
+ /** Header title. Default "Appointment details". Ignored under `privacy`,
29
+ * so a patient name can never reach the header. */
30
+ title?: string;
31
+ /** Privacy mode: the identity is masked; the photo, contact fields,
32
+ * chips, description, notes, the booker's contact, the plan name and
33
+ * `whatsappUrl` are withheld. Time, operator, chair, status, treatments
34
+ * and History stay. A display mask on top of the host's server-side
35
+ * masking, never instead of it. */
36
+ privacy?: boolean;
37
+ /** The grid's mask for this appointment; bullets without one. Read only
38
+ * under `privacy`. */
39
+ privacyTitle?: string;
40
+ /** The user's map-link setting (platform `showPatientAddressMapLink`). */
41
+ mapsLink?: boolean;
42
+ /** The latest notes of this appointment's patient, and only theirs: set
43
+ * `patientId` and notes for another patient show as loading. Without
44
+ * it, no notes card. Pass it only when the appointment has a patient. */
45
+ notesPreview?: AppointmentDetailsNotesPreview;
46
+ /** Open the host's Notes tool, at one note when a note was clicked.
47
+ * Without it, the preview opens nothing. */
48
+ onOpenNotes?: (noteId?: string) => void;
49
+ /** The appointment's history, read by the host once History opens.
50
+ * Present = the user may read it, so the header offers History. Set its
51
+ * `eventId`: entries for another occurrence show as loading. Wins over
52
+ * `read.history`, the shortcut for a history sent with the read. */
53
+ history?: AppointmentDetailsHistory;
54
+ /** History opened, from its button or the agent: start the host's read.
55
+ * Called on every opening. */
56
+ onOpenHistory?: (eventId: string) => void;
57
+ /** Withholds Edit, Move, Copy, Delete, the status change and the
58
+ * description edit. Join, WhatsApp, Create task and the documents menu
59
+ * are the host's to withhold. */
60
+ readOnly?: boolean;
61
+ /** Save a new status. Reject with a translated Error: the control keeps
62
+ * the old status and shows the message. Absent = status read-only.
63
+ * Every handler's last argument is the event id of the read it acted
64
+ * on: write to that appointment, never to "the current selection". */
65
+ onStatusChange?: (status: CalendarEventStatus, eventId: string) => Promise<void>;
66
+ /** The statuses this user may set, in any order; the menu keeps the
67
+ * platform's. Default: all six. The current status is always shown, and
68
+ * disabled when not allowed. With no status to move to (an empty list,
69
+ * or the current one alone) the status is shown read-only. */
70
+ allowedStatuses?: readonly CalendarEventStatus[];
71
+ /** Save a new description from the pencil's sub-view. Reject with a
72
+ * translated Error: the sub-view stays open and shows it. Absent = the
73
+ * description is read-only. */
74
+ onDescriptionChange?: (description: string, eventId: string) => Promise<void>;
75
+ /** Hand over to the host's editor. */
76
+ onEdit?: (eventId: string) => void;
77
+ /** Arm the host's move placement. */
78
+ onMove?: (eventId: string) => void;
79
+ /** Start the host's copy. With treatments on the read, a menu asks for
80
+ * the appointment alone or with its treatments. */
81
+ onCopy?: (withTreatments: boolean, eventId: string) => void;
82
+ /** Start the host's delete. The host owns the confirmation, the series
83
+ * scope and any care-plan clean-up. */
84
+ onDelete?: (eventId: string) => void;
85
+ /** Join the video visit. The host keeps the session code. */
86
+ onJoinTelehealth?: (eventId: string) => void;
87
+ /** The host's WhatsApp bridge. Wins over `whatsappUrl` as the one
88
+ * button. Withhold it yourself where the user may not message the
89
+ * patient. */
90
+ onWhatsApp?: (eventId: string) => void;
91
+ /** A host-composed WhatsApp link, opened in a new tab. Withheld under
92
+ * `privacy`, because it carries the patient's number. */
93
+ whatsappUrl?: string;
94
+ /** Server-built link to the task page, opened in the same tab. */
95
+ createTaskUrl?: string;
96
+ /** The create-document kinds the user may use, and what each does. The
97
+ * menu keeps the platform's order. */
98
+ documents?: {
99
+ kinds: readonly AppointmentDocumentKind[];
100
+ onCreate: (kind: AppointmentDocumentKind, eventId: string) => void;
101
+ };
102
+ }
103
+ /** Curated agent handle: ids and enums only, never patient data. */
104
+ export interface AppointmentDetailsPanelHandle {
105
+ /** The occurrence on screen or being read, or the one a failed or
106
+ * refused read was for when the state says; null otherwise. */
107
+ getEventId: () => string | null;
108
+ getLoadStatus: () => AppointmentDetailsState['status'];
109
+ /** The status as last saved here or read; null for none, or no read. */
110
+ getAppointmentStatus: () => CalendarEventStatus | null;
111
+ /** The statuses `setAppointmentStatus` accepts now; [] when the status
112
+ * cannot be changed. */
113
+ getAllowedStatuses: () => CalendarEventStatus[];
114
+ /** The footer's `data-action` values, in footer order. */
115
+ getOfferedActions: () => string[];
116
+ isHistoryOpen: () => boolean;
117
+ isPrivacy: () => boolean;
118
+ /** Throws when History is not offered. */
119
+ openHistory: () => void;
120
+ closeHistory: () => void;
121
+ /** The footer control's own path: it shows the saving state and any
122
+ * refusal. Rejects when the change is not offered, not allowed, or a
123
+ * save is in flight, including one started in the same tick. */
124
+ setAppointmentStatus: (status: CalendarEventStatus) => Promise<void>;
125
+ /** Throws when no Retry is offered. */
126
+ retry: () => void;
127
+ }
128
+ /**
129
+ * The appointment details panel: a props-driven rail panel for one
130
+ * occurrence. Mount it as a `fill` tool in ControlRoomRail, which adds its
131
+ * favourite and close controls to the panel's own header.
132
+ */
133
+ export declare const AppointmentDetailsPanel: import("react").ForwardRefExoticComponent<AppointmentDetailsPanelProps & import("react").RefAttributes<HTMLDivElement>>;
134
+ //# sourceMappingURL=appointment-details-panel.d.ts.map
@@ -0,0 +1,7 @@
1
+ /** Hands focus to `target` only when focus fell to the page: a control that
2
+ * held it was removed. Focus the user put elsewhere stays there. */
3
+ export declare function rescueFocus(target: HTMLElement | null | undefined): void;
4
+ /** A heading, made focusable on demand: where focus goes when the control
5
+ * that held it leaves the panel or one of its cards. */
6
+ export declare function focusHeading(headingId: string): void;
7
+ //# sourceMappingURL=appointment-details-panel.focus.d.ts.map
@@ -0,0 +1,12 @@
1
+ import type { AppointmentHistoryEntry } from './appointment-details-panel.types';
2
+ export interface AppointmentHistoryTimelineProps {
3
+ /** In any order: the timeline sorts a copy, newest first. */
4
+ history: readonly AppointmentHistoryEntry[];
5
+ /** Locale for the stamps. Defaults to the active i18n language. */
6
+ locale?: string;
7
+ }
8
+ /** One row per history entry. A status change reads as two read-only
9
+ * status pills with an accessible "From → To" label; an empty history
10
+ * shows "No changes recorded". */
11
+ export declare function AppointmentHistoryTimeline({ history, locale, }: AppointmentHistoryTimelineProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=appointment-details-panel.history.d.ts.map
@@ -0,0 +1,41 @@
1
+ import type { CalendarEvent, CalendarEventStatus } from '../calendar';
2
+ import type { AppointmentAnamnesisAnswer } from './appointment-details-panel.types';
3
+ type StatusBadgeVariant = 'success' | 'info' | 'warning' | 'error' | 'accentSoft';
4
+ /** The Badge variant a status wears as a chip, beside the grid card's disc.
5
+ * The glyph and the label come from the shared workflow status options. */
6
+ export declare const APPOINTMENT_STATUS_BADGE_VARIANT: Record<CalendarEventStatus, StatusBadgeVariant>;
7
+ /** The card flags the chips spell out. */
8
+ export type IndicatorFlags = Pick<CalendarEvent, 'isBookedOnline' | 'hasUnassignedPatient' | 'hasHighlightedAnamnesis' | 'hasBillableAmount' | 'isTelehealth' | 'isRecurring'>;
9
+ /** Wherever a grid card carries the disc symbols, the peek and the details
10
+ * panel spell them out: a glyph and the full label in a semantic Badge,
11
+ * in the same tones as the discs. */
12
+ export declare function IndicatorChips({ event }: {
13
+ event: IndicatorFlags;
14
+ }): import("react/jsx-runtime").JSX.Element | null;
15
+ export interface AppointmentIdentityStripProps {
16
+ /** The name to show, never blank: the record's, else the appointment's
17
+ * title, else "Patient record not loaded". */
18
+ name: string;
19
+ avatarSrc?: string;
20
+ /** Someone is booked but their record did not load: says so once, beside
21
+ * the name, so it never reads as "no patient". */
22
+ unresolved?: boolean;
23
+ status?: CalendarEventStatus;
24
+ /** The flags the indicator chips spell out. */
25
+ flags: IndicatorFlags;
26
+ /** Completed years, printed beside the name. Absent = no age. */
27
+ age?: number;
28
+ /** Set = the name becomes a link-styled button to the patient folder. */
29
+ onOpenPatient?: () => void;
30
+ highlightedAnamnesisCount?: number;
31
+ expiredAnamnesisCount?: number;
32
+ /** The highlighted answers themselves, listed under the warning. */
33
+ anamnesisAnswers?: readonly AppointmentAnamnesisAnswer[];
34
+ /** Locale for the interview dates. Defaults to the active language. */
35
+ locale?: string;
36
+ }
37
+ /** Identity strip above the details or the editor: avatar, name, status
38
+ * badge and chips, the read-at-a-glance layer. */
39
+ export declare function AppointmentIdentityStrip({ name, avatarSrc, unresolved, status, flags, age, onOpenPatient, highlightedAnamnesisCount, expiredAnamnesisCount, anamnesisAnswers, locale, }: AppointmentIdentityStripProps): import("react/jsx-runtime").JSX.Element;
40
+ export {};
41
+ //# sourceMappingURL=appointment-details-panel.identity.d.ts.map
@@ -29,4 +29,4 @@ export declare function InfoHover({ id, eyebrow, heading, facts, children, }: {
29
29
  /** The chip; its visible text is the trigger's accessible name. */
30
30
  children: ReactNode;
31
31
  }): ReactNode;
32
- //# sourceMappingURL=calendar-info-hover.d.ts.map
32
+ //# sourceMappingURL=appointment-details-panel.info-hover.d.ts.map
@@ -0,0 +1,51 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { AppointmentDetailsChairLabel, AppointmentDetailsNotesPreview, AppointmentDetailsOperatorLabel, AppointmentDetailsRead } from './appointment-details-panel.types';
3
+ interface CardProps {
4
+ details: AppointmentDetailsRead;
5
+ locale: string;
6
+ /** ISO 4217 code for every amount. */
7
+ currency: string;
8
+ }
9
+ /**
10
+ * The kit's PatientSummaryCard: identity, the attention chips, the money
11
+ * chips and the contact fields. Every chip explains itself in a hover
12
+ * card; money reads worst first (owed, to invoice, paid online), labelled
13
+ * and without glyphs.
14
+ */
15
+ export declare function DetailsPatientCard({ details, locale, currency, now, mapsLink, }: CardProps & {
16
+ /** The practice clock the age is computed against. */
17
+ now: Date | string;
18
+ /** The user's map-link setting (platform `showPatientAddressMapLink`). */
19
+ mapsLink?: boolean;
20
+ }): import("react/jsx-runtime").JSX.Element | null;
21
+ /**
22
+ * When, how long, who and where, the series rule, and what the booking
23
+ * site recorded. Operator and chair names are the caller's labels, so an
24
+ * id without one prints no row. `description` is the caller's slot for the
25
+ * description, above the facts.
26
+ */
27
+ export declare function DetailsAppointmentCard({ details, locale, currency, operator, chair, description, privacy, }: CardProps & {
28
+ operator?: AppointmentDetailsOperatorLabel;
29
+ chair?: AppointmentDetailsChairLabel;
30
+ description?: ReactNode;
31
+ /** Privacy mode: what the booker typed is dropped; when they booked stays. */
32
+ privacy?: boolean;
33
+ }): import("react/jsx-runtime").JSX.Element;
34
+ /** The linked plan, by number when the host has one, and the kit's
35
+ * TreatmentReceipt: one line per treatment, a price only when the host
36
+ * sends one (the editor's price gate), and a total only when every line
37
+ * is priced. */
38
+ export declare function DetailsTreatmentsCard({ details, locale, currency, privacy, }: CardProps & {
39
+ /** Privacy mode: the plan's free-text name goes, as on the hover peek. */
40
+ privacy?: boolean;
41
+ }): import("react/jsx-runtime").JSX.Element | null;
42
+ /** The patient's latest notes, pinned first, as the host holds them. A
43
+ * click on a note opens the Notes tool at it; the header button opens the
44
+ * tool from the keyboard. */
45
+ export declare function DetailsNotesCard({ preview, onOpenNotes, locale, }: {
46
+ preview: AppointmentDetailsNotesPreview;
47
+ onOpenNotes?: (noteId?: string) => void;
48
+ locale?: string;
49
+ }): import("react/jsx-runtime").JSX.Element;
50
+ export {};
51
+ //# sourceMappingURL=appointment-details-panel.sections.d.ts.map