@alfadocs/ui-kit-debug 1.127.2 → 1.129.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 (289) hide show
  1. package/dist/_chunks/{appointment-card-0PebvrOS.js → appointment-card-vbUsDh70.js} +49 -72
  2. package/dist/_chunks/appointment-card-vbUsDh70.js.map +1 -0
  3. package/dist/_chunks/{appointment-timeline-Czd4PBkF.js → appointment-timeline-B5pfBl-b.js} +2 -2
  4. package/dist/_chunks/{appointment-timeline-Czd4PBkF.js.map → appointment-timeline-B5pfBl-b.js.map} +1 -1
  5. package/dist/_chunks/{appointment-tray-B04zKY7g.js → appointment-tray-BhiXetjs.js} +2 -2
  6. package/dist/_chunks/{appointment-tray-B04zKY7g.js.map → appointment-tray-BhiXetjs.js.map} +1 -1
  7. package/dist/_chunks/{calendar-_sgjuH3L.js → calendar-DzR-vdJ5.js} +614 -563
  8. package/dist/_chunks/calendar-DzR-vdJ5.js.map +1 -0
  9. package/dist/_chunks/calendar-appointment-editor-dialog-DnPADcj9.js +13438 -0
  10. package/dist/_chunks/calendar-appointment-editor-dialog-DnPADcj9.js.map +1 -0
  11. package/dist/_chunks/{calendar-event-card-DXAYWH6k.js → calendar-event-card-BNEzkjm-.js} +142 -132
  12. package/dist/_chunks/calendar-event-card-BNEzkjm-.js.map +1 -0
  13. package/dist/_chunks/{care-plan-card-bGTIliXc.js → care-plan-card-CwgkImOD.js} +2 -2
  14. package/dist/_chunks/{care-plan-card-bGTIliXc.js.map → care-plan-card-CwgkImOD.js.map} +1 -1
  15. package/dist/_chunks/{care-plan-header-k8FslxsU.js → care-plan-header-Dx5OMkc9.js} +2 -2
  16. package/dist/_chunks/{care-plan-header-k8FslxsU.js.map → care-plan-header-Dx5OMkc9.js.map} +1 -1
  17. package/dist/_chunks/{clinical-note-card-DHn5W_bv.js → clinical-note-card-pPaeWWnu.js} +2 -2
  18. package/dist/_chunks/{clinical-note-card-DHn5W_bv.js.map → clinical-note-card-pPaeWWnu.js.map} +1 -1
  19. package/dist/_chunks/{contact-card-CGpbYuxl.js → contact-card-BSY2YpLZ.js} +2 -2
  20. package/dist/_chunks/{contact-card-CGpbYuxl.js.map → contact-card-BSY2YpLZ.js.map} +1 -1
  21. package/dist/_chunks/{contact-profile-card-CCgf0Ntt.js → contact-profile-card-CsZNMlws.js} +2 -2
  22. package/dist/_chunks/{contact-profile-card-CCgf0Ntt.js.map → contact-profile-card-CsZNMlws.js.map} +1 -1
  23. package/dist/_chunks/{default-tabs-DOuHEKI5.js → default-tabs-BnB6FUEW.js} +2 -2
  24. package/dist/_chunks/{default-tabs-DOuHEKI5.js.map → default-tabs-BnB6FUEW.js.map} +1 -1
  25. package/dist/_chunks/{entity-summary-BanguTa6.js → entity-summary-Dzk54yom.js} +2 -2
  26. package/dist/_chunks/{entity-summary-BanguTa6.js.map → entity-summary-Dzk54yom.js.map} +1 -1
  27. package/dist/_chunks/file-pen-line-k4uMBM3h.js +29 -0
  28. package/dist/_chunks/file-pen-line-k4uMBM3h.js.map +1 -0
  29. package/dist/_chunks/{info-tip-C-MPkShR.js → info-tip-B3cn3fY2.js} +2 -2
  30. package/dist/_chunks/{info-tip-C-MPkShR.js.map → info-tip-B3cn3fY2.js.map} +1 -1
  31. package/dist/_chunks/{link-DtCfnLnF.js → link-CeV7FoI6.js} +2 -2
  32. package/dist/_chunks/{link-DtCfnLnF.js.map → link-CeV7FoI6.js.map} +1 -1
  33. package/dist/_chunks/{nav-grid-D2xVcHTO.js → nav-grid-dEgDAri3.js} +2 -2
  34. package/dist/_chunks/{nav-grid-D2xVcHTO.js.map → nav-grid-dEgDAri3.js.map} +1 -1
  35. package/dist/_chunks/{note-attachment-cnj2JRrg.js → note-attachment-MNTIqdSz.js} +2 -2
  36. package/dist/_chunks/{note-attachment-cnj2JRrg.js.map → note-attachment-MNTIqdSz.js.map} +1 -1
  37. package/dist/_chunks/{note-timeline-BrjHBQfx.js → note-timeline-BQeW0VZY.js} +2 -2
  38. package/dist/_chunks/{note-timeline-BrjHBQfx.js.map → note-timeline-BQeW0VZY.js.map} +1 -1
  39. package/dist/_chunks/{notes-panel-BOwlTz2-.js → notes-panel-DIY7eNsq.js} +3 -3
  40. package/dist/_chunks/{notes-panel-BOwlTz2-.js.map → notes-panel-DIY7eNsq.js.map} +1 -1
  41. package/dist/_chunks/{patient-details-Cba9HQj_.js → patient-details-DBtEITfE.js} +2 -2
  42. package/dist/_chunks/{patient-details-Cba9HQj_.js.map → patient-details-DBtEITfE.js.map} +1 -1
  43. package/dist/_chunks/{patient-field-row-CtDihADs.js → patient-field-row-a5d4QijH.js} +2 -2
  44. package/dist/_chunks/{patient-field-row-CtDihADs.js.map → patient-field-row-a5d4QijH.js.map} +1 -1
  45. package/dist/_chunks/{patient-summary-card-DnLdbtsw.js → patient-summary-card-BUcZ-gaL.js} +3 -3
  46. package/dist/_chunks/{patient-summary-card-DnLdbtsw.js.map → patient-summary-card-BUcZ-gaL.js.map} +1 -1
  47. package/dist/_chunks/{payment-request-card-CEIalOtr.js → payment-request-card-Dv4WbRBe.js} +2 -2
  48. package/dist/_chunks/{payment-request-card-CEIalOtr.js.map → payment-request-card-Dv4WbRBe.js.map} +1 -1
  49. package/dist/_chunks/{product-hub-panel-CqRJlmb7.js → product-hub-panel-a8wdVOUt.js} +2 -2
  50. package/dist/_chunks/{product-hub-panel-CqRJlmb7.js.map → product-hub-panel-a8wdVOUt.js.map} +1 -1
  51. package/dist/_chunks/{public-footer-C8UIzqLJ.js → public-footer-D0cqScpz.js} +2 -2
  52. package/dist/_chunks/{public-footer-C8UIzqLJ.js.map → public-footer-D0cqScpz.js.map} +1 -1
  53. package/dist/_chunks/{rich-text-editor-BLEdXJ0l.js → rich-text-editor-TnX0SYdq.js} +1866 -1766
  54. package/dist/_chunks/rich-text-editor-TnX0SYdq.js.map +1 -0
  55. package/dist/_chunks/{signature-request-Dzs0jZsd.js → signature-request-DW2PSp66.js} +3 -3
  56. package/dist/_chunks/{signature-request-Dzs0jZsd.js.map → signature-request-DW2PSp66.js.map} +1 -1
  57. package/dist/_chunks/{signed-out-frame-fUf7tqs3.js → signed-out-frame-Oa2e1yps.js} +2 -2
  58. package/dist/_chunks/{signed-out-frame-fUf7tqs3.js.map → signed-out-frame-Oa2e1yps.js.map} +1 -1
  59. package/dist/_chunks/task-editor-CVRrDqpe.js +1256 -0
  60. package/dist/_chunks/task-editor-CVRrDqpe.js.map +1 -0
  61. package/dist/_chunks/{treatment-receipt-1VnuinhY.js → treatment-receipt-BZzwvsnY.js} +73 -56
  62. package/dist/_chunks/treatment-receipt-BZzwvsnY.js.map +1 -0
  63. package/dist/_chunks/use-appointment-details-read-n7kycxrm.js +2439 -0
  64. package/dist/_chunks/use-appointment-details-read-n7kycxrm.js.map +1 -0
  65. package/dist/_chunks/{whatsapp-button-DV9JFmtq.js → whatsapp-button-XbozeDl_.js} +32 -25
  66. package/dist/_chunks/whatsapp-button-XbozeDl_.js.map +1 -0
  67. package/dist/agent-catalog.json +49 -16
  68. package/dist/agent-i18n/en.json +5 -5
  69. package/dist/browser-support.js +1 -1
  70. package/dist/components/_shared/patient-picker.d.ts +10 -0
  71. package/dist/components/_shared/patient-picker.d.ts.map +1 -1
  72. package/dist/components/appointment-card/index.js +2 -2
  73. package/dist/components/appointment-details-panel/appointment-details-panel.d.ts +23 -1
  74. package/dist/components/appointment-details-panel/appointment-details-panel.d.ts.map +1 -1
  75. package/dist/components/appointment-details-panel/appointment-details-panel.links.d.ts +13 -0
  76. package/dist/components/appointment-details-panel/appointment-details-panel.links.d.ts.map +1 -0
  77. package/dist/components/appointment-details-panel/appointment-details-panel.recurrence.d.ts +9 -0
  78. package/dist/components/appointment-details-panel/appointment-details-panel.recurrence.d.ts.map +1 -0
  79. package/dist/components/appointment-details-panel/appointment-details-panel.sections.d.ts +8 -3
  80. package/dist/components/appointment-details-panel/appointment-details-panel.sections.d.ts.map +1 -1
  81. package/dist/components/appointment-details-panel/appointment-details-panel.types.d.ts +63 -1
  82. package/dist/components/appointment-details-panel/appointment-details-panel.types.d.ts.map +1 -1
  83. package/dist/components/appointment-details-panel/index.d.ts +2 -1
  84. package/dist/components/appointment-details-panel/index.d.ts.map +1 -1
  85. package/dist/components/appointment-details-panel/index.js +5 -4
  86. package/dist/components/appointment-timeline/index.js +1 -1
  87. package/dist/components/bill-table/index.js +1 -1
  88. package/dist/components/calendar/calendar.d.ts +22 -0
  89. package/dist/components/calendar/calendar.d.ts.map +1 -1
  90. package/dist/components/calendar/index.js +1 -1
  91. package/dist/components/calendar-event-card/calendar-event-card.d.ts +8 -0
  92. package/dist/components/calendar-event-card/calendar-event-card.d.ts.map +1 -1
  93. package/dist/components/calendar-event-card/index.js +1 -1
  94. package/dist/components/care-plan-card/index.js +1 -1
  95. package/dist/components/care-plan-header/index.js +1 -1
  96. package/dist/components/clinical-note-card/index.js +1 -1
  97. package/dist/components/contact-card/index.js +1 -1
  98. package/dist/components/contact-profile-card/index.js +1 -1
  99. package/dist/components/entity-summary/index.js +1 -1
  100. package/dist/components/info-tip/index.js +1 -1
  101. package/dist/components/link/index.js +1 -1
  102. package/dist/components/nav-grid/index.js +1 -1
  103. package/dist/components/note-timeline/index.js +1 -1
  104. package/dist/components/notes-panel/index.js +1 -1
  105. package/dist/components/patient-details/index.js +1 -1
  106. package/dist/components/patient-summary-card/index.js +1 -1
  107. package/dist/components/payment-card/index.js +1 -1
  108. package/dist/components/product-hub-tray/index.js +1 -1
  109. package/dist/components/public-footer/index.js +1 -1
  110. package/dist/components/rich-text-editor/editor-toolbar.d.ts +1 -0
  111. package/dist/components/rich-text-editor/editor-toolbar.d.ts.map +1 -1
  112. package/dist/components/rich-text-editor/index.js +1 -1
  113. package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
  114. package/dist/components/task-editor/index.js +1 -1
  115. package/dist/components/treatment-receipt/index.d.ts +2 -2
  116. package/dist/components/treatment-receipt/index.d.ts.map +1 -1
  117. package/dist/components/treatment-receipt/index.js +2 -1
  118. package/dist/components/treatment-receipt/treatment-receipt.d.ts +11 -1
  119. package/dist/components/treatment-receipt/treatment-receipt.d.ts.map +1 -1
  120. package/dist/components/whatsapp-button/index.js +1 -1
  121. package/dist/components/whatsapp-button/whatsapp-button.d.ts.map +1 -1
  122. package/dist/core.css +1 -1
  123. package/dist/fullcalendar.css +5 -1
  124. package/dist/host-compat.css +4 -1
  125. package/dist/host-legacy.css +22 -0
  126. package/dist/i18n/locales/ar.d.ts +118 -4
  127. package/dist/i18n/locales/ar.d.ts.map +1 -1
  128. package/dist/i18n/locales/ar.js +129 -15
  129. package/dist/i18n/locales/ar.js.map +1 -1
  130. package/dist/i18n/locales/de.d.ts +118 -4
  131. package/dist/i18n/locales/de.d.ts.map +1 -1
  132. package/dist/i18n/locales/de.js +129 -15
  133. package/dist/i18n/locales/de.js.map +1 -1
  134. package/dist/i18n/locales/el.d.ts +118 -4
  135. package/dist/i18n/locales/el.d.ts.map +1 -1
  136. package/dist/i18n/locales/el.js +129 -15
  137. package/dist/i18n/locales/el.js.map +1 -1
  138. package/dist/i18n/locales/en.d.ts +118 -4
  139. package/dist/i18n/locales/en.d.ts.map +1 -1
  140. package/dist/i18n/locales/en.js +121 -10
  141. package/dist/i18n/locales/en.js.map +1 -1
  142. package/dist/i18n/locales/es.d.ts +118 -4
  143. package/dist/i18n/locales/es.d.ts.map +1 -1
  144. package/dist/i18n/locales/es.js +129 -15
  145. package/dist/i18n/locales/es.js.map +1 -1
  146. package/dist/i18n/locales/fr.d.ts +118 -4
  147. package/dist/i18n/locales/fr.d.ts.map +1 -1
  148. package/dist/i18n/locales/fr.js +129 -15
  149. package/dist/i18n/locales/fr.js.map +1 -1
  150. package/dist/i18n/locales/hi.d.ts +118 -4
  151. package/dist/i18n/locales/hi.d.ts.map +1 -1
  152. package/dist/i18n/locales/hi.js +129 -15
  153. package/dist/i18n/locales/hi.js.map +1 -1
  154. package/dist/i18n/locales/it.d.ts +118 -4
  155. package/dist/i18n/locales/it.d.ts.map +1 -1
  156. package/dist/i18n/locales/it.js +129 -15
  157. package/dist/i18n/locales/it.js.map +1 -1
  158. package/dist/i18n/locales/ja.d.ts +118 -4
  159. package/dist/i18n/locales/ja.d.ts.map +1 -1
  160. package/dist/i18n/locales/ja.js +129 -15
  161. package/dist/i18n/locales/ja.js.map +1 -1
  162. package/dist/i18n/locales/nl.d.ts +118 -4
  163. package/dist/i18n/locales/nl.d.ts.map +1 -1
  164. package/dist/i18n/locales/nl.js +129 -15
  165. package/dist/i18n/locales/nl.js.map +1 -1
  166. package/dist/i18n/locales/pl.d.ts +118 -4
  167. package/dist/i18n/locales/pl.d.ts.map +1 -1
  168. package/dist/i18n/locales/pl.js +129 -15
  169. package/dist/i18n/locales/pl.js.map +1 -1
  170. package/dist/i18n/locales/pt.d.ts +118 -4
  171. package/dist/i18n/locales/pt.d.ts.map +1 -1
  172. package/dist/i18n/locales/pt.js +129 -15
  173. package/dist/i18n/locales/pt.js.map +1 -1
  174. package/dist/i18n/locales/ro.d.ts +118 -4
  175. package/dist/i18n/locales/ro.d.ts.map +1 -1
  176. package/dist/i18n/locales/ro.js +129 -15
  177. package/dist/i18n/locales/ro.js.map +1 -1
  178. package/dist/i18n/locales/ru.d.ts +118 -4
  179. package/dist/i18n/locales/ru.d.ts.map +1 -1
  180. package/dist/i18n/locales/ru.js +129 -15
  181. package/dist/i18n/locales/ru.js.map +1 -1
  182. package/dist/i18n/locales/sq.d.ts +118 -4
  183. package/dist/i18n/locales/sq.d.ts.map +1 -1
  184. package/dist/i18n/locales/sq.js +129 -15
  185. package/dist/i18n/locales/sq.js.map +1 -1
  186. package/dist/i18n/locales/sv.d.ts +118 -4
  187. package/dist/i18n/locales/sv.d.ts.map +1 -1
  188. package/dist/i18n/locales/sv.js +129 -15
  189. package/dist/i18n/locales/sv.js.map +1 -1
  190. package/dist/i18n/locales/tr.d.ts +118 -4
  191. package/dist/i18n/locales/tr.d.ts.map +1 -1
  192. package/dist/i18n/locales/tr.js +129 -15
  193. package/dist/i18n/locales/tr.js.map +1 -1
  194. package/dist/i18n/locales/zh.d.ts +118 -4
  195. package/dist/i18n/locales/zh.d.ts.map +1 -1
  196. package/dist/i18n/locales/zh.js +129 -15
  197. package/dist/i18n/locales/zh.js.map +1 -1
  198. package/dist/index.js +1112 -1107
  199. package/dist/locales/ar.json +129 -15
  200. package/dist/locales/de.json +129 -15
  201. package/dist/locales/el.json +129 -15
  202. package/dist/locales/en.json +121 -7
  203. package/dist/locales/es.json +129 -15
  204. package/dist/locales/fr.json +129 -15
  205. package/dist/locales/hi.json +129 -15
  206. package/dist/locales/it.json +129 -15
  207. package/dist/locales/ja.json +129 -15
  208. package/dist/locales/nl.json +129 -15
  209. package/dist/locales/pl.json +129 -15
  210. package/dist/locales/pt.json +129 -15
  211. package/dist/locales/ro.json +129 -15
  212. package/dist/locales/ru.json +129 -15
  213. package/dist/locales/sq.json +129 -15
  214. package/dist/locales/sv.json +129 -15
  215. package/dist/locales/tr.json +129 -15
  216. package/dist/locales/zh.json +129 -15
  217. package/dist/patterns/calendar/calendar-appointment-details.d.ts +74 -2
  218. package/dist/patterns/calendar/calendar-appointment-details.d.ts.map +1 -1
  219. package/dist/patterns/calendar/calendar-archive.d.ts +12 -0
  220. package/dist/patterns/calendar/calendar-archive.d.ts.map +1 -0
  221. package/dist/patterns/calendar/calendar-bookings-panel.d.ts.map +1 -1
  222. package/dist/patterns/calendar/calendar-care-rules.d.ts +19 -23
  223. package/dist/patterns/calendar/calendar-care-rules.d.ts.map +1 -1
  224. package/dist/patterns/calendar/calendar-delete-confirm.d.ts +18 -0
  225. package/dist/patterns/calendar/calendar-delete-confirm.d.ts.map +1 -0
  226. package/dist/patterns/calendar/calendar-document-scope-confirm.d.ts +12 -0
  227. package/dist/patterns/calendar/calendar-document-scope-confirm.d.ts.map +1 -0
  228. package/dist/patterns/calendar/calendar-editor-guard.d.ts +12 -0
  229. package/dist/patterns/calendar/calendar-editor-guard.d.ts.map +1 -0
  230. package/dist/patterns/calendar/calendar-editor-hydration.d.ts +13 -2
  231. package/dist/patterns/calendar/calendar-editor-hydration.d.ts.map +1 -1
  232. package/dist/patterns/calendar/calendar-load-error.d.ts +11 -0
  233. package/dist/patterns/calendar/calendar-load-error.d.ts.map +1 -0
  234. package/dist/patterns/calendar/calendar-patient-locked.d.ts +13 -0
  235. package/dist/patterns/calendar/calendar-patient-locked.d.ts.map +1 -0
  236. package/dist/patterns/calendar/calendar-patient-picker.d.ts +6 -1
  237. package/dist/patterns/calendar/calendar-patient-picker.d.ts.map +1 -1
  238. package/dist/patterns/calendar/calendar-prompts.d.ts +11 -0
  239. package/dist/patterns/calendar/calendar-prompts.d.ts.map +1 -0
  240. package/dist/patterns/calendar/calendar-settings-ical.d.ts +11 -0
  241. package/dist/patterns/calendar/calendar-settings-ical.d.ts.map +1 -0
  242. package/dist/patterns/calendar/calendar-settings-overlay.d.ts +73 -0
  243. package/dist/patterns/calendar/calendar-settings-overlay.d.ts.map +1 -0
  244. package/dist/patterns/calendar/calendar-settings-panel.d.ts +62 -0
  245. package/dist/patterns/calendar/calendar-settings-panel.d.ts.map +1 -0
  246. package/dist/patterns/calendar/calendar-settings-practice.d.ts +20 -0
  247. package/dist/patterns/calendar/calendar-settings-practice.d.ts.map +1 -0
  248. package/dist/patterns/calendar/calendar-status-colours.d.ts +18 -0
  249. package/dist/patterns/calendar/calendar-status-colours.d.ts.map +1 -0
  250. package/dist/patterns/calendar/calendar-upcoming-panel.d.ts.map +1 -1
  251. package/dist/patterns/calendar/calendar-waiting-list-panel.d.ts +17 -2
  252. package/dist/patterns/calendar/calendar-waiting-list-panel.d.ts.map +1 -1
  253. package/dist/patterns/calendar/calendar-workspace.d.ts +258 -6
  254. package/dist/patterns/calendar/calendar-workspace.d.ts.map +1 -1
  255. package/dist/patterns/calendar/calendar-workspace.model.d.ts +98 -11
  256. package/dist/patterns/calendar/calendar-workspace.model.d.ts.map +1 -1
  257. package/dist/patterns/calendar/calendar.data.d.ts +9 -3
  258. package/dist/patterns/calendar/calendar.data.d.ts.map +1 -1
  259. package/dist/patterns/calendar/calendar.journey.d.ts +69 -5
  260. package/dist/patterns/calendar/calendar.journey.d.ts.map +1 -1
  261. package/dist/patterns/calendar/calendar.model.d.ts +72 -14
  262. package/dist/patterns/calendar/calendar.model.d.ts.map +1 -1
  263. package/dist/patterns/calendar/calendar.preferences.d.ts +4 -0
  264. package/dist/patterns/calendar/calendar.preferences.d.ts.map +1 -1
  265. package/dist/patterns/calendar/calendar.sheets.d.ts +85 -17
  266. package/dist/patterns/calendar/calendar.sheets.d.ts.map +1 -1
  267. package/dist/patterns/calendar/calendar.surface.d.ts +64 -6
  268. package/dist/patterns/calendar/calendar.surface.d.ts.map +1 -1
  269. package/dist/patterns/calendar/calendar.types.d.ts +223 -6
  270. package/dist/patterns/calendar/calendar.types.d.ts.map +1 -1
  271. package/dist/patterns/calendar/index.d.ts +9 -6
  272. package/dist/patterns/calendar/index.d.ts.map +1 -1
  273. package/dist/patterns/calendar/index.js +18 -15
  274. package/dist/patterns/signature-request/index.js +1 -1
  275. package/dist/patterns/signed-out-frame/index.js +1 -1
  276. package/dist/tokens.css +5 -1
  277. package/package.json +1 -1
  278. package/dist/_chunks/appointment-card-0PebvrOS.js.map +0 -1
  279. package/dist/_chunks/calendar-_sgjuH3L.js.map +0 -1
  280. package/dist/_chunks/calendar-appointment-editor-dialog-B-zYgCgH.js +0 -10974
  281. package/dist/_chunks/calendar-appointment-editor-dialog-B-zYgCgH.js.map +0 -1
  282. package/dist/_chunks/calendar-event-card-DXAYWH6k.js.map +0 -1
  283. package/dist/_chunks/rich-text-editor-BLEdXJ0l.js.map +0 -1
  284. package/dist/_chunks/task-editor-C05yx7JJ.js +0 -1218
  285. package/dist/_chunks/task-editor-C05yx7JJ.js.map +0 -1
  286. package/dist/_chunks/treatment-receipt-1VnuinhY.js.map +0 -1
  287. package/dist/_chunks/use-appointment-details-read-Bm408XzX.js +0 -2198
  288. package/dist/_chunks/use-appointment-details-read-Bm408XzX.js.map +0 -1
  289. package/dist/_chunks/whatsapp-button-DV9JFmtq.js.map +0 -1
