@alfadocs/ui-kit 1.90.1 → 1.91.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 (223) hide show
  1. package/dist/_chunks/address-autocomplete-DR4Xn23Z.js +519 -0
  2. package/dist/_chunks/{address-fields-CfnXK8RT.js → address-fields-qxQkGwPf.js} +5 -5
  3. package/dist/_chunks/{agenda-card-BDuvreCe.js → agenda-card-BhY342MA.js} +2 -2
  4. package/dist/_chunks/{agenda-tray-D-jvptdo.js → agenda-tray-BmxBGEci.js} +2 -2
  5. package/dist/_chunks/{ai-permission-notice-CoW22jx1.js → ai-permission-notice-VNh3W57L.js} +2 -2
  6. package/dist/_chunks/{alia-sidebar-CsTRAxC8.js → alia-sidebar-ovRX_oti.js} +3 -3
  7. package/dist/_chunks/{anamnesis-summary-rows-fbEQwcuW.js → anamnesis-summary-rows-EKPfVCmh.js} +2 -2
  8. package/dist/_chunks/{appointment-card-5JMWi9_f.js → appointment-card-Bstc1p7a.js} +2 -2
  9. package/dist/_chunks/{appointment-peek-39BwVMUf.js → appointment-peek-C0kKqnFk.js} +2 -2
  10. package/dist/_chunks/{appointment-timeline-1-Za2miy.js → appointment-timeline-rbt9AwHO.js} +2 -2
  11. package/dist/_chunks/{appointment-tray-Dwc8MSIQ.js → appointment-tray-6zd8RLIL.js} +2 -2
  12. package/dist/_chunks/autocomplete-BXMcNoa3.js +562 -0
  13. package/dist/_chunks/{avatar-BPiPL7ND.js → avatar-a6042Ox2.js} +52 -52
  14. package/dist/_chunks/{balance-badge-cell-C4FYwmrZ.js → balance-badge-cell-BtJvre1-.js} +3 -3
  15. package/dist/_chunks/booking-opt_h7Uc.js +4590 -0
  16. package/dist/_chunks/{calendar-ClB-jWH1.js → calendar-CmiMS4FJ.js} +2 -2
  17. package/dist/_chunks/{calendar-appointment-editor-dialog-C1v2MNE4.js → calendar-appointment-editor-dialog-sJKLoVJ2.js} +11 -11
  18. package/dist/_chunks/{care-plan-card-BYCPNDvA.js → care-plan-card-DD9rEWYN.js} +2 -2
  19. package/dist/_chunks/{care-plan-header-BzsAg6oY.js → care-plan-header-CXUJQt8Q.js} +2 -2
  20. package/dist/_chunks/{chat-message-CmFJdEre.js → chat-message-LRO_6Ee3.js} +2 -2
  21. package/dist/_chunks/{checkbox-BjDv-r3o.js → checkbox-a7Sh-dXb.js} +32 -31
  22. package/dist/_chunks/{checkbox-group-Cw2H5qaq.js → checkbox-group-eGdv9fZc.js} +2 -2
  23. package/dist/_chunks/{city-input-CJVGswxp.js → city-input-CA59CjnV.js} +2 -2
  24. package/dist/_chunks/{clinical-note-card-Caidqcwa.js → clinical-note-card-Cut2lNmu.js} +3 -3
  25. package/dist/_chunks/{combobox-CDPm_n0p.js → combobox-D-gpgEDy.js} +314 -294
  26. package/dist/_chunks/{contact-card-Czu60UvU.js → contact-card-ClvEDM9e.js} +2 -2
  27. package/dist/_chunks/{contact-profile-card-Da1vmJQI.js → contact-profile-card-CX45mZA3.js} +106 -95
  28. package/dist/_chunks/{country-select-DQ8q7ypA.js → country-select-BfmX9y5i.js} +2 -2
  29. package/dist/_chunks/{data-table-B_IcS0Ke.js → data-table-CqQgoNsU.js} +2 -2
  30. package/dist/_chunks/{dependent-selector-C4kOgO8b.js → dependent-selector-CyNi7M_f.js} +2 -2
  31. package/dist/_chunks/{entity-summary-BLxzSSXK.js → entity-summary-B_bOloqP.js} +3 -3
  32. package/dist/_chunks/error-page-B0fGNTRB.js +419 -0
  33. package/dist/_chunks/{face-scheme-BgJGFDTa.js → face-scheme-BKSE98bo.js} +2 -2
  34. package/dist/_chunks/{file-manager-C9YOT-Dn.js → file-manager-BnI1ZWZu.js} +2 -2
  35. package/dist/_chunks/{header-settings-BVhjndtV.js → header-settings-BeA2fnol.js} +24 -23
  36. package/dist/_chunks/{heatmap-HTz3Jvzy.js → heatmap-fCxwNz2o.js} +2 -2
  37. package/dist/_chunks/{languages-CZqBaPwI.js → languages-CGLX6Qpe.js} +3 -15
  38. package/dist/_chunks/link-DtCfnLnF.js +332 -0
  39. package/dist/_chunks/{link-cell-renderer-C0ynDik7.js → link-cell-renderer-BS3V4LA6.js} +4 -4
  40. package/dist/_chunks/{login-dev-card-DYwbL5sD.js → login-dev-card-BZBR58mu.js} +2 -2
  41. package/dist/_chunks/{map-view-Bvi06RVh.js → map-view-UrNgxBy3.js} +260 -237
  42. package/dist/_chunks/{index.modern-BeRXQVdc.js → maps-core-gate-DkNqGkm3.js} +360 -319
  43. package/dist/_chunks/{marketplace-app-shell-x_abo_ye.js → marketplace-app-shell-CJQtx3sv.js} +3 -3
  44. package/dist/_chunks/{message-card-CvCnCssc.js → message-card-B6SduXJv.js} +2 -2
  45. package/dist/_chunks/{message-tray-IJYvy6Cf.js → message-tray-Cllf-v0G.js} +2 -2
  46. package/dist/_chunks/{nav-grid-Oc4aCPrg.js → nav-grid-D2xVcHTO.js} +2 -2
  47. package/dist/_chunks/{note-attachment-DIlIQ7JF.js → note-attachment-cnj2JRrg.js} +2 -2
  48. package/dist/_chunks/{note-timeline-KzL52MmB.js → note-timeline-BrjHBQfx.js} +2 -2
  49. package/dist/_chunks/{notes-panel-CZO1qsD-.js → notes-panel-ib7I3aNf.js} +3 -3
  50. package/dist/_chunks/{operator-hero-6aAIQaFZ.js → operator-hero-C_5B-8Qp.js} +43 -41
  51. package/dist/_chunks/{patient-details-D0P5eog5.js → patient-details-BjcUpD9S.js} +3 -3
  52. package/dist/_chunks/{patient-field-row-R73dZJY6.js → patient-field-row-B0tdiaWi.js} +6 -6
  53. package/dist/_chunks/patient-search-Ca9j5cWb.js +1306 -0
  54. package/dist/_chunks/{patient-summary-card-6U74-ivO.js → patient-summary-card-Cvv6_Ugk.js} +4 -4
  55. package/dist/_chunks/{payment-request-card-MndSlVoK.js → payment-request-card-BfGauFY0.js} +2 -2
  56. package/dist/_chunks/{periodontal-diagnosis-B9YmmVmM.js → periodontal-diagnosis-DD3hrg9X.js} +2 -2
  57. package/dist/_chunks/{permission-matrix-BoQjENGV.js → permission-matrix-BJ6sg3Zp.js} +3 -3
  58. package/dist/_chunks/{practice-profile-hero-qfrsFQI_.js → practice-profile-hero-ClzE-4CB.js} +76 -73
  59. package/dist/_chunks/{practice-results-B61krlwu.js → practice-results-CQ_KvEXK.js} +517 -514
  60. package/dist/_chunks/{product-hub-panel-Blag8t8f.js → product-hub-panel-bHi7lkVD.js} +2 -2
  61. package/dist/_chunks/{province-select-CPdTwEob.js → province-select-D64whw0m.js} +2 -2
  62. package/dist/_chunks/public-footer-IoRWoAMz.js +596 -0
  63. package/dist/_chunks/{registration-form-DmP3YUfp.js → registration-form-CRm6DaB9.js} +2 -2
  64. package/dist/_chunks/{reviews-panel-UzQQLb-z.js → reviews-panel-B7InBORU.js} +42 -41
  65. package/dist/_chunks/{rich-text-editor-BZTyxQBd.js → rich-text-editor-BfEu57dk.js} +3 -3
  66. package/dist/_chunks/{signature-request-DjY-X62H.js → signature-request-DvhyrRpn.js} +3 -3
  67. package/dist/_chunks/{signed-out-frame-G-3ATOdu.js → signed-out-frame-CgRXOUzi.js} +2 -2
  68. package/dist/_chunks/{slot-grid-Bb13H9Rl.js → slot-grid-B-IAFX3C.js} +183 -170
  69. package/dist/_chunks/{task-editor-BOETWbjU.js → task-editor-CI1SKUNc.js} +2 -2
  70. package/dist/_chunks/{timeline-wUuTDFY_.js → timeline-BcYHdP56.js} +2 -2
  71. package/dist/_chunks/{use-appointment-details-read-CWN-nJCZ.js → use-appointment-details-read-D8vDg0sg.js} +5 -5
  72. package/dist/_chunks/{voice-control-panel-BziKE-KK.js → voice-control-panel-BP0otrID.js} +2 -2
  73. package/dist/_chunks/{workflow-webhook-action-DulCpCRz.js → workflow-webhook-action-B_nBJ_ht.js} +2 -2
  74. package/dist/agent-catalog.json +3 -3
  75. package/dist/agent-i18n/en.json +1 -1
  76. package/dist/components/_shared/maps-core-gate.d.ts +18 -0
  77. package/dist/components/_shared/social-brand-icons.d.ts +29 -0
  78. package/dist/components/address-autocomplete/index.js +1 -1
  79. package/dist/components/address-fields/index.js +1 -1
  80. package/dist/components/agenda-card/index.js +1 -1
  81. package/dist/components/agenda-tray/index.js +1 -1
  82. package/dist/components/ai-permission-notice/index.js +1 -1
  83. package/dist/components/appointment-card/index.js +2 -2
  84. package/dist/components/appointment-details-panel/index.js +1 -1
  85. package/dist/components/appointment-peek/index.js +1 -1
  86. package/dist/components/appointment-timeline/index.js +1 -1
  87. package/dist/components/autocomplete/index.js +1 -1
  88. package/dist/components/avatar/avatar.d.ts +14 -0
  89. package/dist/components/avatar/index.js +1 -1
  90. package/dist/components/booking/booking-types.d.ts +26 -0
  91. package/dist/components/booking/index.js +1 -1
  92. package/dist/components/booking/slot-load-state.d.ts +11 -0
  93. package/dist/components/calendar/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/chat-message/index.js +1 -1
  97. package/dist/components/checkbox/index.js +1 -1
  98. package/dist/components/checkbox-group/index.js +1 -1
  99. package/dist/components/city-input/index.js +1 -1
  100. package/dist/components/clinical-note-card/index.js +1 -1
  101. package/dist/components/combobox/index.js +1 -1
  102. package/dist/components/contact-card/index.js +1 -1
  103. package/dist/components/contact-profile-card/index.js +1 -1
  104. package/dist/components/country-select/index.js +1 -1
  105. package/dist/components/data-table/index.js +2 -2
  106. package/dist/components/dependent-selector/index.js +1 -1
  107. package/dist/components/entity-summary/index.js +1 -1
  108. package/dist/components/face-scheme/index.js +1 -1
  109. package/dist/components/file-manager/index.js +1 -1
  110. package/dist/components/header-settings/header-settings.d.ts +2 -1
  111. package/dist/components/header-settings/index.js +1 -1
  112. package/dist/components/heatmap/index.js +1 -1
  113. package/dist/components/link/index.js +1 -1
  114. package/dist/components/link/link.d.ts +10 -1
  115. package/dist/components/link/social-url.d.ts +71 -0
  116. package/dist/components/map-view/index.js +1 -1
  117. package/dist/components/message-card/index.js +1 -1
  118. package/dist/components/message-tray/index.js +1 -1
  119. package/dist/components/nav-grid/index.js +1 -1
  120. package/dist/components/note-timeline/index.js +1 -1
  121. package/dist/components/notes-panel/index.js +1 -1
  122. package/dist/components/operator-hero/index.js +1 -1
  123. package/dist/components/operator-hero/operator-hero.d.ts +6 -0
  124. package/dist/components/patient-details/index.js +1 -1
  125. package/dist/components/patient-search/index.js +1 -1
  126. package/dist/components/patient-summary-card/index.js +1 -1
  127. package/dist/components/patient-table/index.js +1 -1
  128. package/dist/components/payment-card/index.js +1 -1
  129. package/dist/components/periodontal-diagnosis/index.js +1 -1
  130. package/dist/components/permission-matrix/index.js +1 -1
  131. package/dist/components/practice-profile-hero/index.js +1 -1
  132. package/dist/components/practice-profile-hero/practice-profile-hero.d.ts +6 -0
  133. package/dist/components/practice-results/index.js +1 -1
  134. package/dist/components/practice-results/practice-results.d.ts +8 -2
  135. package/dist/components/product-hub-tray/index.js +1 -1
  136. package/dist/components/province-select/index.js +1 -1
  137. package/dist/components/public-footer/index.js +1 -1
  138. package/dist/components/public-footer/public-footer.d.ts +13 -1
  139. package/dist/components/public-footer/socials.d.ts +6 -5
  140. package/dist/components/reviews-panel/index.js +1 -1
  141. package/dist/components/rich-text-editor/index.js +1 -1
  142. package/dist/components/slot-grid/index.js +1 -1
  143. package/dist/components/slot-grid/slot-grid.d.ts +2 -0
  144. package/dist/components/task-editor/index.js +1 -1
  145. package/dist/components/timeline/index.js +1 -1
  146. package/dist/components/voice-control-panel/index.js +1 -1
  147. package/dist/host-compat.css +1 -10
  148. package/dist/i18n/config.js +224 -96
  149. package/dist/i18n/locales/ar.d.ts +3 -0
  150. package/dist/i18n/locales/ar.js +4 -1
  151. package/dist/i18n/locales/de.d.ts +3 -0
  152. package/dist/i18n/locales/de.js +4 -1
  153. package/dist/i18n/locales/el.d.ts +3 -0
  154. package/dist/i18n/locales/el.js +4 -1
  155. package/dist/i18n/locales/en.d.ts +3 -0
  156. package/dist/i18n/locales/en.js +3 -0
  157. package/dist/i18n/locales/es.d.ts +3 -0
  158. package/dist/i18n/locales/es.js +4 -1
  159. package/dist/i18n/locales/fr.d.ts +3 -0
  160. package/dist/i18n/locales/fr.js +4 -1
  161. package/dist/i18n/locales/hi.d.ts +3 -0
  162. package/dist/i18n/locales/hi.js +4 -1
  163. package/dist/i18n/locales/it.d.ts +3 -0
  164. package/dist/i18n/locales/it.js +4 -1
  165. package/dist/i18n/locales/ja.d.ts +3 -0
  166. package/dist/i18n/locales/ja.js +4 -1
  167. package/dist/i18n/locales/nl.d.ts +3 -0
  168. package/dist/i18n/locales/nl.js +4 -1
  169. package/dist/i18n/locales/pl.d.ts +3 -0
  170. package/dist/i18n/locales/pl.js +4 -1
  171. package/dist/i18n/locales/pt.d.ts +3 -0
  172. package/dist/i18n/locales/pt.js +4 -1
  173. package/dist/i18n/locales/ro.d.ts +3 -0
  174. package/dist/i18n/locales/ro.js +4 -1
  175. package/dist/i18n/locales/ru.d.ts +3 -0
  176. package/dist/i18n/locales/ru.js +4 -1
  177. package/dist/i18n/locales/sq.d.ts +3 -0
  178. package/dist/i18n/locales/sq.js +4 -1
  179. package/dist/i18n/locales/sv.d.ts +3 -0
  180. package/dist/i18n/locales/sv.js +4 -1
  181. package/dist/i18n/locales/tr.d.ts +3 -0
  182. package/dist/i18n/locales/tr.js +4 -1
  183. package/dist/i18n/locales/zh.d.ts +3 -0
  184. package/dist/i18n/locales/zh.js +4 -1
  185. package/dist/index.js +68 -68
  186. package/dist/locales/ar.json +4 -1
  187. package/dist/locales/de.json +4 -1
  188. package/dist/locales/el.json +4 -1
  189. package/dist/locales/en.json +3 -0
  190. package/dist/locales/es.json +4 -1
  191. package/dist/locales/fr.json +4 -1
  192. package/dist/locales/hi.json +4 -1
  193. package/dist/locales/it.json +4 -1
  194. package/dist/locales/ja.json +4 -1
  195. package/dist/locales/nl.json +4 -1
  196. package/dist/locales/pl.json +4 -1
  197. package/dist/locales/pt.json +4 -1
  198. package/dist/locales/ro.json +4 -1
  199. package/dist/locales/ru.json +4 -1
  200. package/dist/locales/sq.json +4 -1
  201. package/dist/locales/sv.json +4 -1
  202. package/dist/locales/tr.json +4 -1
  203. package/dist/locales/zh.json +4 -1
  204. package/dist/patterns/alia-assistant/index.js +1 -1
  205. package/dist/patterns/anamnesis/index.js +1 -1
  206. package/dist/patterns/calendar/index.js +1 -1
  207. package/dist/patterns/error-page/error-page-english.d.ts +71 -0
  208. package/dist/patterns/error-page/index.js +1 -1
  209. package/dist/patterns/login-form/index.js +1 -1
  210. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  211. package/dist/patterns/registration-form/index.js +1 -1
  212. package/dist/patterns/signature-request/index.js +1 -1
  213. package/dist/patterns/signed-out-frame/index.js +1 -1
  214. package/dist/patterns/workflow-webhook-action/index.js +1 -1
  215. package/dist/tokens.css +1 -1
  216. package/package.json +1 -1
  217. package/dist/_chunks/address-autocomplete-bPR2mNBt.js +0 -498
  218. package/dist/_chunks/autocomplete-CnB1mHGc.js +0 -539
  219. package/dist/_chunks/booking-C0FoW8Yx.js +0 -4336
  220. package/dist/_chunks/error-page-Bhai-spN.js +0 -344
  221. package/dist/_chunks/link-N5_YpLtm.js +0 -138
  222. package/dist/_chunks/patient-search-CCOUZABE.js +0 -1196
  223. package/dist/_chunks/public-footer-CXOrdAaS.js +0 -568
