@alfadocs/ui-kit-debug 1.7.0 → 1.9.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 (244) hide show
  1. package/dist/_chunks/{actions-cell-renderer-ALEAGO3j.js → actions-cell-renderer-B2pw6iH8.js} +2 -2
  2. package/dist/_chunks/{actions-cell-renderer-ALEAGO3j.js.map → actions-cell-renderer-B2pw6iH8.js.map} +1 -1
  3. package/dist/_chunks/{anamnesis-summary-rows-F-cCmFAn.js → anamnesis-summary-rows-d44s_whc.js} +2 -2
  4. package/dist/_chunks/{anamnesis-summary-rows-F-cCmFAn.js.map → anamnesis-summary-rows-d44s_whc.js.map} +1 -1
  5. package/dist/_chunks/{antenatal-schedule-timeline-BjlF2rTz.js → antenatal-schedule-timeline-B1k8QkA6.js} +3 -3
  6. package/dist/_chunks/{antenatal-schedule-timeline-BjlF2rTz.js.map → antenatal-schedule-timeline-B1k8QkA6.js.map} +1 -1
  7. package/dist/_chunks/{appointment-card-BhcPJpXh.js → appointment-card-Dzr3GeVz.js} +73 -90
  8. package/dist/_chunks/appointment-card-Dzr3GeVz.js.map +1 -0
  9. package/dist/_chunks/{appointment-timeline-CMPvzlGZ.js → appointment-timeline-0mwtpErq.js} +3 -3
  10. package/dist/_chunks/{appointment-timeline-CMPvzlGZ.js.map → appointment-timeline-0mwtpErq.js.map} +1 -1
  11. package/dist/_chunks/{appointment-tray-3c_FLxXJ.js → appointment-tray-4FUu_5NX.js} +2 -2
  12. package/dist/_chunks/{appointment-tray-3c_FLxXJ.js.map → appointment-tray-4FUu_5NX.js.map} +1 -1
  13. package/dist/_chunks/armchair-BaLDW6Hz.js +23 -0
  14. package/dist/_chunks/armchair-BaLDW6Hz.js.map +1 -0
  15. package/dist/_chunks/{booking-CQMJUFG-.js → booking-DHkKcUIl.js} +4 -4
  16. package/dist/_chunks/{booking-CQMJUFG-.js.map → booking-DHkKcUIl.js.map} +1 -1
  17. package/dist/_chunks/{calendar-4dXTvsCz.js → calendar-B4Gnyu1C.js} +553 -437
  18. package/dist/_chunks/calendar-B4Gnyu1C.js.map +1 -0
  19. package/dist/_chunks/calendar-event-card-Bjdbik8G.js +425 -0
  20. package/dist/_chunks/calendar-event-card-Bjdbik8G.js.map +1 -0
  21. package/dist/_chunks/{care-plan-card-DQjVRDxO.js → care-plan-card-aDN4oem9.js} +3 -3
  22. package/dist/_chunks/{care-plan-card-DQjVRDxO.js.map → care-plan-card-aDN4oem9.js.map} +1 -1
  23. package/dist/_chunks/{care-plan-entry-card-CMpoeNkb.js → care-plan-entry-card-BEhANdBE.js} +2 -2
  24. package/dist/_chunks/{care-plan-entry-card-CMpoeNkb.js.map → care-plan-entry-card-BEhANdBE.js.map} +1 -1
  25. package/dist/_chunks/{care-plan-header-CxYoq23f.js → care-plan-header-CkpPyQqG.js} +2 -2
  26. package/dist/_chunks/{care-plan-header-CxYoq23f.js.map → care-plan-header-CkpPyQqG.js.map} +1 -1
  27. package/dist/_chunks/{color-picker-D-tUwxxT.js → color-picker-oZ6zYks8.js} +164 -151
  28. package/dist/_chunks/color-picker-oZ6zYks8.js.map +1 -0
  29. package/dist/_chunks/control-room-rail-Cj2iX9h_.js +337 -0
  30. package/dist/_chunks/control-room-rail-Cj2iX9h_.js.map +1 -0
  31. package/dist/_chunks/{cycle-calculator-DzgO1vzP.js → cycle-calculator-DmtYGhqq.js} +3 -3
  32. package/dist/_chunks/{cycle-calculator-DzgO1vzP.js.map → cycle-calculator-DmtYGhqq.js.map} +1 -1
  33. package/dist/_chunks/{date-picker-Bp64zk2p.js → date-picker-CepI_oI2.js} +77 -74
  34. package/dist/_chunks/date-picker-CepI_oI2.js.map +1 -0
  35. package/dist/_chunks/{date-picker-variants-pKAJfnWr.js → date-picker-variants-DfuooXEK.js} +7 -2
  36. package/dist/_chunks/{date-picker-variants-pKAJfnWr.js.map → date-picker-variants-DfuooXEK.js.map} +1 -1
  37. package/dist/_chunks/{date-range-picker-CDrZ8Zh0.js → date-range-picker-BD8P_rJq.js} +46 -45
  38. package/dist/_chunks/{date-range-picker-CDrZ8Zh0.js.map → date-range-picker-BD8P_rJq.js.map} +1 -1
  39. package/dist/_chunks/{date-time-picker-DVETwpzc.js → date-time-picker-3I2vVKGV.js} +2 -2
  40. package/dist/_chunks/{date-time-picker-DVETwpzc.js.map → date-time-picker-3I2vVKGV.js.map} +1 -1
  41. package/dist/_chunks/{due-date-calculator-wK8Tajzz.js → due-date-calculator-BF_Ikofx.js} +4 -4
  42. package/dist/_chunks/{due-date-calculator-wK8Tajzz.js.map → due-date-calculator-BF_Ikofx.js.map} +1 -1
  43. package/dist/_chunks/{entity-card-9_62gY7l.js → entity-card-DmrgYSEX.js} +4 -4
  44. package/dist/_chunks/{entity-card-9_62gY7l.js.map → entity-card-DmrgYSEX.js.map} +1 -1
  45. package/dist/_chunks/{file-manager-Cc_upjZX.js → file-manager-Crg5dKez.js} +2 -2
  46. package/dist/_chunks/{file-manager-Cc_upjZX.js.map → file-manager-Crg5dKez.js.map} +1 -1
  47. package/dist/_chunks/{gestational-age-calculator-C_uDAeP_.js → gestational-age-calculator-CxZelpu2.js} +5 -5
  48. package/dist/_chunks/{gestational-age-calculator-C_uDAeP_.js.map → gestational-age-calculator-CxZelpu2.js.map} +1 -1
  49. package/dist/_chunks/{hcg-doubling-BaXkJhT-.js → hcg-doubling-CpU7H5rQ.js} +3 -3
  50. package/dist/_chunks/{hcg-doubling-BaXkJhT-.js.map → hcg-doubling-CpU7H5rQ.js.map} +1 -1
  51. package/dist/_chunks/{link-cell-renderer-DH4JYpKU.js → link-cell-renderer-BZQtsuFz.js} +2 -2
  52. package/dist/_chunks/{link-cell-renderer-DH4JYpKU.js.map → link-cell-renderer-BZQtsuFz.js.map} +1 -1
  53. package/dist/_chunks/{notes-panel-DlnENphf.js → notes-panel-e9cJWVRg.js} +2 -2
  54. package/dist/_chunks/{notes-panel-DlnENphf.js.map → notes-panel-e9cJWVRg.js.map} +1 -1
  55. package/dist/_chunks/{operator-hero-CCDnIa1S.js → operator-hero-BnFv-Uef.js} +2 -2
  56. package/dist/_chunks/{operator-hero-CCDnIa1S.js.map → operator-hero-BnFv-Uef.js.map} +1 -1
  57. package/dist/_chunks/{parse-JqixfsU0.js → parse-MN9bGkrY.js} +2 -2
  58. package/dist/_chunks/{parse-JqixfsU0.js.map → parse-MN9bGkrY.js.map} +1 -1
  59. package/dist/_chunks/{patient-details-qnsqYBGQ.js → patient-details-xrqe13az.js} +160 -159
  60. package/dist/_chunks/patient-details-xrqe13az.js.map +1 -0
  61. package/dist/_chunks/{patient-table-DwshfVsQ.js → patient-table-ChXM2K7H.js} +11 -7
  62. package/dist/_chunks/patient-table-ChXM2K7H.js.map +1 -0
  63. package/dist/_chunks/{payment-automation-upsell-BBIG7NFL.js → payment-automation-upsell-DwQW2fRp.js} +52 -63
  64. package/dist/_chunks/payment-automation-upsell-DwQW2fRp.js.map +1 -0
  65. package/dist/_chunks/{payment-request-card-BjjBMdsp.js → payment-request-card-YVCcCZ25.js} +2 -2
  66. package/dist/_chunks/{payment-request-card-BjjBMdsp.js.map → payment-request-card-YVCcCZ25.js.map} +1 -1
  67. package/dist/_chunks/{pregnancy-dating-BVS_9YU2.js → pregnancy-dating-DtToyMyc.js} +5 -5
  68. package/dist/_chunks/{pregnancy-dating-BVS_9YU2.js.map → pregnancy-dating-DtToyMyc.js.map} +1 -1
  69. package/dist/_chunks/{radiograph-panel.agent-CiHwgISa.js → radiograph-panel.agent-C3trfWqB.js} +3 -3
  70. package/dist/_chunks/{radiograph-panel.agent-CiHwgISa.js.map → radiograph-panel.agent-C3trfWqB.js.map} +1 -1
  71. package/dist/_chunks/repeat-CvQa5rZt.js +17 -0
  72. package/dist/_chunks/repeat-CvQa5rZt.js.map +1 -0
  73. package/dist/_chunks/resource-chip-DYTG0IQQ.js +83 -0
  74. package/dist/_chunks/resource-chip-DYTG0IQQ.js.map +1 -0
  75. package/dist/_chunks/{rich-text-editor-DARnq_6N.js → rich-text-editor-BDfFtK4H.js} +2 -2
  76. package/dist/_chunks/{rich-text-editor-DARnq_6N.js.map → rich-text-editor-BDfFtK4H.js.map} +1 -1
  77. package/dist/_chunks/subDays-BLl3y3pd.js +8 -0
  78. package/dist/_chunks/{subDays-CAUv47M1.js.map → subDays-BLl3y3pd.js.map} +1 -1
  79. package/dist/agent-catalog.json +2 -2
  80. package/dist/components/_shared/date-picker-variants.d.ts.map +1 -1
  81. package/dist/components/appointment-card/index.js +2 -2
  82. package/dist/components/appointment-timeline/index.js +1 -1
  83. package/dist/components/booking/index.js +1 -1
  84. package/dist/components/calendar/calendar.agent.d.ts.map +1 -1
  85. package/dist/components/calendar/calendar.d.ts +138 -12
  86. package/dist/components/calendar/calendar.d.ts.map +1 -1
  87. package/dist/components/calendar/index.js +1 -1
  88. package/dist/components/calendar-event-card/calendar-event-card.d.ts +48 -11
  89. package/dist/components/calendar-event-card/calendar-event-card.d.ts.map +1 -1
  90. package/dist/components/calendar-event-card/index.js +1 -1
  91. package/dist/components/care-plan-card/index.js +1 -1
  92. package/dist/components/care-plan-entry-card/index.js +1 -1
  93. package/dist/components/care-plan-header/index.js +1 -1
  94. package/dist/components/color-picker/index.d.ts +1 -1
  95. package/dist/components/color-picker/index.d.ts.map +1 -1
  96. package/dist/components/color-picker/index.js +4 -3
  97. package/dist/components/color-picker/palettes.d.ts +10 -0
  98. package/dist/components/color-picker/palettes.d.ts.map +1 -1
  99. package/dist/components/control-room-rail/control-room-rail.d.ts +9 -0
  100. package/dist/components/control-room-rail/control-room-rail.d.ts.map +1 -1
  101. package/dist/components/control-room-rail/index.js +1 -1
  102. package/dist/components/cycle-calculator/index.js +1 -1
  103. package/dist/components/data-table/cell-renderers/actions-cell-renderer.d.ts.map +1 -1
  104. package/dist/components/data-table/index.js +2 -2
  105. package/dist/components/date-picker/date-picker.d.ts +11 -0
  106. package/dist/components/date-picker/date-picker.d.ts.map +1 -1
  107. package/dist/components/date-picker/index.js +1 -1
  108. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
  109. package/dist/components/date-range-picker/index.js +1 -1
  110. package/dist/components/date-time-picker/index.js +1 -1
  111. package/dist/components/due-date-calculator/index.js +2 -2
  112. package/dist/components/file-manager/index.js +1 -1
  113. package/dist/components/gestational-age-calculator/index.js +1 -1
  114. package/dist/components/hcg-doubling/index.js +1 -1
  115. package/dist/components/index.d.ts +1 -0
  116. package/dist/components/index.d.ts.map +1 -1
  117. package/dist/components/notes-panel/index.js +1 -1
  118. package/dist/components/operator-hero/index.js +1 -1
  119. package/dist/components/patient-details/index.js +1 -1
  120. package/dist/components/patient-details/patient-details.d.ts +8 -0
  121. package/dist/components/patient-details/patient-details.d.ts.map +1 -1
  122. package/dist/components/patient-table/columns.d.ts.map +1 -1
  123. package/dist/components/patient-table/index.js +1 -1
  124. package/dist/components/patient-table/patient-table.d.ts +5 -4
  125. package/dist/components/patient-table/patient-table.d.ts.map +1 -1
  126. package/dist/components/payment-card/index.js +1 -1
  127. package/dist/components/pregnancy-dating/index.js +1 -1
  128. package/dist/components/radiograph-panel/index.js +1 -1
  129. package/dist/components/resource-chip/index.d.ts +3 -0
  130. package/dist/components/resource-chip/index.d.ts.map +1 -0
  131. package/dist/components/resource-chip/index.js +5 -0
  132. package/dist/components/resource-chip/index.js.map +1 -0
  133. package/dist/components/resource-chip/resource-chip.d.ts +26 -0
  134. package/dist/components/resource-chip/resource-chip.d.ts.map +1 -0
  135. package/dist/components/rich-text-editor/index.js +1 -1
  136. package/dist/host-compat.css +7 -1
  137. package/dist/i18n/locales/ar.d.ts +4 -0
  138. package/dist/i18n/locales/ar.d.ts.map +1 -1
  139. package/dist/i18n/locales/ar.js +4 -0
  140. package/dist/i18n/locales/ar.js.map +1 -1
  141. package/dist/i18n/locales/de.d.ts +4 -0
  142. package/dist/i18n/locales/de.d.ts.map +1 -1
  143. package/dist/i18n/locales/de.js +4 -0
  144. package/dist/i18n/locales/de.js.map +1 -1
  145. package/dist/i18n/locales/el.d.ts +4 -0
  146. package/dist/i18n/locales/el.d.ts.map +1 -1
  147. package/dist/i18n/locales/el.js +4 -0
  148. package/dist/i18n/locales/el.js.map +1 -1
  149. package/dist/i18n/locales/en.d.ts +4 -0
  150. package/dist/i18n/locales/en.d.ts.map +1 -1
  151. package/dist/i18n/locales/en.js +4 -0
  152. package/dist/i18n/locales/en.js.map +1 -1
  153. package/dist/i18n/locales/es.d.ts +4 -0
  154. package/dist/i18n/locales/es.d.ts.map +1 -1
  155. package/dist/i18n/locales/es.js +4 -0
  156. package/dist/i18n/locales/es.js.map +1 -1
  157. package/dist/i18n/locales/fr.d.ts +4 -0
  158. package/dist/i18n/locales/fr.d.ts.map +1 -1
  159. package/dist/i18n/locales/fr.js +4 -0
  160. package/dist/i18n/locales/fr.js.map +1 -1
  161. package/dist/i18n/locales/hi.d.ts +4 -0
  162. package/dist/i18n/locales/hi.d.ts.map +1 -1
  163. package/dist/i18n/locales/hi.js +4 -0
  164. package/dist/i18n/locales/hi.js.map +1 -1
  165. package/dist/i18n/locales/it.d.ts +4 -0
  166. package/dist/i18n/locales/it.d.ts.map +1 -1
  167. package/dist/i18n/locales/it.js +4 -0
  168. package/dist/i18n/locales/it.js.map +1 -1
  169. package/dist/i18n/locales/ja.d.ts +4 -0
  170. package/dist/i18n/locales/ja.d.ts.map +1 -1
  171. package/dist/i18n/locales/ja.js +4 -0
  172. package/dist/i18n/locales/ja.js.map +1 -1
  173. package/dist/i18n/locales/nl.d.ts +4 -0
  174. package/dist/i18n/locales/nl.d.ts.map +1 -1
  175. package/dist/i18n/locales/nl.js +4 -0
  176. package/dist/i18n/locales/nl.js.map +1 -1
  177. package/dist/i18n/locales/pl.d.ts +4 -0
  178. package/dist/i18n/locales/pl.d.ts.map +1 -1
  179. package/dist/i18n/locales/pl.js +4 -0
  180. package/dist/i18n/locales/pl.js.map +1 -1
  181. package/dist/i18n/locales/pt.d.ts +4 -0
  182. package/dist/i18n/locales/pt.d.ts.map +1 -1
  183. package/dist/i18n/locales/pt.js +4 -0
  184. package/dist/i18n/locales/pt.js.map +1 -1
  185. package/dist/i18n/locales/ro.d.ts +4 -0
  186. package/dist/i18n/locales/ro.d.ts.map +1 -1
  187. package/dist/i18n/locales/ro.js +4 -0
  188. package/dist/i18n/locales/ro.js.map +1 -1
  189. package/dist/i18n/locales/ru.d.ts +4 -0
  190. package/dist/i18n/locales/ru.d.ts.map +1 -1
  191. package/dist/i18n/locales/ru.js +4 -0
  192. package/dist/i18n/locales/ru.js.map +1 -1
  193. package/dist/i18n/locales/sq.d.ts +4 -0
  194. package/dist/i18n/locales/sq.d.ts.map +1 -1
  195. package/dist/i18n/locales/sq.js +4 -0
  196. package/dist/i18n/locales/sq.js.map +1 -1
  197. package/dist/i18n/locales/sv.d.ts +4 -0
  198. package/dist/i18n/locales/sv.d.ts.map +1 -1
  199. package/dist/i18n/locales/sv.js +4 -0
  200. package/dist/i18n/locales/sv.js.map +1 -1
  201. package/dist/i18n/locales/tr.d.ts +4 -0
  202. package/dist/i18n/locales/tr.d.ts.map +1 -1
  203. package/dist/i18n/locales/tr.js +4 -0
  204. package/dist/i18n/locales/tr.js.map +1 -1
  205. package/dist/i18n/locales/zh.d.ts +4 -0
  206. package/dist/i18n/locales/zh.d.ts.map +1 -1
  207. package/dist/i18n/locales/zh.js +4 -0
  208. package/dist/i18n/locales/zh.js.map +1 -1
  209. package/dist/index.js +961 -958
  210. package/dist/index.js.map +1 -1
  211. package/dist/locales/ar.json +4 -0
  212. package/dist/locales/de.json +4 -0
  213. package/dist/locales/el.json +4 -0
  214. package/dist/locales/en.json +4 -0
  215. package/dist/locales/es.json +4 -0
  216. package/dist/locales/fr.json +4 -0
  217. package/dist/locales/hi.json +4 -0
  218. package/dist/locales/it.json +4 -0
  219. package/dist/locales/ja.json +4 -0
  220. package/dist/locales/nl.json +4 -0
  221. package/dist/locales/pl.json +4 -0
  222. package/dist/locales/pt.json +4 -0
  223. package/dist/locales/ro.json +4 -0
  224. package/dist/locales/ru.json +4 -0
  225. package/dist/locales/sq.json +4 -0
  226. package/dist/locales/sv.json +4 -0
  227. package/dist/locales/tr.json +4 -0
  228. package/dist/locales/zh.json +4 -0
  229. package/dist/patterns/anamnesis/index.js +1 -1
  230. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  231. package/dist/tokens.css +41 -24
  232. package/package.json +5 -1
  233. package/dist/_chunks/appointment-card-BhcPJpXh.js.map +0 -1
  234. package/dist/_chunks/calendar-4dXTvsCz.js.map +0 -1
  235. package/dist/_chunks/calendar-event-card-C6qGtywL.js +0 -257
  236. package/dist/_chunks/calendar-event-card-C6qGtywL.js.map +0 -1
  237. package/dist/_chunks/color-picker-D-tUwxxT.js.map +0 -1
  238. package/dist/_chunks/control-room-rail-IH1eBjrK.js +0 -333
  239. package/dist/_chunks/control-room-rail-IH1eBjrK.js.map +0 -1
  240. package/dist/_chunks/date-picker-Bp64zk2p.js.map +0 -1
  241. package/dist/_chunks/patient-details-qnsqYBGQ.js.map +0 -1
  242. package/dist/_chunks/patient-table-DwshfVsQ.js.map +0 -1
  243. package/dist/_chunks/payment-automation-upsell-BBIG7NFL.js.map +0 -1
  244. package/dist/_chunks/subDays-CAUv47M1.js +0 -8