@@ -1,23 +1,30 @@
1
1
  import { jsxs as c, jsx as r } from "react/jsx-runtime";
2
2
  import { forwardRef as B, useMemo as A } from "react";
3
3
  import { c as p } from "./index-D2ZczOXr.js";
4
- import { useTranslation as C } from "react-i18next";
5
- function h({
4
+ import { useTranslation as k } from "react-i18next";
5
+ function g({
6
6
  className: a
7
7
  }) {
8
- return /* @__PURE__ */ r(
9
- "svg",
10
- {
11
- "aria-hidden": "true",
12
- viewBox: "0 0 24 24",
13
- fill: "currentColor",
14
- xmlns: "http://www.w3.org/2000/svg",
15
- className: a,
16
- children: /* @__PURE__ */ r("path", { d: "M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.149-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.71.306 1.263.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 0 0-3.48-8.413Z" })
17
- }
8
+ return (
9
+ /* Intrinsic size like a Lucide glyph, and the full size of its icon slot
10
+ by default: with neither, WebKit lays a sizeless <svg> flex item out
11
+ at 0x0, so Safari showed an empty button. */
12
+ /* @__PURE__ */ r(
13
+ "svg",
14
+ {
15
+ "aria-hidden": "true",
16
+ viewBox: "0 0 24 24",
17
+ width: "24",
18
+ height: "24",
19
+ fill: "currentColor",
20
+ xmlns: "http://www.w3.org/2000/svg",
21
+ className: a ?? "ds:size-full ds:shrink-0",
22
+ children: /* @__PURE__ */ r("path", { d: "M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.149-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.71.306 1.263.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 0 0-3.48-8.413Z" })
23
+ }
24
+ )
18
25
  );
19
26
  }
20
- const j = p(
27
+ const C = p(
21
28
  [
22
29
  // `position` is provided by `positionVariants` below — `static`
23
30
  // sets `ds:relative` (so the pseudo-element touch-target anchors),
@@ -119,7 +126,7 @@ const j = p(
119
126
  size: "md"
120
127
  }
121
128
  }
122
- ), k = p("", {
129
+ ), N = p("", {
123
130
  variants: {
124
131
  position: {
125
132
  // `relative` so the `::before` pseudo touch-target (defined in
@@ -137,7 +144,7 @@ const j = p(
137
144
  }
138
145
  },
139
146
  defaultVariants: { position: "static" }
140
- }), N = p("", {
147
+ }), j = p("", {
141
148
  variants: {
142
149
  collapseLabelBelow: {
143
150
  sm: "ds:max-sm:gap-0 ds:max-sm:p-0 ds:max-sm:min-h-0 ds:max-sm:rounded-full ds:max-sm:shadow-[var(--shadow-lg)]",
@@ -212,13 +219,13 @@ const T = B(
212
219
  className: _,
213
220
  ...i
214
221
  }, y) => {
215
- const { t: v } = C("ui"), f = A(
222
+ const { t: v } = k("ui"), f = A(
216
223
  () => $(a, o),
217
224
  [a, o]
218
225
  ), e = x ?? v(s === "fab" ? "whatsApp.fabLabel" : w === "question" ? "whatsApp.questionPrompt" : "whatsApp.label"), n = s === "pill" ? z : void 0, L = [
219
- j({ variant: s, size: l }),
220
- k({ position: u }),
221
- n ? N({ collapseLabelBelow: n, size: l }) : "",
226
+ C({ variant: s, size: l }),
227
+ N({ position: u }),
228
+ n ? j({ collapseLabelBelow: n, size: l }) : "",
222
229
  _
223
230
  ].filter(Boolean).join(" "), t = f === null, b = {
224
231
  ref: y,
@@ -240,15 +247,15 @@ const T = B(
240
247
  "data-variant": s,
241
248
  "data-collapse-label-below": n,
242
249
  onClick: (m) => {
243
- var g;
244
- t && m.preventDefault(), (g = i.onClick) == null || g.call(i, m);
250
+ var h;
251
+ t && m.preventDefault(), (h = i.onClick) == null || h.call(i, m);
245
252
  },
246
253
  className: L
247
254
  }, d = t ? null : v("link.opensInNewTab", "Opens in a new tab");
248
255
  if (s === "fab") {
249
256
  const m = typeof e == "string" ? d ? `${e} — ${d}` : e : void 0;
250
257
  return /* @__PURE__ */ c("a", { ...i, ...b, "aria-label": m, children: [
251
- /* @__PURE__ */ r(h, {}),
258
+ /* @__PURE__ */ r(g, {}),
252
259
  typeof e != "string" ? /* @__PURE__ */ c("span", { className: "ds:sr-only", children: [
253
260
  e,
254
261
  d ? ` — ${d}` : null
@@ -256,7 +263,7 @@ const T = B(
256
263
  ] });
257
264
  }
258
265
  return /* @__PURE__ */ c("a", { ...i, ...b, children: [
259
- /* @__PURE__ */ r(h, {}),
266
+ /* @__PURE__ */ r(g, {}),
260
267
  /* @__PURE__ */ r("span", { className: n ? V[n] : void 0, children: e }),
261
268
  d ? /* @__PURE__ */ c("span", { className: "ds:sr-only", children: [
262
269
  " — ",
@@ -268,6 +275,6 @@ const T = B(
268
275
  T.displayName = "WhatsAppButton";
269
276
  export {
270
277
  T as W,
271
- h as a
278
+ g as a
272
279
  };
273
- //# sourceMappingURL=whatsapp-button-DV9JFmtq.js.map
280
+ //# sourceMappingURL=whatsapp-button-XbozeDl_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp-button-XbozeDl_.js","sources":["../../src/components/whatsapp-button/whatsapp-button.tsx"],"sourcesContent":["/* ------------------------------------------------------------------ */\n/* WhatsAppButton — kit-tokened Click-to-Chat affordance. */\n/* */\n/* Replaces the booking website's loose green-circle-with-caption */\n/* combo (see HTP screenshot in the rebrand discussion) with a single */\n/* well-anchored affordance. Two variants: */\n/* */\n/* - `pill` — inline rounded button, brand green + white glyph + */\n/* label. Drops anywhere in card / header chrome. */\n/* - `fab` — circular floating action button, glyph only, */\n/* persistently anchored in the page corner. Carries an */\n/* `aria-label` so the SR announcement is \"Open WhatsApp */\n/* chat\" without rendering a loose visible caption. */\n/* */\n/* WhatsApp brand guidance requires the canonical #25D366 surface and */\n/* the official phone-bubble glyph — those live in `--brand-whatsapp` */\n/* tokens (added under `src/tokens/index.css`) so all four themes can */\n/* shift the green for accessible contrast without bleeding the brand */\n/* requirement into component code. */\n/* ------------------------------------------------------------------ */\n\nimport {\n forwardRef,\n useMemo,\n type AnchorHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\n\n/* ------------------------------------------------------------------ */\n/* WhatsApp glyph */\n/* */\n/* Inlined SVG — no external icon dep. The path matches WhatsApp's */\n/* official brand mark (speech bubble + phone). `currentColor` lets */\n/* the kit's `--brand-whatsapp-foreground` paint the glyph from a */\n/* single CVA class, so accessible-theme shifts apply without code. */\n/* ------------------------------------------------------------------ */\n\nexport function WhatsAppGlyph({\n className,\n}: {\n className?: string;\n}): ReactNode {\n return (\n /* Intrinsic size like a Lucide glyph, and the full size of its icon slot\n by default: with neither, WebKit lays a sizeless <svg> flex item out\n at 0x0, so Safari showed an empty button. */\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n height=\"24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className ?? 'ds:size-full ds:shrink-0'}\n >\n <path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.149-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.71.306 1.263.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 0 0-3.48-8.413Z\" />\n </svg>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst rootVariants = cva(\n [\n // `position` is provided by `positionVariants` below — `static`\n // sets `ds:relative` (so the pseudo-element touch-target anchors),\n // `bottom-end` / `bottom-start` set `ds:fixed`. Keeping `relative`\n // off the base avoids the cascade conflict that made `position:\n // relative` win against `position: fixed` in the compiled CSS\n // (booking-website was patching with `style={{position:'fixed'}}`).\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:font-medium',\n // The pill can shrink, so an unpinned glyph would squash horizontally\n // while its height held, distorting the brand mark.\n 'ds:[&_svg]:shrink-0',\n 'ds:bg-[var(--brand-whatsapp)] ds:text-[var(--brand-whatsapp-foreground)]',\n 'ds:hover:bg-[var(--brand-whatsapp-hover)]',\n 'ds:active:opacity-90',\n 'ds:transition-[background-color,box-shadow,opacity]',\n 'ds:duration-[var(--animation-duration)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n // Focus ring colour is `var(--ring)` (= `--primary` in light, ditto\n // through theme cascade) — NOT `--brand-whatsapp`. Painting the\n // ring brand-green on a brand-green surface makes it invisible.\n 'ds:focus-visible:outline-[var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n // Under Windows High Contrast Mode the bg + shadow are stripped;\n // repaint a solid border + swap the focus ring to CanvasText so\n // the affordance stays identifiable.\n 'ds:forced-colors:border ds:forced-colors:border-[ButtonBorder]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:disabled:opacity-50 ds:disabled:cursor-not-allowed',\n 'ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n variant: {\n // Pill — inline rounded button. Visible label is the brand\n // affordance text; glyph sits leading.\n //\n // No `whitespace-nowrap`: with it the pill's min-content width was\n // the whole label on one line, so a long label outgrew the viewport\n // and spilled off screen. Wrapping lets shrink-to-fit cap the pill.\n // `text-center` centres the wrapped line, the block padding keeps it\n // off the rounded edges, and `overflow-wrap` breaks a compound word\n // (German especially) that would otherwise still be too wide.\n pill: [\n 'ds:rounded-[var(--radius-full)] ds:gap-[var(--spacing-xs)]',\n 'ds:text-center ds:py-[var(--spacing-2xs)]',\n 'ds:[overflow-wrap:anywhere]',\n ].join(' '),\n // FAB — circular floating action button. Glyph only; the\n // label resolves into `aria-label`.\n fab: [\n 'ds:rounded-full ds:shadow-[var(--shadow-lg)]',\n 'ds:hover:shadow-[var(--shadow-xl)] ds:active:shadow-[var(--shadow-md)]',\n ].join(' '),\n },\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n },\n compoundVariants: [\n {\n variant: 'pill',\n size: 'sm',\n class:\n 'ds:ps-3 ds:pe-3.5 ds:text-[length:var(--font-size-sm)] ds:[&_svg]:size-4 ds:min-h-[var(--min-target-size)] ds:sm:min-h-9 ds:before:absolute ds:before:inset-x-[calc((var(--min-target-size)-100%)/-2)] ds:before:inset-y-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"] ds:sm:before:hidden',\n },\n {\n variant: 'pill',\n size: 'md',\n class:\n 'ds:min-h-10 ds:ps-4 ds:pe-5 ds:text-[length:var(--font-size-base)] ds:[&_svg]:size-5',\n },\n {\n variant: 'pill',\n size: 'lg',\n class:\n 'ds:min-h-12 ds:ps-5 ds:pe-6 ds:text-[length:var(--font-size-lg)] ds:[&_svg]:size-6',\n },\n // FAB — fixed square dimensions; the `sm` case mirrors the\n // FloatingActionButton's pseudo-target expansion below the\n // `sm:` breakpoint so a 40px circle still hits 44/48 px on\n // mobile.\n {\n variant: 'fab',\n size: 'sm',\n class:\n 'ds:h-10 ds:w-10 ds:[&_svg]:size-5 ds:before:absolute ds:before:inset-x-[calc((var(--min-target-size)-100%)/-2)] ds:before:inset-y-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"] ds:sm:before:hidden',\n },\n {\n variant: 'fab',\n size: 'md',\n class: 'ds:h-14 ds:w-14 ds:[&_svg]:size-7',\n },\n {\n variant: 'fab',\n size: 'lg',\n class: 'ds:h-16 ds:w-16 ds:[&_svg]:size-8',\n },\n ],\n defaultVariants: {\n variant: 'pill',\n size: 'md',\n },\n },\n);\n\nconst positionVariants = cva('', {\n variants: {\n position: {\n // `relative` so the `::before` pseudo touch-target (defined in\n // the `pill sm` / `fab sm` compound variants) anchors to the\n // button's box. The fixed-positioning variants below don't need\n // this — `position: fixed` is itself a positioning context for\n // descendants and pseudo-elements.\n static: 'ds:relative',\n // Only ONE inset is set, so the cap must reserve the opposite gutter\n // itself — otherwise a long label pins to its inset edge and spills\n // off the other one. The arbitrary-PROPERTY form is load-bearing:\n // `max-inline-size-[…]` is not a utility and emits nothing.\n 'bottom-end':\n 'ds:fixed ds:z-[var(--z-fixed)] ds:bottom-[calc(var(--spacing-lg)+env(safe-area-inset-bottom,0px))] ds:end-[var(--spacing-lg)] ds:[max-inline-size:calc(100%_-_(var(--spacing-lg)_*_2))]',\n 'bottom-start':\n 'ds:fixed ds:z-[var(--z-fixed)] ds:bottom-[calc(var(--spacing-lg)+env(safe-area-inset-bottom,0px))] ds:start-[var(--spacing-lg)] ds:[max-inline-size:calc(100%_-_(var(--spacing-lg)_*_2))]',\n },\n },\n defaultVariants: { position: 'static' },\n});\n\n/* ------------------------------------------------------------------ */\n/* Collapse — pill on wide viewports, glyph-only circle on narrow ones */\n/* */\n/* The booking site wants the pill with its question copy on desktop */\n/* and just the glyph on a phone. Doing it in CSS (`max-sm:` / */\n/* `max-md:`) instead of a JS media query means the server render and */\n/* the first paint already agree, so there is no flash of the wrong */\n/* shape. Below the breakpoint the root takes the `fab` chrome of the */\n/* same size and the label drops to `sr-only`, so the accessible name */\n/* is unchanged. Tailwind needs literal class strings, hence one entry */\n/* per breakpoint × size rather than a template. */\n/* ------------------------------------------------------------------ */\n\nconst collapseVariants = cva('', {\n variants: {\n collapseLabelBelow: {\n sm: 'ds:max-sm:gap-0 ds:max-sm:p-0 ds:max-sm:min-h-0 ds:max-sm:rounded-full ds:max-sm:shadow-[var(--shadow-lg)]',\n md: 'ds:max-md:gap-0 ds:max-md:p-0 ds:max-md:min-h-0 ds:max-md:rounded-full ds:max-md:shadow-[var(--shadow-lg)]',\n },\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n },\n compoundVariants: [\n // Mirrors the `fab` size ladder above. The `sm` circle keeps the\n // pseudo touch-target the `pill sm` compound already paints below\n // the `sm:` breakpoint, so 40px still hits 44/48px on a phone.\n {\n collapseLabelBelow: 'sm',\n size: 'sm',\n class: 'ds:max-sm:h-10 ds:max-sm:w-10 ds:max-sm:[&_svg]:size-5',\n },\n {\n collapseLabelBelow: 'sm',\n size: 'md',\n class: 'ds:max-sm:h-14 ds:max-sm:w-14 ds:max-sm:[&_svg]:size-7',\n },\n {\n collapseLabelBelow: 'sm',\n size: 'lg',\n class: 'ds:max-sm:h-16 ds:max-sm:w-16 ds:max-sm:[&_svg]:size-8',\n },\n // The `pill sm` pseudo touch-target only paints below `sm:`, so a\n // 40px circle collapsed at `md` would sit under the target minimum\n // between the two breakpoints. Size that one circle to the minimum\n // itself (44px, 48px in the accessible themes) instead.\n {\n collapseLabelBelow: 'md',\n size: 'sm',\n class:\n 'ds:max-md:h-[var(--min-target-size)] ds:max-md:w-[var(--min-target-size)] ds:max-md:[&_svg]:size-5',\n },\n {\n collapseLabelBelow: 'md',\n size: 'md',\n class: 'ds:max-md:h-14 ds:max-md:w-14 ds:max-md:[&_svg]:size-7',\n },\n {\n collapseLabelBelow: 'md',\n size: 'lg',\n class: 'ds:max-md:h-16 ds:max-md:w-16 ds:max-md:[&_svg]:size-8',\n },\n ],\n});\n\nconst collapsedLabelClass = {\n sm: 'ds:max-sm:sr-only',\n md: 'ds:max-md:sr-only',\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* URL builder */\n/* ------------------------------------------------------------------ */\n\n/**\n * Build a `wa.me` deep-link from an E.164 phone number and an\n * optional prefilled message. The number is stripped to digits — the\n * `wa.me` host requires digits only (no `+`, no separators).\n *\n * Returns `null` (not an empty `wa.me/` URL) when the input contains\n * no digits — the caller is then responsible for rendering a disabled\n * affordance rather than shipping a broken link. In dev a `console.warn`\n * fires so the typo is visible during development.\n */\nfunction buildWaMeUrl(phoneNumber: string, message?: string): string | null {\n const digits = phoneNumber.replace(/\\D/g, '');\n if (digits.length === 0) {\n if (\n typeof import.meta !== 'undefined' &&\n typeof import.meta.env !== 'undefined' &&\n import.meta.env.DEV === true\n ) {\n console.warn(\n `[WhatsAppButton] phoneNumber \"${phoneNumber}\" contains no digits — ` +\n `the affordance will render disabled. Pass an E.164 number ` +\n `(e.g. \"+393331234567\") to fix.`,\n );\n }\n return null;\n }\n const base = `https://wa.me/${digits}`;\n if (!message) return base;\n return `${base}?text=${encodeURIComponent(message)}`;\n}\n\n/* ------------------------------------------------------------------ */\n/* Props */\n/* ------------------------------------------------------------------ */\n\nexport interface WhatsAppButtonProps\n extends\n Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'children'>,\n VariantProps<typeof rootVariants>,\n VariantProps<typeof positionVariants> {\n /**\n * Phone number to chat to. E.164 format is recommended\n * (e.g. `+393331234567`). Any non-digit characters are stripped\n * before the URL is built — `wa.me` requires digits only.\n */\n phoneNumber: string;\n /**\n * Optional prefilled message. The receiver sees this in their\n * compose box. Keep it short and human — long pasted text is the\n * single most common reason consumers drop the affordance.\n */\n message?: string;\n /**\n * Override the visible / accessible label. Defaults to\n * `t('whatsApp.label')` (or `t('whatsApp.questionPrompt')` when\n * `tone=\"question\"`) for the pill variant, and\n * `t('whatsApp.fabLabel')` for the FAB.\n */\n label?: ReactNode;\n /**\n * Copy tone for the pill variant.\n * - `standard` (default) — brief \"Chat on WhatsApp\" affordance.\n * - `question` — invitational \"Have questions? Chat on WhatsApp\"\n * copy. Routes through `t('whatsApp.questionPrompt')`. Use on\n * public-facing surfaces (booking pages, marketing) where the\n * button is the only prompt encouraging engagement.\n *\n * Ignored for `variant=\"fab\"` — the floating action button is\n * glyph-only and its `aria-label` stays concise via `fabLabel`.\n */\n tone?: 'standard' | 'question';\n /**\n * Pill only. Below the named Tailwind breakpoint the pill becomes a\n * glyph-only circle (the `fab` chrome of the same `size`) and the\n * label moves to screen-reader-only text, so the accessible name is\n * unchanged. Pure CSS, so server render and first paint agree.\n * Use it where the pill's copy earns its space on desktop but would\n * crowd a phone: the booking site's practice page passes `\"sm\"`.\n *\n * Ignored for `variant=\"fab\"`, which is glyph-only already.\n */\n collapseLabelBelow?: 'sm' | 'md';\n}\n\n/* ------------------------------------------------------------------ */\n/* WhatsAppButton */\n/* ------------------------------------------------------------------ */\n\nexport const WhatsAppButton = forwardRef<\n HTMLAnchorElement,\n WhatsAppButtonProps\n>(\n (\n {\n phoneNumber,\n message,\n variant = 'pill',\n size = 'md',\n position,\n label,\n tone = 'standard',\n collapseLabelBelow,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const href = useMemo(\n () => buildWaMeUrl(phoneNumber, message),\n [phoneNumber, message],\n );\n // Default-label cascade:\n // FAB → `whatsApp.fabLabel` (always concise)\n // pill, tone=question → `whatsApp.questionPrompt` (invitational)\n // pill, tone=standard → `whatsApp.label` (default)\n // Consumer's `label` prop overrides any of the above.\n const defaultLabelKey =\n variant === 'fab'\n ? 'whatsApp.fabLabel'\n : tone === 'question'\n ? 'whatsApp.questionPrompt'\n : 'whatsApp.label';\n const resolvedLabel = label ?? t(defaultLabelKey);\n\n const collapse = variant === 'pill' ? collapseLabelBelow : undefined;\n const composedClassName = [\n rootVariants({ variant, size }),\n positionVariants({ position }),\n collapse ? collapseVariants({ collapseLabelBelow: collapse, size }) : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // When the input has no digits, render an `aria-disabled` anchor\n // with the same chrome but no `href` — assistive tech announces the\n // disabled state and click does nothing. `buildWaMeUrl` already\n // emitted a dev-mode warning above. `target` / `rel` are stripped\n // too because they're meaningless without `href`.\n const isDisabled = href === null;\n const commonAnchorProps = {\n ref,\n ...(isDisabled\n ? {}\n : {\n href: href as string,\n target: '_blank' as const,\n rel: 'noopener noreferrer' as const,\n }),\n /* An <a> without href has NO implicit role, and `aria-disabled` is\n prohibited on a roleless element (axe aria-prohibited-attr). Give\n the disabled anchor an explicit link role so the state is legal\n and assistive tech still announces it. */\n /* `tabIndex` too: an <a> without href is not focusable, and\n `aria-disabled` presupposes something focus CAN reach — otherwise\n the reason the control is disabled never reaches a keyboard. */\n ...(isDisabled ? { role: 'link' as const, tabIndex: 0 } : {}),\n 'aria-disabled': isDisabled ? true : undefined,\n 'data-component': 'whatsapp-button' as const,\n 'data-variant': variant,\n 'data-collapse-label-below': collapse,\n onClick: (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (isDisabled) event.preventDefault();\n rest.onClick?.(event);\n },\n className: composedClassName,\n };\n\n // Screen-reader cue for the new-tab behaviour. WCAG 3.2.5 / G201:\n // user-initiated link openings to a new context should be\n // announced. Reused `link.opensInNewTab` from the kit's `ui` ns —\n // single source of truth across every external-link affordance.\n const opensInNewTabSrText = isDisabled\n ? null\n : t('link.opensInNewTab', 'Opens in a new tab');\n\n if (variant === 'fab') {\n // FAB — circular, glyph-only. The accessible name lives on the\n // anchor's `aria-label` (resolved label). No visible caption,\n // which is exactly what the redesign fixes vs. the legacy\n // green-circle-with-loose-text affordance.\n const fabAriaLabel =\n typeof resolvedLabel === 'string'\n ? opensInNewTabSrText\n ? `${resolvedLabel} — ${opensInNewTabSrText}`\n : resolvedLabel\n : undefined;\n return (\n <a {...rest} {...commonAnchorProps} aria-label={fabAriaLabel}>\n <WhatsAppGlyph />\n {typeof resolvedLabel !== 'string' ? (\n <span className=\"ds:sr-only\">\n {resolvedLabel}\n {opensInNewTabSrText ? ` — ${opensInNewTabSrText}` : null}\n </span>\n ) : null}\n </a>\n );\n }\n\n return (\n <a {...rest} {...commonAnchorProps}>\n <WhatsAppGlyph />\n <span className={collapse ? collapsedLabelClass[collapse] : undefined}>\n {resolvedLabel}\n </span>\n {opensInNewTabSrText ? (\n <span className=\"ds:sr-only\"> — {opensInNewTabSrText}</span>\n ) : null}\n </a>\n );\n },\n);\nWhatsAppButton.displayName = 'WhatsAppButton';\n"],"names":["WhatsAppGlyph","className","jsx","rootVariants","cva","positionVariants","collapseVariants","collapsedLabelClass","buildWaMeUrl","phoneNumber","message","digits","base","WhatsAppButton","forwardRef","variant","size","position","label","tone","collapseLabelBelow","rest","ref","t","useTranslation","href","useMemo","resolvedLabel","collapse","composedClassName","isDisabled","commonAnchorProps","event","_a","opensInNewTabSrText","fabAriaLabel","jsxs"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "1.127.2",
3
+ "packageVersion": "1.129.0",
4
4
  "components": [
5
5
  {
6
6
  "kind": "component",
@@ -19993,8 +19993,24 @@
19993
19993
  "as": "toolbarIcon"
19994
19994
  },
19995
19995
  {
19996
- "component": "dropdown-menu",
19997
- "as": "displaySettings"
19996
+ "component": "panel-header",
19997
+ "as": "settingsPanelHeader"
19998
+ },
19999
+ {
20000
+ "component": "section-card",
20001
+ "as": "settingsSection"
20002
+ },
20003
+ {
20004
+ "component": "form-field",
20005
+ "as": "settingRow"
20006
+ },
20007
+ {
20008
+ "component": "select",
20009
+ "as": "settingSelect"
20010
+ },
20011
+ {
20012
+ "component": "switch",
20013
+ "as": "settingSwitch"
19998
20014
  },
19999
20015
  {
20000
20016
  "component": "date-picker",
@@ -20192,6 +20208,14 @@
20192
20208
  "component": "button",
20193
20209
  "as": "seriesScopeChange"
20194
20210
  },
20211
+ {
20212
+ "component": "dialog",
20213
+ "as": "documentScopeConfirm"
20214
+ },
20215
+ {
20216
+ "component": "radio-group",
20217
+ "as": "documentScope"
20218
+ },
20195
20219
  {
20196
20220
  "component": "dropdown-menu",
20197
20221
  "as": "signatureMenu"
@@ -20269,7 +20293,7 @@
20269
20293
  {
20270
20294
  "name": "browse_agenda",
20271
20295
  "safety": "read",
20272
- "description": "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.",
20296
+ "description": "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), and, in the settings overlay, the weekdays that show in every range. Each range change hands the new window to the host, which fetches the appointments for it.",
20273
20297
  "descriptionKey": "ui.agent.calendar.workflows.browseAgenda",
20274
20298
  "uiActions": [
20275
20299
  "calendar.today",
@@ -20323,17 +20347,20 @@
20323
20347
  {
20324
20348
  "name": "configure_display",
20325
20349
  "safety": "write",
20326
- "description": "Set the per-user display knobs in the cog's settings menu (each setting's row shows its current value and opens a submenu of options; on/off settings are switch rows; the last item resets to the defaults) — 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 (a preset from 10 to 60 minutes, or the value already saved), whether operators read as an initials disc or a dot plus full name, whether chairs read as a full name or a short code, whether the details panel offers the map link, the row density (compact or comfortable), the colour strength of the cards (tinted or solid), and whether cards show the operator or chair from the other axis. The same menu holds the appointment icon legend as a submenu. An agent drives the menu with instance id calendar-display-settings: set_value with a choice row's name (orientation, slotDensity, window, slotDuration, eventColorStyle, colorAssociation, careDescription, operatorNameDisplay, chairNameDisplay, defaultDurationMin) and one of its option values, or set_checked with a switch row's name (zebraRows, showTime, showCardContext, mapsLink); the menu opens for the moment when closed. The settings state lists each row's name, value and options while the menu is open. 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.",
20350
+ "description": "Set the per-user display knobs in the Settings panel, a tool of the side rail that the toolbar's settings button opens in place of the open tool while the calendar stays visible beside it. Its My calendar section holds layout, row density, the day window, slot precision (10, 15, 20, 30 or 60 minutes), zebra rows, the days of the week shown (a checkbox group of Monday to Sunday that keeps at least one ticked), the colour strength of the cards, what the cards are coloured by (the appointment's own colour, its care, its operator, its chair or its status: a view choice for this user that never changes a colour stored on an appointment), the care-description mode, show times, whether cards show the operator or chair from the other axis, the appointment icon legend, whether operators read as an initials disc or a dot plus full name, whether chairs read as a full name or a short code, whether the operator filter lists operators in groups or one at a time (shown only when the practice has operator groups), the default duration of a new appointment (a preset from 10 to 60 minutes, or the value already saved) and whether cancelled appointments show on the grid (off at the start; shown they are faded and cannot be dragged or resized) and whether the details panel offers the map link. A last Reset to defaults button returns every setting but the column axis to the workspace defaults. An agent opens the panel with the rail's open action and the id settings (the rail opens on Appointments), and closes it with the rail's close action. Each row is its own control with instance id calendar-display-settings-<name>: select set_value with a choice row's name (orientation, slotDensity, window, slotDuration, eventColorStyle, colorAssociation, careDescription, operatorNameDisplay, chairNameDisplay, operatorListMode, defaultDurationMin) and one of its option values, or switch set_checked with a switch row's name (zebraRows, showTime, showCardContext, showCancelled, mapsLink), or checkbox-group set_selection on calendar-display-settings-daysShown with the weekday numbers to show (1 to 6 for Monday to Saturday, 0 for Sunday). A change applies to the grid at once. 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. When the host backs it, the panel also holds a Practice section (switch rows calendar-display-settings-openOnHolidays and calendar-display-settings-careAllocationFilter, each present only if the host passed that setting): its changes are a draft until Save, which writes the practice's settings for everyone, so an agent sets the switches and leaves the Save to the person.",
20327
20351
  "descriptionKey": "ui.agent.calendar.workflows.configureDisplay",
20328
20352
  "uiActions": [
20329
- "dropdown-menu.open",
20330
- "dropdown-menu.close",
20331
- "dropdown-menu.set_value",
20332
- "dropdown-menu.set_checked"
20353
+ "control-room-rail.open",
20354
+ "control-room-rail.close",
20355
+ "select.set_value",
20356
+ "switch.set_checked",
20357
+ "checkbox-group.set_selection"
20333
20358
  ],
20334
20359
  "stateReads": [
20335
- "dropdown-menu.isOpen",
20336
- "dropdown-menu.settings"
20360
+ "control-room-rail.activeToolId",
20361
+ "select.value",
20362
+ "switch.checked",
20363
+ "checkbox-group.selection"
20337
20364
  ],
20338
20365
  "apiActions": [
20339
20366
  "calendarPreference.update"
@@ -20342,7 +20369,7 @@
20342
20369
  {
20343
20370
  "name": "dock_tool",
20344
20371
  "safety": "read",
20345
- "description": "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.",
20372
+ "description": "Open a workspace rail tool: Appointments, appointment editor / details, waiting list, patient notes, online bookings, free-slot finder or Settings (id settings, always present). Leaving Settings with unsaved Practice changes asks first, and a Practice save in flight holds the panel. 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.",
20346
20373
  "descriptionKey": "ui.agent.calendar.workflows.dockTool",
20347
20374
  "uiActions": [
20348
20375
  "control-room-rail.open",
@@ -20537,7 +20564,7 @@
20537
20564
  {
20538
20565
  "name": "delete_appointment",
20539
20566
  "safety": "destructive",
20540
- "description": "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.",
20567
+ "description": "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 belongs to a price-list recurrence (any occurrence) — so confirming can drop far more than the one card. Irreversible from this surface.",
20541
20568
  "descriptionKey": "ui.agent.calendar.workflows.deleteAppointment",
20542
20569
  "uiActions": [
20543
20570
  "calendar.focus_event",
@@ -20648,14 +20675,20 @@
20648
20675
  {
20649
20676
  "name": "create_document",
20650
20677
  "safety": "phi",
20651
- "description": "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.",
20678
+ "description": "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. On an occurrence of a price-list series a bill first opens a dialog: choose This visit or All visits, then Continue (Cancel creates nothing). A selection starts the host workflow; it does not prove that a document or bill was created. May write patient-identifiable data.",
20652
20679
  "descriptionKey": "ui.agent.calendar.workflows.createDocument",
20653
20680
  "uiActions": [
20654
20681
  "dropdown-menu.open",
20655
- "dropdown-menu.close"
20682
+ "dropdown-menu.close",
20683
+ "dialog.open",
20684
+ "dialog.close",
20685
+ "dialog.dismiss",
20686
+ "radio-group.set_value"
20656
20687
  ],
20657
20688
  "stateReads": [
20658
- "dropdown-menu.isOpen"
20689
+ "dropdown-menu.isOpen",
20690
+ "dialog.isOpen",
20691
+ "radio-group.value"
20659
20692
  ],
20660
20693
  "apiActions": []
20661
20694
  },
@@ -233,11 +233,11 @@
233
233
  "focusEvent": "Scroll an event into view and briefly highlight it."
234
234
  },
235
235
  "workflows": {
236
- "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.",
236
+ "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), and, in the settings overlay, the weekdays that show in every range. Each range change hands the new window to the host, which fetches the appointments for it.",
237
237
  "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.",
238
238
  "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.",
239
- "configureDisplay": "Set the per-user display knobs in the cog's settings menu (each setting's row shows its current value and opens a submenu of options; on/off settings are switch rows; the last item resets to the defaults) — 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 (a preset from 10 to 60 minutes, or the value already saved), whether operators read as an initials disc or a dot plus full name, whether chairs read as a full name or a short code, whether the details panel offers the map link, the row density (compact or comfortable), the colour strength of the cards (tinted or solid), and whether cards show the operator or chair from the other axis. The same menu holds the appointment icon legend as a submenu. An agent drives the menu with instance id calendar-display-settings: set_value with a choice row's name (orientation, slotDensity, window, slotDuration, eventColorStyle, colorAssociation, careDescription, operatorNameDisplay, chairNameDisplay, defaultDurationMin) and one of its option values, or set_checked with a switch row's name (zebraRows, showTime, showCardContext, mapsLink); the menu opens for the moment when closed. The settings state lists each row's name, value and options while the menu is open. 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.",
240
- "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.",
239
+ "configureDisplay": "Set the per-user display knobs in the Settings panel, a tool of the side rail that the toolbar's settings button opens in place of the open tool while the calendar stays visible beside it. Its My calendar section holds layout, row density, the day window, slot precision (10, 15, 20, 30 or 60 minutes), zebra rows, the days of the week shown (a checkbox group of Monday to Sunday that keeps at least one ticked), the colour strength of the cards, what the cards are coloured by (the appointment's own colour, its care, its operator, its chair or its status: a view choice for this user that never changes a colour stored on an appointment), the care-description mode, show times, whether cards show the operator or chair from the other axis, the appointment icon legend, whether operators read as an initials disc or a dot plus full name, whether chairs read as a full name or a short code, whether the operator filter lists operators in groups or one at a time (shown only when the practice has operator groups), the default duration of a new appointment (a preset from 10 to 60 minutes, or the value already saved) and whether cancelled appointments show on the grid (off at the start; shown they are faded and cannot be dragged or resized) and whether the details panel offers the map link. A last Reset to defaults button returns every setting but the column axis to the workspace defaults. An agent opens the panel with the rail's open action and the id settings (the rail opens on Appointments), and closes it with the rail's close action. Each row is its own control with instance id calendar-display-settings-<name>: select set_value with a choice row's name (orientation, slotDensity, window, slotDuration, eventColorStyle, colorAssociation, careDescription, operatorNameDisplay, chairNameDisplay, operatorListMode, defaultDurationMin) and one of its option values, or switch set_checked with a switch row's name (zebraRows, showTime, showCardContext, showCancelled, mapsLink), or checkbox-group set_selection on calendar-display-settings-daysShown with the weekday numbers to show (1 to 6 for Monday to Saturday, 0 for Sunday). A change applies to the grid at once. 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. When the host backs it, the panel also holds a Practice section (switch rows calendar-display-settings-openOnHolidays and calendar-display-settings-careAllocationFilter, each present only if the host passed that setting): its changes are a draft until Save, which writes the practice's settings for everyone, so an agent sets the switches and leaves the Save to the person.",
240
+ "dockTool": "Open a workspace rail tool: Appointments, appointment editor / details, waiting list, patient notes, online bookings, free-slot finder or Settings (id settings, always present). Leaving Settings with unsaved Practice changes asks first, and a Practice save in flight holds the panel. 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.",
241
241
  "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.",
242
242
  "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.",
243
243
  "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. A host without the tool rail shows the same form in AppointmentEditorDialog, a modal with no rail to open. 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. Repeats sets a frequency and, where the host allows it, a Custom rule (every N days, weeks, months or years; chosen weekdays, always including the first appointment's; or the day or nth weekday of the month) ending after a number of times or on a date. 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.",
@@ -246,12 +246,12 @@
246
246
  "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.",
247
247
  "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.",
248
248
  "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.",
249
- "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.",
249
+ "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 belongs to a price-list recurrence (any occurrence) — so confirming can drop far more than the one card. Irreversible from this surface.",
250
250
  "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.",
251
251
  "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.",
252
252
  "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.",
253
253
  "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.",
254
- "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.",
254
+ "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. On an occurrence of a price-list series a bill first opens a dialog: choose This visit or All visits, then Continue (Cancel creates nothing). A selection starts the host workflow; it does not prove that a document or bill was created. May write patient-identifiable data.",
255
255
  "messagePatientWhatsapp": "Reach the patient over WhatsApp from a waiting-list row. The affordance is a `wa.me` deep link the row opens in a new tab — it is disabled, and names its reason in its accessible name, when the entry carries no WhatsApp-capable number. There is no equivalent in the details panel: the send-reminder group is handed an empty channel list, because the host's legacy Snippets island is the only composing surface and no seam here mounts it. Hands a patient's contact detail to an outbound channel.",
256
256
  "filterWaitingList": "Narrow the waiting queue: the four quick views (all, patients without an appointment, appointment scheduled over 30 days ago, on the list over 30 days) and, behind \"Show advanced filters\", the platform's nine optional client-side inputs — patient, patient assigned, operator, appointment scheduled, appointment scheduled from / to, on the waiting list from / to and description — applied only when \"Filter list\" is pressed. The toggle carries a count badge while any input is set, and changing the quick view drops the form. Selection only.",
257
257
  "manageWaitingListEntry": "Add, amend or remove a waiting-list entry. The four-field form opens as a rail SUB-VIEW — from the toolbar split button's plus segment, from Add entry, or from a row's pencil — with a back arrow to the queue. Editing is refused on a row already linked to an appointment, because those fields belong to the appointment; the pencil stays focusable and names that reason. Remove deletes at once with no confirmation, platform parity, and its toast carries an Undo that puts the entry back. Writes patient-identifiable data.",
@@ -1,2 +1,2 @@
1
- /* @alfadocs/ui-kit 1.127.2 browser-support.js. Generated by scripts/build-browser-support.mjs: do not edit. */
1
+ /* @alfadocs/ui-kit 1.129.0 browser-support.js. Generated by scripts/build-browser-support.mjs: do not edit. */
2
2
  (function(){var j=[{id:"class-static-block",syntax:"{ class Probe { static { } } }"},{id:"object-has-own",check:function(e){return typeof e.Object.hasOwn=="function"}},{id:"structured-clone",check:function(e){return typeof e.structuredClone=="function"}}],C="alfadocs-browser-support",B="alfadocs:browser-support",R="AlfadocsBrowserSupport",U="AlfadocsBrowserSupportConfig",E="alfadocs.browserSupport.dismissedAt",D="alfadocs-browser-support",P="alfadocs-browser-support-title",A=0,W=1440*60*1e3,f="__alfadocsBrowserSupportProbe";function F(e){var r=e.document.currentScript;return r&&(r.nonce||r.getAttribute("nonce"))||""}function _(e,r,a){var t=e.document,o=t.createElement("script");a&&o.setAttribute("nonce",a),o.text=r;var s=t.head||t.documentElement;s.appendChild(o),s.removeChild(o)}function I(e,r){var a=F(e);if(!a)try{return new e.Function(r),!0}catch(o){if(o&&o.name==="SyntaxError")return!1}var t=e;try{return t[f]=0,_(e,"window."+f+" = 1;",a),t[f]!==1?null:(_(e,r+"\nwindow."+f+" = 2;",a),t[f]===2)}catch(o){return null}finally{delete t[f]}}function T(e,r){for(var a=[],t=!1,o=0;o<r.length;o++){var s=r[o],n=!0;if(s.syntax!==void 0)n=I(e,s.syntax);else if(s.check)try{n=s.check(e)}catch(i){n=!1}n===null?t=!0:n||a.push(s.id)}return a.length?a:t?null:a}function N(e,r){var a=String(e||"").toLowerCase().split(/[-_]/)[0];return a==="cn"&&(a="zh"),r.indexOf(a)>=0?a:r.indexOf("en")>=0?"en":r[0]}function M(e){var r=e.userAgent||"";return/iPad|iPhone|iPod/.test(r)?"ios":/Macintosh/.test(r)?(e.maxTouchPoints||0)>1?"ios":"mac":"other"}var w=[["Edge",/\b(?:Edg|EdgA|EdgiOS)\/(\d+)/],["Opera",/\b(?:OPR|OPT)\/(\d+)/],["Samsung Internet",/\bSamsungBrowser\/(\d+)/],["Firefox",/\b(?:Firefox|FxiOS)\/(\d+)/],["Chrome",/\b(?:Chrome|CriOS)\/(\d+)/],["Safari",/\bVersion\/(\d+(?:\.\d+)?)[\s\S]*\bSafari\//]];function L(e,r){for(var a=e.userAgent||"",t=0;t<w.length;t++){var o=w[t][1].exec(a);if(o){var s=w[t][0];if(r==="ios"&&s!=="Safari"){var n=/OS (\d+(?:_\d+)?) like Mac OS X/.exec(a),i=/iPhone|iPod/.test(a)?"iOS":"iPadOS";return{name:s,label:s+" ("+i+(n?" "+n[1].replace("_","."):"")+")"}}return{name:s,label:s+" "+o[1]}}}return null}function S(e,r,a){return e.replace(new RegExp("\\{\\{"+r+"\\}\\}","g"),function(){return a})}function H(e,r){if(!e||!/^\d{4}-\d{2}-\d{2}$/.test(e))return null;var a=new Date(e+"T00:00:00Z");if(isNaN(a.getTime()))return null;try{var t=r==="en"?"en-GB":r==="pt"?"pt-PT":r;return a.toLocaleDateString(t,{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"})}catch(o){return e}}function G(e,r,a,t){var o=a?S(e.title,"browser",a.label):e.titleUnknown,s=t?S(e.reasonWithDate,"date",t):e.reason,n=r==="ios"?e.steps.ios:r==="mac"&&a&&a.name==="Safari"?e.steps.macSafari:a?S(e.steps.other,"browser",a.name):e.steps.otherUnknown;return{title:o,text:s+" "+n}}function q(e){return e&&(/^https:\/\//i.test(e)||/^\/(?![/\\])/.test(e))?e:null}var z="http://www.w3.org/2000/svg";function y(e,r){for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&e.setAttribute(a,r[a])}function V(e,r){var a=e.createElementNS(z,"svg");y(a,r.attrs);for(var t=0;t<r.children.length;t++){var o=e.createElementNS(z,r.children[t].tag);y(o,r.children[t].attrs),a.appendChild(o)}return a}function p(e,r,a,t){var o=e.createElement(r);return o.className=a,t!==void 0&&o.appendChild(e.createTextNode(t)),o}function Z(e,r){var a=C,t=r.messages,o=G(t,r.device,r.browser,r.supportEnds),s=p(e,"div",a+" "+a+"--"+r.placement);if(s.setAttribute("data-component","browser-support-alert"),s.setAttribute("data-placement",r.placement),s.setAttribute("role",r.placement==="page"?"alert":"status"),s.setAttribute("lang",r.locale),s.setAttribute("dir",r.locale==="ar"?"rtl":"ltr"),r.icon){var n=p(e,"span",a+"__icon");n.setAttribute("aria-hidden","true"),n.appendChild(V(e,r.icon)),s.appendChild(n)}var i=p(e,"div",a+"__body"),l=p(e,"p",a+"__title",o.title);A+=1,l.id=P+"-"+A,r.placement==="page"&&(l.setAttribute("role","heading"),l.setAttribute("aria-level","2")),i.appendChild(l),i.appendChild(p(e,"p",a+"__text",o.text));var b=q(r.helpHref);if(b){var h=p(e,"a",a+"__link",t.help);h.setAttribute("href",b),i.appendChild(h)}s.appendChild(i);var u=r.onDismiss;if(r.placement==="banner"&&u){var d=p(e,"button",a+"__dismiss",t.dismiss);d.setAttribute("type","button"),d.setAttribute("aria-describedby",l.id);var g=u;d.addEventListener("click",function(){s.parentNode&&s.parentNode.removeChild(s),g()}),s.appendChild(d)}return s}function J(e){var r={},a=e.document.currentScript;a&&a.getAttribute&&(r.placement=a.getAttribute("data-placement")||void 0,r.locale=a.getAttribute("data-locale")||void 0,r.helpHref=a.getAttribute("data-help-href")||void 0,r.supportEnds=a.getAttribute("data-support-ends")||void 0);var t=e[U];return t&&(r.placement||(r.placement=t.placement),r.locale||(r.locale=t.locale),r.helpHref||(r.helpHref=t.helpHref),r.supportEnds||(r.supportEnds=t.supportEnds)),r}function K(e,r){try{var a=Number(e.localStorage.getItem(E));return a>0&&r-a<W}catch(t){return!1}}function Y(e,r){try{e.localStorage.setItem(E,String(r))}catch(a){}}function $(e,r){try{var a;if(typeof e.CustomEvent=="function")a=new e.CustomEvent(B,{detail:r});else{var t=e.document.createEvent("CustomEvent");t.initCustomEvent(B,!1,!1,r),a=t}e.dispatchEvent(a)}catch(o){}}function Q(e,r){var a=e.document.body,t=a.style.paddingBottom,o=0;try{o=parseFloat(e.getComputedStyle(a).paddingBottom)||0}catch(n){o=0}function s(){if(r.parentNode){var n=e.innerHeight-r.getBoundingClientRect().top;a.style.paddingBottom=Math.max(0,o+n)+"px"}}return s(),e.addEventListener("resize",s),function(){e.removeEventListener("resize",s),a.style.paddingBottom=t}}function X(e,r){e.document.body?r():e.document.addEventListener("DOMContentLoaded",r)}function O(e,r,a){var t=a&&a.now!==void 0?a.now:new e.Date().getTime(),o=a&&a.requirements||j,s=J(e),n=s.placement==="page"?"page":"banner",i=new RegExp("[?&]"+D+"=preview(&|$)").test(e.location.search||""),l=T(e,o),b=l===null?null:l.length===0,h=M(e.navigator),u=L(e.navigator,h),d={supported:b,missing:l||[],shown:!1,placement:n,preview:i,browser:u?u.label:null};e[R]=d;var g=i||b===!1&&!(n==="banner"&&K(e,t));if(!g)return d;var m=N(s.locale||e.document.documentElement.getAttribute("lang"),r.locales);return X(e,function(){var c=e.document;if(!c.querySelector("."+C)){var x=c.createElement("style");x.appendChild(c.createTextNode(r.css)),(c.head||c.documentElement).appendChild(x);var k=function(){},v=Z(c,{placement:n,locale:m,messages:r.messages[m],device:h,browser:u,supportEnds:H(s.supportEnds,m),helpHref:s.helpHref,icon:r.icon,onDismiss:function(){k(),i||Y(e,new e.Date().getTime())}});n==="page"?c.body.insertBefore(v,c.body.firstChild):(c.body.appendChild(v),k=Q(e,v)),d.shown=!0,$(e,d)}}),d}O(window,{css:".alfadocs-browser-support{--ad-bs-surface:#fff9eb;--ad-bs-border:#fac634;--ad-bs-text:#695316;--ad-bs-ring:#6761e5;--ad-bs-shadow:0 10px 30px #0000000f;--ad-bs-font:'Space Grotesk', 'Noto Sans SC', 'Noto Sans JP', 'Noto Sans Arabic', 'Noto Sans Devanagari', ui-sans-serif, system-ui, sans-serif;--ad-bs-font-size:16px;--ad-bs-line-height:1.6;--ad-bs-weight:600;--ad-bs-radius:8px;--ad-bs-border-width:1px;--ad-bs-space:16px;--ad-bs-space-sm:8px;--ad-bs-space-xs:4px;--ad-bs-icon:20px;--ad-bs-target:44px;--ad-bs-focus-width:2px;--ad-bs-focus-offset:2px;--ad-bs-page-width:640px;--ad-bs-z:80}\n.theme-accessible .alfadocs-browser-support{--ad-bs-surface:#f0eee8;--ad-bs-border:#695316;--ad-bs-ring:#39357e;--ad-bs-font:'Lexend', 'Noto Sans SC', 'Noto Sans JP', 'Noto Sans Arabic', 'Noto Sans Devanagari', ui-sans-serif, system-ui, sans-serif;--ad-bs-font-size:18px;--ad-bs-target:48px;--ad-bs-focus-width:3px;--ad-bs-focus-offset:3px}\n.theme-dark .alfadocs-browser-support{--ad-bs-surface:#3e3d50;--ad-bs-text:#fdedc0;--ad-bs-ring:#e040fb;--ad-bs-shadow:0 10px 30px #0006}\n.theme-dark.theme-accessible .alfadocs-browser-support{--ad-bs-surface:#2e2e3d;--ad-bs-border:#fdedc0;--ad-bs-text:#fdedc0;--ad-bs-ring:#fa76fc;--ad-bs-shadow:0 10px 30px #0006;--ad-bs-font:'Lexend', 'Noto Sans SC', 'Noto Sans JP', 'Noto Sans Arabic', 'Noto Sans Devanagari', ui-sans-serif, system-ui, sans-serif;--ad-bs-font-size:18px;--ad-bs-line-height:1.6;--ad-bs-weight:600;--ad-bs-radius:8px;--ad-bs-border-width:1px;--ad-bs-space:16px;--ad-bs-space-sm:8px;--ad-bs-space-xs:4px;--ad-bs-icon:20px;--ad-bs-target:48px;--ad-bs-focus-width:3px;--ad-bs-focus-offset:3px;--ad-bs-page-width:640px;--ad-bs-z:80}\n.alfadocs-browser-support,.alfadocs-browser-support *{box-sizing:border-box}\n.alfadocs-browser-support{display:flex;flex-wrap:wrap;align-items:flex-start;padding:var(--ad-bs-space);border:var(--ad-bs-border-width) solid var(--ad-bs-border);border-radius:var(--ad-bs-radius);background:var(--ad-bs-surface);color:var(--ad-bs-text);font-family:var(--ad-bs-font);font-size:var(--ad-bs-font-size);line-height:var(--ad-bs-line-height);text-align:start}\n.alfadocs-browser-support--page{width:calc(100% - var(--ad-bs-space) - var(--ad-bs-space));max-width:var(--ad-bs-page-width);margin-block-start:var(--ad-bs-space);margin-block-end:var(--ad-bs-space);margin-inline-start:auto;margin-inline-end:auto}\n.alfadocs-browser-support--banner{position:fixed;z-index:var(--ad-bs-z);bottom:var(--ad-bs-space);inset-inline-start:var(--ad-bs-space);width:calc(100% - var(--ad-bs-space) - var(--ad-bs-space));max-height:calc(100% - var(--ad-bs-space) - var(--ad-bs-space));overflow-y:auto;box-shadow:var(--ad-bs-shadow)}\n.alfadocs-browser-support__icon{flex:none;display:inline-flex;margin-inline-end:var(--ad-bs-space-sm)}\n.alfadocs-browser-support__icon svg{display:block;width:var(--ad-bs-icon);height:var(--ad-bs-icon)}\n.alfadocs-browser-support__body{flex:1 1 calc(var(--ad-bs-space) * 12);min-width:0;padding-inline-end:var(--ad-bs-space)}\n.alfadocs-browser-support__title,.alfadocs-browser-support__text{margin:0;font-size:inherit;line-height:inherit}\n.alfadocs-browser-support__title,.alfadocs-browser-support__link,.alfadocs-browser-support__dismiss{font-weight:var(--ad-bs-weight)}\n.alfadocs-browser-support__text{margin-block-start:var(--ad-bs-space-xs)}\n.alfadocs-browser-support .alfadocs-browser-support__link,.alfadocs-browser-support .alfadocs-browser-support__link:hover,.alfadocs-browser-support .alfadocs-browser-support__link:focus{display:inline-flex;align-items:center;min-height:var(--ad-bs-target);color:inherit;text-decoration:underline}\n.alfadocs-browser-support__dismiss{flex:none;min-height:var(--ad-bs-target);margin:0;margin-inline-start:auto;padding-block-start:0;padding-block-end:0;padding-inline-start:var(--ad-bs-space);padding-inline-end:var(--ad-bs-space);border:var(--ad-bs-border-width) solid currentColor;border-radius:var(--ad-bs-radius);background:transparent;color:inherit;font-family:inherit;font-size:inherit;line-height:inherit;cursor:pointer}\n.alfadocs-browser-support .alfadocs-browser-support__link:focus,.alfadocs-browser-support .alfadocs-browser-support__dismiss:focus{outline:var(--ad-bs-focus-width) solid var(--ad-bs-ring);outline-offset:var(--ad-bs-focus-offset);box-shadow:0 0 0 var(--ad-bs-focus-offset) var(--ad-bs-surface),0 0 0 calc(var(--ad-bs-focus-offset) + var(--ad-bs-focus-width)) var(--ad-bs-ring)}\n.alfadocs-browser-support .alfadocs-browser-support__link:focus:not(:focus-visible),.alfadocs-browser-support .alfadocs-browser-support__dismiss:focus:not(:focus-visible){outline:none;box-shadow:none}\n@media (forced-colors:active){.alfadocs-browser-support{border-color:CanvasText}.alfadocs-browser-support__dismiss{border-color:ButtonText}}\n@media print{.alfadocs-browser-support--banner{display:none}}",icon:{attrs:{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-triangle-alert","aria-hidden":"true",focusable:"false"},children:[{tag:"path",attrs:{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"}},{tag:"path",attrs:{d:"M12 9v4"}},{tag:"path",attrs:{d:"M12 17h.01"}}]},locales:["en","it","de","ar","fr","es","pt","nl","ro","sq","tr","pl","sv","ru","el","ja","zh","hi"],messages:{en:{title:"{{browser}} is out of date",titleUnknown:"Your browser is out of date",reason:"Older browsers miss security fixes, and Alfadocs will soon stop supporting this one.",reasonWithDate:"Older browsers miss security fixes, and Alfadocs will stop supporting this one on {{date}}.",steps:{ios:"Go to Settings, then General, then Software Update. If no update is offered, this device is too old for Alfadocs.",macSafari:"Update macOS to get a newer Safari, or use the latest Chrome or Firefox.",other:"Update {{browser}} to its latest version.",otherUnknown:"Install the latest version of Chrome, Edge or Firefox."},help:"How to update",dismiss:"Hide for today"},it:{title:"Il browser {{browser}} \xE8 obsoleto",titleUnknown:"Il tuo browser \xE8 obsoleto",reason:"I browser vecchi non ricevono le correzioni di sicurezza e Alfadocs smetter\xE0 presto di supportare questo browser.",reasonWithDate:"I browser vecchi non ricevono le correzioni di sicurezza e Alfadocs smetter\xE0 di supportare questo browser il {{date}}.",steps:{ios:"Apri Impostazioni, poi Generali, poi Aggiornamento software. Se non viene proposto alcun aggiornamento, questo dispositivo \xE8 troppo vecchio per Alfadocs.",macSafari:"Aggiorna macOS per avere un Safari pi\xF9 recente, oppure usa l'ultima versione di Chrome o Firefox.",other:"Aggiorna {{browser}} all'ultima versione.",otherUnknown:"Installa l'ultima versione di Chrome, Edge o Firefox."},help:"Come aggiornare",dismiss:"Nascondi per oggi"},de:{title:"Der Browser {{browser}} ist veraltet",titleUnknown:"Ihr Browser ist veraltet",reason:"\xC4lteren Browsern fehlen Sicherheitsupdates, und Alfadocs wird diesen Browser bald nicht mehr unterst\xFCtzen.",reasonWithDate:"\xC4lteren Browsern fehlen Sicherheitsupdates, und Alfadocs wird diesen Browser am {{date}} nicht mehr unterst\xFCtzen.",steps:{ios:"\xD6ffnen Sie Einstellungen, dann Allgemein, dann Softwareupdate. Wird kein Update angeboten, ist dieses Ger\xE4t zu alt f\xFCr Alfadocs.",macSafari:"Aktualisieren Sie macOS, um ein neueres Safari zu erhalten, oder verwenden Sie die neueste Version von Chrome oder Firefox.",other:"Aktualisieren Sie {{browser}} auf die neueste Version.",otherUnknown:"Installieren Sie die neueste Version von Chrome, Edge oder Firefox."},help:"So aktualisieren Sie",dismiss:"F\xFCr heute ausblenden"},ar:{title:"\u0627\u0644\u0645\u062A\u0635\u0641\u062D {{browser}} \u0642\u062F\u064A\u0645",titleUnknown:"\u0645\u062A\u0635\u0641\u062D\u0643 \u0642\u062F\u064A\u0645",reason:"\u0627\u0644\u0645\u062A\u0635\u0641\u062D\u0627\u062A \u0627\u0644\u0642\u062F\u064A\u0645\u0629 \u062A\u0641\u062A\u0642\u0631 \u0625\u0644\u0649 \u0625\u0635\u0644\u0627\u062D\u0627\u062A \u0627\u0644\u0623\u0645\u0627\u0646\u060C \u0648\u0633\u064A\u062A\u0648\u0642\u0641 Alfadocs \u0642\u0631\u064A\u0628\u064B\u0627 \u0639\u0646 \u062F\u0639\u0645 \u0647\u0630\u0627 \u0627\u0644\u0645\u062A\u0635\u0641\u062D.",reasonWithDate:"\u0627\u0644\u0645\u062A\u0635\u0641\u062D\u0627\u062A \u0627\u0644\u0642\u062F\u064A\u0645\u0629 \u062A\u0641\u062A\u0642\u0631 \u0625\u0644\u0649 \u0625\u0635\u0644\u0627\u062D\u0627\u062A \u0627\u0644\u0623\u0645\u0627\u0646\u060C \u0648\u0633\u064A\u062A\u0648\u0642\u0641 Alfadocs \u0639\u0646 \u062F\u0639\u0645 \u0647\u0630\u0627 \u0627\u0644\u0645\u062A\u0635\u0641\u062D \u0628\u062A\u0627\u0631\u064A\u062E {{date}}.",steps:{ios:"\u0627\u0641\u062A\u062D \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A\u060C \u062B\u0645 \u0639\u0627\u0645\u060C \u062B\u0645 \u062A\u062D\u062F\u064A\u062B \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062C. \u0625\u0630\u0627 \u0644\u0645 \u064A\u0638\u0647\u0631 \u0623\u064A \u062A\u062D\u062F\u064A\u062B\u060C \u0641\u0647\u0630\u0627 \u0627\u0644\u062C\u0647\u0627\u0632 \u0642\u062F\u064A\u0645 \u062C\u062F\u064B\u0627 \u0644\u062A\u0634\u063A\u064A\u0644 Alfadocs.",macSafari:"\u062D\u062F\u0651\u062B macOS \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0625\u0635\u062F\u0627\u0631 \u0623\u062D\u062F\u062B \u0645\u0646 Safari\u060C \u0623\u0648 \u0627\u0633\u062A\u062E\u062F\u0645 \u0623\u062D\u062F\u062B \u0625\u0635\u062F\u0627\u0631 \u0645\u0646 Chrome \u0623\u0648 Firefox.",other:"\u062D\u062F\u0651\u062B {{browser}} \u0625\u0644\u0649 \u0623\u062D\u062F\u062B \u0625\u0635\u062F\u0627\u0631.",otherUnknown:"\u062B\u0628\u0651\u062A \u0623\u062D\u062F\u062B \u0625\u0635\u062F\u0627\u0631 \u0645\u0646 Chrome \u0623\u0648 Edge \u0623\u0648 Firefox."},help:"\u0643\u064A\u0641\u064A\u0629 \u0627\u0644\u062A\u062D\u062F\u064A\u062B",dismiss:"\u0625\u062E\u0641\u0627\u0621 \u0644\u0644\u064A\u0648\u0645"},fr:{title:"Le navigateur {{browser}} est obsol\xE8te",titleUnknown:"Votre navigateur est obsol\xE8te",reason:"Les anciens navigateurs ne re\xE7oivent pas les correctifs de s\xE9curit\xE9, et Alfadocs ne prendra bient\xF4t plus en charge celui-ci.",reasonWithDate:"Les anciens navigateurs ne re\xE7oivent pas les correctifs de s\xE9curit\xE9, et Alfadocs ne prendra plus en charge celui-ci le {{date}}.",steps:{ios:"Ouvrez R\xE9glages, puis G\xE9n\xE9ral, puis Mise \xE0 jour logicielle. Si aucune mise \xE0 jour n'est propos\xE9e, cet appareil est trop ancien pour Alfadocs.",macSafari:"Mettez \xE0 jour macOS pour obtenir un Safari plus r\xE9cent, ou utilisez la derni\xE8re version de Chrome ou de Firefox.",other:"Mettez \xE0 jour {{browser}} vers sa derni\xE8re version.",otherUnknown:"Installez la derni\xE8re version de Chrome, Edge ou Firefox."},help:"Comment mettre \xE0 jour",dismiss:"Masquer pour aujourd'hui"},es:{title:"El navegador {{browser}} est\xE1 desactualizado",titleUnknown:"Su navegador est\xE1 desactualizado",reason:"Los navegadores antiguos carecen de correcciones de seguridad, y pronto Alfadocs dejar\xE1 de admitir este navegador.",reasonWithDate:"Los navegadores antiguos carecen de correcciones de seguridad, y Alfadocs dejar\xE1 de admitir este navegador el {{date}}.",steps:{ios:"Abra Ajustes, luego General y despu\xE9s Actualizaci\xF3n de software. Si no se ofrece ninguna actualizaci\xF3n, este dispositivo es demasiado antiguo para Alfadocs.",macSafari:"Actualice macOS para obtener un Safari m\xE1s reciente, o use la \xFAltima versi\xF3n de Chrome o Firefox.",other:"Actualice {{browser}} a su \xFAltima versi\xF3n.",otherUnknown:"Instale la \xFAltima versi\xF3n de Chrome, Edge o Firefox."},help:"C\xF3mo actualizar",dismiss:"Ocultar por hoy"},pt:{title:"O navegador {{browser}} est\xE1 desatualizado",titleUnknown:"O seu navegador est\xE1 desatualizado",reason:"Os navegadores antigos n\xE3o recebem corre\xE7\xF5es de seguran\xE7a e o Alfadocs deixar\xE1 em breve de suportar este navegador.",reasonWithDate:"Os navegadores antigos n\xE3o recebem corre\xE7\xF5es de seguran\xE7a e o Alfadocs deixar\xE1 de suportar este navegador a {{date}}.",steps:{ios:"Abra Defini\xE7\xF5es, depois Geral e depois Atualiza\xE7\xE3o de Software. Se n\xE3o for oferecida nenhuma atualiza\xE7\xE3o, este dispositivo \xE9 demasiado antigo para o Alfadocs.",macSafari:"Atualize o macOS para obter um Safari mais recente, ou use a vers\xE3o mais recente do Chrome ou do Firefox.",other:"Atualize {{browser}} para a vers\xE3o mais recente.",otherUnknown:"Instale a vers\xE3o mais recente do Chrome, Edge ou Firefox."},help:"Como atualizar",dismiss:"Ocultar por hoje"},nl:{title:"De browser {{browser}} is verouderd",titleUnknown:"Deze browser is verouderd",reason:"Oude browsers missen beveiligingsupdates en Alfadocs stopt binnenkort met de ondersteuning van deze browser.",reasonWithDate:"Oude browsers missen beveiligingsupdates en Alfadocs stopt op {{date}} met de ondersteuning van deze browser.",steps:{ios:"Open Instellingen, dan Algemeen, dan Software-update. Als er geen update wordt aangeboden, is dit apparaat te oud voor Alfadocs.",macSafari:"Werk macOS bij voor een nieuwere Safari, of gebruik de nieuwste versie van Chrome of Firefox.",other:"Werk {{browser}} bij naar de nieuwste versie.",otherUnknown:"Installeer de nieuwste versie van Chrome, Edge of Firefox."},help:"Zo werk je bij",dismiss:"Vandaag verbergen"},ro:{title:"Browserul {{browser}} este \xEEnvechit",titleUnknown:"Browserul dumneavoastr\u0103 este \xEEnvechit",reason:"Browserele vechi nu primesc actualiz\u0103ri de securitate, iar \xEEn cur\xE2nd Alfadocs nu va mai suporta acest browser.",reasonWithDate:"Browserele vechi nu primesc actualiz\u0103ri de securitate, iar Alfadocs nu va mai suporta acest browser \xEEncep\xE2nd cu {{date}}.",steps:{ios:"Deschide\u021Bi Set\u0103ri, apoi General, apoi Actualizare software. Dac\u0103 nu este oferit\u0103 nicio actualizare, acest dispozitiv este prea vechi pentru Alfadocs.",macSafari:"Actualiza\u021Bi macOS pentru a ob\u021Bine un Safari mai nou sau folosi\u021Bi cea mai recent\u0103 versiune de Chrome sau Firefox.",other:"Actualiza\u021Bi {{browser}} la cea mai recent\u0103 versiune.",otherUnknown:"Instala\u021Bi cea mai recent\u0103 versiune de Chrome, Edge sau Firefox."},help:"Cum actualiza\u021Bi",dismiss:"Ascunde\u021Bi pentru azi"},sq:{title:"Shfletuesi {{browser}} \xEBsht\xEB i vjetruar",titleUnknown:"Shfletuesi juaj \xEBsht\xEB i vjetruar",reason:"Shfletuesit e vjet\xEBr nuk marrin p\xEBrdit\xEBsime sigurie dhe Alfadocs s\xEB shpejti do t\xEB ndaloj\xEB mb\xEBshtetjen e k\xEBtij shfletuesi.",reasonWithDate:"Shfletuesit e vjet\xEBr nuk marrin p\xEBrdit\xEBsime sigurie dhe Alfadocs do t\xEB ndaloj\xEB mb\xEBshtetjen e k\xEBtij shfletuesi m\xEB {{date}}.",steps:{ios:"Hapni Cil\xEBsimet (Settings), pastaj T\xEB p\xEBrgjithshme (General), pastaj P\xEBrdit\xEBsimi i softuerit (Software Update). N\xEBse nuk ofrohet asnj\xEB p\xEBrdit\xEBsim, kjo pajisje \xEBsht\xEB shum\xEB e vjet\xEBr p\xEBr Alfadocs.",macSafari:"P\xEBrdit\xEBsoni macOS p\xEBr t\xEB pasur nj\xEB Safari m\xEB t\xEB ri, ose p\xEBrdorni versionin m\xEB t\xEB fundit t\xEB Chrome ose Firefox.",other:"P\xEBrdit\xEBsoni {{browser}} n\xEB versionin m\xEB t\xEB fundit.",otherUnknown:"Instaloni versionin m\xEB t\xEB fundit t\xEB Chrome, Edge ose Firefox."},help:"Si t\xEB p\xEBrdit\xEBsoni",dismiss:"Fshihni p\xEBr sot"},tr:{title:"{{browser}} taray\u0131c\u0131s\u0131 g\xFCncel de\u011Fil",titleUnknown:"Taray\u0131c\u0131n\u0131z g\xFCncel de\u011Fil",reason:"Eski taray\u0131c\u0131larda g\xFCvenlik d\xFCzeltmeleri bulunmaz ve Alfadocs yak\u0131nda bu taray\u0131c\u0131y\u0131 desteklemeyi b\u0131rakacak.",reasonWithDate:"Eski taray\u0131c\u0131larda g\xFCvenlik d\xFCzeltmeleri bulunmaz ve Alfadocs {{date}} tarihinde bu taray\u0131c\u0131y\u0131 desteklemeyi b\u0131rakacak.",steps:{ios:"Ayarlar'\u0131, ard\u0131ndan Genel'i, ard\u0131ndan Yaz\u0131l\u0131m G\xFCncelleme'yi a\xE7\u0131n. G\xFCncelleme sunulmuyorsa bu cihaz Alfadocs i\xE7in \xE7ok eski.",macSafari:"Daha yeni bir Safari i\xE7in macOS'i g\xFCncelleyin veya Chrome ya da Firefox'un en son s\xFCr\xFCm\xFCn\xFC kullan\u0131n.",other:"{{browser}} taray\u0131c\u0131s\u0131n\u0131 en son s\xFCr\xFCme g\xFCncelleyin.",otherUnknown:"Chrome, Edge veya Firefox'un en son s\xFCr\xFCm\xFCn\xFC y\xFCkleyin."},help:"Nas\u0131l g\xFCncellenir",dismiss:"Bug\xFCn gizle"},pl:{title:"Przegl\u0105darka {{browser}} jest nieaktualna",titleUnknown:"Twoja przegl\u0105darka jest nieaktualna",reason:"Starsze przegl\u0105darki nie dostaj\u0105 poprawek zabezpiecze\u0144, a Alfadocs wkr\xF3tce przestanie obs\u0142ugiwa\u0107 t\u0119 przegl\u0105dark\u0119.",reasonWithDate:"Starsze przegl\u0105darki nie dostaj\u0105 poprawek zabezpiecze\u0144, a Alfadocs przestanie obs\u0142ugiwa\u0107 t\u0119 przegl\u0105dark\u0119 {{date}}.",steps:{ios:"Otw\xF3rz Ustawienia, potem Og\xF3lne, potem Aktualizacja oprogramowania. Je\u015Bli nie ma dost\u0119pnej aktualizacji, to urz\u0105dzenie jest zbyt stare dla Alfadocs.",macSafari:"Zaktualizuj macOS, aby dosta\u0107 nowsz\u0105 wersj\u0119 Safari, albo u\u017Cyj najnowszej wersji Chrome lub Firefox.",other:"Zaktualizuj przegl\u0105dark\u0119 {{browser}} do najnowszej wersji.",otherUnknown:"Zainstaluj najnowsz\u0105 wersj\u0119 Chrome, Edge lub Firefox."},help:"Jak zaktualizowa\u0107",dismiss:"Ukryj na dzi\u015B"},sv:{title:"Webbl\xE4saren {{browser}} \xE4r f\xF6r\xE5ldrad",titleUnknown:"Din webbl\xE4sare \xE4r f\xF6r\xE5ldrad",reason:"\xC4ldre webbl\xE4sare saknar s\xE4kerhetsfixar, och Alfadocs slutar snart att st\xF6dja den h\xE4r webbl\xE4saren.",reasonWithDate:"\xC4ldre webbl\xE4sare saknar s\xE4kerhetsfixar, och Alfadocs slutar st\xF6dja den h\xE4r webbl\xE4saren den {{date}}.",steps:{ios:"\xD6ppna Inst\xE4llningar, sedan Allm\xE4nt och sedan Programuppdatering. Om ingen uppdatering erbjuds \xE4r den h\xE4r enheten f\xF6r gammal f\xF6r Alfadocs.",macSafari:"Uppdatera macOS f\xF6r att f\xE5 en nyare Safari, eller anv\xE4nd den senaste versionen av Chrome eller Firefox.",other:"Uppdatera {{browser}} till den senaste versionen.",otherUnknown:"Installera den senaste versionen av Chrome, Edge eller Firefox."},help:"S\xE5 uppdaterar du",dismiss:"D\xF6lj f\xF6r idag"},ru:{title:"\u0411\u0440\u0430\u0443\u0437\u0435\u0440 {{browser}} \u0443\u0441\u0442\u0430\u0440\u0435\u043B",titleUnknown:"\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0443\u0441\u0442\u0430\u0440\u0435\u043B",reason:"\u0412 \u0441\u0442\u0430\u0440\u044B\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u043D\u0435\u0442 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0439 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438, \u0438 Alfadocs \u0441\u043A\u043E\u0440\u043E \u043F\u0435\u0440\u0435\u0441\u0442\u0430\u043D\u0435\u0442 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044C \u044D\u0442\u043E\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440.",reasonWithDate:"\u0412 \u0441\u0442\u0430\u0440\u044B\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u043D\u0435\u0442 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0439 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438, \u0438 Alfadocs \u043F\u0435\u0440\u0435\u0441\u0442\u0430\u043D\u0435\u0442 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044C \u044D\u0442\u043E\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441 {{date}}.",steps:{ios:"\u041E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \xAB\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438\xBB, \u0437\u0430\u0442\u0435\u043C \xAB\u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435\xBB, \u0437\u0430\u0442\u0435\u043C \xAB\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u041F\u041E\xBB. \u0415\u0441\u043B\u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u043D\u0435 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442\u0441\u044F, \u044D\u0442\u043E \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u043E \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0441\u0442\u0430\u0440\u043E\u0435 \u0434\u043B\u044F Alfadocs.",macSafari:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u0435 macOS, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0431\u043E\u043B\u0435\u0435 \u043D\u043E\u0432\u0443\u044E \u0432\u0435\u0440\u0441\u0438\u044E Safari, \u0438\u043B\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u0432\u0435\u0440\u0441\u0438\u044E Chrome \u0438\u043B\u0438 Firefox.",other:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 {{browser}} \u0434\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.",otherUnknown:"\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u0432\u0435\u0440\u0441\u0438\u044E Chrome, Edge \u0438\u043B\u0438 Firefox."},help:"\u041A\u0430\u043A \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C",dismiss:"\u0421\u043A\u0440\u044B\u0442\u044C \u043D\u0430 \u0441\u0435\u0433\u043E\u0434\u043D\u044F"},el:{title:"\u03A4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 {{browser}} \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BE\u03B5\u03C0\u03B5\u03C1\u03B1\u03C3\u03BC\u03AD\u03BD\u03BF",titleUnknown:"\u03A4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03AE\u03C2 \u03C3\u03B1\u03C2 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BE\u03B5\u03C0\u03B5\u03C1\u03B1\u03C3\u03BC\u03AD\u03BD\u03BF",reason:"\u03A4\u03B1 \u03C0\u03B1\u03BB\u03B9\u03AC \u03C0\u03C1\u03BF\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 \u03B4\u03B5\u03BD \u03AD\u03C7\u03BF\u03C5\u03BD \u03C4\u03B9\u03C2 \u03B4\u03B9\u03BF\u03C1\u03B8\u03CE\u03C3\u03B5\u03B9\u03C2 \u03B1\u03C3\u03C6\u03B1\u03BB\u03B5\u03AF\u03B1\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03BF Alfadocs \u03B8\u03B1 \u03C3\u03C4\u03B1\u03BC\u03B1\u03C4\u03AE\u03C3\u03B5\u03B9 \u03C3\u03CD\u03BD\u03C4\u03BF\u03BC\u03B1 \u03BD\u03B1 \u03C5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03AF\u03B6\u03B5\u03B9 \u03B1\u03C5\u03C4\u03CC \u03C4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2.",reasonWithDate:"\u03A4\u03B1 \u03C0\u03B1\u03BB\u03B9\u03AC \u03C0\u03C1\u03BF\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 \u03B4\u03B5\u03BD \u03AD\u03C7\u03BF\u03C5\u03BD \u03C4\u03B9\u03C2 \u03B4\u03B9\u03BF\u03C1\u03B8\u03CE\u03C3\u03B5\u03B9\u03C2 \u03B1\u03C3\u03C6\u03B1\u03BB\u03B5\u03AF\u03B1\u03C2 \u03BA\u03B1\u03B9 \u03C4\u03BF Alfadocs \u03B8\u03B1 \u03C3\u03C4\u03B1\u03BC\u03B1\u03C4\u03AE\u03C3\u03B5\u03B9 \u03BD\u03B1 \u03C5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03AF\u03B6\u03B5\u03B9 \u03B1\u03C5\u03C4\u03CC \u03C4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 \u03C3\u03C4\u03B9\u03C2 {{date}}.",steps:{ios:"\u0391\u03BD\u03BF\u03AF\u03BE\u03C4\u03B5 \u03C4\u03B9\u03C2 \u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2, \u03BC\u03B5\u03C4\u03AC \u0393\u03B5\u03BD\u03B9\u03BA\u03AC \u03BA\u03B1\u03B9 \u03BC\u03B5\u03C4\u03AC \u0395\u03BD\u03B7\u03BC\u03AD\u03C1\u03C9\u03C3\u03B7 \u03BB\u03BF\u03B3\u03B9\u03C3\u03BC\u03B9\u03BA\u03BF\u03CD. \u0391\u03BD \u03B4\u03B5\u03BD \u03C0\u03C1\u03BF\u03C3\u03C6\u03AD\u03C1\u03B5\u03C4\u03B1\u03B9 \u03B5\u03BD\u03B7\u03BC\u03AD\u03C1\u03C9\u03C3\u03B7, \u03B1\u03C5\u03C4\u03AE \u03B7 \u03C3\u03C5\u03C3\u03BA\u03B5\u03C5\u03AE \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C0\u03BF\u03BB\u03CD \u03C0\u03B1\u03BB\u03B9\u03AC \u03B3\u03B9\u03B1 \u03C4\u03BF Alfadocs.",macSafari:"\u0395\u03BD\u03B7\u03BC\u03B5\u03C1\u03CE\u03C3\u03C4\u03B5 \u03C4\u03BF macOS \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03B1\u03C0\u03BF\u03BA\u03C4\u03AE\u03C3\u03B5\u03C4\u03B5 \u03BD\u03B5\u03CC\u03C4\u03B5\u03C1\u03BF Safari \u03AE \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03C4\u03B5 \u03C4\u03B7\u03BD \u03C0\u03B9\u03BF \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03B7 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7 \u03C4\u03BF\u03C5 Chrome \u03AE \u03C4\u03BF\u03C5 Firefox.",other:"\u0395\u03BD\u03B7\u03BC\u03B5\u03C1\u03CE\u03C3\u03C4\u03B5 \u03C4\u03BF \u03C0\u03C1\u03CC\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 {{browser}} \u03C3\u03C4\u03B7\u03BD \u03C0\u03B9\u03BF \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03B7 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7.",otherUnknown:"\u0395\u03B3\u03BA\u03B1\u03C4\u03B1\u03C3\u03C4\u03AE\u03C3\u03C4\u03B5 \u03C4\u03B7\u03BD \u03C0\u03B9\u03BF \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03B7 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7 \u03C4\u03BF\u03C5 Chrome, \u03C4\u03BF\u03C5 Edge \u03AE \u03C4\u03BF\u03C5 Firefox."},help:"\u03A0\u03CE\u03C2 \u03BD\u03B1 \u03B5\u03BD\u03B7\u03BC\u03B5\u03C1\u03CE\u03C3\u03B5\u03C4\u03B5",dismiss:"\u0391\u03C0\u03CC\u03BA\u03C1\u03C5\u03C8\u03B7 \u03B3\u03B9\u03B1 \u03C3\u03AE\u03BC\u03B5\u03C1\u03B1"},ja:{title:"{{browser}}\u306F\u53E4\u304F\u306A\u3063\u3066\u3044\u307E\u3059",titleUnknown:"\u304A\u4F7F\u3044\u306E\u30D6\u30E9\u30A6\u30B6\u306F\u53E4\u304F\u306A\u3063\u3066\u3044\u307E\u3059",reason:"\u53E4\u3044\u30D6\u30E9\u30A6\u30B6\u306B\u306F\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u4FEE\u6B63\u304C\u63D0\u4F9B\u3055\u308C\u307E\u305B\u3093\u3002Alfadocs\u3082\u9593\u3082\u306A\u304F\u3053\u306E\u30D6\u30E9\u30A6\u30B6\u306E\u30B5\u30DD\u30FC\u30C8\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002",reasonWithDate:"\u53E4\u3044\u30D6\u30E9\u30A6\u30B6\u306B\u306F\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u4FEE\u6B63\u304C\u63D0\u4F9B\u3055\u308C\u307E\u305B\u3093\u3002Alfadocs\u306F{{date}}\u306B\u3053\u306E\u30D6\u30E9\u30A6\u30B6\u306E\u30B5\u30DD\u30FC\u30C8\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002",steps:{ios:"\u300C\u8A2D\u5B9A\u300D\u3001\u300C\u4E00\u822C\u300D\u3001\u300C\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u30FB\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u300D\u306E\u9806\u306B\u958B\u304D\u307E\u3059\u3002\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u304C\u8868\u793A\u3055\u308C\u306A\u3044\u5834\u5408\u3001\u3053\u306E\u30C7\u30D0\u30A4\u30B9\u306FAlfadocs\u306B\u5BFE\u5FDC\u3059\u308B\u306B\u306F\u53E4\u3059\u304E\u307E\u3059\u3002",macSafari:"macOS\u3092\u66F4\u65B0\u3057\u3066\u65B0\u3057\u3044Safari\u3092\u5165\u624B\u3059\u308B\u304B\u3001\u6700\u65B0\u306EChrome\u307E\u305F\u306FFirefox\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002",other:"{{browser}}\u3092\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\u306B\u66F4\u65B0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",otherUnknown:"Chrome\u3001Edge\u3001\u307E\u305F\u306FFirefox\u306E\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},help:"\u66F4\u65B0\u65B9\u6CD5",dismiss:"\u4ECA\u65E5\u306F\u975E\u8868\u793A"},zh:{title:"{{browser}} \u5DF2\u8FC7\u65F6",titleUnknown:"\u60A8\u7684\u6D4F\u89C8\u5668\u5DF2\u8FC7\u65F6",reason:"\u65E7\u7248\u6D4F\u89C8\u5668\u7F3A\u5C11\u5B89\u5168\u4FEE\u590D\uFF0CAlfadocs \u4E5F\u5373\u5C06\u505C\u6B62\u652F\u6301\u6B64\u6D4F\u89C8\u5668\u3002",reasonWithDate:"\u65E7\u7248\u6D4F\u89C8\u5668\u7F3A\u5C11\u5B89\u5168\u4FEE\u590D\uFF0CAlfadocs \u5C06\u4E8E {{date}} \u505C\u6B62\u652F\u6301\u6B64\u6D4F\u89C8\u5668\u3002",steps:{ios:"\u4F9D\u6B21\u6253\u5F00\u201C\u8BBE\u7F6E\u201D\u3001\u201C\u901A\u7528\u201D\u3001\u201C\u8F6F\u4EF6\u66F4\u65B0\u201D\u3002\u5982\u679C\u6CA1\u6709\u53EF\u7528\u66F4\u65B0\uFF0C\u8BF4\u660E\u6B64\u8BBE\u5907\u592A\u65E7\uFF0C\u65E0\u6CD5\u4F7F\u7528 Alfadocs\u3002",macSafari:"\u8BF7\u66F4\u65B0 macOS \u4EE5\u83B7\u5F97\u66F4\u65B0\u7248\u672C\u7684 Safari\uFF0C\u6216\u4F7F\u7528\u6700\u65B0\u7248 Chrome \u6216 Firefox\u3002",other:"\u8BF7\u5C06 {{browser}} \u66F4\u65B0\u5230\u6700\u65B0\u7248\u672C\u3002",otherUnknown:"\u8BF7\u5B89\u88C5\u6700\u65B0\u7248 Chrome\u3001Edge \u6216 Firefox\u3002"},help:"\u5982\u4F55\u66F4\u65B0",dismiss:"\u4ECA\u65E5\u9690\u85CF"},hi:{title:"{{browser}} \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092A\u0941\u0930\u093E\u0928\u093E \u0939\u094B \u091A\u0941\u0915\u093E \u0939\u0948",titleUnknown:"\u0906\u092A\u0915\u093E \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092A\u0941\u0930\u093E\u0928\u093E \u0939\u094B \u091A\u0941\u0915\u093E \u0939\u0948",reason:"\u092A\u0941\u0930\u093E\u0928\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0941\u0927\u093E\u0930 \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u0924\u0947, \u0914\u0930 Alfadocs \u091C\u0932\u094D\u0926 \u0939\u0940 \u0907\u0938 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u0915\u094B \u0938\u092A\u094B\u0930\u094D\u091F \u0915\u0930\u0928\u093E \u092C\u0902\u0926 \u0915\u0930 \u0926\u0947\u0917\u093E\u0964",reasonWithDate:"\u092A\u0941\u0930\u093E\u0928\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0941\u0927\u093E\u0930 \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u0924\u0947, \u0914\u0930 Alfadocs {{date}} \u0915\u094B \u0907\u0938 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u0915\u094B \u0938\u092A\u094B\u0930\u094D\u091F \u0915\u0930\u0928\u093E \u092C\u0902\u0926 \u0915\u0930 \u0926\u0947\u0917\u093E\u0964",steps:{ios:"\u0938\u0947\u091F\u093F\u0902\u0917 \u0916\u094B\u0932\u0947\u0902, \u092B\u093F\u0930 \u0938\u093E\u092E\u093E\u0928\u094D\u092F, \u092B\u093F\u0930 \u0938\u0949\u092B\u093C\u094D\u091F\u0935\u0947\u092F\u0930 \u0905\u092A\u0921\u0947\u091F\u0964 \u0905\u0917\u0930 \u0915\u094B\u0908 \u0905\u092A\u0921\u0947\u091F \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u0924\u093E, \u0924\u094B \u092F\u0939 \u0921\u093F\u0935\u093E\u0907\u0938 Alfadocs \u0915\u0947 \u0932\u093F\u090F \u092C\u0939\u0941\u0924 \u092A\u0941\u0930\u093E\u0928\u093E \u0939\u0948\u0964",macSafari:"\u0928\u092F\u093E Safari \u092A\u093E\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F macOS \u0905\u092A\u0921\u0947\u091F \u0915\u0930\u0947\u0902, \u092F\u093E Chrome \u092F\u093E Firefox \u0915\u093E \u0928\u0935\u0940\u0928\u0924\u092E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930\u0947\u0902\u0964",other:"{{browser}} \u0915\u094B \u0909\u0938\u0915\u0947 \u0928\u0935\u0940\u0928\u0924\u092E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u092E\u0947\u0902 \u0905\u092A\u0921\u0947\u091F \u0915\u0930\u0947\u0902\u0964",otherUnknown:"Chrome, Edge \u092F\u093E Firefox \u0915\u093E \u0928\u0935\u0940\u0928\u0924\u092E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902\u0964"},help:"\u0905\u092A\u0921\u0947\u091F \u0915\u0948\u0938\u0947 \u0915\u0930\u0947\u0902",dismiss:"\u0906\u091C \u0915\u0947 \u0932\u093F\u090F \u091B\u093F\u092A\u093E\u090F\u0902"}}});})();
@@ -19,6 +19,16 @@ export interface PatientPickerProps {
19
19
  placeholder: string;
20
20
  size?: 'sm' | 'md';
21
21
  disabled?: boolean;
22
+ /** A "create this patient" action. Shown under the search while no patient
23
+ * is chosen, so it is at hand when the search finds nobody. `onCreate`
24
+ * gets the last text typed in the search. Omit it and no action shows. */
25
+ createAction?: PatientPickerCreateAction;
26
+ }
27
+ export interface PatientPickerCreateAction {
28
+ /** Already translated. */
29
+ label: string;
30
+ onCreate: (typedText: string) => void;
31
+ loading?: boolean;
22
32
  }
23
33
  export declare function PatientPicker({ patients, searchPatients, ...props }: PatientPickerProps): import("react/jsx-runtime").JSX.Element;
24
34
  //# sourceMappingURL=patient-picker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"patient-picker.d.ts","sourceRoot":"","sources":["../../../src/components/_shared/patient-picker.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;uCAGuC;AACvC,MAAM,MAAM,aAAa,GAAG,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,KAC7B,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAAC;AAEzC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACtC,wCAAwC;IACxC,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAa,EACb,cAAc,EACd,GAAG,KAAK,EACT,EAAE,kBAAkB,2CAsBpB"}
1
+ {"version":3,"file":"patient-picker.d.ts","sourceRoot":"","sources":["../../../src/components/_shared/patient-picker.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;uCAGuC;AACvC,MAAM,MAAM,aAAa,GAAG,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,KAC7B,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAAC;AAEzC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACtC,wCAAwC;IACxC,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;+EAE2E;IAC3E,YAAY,CAAC,EAAE,yBAAyB,CAAC;CAC1C;AAED,MAAM,WAAW,yBAAyB;IACxC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAwBD,wBAAgB,aAAa,CAAC,EAC5B,QAAa,EACb,cAAc,EACd,GAAG,KAAK,EACT,EAAE,kBAAkB,2CAKpB"}
@@ -1,5 +1,5 @@
1
- import { A as p } from "../../_chunks/appointment-card-0PebvrOS.js";
2
- import { A as e, a as o, b as r } from "../../_chunks/appointment-tray-B04zKY7g.js";
1
+ import { A as p } from "../../_chunks/appointment-card-vbUsDh70.js";
2
+ import { A as e, a as o, b as r } from "../../_chunks/appointment-tray-BhiXetjs.js";
3
3
  import { i } from "../../_chunks/is-safe-url-DkETxeHz.js";
4
4
  export {
5
5
  p as AppointmentCard,
@@ -1,6 +1,6 @@
1
1
  import { type HTMLAttributes } from 'react';
2
2
  import type { CalendarEventStatus } from '../calendar';
3
- import type { AppointmentDetailsChairLabel, AppointmentDetailsHistory, AppointmentDetailsNotesPreview, AppointmentDetailsOperatorLabel, AppointmentDetailsState, AppointmentDocumentKind } from './appointment-details-panel.types';
3
+ import type { AppointmentDetailsChairLabel, AppointmentDetailsHistory, AppointmentDetailsNotesPreview, AppointmentDetailsOperatorLabel, AppointmentDetailsShortcuts, AppointmentDetailsState, AppointmentDocumentKind } from './appointment-details-panel.types';
4
4
  export interface AppointmentDetailsPanelProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'title' | 'onCopy'> {
5
5
  /** The read, or the shell state while there is none. Pair it with
6
6
  * `useAppointmentDetailsRead`, which keeps the latest selection. */
@@ -75,6 +75,11 @@ export interface AppointmentDetailsPanelProps extends Omit<HTMLAttributes<HTMLDi
75
75
  * translated Error: the sub-view stays open and shows it. Absent = the
76
76
  * description is read-only. */
77
77
  onDescriptionChange?: (description: string, eventId: string) => Promise<void>;
78
+ /** An appointment with no patient (an online booking to complete, or any
79
+ * row with none) gets Assign patient as the FIRST action. The host opens
80
+ * its own flow (the To complete one). Absent = withheld; also withheld
81
+ * under `readOnly`. */
82
+ onAssignPatient?: (eventId: string) => void;
78
83
  /** Hand over to the host's editor. */
79
84
  onEdit?: (eventId: string) => void;
80
85
  /** Arm the host's move placement. */
@@ -94,8 +99,25 @@ export interface AppointmentDetailsPanelProps extends Omit<HTMLAttributes<HTMLDi
94
99
  /** A host-composed WhatsApp link, opened in a new tab. Withheld under
95
100
  * `privacy`, because it carries the patient's number. */
96
101
  whatsappUrl?: string;
102
+ /** For a practice with no WhatsApp: the button stays and calls this to
103
+ * open the host's buy flow instead of sending. Ignored when
104
+ * `onWhatsApp` or `whatsappUrl` is set. Absent = no button. */
105
+ onBuyWhatsApp?: (eventId: string) => void;
97
106
  /** Server-built link to the task page, opened in the same tab. */
98
107
  createTaskUrl?: string;
108
+ /** Opens the host's signature request (SMS, email, WhatsApp or this
109
+ * device) for the appointment. Shown beside the documents to sign, and
110
+ * only while one is still to sign. Absent = withheld. Under `privacy`
111
+ * it goes with the patient card. Call-and-forget: the panel does not
112
+ * wait for it. */
113
+ onRequestSignature?: (eventId: string) => void;
114
+ /** The old pop-over's links, each a host seam: set up advanced
115
+ * signature, renew the anamnesis, unlock online payments and open the
116
+ * care plan. A member the host leaves out is withheld. Under `privacy`
117
+ * none shows, because the patient card and the plan name do not. They
118
+ * stay under `readOnly`: they are the host's to withhold, as Create
119
+ * task is. */
120
+ shortcuts?: AppointmentDetailsShortcuts;
99
121
  /** The create-document kinds the user may use, and what each does. The
100
122
  * menu keeps the platform's order. */
101
123
  documents?: {
@@ -1 +1 @@
1
- {"version":3,"file":"appointment-details-panel.d.ts","sourceRoot":"","sources":["../../../src/components/appointment-details-panel/appointment-details-panel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"appointment-details-panel.d.ts","sourceRoot":"","sources":["../../../src/components/appointment-details-panel/appointment-details-panel.tsx"],"names":[],"mappings":"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"}