@@ -1,4 +1,4 @@
1
- import { B as s, C as l, N as n, P as t, a as C, T as i, b as o, g as T, u as p } from "../../_chunks/balance-badge-cell-C4FYwmrZ.js";
1
+ import { B as s, C as l, N as n, P as t, a as C, T as i, b as o, g as T, u as p } from "../../_chunks/balance-badge-cell-BtJvre1-.js";
2
2
  export {
3
3
  s as BalanceBadgeCell,
4
4
  l as CarePlanStatusCell,
@@ -1,4 +1,4 @@
1
- import { P as t, a as n, p as r, b as s } from "../../_chunks/payment-request-card-MndSlVoK.js";
1
+ import { P as t, a as n, p as r, b as s } from "../../_chunks/payment-request-card-BfGauFY0.js";
2
2
  export {
3
3
  t as PaymentCard,
4
4
  n as PaymentRequestCard,
@@ -1,4 +1,4 @@
1
- import { D as i, P as S, a as T, b as o, c as D, S as I, e as E, i as O, p as e } from "../../_chunks/periodontal-diagnosis-B9YmmVmM.js";
1
+ import { D as i, P as S, a as T, b as o, c as D, S as I, e as E, i as O, p as e } from "../../_chunks/periodontal-diagnosis-DD3hrg9X.js";
2
2
  export {
3
3
  i as DEFAULT_DIAGNOSIS_FACTORS,
4
4
  S as PERIODONTITIS_EXTENTS,
@@ -1,4 +1,4 @@
1
- import { P as a, p as r, a as t } from "../../_chunks/permission-matrix-BoQjENGV.js";
1
+ import { P as a, p as r, a as t } from "../../_chunks/permission-matrix-BJ6sg3Zp.js";
2
2
  export {
3
3
  a as PermissionMatrix,
4
4
  r as permissionMatrixAgent,
@@ -1,4 +1,4 @@
1
- import { P as o, p as a } from "../../_chunks/practice-profile-hero-qfrsFQI_.js";
1
+ import { P as o, p as a } from "../../_chunks/practice-profile-hero-ClzE-4CB.js";
2
2
  export {
3
3
  o as PracticeProfileHero,
4
4
  a as practiceProfileHeroAgent
@@ -29,6 +29,12 @@ export interface PracticeProfileHeroProps extends Omit<ComponentPropsWithoutRef<
29
29
  * initials.
30
30
  */
31
31
  imageUrl?: string;
32
+ /**
33
+ * Text alternative for the photo's `<img>`, for image search and crawlers.
34
+ * Pass the practice name. Leave it out and the photo stays decorative
35
+ * (`alt=""`), as before. Added in 1.91.0.
36
+ */
37
+ imageAlt?: string;
32
38
  /**
33
39
  * Optional cover image painted as a full-width strip above the body.
34
40
  * The strip renders ONLY when this is set — a practice without a cover
@@ -1,4 +1,4 @@
1
- import { P as t, p as a } from "../../_chunks/practice-results-B61krlwu.js";
1
+ import { P as t, p as a } from "../../_chunks/practice-results-CQ_KvEXK.js";
2
2
  export {
3
3
  t as PracticeResults,
4
4
  a as practiceResultsAgent
@@ -60,6 +60,12 @@ export interface PracticeResult {
60
60
  bookingHref?: string;
61
61
  /** Avatar / logo URL. */
62
62
  imageUrl?: string;
63
+ /**
64
+ * Text alternative for the photo's `<img>`, for image search and crawlers.
65
+ * Pass the practice name. Leave it out and the photo stays decorative
66
+ * (`alt=""`), as before. Added in 1.91.0.
67
+ */
68
+ imageAlt?: string;
63
69
  /** Practice location. Required by the two map variants. */
64
70
  location?: {
65
71
  lat: number;
@@ -98,7 +104,7 @@ export interface PracticeResult {
98
104
  * Use `firstVisitPrice` for new integrations; a finite minimum wins when
99
105
  * both are set.
100
106
  * Price in the smallest currency unit (cents / centesimi).
101
- * Rendered as a labelled "First visit cost" row on every card in both
107
+ * Rendered as a labelled "First visit cost" chip on every card in both
102
108
  * densities (booking-website maps the practice's long-standing
103
109
  * first-visit price setting here). Same convention as
104
110
  * `ContactProfileCard.firstVisitPriceCents` — the KIT formats, the
@@ -107,7 +113,7 @@ export interface PracticeResult {
107
113
  * `0` is a real value meaning "free" and renders the translated word
108
114
  * "Free" (`common.freeOfCharge`), never a zero amount. Omit the
109
115
  * field (or pass `undefined`) when the practice has not set a price —
110
- * the row then disappears completely. Added for HTP-6136.
116
+ * the label and chip disappear completely. Added for HTP-6136.
111
117
  */
112
118
  firstVisitPriceCents?: number;
113
119
  /**
@@ -1,4 +1,4 @@
1
- import { P as u, a as o, p as t, b as e } from "../../_chunks/product-hub-panel-Blag8t8f.js";
1
+ import { P as u, a as o, p as t, b as e } from "../../_chunks/product-hub-panel-bHi7lkVD.js";
2
2
  import { i as s } from "../../_chunks/is-safe-url-DkETxeHz.js";
3
3
  export {
4
4
  u as ProductHubPanel,
@@ -1,4 +1,4 @@
1
- import { I as o, P as r, p as t } from "../../_chunks/province-select-CPdTwEob.js";
1
+ import { I as o, P as r, p as t } from "../../_chunks/province-select-D64whw0m.js";
2
2
  export {
3
3
  o as IT_PROVINCES,
4
4
  r as ProvinceSelect,
@@ -1,4 +1,4 @@
1
- import { D as s, a as e, P as r, S as A, c as L } from "../../_chunks/public-footer-CXOrdAaS.js";
1
+ import { D as s, a as e, P as r, S as A, c as L } from "../../_chunks/public-footer-IoRWoAMz.js";
2
2
  import { p as _ } from "../../_chunks/public-footer.agent-CRZCrq3_.js";
3
3
  export {
4
4
  s as DEFAULT_MARKETING_BASE_URL,
@@ -34,7 +34,19 @@ export interface PublicFooterProps {
34
34
  socials?: PublicFooterSocial[];
35
35
  /** `full` variant: custom logo node. Default: kit's wordmark Logo. */
36
36
  logoSlot?: ReactNode;
37
- /** Extra surface-specific links — appended after the standard nav row in compact + full. Ignored by minimal. */
37
+ /**
38
+ * Extra surface-specific links, appended after the standard legal links in
39
+ * every variant. A `<Link>`, an `<a>`, a `<button>` or the kit's
40
+ * `<Button intent="link">` all work: the slot gives anchors the footer link
41
+ * look (muted text, underline on hover, focus ring) in every variant, and in
42
+ * `minimal` bare buttons and `Button intent="link"` too, so a host "Cookie
43
+ * settings" button that reopens its consent manager sits in line with
44
+ * Privacy and Terms. In `compact` and `full` host buttons keep their own
45
+ * look. In `minimal` the slot comes after Terms and before
46
+ * the copyright line, so tab order follows reading order, in RTL too. The
47
+ * host owns the label and the click handler. Minimal ignored this slot
48
+ * before 1.91.0.
49
+ */
38
50
  extraNavSlot?: ReactNode;
39
51
  /** Trust badges (HIPAA, ISO). Rendered at the start of `minimal`'s row, or in the bottom strip of `full`. */
40
52
  trustBadgesSlot?: ReactNode;
@@ -1,9 +1,10 @@
1
- import type { ComponentType, SVGProps } from 'react';
2
1
  export declare const SOCIAL_NETWORKS: readonly ["linkedin", "youtube", "instagram", "facebook"];
3
2
  export type SocialNetwork = (typeof SOCIAL_NETWORKS)[number];
4
3
  export declare const DEFAULT_SOCIAL_URLS: Record<SocialNetwork, string>;
5
- type IconProps = SVGProps<SVGSVGElement>;
6
- type SocialIcon = ComponentType<IconProps>;
7
- export declare const SOCIAL_ICONS: Record<SocialNetwork, SocialIcon>;
8
- export {};
4
+ export declare const SOCIAL_ICONS: {
5
+ linkedin: import("react").FunctionComponent<import("react").SVGProps<SVGSVGElement>>;
6
+ youtube: import("react").FunctionComponent<import("react").SVGProps<SVGSVGElement>>;
7
+ instagram: import("react").FunctionComponent<import("react").SVGProps<SVGSVGElement>>;
8
+ facebook: import("react").FunctionComponent<import("react").SVGProps<SVGSVGElement>>;
9
+ };
9
10
  //# sourceMappingURL=socials.d.ts.map
@@ -1,4 +1,4 @@
1
- import { R as r, r as s } from "../../_chunks/reviews-panel-UzQQLb-z.js";
1
+ import { R as r, r as s } from "../../_chunks/reviews-panel-B7InBORU.js";
2
2
  export {
3
3
  r as ReviewsPanel,
4
4
  s as reviewsPanelAgent
@@ -1,4 +1,4 @@
1
- import { R as i, r as o, w as a } from "../../_chunks/rich-text-editor-BZTyxQBd.js";
1
+ import { R as i, r as o, w as a } from "../../_chunks/rich-text-editor-BfEu57dk.js";
2
2
  import { k as s } from "../../_chunks/kit-extensions-a0G4COFH.js";
3
3
  export {
4
4
  i as RichTextEditor,
@@ -1,4 +1,4 @@
1
- import { S as i, f as t, i as e, s as r } from "../../_chunks/slot-grid-Bb13H9Rl.js";
1
+ import { S as i, f as t, i as e, s as r } from "../../_chunks/slot-grid-B-IAFX3C.js";
2
2
  export {
3
3
  i as SlotGrid,
4
4
  t as findFirstAvailable,
@@ -29,6 +29,8 @@ export interface SlotGridProps extends Omit<HTMLAttributes<HTMLDivElement>, 'ari
29
29
  days: SlotGridDay[];
30
30
  /** Visual / interactive state. Defaults to `'default'`. */
31
31
  state?: SlotGridState;
32
+ /** Localised guidance below the empty title, for an empty day or range. */
33
+ emptyDescription?: string;
32
34
  /** Density of the slot buttons and day headers. Defaults to `'md'`. */
33
35
  size?: SlotGridSize;
34
36
  /** Id of the currently selected slot (controlled). */
@@ -1,4 +1,4 @@
1
- import { T as o, t as r } from "../../_chunks/task-editor-BOETWbjU.js";
1
+ import { T as o, t as r } from "../../_chunks/task-editor-CI1SKUNc.js";
2
2
  export {
3
3
  o as TaskEditor,
4
4
  r as taskEditorAgent
@@ -1,4 +1,4 @@
1
- import { T as t, t as m } from "../../_chunks/timeline-wUuTDFY_.js";
1
+ import { T as t, t as m } from "../../_chunks/timeline-BcYHdP56.js";
2
2
  export {
3
3
  t as Timeline,
4
4
  m as timelineAgent
@@ -1,4 +1,4 @@
1
- import { V as n, v as a } from "../../_chunks/voice-control-panel-BziKE-KK.js";
1
+ import { V as n, v as a } from "../../_chunks/voice-control-panel-BP0otrID.js";
2
2
  export {
3
3
  n as VoiceControlPanel,
4
4
  a as voiceControlPanelAgent
@@ -210,7 +210,7 @@
210
210
 
211
211
  /* ───────────────────────────────────────────────────────────────────────
212
212
  SECTION B — non-token declarations. ORIGINAL LAYER PRESERVED.
213
- 153 declarations across 149 rules.
213
+ 150 declarations across 146 rules.
214
214
 
215
215
  Kit-authored arbitrary-value utilities (`ds:w-[20rem]`) and the
216
216
  vendored AG Grid rules. These set real properties on real elements,
@@ -233,15 +233,6 @@
233
233
  .ds\:-inset-\[calc\(\(var\(--min-target-size\)-1rem\)\/2\)\] {
234
234
  inset:calc(calc((var(--min-target-size) - 16px) / 2) * -1);
235
235
  }
236
- .ds\:mt-\[calc\(\(var\(--type-label-size\)\*var\(--type-label-line-height\)-0\.875rem\)\/2\)\] {
237
- margin-top:calc((var(--type-label-size) * var(--type-label-line-height) - 14px) / 2);
238
- }
239
- .ds\:mt-\[calc\(\(var\(--type-label-size\)\*var\(--type-label-line-height\)-1\.25rem\)\/2\)\] {
240
- margin-top:calc((var(--type-label-size) * var(--type-label-line-height) - 20px) / 2);
241
- }
242
- .ds\:mt-\[calc\(\(var\(--type-label-size\)\*var\(--type-label-line-height\)-1rem\)\/2\)\] {
243
- margin-top:calc((var(--type-label-size) * var(--type-label-line-height) - 16px) / 2);
244
- }
245
236
  .ds\:size-\[1\.5rem\] {
246
237
  width:24px;
247
238
  height:24px;
@@ -1,8 +1,7 @@
1
- import u from "i18next";
2
- import { default as D } from "i18next";
3
- import { initReactI18next as I } from "react-i18next";
4
- import { enUi as m } from "./locales/en.js";
5
- const E = [
1
+ import d from "i18next";
2
+ import { default as J } from "i18next";
3
+ import { initReactI18next as x } from "react-i18next";
4
+ const W = [
6
5
  "en",
7
6
  "it",
8
7
  "de",
@@ -22,18 +21,19 @@ const E = [
22
21
  "zh",
23
22
  "hi"
24
23
  ];
25
- function O(e, t, i = u) {
26
- i.addResourceBundle(
24
+ function F(e, r, t = d) {
25
+ t.addResourceBundle(
27
26
  e,
28
27
  "ui",
29
- t,
28
+ r,
30
29
  /* deep */
31
30
  !0,
32
31
  /* overwrite */
33
32
  !1
34
33
  );
35
34
  }
36
- const L = !1, U = {
35
+ const A = !1, L = {
36
+ en: () => import("./locales/en.js").then((e) => e.enUi),
37
37
  it: () => import("./locales/it.js").then((e) => e.itUi),
38
38
  de: () => import("./locales/de.js").then((e) => e.deUi),
39
39
  ar: () => import("./locales/ar.js").then((e) => e.arUi),
@@ -51,135 +51,263 @@ const L = !1, U = {
51
51
  ja: () => import("./locales/ja.js").then((e) => e.jaUi),
52
52
  zh: () => import("./locales/zh.js").then((e) => e.zhUi),
53
53
  hi: () => import("./locales/hi.js").then((e) => e.hiUi)
54
- }, R = /* @__PURE__ */ new WeakMap();
55
- function v(e) {
54
+ }, q = /* @__PURE__ */ new WeakMap();
55
+ function I(e) {
56
56
  if (!e) return;
57
- const t = e.toLowerCase().replaceAll("_", "-").split("-")[0];
58
- return t === "en" || Object.hasOwn(U, t) ? t : void 0;
59
- }
60
- function y(e) {
61
- e.addResourceBundle("en", "ui", m, !0, !1);
57
+ const r = e.toLowerCase().replaceAll("_", "-").split("-")[0];
58
+ return Object.hasOwn(L, r) ? r : void 0;
62
59
  }
63
60
  function p(e) {
64
- const t = R.get(e);
65
- if (t) return t;
66
- const i = {
61
+ const r = q.get(e);
62
+ if (r) return r;
63
+ const t = {
67
64
  languageRequest: 0,
65
+ changing: 0,
68
66
  completed: /* @__PURE__ */ new Map(),
69
- pending: /* @__PURE__ */ new Map()
67
+ failed: /* @__PURE__ */ new Set(),
68
+ pending: /* @__PURE__ */ new Map(),
69
+ waiters: /* @__PURE__ */ new Set(),
70
+ requested: /* @__PURE__ */ new Set()
70
71
  };
71
- R.set(e, i);
72
- const a = e.changeLanguage.bind(e);
73
- return e.changeLanguage = (r, n) => {
74
- const g = ++i.languageRequest;
75
- if (!r) return a(r, n);
76
- const d = e.services.languageUtils, l = v(r), o = e.getDataByLanguage(r), B = l && l !== r && w(r, e).includes(l) && o && Object.keys(o).some(
77
- (s) => s !== "ui" || i.completed.get(r) !== e.getResourceBundle(r, "ui")
78
- ), h = e.options.supportedLngs && !B ? d.getBestMatchFromCodes([r]) : r;
79
- if (!h) {
80
- const s = e.t.bind(e);
81
- return n == null || n(null, s), Promise.resolve(s);
72
+ q.set(e, t), N(e, t);
73
+ const i = e.changeLanguage.bind(e);
74
+ return e.changeLanguage = (n, o) => {
75
+ const u = ++t.languageRequest;
76
+ if (!n) return i(n, o);
77
+ const s = e.services.languageUtils, a = I(n), h = e.getDataByLanguage(n), l = a && a !== n && B(n, e).includes(a) && h && Object.keys(h).some(
78
+ (f) => f !== "ui" || t.completed.get(n) !== e.getResourceBundle(n, "ui")
79
+ ), g = e.options.supportedLngs && !l ? s.getBestMatchFromCodes([n]) : n;
80
+ if (!g) {
81
+ const f = e.t.bind(e);
82
+ return o == null || o(null, f), Promise.resolve(f);
82
83
  }
83
- return f(h, e).then(
84
+ return t.changing++, R(g, e).then(
84
85
  () => {
85
- if (g !== i.languageRequest) {
86
- const s = e.t.bind(e);
87
- return n == null || n(null, s), s;
86
+ if (u !== t.languageRequest) {
87
+ const f = e.t.bind(e);
88
+ return o == null || o(null, f), f;
88
89
  }
89
- return a(h, n);
90
+ return i(g, o);
90
91
  },
91
- (s) => {
92
- throw n == null || n(s, e.t.bind(e)), s;
92
+ (f) => {
93
+ throw o == null || o(f, e.t.bind(e)), f;
93
94
  }
94
- );
95
+ ).finally(() => {
96
+ t.changing--;
97
+ });
95
98
  }, e.on("initialized", () => {
96
- y(e), f(e.language, e).catch(
97
- (r) => {
98
- }
99
- );
100
- }), i;
99
+ z(e).catch((n) => {
100
+ }), U(t);
101
+ }), e.on("languageChanged", () => U(t)), t;
101
102
  }
102
- function w(e, t) {
103
- return t.services.languageUtils.toResolveHierarchy(e);
103
+ function N(e, r) {
104
+ const t = e.hasLoadedNamespace.bind(e);
105
+ e.hasLoadedNamespace = (u, s) => {
106
+ const a = t(u, s);
107
+ return c(u) && e.isInitialized && b(
108
+ e,
109
+ r,
110
+ typeof (s == null ? void 0 : s.lng) == "string" ? s.lng : e.language
111
+ ), a;
112
+ };
113
+ const i = e.t.bind(e);
114
+ e.t = ((...u) => {
115
+ const s = i(...u);
116
+ return typeof s == "string" && M(e, r, u) ? "" : s;
117
+ });
118
+ const n = e.loadNamespaces.bind(e);
119
+ e.loadNamespaces = (u, s) => c(u) ? O(e, r).then(() => n(u, s)) : n(u, s);
120
+ const o = e.loadLanguages.bind(e);
121
+ e.loadLanguages = (u, s) => {
122
+ const a = (Array.isArray(u) ? u : [u]).map((l) => m(l, e)).filter((l) => !!l), h = [].concat(e.options.ns ?? []);
123
+ return !e.isInitialized || a.length === 0 || !h.includes("ui") ? o(u, s) : Promise.all(
124
+ a.map((l) => y(l, e).catch(() => !1))
125
+ ).then(() => o(u, s));
126
+ };
104
127
  }
105
- async function f(e, t) {
106
- await Promise.all(
107
- [.../* @__PURE__ */ new Set([e, ...w(e, t)])].filter(Boolean).map((i) => c(i, t))
128
+ function M(e, r, t) {
129
+ if (!e.isInitialized) return !1;
130
+ const i = [t[1], t[2]].find(
131
+ (a) => typeof a == "object" && a !== null
132
+ ), n = Array.isArray(t[0]) ? t[0][0] : t[0], u = (typeof n == "string" && n.includes(":") ? n.split(":")[0] : "") || (i == null ? void 0 : i.ns) || e.options.defaultNS;
133
+ if (!u || !c(u)) return !1;
134
+ const s = typeof (i == null ? void 0 : i.lng) == "string" ? i.lng : e.language;
135
+ return w(e, s) ? !1 : (b(e, r, s), !0);
136
+ }
137
+ function b(e, r, t) {
138
+ if (!t || w(e, t)) return;
139
+ const i = m(t, e);
140
+ i && (t === e.language && r.changing > 0 || (r.requested.add(i), y(i, e).catch((n) => {
141
+ })));
142
+ }
143
+ const c = (e) => typeof e == "string" ? e === "ui" : e.includes("ui");
144
+ function w(e, r) {
145
+ if (!r) return !0;
146
+ const t = m(r, e);
147
+ if (!t) return !0;
148
+ const i = p(e);
149
+ return S(t, e).every(
150
+ (n) => v(n, e, i) || i.failed.has(n) || j(n, e)
108
151
  );
109
152
  }
110
- async function c(e, t = u) {
111
- if (!t.isInitialized)
153
+ function j(e, r) {
154
+ const t = r.getResourceBundle(e, "ui");
155
+ return !!(t != null && t.common && t.errorPage);
156
+ }
157
+ function O(e, r) {
158
+ return e.isInitialized && w(e, e.language) ? Promise.resolve() : new Promise((t) => {
159
+ const i = () => {
160
+ e.isInitialized && w(e, e.language) && (r.waiters.delete(i), t());
161
+ };
162
+ r.waiters.add(i), e.isInitialized && r.changing === 0 && z(e).catch((n) => {
163
+ });
164
+ });
165
+ }
166
+ function U(e) {
167
+ for (const r of [...e.waiters]) r();
168
+ }
169
+ function B(e, r) {
170
+ return r.services.languageUtils.toResolveHierarchy(e);
171
+ }
172
+ async function R(e, r) {
173
+ const t = m(e, r);
174
+ return t ? y(t, r) : !1;
175
+ }
176
+ function m(e, r) {
177
+ return [.../* @__PURE__ */ new Set([e, ...B(e, r)])].filter(Boolean).find((t) => I(t));
178
+ }
179
+ function S(e, r) {
180
+ const t = I(e);
181
+ return e !== t && !B(e, r).includes(t) ? [t, e] : [t];
182
+ }
183
+ function v(e, r, t) {
184
+ const i = r.getResourceBundle(e, "ui");
185
+ return !!i && t.completed.get(e) === i;
186
+ }
187
+ async function z(e) {
188
+ p(e).changing > 0 || await R(e.language, e);
189
+ }
190
+ async function P(e, r = d) {
191
+ await y(e, r);
192
+ }
193
+ async function y(e, r) {
194
+ if (!r.isInitialized)
112
195
  throw new Error(
113
196
  "Initialise the host i18next instance before loading UI locales."
114
197
  );
115
- const i = v(e);
116
- if (!i) return;
117
- const a = p(t), r = e !== i && !w(e, t).includes(i) ? [i, e] : [i];
118
- if (r.every((l) => {
119
- const o = t.getResourceBundle(l, "ui");
120
- return o && a.completed.get(l) === o;
121
- }))
122
- return;
123
- const n = r.join(":"), g = a.pending.get(n);
124
- if (g) return g;
125
- const d = (async () => {
126
- const l = i === "en" ? m : await U[i]();
127
- t.addResourceBundle(i, "ui", l, !0, !1);
128
- for (const o of r)
129
- o !== i && t.addResourceBundle(
130
- o,
131
- "ui",
132
- t.getResourceBundle(i, "ui"),
133
- !0,
134
- !1
135
- ), a.completed.set(o, t.getResourceBundle(o, "ui"));
198
+ const t = I(e);
199
+ if (!t) return !1;
200
+ const i = p(r), n = S(e, r);
201
+ if (n.every((a) => v(a, r, i)))
202
+ return !1;
203
+ const o = n.join(":"), u = i.pending.get(o);
204
+ if (u) return u.then(() => !1);
205
+ const s = (async () => {
206
+ try {
207
+ const l = await L[t]();
208
+ r.addResourceBundle(t, "ui", l, !0, !1);
209
+ for (const g of n)
210
+ g !== t && r.addResourceBundle(
211
+ g,
212
+ "ui",
213
+ r.getResourceBundle(t, "ui"),
214
+ !0,
215
+ !1
216
+ ), i.completed.set(g, r.getResourceBundle(g, "ui"));
217
+ } catch (l) {
218
+ throw await E(t, n, r, i), l;
219
+ }
220
+ const a = n.some((l) => i.failed.delete(l)), h = i.requested.delete(t);
221
+ U(i), (a || h || m(r.language, r) === t) && r.emit("languageChanged", r.language);
136
222
  })();
137
- a.pending.set(n, d);
223
+ i.pending.set(o, s);
224
+ try {
225
+ await s;
226
+ } finally {
227
+ i.pending.delete(o);
228
+ }
229
+ return !0;
230
+ }
231
+ async function E(e, r, t, i) {
232
+ const n = i.waiters.size > 0 || i.requested.has(e) || m(t.language, t) === e;
233
+ if (i.requested.delete(e), !n) {
234
+ for (const o of r) i.failed.add(o);
235
+ return;
236
+ }
138
237
  try {
139
- await d;
238
+ e !== "en" && !C(t, i).includes("en") && await y("en", t).catch(() => !1);
239
+ const o = C(t, i);
240
+ o.length > 0 ? H(t, o[0]) : K(t);
140
241
  } finally {
141
- a.pending.delete(n);
242
+ for (const o of r) i.failed.add(o);
243
+ U(i), t.isInitialized && t.emit("languageChanged", t.language);
244
+ }
245
+ }
246
+ function C(e, r) {
247
+ return Object.keys(L).filter(
248
+ (t) => v(t, e, r) || j(t, e)
249
+ );
250
+ }
251
+ function H(e, r) {
252
+ const t = e.options.fallbackLng, i = (n) => typeof n == "string" ? [n] : Array.isArray(n) ? n : [];
253
+ if (!(typeof t == "function" || t === !1)) {
254
+ if (t && typeof t == "object" && !Array.isArray(t)) {
255
+ const n = t;
256
+ i(n.default).includes(r) || (n.default = [...i(n.default), r]);
257
+ return;
258
+ }
259
+ i(t).includes(r) || (e.options.fallbackLng = [...i(t), r]);
142
260
  }
143
261
  }
144
- async function q(e = u) {
262
+ function K(e) {
263
+ e.options.parseMissingKeyHandler || (e.options.parseMissingKeyHandler = (r, t, i) => {
264
+ if (t !== void 0) return t;
265
+ if (!(i != null && i.ns) || !c(i.ns)) return r;
266
+ const o = (r.split(/[.:]/).at(-1) ?? r).replace(/([a-z0-9])([A-Z])/g, "$1 $2").replaceAll("_", " ").toLowerCase();
267
+ return o.charAt(0).toUpperCase() + o.slice(1);
268
+ });
269
+ }
270
+ async function T(e = d) {
145
271
  if (!e.isInitialized)
146
272
  throw new Error(
147
273
  "Initialise the host i18next instance before setting up UI translations."
148
274
  );
149
- p(e), await c("en", e), await f(e.language, e);
275
+ p(e), await R(e.language, e);
150
276
  }
151
- async function C(e, t = u) {
152
- p(t), await t.changeLanguage(e);
277
+ async function $(e, r = d) {
278
+ p(r), await r.changeLanguage(e);
153
279
  }
154
- async function S(e = u) {
280
+ async function V(e = d) {
155
281
  await Promise.all(
156
- ["en", ...Object.keys(U)].map((t) => c(t, e))
282
+ Object.keys(L).map((r) => P(r, e))
157
283
  );
158
284
  }
159
- u.isInitialized || u.use(I).init({
285
+ d.isInitialized || d.use(x).init({
160
286
  lng: "en",
161
287
  fallbackLng: "en",
162
288
  ns: ["ui"],
163
289
  defaultNS: "ui",
164
290
  partialBundledLanguages: !0,
165
- debug: L,
166
- saveMissing: L,
291
+ debug: A,
292
+ saveMissing: A,
167
293
  missingKeyHandler: void 0,
168
294
  interpolation: { escapeValue: !1 },
169
- resources: { en: { ui: m } }
295
+ // English arrives through the lazy loader below, like every other locale.
296
+ resources: {}
170
297
  });
171
- y(u);
172
- p(u);
173
- q().catch((e) => {
298
+ p(d);
299
+ Promise.resolve().then(
300
+ () => d.isInitialized ? z(d) : void 0
301
+ ).catch((e) => {
174
302
  });
175
303
  export {
176
- E as LOCALES_WITH_BUNDLES,
177
- D as default,
178
- q as initialiseUiI18n,
179
- S as loadAllLocales,
180
- c as loadLocale,
181
- O as registerUiBundle,
182
- v as resolveUiLanguage,
183
- C as setLocale
304
+ W as LOCALES_WITH_BUNDLES,
305
+ J as default,
306
+ T as initialiseUiI18n,
307
+ V as loadAllLocales,
308
+ P as loadLocale,
309
+ F as registerUiBundle,
310
+ I as resolveUiLanguage,
311
+ $ as setLocale
184
312
  };
185
313
  //# sourceMappingURL=config.js.map
@@ -2427,6 +2427,9 @@ export declare const arUi: {
2427
2427
  readonly stay: "ابقَ في هذه الصفحة";
2428
2428
  readonly stayed: "انتقل إلى منطقة المرضى عندما تكون مستعدًا للتأكيد.";
2429
2429
  };
2430
+ readonly slotsLoadError: "تعذّر تحميل الأوقات المتاحة. يُرجى المحاولة مرة أخرى.";
2431
+ readonly retrySlots: "حاول مرة أخرى";
2432
+ readonly emptySlotsDescription: "جرّب مقدم خدمة آخر أو تواصل مع العيادة.";
2430
2433
  };
2431
2434
  readonly patientSearch: {
2432
2435
  readonly regionLabel: "ابحث عن موعد";
@@ -2419,7 +2419,10 @@ const e = {
2419
2419
  goNow: "انتقل الآن",
2420
2420
  stay: "ابقَ في هذه الصفحة",
2421
2421
  stayed: "انتقل إلى منطقة المرضى عندما تكون مستعدًا للتأكيد."
2422
- }
2422
+ },
2423
+ slotsLoadError: "تعذّر تحميل الأوقات المتاحة. يُرجى المحاولة مرة أخرى.",
2424
+ retrySlots: "حاول مرة أخرى",
2425
+ emptySlotsDescription: "جرّب مقدم خدمة آخر أو تواصل مع العيادة."
2423
2426
  },
2424
2427
  patientSearch: {
2425
2428
  regionLabel: "ابحث عن موعد",