@alfadocs/ui-kit-debug 1.48.0 → 1.49.1

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 (215) hide show
  1. package/dist/_chunks/{agenda-card-C4h0xMGi.js → agenda-card-CjjxlA9K.js} +2 -2
  2. package/dist/_chunks/{agenda-card-C4h0xMGi.js.map → agenda-card-CjjxlA9K.js.map} +1 -1
  3. package/dist/_chunks/{agenda-tray-DNZYW2xt.js → agenda-tray-BhZASyJm.js} +2 -2
  4. package/dist/_chunks/{agenda-tray-DNZYW2xt.js.map → agenda-tray-BhZASyJm.js.map} +1 -1
  5. package/dist/_chunks/{alia-sidebar-Crn8OGPF.js → alia-sidebar-Dx-oeOV2.js} +3 -3
  6. package/dist/_chunks/{alia-sidebar-Crn8OGPF.js.map → alia-sidebar-Dx-oeOV2.js.map} +1 -1
  7. package/dist/_chunks/{appointment-card-CvGU0QP6.js → appointment-card-BgLpE6T5.js} +2 -2
  8. package/dist/_chunks/{appointment-card-CvGU0QP6.js.map → appointment-card-BgLpE6T5.js.map} +1 -1
  9. package/dist/_chunks/{appointment-peek--dmWznLZ.js → appointment-peek-BDiCIBb-.js} +2 -2
  10. package/dist/_chunks/{appointment-peek--dmWznLZ.js.map → appointment-peek-BDiCIBb-.js.map} +1 -1
  11. package/dist/_chunks/{appointment-timeline-y9uYZMUd.js → appointment-timeline-wQ-PdkFV.js} +2 -2
  12. package/dist/_chunks/{appointment-timeline-y9uYZMUd.js.map → appointment-timeline-wQ-PdkFV.js.map} +1 -1
  13. package/dist/_chunks/{appointment-tray-BTecNeSb.js → appointment-tray-D7Gt6m8x.js} +2 -2
  14. package/dist/_chunks/{appointment-tray-BTecNeSb.js.map → appointment-tray-D7Gt6m8x.js.map} +1 -1
  15. package/dist/_chunks/{avatar-CkDeQOSI.js → avatar-BVvjKNTp.js} +2 -2
  16. package/dist/_chunks/avatar-BVvjKNTp.js.map +1 -0
  17. package/dist/_chunks/{balance-badge-cell-CA0YNJMR.js → balance-badge-cell-klaxFNL_.js} +3 -3
  18. package/dist/_chunks/{balance-badge-cell-CA0YNJMR.js.map → balance-badge-cell-klaxFNL_.js.map} +1 -1
  19. package/dist/_chunks/{booking-BQYFDcrz.js → booking-BF9pVa2n.js} +377 -381
  20. package/dist/_chunks/booking-BF9pVa2n.js.map +1 -0
  21. package/dist/_chunks/{calendar-DjoJ9ovF.js → calendar-Bt44KMNO.js} +3 -2
  22. package/dist/_chunks/{calendar-DjoJ9ovF.js.map → calendar-Bt44KMNO.js.map} +1 -1
  23. package/dist/_chunks/calendar-workspace-iwyXajja.js +10469 -0
  24. package/dist/_chunks/{calendar-workspace-D8zX9JWm.js.map → calendar-workspace-iwyXajja.js.map} +1 -1
  25. package/dist/_chunks/{chat-message-Co_NRGM4.js → chat-message-B4ihjNy3.js} +2 -2
  26. package/dist/_chunks/{chat-message-Co_NRGM4.js.map → chat-message-B4ihjNy3.js.map} +1 -1
  27. package/dist/_chunks/{clinical-note-card-DYDQ3q2x.js → clinical-note-card-B7s5BtEl.js} +2 -2
  28. package/dist/_chunks/{clinical-note-card-DYDQ3q2x.js.map → clinical-note-card-B7s5BtEl.js.map} +1 -1
  29. package/dist/_chunks/{data-table-DWOSxlsy.js → data-table-CrI3_bjH.js} +411 -410
  30. package/dist/_chunks/data-table-CrI3_bjH.js.map +1 -0
  31. package/dist/_chunks/{dependent-selector-BR_8D2Qu.js → dependent-selector-58hTg5rB.js} +2 -2
  32. package/dist/_chunks/{dependent-selector-BR_8D2Qu.js.map → dependent-selector-58hTg5rB.js.map} +1 -1
  33. package/dist/_chunks/{entity-summary-Ckz_U00H.js → entity-summary-CFJfBdVP.js} +2 -2
  34. package/dist/_chunks/{entity-summary-Ckz_U00H.js.map → entity-summary-CFJfBdVP.js.map} +1 -1
  35. package/dist/_chunks/{file-manager-CqgxLqoA.js → file-manager-C6QQPQV5.js} +2 -2
  36. package/dist/_chunks/{file-manager-CqgxLqoA.js.map → file-manager-C6QQPQV5.js.map} +1 -1
  37. package/dist/_chunks/link-cell-renderer-CkNbUsBM.js +867 -0
  38. package/dist/_chunks/link-cell-renderer-CkNbUsBM.js.map +1 -0
  39. package/dist/_chunks/{marketplace-app-shell-Dehuxbi-.js → marketplace-app-shell-1uKqs4gD.js} +2 -2
  40. package/dist/_chunks/{marketplace-app-shell-Dehuxbi-.js.map → marketplace-app-shell-1uKqs4gD.js.map} +1 -1
  41. package/dist/_chunks/{message-card-DKOtnBHy.js → message-card-C2zsvyj0.js} +2 -2
  42. package/dist/_chunks/{message-card-DKOtnBHy.js.map → message-card-C2zsvyj0.js.map} +1 -1
  43. package/dist/_chunks/{message-tray-COMEtmyr.js → message-tray-CMlmxdH2.js} +2 -2
  44. package/dist/_chunks/{message-tray-COMEtmyr.js.map → message-tray-CMlmxdH2.js.map} +1 -1
  45. package/dist/_chunks/{notes-panel-BiOxZL_0.js → notes-panel-xxpFt-I1.js} +2 -2
  46. package/dist/_chunks/{notes-panel-BiOxZL_0.js.map → notes-panel-xxpFt-I1.js.map} +1 -1
  47. package/dist/_chunks/{operator-hero-5061fkY5.js → operator-hero-DyrNLoRO.js} +2 -2
  48. package/dist/_chunks/{operator-hero-5061fkY5.js.map → operator-hero-DyrNLoRO.js.map} +1 -1
  49. package/dist/_chunks/{patient-details-C23Hdm8v.js → patient-details-tTlvrJSU.js} +2 -2
  50. package/dist/_chunks/{patient-details-C23Hdm8v.js.map → patient-details-tTlvrJSU.js.map} +1 -1
  51. package/dist/_chunks/{patient-summary-card-C36L3h7h.js → patient-summary-card-DQ__6DR-.js} +2 -2
  52. package/dist/_chunks/{patient-summary-card-C36L3h7h.js.map → patient-summary-card-DQ__6DR-.js.map} +1 -1
  53. package/dist/_chunks/{practice-profile-hero-CPy5h2yI.js → practice-profile-hero-B-WcJYNH.js} +2 -2
  54. package/dist/_chunks/{practice-profile-hero-CPy5h2yI.js.map → practice-profile-hero-B-WcJYNH.js.map} +1 -1
  55. package/dist/_chunks/{practice-results-t2BHht91.js → practice-results-EKRiqWtQ.js} +2 -2
  56. package/dist/_chunks/{practice-results-t2BHht91.js.map → practice-results-EKRiqWtQ.js.map} +1 -1
  57. package/dist/_chunks/{signature-request-15D363w5.js → signature-request-BUGeG8oD.js} +2 -2
  58. package/dist/_chunks/{signature-request-15D363w5.js.map → signature-request-BUGeG8oD.js.map} +1 -1
  59. package/dist/_chunks/{task-card-CTTQfPS6.js → task-card-jaOhnj_q.js} +31 -30
  60. package/dist/_chunks/task-card-jaOhnj_q.js.map +1 -0
  61. package/dist/_chunks/{task-tray-JA-qp_pB.js → task-tray-HHyxi9ga.js} +2 -2
  62. package/dist/_chunks/{task-tray-JA-qp_pB.js.map → task-tray-HHyxi9ga.js.map} +1 -1
  63. package/dist/_chunks/{tasks-panel-C_dVDQKJ.js → tasks-panel-DbSjq_mz.js} +2 -2
  64. package/dist/_chunks/{tasks-panel-C_dVDQKJ.js.map → tasks-panel-DbSjq_mz.js.map} +1 -1
  65. package/dist/_chunks/{timeline-61AihzYz.js → timeline-ChY7iZrs.js} +2 -2
  66. package/dist/_chunks/{timeline-61AihzYz.js.map → timeline-ChY7iZrs.js.map} +1 -1
  67. package/dist/_chunks/{use-appointment-details-read-D2FH-cHF.js → use-appointment-details-read-5-hV-2xA.js} +4 -4
  68. package/dist/_chunks/{use-appointment-details-read-D2FH-cHF.js.map → use-appointment-details-read-5-hV-2xA.js.map} +1 -1
  69. package/dist/agent-catalog.json +1 -1
  70. package/dist/components/agenda-card/index.js +1 -1
  71. package/dist/components/agenda-tray/index.js +1 -1
  72. package/dist/components/appointment-card/index.js +2 -2
  73. package/dist/components/appointment-details-panel/index.js +1 -1
  74. package/dist/components/appointment-peek/index.js +1 -1
  75. package/dist/components/appointment-timeline/index.js +1 -1
  76. package/dist/components/avatar/avatar.d.ts.map +1 -1
  77. package/dist/components/avatar/index.js +1 -1
  78. package/dist/components/booking/booking.d.ts.map +1 -1
  79. package/dist/components/booking/cascade.d.ts +5 -0
  80. package/dist/components/booking/cascade.d.ts.map +1 -1
  81. package/dist/components/booking/index.js +1 -1
  82. package/dist/components/calendar/calendar.d.ts.map +1 -1
  83. package/dist/components/calendar/index.js +1 -1
  84. package/dist/components/chat-message/index.js +1 -1
  85. package/dist/components/clinical-note-card/index.js +1 -1
  86. package/dist/components/data-table/filters/number-filter.d.ts +26 -12
  87. package/dist/components/data-table/filters/number-filter.d.ts.map +1 -1
  88. package/dist/components/data-table/index.js +2 -2
  89. package/dist/components/data-table/toolbar.d.ts.map +1 -1
  90. package/dist/components/dependent-selector/index.js +1 -1
  91. package/dist/components/entity-summary/index.js +1 -1
  92. package/dist/components/file-manager/index.js +1 -1
  93. package/dist/components/message-card/index.js +1 -1
  94. package/dist/components/message-tray/index.js +1 -1
  95. package/dist/components/notes-panel/index.js +1 -1
  96. package/dist/components/operator-hero/index.js +1 -1
  97. package/dist/components/patient-details/index.js +1 -1
  98. package/dist/components/patient-summary-card/index.js +1 -1
  99. package/dist/components/patient-table/index.js +1 -1
  100. package/dist/components/practice-profile-hero/index.js +1 -1
  101. package/dist/components/practice-results/index.js +1 -1
  102. package/dist/components/task-card/index.js +1 -1
  103. package/dist/components/task-card/task-card.d.ts +3 -2
  104. package/dist/components/task-card/task-card.d.ts.map +1 -1
  105. package/dist/components/task-tray/index.js +1 -1
  106. package/dist/components/tasks-panel/index.js +1 -1
  107. package/dist/components/timeline/index.js +1 -1
  108. package/dist/i18n/locales/ar.d.ts +19 -14
  109. package/dist/i18n/locales/ar.d.ts.map +1 -1
  110. package/dist/i18n/locales/ar.js +19 -14
  111. package/dist/i18n/locales/ar.js.map +1 -1
  112. package/dist/i18n/locales/de.d.ts +19 -14
  113. package/dist/i18n/locales/de.d.ts.map +1 -1
  114. package/dist/i18n/locales/de.js +19 -14
  115. package/dist/i18n/locales/de.js.map +1 -1
  116. package/dist/i18n/locales/el.d.ts +19 -14
  117. package/dist/i18n/locales/el.d.ts.map +1 -1
  118. package/dist/i18n/locales/el.js +19 -14
  119. package/dist/i18n/locales/el.js.map +1 -1
  120. package/dist/i18n/locales/en.d.ts +5 -0
  121. package/dist/i18n/locales/en.d.ts.map +1 -1
  122. package/dist/i18n/locales/en.js +6 -0
  123. package/dist/i18n/locales/en.js.map +1 -1
  124. package/dist/i18n/locales/es.d.ts +19 -14
  125. package/dist/i18n/locales/es.d.ts.map +1 -1
  126. package/dist/i18n/locales/es.js +19 -14
  127. package/dist/i18n/locales/es.js.map +1 -1
  128. package/dist/i18n/locales/fr.d.ts +19 -14
  129. package/dist/i18n/locales/fr.d.ts.map +1 -1
  130. package/dist/i18n/locales/fr.js +19 -14
  131. package/dist/i18n/locales/fr.js.map +1 -1
  132. package/dist/i18n/locales/hi.d.ts +19 -14
  133. package/dist/i18n/locales/hi.d.ts.map +1 -1
  134. package/dist/i18n/locales/hi.js +19 -14
  135. package/dist/i18n/locales/hi.js.map +1 -1
  136. package/dist/i18n/locales/it.d.ts +5 -0
  137. package/dist/i18n/locales/it.d.ts.map +1 -1
  138. package/dist/i18n/locales/it.js +6 -0
  139. package/dist/i18n/locales/it.js.map +1 -1
  140. package/dist/i18n/locales/ja.d.ts +19 -14
  141. package/dist/i18n/locales/ja.d.ts.map +1 -1
  142. package/dist/i18n/locales/ja.js +19 -14
  143. package/dist/i18n/locales/ja.js.map +1 -1
  144. package/dist/i18n/locales/nl.d.ts +19 -14
  145. package/dist/i18n/locales/nl.d.ts.map +1 -1
  146. package/dist/i18n/locales/nl.js +19 -14
  147. package/dist/i18n/locales/nl.js.map +1 -1
  148. package/dist/i18n/locales/pl.d.ts +19 -14
  149. package/dist/i18n/locales/pl.d.ts.map +1 -1
  150. package/dist/i18n/locales/pl.js +19 -14
  151. package/dist/i18n/locales/pl.js.map +1 -1
  152. package/dist/i18n/locales/pt.d.ts +19 -14
  153. package/dist/i18n/locales/pt.d.ts.map +1 -1
  154. package/dist/i18n/locales/pt.js +19 -14
  155. package/dist/i18n/locales/pt.js.map +1 -1
  156. package/dist/i18n/locales/ro.d.ts +19 -14
  157. package/dist/i18n/locales/ro.d.ts.map +1 -1
  158. package/dist/i18n/locales/ro.js +19 -14
  159. package/dist/i18n/locales/ro.js.map +1 -1
  160. package/dist/i18n/locales/ru.d.ts +19 -14
  161. package/dist/i18n/locales/ru.d.ts.map +1 -1
  162. package/dist/i18n/locales/ru.js +19 -14
  163. package/dist/i18n/locales/ru.js.map +1 -1
  164. package/dist/i18n/locales/sq.d.ts +19 -14
  165. package/dist/i18n/locales/sq.d.ts.map +1 -1
  166. package/dist/i18n/locales/sq.js +19 -14
  167. package/dist/i18n/locales/sq.js.map +1 -1
  168. package/dist/i18n/locales/sv.d.ts +19 -14
  169. package/dist/i18n/locales/sv.d.ts.map +1 -1
  170. package/dist/i18n/locales/sv.js +19 -14
  171. package/dist/i18n/locales/sv.js.map +1 -1
  172. package/dist/i18n/locales/tr.d.ts +19 -14
  173. package/dist/i18n/locales/tr.d.ts.map +1 -1
  174. package/dist/i18n/locales/tr.js +19 -14
  175. package/dist/i18n/locales/tr.js.map +1 -1
  176. package/dist/i18n/locales/zh.d.ts +19 -14
  177. package/dist/i18n/locales/zh.d.ts.map +1 -1
  178. package/dist/i18n/locales/zh.js +19 -14
  179. package/dist/i18n/locales/zh.js.map +1 -1
  180. package/dist/index.js +34 -34
  181. package/dist/locales/ar.json +19 -14
  182. package/dist/locales/de.json +19 -14
  183. package/dist/locales/el.json +19 -14
  184. package/dist/locales/en.json +5 -0
  185. package/dist/locales/es.json +19 -14
  186. package/dist/locales/fr.json +19 -14
  187. package/dist/locales/hi.json +19 -14
  188. package/dist/locales/it.json +5 -0
  189. package/dist/locales/ja.json +19 -14
  190. package/dist/locales/nl.json +19 -14
  191. package/dist/locales/pl.json +19 -14
  192. package/dist/locales/pt.json +19 -14
  193. package/dist/locales/ro.json +19 -14
  194. package/dist/locales/ru.json +19 -14
  195. package/dist/locales/sq.json +19 -14
  196. package/dist/locales/sv.json +19 -14
  197. package/dist/locales/tr.json +19 -14
  198. package/dist/locales/zh.json +19 -14
  199. package/dist/patterns/alia-assistant/index.js +1 -1
  200. package/dist/patterns/calendar/calendar-workspace.d.ts +10 -0
  201. package/dist/patterns/calendar/calendar-workspace.d.ts.map +1 -1
  202. package/dist/patterns/calendar/calendar.surface.d.ts +4 -1
  203. package/dist/patterns/calendar/calendar.surface.d.ts.map +1 -1
  204. package/dist/patterns/calendar/index.js +1 -1
  205. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  206. package/dist/patterns/signature-request/index.js +1 -1
  207. package/dist/tokens.css +1 -1
  208. package/package.json +12 -12
  209. package/dist/_chunks/avatar-CkDeQOSI.js.map +0 -1
  210. package/dist/_chunks/booking-BQYFDcrz.js.map +0 -1
  211. package/dist/_chunks/calendar-workspace-D8zX9JWm.js +0 -10423
  212. package/dist/_chunks/data-table-DWOSxlsy.js.map +0 -1
  213. package/dist/_chunks/link-cell-renderer-Tswqf6BT.js +0 -778
  214. package/dist/_chunks/link-cell-renderer-Tswqf6BT.js.map +0 -1
  215. package/dist/_chunks/task-card-CTTQfPS6.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfadocs/ui-kit-debug",
