@alfadocs/ui-kit 1.47.1 → 1.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/dist/_chunks/{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-CjjxlA9K.js} +3 -3
  5. package/dist/_chunks/{agenda-tray-CBaJASb5.js → agenda-tray-BhZASyJm.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-Dx-oeOV2.js} +8 -8
  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-BgLpE6T5.js} +6 -6
  15. package/dist/_chunks/{appointment-peek-BsfCpiJs.js → appointment-peek-BDiCIBb-.js} +6 -6
  16. package/dist/_chunks/{appointment-timeline-Cs5f9viN.js → appointment-timeline-wQ-PdkFV.js} +6 -6
  17. package/dist/_chunks/{appointment-tray-CLrGGnKR.js → appointment-tray-D7Gt6m8x.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/{avatar-CkDeQOSI.js → avatar-BVvjKNTp.js} +2 -2
  22. package/dist/_chunks/{badge-BudgzTe_.js → badge-BAkd6_Pj.js} +24 -17
  23. package/dist/_chunks/{balance-badge-cell-YGrYdrvR.js → balance-badge-cell-klaxFNL_.js} +6 -6
  24. package/dist/_chunks/{bishop-score-Cu70iv9C.js → bishop-score-BMLRvXYF.js} +4 -4
  25. package/dist/_chunks/{bmi-calculator-C9N19aLX.js → bmi-calculator-DUhRyyrA.js} +3 -3
  26. package/dist/_chunks/{booking-C4MwImkS.js → booking-BF9pVa2n.js} +384 -388
  27. package/dist/_chunks/{breadcrumb-agut0PwN.js → breadcrumb-D3boYzD4.js} +50 -49
  28. package/dist/_chunks/{button-CaUe1uyd.js → button-18oBsI3n.js} +54 -50
  29. package/dist/_chunks/button-group-BSDqso_C.js +408 -0
  30. package/dist/_chunks/{calendar-OzSeTb4V.js → calendar-Bt44KMNO.js} +13 -18
  31. package/dist/_chunks/{calendar-event-card-B6N5h1dO.js → calendar-event-card-BUbKBPv_.js} +55 -73
  32. package/dist/_chunks/calendar-workspace-C_eXL1by.js +10464 -0
  33. package/dist/_chunks/{care-plan-card-BOv0NRle.js → care-plan-card-ciBaaguw.js} +4 -4
  34. package/dist/_chunks/{care-plan-entry-card-d-rZD4li.js → care-plan-entry-card-D7A0whiZ.js} +5 -5
  35. package/dist/_chunks/{care-plan-header-CEmBXn6-.js → care-plan-header-DKV1gLqv.js} +4 -4
  36. package/dist/_chunks/{carousel.agent-z1yLBpyC.js → carousel.agent-DqDGR2yH.js} +2 -2
  37. package/dist/_chunks/{chart-D8ucl8hH.js → chart-VjuXDXOZ.js} +3 -3
  38. package/dist/_chunks/{chat-input-Cj7ZYQr5.js → chat-input-BVho_SqP.js} +2 -2
  39. package/dist/_chunks/{chat-message-BMVxiUIX.js → chat-message-B4ihjNy3.js} +4 -4
  40. package/dist/_chunks/{smartphone-DaPcFw-X.js → circle-dashed-CUj6o2cA.js} +3 -14
  41. package/dist/_chunks/{city-input-DaQc-Hbj.js → city-input-BGYc4lRV.js} +2 -2
  42. package/dist/_chunks/{clinical-note-card-DdsGYMmI.js → clinical-note-card-B7s5BtEl.js} +89 -74
  43. package/dist/_chunks/{code-block-BB-viuTn.js → code-block-C_eNHWaa.js} +2 -2
  44. package/dist/_chunks/combobox-B_rLwmSv.js +578 -0
  45. package/dist/_chunks/{command-palette-DQl_SNEv.js → command-palette-DhgGo7GJ.js} +82 -80
  46. package/dist/_chunks/{connection-status-BmA9T0UO.js → connection-status-Cfux3TvH.js} +4 -4
  47. package/dist/_chunks/{contact-profile-card-C0WpwpVV.js → contact-profile-card-Dj4NgBL-.js} +3 -3
  48. package/dist/_chunks/control-room-rail-DAO0qfOI.js +379 -0
  49. package/dist/_chunks/{copy-field-B8XRVmQv.js → copy-field-Cm4y5Bff.js} +2 -2
  50. package/dist/_chunks/{country-select-CfDNFG5c.js → country-select-C5jZjO8O.js} +2 -2
  51. package/dist/_chunks/{cycle-calculator-BH2StWoT.js → cycle-calculator-B9lBRNiZ.js} +3 -3
  52. package/dist/_chunks/{dashboard-grid-BcXWL5S9.js → dashboard-grid-uX7x1ePj.js} +2 -2
  53. package/dist/_chunks/{data-table-DnKOmEVw.js → data-table-CrI3_bjH.js} +416 -415
  54. package/dist/_chunks/{data-table-tabs-B9SXA5VP.js → data-table-tabs-CzYYKp2_.js} +3 -3
  55. package/dist/_chunks/{dependent-selector-BHDP0nBB.js → dependent-selector-58hTg5rB.js} +3 -3
  56. package/dist/_chunks/{description-list-BsJ_6CQE.js → description-list-1A2DEbE6.js} +2 -2
  57. package/dist/_chunks/{document-preview-COV0BC6n.js → document-preview-Od2Hz4z5.js} +13 -12
  58. package/dist/_chunks/{document-scanner-B1abl-A4.js → document-scanner-p0aGlzCy.js} +3 -3
  59. package/dist/_chunks/{dropdown-menu-DU-Hrf33.js → dropdown-menu-C8PaW3lR.js} +110 -96
  60. package/dist/_chunks/{due-date-calculator-Buh_mVHq.js → due-date-calculator-BVqJaxzd.js} +4 -4
  61. package/dist/_chunks/{editable-currency-cell-renderer-OUkUv7U4.js → editable-currency-cell-renderer-D_G2Ap61.js} +4 -4
  62. package/dist/_chunks/{editable-description-ADMVFPUz.js → editable-description-B4NVdjvd.js} +3 -3
  63. package/dist/_chunks/{editor-overlay-DwNKaI22.js → editor-overlay-BDiBvQmL.js} +2 -2
  64. package/dist/_chunks/{empty-state-BUN_UAWf.js → empty-state-DTBZ1ENT.js} +2 -2
  65. package/dist/_chunks/{entity-card-I-Gio5wo.js → entity-card-D1Yrh9wf.js} +2 -1
  66. package/dist/_chunks/{entity-summary-DXejuQ8i.js → entity-summary-CFJfBdVP.js} +4 -4
  67. package/dist/_chunks/{error-boundary-BNT2iQ1w.js → error-boundary-BxTqEXqj.js} +2 -2
  68. package/dist/_chunks/euro-Dsuz4ixO.js +22 -0
  69. package/dist/_chunks/{face-scheme-mIhwrQXt.js → face-scheme-fku-RShg.js} +71 -71
  70. package/dist/_chunks/{fetal-weight-wx4ycKc6.js → fetal-weight-B69yOS9W.js} +3 -3
  71. package/dist/_chunks/{field-array-BW9KeeXG.js → field-array-lIXrFWS0.js} +3 -3
  72. package/dist/_chunks/file-BuG1VMAy.js +21 -0
  73. package/dist/_chunks/{file-Cwe9VC1A.js → file-image-cDgE-BTy.js} +2 -19
  74. package/dist/_chunks/{file-manager-DOcJGIx2.js → file-manager-C6QQPQV5.js} +15 -14
  75. package/dist/_chunks/{file-upload-BDpb08GM.js → file-upload-B242a_Y1.js} +53 -52
  76. package/dist/_chunks/{finished-terminal-DJd7Z_po.js → finished-terminal-B2oqXO0Y.js} +2 -2
  77. package/dist/_chunks/fiscal-code-input-BEF8eKIG.js +572 -0
  78. package/dist/_chunks/{freemium-paywall-BaW5ODc9.js → freemium-paywall-B6JITu4l.js} +2 -2
  79. package/dist/_chunks/{gestational-age-calculator-CwbecTul.js → gestational-age-calculator-DsGN6_HS.js} +5 -5
  80. package/dist/_chunks/handled-rejection-6gqCf5vt.js +13 -0
  81. package/dist/_chunks/{hcg-doubling-BcXriXJe.js → hcg-doubling-D2SH-e7t.js} +3 -3
  82. package/dist/_chunks/{header-3o9o9v_T.js → header-CCjp5GvE.js} +2 -2
  83. package/dist/_chunks/{header-settings-BEfx_-TF.js → header-settings-ZXa6hXuu.js} +5 -5
  84. package/dist/_chunks/{help-me-write-templates-DHIwa4xR.js → help-me-write-templates-DQtT1qs_.js} +5 -5
  85. package/dist/_chunks/history-CK2JaU2g.js +16 -0
  86. package/dist/_chunks/{hover-card-nUae8NPJ.js → hover-card-BplP5SzQ.js} +2 -2
  87. package/dist/_chunks/{icon-button-CehAeZoP.js → icon-button-CY7GU_Se.js} +2 -2
  88. package/dist/_chunks/icon-button-group-B_426QN_.js +431 -0
  89. package/dist/_chunks/{icon-picker-DMEelg9v.js → icon-picker-ZLebyB0U.js} +3 -3
  90. package/dist/_chunks/{image-cropper-BjPjT7wU.js → image-cropper-_HiNN79d.js} +2 -2
  91. package/dist/_chunks/{info-tip-iP2Pm9dh.js → info-tip-laBxZhKu.js} +2 -2
  92. package/dist/_chunks/{insert-result-DPnOBD85.js → insert-result-CSuPQyKL.js} +2 -2
  93. package/dist/_chunks/{key-value-pair-DaQI_LZB.js → key-value-pair-Dcdl3Gni.js} +2 -2
  94. package/dist/_chunks/{kit-extensions-DuoFF1R3.js → kit-extensions-BTJSnM_H.js} +6 -6
  95. package/dist/_chunks/link-cell-renderer-CkNbUsBM.js +867 -0
  96. package/dist/_chunks/{locale-picker-CH3kfrIG.js → locale-picker-DGkQmhV9.js} +170 -180
  97. package/dist/_chunks/{map-view-CHw4RL6w.js → map-view-Bb7ClKSF.js} +2 -2
  98. package/dist/_chunks/{marketplace-app-shell-PB89Dkk_.js → marketplace-app-shell-1uKqs4gD.js} +7 -7
  99. package/dist/_chunks/menu-row-BAr8bx1I.js +95 -0
  100. package/dist/_chunks/{message-card-V3sFPiQI.js → message-card-C2zsvyj0.js} +4 -4
  101. package/dist/_chunks/{message-tray-CrRIHfiQ.js → message-tray-CMlmxdH2.js} +4 -4
  102. package/dist/_chunks/{multi-select-CtPd7g4x.js → multi-select-N4Smh-gj.js} +114 -113
  103. package/dist/_chunks/{muscle-scheme-UVz_x4iE.js → muscle-scheme-Co0NIgbU.js} +3 -3
  104. package/dist/_chunks/{note-attachment-CwDir3kK.js → note-attachment-CGjNTrAC.js} +2 -2
  105. package/dist/_chunks/{note-timeline-Dn_XTo1s.js → note-timeline-CVnKL0p6.js} +2 -2
  106. package/dist/_chunks/notes-panel-xxpFt-I1.js +1111 -0
  107. package/dist/_chunks/{notification-card-B2gLO6dK.js → notification-card-DDzBCi8l.js} +3 -3
  108. package/dist/_chunks/{notification-tray-BOEKegVV.js → notification-tray-PnH2PBlZ.js} +4 -4
  109. package/dist/_chunks/{operator-hero-XIdwDmN2.js → operator-hero-DyrNLoRO.js} +4 -4
  110. package/dist/_chunks/{optical-prescription-LGgmtcST.js → optical-prescription-DUufWXfZ.js} +3 -3
  111. package/dist/_chunks/{pagination-EkD5SiCK.js → pagination-B0N2qGy_.js} +83 -82
  112. package/dist/_chunks/panel-subview-CzHutkA8.js +217 -0
  113. package/dist/_chunks/{patient-details-yrgkSeEY.js → patient-details-tTlvrJSU.js} +4 -4
  114. package/dist/_chunks/{patient-field-row-DCMkFGqI.js → patient-field-row-DElFbpKc.js} +12 -12
  115. package/dist/_chunks/{patient-search-5QcmQKJD.js → patient-search-DgXdGkhK.js} +4 -4
  116. package/dist/_chunks/{patient-summary-card-CmEFflGS.js → patient-summary-card-DQ__6DR-.js} +8 -8
  117. package/dist/_chunks/{payment-automation-upsell-BKmBXU4i.js → payment-automation-upsell-ugi4np1l.js} +3 -3
  118. package/dist/_chunks/{payment-request-card-Cer6XXCn.js → payment-request-card-DMJB57Tv.js} +5 -5
  119. package/dist/_chunks/{periodontal-chart-DJoZS_o7.js → periodontal-chart-DbGzKDj7.js} +2 -2
  120. package/dist/_chunks/{periodontal-chart-card-Nd1ZoYWb.js → periodontal-chart-card-DvHyP47v.js} +3 -3
  121. package/dist/_chunks/{periodontal-diagnosis-C7pfPOct.js → periodontal-diagnosis-B8WqI0eU.js} +2 -2
  122. package/dist/_chunks/{periodontal-risk-chart-B2tNFa15.js → periodontal-risk-chart-DsFRFFSz.js} +2 -2
  123. package/dist/_chunks/{phone-input-IWrGOCwm.js → phone-input-sQj-zi59.js} +85 -86
  124. package/dist/_chunks/{popover-DO-pssF3.js → popover-Dvb40vPH.js} +2 -2
  125. package/dist/_chunks/{practice-profile-hero-DxoLlQr5.js → practice-profile-hero-B-WcJYNH.js} +3 -3
  126. package/dist/_chunks/{practice-results-D11Zpt27.js → practice-results-EKRiqWtQ.js} +8 -8
  127. package/dist/_chunks/{pregnancy-dating-DcyV9ZRD.js → pregnancy-dating-lfjjZVZH.js} +5 -5
  128. package/dist/_chunks/{pregnancy-weight-gain-Bfq4Kwt5.js → pregnancy-weight-gain-WpNt-S0q.js} +3 -3
  129. package/dist/_chunks/{privacy-lock-CbFCAMM3.js → privacy-lock-D6gq0GDg.js} +3 -3
  130. package/dist/_chunks/privacy-mask-BC5lw2zB.js +81 -0
  131. package/dist/_chunks/{product-hub-panel-w40-_-1s.js → product-hub-panel-CKeSCSeE.js} +3 -3
  132. package/dist/_chunks/{province-select-BaUnkg4S.js → province-select-BiszMRRY.js} +2 -2
  133. package/dist/_chunks/{public-header.agent-D-EBVskf.js → public-header.agent-B9wDmUeB.js} +3 -3
  134. package/dist/_chunks/{radiograph-panel.agent-LrILY2lN.js → radiograph-panel.agent-TmyIvTOa.js} +6 -6
  135. package/dist/_chunks/{reviews-panel-2GVuxGeT.js → reviews-panel-BdwFp_0c.js} +4 -4
  136. package/dist/_chunks/{rich-text-editor-BwDV2XkZ.js → rich-text-editor-y6ML0KeV.js} +12 -11
  137. package/dist/_chunks/{search-bar-CCmViqaa.js → search-bar-6bHatpYJ.js} +69 -67
  138. package/dist/_chunks/{select-CLSUnKjF.js → select-upNAltly.js} +89 -88
  139. package/dist/_chunks/{session-countdown-BqppPrw6.js → session-countdown-ACJyTXH2.js} +2 -2
  140. package/dist/_chunks/{sheet-C8WIDFS8.js → sheet-D0Lh0KR2.js} +2 -2
  141. package/dist/_chunks/{sign-in-with-alfadocs-button-DWwBJtyE.js → sign-in-with-alfadocs-button-CDyJAIzW.js} +2 -2
  142. package/dist/_chunks/{signature-request-D_j2aQu1.js → signature-request-BUGeG8oD.js} +7 -7
  143. package/dist/_chunks/{signature-status-chip-D4NsrdeI.js → signature-status-chip-Dz6sS2oA.js} +2 -2
  144. package/dist/_chunks/{slot-grid-B3eOPkKD.js → slot-grid-4fWH3Euk.js} +4 -4
  145. package/dist/_chunks/smartphone-C0rFF2if.js +15 -0
  146. package/dist/_chunks/{streaming-text-CE1u_oGa.js → streaming-text-eRiizArc.js} +2 -2
  147. package/dist/_chunks/{tab-bar-Cw9UK18Z.js → tab-bar-BHFf6knq.js} +9 -9
  148. package/dist/_chunks/{tabs-BnRaLT0y.js → tabs-CFsuMQ5H.js} +82 -81
  149. package/dist/_chunks/{tag-Ci3xJPcH.js → tag-B65tLWvD.js} +24 -21
  150. package/dist/_chunks/{task-card-qTKD1fIT.js → task-card-jaOhnj_q.js} +73 -55
  151. package/dist/_chunks/task-editor-DlvTwAfv.js +1243 -0
  152. package/dist/_chunks/{task-tray-DIwjAIes.js → task-tray-HHyxi9ga.js} +4 -4
  153. package/dist/_chunks/tasks-panel-DbSjq_mz.js +1243 -0
  154. package/dist/_chunks/{theme-toggle-BP0XRGMM.js → theme-toggle-LUBxlNDm.js} +4 -4
  155. package/dist/_chunks/{timeline-61AihzYz.js → timeline-ChY7iZrs.js} +2 -2
  156. package/dist/_chunks/{toast-ZZfhA5u0.js → toast-CT8hjr9r.js} +2 -2
  157. package/dist/_chunks/{token-insert-menu-A9B5AJw6.js → token-insert-menu-klwbxVKh.js} +3 -3
  158. package/dist/_chunks/{tool-rail-CCFqDfAn.js → tool-rail-DEeX4PdN.js} +144 -137
  159. package/dist/_chunks/{tooth-scheme-DPAq0vQK.js → tooth-scheme-BkjhkI8g.js} +4 -4
  160. package/dist/_chunks/{treatment-receipt-DU0OewqH.js → treatment-receipt-C-gWZ6uv.js} +3 -3
  161. package/dist/_chunks/{unit-converter-C-LpGzrN.js → unit-converter-Dp_KDxE6.js} +3 -3
  162. package/dist/_chunks/use-appointment-details-read-5-hV-2xA.js +2045 -0
  163. package/dist/_chunks/use-list-reflow-C7O4Uqnl.js +133 -0
  164. package/dist/_chunks/use-priority-overflow-Cdmb5EiR.js +108 -0
  165. package/dist/_chunks/{variables-menu-vXUaSBj4.js → variables-menu-aJLKJ_cu.js} +127 -136
  166. package/dist/_chunks/{warning-stack-C0glSB7p.js → warning-stack-CEgYkI1z.js} +3 -3
  167. package/dist/_chunks/{widget-picker-B1sj6uyf.js → widget-picker-CilQvcNL.js} +2 -2
  168. package/dist/_chunks/{workflow-map-DhR_h5yw.js → workflow-map-qGkQTNvS.js} +30 -29
  169. package/dist/_chunks/{workflow-status-CuJAOuKL.js → workflow-status-ClHfz4Kr.js} +209 -167
  170. package/dist/agent-catalog.json +371 -26
  171. package/dist/agent-i18n/en.json +41 -9
  172. package/dist/components/_shared/appointment-format.d.ts +52 -0
  173. package/dist/{patterns/calendar/calendar-editor-fields.d.ts → components/_shared/compact-editor-fields.d.ts} +6 -5
  174. package/dist/components/_shared/handled-rejection.d.ts +2 -0
  175. package/dist/components/_shared/menu-row.d.ts +17 -0
  176. package/dist/components/_shared/patient-identity.d.ts +7 -0
  177. package/dist/components/_shared/patient-picker.d.ts +24 -0
  178. package/dist/components/_shared/privacy-mask.d.ts +29 -0
  179. package/dist/components/address-autocomplete/index.js +1 -1
  180. package/dist/components/address-fields/index.js +1 -1
  181. package/dist/components/agenda-card/index.js +1 -1
  182. package/dist/components/agenda-tray/index.js +1 -1
  183. package/dist/components/ai-credits-notice/index.js +1 -1
  184. package/dist/components/ai-permission-notice/index.js +1 -1
  185. package/dist/components/ai-prompt-input/index.js +1 -1
  186. package/dist/components/anamnesis-card/index.js +1 -1
  187. package/dist/components/anamnesis-summary-card/index.js +1 -1
  188. package/dist/components/appointment-card/index.js +2 -2
  189. package/dist/components/appointment-details-panel/appointment-details-panel.agent.d.ts +4 -0
  190. package/dist/components/appointment-details-panel/appointment-details-panel.d.ts +134 -0
  191. package/dist/components/appointment-details-panel/appointment-details-panel.focus.d.ts +7 -0
  192. package/dist/components/appointment-details-panel/appointment-details-panel.history.d.ts +12 -0
  193. package/dist/components/appointment-details-panel/appointment-details-panel.identity.d.ts +41 -0
  194. package/dist/{patterns/calendar/calendar-info-hover.d.ts → components/appointment-details-panel/appointment-details-panel.info-hover.d.ts} +1 -1
  195. package/dist/components/appointment-details-panel/appointment-details-panel.sections.d.ts +51 -0
  196. package/dist/components/appointment-details-panel/appointment-details-panel.types.d.ts +326 -0
  197. package/dist/components/appointment-details-panel/index.d.ts +8 -0
  198. package/dist/components/appointment-details-panel/index.js +8 -0
  199. package/dist/components/appointment-details-panel/use-appointment-details-read.d.ts +32 -0
  200. package/dist/components/appointment-peek/index.js +1 -1
  201. package/dist/components/appointment-timeline/index.js +1 -1
  202. package/dist/components/audio-recorder/index.js +1 -1
  203. package/dist/components/autocomplete/index.js +1 -1
  204. package/dist/components/avatar/index.js +1 -1
  205. package/dist/components/badge/index.js +1 -1
  206. package/dist/components/bishop-score/index.js +1 -1
  207. package/dist/components/bmi-calculator/index.js +1 -1
  208. package/dist/components/booking/cascade.d.ts +5 -0
  209. package/dist/components/booking/index.js +1 -1
  210. package/dist/components/breadcrumb/index.js +1 -1
  211. package/dist/components/button/button.d.ts +2 -1
  212. package/dist/components/button/index.js +2 -2
  213. package/dist/components/button-group/button-group.d.ts +19 -2
  214. package/dist/components/button-group/index.js +1 -1
  215. package/dist/components/calendar/calendar.d.ts +5 -1
  216. package/dist/components/calendar/index.js +1 -1
  217. package/dist/components/calendar-event-card/index.js +1 -1
  218. package/dist/components/care-plan-card/index.js +1 -1
  219. package/dist/components/care-plan-entry-card/index.js +1 -1
  220. package/dist/components/care-plan-header/index.js +1 -1
  221. package/dist/components/carousel/index.js +1 -1
  222. package/dist/components/chart/index.js +1 -1
  223. package/dist/components/chat-input/index.js +1 -1
  224. package/dist/components/chat-message/index.js +1 -1
  225. package/dist/components/city-input/index.js +1 -1
  226. package/dist/components/clinical-note-card/clinical-note-card.d.ts +13 -5
  227. package/dist/components/clinical-note-card/index.js +1 -1
  228. package/dist/components/combobox/combobox.d.ts +9 -4
  229. package/dist/components/combobox/index.js +1 -1
  230. package/dist/components/command-palette/index.js +1 -1
  231. package/dist/components/connection-status/index.js +1 -1
  232. package/dist/components/contact-profile-card/index.js +1 -1
  233. package/dist/components/control-room-rail/control-room-rail.d.ts +14 -3
  234. package/dist/components/control-room-rail/index.js +1 -1
  235. package/dist/components/copy-field/index.js +1 -1
  236. package/dist/components/country-select/index.js +1 -1
  237. package/dist/components/cycle-calculator/index.js +1 -1
  238. package/dist/components/dashboard-grid/index.js +1 -1
  239. package/dist/components/data-table/filters/number-filter.d.ts +26 -12
  240. package/dist/components/data-table/index.js +4 -4
  241. package/dist/components/data-table-tabs/index.js +1 -1
  242. package/dist/components/dependent-selector/index.js +1 -1
  243. package/dist/components/description-list/index.js +1 -1
  244. package/dist/components/document-preview/index.js +1 -1
  245. package/dist/components/document-scanner/index.js +1 -1
  246. package/dist/components/dropdown-menu/index.js +1 -1
  247. package/dist/components/due-date-calculator/index.js +2 -2
  248. package/dist/components/editable-description/index.js +1 -1
  249. package/dist/components/editor-overlay/index.js +1 -1
  250. package/dist/components/empty-state/index.js +1 -1
  251. package/dist/components/entity-summary/index.js +1 -1
  252. package/dist/components/error-boundary/index.js +1 -1
  253. package/dist/components/face-scheme/index.js +1 -1
  254. package/dist/components/fetal-weight/index.js +1 -1
  255. package/dist/components/field-array/index.js +1 -1
  256. package/dist/components/file-manager/index.js +1 -1
  257. package/dist/components/file-upload/index.js +1 -1
  258. package/dist/components/finished-terminal/index.js +1 -1
  259. package/dist/components/fiscal-code-input/fiscal-code-input.d.ts +7 -0
  260. package/dist/components/fiscal-code-input/index.d.ts +1 -1
  261. package/dist/components/fiscal-code-input/index.js +8 -7
  262. package/dist/components/fiscal-code-input/is-valid-codice-fiscale.d.ts +19 -4
  263. package/dist/components/freemium-paywall/index.js +1 -1
  264. package/dist/components/gestational-age-calculator/index.js +1 -1
  265. package/dist/components/hcg-doubling/index.js +1 -1
  266. package/dist/components/header/index.js +1 -1
  267. package/dist/components/header-settings/index.js +1 -1
  268. package/dist/components/hover-card/index.js +1 -1
  269. package/dist/components/icon-button/index.js +1 -1
  270. package/dist/components/icon-button-group/index.js +1 -1
  271. package/dist/components/icon-picker/index.js +1 -1
  272. package/dist/components/image-cropper/index.js +1 -1
  273. package/dist/components/index.d.ts +2 -0
  274. package/dist/components/info-tip/index.js +1 -1
  275. package/dist/components/key-value-pair/index.js +1 -1
  276. package/dist/components/locale-picker/index.js +1 -1
  277. package/dist/components/map-view/index.js +1 -1
  278. package/dist/components/message-card/index.js +1 -1
  279. package/dist/components/message-tray/index.js +1 -1
  280. package/dist/components/multi-select/index.js +1 -1
  281. package/dist/components/muscle-scheme/index.js +1 -1
  282. package/dist/components/note-timeline/index.js +1 -1
  283. package/dist/components/notes-panel/index.d.ts +1 -1
  284. package/dist/components/notes-panel/index.js +1 -1
  285. package/dist/components/notes-panel/notes-panel.d.ts +102 -26
  286. package/dist/components/notification-card/index.js +1 -1
  287. package/dist/components/notification-tray/index.js +1 -1
  288. package/dist/components/operator-hero/index.js +1 -1
  289. package/dist/components/optical-prescription/index.js +1 -1
  290. package/dist/components/pagination/index.js +1 -1
  291. package/dist/components/panel-subview/index.js +1 -1
  292. package/dist/components/patient-details/index.js +1 -1
  293. package/dist/components/patient-search/index.js +1 -1
  294. package/dist/components/patient-summary-card/index.js +1 -1
  295. package/dist/components/patient-table/index.js +1 -1
  296. package/dist/components/payment-card/index.js +1 -1
  297. package/dist/components/periodontal-chart/index.js +1 -1
  298. package/dist/components/periodontal-chart-card/index.js +1 -1
  299. package/dist/components/periodontal-diagnosis/index.js +1 -1
  300. package/dist/components/periodontal-risk-chart/index.js +1 -1
  301. package/dist/components/phone-input/index.js +1 -1
  302. package/dist/components/popover/index.js +1 -1
  303. package/dist/components/practice-profile-hero/index.js +1 -1
  304. package/dist/components/practice-results/index.js +1 -1
  305. package/dist/components/pregnancy-dating/index.js +1 -1
  306. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  307. package/dist/components/privacy-lock/index.js +1 -1
  308. package/dist/components/product-hub-tray/index.js +1 -1
  309. package/dist/components/province-select/index.js +1 -1
  310. package/dist/components/public-header/index.js +1 -1
  311. package/dist/components/radiograph-panel/index.js +1 -1
  312. package/dist/components/reviews-panel/index.js +1 -1
  313. package/dist/components/rich-text-editor/index.js +2 -2
  314. package/dist/components/search-bar/index.js +1 -1
  315. package/dist/components/select/index.js +1 -1
  316. package/dist/components/session-countdown/index.js +1 -1
  317. package/dist/components/sheet/index.js +1 -1
  318. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  319. package/dist/components/signature-field/signature-field.d.ts +1 -1
  320. package/dist/components/signature-status-chip/index.js +1 -1
  321. package/dist/components/skeleton-scheme/index.js +17 -17
  322. package/dist/components/slot-grid/index.js +1 -1
  323. package/dist/components/streaming-text/index.js +1 -1
  324. package/dist/components/tab-bar/index.js +1 -1
  325. package/dist/components/tabs/index.js +1 -1
  326. package/dist/components/tag/index.js +1 -1
  327. package/dist/components/task-card/index.js +1 -1
  328. package/dist/components/task-card/task-card.d.ts +7 -0
  329. package/dist/components/task-editor/index.d.ts +4 -0
  330. package/dist/components/task-editor/index.js +6 -0
  331. package/dist/components/task-editor/task-editor.agent.d.ts +4 -0
  332. package/dist/components/task-editor/task-editor.d.ts +240 -0
  333. package/dist/components/task-editor/use-task-editor-form.d.ts +101 -0
  334. package/dist/components/task-tray/index.js +1 -1
  335. package/dist/components/tasks-panel/index.d.ts +1 -1
  336. package/dist/components/tasks-panel/index.js +1 -1
  337. package/dist/components/tasks-panel/tasks-panel.d.ts +84 -12
  338. package/dist/components/theme-toggle/index.js +1 -1
  339. package/dist/components/timeline/index.js +1 -1
  340. package/dist/components/toast/index.js +1 -1
  341. package/dist/components/token-insert-menu/index.js +1 -1
  342. package/dist/components/tool-rail/index.js +1 -1
  343. package/dist/components/tooth-scheme/index.js +1 -1
  344. package/dist/components/treatment-receipt/index.js +1 -1
  345. package/dist/components/unit-converter/index.js +1 -1
  346. package/dist/components/variables-menu/index.js +1 -1
  347. package/dist/components/warning-stack/index.js +1 -1
  348. package/dist/components/widget-picker/index.js +1 -1
  349. package/dist/components/workflow/index.js +1 -1
  350. package/dist/components/workflow-status/appointment-workflow-status.d.ts +55 -0
  351. package/dist/components/workflow-status/index.d.ts +2 -0
  352. package/dist/components/workflow-status/index.js +7 -2
  353. package/dist/components/workflow-status/workflow-status.d.ts +35 -0
  354. package/dist/hooks/index.js +2 -2
  355. package/dist/hooks/use-exit-transition.d.ts +5 -0
  356. package/dist/hooks/use-priority-overflow.d.ts +11 -2
  357. package/dist/host-compat.css +7 -1
  358. package/dist/i18n/locales/ar.d.ts +48 -24
  359. package/dist/i18n/locales/ar.js +52 -28
  360. package/dist/i18n/locales/de.d.ts +48 -24
  361. package/dist/i18n/locales/de.js +52 -28
  362. package/dist/i18n/locales/el.d.ts +48 -24
  363. package/dist/i18n/locales/el.js +52 -28
  364. package/dist/i18n/locales/en.d.ts +34 -10
  365. package/dist/i18n/locales/en.js +39 -14
  366. package/dist/i18n/locales/es.d.ts +48 -24
  367. package/dist/i18n/locales/es.js +52 -28
  368. package/dist/i18n/locales/fr.d.ts +48 -24
  369. package/dist/i18n/locales/fr.js +52 -28
  370. package/dist/i18n/locales/hi.d.ts +48 -24
  371. package/dist/i18n/locales/hi.js +52 -28
  372. package/dist/i18n/locales/it.d.ts +34 -10
  373. package/dist/i18n/locales/it.js +39 -14
  374. package/dist/i18n/locales/ja.d.ts +48 -24
  375. package/dist/i18n/locales/ja.js +52 -28
  376. package/dist/i18n/locales/nl.d.ts +48 -24
  377. package/dist/i18n/locales/nl.js +52 -28
  378. package/dist/i18n/locales/pl.d.ts +48 -24
  379. package/dist/i18n/locales/pl.js +52 -28
  380. package/dist/i18n/locales/pt.d.ts +48 -24
  381. package/dist/i18n/locales/pt.js +52 -28
  382. package/dist/i18n/locales/ro.d.ts +48 -24
  383. package/dist/i18n/locales/ro.js +52 -28
  384. package/dist/i18n/locales/ru.d.ts +48 -24
  385. package/dist/i18n/locales/ru.js +52 -28
  386. package/dist/i18n/locales/sq.d.ts +48 -24
  387. package/dist/i18n/locales/sq.js +52 -28
  388. package/dist/i18n/locales/sv.d.ts +48 -24
  389. package/dist/i18n/locales/sv.js +52 -28
  390. package/dist/i18n/locales/tr.d.ts +48 -24
  391. package/dist/i18n/locales/tr.js +52 -28
  392. package/dist/i18n/locales/zh.d.ts +48 -24
  393. package/dist/i18n/locales/zh.js +52 -28
  394. package/dist/i18n/registerUiBundle.d.ts +5 -9
  395. package/dist/index.js +744 -730
  396. package/dist/locales/ar.json +52 -28
  397. package/dist/locales/de.json +52 -28
  398. package/dist/locales/el.json +52 -28
  399. package/dist/locales/en.json +38 -14
  400. package/dist/locales/es.json +52 -28
  401. package/dist/locales/fr.json +52 -28
  402. package/dist/locales/hi.json +52 -28
  403. package/dist/locales/it.json +38 -14
  404. package/dist/locales/ja.json +52 -28
  405. package/dist/locales/nl.json +52 -28
  406. package/dist/locales/pl.json +52 -28
  407. package/dist/locales/pt.json +52 -28
  408. package/dist/locales/ro.json +52 -28
  409. package/dist/locales/ru.json +52 -28
  410. package/dist/locales/sq.json +52 -28
  411. package/dist/locales/sv.json +52 -28
  412. package/dist/locales/tr.json +52 -28
  413. package/dist/locales/zh.json +52 -28
  414. package/dist/patterns/alia-assistant/index.js +1 -1
  415. package/dist/patterns/anamnesis/index.js +1 -1
  416. package/dist/patterns/calendar/calendar-appointment-details.d.ts +25 -95
  417. package/dist/patterns/calendar/calendar-patient-picker.d.ts +4 -3
  418. package/dist/patterns/calendar/calendar-privacy.d.ts +1 -22
  419. package/dist/patterns/calendar/calendar-sticky-offset.d.ts +20 -13
  420. package/dist/patterns/calendar/calendar-task-editor.d.ts +9 -13
  421. package/dist/patterns/calendar/calendar-workspace.d.ts +89 -8
  422. package/dist/patterns/calendar/calendar-workspace.model.d.ts +17 -12
  423. package/dist/patterns/calendar/calendar.journey.d.ts +40 -6
  424. package/dist/patterns/calendar/calendar.model.d.ts +10 -17
  425. package/dist/patterns/calendar/calendar.sheets.d.ts +18 -16
  426. package/dist/patterns/calendar/calendar.surface.d.ts +4 -1
  427. package/dist/patterns/calendar/calendar.types.d.ts +24 -100
  428. package/dist/patterns/calendar/index.d.ts +4 -3
  429. package/dist/patterns/calendar/index.js +1 -1
  430. package/dist/patterns/help-me-write-templates/index.js +1 -1
  431. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  432. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  433. package/dist/patterns/signature-request/index.js +1 -1
  434. package/dist/tokens.css +1 -1
  435. package/package.json +33 -16
  436. package/dist/_chunks/button-group-CA1tmu39.js +0 -325
  437. package/dist/_chunks/calendar-workspace-BmscntRR.js +0 -12528
  438. package/dist/_chunks/combobox-DnSdYssy.js +0 -522
  439. package/dist/_chunks/control-room-rail-CdBOXIqX.js +0 -366
  440. package/dist/_chunks/fiscal-code-input-ODQRd_Sw.js +0 -553
  441. package/dist/_chunks/icon-button-group-DZKC6KGf.js +0 -428
  442. package/dist/_chunks/link-cell-renderer-s3oHzOwi.js +0 -778
  443. package/dist/_chunks/notes-panel-CHbDDMx8.js +0 -683
  444. package/dist/_chunks/panel-subview-CYnuX-KR.js +0 -171
  445. package/dist/_chunks/tasks-panel-DncuBPIZ.js +0 -844
  446. package/dist/_chunks/use-list-reflow-Cw43nxw5.js +0 -100
  447. package/dist/_chunks/use-priority-overflow-c9SjxZkZ.js +0 -101
  448. package/dist/patterns/calendar/calendar-appointment-details.sections.d.ts +0 -37
@@ -6,9 +6,11 @@
6
6
  * Control Room rail docked inline-end — up to six tools, in strip
7
7
  * order: the upcoming Appointments panel (the rail's resting state and
8
8
  * its default), ONE appointment editor / details tool, the waiting list,
9
- * patient notes when in context, online bookings and the free-slot finder. Nothing else — no Inbox,
10
- * no Alia, no patient tabs, no care plan, no tasks. The panels are the
11
- * extracted modules from `calendar.sheets.tsx`; `calendar.host.ts`'s
9
+ * patient notes when in context, online bookings and the free-slot
10
+ * finder. The kit adds nothing else: no Inbox, no Alia, no patient tabs,
11
+ * no care plan, no tasks. A host may append its own tools after these
12
+ * (`extraTools`), which is how a host mounts TasksPanel. The panels are
13
+ * the extracted modules from `calendar.sheets.tsx`; `calendar.host.ts`'s
12
14
  * open / close seam maps onto the rail's dock, with `close()` returning
13
15
  * to the Appointments panel so no path leaves an empty rail.
14
16
  *
@@ -36,7 +38,7 @@
36
38
  * and care-plan cleanup and the Create-bill confirm.
37
39
  */
38
40
  import type { CalendarView } from '../../components/calendar';
39
- import { type ControlRoomFavoriteChange } from '../../components/control-room-rail';
41
+ import { type ControlRoomFavoriteChange, type ControlRoomTool } from '../../components/control-room-rail';
40
42
  import { type CalendarAppointmentEditorLoader } from './calendar-editor-hydration';
41
43
  import { type CalendarAppointmentDetailsLoader } from './calendar-appointment-details';
42
44
  import { type CalendarData } from './calendar.data';
@@ -64,13 +66,47 @@ export type CalendarToolOpenSource = 'rail' | 'appointment_panel' | 'selection'
64
66
  /** Where the appointment behind a details panel was selected. `host` is
65
67
  * a selection the journey made itself. */
66
68
  export type CalendarDetailsOpenSource = 'calendar' | 'appointments_panel' | 'bookings_panel' | 'waiting_list' | 'deep_link' | 'host';
69
+ /**
70
+ * A host tool on the workspace rail (`CalendarWorkspaceProps.extraTools`):
71
+ * a Control Room tool, plus what privacy mode does to it. `scope` and
72
+ * `reorderable` are ignored: the workspace rail orders by favourites.
73
+ */
74
+ export interface CalendarWorkspaceExtraTool extends ControlRoomTool {
75
+ /**
76
+ * What privacy mode does to this tool's panel. The kit cannot see what
77
+ * the panel shows, so the default is the safe one.
78
+ *
79
+ * - `'withhold'` (default): while privacy mode is on, the panel and its
80
+ * `header` are replaced by the privacy notice, titled with `label` and
81
+ * offering "Turn off privacy mode". The host's panel is unmounted until
82
+ * privacy is turned off. The strip button and `badgeCount` stay.
83
+ * - `'host'`: the panel stays mounted and the host masks it, reading the
84
+ * mode from `onPrivacyChange` (a task list sets `linkedLabelMasked`;
85
+ * mind free-text titles, which the grid hides under privacy).
86
+ * Also the right value for a panel that shows no patient data at all.
87
+ * The kit cannot check either claim.
88
+ */
89
+ privacy?: 'withhold' | 'host';
90
+ /**
91
+ * Keeps this tool docked while it is open and `hold` is true: a click on
92
+ * the grid (a card, a card with no patient, an empty slot) then changes
93
+ * the selection but docks nothing over the panel, neither the details nor
94
+ * the editor. Set it while the panel holds unsaved input, such as an open
95
+ * task editor. Explicit requests still open another tool: the strip, the
96
+ * toolbar, a free band's Book, a slot picked in an armed placement, and
97
+ * the host. Once released, a click on the card docks its details.
98
+ */
99
+ hold?: boolean;
100
+ }
67
101
  /**
68
102
  * Usage callbacks for the host's analytics. The kit raises no event of
69
103
  * its own and passes identifiers only, never patient data: the host owns
70
104
  * the calls, the property allow-list and any once-per guard.
71
105
  */
72
106
  export interface CalendarWorkspaceAnalytics {
73
- /** A tool panel opened. Not raised again while it stays open. */
107
+ /** A built-in tool panel opened. Not raised again while it stays open,
108
+ * and never for an id no tool carries. Host tools report through
109
+ * `onExtraToolOpen` instead. */
74
110
  onToolOpen?: (event: {
75
111
  toolId: CalendarWorkspaceToolId;
76
112
  source: CalendarToolOpenSource;
@@ -90,12 +126,23 @@ export interface CalendarWorkspaceAnalytics {
90
126
  source: CalendarDetailsOpenSource;
91
127
  view: CalendarView;
92
128
  }) => void;
93
- /** A rail preference was saved on this device. `resize` is raised only
94
- * with `persistPanelWidthKey`, since without it nothing is saved. */
129
+ /** A rail preference was saved on this device. `toolId` may be a host
130
+ * tool's id. `resize` is raised only with `persistPanelWidthKey`, since
131
+ * without it nothing is saved. */
95
132
  onToolPreferencesChange?: (event: {
96
133
  action: ControlRoomFavoriteChange['action'] | 'resize';
97
134
  toolId: string;
98
135
  }) => void;
136
+ /**
137
+ * A host tool's panel opened (`extraTools`). Not raised again while it
138
+ * stays open. `rail` is a pick on the strip; `system` is any other open
139
+ * (the host's own `useControlRoomActions().openTool`, an agent).
140
+ */
141
+ onExtraToolOpen?: (event: {
142
+ toolId: string;
143
+ source: Extract<CalendarToolOpenSource, 'rail' | 'system'>;
144
+ view: CalendarView;
145
+ }) => void;
99
146
  }
100
147
  export interface CalendarWorkspaceProps {
101
148
  /** Optional canonical read for every existing-appointment editor route.
@@ -105,7 +152,9 @@ export interface CalendarWorkspaceProps {
105
152
  loadAppointmentEditor?: CalendarAppointmentEditorLoader;
106
153
  /** The host's read for the read-only appointment details panel (P-C3).
107
154
  * With it a selection docks that panel, Edit opens the editor and a save
108
- * re-reads the details; without it details stays the editor form. */
155
+ * re-reads the details; without it details stays the editor form. Keep
156
+ * it stable: passing a new function re-reads the open details panel,
157
+ * which is how a host shows a change made outside the panel. */
109
158
  loadAppointmentDetails?: CalendarAppointmentDetailsLoader;
110
159
  /** The domain state and its handlers — the host implements them. */
111
160
  journey: CalendarJourney;
@@ -219,6 +268,38 @@ export interface CalendarWorkspaceProps {
219
268
  /** Usage callbacks for the host's analytics. Omit it and nothing is
220
269
  * reported. */
221
270
  analytics?: CalendarWorkspaceAnalytics;
271
+ /**
272
+ * Host tools, appended to the rail after the built-in ones, in this
273
+ * order. A tool is offered by passing it and withheld by leaving it out:
274
+ * `availableTools` narrows the built-in tools only.
275
+ *
276
+ * Ids: every `WORKSPACE_TOOL` id is reserved, even for a tool
277
+ * `availableTools` withholds, and a tool using one is left off the rail.
278
+ * A repeated id keeps its first tool. Nothing throws. The kit's own
279
+ * Storybook and tests warn; the published build drops the tool silently.
280
+ *
281
+ * The panel renders inside the workspace, so the host's own providers
282
+ * reach it. It unmounts when another tool opens, so keep state that must
283
+ * survive in the host. Render a kit `PanelHeader` first and the rail puts
284
+ * its favourite and close controls in it. Opening one reports through
285
+ * `analytics.onExtraToolOpen`. The workspace passes no permission to host
286
+ * tools. Only the strip, an agent and code inside an open panel
287
+ * (`useControlRoomActions`) open a tool: code outside the workspace
288
+ * cannot, since the workspace owns its rail provider. If the host stops
289
+ * passing the open tool, the rail docks the Appointments panel. Memoise
290
+ * the array: a new one re-registers the rail.
291
+ */
292
+ extraTools?: readonly CalendarWorkspaceExtraTool[];
293
+ /**
294
+ * Raised when privacy mode turns on or off, from the toolbar toggle or a
295
+ * withheld panel's "Turn off privacy mode". Observe-only: the workspace
296
+ * owns the flag, it starts off on every mount (not reported) and is
297
+ * never persisted. Unmounting with privacy on reports `false`, so the
298
+ * host's copy never outlives the workspace. Raised in the same handler,
299
+ * so a host that sets state here renders its masked tool in the same
300
+ * commit as the masked grid.
301
+ */
302
+ onPrivacyChange?: (privacy: boolean) => void;
222
303
  }
223
304
  /**
224
305
  * The cog's settings as the workspace opens with them: the remembered
@@ -35,6 +35,22 @@ export declare const ALL_WORKSPACE_TOOLS: readonly CalendarWorkspaceToolId[];
35
35
  * kit it mounts must not crash the agenda.
36
36
  */
37
37
  export declare function resolveAvailableTools(requested: readonly string[]): ReadonlySet<CalendarWorkspaceToolId>;
38
+ /** Whether `id` is one of the built-in rail tools. */
39
+ export declare function isWorkspaceToolId(id: string): id is CalendarWorkspaceToolId;
40
+ /** Why a host tool was left off the rail. */
41
+ export type ExtraToolRejection = 'reserved' | 'duplicate' | 'empty';
42
+ /** The host tools the rail can carry, in the host's order. Built-in ids are
43
+ * reserved even when withheld, a repeated id keeps its first tool, an empty
44
+ * id is dropped, and nothing throws: a host mistake must not sink the page. */
45
+ export declare function resolveExtraTools<T extends {
46
+ readonly id: string;
47
+ }>(requested: readonly T[]): {
48
+ tools: T[];
49
+ rejected: {
50
+ id: string;
51
+ reason: ExtraToolRejection;
52
+ }[];
53
+ };
38
54
  /** The platform's four ranges; "Working week" became the Show-weekends
39
55
  * item, so it is no longer a view of its own. */
40
56
  export type WorkspaceViewId = 'day' | 'threeDays' | 'week' | 'month';
@@ -207,18 +223,7 @@ export declare function signChannelStates(ref: PatientRef): {
207
223
  * email, else nothing. "Can take one" is `ready` alone — a channel we
208
224
  * know nothing about is not a channel to send on by default. */
209
225
  export declare function defaultSignMode(ref: PatientRef): RequiredDocsSignMode;
210
- /** The patient's address as one line — the map link's search text, and
211
- * the link's own label. Empty when the host supplied no address at all,
212
- * which is the caller's signal to leave the map row out rather than
213
- * offer a search for nothing. */
214
- export declare function patientAddressLine(patient: CalendarPatient): string;
215
- /** The map link's own LABEL — street and city, the pair the popover has
216
- * always printed. The postcode belongs in the search query, not in the
217
- * visible text, so widening `patientAddressLine` for the URL must not
218
- * drag the label along with it. */
219
- export declare function patientAddressLabel(patient: CalendarPatient): string;
220
- /** Google Maps search for the patient's address — the popover's map link. */
221
- export declare function patientMapsUrl(patient: CalendarPatient): string;
226
+ export { patientAddressLabel, patientAddressLine, patientMapsUrl, } from '../../components/_shared/appointment-format';
222
227
  /** A CREATE mode armed by a deep link (`createParameters`) or the
223
228
  * Backlog's Schedule: the next empty-slot click opens the editor with
224
229
  * this context already filled in (platform `_switchMode('create')`). */
@@ -12,7 +12,7 @@
12
12
  */
13
13
  import type { CalendarEventStatus } from '../../components/calendar';
14
14
  import type { Dispatch, SetStateAction } from 'react';
15
- import type { NotesPanelNote, NotesPanelProps, NotesPanelSubmission, AiConsentGate } from '../../components/notes-panel';
15
+ import type { NotesPanelNote, NotesPanelProps, NotesPanelSubmission, NotesPanelWriteFailure, AiConsentGate } from '../../components/notes-panel';
16
16
  import type { PatientNotesSeam } from './calendar.sheets';
17
17
  import type { AvailabilityContext, BacklogFilter, BacklogItem, CalendarFreeSlot, CalendarRow, DisplaySettings, DraftSlot, EditorDraft, EditorPrefill, FindSlotsSeed, HistoryInput, RailFocus, SlotPatch, WaitingEntryDraft } from './calendar.model';
18
18
  import type { DeleteOptions, EditorDraftExtras, RecurringScope } from './calendar-workspace.model';
@@ -171,16 +171,50 @@ export interface CalendarJourney {
171
171
  * stored note — its id, its timestamp and its AUTHOR, who is the
172
172
  * signed-in operator the host knows and the kit does not. The panel
173
173
  * hands over only what was typed, so no name the kit invented can
174
- * ever be attributed to a clinical note.
174
+ * ever be attributed to a clinical note. Reject with a translated
175
+ * Error: the draft stays in the composer with the message while the
176
+ * Notes tool is open, and `handleNoteWriteError` hears a refusal that
177
+ * lands after the reader left it.
175
178
  */
176
179
  handleAddNote: (patientId: string, submission: NotesPanelSubmission) => void | Promise<void>;
177
180
  /** Replace a note's body: HTML for an HTML note, else plain text. A
178
- * rejected write keeps the draft or dialog open with its message. */
181
+ * rejected write keeps the draft in the composer with its message, as
182
+ * `handleAddNote` does. */
179
183
  handleEditNote: (patientId: string, noteId: string, content: string) => void | Promise<void>;
184
+ /**
185
+ * Delete a note. Called on the click that confirms it. Resolve once the
186
+ * delete has landed. A rejection brings the row back and the notes
187
+ * panel shows the error's message, so reject with a translated Error
188
+ * and do not also toast it.
189
+ *
190
+ * A clinical note is taken as kept for the record: its row waits in
191
+ * place, paused, until `notesByPatient` marks it `deleted`. Any other
192
+ * note fades and stays hidden until `notesByPatient` drops it. Set
193
+ * `keptOnDelete` on a note to say otherwise. The panel holds this only
194
+ * while the Notes tool stays open for that patient: reopened, it shows
195
+ * the note as `notesByPatient` does, with a live delete. So return the
196
+ * same promise for a second delete of a note already being deleted.
197
+ */
180
198
  handleDeleteNote: (patientId: string, noteId: string) => void | Promise<void>;
181
- handleToggleNotePin: (patientId: string, noteId: string) => void | Promise<void>;
182
- /** Flag or unflag a note. Omit it and the flag control is not offered. */
183
- handleToggleNoteFlag?: (patientId: string, noteId: string) => void | Promise<void>;
199
+ /**
200
+ * Pin or unpin a note. `next` is the value the note moves to, so set it
201
+ * rather than flipping what you hold. A returned promise holds the new
202
+ * value until the notes agree; a rejection rolls it back and the notes
203
+ * panel shows the message. Do not also toast it.
204
+ */
205
+ handleToggleNotePin: (patientId: string, noteId: string, next: boolean) => void | Promise<void>;
206
+ /** As `handleToggleNotePin`, for the flag. Omit it and the flag control
207
+ * is not offered. */
208
+ handleToggleNoteFlag?: (patientId: string, noteId: string, next: boolean) => void | Promise<void>;
209
+ /**
210
+ * Hears every refused note write: a save, a delete, a pin or a flag.
211
+ * `failure.shown` says whether the notes panel told the reader. Toast
212
+ * only the ones with `shown: false`, for example a refusal that arrives
213
+ * after the reader switched tool or patient; a save among them has lost
214
+ * its draft. Wire it in the same change that stops you toasting every
215
+ * refusal yourself: without it, those late refusals reach no one.
216
+ */
217
+ handleNoteWriteError?: (patientId: string, failure: NotesPanelWriteFailure) => void;
184
218
  /** Read a patient's notes: the latest few, or every note. */
185
219
  handleLoadNotes?: (patientId: string, scope: 'preview' | 'all') => void;
186
220
  /**
@@ -9,9 +9,11 @@
9
9
  * — the host supplies it, the model never reaches for a module global.
10
10
  */
11
11
  import type { TFunction } from 'i18next';
12
- import { ThumbsUp } from 'lucide-react';
13
12
  import { type CalendarEvent, type CalendarEventStatus, type CalendarResource } from '../../components/calendar';
14
13
  import type { WorkflowStatusTone } from '../../components/workflow-status';
14
+ import { APPOINTMENT_STATE_WORKFLOW } from '../../components/_shared/entity-card';
15
+ import { APPOINTMENT_STATUS_BADGE_VARIANT } from '../../components/appointment-details-panel/appointment-details-panel.identity';
16
+ import type { AppointmentRecurrenceFrequency } from '../../components/appointment-details-panel';
15
17
  import type { CalendarData } from './calendar.data';
16
18
  import { type CareDescriptionMode, type ColorAssociation, type CalendarBaseEvent, type CalendarBookingContact, type CalendarCareEntry, type CalendarCareLink, type CalendarClosure, type CalendarDayHours, type CalendarHistoryEntry, type CalendarPatient, type CalendarPhoneNumber, type CalendarSignDocument, type CalendarWaitingEntry, type CatalogueState, type PatientRef } from './calendar.types';
17
19
  export declare const STATUS_UI_KEY: Record<CalendarEventStatus, string>;
@@ -131,8 +133,7 @@ export declare const DAY_WINDOWS: Record<DisplaySettings['window'], {
131
133
  min: string;
132
134
  max: string;
133
135
  }>;
134
- export declare function formatTimeRange(locale: string, start: Date | string, end?: Date | string): string;
135
- export declare function formatDay(locale: string, value: Date | string): string;
136
+ export { DETAIL_STAMP_FORMAT, formatDay, formatTimeRange, parseEventDate, RECURRENCE_LABEL_KEY, sortHistoryNewestFirst, } from '../../components/_shared/appointment-format';
136
137
  /** Completed years between a birth date and the practice's fixed "now" —
137
138
  * the platform popover's "(NN anni)" beside the patient's name. Pinned
138
139
  * to `data.nowIso` so the figure never drifts under a test. */
@@ -197,13 +198,11 @@ export interface EditorPrefill {
197
198
  isTask?: boolean;
198
199
  }
199
200
  /** Platform's six `recurrence_frequency` values, in its dropdown order. */
200
- export type RecurrenceFrequency = 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'semiannual' | 'yearly';
201
+ export type RecurrenceFrequency = AppointmentRecurrenceFrequency;
201
202
  /** Repetition cap — platform asserts 2..100 on the entity. */
202
203
  export declare const RECURRENCE_MAX_COUNT = 100;
203
204
  /** Dropdown order, matching the platform modal's own. */
204
205
  export declare const RECURRENCE_FREQUENCIES: readonly RecurrenceFrequency[];
205
- /** Literal map (not a template) so key extractors see every key. */
206
- export declare const RECURRENCE_LABEL_KEY: Record<RecurrenceFrequency, string>;
207
206
  export interface EditorRecurrence {
208
207
  frequency: RecurrenceFrequency;
209
208
  /** Count XOR until — the exclusivity `DoctorAppointment` enforces. */
@@ -355,12 +354,8 @@ export declare function deriveCareLinkDefaults(link: CalendarCareLink | undefine
355
354
  export type DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;
356
355
  /** A ledger line before the journey stamps id, time and actor onto it. */
357
356
  export type HistoryInput = DistributiveOmit<CalendarHistoryEntry, 'id' | 'atIso' | 'actor'>;
358
- /** Absolute stamp for booked-at and ledger lines — day and time. */
359
- export declare const DETAIL_STAMP_FORMAT: Intl.DateTimeFormatOptions;
360
357
  /** Live stamps advance from the practice clock, never the real one. */
361
358
  export declare function historyStampIso(seq: number, data: CalendarData): string;
362
- /** Timeline 'newest-first' is a plain column — DOM order must already be. */
363
- export declare function sortHistoryNewestFirst(entries: readonly CalendarHistoryEntry[]): CalendarHistoryEntry[];
364
359
  /** Documents still awaiting a required party (the chip's own rule). */
365
360
  export declare function signingSummary(docs: readonly CalendarSignDocument[]): {
366
361
  toSign: number;
@@ -399,11 +394,12 @@ export declare function priceListState(data: CalendarData): CatalogueState;
399
394
  * list the practice does not have, and `priceLists[0].id` on an empty
400
395
  * catalogue threw and took the whole calendar down with it. */
401
396
  export declare function priceListIdFor(patientId: string | undefined, data: CalendarData): string | undefined;
402
- export declare const STATUS_CHIP: Record<CalendarEventStatus, {
403
- variant: 'success' | 'info' | 'warning' | 'error' | 'accentSoft';
397
+ type StatusChip = {
398
+ variant: (typeof APPOINTMENT_STATUS_BADGE_VARIANT)[CalendarEventStatus];
404
399
  tone: WorkflowStatusTone;
405
- Icon: typeof ThumbsUp;
406
- }>;
400
+ Icon: (typeof APPOINTMENT_STATE_WORKFLOW)[CalendarEventStatus]['Icon'];
401
+ };
402
+ export declare const STATUS_CHIP: Record<CalendarEventStatus, StatusChip>;
407
403
  export type BacklogType = 'booking' | 'waiting' | 'unconfirmed' | 'noOperator' | 'signature';
408
404
  /** The filter strip's segments — every type, or all of them grouped. */
409
405
  export type BacklogFilter = BacklogType | 'all';
@@ -668,9 +664,6 @@ export interface PrintSheetInput {
668
664
  visibleOperatorIds: string[];
669
665
  privacy: boolean;
670
666
  }
671
- /** A date-only start (all-day rows) is already a local day; anything
672
- * else parses as the wall clock the fixtures and the editor write. */
673
- export declare function parseEventDate(value: string | Date): Date;
674
667
  /** The title privacy mode shows. TOTAL in the masked branch: a host
675
668
  * that supplies an EMPTY `privacyModeTitle` gets the bullets, never a
676
669
  * blank and never a fallback that would leak what we do or do not hold
@@ -22,9 +22,11 @@
22
22
  * the demos or the shared story shell.
23
23
  */
24
24
  import { type ReactNode } from 'react';
25
+ import { AppointmentHistoryTimeline } from '../../components/appointment-details-panel/appointment-details-panel.history';
26
+ import { IndicatorChips } from '../../components/appointment-details-panel/appointment-details-panel.identity';
25
27
  import type { CalendarEditorCapabilities } from './calendar.model';
26
28
  import type { CalendarEditorSeries } from './calendar-editor-hydration';
27
- import { type CalendarEvent, type CalendarResource } from '../../components/calendar';
29
+ import { type CalendarResource } from '../../components/calendar';
28
30
  import { type NotesPanelNote, type NotesPanelProps, type NotesPanelSubmission, type AiConsentGate } from '../../components/notes-panel';
29
31
  import { type ColorAssociation, type CalendarCarePlan, type CalendarAnamnesisAnswer, type CalendarOperatorGroup, type CalendarPatient, type CalendarWaitingEntry, type CalendarHistoryEntry, type CalendarSignChannel, type PatientRef } from './calendar.types';
30
32
  import { type CalendarData } from './calendar.data';
@@ -71,10 +73,19 @@ export interface PatientNotesSeam {
71
73
  onAddNote: (submission: NotesPanelSubmission) => void | Promise<void>;
72
74
  /** Replace a note's body: HTML for an HTML note, else plain text. */
73
75
  onEditNote: (noteId: string, content: string) => void | Promise<void>;
76
+ /** Called on the click that confirms it. Resolve once the delete has
77
+ * landed; a rejection restores the row and the panel shows the message.
78
+ * A clinical note is taken as kept, marked deleted, unless the note
79
+ * says `keptOnDelete: false`: its row waits in place. */
74
80
  onDeleteNote: (noteId: string) => void | Promise<void>;
75
- onTogglePin: (noteId: string) => void | Promise<void>;
76
- /** Flag or unflag a note. Omitted → no flag control. */
77
- onToggleFlag?: (noteId: string) => void | Promise<void>;
81
+ /** `next` is the value the note moves to. A rejection rolls the pin back
82
+ * and the panel shows the message: do not also toast it. */
83
+ onTogglePin: (noteId: string, next: boolean) => void | Promise<void>;
84
+ /** As `onTogglePin`, for the flag. Omitted → no flag control. */
85
+ onToggleFlag?: (noteId: string, next: boolean) => void | Promise<void>;
86
+ /** Hears every refused save, delete, pin or flag. See `NotesPanel`'s
87
+ * `onWriteError`: report only the ones with `shown: false`. */
88
+ onWriteError?: NotesPanelProps['onWriteError'];
78
89
  /** The practice's own drafting endpoint. Omitted → no AI affordance. */
79
90
  onRequestAiDraft?: NotesPanelProps['onRequestAiDraft'];
80
91
  /** The host's live transcription. Omitted → no microphone. */
@@ -142,7 +153,7 @@ declare function PatientNotesPanelContent({ patientId, seam, editable, currentNo
142
153
  * Whether this reader may write when `seam.writable` is absent: note
143
154
  * writes follow the notes, not `practice_appointment_edit`. False (or
144
155
  * no `seam`) leaves the composer, the pin, the in-place edit and the
145
- * delete dialog unmounted.
156
+ * delete unmounted.
146
157
  */
147
158
  editable?: boolean;
148
159
  /** Address one note, exactly as `NotesPanel` does. */
@@ -165,13 +176,7 @@ export declare function PatientAppointmentsTimeline({ patientId, locale, }: {
165
176
  patientId: string;
166
177
  locale?: string;
167
178
  }): import("react/jsx-runtime").JSX.Element;
168
- /** The appointment's modification ledger as a kit Timeline, newest first,
169
- * shared by the editor's History sub-view and the read-only details panel.
170
- * An empty ledger shows the "No changes recorded" empty state. */
171
- export declare function AppointmentHistoryTimeline({ history, locale, }: {
172
- history: readonly CalendarHistoryEntry[];
173
- locale?: string;
174
- }): import("react/jsx-runtime").JSX.Element;
179
+ export { AppointmentHistoryTimeline };
175
180
  export declare function PatientTasksPanel({ patientId }: {
176
181
  patientId: string;
177
182
  }): import("react/jsx-runtime").JSX.Element;
@@ -305,9 +310,7 @@ export declare function AppointmentEditorPanel({ prefill, onSave, onDelete, onDu
305
310
  /** Root class — a dialog host bounds the panel's height through it. */
306
311
  className?: string;
307
312
  }): import("react/jsx-runtime").JSX.Element;
308
- export declare function IndicatorChips({ event }: {
309
- event: CalendarEvent;
310
- }): import("react/jsx-runtime").JSX.Element | null;
313
+ export { IndicatorChips };
311
314
  export declare function AppointmentIdentity({ row, patientRef, showAge, onOpenPatient, anamnesisAnswers, }: {
312
315
  row: CalendarRow;
313
316
  /** Who this appointment is for: the id it carries and the record, when
@@ -538,5 +541,4 @@ export declare function FindFreeSlotsPanel({ rows, locale, seed, onBookSlot, onS
538
541
  to: Date;
539
542
  }) => void;
540
543
  }): import("react/jsx-runtime").JSX.Element;
541
- export {};
542
544
  //# sourceMappingURL=calendar.sheets.d.ts.map
@@ -3,7 +3,7 @@ import { type CalendarPreferenceAdapter } from './calendar.preferences';
3
3
  import { type CalendarRow, type RailFocus, type EditorPrefill, type HistoryInput, type AvailabilityContext, type CalendarFreeSlot } from './calendar.model';
4
4
  import { type WorkspaceDisplaySettings, type CreateModeRequest, type PlacementRequest, type SaveNotice, type CalendarWorkspaceToolId } from './calendar-workspace.model';
5
5
  import type { CalendarOccurrenceMove } from './calendar.journey';
6
- export declare function CalendarSurface({ rows, setRows, onFocus, locale, onComposeNew, onComposeTask, onOpenWaitingList, onAddWaitingEntry, onOpenOnlineBookings, onlineBookingsCount, waitingBadgeCount, onVisibleRangeChange, selectedEventId, gotoRequest, onBookSlot, onBookSlotFromFinder, display, setDisplay, onHistory, readOnly, reviewOnlyEventIds, detailsOnEveryClick, placement, onPlacementEnd, createMode, onCreateModeEnd, focusScroll, saveNotice, privacy, onPrivacyChange, availability, availabilityContext, availableTools, schedulerLicenseKey, id, preferences, onMoveOccurrence, onViewChange, onPeekOpen, }: {
6
+ export declare function CalendarSurface({ rows, setRows, onFocus, locale, onComposeNew, onComposeTask, onOpenWaitingList, onAddWaitingEntry, onOpenOnlineBookings, onlineBookingsCount, waitingBadgeCount, onVisibleRangeChange, selectedEventId, gotoRequest, onBookSlot, onBookSlotFromFinder, display, setDisplay, onHistory, readOnly, reviewOnlyEventIds, detailsOnEveryClick, gridHeld, placement, onPlacementEnd, createMode, onCreateModeEnd, focusScroll, saveNotice, privacy, onPrivacyChange, availability, availabilityContext, availableTools, schedulerLicenseKey, id, preferences, onMoveOccurrence, onViewChange, onPeekOpen, }: {
7
7
  rows: CalendarRow[];
8
8
  setRows: React.Dispatch<React.SetStateAction<CalendarRow[]>>;
9
9
  onFocus: (focus: RailFocus) => void;
@@ -69,6 +69,9 @@ export declare function CalendarSurface({ rows, setRows, onFocus, locale, onComp
69
69
  } | null;
70
70
  /** Seed the editor prefilled (an empty-slot click, a booking to process). */
71
71
  onBookSlot: (prefill: EditorPrefill) => void;
72
+ /** A host tool holds the dock (`hold`): a grid click still selects, but
73
+ * never opens the editor over it. */
74
+ gridHeld?: boolean;
72
75
  onBookSlotFromFinder: (prefill: EditorPrefill) => void;
73
76
  /** The cog's settings — owned by the journey (the editor reads them). */
74
77
  display: WorkspaceDisplaySettings;
@@ -11,25 +11,17 @@
11
11
  * Type names keep their `Demo*` prefix for now — a later sweep renames
12
12
  * them `Calendar*` in one go.
13
13
  */
14
- import type { CalendarEvent, CalendarEventStatus, CalendarResource } from '../../components/calendar';
14
+ import type { CalendarEvent, CalendarResource } from '../../components/calendar';
15
15
  import type { CarePlanState } from '../../components/_shared/entity-card';
16
16
  import type { SignatureParty } from '../../components/signature-status-chip';
17
+ import type { TaskEditorDraft, TaskEditorTask } from '../../components/task-editor';
18
+ import type { AppointmentAnamnesisAnswer, AppointmentDetailsPatient, AppointmentHistoryEntry, AppointmentHistoryField, AppointmentHistoryKind, AppointmentPhoneLabel, AppointmentPhoneNumber, AppointmentSignChannel } from '../../components/appointment-details-panel';
17
19
  /** Platform `DoctorPatientPhoneNumber` carries a free-text label; the
18
- * demo fixes the vocabulary so the printed call sheet can localise it. */
19
- export type CalendarPhoneLabel = 'mobile' | 'home' | 'work';
20
- export interface CalendarPhoneNumber {
21
- label: CalendarPhoneLabel;
22
- number: string;
23
- }
24
- /** One highlighted anamnesis answer, as the platform's details dialog
25
- * lists it: the question, the Si/No, the free answer and the interview
26
- * date. Texts are display strings — the host localises them. */
27
- export interface CalendarAnamnesisAnswer {
28
- question: string;
29
- yes: boolean;
30
- answer?: string;
31
- interviewIso: string;
32
- }
20
+ * vocabulary is fixed so the printed call sheet can localise it. */
21
+ export type CalendarPhoneLabel = AppointmentPhoneLabel;
22
+ export type CalendarPhoneNumber = AppointmentPhoneNumber;
23
+ /** One highlighted anamnesis answer (display strings, host-localised). */
24
+ export type CalendarAnamnesisAnswer = AppointmentAnamnesisAnswer;
33
25
  /**
34
26
  * A patient as the HOST knows them. Only the identity — `id` and `name` —
35
27
  * is required: a host whose appointment feed carries a patient id and a
@@ -41,7 +33,7 @@ export interface CalendarAnamnesisAnswer {
41
33
  * a "Fiscal code" label is a claim about the record, not a blank. Omit the
42
34
  * row; where every row of a section would go, omit the section.
43
35
  */
44
- export interface CalendarPatient {
36
+ export interface CalendarPatient extends AppointmentDetailsPatient {
45
37
  id: string;
46
38
  name: string;
47
39
  dobIso?: string;
@@ -237,7 +229,7 @@ export type CalendarCareLink = {
237
229
  }>;
238
230
  };
239
231
  /** Channel a signature request went out on (platform `requiredObjectsSignMode`). */
240
- export type CalendarSignChannel = 'sms' | 'email';
232
+ export type CalendarSignChannel = AppointmentSignChannel;
241
233
  /** One document to sign on an appointment — each party's standing. */
242
234
  export interface CalendarSignDocument {
243
235
  id: string;
@@ -322,51 +314,14 @@ export interface CalendarBookingContact {
322
314
  /** When the booking was made (platform `createdAt`). */
323
315
  bookedAtIso: string;
324
316
  }
325
- /**
326
- * A calendar task (platform `DoctorReminder`) — the model the task editor
327
- * saves. A task has at most ONE counterpart: a patient, a company, an
328
- * operator, or none. `TaskType::validate()` refuses more than one with
329
- * "More than one counterpart is set", so the editor asks for one choice.
330
- * `note` is required here though the platform allows an empty one; `date`
331
- * is required on both sides. No title separate from the note, no priority,
332
- * no duration — the platform model has none.
333
- */
334
- export interface CalendarTask {
335
- id: string;
336
- /** An instant as an ISO 8601 string. The editor emits `toISOString()`,
337
- * so UTC with a `Z`; parse it with `new Date()`, never by slicing the
338
- * first 16 characters. A zone-less string on read is taken as local. */
339
- dateIso: string;
340
- /** The task text. Required here, though the platform allows an empty
341
- * one. */
342
- note: string;
343
- /** The clinician the task concerns: platform `doctorOperator`, filled
344
- * from `data.operators`. NOT the assignee (`assigneeId`), and mutually
345
- * exclusive with `patientId` and `companyId`. Absent = no operator. */
346
- operatorId?: string;
347
- /** Mutually exclusive with `companyId` and `operatorId`. */
348
- patientId?: string;
349
- /** Mutually exclusive with `patientId` and `operatorId` (platform
350
- * `doctorCompany`). */
351
- companyId?: string;
352
- /** Which kind of task — an OPAQUE token from `CalendarData.taskTypes`,
353
- * round-tripped untouched. The kit never parses it. Optional: a host
354
- * that supplies no `taskTypes` neither shows the field nor sends one. */
355
- typeId?: string;
356
- /** The practice USER the task is assigned to. Independent of the
357
- * counterpart above: an assigned task may still be about a patient. An
358
- * id from `CalendarData.taskAssignees`; absent = nobody. */
359
- assigneeId?: string;
360
- done: boolean;
361
- }
362
- /** The same shape without an identity — what the editor hands the create
363
- * seam, and what an edit save re-sends in full (no partial patch).
364
- * `done` is optional here (defaults to `false`) so a caller building a
365
- * brand-new task never has to state the obvious; `CalendarTask.done` on
366
- * a saved record stays required — a saved task always has a value. */
367
- export type TaskDraft = Omit<CalendarTask, 'id' | 'done'> & {
368
- done?: boolean;
369
- };
317
+ /** A calendar task (platform `DoctorReminder`): the calendar's name for the
318
+ * published TaskEditor's record. See `TaskEditorTask` for every field,
319
+ * including why `dateIso` is an instant and the one-counterpart rule. */
320
+ export type CalendarTask = TaskEditorTask;
321
+ /** The same shape without an identity: what the create seam receives and
322
+ * what an edit save re-sends in full. See `TaskEditorDraft`. Published as
323
+ * `CalendarTaskDraft`. */
324
+ export type TaskDraft = TaskEditorDraft;
370
325
  /** One contiguous working range, minutes from local midnight. */
371
326
  export interface CalendarDayHours {
372
327
  startMin: number;
@@ -425,44 +380,13 @@ export interface CalendarWaitingEntry {
425
380
  * when the host's `patientById` record carries no `avatarSrc`. */
426
381
  patientAvatarUrl?: string;
427
382
  }
428
- export type CalendarHistoryKind = 'created' | 'moved' | 'resized' | 'status' | 'edited' | 'deleted' | 'confirmedByPatient';
383
+ export type CalendarHistoryKind = AppointmentHistoryKind;
429
384
  /** Form fields an edit can touch (the platform's audit vocabulary). */
430
- export type CalendarHistoryField = 'patient' | 'type' | 'care' | 'operator' | 'chair' | 'colour' | 'time' | 'duration';
431
- /** One ledger line — who did what to the appointment, and when. */
432
- export type CalendarHistoryEntry = {
433
- id: string;
434
- atIso: string;
435
- actor: string;
436
- } & ({
437
- kind: 'created';
438
- } | {
439
- kind: 'moved';
440
- fromIso: string;
441
- toIso: string;
442
- } | {
443
- kind: 'resized';
444
- fromMin: number;
445
- toMin: number;
446
- } | {
447
- kind: 'status';
448
- from: CalendarEventStatus;
449
- to: CalendarEventStatus;
450
- } | {
451
- kind: 'edited';
452
- fields: CalendarHistoryField[];
453
- } | {
454
- kind: 'deleted';
455
- }
456
- /** The patient confirmed by link; the host sends `actor: ''`. */
457
- | {
458
- kind: 'confirmedByPatient';
459
- });
460
- /** Every labelled phone number — the single `phone` is the mobile when a
461
- * patient carries no explicit list (platform prints each label: number).
462
- * A patient the host supplied without either has no numbers to print,
463
- * which is not the same as one labelled blank: the list comes back empty
464
- * and the caller omits the block. */
465
- export declare function patientPhones(patient: CalendarPatient): CalendarPhoneNumber[];
385
+ export type CalendarHistoryField = AppointmentHistoryField;
386
+ /** One ledger line: who did what to the appointment, and when. */
387
+ export type CalendarHistoryEntry = AppointmentHistoryEntry;
388
+ /** Every labelled phone number; see the shared helper. */
389
+ export { patientPhones } from '../../components/_shared/appointment-format';
466
390
  /**
467
391
  * A patient as the calendar can see them at one point: the id a row,
468
392
  * an event or a waiting entry carries, plus the record if the host's
@@ -1,4 +1,4 @@
1
- export { CalendarWorkspace, initialWorkspaceDisplay, WORKSPACE_TOOL, type CalendarWorkspaceProps, type CalendarOnlineBookings, type CalendarWorkspaceToolId, type CalendarWorkspaceAnalytics, type CalendarToolOpenSource, type CalendarDetailsOpenSource, } from './calendar-workspace';
1
+ export { CalendarWorkspace, initialWorkspaceDisplay, WORKSPACE_TOOL, type CalendarWorkspaceProps, type CalendarOnlineBookings, type CalendarWorkspaceToolId, type CalendarWorkspaceExtraTool, type CalendarWorkspaceAnalytics, type CalendarToolOpenSource, type CalendarDetailsOpenSource, } from './calendar-workspace';
2
2
  export { CalendarDataProvider, useCalendarData, type CalendarData, type DayLoadState, } from './calendar.data';
3
3
  export type { CalendarJourney, CalendarOccurrenceMove, PatientNotesLoad, } from './calendar.journey';
4
4
  export type { CalendarAppointmentEditorSnapshot, CalendarAppointmentEditorLoader, CalendarEditorSeries, } from './calendar-editor-hydration';
@@ -8,9 +8,10 @@ export { SheetHostProvider, useSheetHost, type SheetHostContext, type SheetId, }
8
8
  export { CALENDAR_PREFERENCE_KEYS, memoryPreferenceAdapter, resetCalendarPreferences, usePersistedPreference, type CalendarPreferenceAdapter, } from './calendar.preferences';
9
9
  export { DEFAULT_DISPLAY, VIEW_OPTIONS, type AvailabilityContext, type BacklogFilter, type BacklogItem, type BacklogType, type CalendarFreeSlot, type CalendarEditorCapabilities, type CalendarRow, type CalendarSeries, type DisplaySettings, type DraftSlot, type EditorDraft, type EditorInitialFocus, type EditorPrefill, type EditorRecurrence, type FindSlotsSeed, type HistoryInput, type PendingMove, type RailFocus, type RecurrenceFrequency, type SlotPatch, type ViewOption, type ViewOptionId, type WaitingEntryDraft, } from './calendar.model';
10
10
  export { DEFAULT_WORKSPACE_DISPLAY, WORKSPACE_VIEWS, type CalendarWaitingListState, type ChairNameDisplay, type DeleteOptions, type EditorDraftExtras, type OperatorNameDisplay, type RecurringScope, type RequiredDocsSignMode, type WorkspaceDisplaySettings, type WorkspaceViewId, } from './calendar-workspace.model';
11
- export type { AssociationColorSources, CalendarAnamnesisAnswer, CalendarAppointmentMeta, CalendarBaseEvent, CalendarBookingContact, CalendarBranch, CalendarBusinessHours, CalendarCare, CalendarCareEntry, CalendarCareLink, CalendarCarePlan, CalendarCarePlanEntry, CalendarClosure, CalendarDayHours, CalendarHistoryEntry, CalendarHistoryField, CalendarHistoryKind, CalendarHoliday, CalendarOperatorFilterGroup, CalendarOperatorGroup, CalendarPatient, CalendarPhoneLabel, CalendarPhoneNumber, CalendarPractice, CalendarPracticeFeatures, CalendarPriceList, CalendarSignChannel, CalendarSignDocument, CalendarTaskDetail, CalendarWaitingEntry, CalendarWeeklyHours, CareDescriptionMode, ColorAssociation, FreeSlotQuery, } from './calendar.types';
11
+ export type { AssociationColorSources, CalendarAnamnesisAnswer, CalendarAppointmentMeta, CalendarBaseEvent, CalendarBookingContact, CalendarBranch, CalendarBusinessHours, CalendarCare, CalendarCareEntry, CalendarCareLink, CalendarCarePlan, CalendarCarePlanEntry, CalendarClosure, CalendarDayHours, CalendarHistoryEntry, CalendarHistoryField, CalendarHistoryKind, CalendarHoliday, CalendarOperatorFilterGroup, CalendarOperatorGroup, CalendarPatient, CalendarPhoneLabel, CalendarPhoneNumber, CalendarPractice, CalendarPracticeFeatures, CalendarPriceList, CalendarSignChannel, CalendarSignDocument, CalendarTask, CalendarTaskDetail, CalendarWaitingEntry, CalendarWeeklyHours, CareDescriptionMode, ColorAssociation, FreeSlotQuery, TaskDraft as CalendarTaskDraft, } from './calendar.types';
12
12
  export type { CalendarEvent, CalendarEventStatus, CalendarResource, } from '../../components/calendar';
13
13
  export type { AppointmentItem } from '../../components/appointment-card';
14
- export type { NotesPanelNote, NotesPanelNoteActions, NotesPanelProps, NotesPanelSubmission, } from '../../components/notes-panel';
14
+ export type { NotesPanelNote, NotesPanelNoteActions, NotesPanelProps, NotesPanelSubmission, NotesPanelWriteFailure, } from '../../components/notes-panel';
15
15
  export type { TasksPanelItem } from '../../components/tasks-panel';
16
+ export type { ControlRoomTool } from '../../components/control-room-rail';
16
17
  //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,4 @@
1
- import { C as s, a as r, b as E, c as P, D as S, d as o, S as C, V as t, W as d, e as A, i, m as n, r as D, u as W, f as _, g as c } from "../../_chunks/calendar-workspace-BmscntRR.js";
1
+ import { C as s, a as r, b as E, c as P, D as S, d as o, S as C, V as t, W as d, e as A, i, m as n, r as D, u as W, f as _, g as c } from "../../_chunks/calendar-workspace-C_eXL1by.js";
2
2
  export {
3
3
  s as CALENDAR_PREFERENCE_KEYS,
4
4
  r as CalendarDataProvider,
@@ -1,4 +1,4 @@
1
- import { A as s, a as t, b as r, H as i, c as p, u as l } from "../../_chunks/help-me-write-templates-DHIwa4xR.js";
1
+ import { A as s, a as t, b as r, H as i, c as p, u as l } from "../../_chunks/help-me-write-templates-DQtT1qs_.js";
2
2
  export {
3
3
  s as AiCreditsExhaustedError,
4
4
  t as AiCreditsExhaustedNotice,