@@ -0,0 +1,425 @@
1
+ import { jsxs as c, jsx as e } from "react/jsx-runtime";
2
+ import { forwardRef as q } from "react";
3
+ import { useTranslation as G } from "react-i18next";
4
+ import { c as Z } from "./index-D2ZczOXr.js";
5
+ import { C as W } from "./clipboard-check-BeAGxDVT.js";
6
+ import { E } from "./eye-off-C_4xkbRP.js";
7
+ import { c as f } from "./createLucideIcon-DhHxpK9K.js";
8
+ import { C as Y } from "./check-DrFSN__t.js";
9
+ import { S as D } from "./stethoscope-sZXGC43m.js";
10
+ import { C as F } from "./clock-Drd4Wtis.js";
11
+ import { G as J } from "./globe-sHBW1JN5.js";
12
+ import { T as P } from "./triangle-alert-CBnO6nq_.js";
13
+ import { H as Q } from "./heart-pulse-BCppJyN2.js";
14
+ import { V as X } from "./video-BheNGvsu.js";
15
+ import { R as T } from "./repeat-CvQa5rZt.js";
16
+ /**
17
+ * @license lucide-react v1.22.0 - ISC
18
+ *
19
+ * This source code is licensed under the ISC license.
20
+ * See the LICENSE file in the root directory of this source tree.
21
+ */
22
+ const ee = [
23
+ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
24
+ ["path", { d: "M4.929 4.929 19.07 19.071", key: "196cmz" }]
25
+ ], ne = f("ban", ee);
26
+ /**
27
+ * @license lucide-react v1.22.0 - ISC
28
+ *
29
+ * This source code is licensed under the ISC license.
30
+ * See the LICENSE file in the root directory of this source tree.
31
+ */
32
+ const ae = [
33
+ ["path", { d: "M4 10h12", key: "1y6xl8" }],
34
+ ["path", { d: "M4 14h9", key: "1loblj" }],
35
+ [
36
+ "path",
37
+ {
38
+ d: "M19 6a7.7 7.7 0 0 0-5.2-2A7.9 7.9 0 0 0 6 12c0 4.4 3.5 8 7.8 8 2 0 3.8-.8 5.2-2",
39
+ key: "1j6lzo"
40
+ }
41
+ ]
42
+ ], re = f("euro", ae);
43
+ /**
44
+ * @license lucide-react v1.22.0 - ISC
45
+ *
46
+ * This source code is licensed under the ISC license.
47
+ * See the LICENSE file in the root directory of this source tree.
48
+ */
49
+ const se = [
50
+ [
51
+ "path",
52
+ {
53
+ d: "M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z",
54
+ key: "emmmcr"
55
+ }
56
+ ],
57
+ ["path", { d: "M7 10v12", key: "1qc93n" }]
58
+ ], te = f("thumbs-up", se);
59
+ /**
60
+ * @license lucide-react v1.22.0 - ISC
61
+ *
62
+ * This source code is licensed under the ISC license.
63
+ * See the LICENSE file in the root directory of this source tree.
64
+ */
65
+ const de = [
66
+ [
67
+ "path",
68
+ {
69
+ d: "M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",
70
+ key: "1xq2db"
71
+ }
72
+ ]
73
+ ], ie = f("zap", de);
74
+ function oe(a) {
75
+ if (typeof a != "string") return null;
76
+ const r = a.trim();
77
+ if (!r.startsWith("#")) return null;
78
+ const n = r.slice(1);
79
+ let t, d, s;
80
+ if (n.length === 3) {
81
+ if (!/^[0-9a-f]{3}$/i.test(n)) return null;
82
+ t = parseInt(n[0] + n[0], 16), d = parseInt(n[1] + n[1], 16), s = parseInt(n[2] + n[2], 16);
83
+ } else if (n.length === 6) {
84
+ if (!/^[0-9a-f]{6}$/i.test(n)) return null;
85
+ t = parseInt(n.slice(0, 2), 16), d = parseInt(n.slice(2, 4), 16), s = parseInt(n.slice(4, 6), 16);
86
+ } else
87
+ return null;
88
+ return [t / 255, d / 255, s / 255];
89
+ }
90
+ function le([a, r, n]) {
91
+ const t = (d) => d <= 0.03928 ? d / 12.92 : Math.pow((d + 0.055) / 1.055, 2.4);
92
+ return 0.2126 * t(a) + 0.7152 * t(r) + 0.0722 * t(n);
93
+ }
94
+ function Ae(a, r, n) {
95
+ }
96
+ function ce(a) {
97
+ const r = oe(a);
98
+ return r ? le(r) > 0.1791 ? "on-light" : "on-dark" : null;
99
+ }
100
+ const me = {
101
+ confirmed: te,
102
+ waiting: F,
103
+ in_care: D,
104
+ done: Y,
105
+ cancelled: ne,
106
+ absent: ie
107
+ }, i = "ds:inline-flex ds:size-4.5 ds:shrink-0 ds:items-center ds:justify-center ds:rounded-[var(--radius-full)] ds:bg-[color:var(--card)] ds:border ds:border-[color:var(--border)] ds:shadow-[var(--shadow-sm)]", m = {
108
+ success: "ds:text-[color:var(--success-foreground)]",
109
+ info: "ds:text-[color:var(--info-foreground)]",
110
+ warning: "ds:text-[color:var(--warning-foreground)]",
111
+ error: "ds:text-[color:var(--error-foreground)]",
112
+ // Same AA-clearing accent mix Badge's accentSoft uses for its ink.
113
+ accent: "ds:text-[color:color-mix(in_srgb,var(--accent)_40%,var(--foreground))]"
114
+ }, pe = {
115
+ confirmed: "success",
116
+ waiting: "info",
117
+ in_care: "accent",
118
+ done: "success",
119
+ cancelled: "error",
120
+ absent: "warning"
121
+ }, ue = {
122
+ confirmed: "calendar.status.confirmed",
123
+ waiting: "calendar.status.waiting",
124
+ in_care: "calendar.status.inCare",
125
+ done: "calendar.status.done",
126
+ cancelled: "calendar.status.cancelled",
127
+ absent: "calendar.status.absent"
128
+ }, ve = Z(
129
+ [
130
+ // Block root; the appointment content is a wrap-capable flex row
131
+ // (inline-flowing text cell beside the icon column — structurally
132
+ // overlap-safe). Tight padding and line-height so sliver-height
133
+ // harnesses show a full text line.
134
+ "ds:relative ds:block",
135
+ "ds:w-full ds:h-full",
136
+ "ds:ps-[var(--spacing-2xs)] ds:pe-[var(--spacing-2xs)]",
137
+ "ds:rounded-[var(--radius-sm)]",
138
+ "ds:text-[length:var(--font-size-sm)]",
139
+ "ds:font-[var(--font-weight-medium)]",
140
+ "ds:leading-tight ds:text-start",
141
+ "ds:overflow-hidden",
142
+ // kept verbatim from the former base (inert on a non-focusable div
143
+ // inside FC; harmless)
144
+ "ds:focus-visible:outline-[length:var(--focus-ring-width)]",
145
+ "ds:focus-visible:outline-[var(--ring)]",
146
+ "ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]",
147
+ // SINGLE PAINTED SURFACE — always present, never conditional. One
148
+ // declaration per paint channel; value chain = "caller custom prop,
149
+ // else token". This structurally eliminates the CVA-vs-override
150
+ // specificity race (the old double-paint bug) — stylesheet order
151
+ // becomes irrelevant.
152
+ "ds:[background-color:var(--calendar-event-bg,var(--primary))]",
153
+ "ds:[color:var(--calendar-event-text,var(--primary-foreground))]",
154
+ "ds:border ds:[border-color:var(--calendar-event-border,transparent)]"
155
+ ].join(" "),
156
+ {
157
+ variants: {
158
+ // Do not add colour classes to this axis — status is icon + aria
159
+ // only; a unit test asserts identical computed background
160
+ // across all six statuses.
161
+ status: {
162
+ none: "",
163
+ confirmed: "",
164
+ waiting: "",
165
+ in_care: "",
166
+ done: "",
167
+ cancelled: "ds:line-through",
168
+ absent: ""
169
+ },
170
+ bookedOnline: {
171
+ // class name kept as a stable inert DOM hook; the stripe paint
172
+ // lives here (moved from fullcalendar-theme.css) so it works in
173
+ // the card's own stories, outside .fc-theme-alfadocs.
174
+ // currentcolor = resolved ink, so stripes stay visible over any
175
+ // picker colour.
176
+ true: "event-booked-online ds:bg-[image:repeating-linear-gradient(45deg,transparent,transparent_4px,color-mix(in_srgb,currentcolor_10%,transparent)_4px,color-mix(in_srgb,currentcolor_10%,transparent)_8px)]",
177
+ false: ""
178
+ },
179
+ // Task treatment: CUSTOM-PROPERTY assignments only — the consuming
180
+ // background-color / color / border-color declarations stay in the
181
+ // base above, so this cannot re-open the CVA-vs-override specificity
182
+ // race, and a caller's inline picker hex (set as the same custom
183
+ // properties via `style`) still wins. `border-dashed` is a
184
+ // border-style declaration — no property collision either.
185
+ kind: {
186
+ // The appointment's COLOUR IDENTITY edge — a thick start border
187
+ // in the event colour, platform-agenda style, so the colour
188
+ // reads even on sliver-height cards. Tasks keep the 1px edge:
189
+ // muted to-dos carry no colour identity.
190
+ appointment: "ds:border-s-4",
191
+ // Draft treatment — an appointment being COMPOSED, not yet saved
192
+ // (the slot a user just picked, mirrored on the grid while the
193
+ // editor is open). Same custom-property-only discipline as
194
+ // `task`: dashed outline over a light primary tint, so the
195
+ // placeholder reads as pending rather than as a booked slot.
196
+ draft: [
197
+ "ds:border-dashed",
198
+ "ds:[--calendar-event-bg:color-mix(in_srgb,var(--primary)_10%,var(--card))]",
199
+ "ds:[--calendar-event-text:var(--foreground)]",
200
+ "ds:[--calendar-event-border:var(--primary)]"
201
+ ].join(" "),
202
+ task: [
203
+ "ds:border-dashed",
204
+ "ds:[--calendar-event-bg:var(--muted)]",
205
+ "ds:[--calendar-event-text:var(--muted-foreground)]",
206
+ "ds:[--calendar-event-border:color-mix(in_srgb,currentcolor_45%,transparent)]"
207
+ ].join(" ")
208
+ },
209
+ // Tinted colour scheme — the chip-family look: the picker colour
210
+ // becomes a SOLID BORDER over a light tint of itself (theme-aware
211
+ // via color-mix with --card), text on the theme's foreground
212
+ // tokens. Custom-property assignments only — the painted
213
+ // declarations stay in the base. The runtime hex arrives as
214
+ // `--calendar-event-accent` (inline). Never combined with the task
215
+ // variant: the component forces `solid` for tasks so exactly one
216
+ // class-level assignment of each property exists per render.
217
+ colorStyle: {
218
+ solid: "",
219
+ tinted: [
220
+ "ds:[--calendar-event-bg:color-mix(in_srgb,var(--calendar-event-accent,var(--primary))_12%,var(--card))]",
221
+ "ds:[--calendar-event-text:var(--foreground)]",
222
+ "ds:[--calendar-event-border:var(--calendar-event-accent,var(--primary))]"
223
+ ].join(" ")
224
+ }
225
+ },
226
+ defaultVariants: {
227
+ status: "none",
228
+ bookedOnline: !1,
229
+ kind: "appointment",
230
+ colorStyle: "solid"
231
+ }
232
+ }
233
+ ), fe = q(
234
+ ({
235
+ title: a,
236
+ suffix: r,
237
+ rangeText: n,
238
+ showTime: t = !0,
239
+ allDay: d = !1,
240
+ status: s,
241
+ backgroundColor: o,
242
+ textColor: p,
243
+ borderColor: h,
244
+ isBookedOnline: g = !1,
245
+ hasUnassignedPatient: N,
246
+ hasHighlightedAnamnesis: w,
247
+ hasBillableAmount: k,
248
+ isTelehealth: y,
249
+ isRecurring: z,
250
+ isTask: l = !1,
251
+ isDraft: u = !1,
252
+ colorStyle: j = "solid",
253
+ resourceLabel: A,
254
+ privacyMasked: $ = !1,
255
+ eventId: L,
256
+ className: C,
257
+ style: I,
258
+ "aria-label": B,
259
+ ...O
260
+ }, M) => {
261
+ const { t: b } = G(), x = s ? me[s] : null, H = !!x || !!g || !!N || !!w || !!k || !!y || !!z, R = s ? b(ue[s]) : void 0, V = u ? b("calendar.eventKind.draft") : l ? b("calendar.eventKind.task") : void 0, K = B ?? [a, n, A, R, V].filter(Boolean).join(", "), v = !l && !u && j === "tinted", _ = !v && !p && o ? ce(o) : null, S = v ? o ? { "--calendar-event-accent": o } : void 0 : o || p || h ? {
262
+ ...o ? { "--calendar-event-bg": o } : {},
263
+ ...p ? { "--calendar-event-text": p } : _ === "on-light" ? { "--calendar-event-text": "var(--event-ink-on-light)" } : _ === "on-dark" ? { "--calendar-event-text": "var(--event-ink-on-dark)" } : {},
264
+ ...h ? { "--calendar-event-border": h } : {}
265
+ } : void 0, U = I || S ? { ...I, ...S } : void 0;
266
+ return /* @__PURE__ */ c(
267
+ "div",
268
+ {
269
+ ref: M,
270
+ ...O,
271
+ className: ve({
272
+ status: s ?? "none",
273
+ bookedOnline: g,
274
+ kind: u ? "draft" : l ? "task" : "appointment",
275
+ colorStyle: v ? "tinted" : "solid",
276
+ className: C
277
+ }),
278
+ style: U,
279
+ "aria-label": K,
280
+ "data-component": "calendar-event-card",
281
+ "data-event-id": L,
282
+ "data-kind": u ? "draft" : l ? "task" : "appointment",
283
+ "data-status": s ?? "none",
284
+ "data-contrast": v ? "tinted" : p ? "custom" : _ ?? "default",
285
+ children: [
286
+ l ? (
287
+ /* Task cards lead with ONE line — glyph + title inline. A task is
288
+ typically a 30-min block whose visible height fits a single
289
+ line; the appointment layout below would spend that line on the
290
+ indicator row and clip the title entirely. Tasks carry none of
291
+ the appointment flags, so the row loses nothing. */
292
+ /* @__PURE__ */ c("span", { className: "ds:flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
293
+ /* @__PURE__ */ e(
294
+ "span",
295
+ {
296
+ "aria-hidden": "true",
297
+ className: `${i} ds:text-[color:var(--muted-foreground)]`,
298
+ children: /* @__PURE__ */ e(W, { size: 11, "aria-hidden": "true" })
299
+ }
300
+ ),
301
+ t && !d && n ? /* @__PURE__ */ e("span", { className: "ds:whitespace-nowrap ds:text-[length:var(--font-size-xs)]", children: n }) : null,
302
+ /* @__PURE__ */ e("span", { className: "ds:[min-inline-size:0] ds:font-[var(--font-weight-semibold)] ds:truncate ds:text-start", children: $ ? /* @__PURE__ */ c("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
303
+ /* @__PURE__ */ e(E, { size: 12, "aria-hidden": "true" }),
304
+ a
305
+ ] }) : a })
306
+ ] })
307
+ ) : (
308
+ /* Platform-density layout with STRUCTURAL overlap-safety: the
309
+ first row is a flex pair — an inline-flowing text cell (time,
310
+ then the semibold name; wraps when taller cards allow) beside
311
+ a fixed icon column. Flex cells cannot paint over each other,
312
+ unlike a float (inline text paints ABOVE floats, which
313
+ produced glyphs-through-icons in sliver-width columns). A
314
+ one-line sliver still reads "09:15 Name" plus icons. */
315
+ /* @__PURE__ */ c("span", { className: "ds:flex ds:h-full ds:items-stretch ds:gap-[var(--spacing-2xs)]", children: [
316
+ /* @__PURE__ */ c("span", { className: "ds:min-w-0 ds:flex-1 ds:overflow-hidden ds:break-normal", children: [
317
+ t && !d && n ? (
318
+ // No opacity here — composing 70% over saturated bgs drops
319
+ // effective contrast below WCAG AA. The smaller
320
+ // font-size-xs vs the title's font-weight-semibold provides
321
+ // sufficient visual hierarchy.
322
+ /* @__PURE__ */ e("span", { className: "ds:me-[var(--spacing-2xs)] ds:whitespace-nowrap ds:text-[length:var(--font-size-xs)]", children: n })
323
+ ) : null,
324
+ /* @__PURE__ */ e("span", { className: "ds:font-[var(--font-weight-semibold)]", children: $ ? (
325
+ /* The eye + mask get their own start padding so the
326
+ redaction doesn't crowd the time. */
327
+ /* @__PURE__ */ c("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)] ds:ps-[var(--spacing-2xs)] ds:align-middle", children: [
328
+ /* @__PURE__ */ e(E, { size: 12, "aria-hidden": "true" }),
329
+ a
330
+ ] })
331
+ ) : a }),
332
+ r ? (
333
+ /* Second line inside the text cell — beside the plate,
334
+ never beneath it. */
335
+ /* @__PURE__ */ e("span", { className: "ds:block ds:truncate ds:text-[length:var(--font-size-xs)]", children: r })
336
+ ) : null
337
+ ] }),
338
+ /* @__PURE__ */ c(
339
+ "span",
340
+ {
341
+ className: H ? (
342
+ /* Vertically CENTRED indicator column — each disc is
343
+ its own card-surface circle, so no plate and no
344
+ colour-on-colour. */
345
+ "ds:flex ds:shrink-0 ds:items-center ds:gap-[var(--spacing-2xs)] ds:self-center"
346
+ ) : "ds:hidden",
347
+ children: [
348
+ x && s ? /* @__PURE__ */ e(
349
+ "span",
350
+ {
351
+ "aria-hidden": "true",
352
+ className: `${i} ${m[pe[s]]}`,
353
+ children: /* @__PURE__ */ e(x, { size: 11, "aria-hidden": "true" })
354
+ }
355
+ ) : null,
356
+ g ? /* @__PURE__ */ e(
357
+ "span",
358
+ {
359
+ "aria-hidden": "true",
360
+ className: `${i} ${m.info}`,
361
+ children: /* @__PURE__ */ e(J, { size: 11, "aria-hidden": "true" })
362
+ }
363
+ ) : null,
364
+ N ? /* @__PURE__ */ e(
365
+ "span",
366
+ {
367
+ "aria-hidden": "true",
368
+ className: `${i} ${m.warning}`,
369
+ children: /* @__PURE__ */ e(P, { size: 11, "aria-hidden": "true" })
370
+ }
371
+ ) : null,
372
+ w ? /* @__PURE__ */ e(
373
+ "span",
374
+ {
375
+ "aria-hidden": "true",
376
+ className: `${i} ${m.accent}`,
377
+ children: /* @__PURE__ */ e(Q, { size: 11, "aria-hidden": "true" })
378
+ }
379
+ ) : null,
380
+ k ? /* @__PURE__ */ e(
381
+ "span",
382
+ {
383
+ "aria-hidden": "true",
384
+ className: `${i} ${m.warning}`,
385
+ children: /* @__PURE__ */ e(re, { size: 11, "aria-hidden": "true" })
386
+ }
387
+ ) : null,
388
+ y ? /* @__PURE__ */ e(
389
+ "span",
390
+ {
391
+ "aria-hidden": "true",
392
+ className: `${i} ${m.info}`,
393
+ children: /* @__PURE__ */ e(X, { size: 11, "aria-hidden": "true" })
394
+ }
395
+ ) : null,
396
+ z ? /* @__PURE__ */ e(
397
+ "span",
398
+ {
399
+ "aria-hidden": "true",
400
+ className: `${i} ${m.info}`,
401
+ children: /* @__PURE__ */ e(T, { size: 11, "aria-hidden": "true" })
402
+ }
403
+ ) : null
404
+ ]
405
+ }
406
+ )
407
+ ] })
408
+ ),
409
+ l && t && !d && n ? /* @__PURE__ */ e("span", { className: "ds:text-[length:var(--font-size-xs)]", children: n }) : null,
410
+ l && r ? (
411
+ /* Task cards keep the below-row suffix (their branch has no
412
+ text cell / plate split). */
413
+ /* @__PURE__ */ e("span", { className: "ds:block ds:truncate ds:text-[length:var(--font-size-xs)]", children: r })
414
+ ) : null
415
+ ]
416
+ }
417
+ );
418
+ }
419
+ );
420
+ fe.displayName = "CalendarEventCard";
421
+ export {
422
+ fe as C,
423
+ Ae as w
424
+ };
425
+ //# sourceMappingURL=calendar-event-card-Bjdbik8G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-event-card-Bjdbik8G.js","sources":["../../node_modules/lucide-react/dist/esm/icons/ban.mjs","../../node_modules/lucide-react/dist/esm/icons/euro.mjs","../../node_modules/lucide-react/dist/esm/icons/thumbs-up.mjs","../../node_modules/lucide-react/dist/esm/icons/zap.mjs","../../src/components/_shared/contrast-warning.ts","../../src/components/calendar-event-card/calendar-event-card.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M4.929 4.929 19.07 19.071\", key: \"196cmz\" }]\n];\nconst Ban = createLucideIcon(\"ban\", __iconNode);\n\nexport { __iconNode, Ban as default };\n//# sourceMappingURL=ban.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M4 10h12\", key: \"1y6xl8\" }],\n [\"path\", { d: \"M4 14h9\", key: \"1loblj\" }],\n [\n \"path\",\n {\n d: \"M19 6a7.7 7.7 0 0 0-5.2-2A7.9 7.9 0 0 0 6 12c0 4.4 3.5 8 7.8 8 2 0 3.8-.8 5.2-2\",\n key: \"1j6lzo\"\n }\n ]\n];\nconst Euro = createLucideIcon(\"euro\", __iconNode);\n\nexport { __iconNode, Euro as default };\n//# sourceMappingURL=euro.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\",\n key: \"emmmcr\"\n }\n ],\n [\"path\", { d: \"M7 10v12\", key: \"1qc93n\" }]\n];\nconst ThumbsUp = createLucideIcon(\"thumbs-up\", __iconNode);\n\nexport { __iconNode, ThumbsUp as default };\n//# sourceMappingURL=thumbs-up.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\",\n key: \"1xq2db\"\n }\n ]\n];\nconst Zap = createLucideIcon(\"zap\", __iconNode);\n\nexport { __iconNode, Zap as default };\n//# sourceMappingURL=zap.mjs.map\n","/* ------------------------------------------------------------------ */\n/* Shared contrast guardrail — Calendar + CalendarEventCard */\n/* */\n/* The consuming app supplies runtime hex pairs at several surfaces: */\n/* - event.backgroundColor / event.textColor (+ event.borderColor) */\n/* - modeBannerColor / modeBannerTextColor */\n/* - resource.color / resource.shortTitleTextColor */\n/* */\n/* When the text half of the pair is also a hex (i.e. both halves come */\n/* from the caller), we can validate them synchronously and warn the */\n/* consuming-app developer during DEV if the pair fails WCAG AA normal */\n/* text (4.5:1). When only the background half is supplied, */\n/* `resolveInk` derives a provably AA-safe black/white ink for it. */\n/* Every helper is a no-op in production builds. */\n/* ------------------------------------------------------------------ */\n\n/* Module-level dedup set — keyed on the (bg, fg, context) tuple so the\n same bad pair moving around the calendar only warns once per session.\n Exposed via `resetContrastWarnings()` for test isolation. */\nconst warnedTuples = new Set<string>();\n\n/** Reset the dedup set — intended for use between tests. */\nexport function resetContrastWarnings(): void {\n warnedTuples.clear();\n}\n\n/**\n * Parse a 3-char or 6-char `#RRGGBB` hex string into a linear sRGB\n * triple in the [0,1] range. Returns `null` for any input the caller\n * can't parse (malformed prefix, bad length, non-hex characters) —\n * the helper stays silent in that case rather than emitting noise.\n */\nfunction parseHex(hex: string): [number, number, number] | null {\n if (typeof hex !== 'string') return null;\n const trimmed = hex.trim();\n if (!trimmed.startsWith('#')) return null;\n const body = trimmed.slice(1);\n let r: number;\n let g: number;\n let b: number;\n if (body.length === 3) {\n if (!/^[0-9a-f]{3}$/i.test(body)) return null;\n r = parseInt(body[0] + body[0], 16);\n g = parseInt(body[1] + body[1], 16);\n b = parseInt(body[2] + body[2], 16);\n } else if (body.length === 6) {\n if (!/^[0-9a-f]{6}$/i.test(body)) return null;\n r = parseInt(body.slice(0, 2), 16);\n g = parseInt(body.slice(2, 4), 16);\n b = parseInt(body.slice(4, 6), 16);\n } else {\n return null;\n }\n return [r / 255, g / 255, b / 255];\n}\n\n/**\n * WCAG 2.1 relative luminance. Each channel is gamma-corrected then\n * weighted against the CIE photopic sensitivity of the human eye.\n * https://www.w3.org/TR/WCAG21/#dfn-relative-luminance\n */\nfunction relativeLuminance([r, g, b]: [number, number, number]): number {\n const lin = (c: number): number =>\n c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n return 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b);\n}\n\n/**\n * WCAG 2.1 contrast ratio. Always returns a value in [1, 21]; the\n * relative-luminance lighter-over-darker convention is applied here.\n */\nfunction contrastRatio(\n bg: [number, number, number],\n fg: [number, number, number],\n): number {\n const l1 = relativeLuminance(bg);\n const l2 = relativeLuminance(fg);\n const lighter = Math.max(l1, l2);\n const darker = Math.min(l1, l2);\n return (lighter + 0.05) / (darker + 0.05);\n}\n\n/**\n * DEV-only WCAG AA guardrail for caller-supplied hex pairs.\n *\n * - No-op when `import.meta.env.DEV` is false.\n * - No-op when either half of the pair is missing (the \"fg missing →\n * inherits DS token\" case is a docs concern; the DS token isn't a\n * hex at runtime so we can't check it here).\n * - No-op when either hex can't be parsed (silent — not the helper's\n * concern to police malformed input).\n * - Deduplicated by `(bgHex, fgHex, contextLabel)` tuple so moving a\n * ratio-bad event around the calendar doesn't spam the console.\n *\n * @param bgHex - Caller-supplied background hex (e.g. `'#c2185b'`)\n * @param fgHex - Caller-supplied foreground hex (e.g. `'#ffffff'`)\n * @param contextLabel - Short description for the warning (e.g. `'event e1'`).\n */\nexport function warnLowContrast(\n bgHex: string | undefined,\n fgHex: string | undefined,\n contextLabel: string,\n): void {\n if (!import.meta.env.DEV) return;\n if (!bgHex || !fgHex) return;\n\n const bg = parseHex(bgHex);\n const fg = parseHex(fgHex);\n if (!bg || !fg) return;\n\n const ratio = contrastRatio(bg, fg);\n if (ratio >= 4.5) return;\n\n const key = `${bgHex}|${fgHex}|${contextLabel}`;\n if (warnedTuples.has(key)) return;\n warnedTuples.add(key);\n\n /* `bg` parsed successfully above, so `resolveInk(bgHex)` is guaranteed\n to produce a compliant ink — the omit-textColor hint is always valid\n at this point. */\n console.warn(\n `[Calendar] Low contrast on ${contextLabel}: ${bgHex} / ${fgHex} (ratio ${ratio.toFixed(\n 2,\n )}, target 4.5). Pass a matching textColor/fgHex, pick a higher-contrast background, or omit textColor to let the kit choose a compliant ink.`,\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Ink derivation — bg-only caller colours */\n/* ------------------------------------------------------------------ */\n\nexport type EventInk = 'on-light' | 'on-dark';\n\n/**\n * Pick the ink for an arbitrary opaque bg hex. Returns `null` when the\n * input can't be parsed (`#rgb` / `#rrggbb` only).\n *\n * The threshold 0.1791 is the relative luminance at which\n * `contrast(bg, #fff) === contrast(bg, #000)`; the better of the two\n * always yields ≥ 4.58:1 (the minimum, at a mid-grey ≈ `#757575`) —\n * provably WCAG AA-safe for any opaque background.\n */\nexport function resolveInk(bgHex: string): EventInk | null {\n const bg = parseHex(bgHex);\n if (!bg) return null;\n // threshold where contrast(bg, #fff) === contrast(bg, #000)\n return relativeLuminance(bg) > 0.1791 ? 'on-light' : 'on-dark';\n}\n\n/**\n * DEV-only, one-shot warning for a caller `backgroundColor` the kit can't\n * parse (`rgb(…)`, keywords, malformed hex). The browser can still paint\n * it, but the text falls back to the token default and contrast can't be\n * verified. Deduplicated by `(bgHex, contextLabel)`.\n */\nexport function warnUnparseableBackground(\n bgHex: string,\n contextLabel: string,\n): void {\n if (!import.meta.env.DEV) return;\n if (parseHex(bgHex)) return;\n\n const key = `unparseable|${bgHex}|${contextLabel}`;\n if (warnedTuples.has(key)) return;\n warnedTuples.add(key);\n\n console.warn(\n `[Calendar] Unparseable backgroundColor on ${contextLabel}: \"${bgHex}\". ` +\n `Expected #rgb or #rrggbb — contrast cannot be verified and the text ` +\n `colour falls back to the token default.`,\n );\n}\n\n/**\n * DEV-only, one-shot warning for a near-white `backgroundColor`\n * (relative luminance > 0.9) supplied without a `borderColor` — the\n * event may be invisible against the calendar grid. The kit warns, it\n * does not repaint (delineation is decorative under WCAG 1.4.11 and the\n * consumer owns the picker colour). Deduplicated by `(bgHex, contextLabel)`.\n */\nexport function warnLowDelineation(bgHex: string, contextLabel: string): void {\n if (!import.meta.env.DEV) return;\n\n const bg = parseHex(bgHex);\n if (!bg) return;\n if (relativeLuminance(bg) <= 0.9) return;\n\n const key = `delineation|${bgHex}|${contextLabel}`;\n if (warnedTuples.has(key)) return;\n warnedTuples.add(key);\n\n console.warn(\n `[Calendar] Light backgroundColor without borderColor on ${contextLabel}: ` +\n `${bgHex} may be invisible against the grid — pass a borderColor ` +\n `(the platform convention sends a light-grey border for white backgrounds).`,\n );\n}\n","/* ------------------------------------------------------------------ */\n/* CalendarEventCard — the single painted surface of a calendar event. */\n/* */\n/* Colour model (platform parity): the caller's picker hex */\n/* (backgroundColor / textColor / borderColor) is the ONLY thing that */\n/* paints the card. `status` never paints the surface — it selects an */\n/* icon and (for `cancelled`) a line-through. When no picker colour */\n/* is supplied the surface falls back to the theme's --primary / */\n/* --primary-foreground pair. */\n/* */\n/* Non-interactive by design: inside FullCalendar the outer harness */\n/* anchor owns click/drag/focus; standalone consumers wrap the card in */\n/* their own button/link. No onClick in the contract. */\n/* ------------------------------------------------------------------ */\n\nimport { forwardRef } from 'react';\nimport type { CSSProperties, HTMLAttributes } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { cva } from 'class-variance-authority';\nimport {\n ThumbsUp,\n Clock,\n Stethoscope,\n Check,\n Ban,\n Zap,\n Globe,\n TriangleAlert,\n HeartPulse,\n Euro,\n Video,\n Repeat,\n EyeOff,\n ClipboardCheck,\n type LucideIcon,\n} from 'lucide-react';\n// Type-only import — erased at build, no runtime cycle with calendar.tsx's\n// runtime import of this card. Do NOT convert to a value import.\nimport type { CalendarEventStatus } from '../calendar/calendar';\nimport {\n warnLowContrast,\n resolveInk,\n warnUnparseableBackground,\n warnLowDelineation,\n} from '../_shared/contrast-warning';\n\n/* ------------------------------------------------------------------ */\n/* Status lookups */\n/* ------------------------------------------------------------------ */\n\nconst STATUS_ICON: Record<CalendarEventStatus, LucideIcon> = {\n confirmed: ThumbsUp,\n waiting: Clock,\n in_care: Stethoscope,\n done: Check,\n cancelled: Ban,\n absent: Zap,\n};\n\n/* Status → i18n key lookup. Kept as a literal object (not a template)\n so static-analysis extractors can find every key. Keys already exist\n in all 18 locale bundles — do not add new ones here. */\n/* Indicator DISC — option D of the design review: each glyph in a small\n circle on the plain card surface (hairline border + row-lift shadow)\n with the SEMANTIC colour as icon ink. Chip-grade contrast on any\n picker colour without a plate; ink tokens mirror Badge's variants so\n the vocabulary stays one system. */\nconst INDICATOR_DISC_BASE =\n 'ds:inline-flex ds:size-4.5 ds:shrink-0 ds:items-center ds:justify-center ds:rounded-[var(--radius-full)] ds:bg-[color:var(--card)] ds:border ds:border-[color:var(--border)] ds:shadow-[var(--shadow-sm)]';\n\ntype IndicatorTone = 'success' | 'info' | 'warning' | 'error' | 'accent';\n\nconst INDICATOR_DISC_TONE: Record<IndicatorTone, string> = {\n success: 'ds:text-[color:var(--success-foreground)]',\n info: 'ds:text-[color:var(--info-foreground)]',\n warning: 'ds:text-[color:var(--warning-foreground)]',\n error: 'ds:text-[color:var(--error-foreground)]',\n // Same AA-clearing accent mix Badge's accentSoft uses for its ink.\n accent:\n 'ds:text-[color:color-mix(in_srgb,var(--accent)_40%,var(--foreground))]',\n};\n\n/* Status → disc tone — the same semantic mapping as the accent bar. */\nconst STATUS_DISC_TONE: Record<CalendarEventStatus, IndicatorTone> = {\n confirmed: 'success',\n waiting: 'info',\n in_care: 'accent',\n done: 'success',\n cancelled: 'error',\n absent: 'warning',\n};\n\nconst STATUS_LABEL_KEYS: Record<CalendarEventStatus, string> = {\n confirmed: 'calendar.status.confirmed',\n waiting: 'calendar.status.waiting',\n in_care: 'calendar.status.inCare',\n done: 'calendar.status.done',\n cancelled: 'calendar.status.cancelled',\n absent: 'calendar.status.absent',\n};\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst calendarEventCardVariants = cva(\n [\n // Block root; the appointment content is a wrap-capable flex row\n // (inline-flowing text cell beside the icon column — structurally\n // overlap-safe). Tight padding and line-height so sliver-height\n // harnesses show a full text line.\n 'ds:relative ds:block',\n 'ds:w-full ds:h-full',\n 'ds:ps-[var(--spacing-2xs)] ds:pe-[var(--spacing-2xs)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:text-[length:var(--font-size-sm)]',\n 'ds:font-[var(--font-weight-medium)]',\n 'ds:leading-tight ds:text-start',\n 'ds:overflow-hidden',\n // kept verbatim from the former base (inert on a non-focusable div\n // inside FC; harmless)\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n // SINGLE PAINTED SURFACE — always present, never conditional. One\n // declaration per paint channel; value chain = \"caller custom prop,\n // else token\". This structurally eliminates the CVA-vs-override\n // specificity race (the old double-paint bug) — stylesheet order\n // becomes irrelevant.\n 'ds:[background-color:var(--calendar-event-bg,var(--primary))]',\n 'ds:[color:var(--calendar-event-text,var(--primary-foreground))]',\n 'ds:border ds:[border-color:var(--calendar-event-border,transparent)]',\n ].join(' '),\n {\n variants: {\n // Do not add colour classes to this axis — status is icon + aria\n // only; a unit test asserts identical computed background\n // across all six statuses.\n status: {\n none: '',\n confirmed: '',\n waiting: '',\n in_care: '',\n done: '',\n cancelled: 'ds:line-through',\n absent: '',\n },\n bookedOnline: {\n // class name kept as a stable inert DOM hook; the stripe paint\n // lives here (moved from fullcalendar-theme.css) so it works in\n // the card's own stories, outside .fc-theme-alfadocs.\n // currentcolor = resolved ink, so stripes stay visible over any\n // picker colour.\n true: 'event-booked-online ds:bg-[image:repeating-linear-gradient(45deg,transparent,transparent_4px,color-mix(in_srgb,currentcolor_10%,transparent)_4px,color-mix(in_srgb,currentcolor_10%,transparent)_8px)]',\n false: '',\n },\n // Task treatment: CUSTOM-PROPERTY assignments only — the consuming\n // background-color / color / border-color declarations stay in the\n // base above, so this cannot re-open the CVA-vs-override specificity\n // race, and a caller's inline picker hex (set as the same custom\n // properties via `style`) still wins. `border-dashed` is a\n // border-style declaration — no property collision either.\n kind: {\n // The appointment's COLOUR IDENTITY edge — a thick start border\n // in the event colour, platform-agenda style, so the colour\n // reads even on sliver-height cards. Tasks keep the 1px edge:\n // muted to-dos carry no colour identity.\n appointment: 'ds:border-s-4',\n // Draft treatment — an appointment being COMPOSED, not yet saved\n // (the slot a user just picked, mirrored on the grid while the\n // editor is open). Same custom-property-only discipline as\n // `task`: dashed outline over a light primary tint, so the\n // placeholder reads as pending rather than as a booked slot.\n draft: [\n 'ds:border-dashed',\n 'ds:[--calendar-event-bg:color-mix(in_srgb,var(--primary)_10%,var(--card))]',\n 'ds:[--calendar-event-text:var(--foreground)]',\n 'ds:[--calendar-event-border:var(--primary)]',\n ].join(' '),\n task: [\n 'ds:border-dashed',\n 'ds:[--calendar-event-bg:var(--muted)]',\n 'ds:[--calendar-event-text:var(--muted-foreground)]',\n 'ds:[--calendar-event-border:color-mix(in_srgb,currentcolor_45%,transparent)]',\n ].join(' '),\n },\n // Tinted colour scheme — the chip-family look: the picker colour\n // becomes a SOLID BORDER over a light tint of itself (theme-aware\n // via color-mix with --card), text on the theme's foreground\n // tokens. Custom-property assignments only — the painted\n // declarations stay in the base. The runtime hex arrives as\n // `--calendar-event-accent` (inline). Never combined with the task\n // variant: the component forces `solid` for tasks so exactly one\n // class-level assignment of each property exists per render.\n colorStyle: {\n solid: '',\n tinted: [\n 'ds:[--calendar-event-bg:color-mix(in_srgb,var(--calendar-event-accent,var(--primary))_12%,var(--card))]',\n 'ds:[--calendar-event-text:var(--foreground)]',\n 'ds:[--calendar-event-border:var(--calendar-event-accent,var(--primary))]',\n ].join(' '),\n },\n },\n defaultVariants: {\n status: 'none',\n bookedOnline: false,\n kind: 'appointment',\n colorStyle: 'solid',\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Props */\n/* ------------------------------------------------------------------ */\n\n/**\n * The single painted surface of a calendar event.\n *\n * Colour model (platform parity): the caller's picker hex\n * (`backgroundColor` / `textColor` / `borderColor`) is the ONLY thing that\n * paints the card. `status` never paints the surface — it selects an icon\n * and (for `cancelled`) a line-through.\n *\n * Non-interactive by design: inside FullCalendar the outer harness anchor\n * owns click/drag/focus; standalone consumers wrap the card in their own\n * button/link. No onClick in the contract.\n */\nexport interface CalendarEventCardProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title'\n> {\n /**\n * Primary line. Pass the ALREADY-MASKED title when privacy applies — the\n * card never receives a name it must not render, so it cannot leak it\n * (visually or via the composed aria-label).\n */\n title: string;\n /**\n * Secondary description line, normal weight, truncated. Note: the\n * Calendar's privacy mode does NOT mask the suffix (current behaviour,\n * preserved deliberately).\n */\n suffix?: string;\n /**\n * Pre-formatted, localised time range (e.g. \"09:00 – 09:45\"). The\n * Calendar adapter computes it via Intl.DateTimeFormat.formatRange.\n * Included in the composed aria-label whenever present (even when the\n * visual time line is suppressed via showTime/allDay — matches today's\n * Calendar behaviour byte-for-byte).\n */\n rangeText?: string;\n /**\n * Gates the VISUAL time line only (aria keeps rangeText). Mirrors\n * CalendarProps.showTime. @default true\n */\n showTime?: boolean;\n /**\n * All-day events suppress the visual time line (aria keeps rangeText).\n * @default false\n */\n allDay?: boolean;\n\n /**\n * Lifecycle state (6-state, matches the platform DoctorAppointment\n * lifecycle) → status icon + line-through for `cancelled` +\n * localised label in the aria-label. NEVER paints the\n * card surface.\n */\n status?: CalendarEventStatus;\n\n /**\n * Runtime hex (#rgb or #rrggbb) from the consumer's colour picker — THE\n * painted surface. Injected as `--calendar-event-bg` via the sanctioned\n * inline custom-property pattern (23-constraints §inline-style exception).\n */\n backgroundColor?: string;\n /**\n * Runtime hex paired with backgroundColor. When omitted while\n * backgroundColor is set, the card auto-derives black/white ink by\n * luminance (provably WCAG AA ≥ 4.58:1 for any opaque colour).\n */\n textColor?: string;\n /**\n * Runtime hex border for delineating light surfaces. The platform sends\n * '#cccccc' when backgroundColor is '#ffffff' and omits it otherwise.\n * Falls back to transparent; border-width is constant (1px always\n * rendered), so toggling never shifts layout and event boundaries\n * survive forced-colors / Windows High Contrast for free.\n */\n borderColor?: string;\n\n /* Indicator icons — names identical to CalendarEvent fields (1:1 map). */\n /** Globe icon + diagonal stripe overlay. */\n isBookedOnline?: boolean;\n /** AlertTriangle icon. */\n hasUnassignedPatient?: boolean;\n /** HeartPulse icon. */\n hasHighlightedAnamnesis?: boolean;\n /** Euro icon. */\n hasBillableAmount?: boolean;\n /** Video icon. */\n isTelehealth?: boolean;\n /**\n * Repeat icon — this event belongs to a REPEATING SERIES. Set it on\n * every occurrence, not only the first: the flag answers \"will moving\n * or deleting this touch other appointments?\", which is true of a\n * modified occurrence too. Series ROLE (which row owns the rule) is a\n * separate concern — see `CalendarEvent.isRecurrenceParent`.\n */\n isRecurring?: boolean;\n /**\n * Task treatment — a calendar-scheduled to-do renders distinctly from an\n * appointment: dashed outline (derived from the resolved ink when no\n * `borderColor` is supplied), muted default surface (an explicit\n * `backgroundColor`/`textColor` still wins), a leading clipboard glyph,\n * and a localised \"task\" word appended to the accessible name. Emitted as\n * `data-kind=\"task\"` for DOM hooks.\n */\n isTask?: boolean;\n /**\n * Draft treatment — a placeholder for an appointment being composed:\n * the slot the user just picked, mirrored on the grid while the editor\n * is open. Dashed outline over a light primary tint, with a localised\n * \"draft\" word appended to the accessible name. Emitted as\n * `data-kind=\"draft\"`. Takes precedence over `isTask`, and like a task\n * it forces the solid paint path so exactly one class-level assignment\n * of each paint custom property exists per render.\n */\n isDraft?: boolean;\n /**\n * Colour scheme for the picker colour. `'solid'` (default) is the\n * platform model — the hex paints the whole surface, ink auto-derived.\n * `'tinted'` is the chip-family scheme: the hex becomes a SOLID BORDER\n * over a light tint of itself (theme-aware via color-mix with `--card`),\n * with text on the theme's foreground tokens — `textColor` and\n * `borderColor` are ignored under it. Tasks keep their muted dashed\n * treatment regardless.\n */\n colorStyle?: 'solid' | 'tinted';\n\n /**\n * Resource title (chair/operator) woven into the composed aria-label\n * only — never rendered visually. The Calendar adapter resolves\n * resourceId → title before passing it.\n */\n resourceLabel?: string;\n /**\n * The title is a privacy MASK (the Calendar's privacy mode swapped the\n * patient name for `privacyModeTitle`). Renders a crossed-out-eye glyph\n * beside the mask so the redaction is legible as deliberate, with its\n * own breathing room after the time.\n */\n privacyMasked?: boolean;\n /**\n * Stable event id → emitted as `data-event-id` (Calendar.focusEvent\n * targets it) and used as the contrast-warning dedup context.\n */\n eventId?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const CalendarEventCard = forwardRef<\n HTMLDivElement,\n CalendarEventCardProps\n>(\n (\n {\n title,\n suffix,\n rangeText,\n showTime = true,\n allDay = false,\n status,\n backgroundColor,\n textColor,\n borderColor,\n isBookedOnline = false,\n hasUnassignedPatient,\n hasHighlightedAnamnesis,\n hasBillableAmount,\n isTelehealth,\n isRecurring,\n isTask = false,\n isDraft = false,\n colorStyle = 'solid',\n resourceLabel,\n privacyMasked = false,\n eventId,\n className,\n style,\n 'aria-label': ariaLabelProp,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n\n const StatusIcon = status ? STATUS_ICON[status] : null;\n const hasIndicators =\n Boolean(StatusIcon) ||\n Boolean(isBookedOnline) ||\n Boolean(hasUnassignedPatient) ||\n Boolean(hasHighlightedAnamnesis) ||\n Boolean(hasBillableAmount) ||\n Boolean(isTelehealth) ||\n Boolean(isRecurring);\n const statusLabel = status ? t(STATUS_LABEL_KEYS[status]) : undefined;\n const kindLabel = isDraft\n ? t('calendar.eventKind.draft')\n : isTask\n ? t('calendar.eventKind.task')\n : undefined;\n\n /* Accessible name — the Calendar's historical composition, with the\n localised \"task\" word appended for task cards so screen-reader users\n get the same appointment-vs-task distinction the dashed outline and\n clipboard glyph carry visually. An explicit consumer-supplied\n aria-label wins. rangeText is always included when present, even when\n the visual time line is hidden. */\n const ariaLabel =\n ariaLabelProp ??\n [title, rangeText, resourceLabel, statusLabel, kindLabel]\n .filter(Boolean)\n .join(', ');\n\n /* Tasks force the solid path — their muted variant owns the paint\n custom properties, so the tinted class must never co-assign them. */\n const tinted = !isTask && !isDraft && colorStyle === 'tinted';\n\n /* Ink derivation — solid scheme only, when the caller paints the\n surface without pairing a text colour. */\n const ink =\n !tinted && !textColor && backgroundColor\n ? resolveInk(backgroundColor)\n : null;\n\n /* DEV-only guardrails — every helper no-ops in production and dedupes\n per session, so calling during render is safe. The tinted scheme\n paints text on theme tokens over a 12% tint, so the solid-scheme\n pair checks don't apply there. */\n const warnContext = eventId ? `event ${eventId}` : 'calendar-event-card';\n if (!tinted) {\n warnLowContrast(backgroundColor, textColor, warnContext);\n if (backgroundColor && !textColor) {\n // no-ops when the hex is parseable (i.e. when resolveInk succeeded)\n warnUnparseableBackground(backgroundColor, warnContext);\n }\n if (backgroundColor && !borderColor) {\n // no-ops unless the background is near-white (luminance > 0.9)\n warnLowDelineation(backgroundColor, warnContext);\n }\n }\n\n /* Per-event colour override: the consuming app passes runtime hex from\n its colour picker. 23-constraints permits inline `style` only as a\n CSS custom-property setter for runtime values that can't be\n enumerated at build time — the consuming background-color / color /\n border-color declarations live in the CVA base as Tailwind arbitrary\n values with token fallbacks. */\n const colourOverrides: CSSProperties | undefined = tinted\n ? backgroundColor\n ? ({ '--calendar-event-accent': backgroundColor } as CSSProperties)\n : undefined\n : backgroundColor || textColor || borderColor\n ? ({\n ...(backgroundColor\n ? { '--calendar-event-bg': backgroundColor }\n : {}),\n ...(textColor\n ? { '--calendar-event-text': textColor }\n : ink === 'on-light'\n ? { '--calendar-event-text': 'var(--event-ink-on-light)' }\n : ink === 'on-dark'\n ? { '--calendar-event-text': 'var(--event-ink-on-dark)' }\n : {}),\n ...(borderColor ? { '--calendar-event-border': borderColor } : {}),\n } as CSSProperties)\n : undefined;\n\n const mergedStyle: CSSProperties | undefined =\n style || colourOverrides ? { ...style, ...colourOverrides } : undefined;\n\n return (\n <div\n ref={ref}\n {...rest}\n className={calendarEventCardVariants({\n status: status ?? 'none',\n bookedOnline: isBookedOnline,\n kind: isDraft ? 'draft' : isTask ? 'task' : 'appointment',\n colorStyle: tinted ? 'tinted' : 'solid',\n className,\n })}\n // eslint-disable-next-line react/forbid-dom-props -- caller-supplied event bg/text/border hex injected via CSS variables (23-constraints §inline-style exception)\n style={mergedStyle}\n aria-label={ariaLabel}\n data-component=\"calendar-event-card\"\n data-event-id={eventId}\n data-kind={isDraft ? 'draft' : isTask ? 'task' : 'appointment'}\n data-status={status ?? 'none'}\n data-contrast={\n tinted ? 'tinted' : textColor ? 'custom' : (ink ?? 'default')\n }\n >\n {isTask ? (\n /* Task cards lead with ONE line — glyph + title inline. A task is\n typically a 30-min block whose visible height fits a single\n line; the appointment layout below would spend that line on the\n indicator row and clip the title entirely. Tasks carry none of\n the appointment flags, so the row loses nothing. */\n <span className=\"ds:flex ds:items-center ds:gap-[var(--spacing-2xs)]\">\n {/* Same card-surface disc as the appointment indicators —\n muted ink, since a task carries no semantic tone. */}\n <span\n aria-hidden=\"true\"\n className={`${INDICATOR_DISC_BASE} ds:text-[color:var(--muted-foreground)]`}\n >\n <ClipboardCheck size={11} aria-hidden=\"true\" />\n </span>\n {showTime && !allDay && rangeText ? (\n <span className=\"ds:whitespace-nowrap ds:text-[length:var(--font-size-xs)]\">\n {rangeText}\n </span>\n ) : null}\n <span className=\"ds:[min-inline-size:0] ds:font-[var(--font-weight-semibold)] ds:truncate ds:text-start\">\n {privacyMasked ? (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]\">\n <EyeOff size={12} aria-hidden=\"true\" />\n {title}\n </span>\n ) : (\n title\n )}\n </span>\n </span>\n ) : (\n /* Platform-density layout with STRUCTURAL overlap-safety: the\n first row is a flex pair — an inline-flowing text cell (time,\n then the semibold name; wraps when taller cards allow) beside\n a fixed icon column. Flex cells cannot paint over each other,\n unlike a float (inline text paints ABOVE floats, which\n produced glyphs-through-icons in sliver-width columns). A\n one-line sliver still reads \"09:15 Name\" plus icons. */\n <span className=\"ds:flex ds:h-full ds:items-stretch ds:gap-[var(--spacing-2xs)]\">\n {/* overflow-hidden + break-normal: words never shatter into\n per-character stacks in sliver-width tiles — overlong words\n clip inside the cell instead (platform behaviour). */}\n <span className=\"ds:min-w-0 ds:flex-1 ds:overflow-hidden ds:break-normal\">\n {showTime && !allDay && rangeText ? (\n // No opacity here — composing 70% over saturated bgs drops\n // effective contrast below WCAG AA. The smaller\n // font-size-xs vs the title's font-weight-semibold provides\n // sufficient visual hierarchy.\n <span className=\"ds:me-[var(--spacing-2xs)] ds:whitespace-nowrap ds:text-[length:var(--font-size-xs)]\">\n {rangeText}\n </span>\n ) : null}\n <span className=\"ds:font-[var(--font-weight-semibold)]\">\n {privacyMasked ? (\n /* The eye + mask get their own start padding so the\n redaction doesn't crowd the time. */\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)] ds:ps-[var(--spacing-2xs)] ds:align-middle\">\n <EyeOff size={12} aria-hidden=\"true\" />\n {title}\n </span>\n ) : (\n title\n )}\n </span>\n {suffix ? (\n /* Second line inside the text cell — beside the plate,\n never beneath it. */\n <span className=\"ds:block ds:truncate ds:text-[length:var(--font-size-xs)]\">\n {suffix}\n </span>\n ) : null}\n </span>\n <span\n className={\n hasIndicators\n ? /* Vertically CENTRED indicator column — each disc is\n its own card-surface circle, so no plate and no\n colour-on-colour. */\n 'ds:flex ds:shrink-0 ds:items-center ds:gap-[var(--spacing-2xs)] ds:self-center'\n : 'ds:hidden'\n }\n >\n {/* Semantic icon CHIPS (the anamnesis heart-chip idiom:\n icon-only Badge, tinted + bordered) — self-contained\n contrast on ANY picker surface, where bare currentcolor\n glyphs got lost. All decorative: the composed\n aria-label carries the status; chips are aria-hidden. */}\n {StatusIcon && status ? (\n <span\n aria-hidden=\"true\"\n className={`${INDICATOR_DISC_BASE} ${INDICATOR_DISC_TONE[STATUS_DISC_TONE[status]]}`}\n >\n <StatusIcon size={11} aria-hidden=\"true\" />\n </span>\n ) : null}\n {isBookedOnline ? (\n <span\n aria-hidden=\"true\"\n className={`${INDICATOR_DISC_BASE} ${INDICATOR_DISC_TONE.info}`}\n >\n <Globe size={11} aria-hidden=\"true\" />\n </span>\n ) : null}\n {hasUnassignedPatient ? (\n <span\n aria-hidden=\"true\"\n className={`${INDICATOR_DISC_BASE} ${INDICATOR_DISC_TONE.warning}`}\n >\n <TriangleAlert size={11} aria-hidden=\"true\" />\n </span>\n ) : null}\n {hasHighlightedAnamnesis ? (\n <span\n aria-hidden=\"true\"\n className={`${INDICATOR_DISC_BASE} ${INDICATOR_DISC_TONE.accent}`}\n >\n <HeartPulse size={11} aria-hidden=\"true\" />\n </span>\n ) : null}\n {hasBillableAmount ? (\n <span\n aria-hidden=\"true\"\n className={`${INDICATOR_DISC_BASE} ${INDICATOR_DISC_TONE.warning}`}\n >\n <Euro size={11} aria-hidden=\"true\" />\n </span>\n ) : null}\n {isTelehealth ? (\n <span\n aria-hidden=\"true\"\n className={`${INDICATOR_DISC_BASE} ${INDICATOR_DISC_TONE.info}`}\n >\n <Video size={11} aria-hidden=\"true\" />\n </span>\n ) : null}\n {isRecurring ? (\n <span\n aria-hidden=\"true\"\n className={`${INDICATOR_DISC_BASE} ${INDICATOR_DISC_TONE.info}`}\n >\n <Repeat size={11} aria-hidden=\"true\" />\n </span>\n ) : null}\n </span>\n </span>\n )}\n {isTask && showTime && !allDay && rangeText ? (\n <span className=\"ds:text-[length:var(--font-size-xs)]\">\n {rangeText}\n </span>\n ) : null}\n {isTask && suffix ? (\n /* Task cards keep the below-row suffix (their branch has no\n text cell / plate split). */\n <span className=\"ds:block ds:truncate ds:text-[length:var(--font-size-xs)]\">\n {suffix}\n </span>\n ) : null}\n </div>\n );\n },\n);\nCalendarEventCard.displayName = 'CalendarEventCard';\n"],"names":["__iconNode","Ban","createLucideIcon","Euro","ThumbsUp","Zap","parseHex","hex","trimmed","body","r","g","b","relativeLuminance","lin","c","warnLowContrast","bgHex","fgHex","contextLabel","resolveInk","bg","STATUS_ICON","Clock","Stethoscope","Check","INDICATOR_DISC_BASE","INDICATOR_DISC_TONE","STATUS_DISC_TONE","STATUS_LABEL_KEYS","calendarEventCardVariants","cva","CalendarEventCard","forwardRef","title","suffix","rangeText","showTime","allDay","status","backgroundColor","textColor","borderColor","isBookedOnline","hasUnassignedPatient","hasHighlightedAnamnesis","hasBillableAmount","isTelehealth","isRecurring","isTask","isDraft","colorStyle","resourceLabel","privacyMasked","eventId","className","style","ariaLabelProp","rest","ref","t","useTranslation","StatusIcon","hasIndicators","statusLabel","kindLabel","ariaLabel","tinted","ink","colourOverrides","mergedStyle","jsxs","jsx","ClipboardCheck","EyeOff","Globe","TriangleAlert","HeartPulse","Video","Repeat"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
@@ -7,9 +7,9 @@ import { P as A } from "./progress-CK8otcQ-.js";
7
7
  import { T as C } from "./timestamp-BV2lC-wV.js";
8
8
  import { T as L } from "./transaction-chip-DJCstquX.js";
9
9
  import { A as O, b as G, c as Y, a as $ } from "./accordion-C11v9ouP.js";
10
- import { C as q } from "./care-plan-entry-card-CMpoeNkb.js";
10
+ import { C as q } from "./care-plan-entry-card-BEhANdBE.js";
11
11
  import { u as J } from "./registry-DvAUVLHh.js";
12
- import { C as Q, e as W } from "./entity-card-9_62gY7l.js";
12
+ import { C as Q, e as W } from "./entity-card-DmrgYSEX.js";
13
13
  import { i as X } from "./is-safe-url-DkETxeHz.js";
14
14
  const Z = {
15
15
  id: "care-plan-card",
@@ -253,4 +253,4 @@ export {
253
253
  de as C,
254
254
  Z as c
255
255
  };
256
- //# sourceMappingURL=care-plan-card-DQjVRDxO.js.map
256
+ //# sourceMappingURL=care-plan-card-aDN4oem9.js.map