3
- "version": "1.48.0",
3
+ "version": "1.49.1",
4
4
  "type": "module",
5
5
  "description": "AlfaDocs shared design system — tokens, components, patterns, and translations for platform, booking, and alfascribe. (debug build — identical runtime to @alfadocs/ui-kit, ships source maps for symbolication).",
6
6
  "license": "BUSL-1.1",
@@ -1146,7 +1146,7 @@
1146
1146
  "validator": "^13.15.35"
1147
1147
  },
1148
1148
  "devDependencies": {
1149
- "@chromatic-com/storybook": "^5.1.2",
1149
+ "@chromatic-com/storybook": "^5.3.1",
1150
1150
  "@exa-online/storybook-jira-addon": "^3.0.3",
1151
1151
  "@fullcalendar/core": "^6.1.20",
1152
1152
  "@fullcalendar/daygrid": "^6.1.20",
@@ -1158,15 +1158,15 @@
1158
1158
  "@fullcalendar/resource-timeline": "^6.1.20",
1159
1159
  "@fullcalendar/timegrid": "^6.1.20",
1160
1160
  "@fullcalendar/timeline": "^6.1.20",
1161
- "@storybook/addon-a11y": "^10.3.5",
1162
- "@storybook/addon-docs": "^10.3.5",
1163
- "@storybook/addon-themes": "^10.3.5",
1164
- "@storybook/addon-vitest": "^10.3.5",
1161
+ "@storybook/addon-a11y": "^10.6.0",
1162
+ "@storybook/addon-docs": "^10.6.0",
1163
+ "@storybook/addon-themes": "^10.6.0",
1164
+ "@storybook/addon-vitest": "^10.6.0",
1165
1165
  "@storybook/components": "file:.storybook/sb-compat-shims/components",
1166
1166
  "@storybook/core-events": "file:.storybook/sb-compat-shims/core-events",
1167
1167
  "@storybook/manager-api": "file:.storybook/sb-compat-shims/manager-api",
1168
1168
  "@storybook/preview-api": "file:.storybook/sb-compat-shims/preview-api",
1169
- "@storybook/react-vite": "^10.3.5",
1169
+ "@storybook/react-vite": "^10.6.0",
1170
1170
  "@storybook/theming": "file:.storybook/sb-compat-shims/theming",
1171
1171
  "@stripe/react-stripe-js": "^6.2.0",
1172
1172
  "@stripe/stripe-js": "^9.2.0",
@@ -1182,8 +1182,8 @@
1182
1182
  "@types/validator": "^13.15.10",
1183
1183
  "@vis.gl/react-google-maps": "^1.5.5",
1184
1184
  "@vitejs/plugin-react": "^4.7.0",
1185
- "@vitest/browser-playwright": "^4.1.4",
1186
- "@vitest/coverage-v8": "^4.1.4",
1185
+ "@vitest/browser-playwright": "^4.1.11",
1186
+ "@vitest/coverage-v8": "^4.1.11",
1187
1187
  "ag-grid-community": "^35.2.1",
1188
1188
  "ag-grid-enterprise": "^35.2.1",
1189
1189
  "ag-grid-react": "^35.2.1",
@@ -1210,8 +1210,8 @@
1210
1210
  "react-i18next": "^17.0.3",
1211
1211
  "remark-gfm": "^4.0.1",
1212
1212
  "signature_pad": "^5.1.3",
1213
- "storybook": "^10.3.5",
1214
- "storybook-addon-pseudo-states": "^10.3.5",
1213
+ "storybook": "^10.6.0",
1214
+ "storybook-addon-pseudo-states": "^10.6.0",
1215
1215
  "storybook-addon-rtl": "^3.0.1",
1216
1216
  "storybook-react-i18next": "^10.1.2",
1217
1217
  "stylelint": "^16.26.1",
@@ -1220,7 +1220,7 @@
1220
1220
  "typescript": "^5.9.3",
1221
1221
  "typescript-eslint": "^8.59.3",
1222
1222
  "vite": "^6.4.2",
1223
- "vitest": "^4.1.4",
1223
+ "vitest": "^4.1.11",
1224
1224
  "vitest-axe": "^0.1.0",
1225
1225
  "webpack-cli": "^7.0.2"
1226
1226
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"avatar-CkDeQOSI.js","sources":["../../src/components/avatar/avatar.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\n\n// ── Hash ──────────────────────────────────────────────────────────────────────\n\n/** djb2 hash — fast, unsigned 32-bit, stable across calls. */\nfunction djb2(str: string): number {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash) ^ str.charCodeAt(i);\n hash = hash >>> 0; // coerce to unsigned 32-bit integer\n }\n return hash;\n}\n\n/**\n * 16 brand hues — all verified ≥ 4.5 : 1 contrast against the kit's\n * lightest cream (var(--primary-foreground) in light/dark, with a\n * dark-accessible-only override to --color-grey-500 because that theme\n * pins --primary-foreground to deep navy which is illegible on the\n * bright swatches). Spans four distinct hue families for good visual\n * distribution.\n *\n * Index | Token | Contrast | Visual character\n * 0 | --color-violet-500 | 4.74 : 1 | bright violet\n * 1 | --color-violet-600 | 5.53 : 1 | medium violet\n * 2 | --color-violet-700 | 7.29 : 1 | dark violet\n * 3 | --color-violet-800 | 9.57 : 1 | deep violet\n * 4 | --color-violet-900 | 12.06 : 1 | midnight violet\n * 5 | --color-purple-700 | 5.21 : 1 | medium purple\n * 6 | --color-purple-800 | 7.52 : 1 | dark purple\n * 7 | --color-purple-900 | 10.40 : 1 | deep purple\n * 8 | --color-magenta-700 | 6.01 : 1 | vivid magenta\n * 9 | --color-magenta-800 | 8.05 : 1 | dark magenta\n * 10 | --color-magenta-900 | 11.20 : 1 | deep magenta\n * 11 | --color-blue-300 | 4.64 : 1 | slate / steel blue\n * 12 | --color-blue-400 | 6.95 : 1 | medium slate\n * 13 | --color-blue-500 | 13.00 : 1 | deep navy\n * 14 | --color-blue-700 | 17.82 : 1 | midnight navy\n * 15 | --color-grey-900 | 5.78 : 1 | warm charcoal\n */\nconst INITIALS_BG_CLASSES = [\n 'ds:bg-[var(--color-violet-500)]',\n 'ds:bg-[var(--color-violet-600)]',\n 'ds:bg-[var(--color-violet-700)]',\n 'ds:bg-[var(--color-violet-800)]',\n 'ds:bg-[var(--color-violet-900)]',\n 'ds:bg-[var(--color-purple-700)]',\n 'ds:bg-[var(--color-purple-800)]',\n 'ds:bg-[var(--color-purple-900)]',\n 'ds:bg-[var(--color-magenta-700)]',\n 'ds:bg-[var(--color-magenta-800)]',\n 'ds:bg-[var(--color-magenta-900)]',\n 'ds:bg-[var(--color-blue-300)]',\n 'ds:bg-[var(--color-blue-400)]',\n 'ds:bg-[var(--color-blue-500)]',\n 'ds:bg-[var(--color-blue-700)]',\n 'ds:bg-[var(--color-grey-900)]',\n] as const;\n\n/** Deterministically maps a name string to one of 16 brand-hue Tailwind classes. Same name always produces the same class. */\nexport function nameToColorClass(name: string): string {\n return INITIALS_BG_CLASSES[djb2(name) % INITIALS_BG_CLASSES.length];\n}\n\n/**\n * Extracts 1–2 uppercase initials:\n * - Single-word name: first two characters (\"John\" → \"JO\")\n * - Multi-word name: first char of first word + first char of last word (\"John Doe\" → \"JD\")\n * - Parenthesised or bracketed parts and words with no letter are skipped\n * (\"Lucy Danvers (daughter)\" → \"LD\"), unless nothing else is left.\n */\nexport function getInitials(name: string): string {\n const toWords = (text: string) =>\n text\n .trim()\n .split(/\\s+/)\n .map((word) => word.replace(/^[^\\p{L}\\p{N}]+|[^\\p{L}\\p{N}]+$/gu, ''))\n .filter((word) => /\\p{L}/u.test(word));\n const outside = toWords(name.replace(/\\([^)]*\\)|\\[[^\\]]*\\]/g, ' '));\n const words = outside.length > 0 ? outside : toWords(name);\n if (words.length === 0) return '';\n if (words.length === 1) return words[0].slice(0, 2).toUpperCase();\n return (words[0][0] + words[words.length - 1][0]).toUpperCase();\n}\n\n// ── CVA ───────────────────────────────────────────────────────────────────────\n\nconst avatarVariants = cva(\n [\n 'ds:relative ds:inline-flex ds:shrink-0 ds:select-none ds:items-center ds:justify-center ds:overflow-hidden ds:rounded-[var(--radius-full)]',\n // Focus ring — uses design-system tokens so theme overrides (accessible: 3px) apply automatically.\n // The ring renders when Avatar is placed inside a focusable ancestor (e.g. a <button>).\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-ring',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n ].join(' '),\n {\n variants: {\n size: {\n // text-[var(--font-size-xs)] = 0.75rem (12px) — smallest available token\n xs: 'ds:size-6 ds:text-[length:var(--font-size-xs)] ds:font-semibold ds:leading-none',\n sm: 'ds:size-8 ds:text-[length:var(--font-size-xs)] ds:font-semibold ds:leading-none',\n md: 'ds:size-10 ds:text-[length:var(--font-size-xs)] ds:font-semibold ds:leading-none',\n lg: 'ds:size-12 ds:text-[length:var(--font-size-sm)] ds:font-semibold ds:leading-none',\n xl: 'ds:size-16 ds:text-[length:var(--font-size-base)] ds:font-semibold ds:leading-none',\n // 2xl / 3xl are hero / display crops (operator cards, practice-\n // profile pages). They token-reference `--avatar-size-*` so\n // consumer themes can override the dimensions per-context, and\n // `--avatar-text-size-*` so initials scale proportionally to\n // the circle (otherwise --font-size-base at 192px reads as a\n // tiny letter in a vast disc).\n '2xl':\n 'ds:size-[var(--avatar-size-2xl)] ds:text-[length:var(--avatar-text-size-2xl)] ds:font-semibold ds:leading-none',\n '3xl':\n 'ds:size-[var(--avatar-size-3xl)] ds:text-[length:var(--avatar-text-size-3xl)] ds:font-semibold ds:leading-none',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\n// ── Props ─────────────────────────────────────────────────────────────────────\n\nexport interface AvatarProps\n extends\n Omit<HTMLAttributes<HTMLSpanElement>, 'color'>,\n VariantProps<typeof avatarVariants> {\n /** Image source URL. When provided and loads successfully, the image is displayed. */\n src?: string;\n /** Display name — drives initials extraction and deterministic background colour. */\n name?: string;\n /**\n * Override the auto-generated background with any CSS colour string\n * (e.g. `\"var(--color-violet-700)\"`).\n * Applied via a CSS custom property so no `style` attribute is added to the JSX element.\n * Caller is responsible for WCAG AA contrast (≥4.5:1) against white text.\n */\n color?: string;\n}\n\n// ── Component ─────────────────────────────────────────────────────────────────\n\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n ({ src, name, color, size, className, ...props }, ref) => {\n const { t } = useTranslation();\n\n const innerRef = useRef<HTMLSpanElement>(null);\n const composedRef = composeRefs(ref, innerRef);\n\n // Track only image errors. The image renders immediately as an overlay;\n // before it loads the browser paints nothing (transparent), showing the\n // background colour + initials behind it. On error we remove the img and\n // the initials/fallback remain permanently visible.\n const [imgError, setImgError] = useState(false);\n\n // Reset error flag whenever src changes\n useEffect(() => {\n setImgError(false);\n }, [src]);\n\n // Apply color override via CSS custom property — avoids style={{…}} on JSX.\n // Mirrors the pattern used by the Progress component for imperative CSS property injection.\n useIsomorphicLayoutEffect(() => {\n const el = innerRef.current;\n if (!el) return;\n if (color) {\n el.style.setProperty('--avatar-color-override', color);\n } else {\n el.style.removeProperty('--avatar-color-override');\n }\n }, [color]);\n\n // Image is \"active\" when provided and not errored\n const imgActive = !!src && !imgError;\n\n // Initials and fallback icon are shown when no usable image\n const showInitials = !imgActive && !!name;\n const showIcon = !imgActive && !name;\n\n // Background — always rendered (serves as loading placeholder when image is fetching)\n const fallbackBgClass = color\n ? 'ds:bg-[var(--avatar-color-override)]'\n : name\n ? nameToColorClass(name)\n : 'ds:bg-muted';\n\n // Always light text against brand hues / color override; muted-foreground\n // for icon. In dark-accessible, `--primary-foreground` pins to deep navy\n // (illegible on bright swatches), so override to the kit's lightest cream\n // (`--color-grey-500`) — keeps initials readable in all four themes.\n const contentColorClass =\n color || name\n ? 'ds:text-[var(--primary-foreground)] ds:[.theme-dark.theme-accessible_&]:text-[var(--color-grey-500)]'\n : 'ds:text-muted-foreground';\n\n const rootClassName = avatarVariants({\n size,\n className: [fallbackBgClass, contentColorClass, className]\n .filter(Boolean)\n .join(' '),\n });\n\n // Accessible label — name takes priority, then the localised placeholder\n const ariaLabel = name ?? t('avatar.placeholder', 'User avatar');\n\n return (\n <span\n ref={composedRef}\n role=\"img\"\n aria-label={ariaLabel}\n data-component=\"avatar\"\n className={rootClassName}\n {...props}\n >\n {/* Initials — rendered behind the image; visible while image is loading\n or permanently when no src / src errors */}\n {(showInitials || imgActive) && !!name && (\n <span aria-hidden=\"true\">{getInitials(name)}</span>\n )}\n\n {/* Fallback icon — shown when neither image nor name is available */}\n {showIcon && (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n className=\"ds:size-[58%] ds:fill-current\"\n >\n <path d=\"M12 12c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm0 2c-3.33 0-10 1.67-10 5v2h20v-2c0-3.33-6.67-5-10-5z\" />\n </svg>\n )}\n\n {/* Image — absolutely positioned overlay. Renders transparently until the\n browser paints the decoded pixels, then covers the initials behind it.\n Removed from DOM on error so initials remain permanently visible. */}\n {imgActive && (\n <img\n src={src}\n alt=\"\"\n aria-hidden=\"true\"\n className=\"ds:absolute ds:inset-0 ds:size-full ds:object-cover\"\n onError={() => setImgError(true)}\n />\n )}\n </span>\n );\n },\n);\n\nAvatar.displayName = 'Avatar';\n"],"names":["djb2","str","hash","i","INITIALS_BG_CLASSES","nameToColorClass","name","getInitials","toWords","text","word","outside","words","avatarVariants","cva","Avatar","forwardRef","src","color","size","className","props","ref","t","useTranslation","innerRef","useRef","composedRef","composeRefs","imgError","setImgError","useState","useEffect","useIsomorphicLayoutEffect","el","imgActive","showInitials","showIcon","fallbackBgClass","rootClassName","ariaLabel","jsxs","jsx"],"mappings":"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"}