@alfadocs/ui-kit 0.69.0 → 0.70.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 (261) hide show
  1. package/dist/_chunks/{agenda-card-BxSFkqgY.js → agenda-card-BQ-IKAru.js} +2 -2
  2. package/dist/_chunks/{agenda-tray-g0kg7HwB.js → agenda-tray-CGXRk58j.js} +2 -2
  3. package/dist/_chunks/{ai-consent-banner-CXlsNX1c.js → ai-consent-banner-Be-h9mRI.js} +3 -3
  4. package/dist/_chunks/ai-tools-rail-B5NEghsp.js +511 -0
  5. package/dist/_chunks/{alert-_mUKLmwA.js → alert-CHYZ96tR.js} +150 -96
  6. package/dist/_chunks/{anamnesis-card-DRmE24OQ.js → anamnesis-card-DvYCa16e.js} +2 -2
  7. package/dist/_chunks/anatomy-scheme-CJB6dI6p.js +2445 -0
  8. package/dist/_chunks/annotation-marker-qt5R9WZX.js +120 -0
  9. package/dist/_chunks/{antenatal-schedule-timeline-35ebkcZT.js → antenatal-schedule-timeline-CwXrQRm1.js} +2 -2
  10. package/dist/_chunks/appointment-card-C06aZqA7.js +310 -0
  11. package/dist/_chunks/appointment-timeline-BJM0S_Fg.js +386 -0
  12. package/dist/_chunks/appointment-tray-DRRw5ROi.js +193 -0
  13. package/dist/_chunks/{audio-recorder-DYXXnGug.js → audio-recorder-Cpdk5qpQ.js} +2 -2
  14. package/dist/_chunks/{badge-CqGsX32l.js → badge-DCOqV9mI.js} +32 -27
  15. package/dist/_chunks/{bishop-score-PJI3AXzA.js → bishop-score-DnYWtZa_.js} +2 -2
  16. package/dist/_chunks/{bmi-calculator-BZtIJ53x.js → bmi-calculator-zjeY4E7J.js} +2 -2
  17. package/dist/_chunks/{booking-C3VqFReX.js → booking-DUBI0oqt.js} +4 -4
  18. package/dist/_chunks/{care-plan-card-CvFGXa2z.js → care-plan-card-C5sTfY9G.js} +5 -5
  19. package/dist/_chunks/{care-plan-entry-card-C3E_gClk.js → care-plan-entry-card-CXnxGCWA.js} +5 -5
  20. package/dist/_chunks/care-plan-header-BUwqDTtz.js +206 -0
  21. package/dist/_chunks/clinical-note-card-BUvNMNGL.js +436 -0
  22. package/dist/_chunks/{contact-profile-card-Dramqa9C.js → contact-profile-card-DDPwRFiP.js} +2 -2
  23. package/dist/_chunks/control-room-rail-Y8ryLYsP.js +229 -0
  24. package/dist/_chunks/{cycle-calculator-DmRGJNaT.js → cycle-calculator-CCmPwcBl.js} +2 -2
  25. package/dist/_chunks/{dependent-selector-CG_FOHya.js → dependent-selector-DUV4thxX.js} +2 -2
  26. package/dist/_chunks/{document-scanner-CTubA0-N.js → document-scanner-C_AxLooF.js} +3 -3
  27. package/dist/_chunks/{due-date-calculator-BTmsIQqD.js → due-date-calculator-Brdj-euS.js} +3 -3
  28. package/dist/_chunks/editable-currency-cell-renderer-C9twtALM.js +328 -0
  29. package/dist/_chunks/email-input-DJ7EXklP.js +397 -0
  30. package/dist/_chunks/{entity-card-COhmqHly.js → entity-card-9_62gY7l.js} +38 -20
  31. package/dist/_chunks/entity-summary-BxRjFh_4.js +138 -0
  32. package/dist/_chunks/{fetal-weight-CRz7KE2D.js → fetal-weight-DNCkyeVo.js} +2 -2
  33. package/dist/_chunks/field-value-NXYczdpO.js +415 -0
  34. package/dist/_chunks/{file-upload-5ScQd4fE.js → file-upload-DwZcAK8D.js} +2 -1
  35. package/dist/_chunks/{freemium-paywall-DZ2mBS3w.js → freemium-paywall-WYlNO7yT.js} +2 -2
  36. package/dist/_chunks/{gestational-age-calculator-BleUdhbI.js → gestational-age-calculator-CF2ISaYQ.js} +3 -3
  37. package/dist/_chunks/hash-CysBBS_N.js +17 -0
  38. package/dist/_chunks/{hcg-doubling-CnjDXX6U.js → hcg-doubling-C7bmuaU3.js} +2 -2
  39. package/dist/_chunks/{actions-cell-renderer-DrcaxB0w.js → link-cell-renderer-CTXqtXV-.js} +715 -592
  40. package/dist/_chunks/lock-CKOIn0IK.js +15 -0
  41. package/dist/_chunks/{marketplace-app-shell-6T9W4Knl.js → marketplace-app-shell-Skhfp6vK.js} +3 -3
  42. package/dist/_chunks/notes-panel-ay8_lPrA.js +158 -0
  43. package/dist/_chunks/{notification-card-BiESdm8q.js → notification-card-D2jiKSJJ.js} +27 -23
  44. package/dist/_chunks/{notification-tray-Btb9oQeZ.js → notification-tray-AEun6DN2.js} +2 -2
  45. package/dist/_chunks/{operator-hero-CP2Nhupm.js → operator-hero-CR0Rqh4-.js} +3 -3
  46. package/dist/_chunks/patient-details-Dlhqb5ig.js +675 -0
  47. package/dist/_chunks/{patient-search-CBC_ySF6.js → patient-search-Be6cLrHR.js} +2 -2
  48. package/dist/_chunks/patient-summary-card-WySCMwwA.js +437 -0
  49. package/dist/_chunks/patient-table-CHxf3Oqk.js +1110 -0
  50. package/dist/_chunks/{payment-form-DvjwYVIT.js → payment-form-CxqIXqw7.js} +2 -2
  51. package/dist/_chunks/{payment-request-card-DioWKBUq.js → payment-request-card-BcZJwu9z.js} +125 -136
  52. package/dist/_chunks/{pdf-viewer-D6BPfW2D.js → pdf-viewer-QfebdLOd.js} +192 -214
  53. package/dist/_chunks/{periodontal-chart-card-BuDEMbHE.js → periodontal-chart-card-hRRJY1NN.js} +2 -2
  54. package/dist/_chunks/{practice-results-KrTHqZua.js → practice-results-C6qDfxos.js} +3 -3
  55. package/dist/_chunks/{pregnancy-dating-DORUAOHB.js → pregnancy-dating-CRVWswD-.js} +3 -3
  56. package/dist/_chunks/{pregnancy-weight-gain-DVz4rr7-.js → pregnancy-weight-gain-BUNpTsH-.js} +2 -2
  57. package/dist/_chunks/radiograph-panel.agent-CAX-C3g3.js +558 -0
  58. package/dist/_chunks/{rich-text-editor-BsV7zUdg.js → rich-text-editor-DlCqPixb.js} +410 -394
  59. package/dist/_chunks/{sign-document-B4DeRhTe.js → sign-document-By6hMOra.js} +2 -2
  60. package/dist/_chunks/{stepper-accordion-Dki6r9ZE.js → stepper-accordion-DC-H-8v4.js} +38 -48
  61. package/dist/_chunks/tab-bar-Bv9nGNdO.js +262 -0
  62. package/dist/_chunks/tooth-scheme-BhQoPNBD.js +2131 -0
  63. package/dist/_chunks/{transaction-chip-DK84XCBU.js → transaction-chip-CscoQbxF.js} +88 -61
  64. package/dist/_chunks/use-clamp-overflow-DQE2kwZ9.js +20 -0
  65. package/dist/_chunks/use-overflow-collapse-BIOzKbni.js +32 -0
  66. package/dist/_chunks/use-persistent-state-nZwZAnE9.js +24 -0
  67. package/dist/_chunks/{warning-stack-BsgaEbL8.js → warning-stack--sTrrBDA.js} +86 -101
  68. package/dist/_chunks/{workflow-map-Bdam9pGp.js → workflow-map-Dy8mLCqF.js} +3 -3
  69. package/dist/_chunks/zoom-out-CgVtf2Wx.js +29 -0
  70. package/dist/agent/index.js +5 -4
  71. package/dist/agent/types.d.ts +19 -2
  72. package/dist/agent-catalog.json +1253 -86
  73. package/dist/agent-i18n/en.json +108 -6
  74. package/dist/components/_shared/entity-card/entity-card.d.ts +6 -0
  75. package/dist/components/_shared/entity-card/index.d.ts +1 -1
  76. package/dist/components/_shared/field-value.d.ts +21 -0
  77. package/dist/components/_shared/field-visibility-cog.d.ts +20 -0
  78. package/dist/components/_shared/field-visibility.d.ts +36 -0
  79. package/dist/components/_shared/patient-fields.d.ts +119 -0
  80. package/dist/components/agenda-card/index.js +1 -1
  81. package/dist/components/agenda-tray/index.js +1 -1
  82. package/dist/components/ai-consent-banner/index.js +1 -1
  83. package/dist/components/ai-tools-rail/ai-tools-rail.d.ts +75 -0
  84. package/dist/components/ai-tools-rail/index.js +1 -1
  85. package/dist/components/alert/alert.d.ts +5 -0
  86. package/dist/components/alert/index.js +1 -1
  87. package/dist/components/anamnesis-card/index.js +1 -1
  88. package/dist/components/anatomy-scheme/anatomy-face-paths.d.ts +15 -0
  89. package/dist/components/anatomy-scheme/anatomy-muscle-paths.d.ts +20 -0
  90. package/dist/components/anatomy-scheme/anatomy-scheme-data.d.ts +121 -0
  91. package/dist/components/anatomy-scheme/anatomy-scheme.agent.d.ts +6 -0
  92. package/dist/components/anatomy-scheme/anatomy-scheme.d.ts +69 -0
  93. package/dist/components/anatomy-scheme/index.d.ts +6 -0
  94. package/dist/components/anatomy-scheme/index.js +17 -0
  95. package/dist/components/annotation-marker/annotation-marker.d.ts +33 -0
  96. package/dist/components/annotation-marker/index.d.ts +3 -0
  97. package/dist/components/annotation-marker/index.js +7 -0
  98. package/dist/components/appointment-card/appointment-card.d.ts +25 -1
  99. package/dist/components/appointment-card/index.js +6 -5
  100. package/dist/components/appointment-timeline/appointment-timeline.agent.d.ts +4 -0
  101. package/dist/components/appointment-timeline/appointment-timeline.d.ts +66 -0
  102. package/dist/components/appointment-timeline/index.d.ts +4 -0
  103. package/dist/components/appointment-timeline/index.js +6 -0
  104. package/dist/components/audio-recorder/index.js +1 -1
  105. package/dist/components/badge/badge.d.ts +6 -2
  106. package/dist/components/badge/index.js +1 -1
  107. package/dist/components/bishop-score/index.js +1 -1
  108. package/dist/components/bmi-calculator/index.js +1 -1
  109. package/dist/components/booking/index.js +1 -1
  110. package/dist/components/care-plan-card/index.js +1 -1
  111. package/dist/components/care-plan-entry-card/index.js +1 -1
  112. package/dist/components/care-plan-header/care-plan-header.agent.d.ts +4 -0
  113. package/dist/components/care-plan-header/care-plan-header.d.ts +100 -0
  114. package/dist/components/care-plan-header/index.d.ts +4 -0
  115. package/dist/components/care-plan-header/index.js +6 -0
  116. package/dist/components/clinical-note-card/clinical-note-card.d.ts +21 -1
  117. package/dist/components/clinical-note-card/index.js +1 -1
  118. package/dist/components/contact-profile-card/index.js +1 -1
  119. package/dist/components/control-room-rail/control-room-context.d.ts +53 -0
  120. package/dist/components/control-room-rail/control-room-rail.d.ts +35 -0
  121. package/dist/components/control-room-rail/index.d.ts +5 -0
  122. package/dist/components/control-room-rail/index.js +9 -0
  123. package/dist/components/cycle-calculator/index.js +1 -1
  124. package/dist/components/data-table/cell-renderers/actions-cell-renderer.d.ts +18 -0
  125. package/dist/components/data-table/index.d.ts +1 -1
  126. package/dist/components/data-table/index.js +32 -31
  127. package/dist/components/dependent-selector/index.js +1 -1
  128. package/dist/components/document-scanner/index.js +1 -1
  129. package/dist/components/due-date-calculator/index.js +2 -2
  130. package/dist/components/email-input/index.js +1 -1
  131. package/dist/components/entity-summary/entity-summary.d.ts +43 -0
  132. package/dist/components/entity-summary/index.d.ts +3 -0
  133. package/dist/components/entity-summary/index.js +5 -0
  134. package/dist/components/fetal-weight/index.js +1 -1
  135. package/dist/components/file-upload/index.js +1 -1
  136. package/dist/components/freemium-paywall/index.js +1 -1
  137. package/dist/components/gestational-age-calculator/index.js +1 -1
  138. package/dist/components/hcg-doubling/index.js +1 -1
  139. package/dist/components/index.d.ts +9 -0
  140. package/dist/components/notes-panel/index.d.ts +3 -0
  141. package/dist/components/notes-panel/index.js +5 -0
  142. package/dist/components/notes-panel/notes-panel.d.ts +64 -0
  143. package/dist/components/notification-card/index.js +1 -1
  144. package/dist/components/notification-tray/index.js +1 -1
  145. package/dist/components/operator-hero/index.js +1 -1
  146. package/dist/components/patient-details/index.d.ts +5 -0
  147. package/dist/components/patient-details/index.js +6 -0
  148. package/dist/components/patient-details/patient-details.agent.d.ts +4 -0
  149. package/dist/components/patient-details/patient-details.d.ts +96 -0
  150. package/dist/components/patient-search/index.js +1 -1
  151. package/dist/components/patient-summary-card/index.js +1 -1
  152. package/dist/components/patient-summary-card/patient-summary-card.d.ts +40 -1
  153. package/dist/components/patient-table/columns.d.ts +69 -40
  154. package/dist/components/patient-table/index.d.ts +2 -6
  155. package/dist/components/patient-table/index.js +8 -9
  156. package/dist/components/patient-table/patient-table.d.ts +38 -4
  157. package/dist/components/patient-table/types.d.ts +52 -2
  158. package/dist/components/patient-table/use-responsive-columns.d.ts +8 -6
  159. package/dist/components/payment-card/index.js +1 -1
  160. package/dist/components/payment-form/index.js +1 -1
  161. package/dist/components/pdf-viewer/index.js +1 -1
  162. package/dist/components/periodontal-chart-card/index.js +1 -1
  163. package/dist/components/practice-results/index.js +1 -1
  164. package/dist/components/pregnancy-dating/index.js +1 -1
  165. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  166. package/dist/components/radiograph-panel/index.d.ts +4 -0
  167. package/dist/components/radiograph-panel/index.js +7 -0
  168. package/dist/components/radiograph-panel/radiograph-panel.agent.d.ts +13 -0
  169. package/dist/components/radiograph-panel/radiograph-panel.d.ts +36 -0
  170. package/dist/components/rich-text-editor/index.js +1 -1
  171. package/dist/components/sidebar/index.js +1 -1
  172. package/dist/components/sign-document/index.js +1 -1
  173. package/dist/components/stepper-accordion/index.js +1 -1
  174. package/dist/components/tab-bar/index.js +1 -1
  175. package/dist/components/tab-bar/tab-bar.d.ts +18 -1
  176. package/dist/components/tooth-scheme/index.d.ts +2 -2
  177. package/dist/components/tooth-scheme/index.js +30 -23
  178. package/dist/components/tooth-scheme/tooth-data.d.ts +112 -1
  179. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts +2 -2
  180. package/dist/components/tooth-scheme/tooth-scheme.d.ts +75 -11
  181. package/dist/components/transaction-chip/index.js +1 -1
  182. package/dist/components/transaction-chip/transaction-chip.d.ts +2 -2
  183. package/dist/components/warning-stack/index.js +1 -1
  184. package/dist/components/warning-stack/warning-stack.d.ts +10 -7
  185. package/dist/components/workflow/index.js +1 -1
  186. package/dist/hooks/index.d.ts +1 -0
  187. package/dist/hooks/index.js +24 -22
  188. package/dist/hooks/use-clamp-overflow.d.ts +19 -0
  189. package/dist/hooks/use-overflow-collapse.d.ts +46 -0
  190. package/dist/hooks/use-persistent-state.d.ts +7 -1
  191. package/dist/hooks/use-scroll-overflow.d.ts +36 -0
  192. package/dist/i18n/locales/ar.d.ts +308 -24
  193. package/dist/i18n/locales/ar.js +322 -27
  194. package/dist/i18n/locales/de.d.ts +308 -24
  195. package/dist/i18n/locales/de.js +322 -27
  196. package/dist/i18n/locales/el.d.ts +308 -24
  197. package/dist/i18n/locales/el.js +322 -27
  198. package/dist/i18n/locales/en.d.ts +309 -32
  199. package/dist/i18n/locales/en.js +323 -35
  200. package/dist/i18n/locales/es.d.ts +308 -24
  201. package/dist/i18n/locales/es.js +322 -27
  202. package/dist/i18n/locales/fr.d.ts +308 -24
  203. package/dist/i18n/locales/fr.js +322 -27
  204. package/dist/i18n/locales/hi.d.ts +308 -24
  205. package/dist/i18n/locales/hi.js +322 -27
  206. package/dist/i18n/locales/it.d.ts +308 -24
  207. package/dist/i18n/locales/it.js +322 -27
  208. package/dist/i18n/locales/ja.d.ts +308 -24
  209. package/dist/i18n/locales/ja.js +322 -27
  210. package/dist/i18n/locales/nl.d.ts +308 -24
  211. package/dist/i18n/locales/nl.js +322 -27
  212. package/dist/i18n/locales/pl.d.ts +308 -24
  213. package/dist/i18n/locales/pl.js +322 -27
  214. package/dist/i18n/locales/pt.d.ts +308 -24
  215. package/dist/i18n/locales/pt.js +322 -27
  216. package/dist/i18n/locales/ro.d.ts +308 -24
  217. package/dist/i18n/locales/ro.js +322 -27
  218. package/dist/i18n/locales/ru.d.ts +308 -24
  219. package/dist/i18n/locales/ru.js +322 -27
  220. package/dist/i18n/locales/sq.d.ts +308 -24
  221. package/dist/i18n/locales/sq.js +322 -27
  222. package/dist/i18n/locales/sv.d.ts +308 -24
  223. package/dist/i18n/locales/sv.js +322 -27
  224. package/dist/i18n/locales/tr.d.ts +308 -24
  225. package/dist/i18n/locales/tr.js +322 -27
  226. package/dist/i18n/locales/zh.d.ts +308 -24
  227. package/dist/i18n/locales/zh.js +322 -27
  228. package/dist/index.js +672 -623
  229. package/dist/locales/ar.json +311 -27
  230. package/dist/locales/de.json +311 -27
  231. package/dist/locales/el.json +311 -27
  232. package/dist/locales/en.json +311 -27
  233. package/dist/locales/es.json +311 -27
  234. package/dist/locales/fr.json +311 -27
  235. package/dist/locales/hi.json +311 -27
  236. package/dist/locales/it.json +311 -27
  237. package/dist/locales/ja.json +311 -27
  238. package/dist/locales/nl.json +311 -27
  239. package/dist/locales/pl.json +311 -27
  240. package/dist/locales/pt.json +311 -27
  241. package/dist/locales/ro.json +311 -27
  242. package/dist/locales/ru.json +311 -27
  243. package/dist/locales/sq.json +311 -27
  244. package/dist/locales/sv.json +311 -27
  245. package/dist/locales/tr.json +311 -27
  246. package/dist/locales/zh.json +311 -27
  247. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  248. package/dist/tokens.css +1 -1
  249. package/package.json +37 -1
  250. package/dist/_chunks/ai-tools-rail-BA_sqy1A.js +0 -373
  251. package/dist/_chunks/appointment-tray-CZtvtaH-.js +0 -431
  252. package/dist/_chunks/clinical-note-card-DqQYf_D4.js +0 -333
  253. package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js +0 -448
  254. package/dist/_chunks/email-input-B_Y55f5G.js +0 -396
  255. package/dist/_chunks/patient-summary-card-B836_fDB.js +0 -435
  256. package/dist/_chunks/patient-table-CDuosVru.js +0 -889
  257. package/dist/_chunks/tab-bar-B1ovILzh.js +0 -105
  258. package/dist/_chunks/tooth-scheme-yBr53cvv.js +0 -1330
  259. package/dist/_chunks/use-persistent-state-i23OWy6G.js +0 -24
  260. package/dist/components/patient-table/cell-renderers/contact-cell.d.ts +0 -45
  261. package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts +0 -26
@@ -1,889 +0,0 @@
1
- import { jsxs as C, jsx as d, Fragment as ce } from "react/jsx-runtime";
2
- import { createElement as F, useRef as B, useEffect as ue, useCallback as H, forwardRef as me, useState as J, useImperativeHandle as fe, useMemo as O } from "react";
3
- import { useTranslation as A } from "react-i18next";
4
- import { k as G, j as $, c as E, b as W, d as pe, N as he, g as L, f as z, e as S, S as I, a as _, T as K, U as ge, A as be, D as R, l as Te } from "./actions-cell-renderer-DrcaxB0w.js";
5
- import { S as Ce } from "./select-DMLG44F5.js";
6
- import { u as ve } from "./registry-DvAUVLHh.js";
7
- import { B as Z } from "./badge-CqGsX32l.js";
8
- import { c as ee } from "./index-D2ZczOXr.js";
9
- import { T as q } from "./tooltip-DvmfrNvB.js";
10
- import { c as U } from "./createLucideIcon-CrFbzy84.js";
11
- import { M as te } from "./mail-C8irm52s.js";
12
- import { T as Ne } from "./timestamp-BV2lC-wV.js";
13
- import { C as we } from "./calendar-clock-CYkcqdwl.js";
14
- import { A as Pe } from "./avatar-BNQNhoyL.js";
15
- import { E as Re } from "./eye-LHlSU38h.js";
16
- import { P as xe } from "./pencil-CfQX-0Qc.js";
17
- import { U as ye } from "./users-MBVtUzwd.js";
18
- import { T as Fe } from "./trash-2-rPAKaRgB.js";
19
- /**
20
- * @license lucide-react v1.8.0 - ISC
21
- *
22
- * This source code is licensed under the ISC license.
23
- * See the LICENSE file in the root directory of this source tree.
24
- */
25
- const Ae = [
26
- ["path", { d: "M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h9", key: "1j9vog" }],
27
- ["path", { d: "m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7", key: "1ocrg3" }],
28
- ["path", { d: "m17 17 4 4", key: "1b3523" }],
29
- ["path", { d: "m21 17-4 4", key: "uinynz" }]
30
- ], Se = U("mail-x", Ae);
31
- /**
32
- * @license lucide-react v1.8.0 - ISC
33
- *
34
- * This source code is licensed under the ISC license.
35
- * See the LICENSE file in the root directory of this source tree.
36
- */
37
- const Ie = [
38
- [
39
- "path",
40
- {
41
- d: "M19 19H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.7.7 0 0 1 2 21.286V5a2 2 0 0 1 1.184-1.826",
42
- key: "1wyg69"
43
- }
44
- ],
45
- ["path", { d: "m2 2 20 20", key: "1ooewy" }],
46
- ["path", { d: "M8.656 3H20a2 2 0 0 1 2 2v11.344", key: "mhl4k6" }]
47
- ], Ve = U("message-square-off", Ie);
48
- /**
49
- * @license lucide-react v1.8.0 - ISC
50
- *
51
- * This source code is licensed under the ISC license.
52
- * See the LICENSE file in the root directory of this source tree.
53
- */
54
- const ke = [
55
- [
56
- "path",
57
- {
58
- d: "M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",
59
- key: "18887p"
60
- }
61
- ]
62
- ], ne = U("message-square", ke), Ee = 5e4;
63
- function We(e) {
64
- return e === 0 ? { variant: "success", statusKey: "settled" } : e <= Ee ? { variant: "warning", statusKey: "pending" } : { variant: "error", statusKey: "overdue" };
65
- }
66
- function Be(e) {
67
- if (e == null || e === "") return null;
68
- const n = typeof e == "number" ? e : Number(e);
69
- return Number.isFinite(n) ? n : null;
70
- }
71
- function De(e) {
72
- const { value: n, currency: s = "EUR", options: r } = e, { t: i, i18n: o } = A("ui"), c = Be(n);
73
- if (c === null) return null;
74
- const f = o.language || "en", l = new Intl.NumberFormat(f, {
75
- style: "currency",
76
- currency: s,
77
- ...r
78
- }).format(c / 100), { variant: m, statusKey: t } = We(c), a = i(`patientTable.balance.status.${t}`);
79
- return /* @__PURE__ */ C(Z, { variant: m, withDot: !0, size: "sm", className: "ds:tabular-nums", children: [
80
- /* @__PURE__ */ d("span", { children: l }),
81
- /* @__PURE__ */ d("span", { className: "ds:sr-only", children: a })
82
- ] });
83
- }
84
- const Me = {
85
- accepted: "success",
86
- estimate: "info",
87
- none: "neutral"
88
- };
89
- function Le(e) {
90
- return e === "accepted" || e === "estimate" || e === "none";
91
- }
92
- function ze(e) {
93
- const { t: n } = A("ui"), { data: s, value: r, size: i = "sm" } = e, o = (s == null ? void 0 : s.carePlanStatus) ?? r;
94
- if (!Le(o)) return null;
95
- const c = Me[o];
96
- return /* @__PURE__ */ d(Z, { variant: c, withDot: !0, size: i, children: n(`patientTable.carePlanStatus.${o}`) });
97
- }
98
- const X = ee(
99
- [
100
- "ds:inline-flex ds:items-center ds:justify-center ds:size-4 ds:shrink-0",
101
- "ds:rounded-[var(--radius-sm)]"
102
- ].join(" "),
103
- {
104
- variants: {
105
- eligible: {
106
- // Eligible → success-tinted glyph; ineligible → muted/greyed glyph.
107
- true: "ds:text-[color:var(--success)]",
108
- false: "ds:text-[color:var(--muted-foreground)]"
109
- }
110
- },
111
- defaultVariants: {
112
- eligible: !1
113
- }
114
- }
115
- );
116
- function ae(e) {
117
- var u;
118
- const { data: n, hideDetails: s = !1 } = e, { t: r } = A("ui");
119
- if (!n) return null;
120
- const { phoneNumbers: i, email: o, emailEnabled: c, emailValid: f } = n, l = ((u = i == null ? void 0 : i[0]) == null ? void 0 : u.number) ?? "", m = !!o, t = (i ?? []).some((b) => b.smsEnabled), a = !!(c && f);
121
- if (!l && !m) return null;
122
- const p = s ? r("patientTable.contact.emailMasked") : o ?? "", h = r(t ? "patientTable.contact.smsEligible" : "patientTable.contact.smsIneligible"), g = r(a ? "patientTable.contact.emailEligible" : "patientTable.contact.emailIneligible");
123
- return /* @__PURE__ */ C("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)]", children: [
124
- /* @__PURE__ */ C("span", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:min-w-0 ds:leading-tight", children: [
125
- l ? /* @__PURE__ */ d("span", { className: "type-meta ds:truncate ds:text-start", children: l }) : null,
126
- m ? /* @__PURE__ */ d("span", { className: "type-meta ds:truncate ds:text-start ds:text-[color:var(--muted-foreground)]", children: p }) : null
127
- ] }),
128
- /* @__PURE__ */ C("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)] ds:shrink-0", children: [
129
- /* @__PURE__ */ d(q, { label: h, children: /* @__PURE__ */ d(
130
- "span",
131
- {
132
- role: "img",
133
- "aria-label": h,
134
- className: X({ eligible: t }),
135
- children: t ? /* @__PURE__ */ d(ne, { "aria-hidden": !0, size: 14, className: "ds:size-[14px]" }) : /* @__PURE__ */ d(
136
- Ve,
137
- {
138
- "aria-hidden": !0,
139
- size: 14,
140
- className: "ds:size-[14px]"
141
- }
142
- )
143
- }
144
- ) }),
145
- /* @__PURE__ */ d(q, { label: g, children: /* @__PURE__ */ d(
146
- "span",
147
- {
148
- role: "img",
149
- "aria-label": g,
150
- className: X({ eligible: a }),
151
- children: a ? /* @__PURE__ */ d(te, { "aria-hidden": !0, size: 14, className: "ds:size-[14px]" }) : /* @__PURE__ */ d(Se, { "aria-hidden": !0, size: 14, className: "ds:size-[14px]" })
152
- }
153
- ) })
154
- ] })
155
- ] });
156
- }
157
- ae.displayName = "ContactCell";
158
- const Y = ee(
159
- "ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] ds:whitespace-nowrap",
160
- {
161
- variants: {
162
- tone: {
163
- default: "",
164
- // Imminent visit: warning foreground token + medium weight. Fully
165
- // token-bound — no literal colour, no AG Grid cellStyle.
166
- soon: "ds:text-[color:var(--warning-foreground)] ds:font-medium",
167
- // Absent appointment: muted empty state.
168
- empty: "ds:text-[color:var(--muted-foreground)]"
169
- }
170
- },
171
- defaultVariants: { tone: "default" }
172
- }
173
- ), _e = 1440 * 60 * 1e3, He = 7;
174
- function Oe(e) {
175
- if (e == null || e === "") return null;
176
- const n = e instanceof Date ? e.getTime() : typeof e == "number" ? e : new Date(String(e)).getTime();
177
- return Number.isNaN(n) ? null : n;
178
- }
179
- function je(e, n) {
180
- if (n <= 0) return "default";
181
- const s = e - Date.now();
182
- return s < 0 ? "default" : s <= n * _e ? "soon" : "default";
183
- }
184
- function Ue(e) {
185
- const { t: n } = A("ui"), { data: s, value: r, soonWithinDays: i = He } = e, o = Oe((s == null ? void 0 : s.nextAppointment) ?? r);
186
- if (o === null)
187
- return /* @__PURE__ */ d("span", { className: Y({ tone: "empty" }), children: n("patientTable.nextAppointment.none") });
188
- const c = je(o, i);
189
- return /* @__PURE__ */ C("span", { className: Y({ tone: c }), children: [
190
- c === "soon" ? /* @__PURE__ */ d(we, { "aria-hidden": "true", className: "ds:size-3.5 ds:shrink-0" }) : null,
191
- /* @__PURE__ */ d(Ne, { value: o, format: "relative", shape: "bare" })
192
- ] });
193
- }
194
- function Ge(e, n) {
195
- return typeof e == "function" ? e(n) : e;
196
- }
197
- function $e(e) {
198
- return /^(https?:\/\/|\/|#)/i.test(e) ? e : "#";
199
- }
200
- function Ke(e) {
201
- return [e.firstName, e.lastName].filter(Boolean).join(" ").trim();
202
- }
203
- function qe(e) {
204
- var h;
205
- const { data: n, node: s, href: r, onSelect: i } = e, { t: o } = A("ui");
206
- if (!n || s != null && s.rowPinned) return null;
207
- const c = Ke(n);
208
- if (!c) return null;
209
- const f = Ge(r, n), l = ((h = n.italianFiscalCode) == null ? void 0 : h.trim()) || void 0, m = o("patientTable.identity.viewPatient", { name: c }), t = [
210
- "ds:group",
211
- "ds:flex ds:items-center ds:gap-[var(--spacing-sm)]",
212
- "ds:text-start",
213
- "ds:rounded-[var(--radius-sm)]",
214
- "ds:focus-visible:outline-[length:var(--focus-ring-width)]",
215
- "ds:focus-visible:outline-solid",
216
- "ds:focus-visible:outline-[color:var(--ring)]",
217
- "ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]"
218
- ].join(" "), a = (g) => {
219
- i && (f || g.preventDefault(), g.stopPropagation(), i(n));
220
- }, p = /* @__PURE__ */ C(ce, { children: [
221
- /* @__PURE__ */ d(
222
- Pe,
223
- {
224
- name: c,
225
- src: n.avatarUrl,
226
- size: "sm",
227
- "aria-hidden": "true",
228
- className: "ds:shrink-0"
229
- }
230
- ),
231
- /* @__PURE__ */ C("span", { className: "ds:flex ds:min-w-0 ds:flex-col ds:leading-tight", children: [
232
- /* @__PURE__ */ d("span", { className: "ds:truncate ds:font-semibold ds:text-[color:var(--foreground)] ds:group-hover:underline", children: c }),
233
- l ? /* @__PURE__ */ C("span", { className: "type-meta ds:truncate ds:text-[color:var(--muted-foreground)]", children: [
234
- /* @__PURE__ */ C("span", { className: "ds:sr-only", children: [
235
- o("patientTable.identity.fiscalCodeLabel"),
236
- ": "
237
- ] }),
238
- l
239
- ] }) : null
240
- ] })
241
- ] });
242
- return f ? /* @__PURE__ */ d(
243
- "a",
244
- {
245
- href: $e(f),
246
- "aria-label": m,
247
- onClick: a,
248
- className: t,
249
- children: p
250
- }
251
- ) : /* @__PURE__ */ d(
252
- "button",
253
- {
254
- type: "button",
255
- "aria-label": m,
256
- onClick: a,
257
- className: `ds:appearance-none ds:bg-transparent ds:p-0 ${t}`,
258
- children: p
259
- }
260
- );
261
- }
262
- function j(e) {
263
- return e.responsiveTier;
264
- }
265
- function Xe(e, n) {
266
- const s = (i) => (o) => {
267
- n == null || n(i, o);
268
- }, r = (i, o) => ({
269
- icon: i.icon,
270
- label: i.label,
271
- variant: i.variant,
272
- onClick: s(i),
273
- ...o
274
- });
275
- return [
276
- r(
277
- {
278
- id: "show",
279
- label: e("patientTable.actions.show"),
280
- icon: F(Re, { "aria-hidden": "true" })
281
- },
282
- {}
283
- ),
284
- r(
285
- {
286
- id: "edit",
287
- label: e("patientTable.actions.edit"),
288
- icon: F(xe, { "aria-hidden": "true" })
289
- },
290
- {}
291
- ),
292
- r(
293
- {
294
- id: "sendEmailReminder",
295
- label: e("patientTable.actions.sendEmailReminder"),
296
- icon: F(te, { "aria-hidden": "true" })
297
- },
298
- // Hidden when the patient has email contact disabled (spec).
299
- { hidden: (i) => !i.emailEnabled }
300
- ),
301
- r(
302
- {
303
- id: "sendSmsReminder",
304
- label: e("patientTable.actions.sendSmsReminder"),
305
- icon: F(ne, { "aria-hidden": "true" })
306
- },
307
- // Hidden when no phone number is SMS-enabled (spec).
308
- {
309
- hidden: (i) => !(i.phoneNumbers ?? []).some((o) => o.smsEnabled)
310
- }
311
- ),
312
- r(
313
- {
314
- id: "reassign",
315
- label: e("patientTable.actions.reassign"),
316
- icon: F(ye, { "aria-hidden": "true" })
317
- },
318
- {}
319
- ),
320
- r(
321
- {
322
- id: "delete",
323
- label: e("patientTable.actions.delete"),
324
- icon: F(Fe, { "aria-hidden": "true" }),
325
- variant: "destructive"
326
- },
327
- // Disabled (with a reason) for archived patients — the row model's
328
- // closest "cannot delete" signal. Surfaced as the inline tooltip.
329
- {
330
- disabled: (i) => !!i.isArchived,
331
- disabledReason: e("patientTable.actions.deleteLocked")
332
- }
333
- )
334
- ];
335
- }
336
- const Ye = () => !1;
337
- function Qe(e, n = {}) {
338
- const {
339
- hideDetails: s = !1,
340
- getActionsCompact: r = Ye,
341
- onRowAction: i,
342
- identityHref: o
343
- } = n, c = Xe(e, i), f = {
344
- m: e("patientTable.gender.m"),
345
- f: e("patientTable.gender.f"),
346
- x: e("patientTable.gender.x")
347
- }, l = (t) => e(`patientTable.column.${t}`);
348
- return [
349
- /* ── Identity (P0, pinned-start) ──────────────────────────────── */
350
- {
351
- colId: "identity",
352
- headerName: l("identity"),
353
- // Pinned to the inline-start edge so the patient stays anchored while the
354
- // lower-priority field columns scroll. AG Grid `pinned` is physical; the
355
- // hook/grid set `enableRtl` so logical start resolves correctly per dir.
356
- pinned: "left",
357
- cellRenderer: qe,
358
- cellRendererParams: {
359
- href: o,
360
- // When no detail href is supplied the cell renders a button; route its
361
- // click through the same `show` row action.
362
- onSelect: i ? (t) => i(
363
- { id: "show", label: e("patientTable.actions.show") },
364
- t
365
- ) : void 0
366
- },
367
- // Sort + typeahead read the composed full name.
368
- valueGetter: (t) => t.data ? [t.data.firstName, t.data.lastName].filter(Boolean).join(" ").trim() : "",
369
- filter: $,
370
- floatingFilterComponent: G,
371
- minWidth: 220,
372
- flex: 2
373
- // Identity is never auto-hidden (no tier) — it is the row anchor.
374
- },
375
- /* ── Next appointment (P1) ────────────────────────────────────── */
376
- {
377
- colId: "nextAppointment",
378
- headerName: l("nextAppointment"),
379
- responsiveTier: "P1",
380
- field: "nextAppointment",
381
- cellRenderer: Ue,
382
- filter: W,
383
- floatingFilterComponent: E,
384
- minWidth: 160,
385
- width: 180
386
- },
387
- /* ── Unpaid balance (P1) ──────────────────────────────────────── */
388
- {
389
- colId: "unpaidBalance",
390
- headerName: l("unpaidBalance"),
391
- responsiveTier: "P1",
392
- field: "unpaidAmount",
393
- type: "numericColumn",
394
- cellRenderer: De,
395
- filter: he,
396
- floatingFilterComponent: pe,
397
- // Money is integer cents; the inRange filter compares cents directly.
398
- filterParams: { defaultOperator: "inRange", min: 0 },
399
- minWidth: 150,
400
- width: 170
401
- },
402
- /* ── Phone / contact (P1) ─────────────────────────────────────── */
403
- {
404
- colId: "phone",
405
- headerName: l("phone"),
406
- responsiveTier: "P1",
407
- cellRenderer: ae,
408
- cellRendererParams: { hideDetails: s },
409
- // Filter on the primary phone number string.
410
- filterValueGetter: (t) => {
411
- var a, p, h;
412
- return ((h = (p = (a = t.data) == null ? void 0 : a.phoneNumbers) == null ? void 0 : p[0]) == null ? void 0 : h.number) ?? "";
413
- },
414
- filter: z,
415
- floatingFilterComponent: L,
416
- sortable: !1,
417
- minWidth: 180,
418
- width: 220
419
- },
420
- /* ── Email (P2) — masked under hideDetails ────────────────────── */
421
- {
422
- colId: "email",
423
- headerName: l("email"),
424
- responsiveTier: "P2",
425
- field: "email",
426
- // When details are hidden the address never reaches the cell; the column
427
- // simply hides. The platform passes hideDetails from `hidePatientDetails`.
428
- //
429
- // Emit `hide` ONLY when masking (never a literal `hide: false`). A static
430
- // `hide: false` on the colDef is re-applied by AG Grid on every
431
- // `columnDefs` reconcile, which would clobber a runtime hide performed by
432
- // the ViewSwitcher (`api.setColumnsVisible(['email'], false)`) and silently
433
- // re-show the column. Columns that omit `hide` keep their runtime
434
- // visibility across reconciles — so `undefined` is the correct default.
435
- hide: s || void 0,
436
- filter: z,
437
- floatingFilterComponent: L,
438
- minWidth: 200,
439
- width: 240
440
- },
441
- /* ── Care-plan status (P2) ────────────────────────────────────── */
442
- {
443
- colId: "carePlanStatus",
444
- headerName: l("carePlanStatus"),
445
- responsiveTier: "P2",
446
- field: "carePlanStatus",
447
- cellRenderer: ze,
448
- filter: I,
449
- floatingFilterComponent: S,
450
- filterParams: {
451
- options: [
452
- {
453
- value: "accepted",
454
- label: e("patientTable.carePlanStatus.accepted")
455
- },
456
- {
457
- value: "estimate",
458
- label: e("patientTable.carePlanStatus.estimate")
459
- },
460
- { value: "none", label: e("patientTable.carePlanStatus.none") }
461
- ]
462
- },
463
- sortable: !1,
464
- minWidth: 130,
465
- width: 150
466
- },
467
- /* ── Last visit (P2) ──────────────────────────────────────────── */
468
- {
469
- colId: "lastVisit",
470
- headerName: l("lastVisit"),
471
- responsiveTier: "P2",
472
- field: "lastAppointment",
473
- cellRenderer: _,
474
- cellRendererParams: { format: "relative" },
475
- filter: W,
476
- floatingFilterComponent: E,
477
- minWidth: 140,
478
- width: 160
479
- },
480
- /* ── Date of birth / age (P2) ─────────────────────────────────── */
481
- {
482
- colId: "dateOfBirth",
483
- headerName: l("dateOfBirth"),
484
- responsiveTier: "P2",
485
- field: "dateOfBirth",
486
- cellRenderer: _,
487
- cellRendererParams: { format: "date" },
488
- filter: W,
489
- floatingFilterComponent: E,
490
- minWidth: 140,
491
- width: 160
492
- },
493
- /* ── Gender (P3, hidden by default — opt-in via ColumnToggle) ──── */
494
- {
495
- colId: "gender",
496
- headerName: l("gender"),
497
- responsiveTier: "P3",
498
- field: "gender",
499
- hide: !0,
500
- // Map the raw code to a localised label for both cell + set filter.
501
- valueGetter: (t) => {
502
- var a;
503
- return (a = t.data) != null && a.gender ? f[t.data.gender] : "";
504
- },
505
- filter: I,
506
- floatingFilterComponent: S,
507
- filterParams: {
508
- options: [
509
- { value: f.m, label: f.m },
510
- { value: f.f, label: f.f },
511
- { value: f.x, label: f.x }
512
- ]
513
- },
514
- minWidth: 110,
515
- width: 130
516
- },
517
- /* ── Source (P3) ──────────────────────────────────────────────── */
518
- {
519
- colId: "source",
520
- headerName: l("source"),
521
- responsiveTier: "P3",
522
- // TagListCellRenderer expects an array; wrap the single source string.
523
- valueGetter: (t) => {
524
- var a;
525
- return (a = t.data) != null && a.source ? [t.data.source] : [];
526
- },
527
- cellRenderer: K,
528
- filterValueGetter: (t) => {
529
- var a;
530
- return ((a = t.data) == null ? void 0 : a.source) ?? "";
531
- },
532
- filter: I,
533
- floatingFilterComponent: S,
534
- sortable: !1,
535
- minWidth: 120,
536
- width: 150
537
- },
538
- /* ── Default insurance (P3, text) ─────────────────────────────── */
539
- {
540
- colId: "defaultInsurance",
541
- headerName: l("defaultInsurance"),
542
- responsiveTier: "P3",
543
- field: "defaultInsurance",
544
- filter: I,
545
- floatingFilterComponent: S,
546
- minWidth: 140,
547
- width: 160
548
- },
549
- /* ── Fiscal code (P3, text) ───────────────────────────────────── */
550
- {
551
- colId: "fiscalCode",
552
- headerName: l("fiscalCode"),
553
- responsiveTier: "P3",
554
- field: "italianFiscalCode",
555
- filter: z,
556
- floatingFilterComponent: L,
557
- minWidth: 160,
558
- width: 180
559
- },
560
- /* ── Tags (P3) ────────────────────────────────────────────────── */
561
- {
562
- colId: "tags",
563
- headerName: l("tags"),
564
- responsiveTier: "P3",
565
- field: "tags",
566
- cellRenderer: K,
567
- // Match a single selected tag against the row's tag array.
568
- filterValueGetter: (t) => {
569
- var a;
570
- return ((a = t.data) == null ? void 0 : a.tags) ?? [];
571
- },
572
- filter: I,
573
- floatingFilterComponent: S,
574
- sortable: !1,
575
- minWidth: 160,
576
- width: 200
577
- },
578
- /* ── Assigned member (P3) ─────────────────────────────────────── */
579
- {
580
- colId: "assignedMember",
581
- headerName: l("assignedMember"),
582
- responsiveTier: "P3",
583
- cellRenderer: ge,
584
- valueGetter: (t) => {
585
- var a;
586
- return (a = t.data) != null && a.personalAssistant ? { name: t.data.personalAssistant } : null;
587
- },
588
- comparator: (t, a) => ((t == null ? void 0 : t.name) ?? "").localeCompare((a == null ? void 0 : a.name) ?? ""),
589
- filterValueGetter: (t) => {
590
- var a;
591
- return ((a = t.data) == null ? void 0 : a.personalAssistant) ?? "";
592
- },
593
- filter: $,
594
- floatingFilterComponent: G,
595
- minWidth: 160,
596
- width: 180
597
- },
598
- /* ── Created at (P3) ──────────────────────────────────────────── */
599
- {
600
- colId: "createdAt",
601
- headerName: l("createdAt"),
602
- responsiveTier: "P3",
603
- field: "createdAt",
604
- cellRenderer: _,
605
- cellRendererParams: { format: "date" },
606
- filter: W,
607
- floatingFilterComponent: E,
608
- minWidth: 140,
609
- width: 160
610
- },
611
- /* ── Actions (P0, pinned-end) ─────────────────────────────────── */
612
- {
613
- colId: "actions",
614
- headerName: l("actions"),
615
- // Pinned to the inline-end edge so actions stay reachable while the field
616
- // columns scroll. AG Grid `pinned` is physical — the grid's `enableRtl`
617
- // flips this to the start edge under RTL.
618
- pinned: "right",
619
- // Right-align the header (the class AG Grid's numericColumn uses); the
620
- // action group itself stays centred via the token-bound justify class.
621
- headerClass: "ag-right-aligned-header",
622
- cellClass: "ds:justify-center",
623
- cellRenderer: be,
624
- cellRendererParams: {
625
- actions: c,
626
- intent: "ghost",
627
- group: !0,
628
- label: e("patientTable.actions.group"),
629
- collapsed: r
630
- },
631
- sortable: !1,
632
- filter: !1,
633
- resizable: !1,
634
- // Spec: 180px expanded → 88px collapsed (min). The renderer collapses to a
635
- // single overflow trigger via `getActionsCompact`; the column min lets it
636
- // shrink to the compact footprint.
637
- width: 180,
638
- minWidth: 88
639
- // Actions are never auto-hidden (no tier) — they are always reachable.
640
- }
641
- ];
642
- }
643
- const Je = [
644
- { minWidth: 0, tier: "P0" },
645
- { minWidth: 640, tier: "P1" },
646
- { minWidth: 900, tier: "P2" },
647
- { minWidth: 1200, tier: "P3" }
648
- ];
649
- function Q(e, n) {
650
- const s = /* @__PURE__ */ new Set();
651
- for (const r of n)
652
- e >= r.minWidth && s.add(r.tier);
653
- return s.add("P0"), s;
654
- }
655
- function Ze(e, n) {
656
- const {
657
- containerRef: s,
658
- enabled: r = !0,
659
- breakpoints: i = Je
660
- } = n, o = B(/* @__PURE__ */ new Set()), c = B(!1);
661
- return ue(() => {
662
- const l = s.current;
663
- if (!r || !l) return;
664
- const m = () => {
665
- var u;
666
- return (u = e.current) == null ? void 0 : u.getRawApi();
667
- }, t = (u) => {
668
- if (c.current || u.source === "api") return;
669
- const b = u.columns ?? (u.column ? [u.column] : []);
670
- for (const v of b)
671
- o.current.add(v.getColId());
672
- };
673
- let a = !1;
674
- const p = (u) => {
675
- if (a) return;
676
- a = !0;
677
- const b = u.getColumns(), v = l.getBoundingClientRect().width, x = Q(v, i);
678
- if (b)
679
- for (const T of b) {
680
- const N = j(T.getColDef());
681
- N && !T.isVisible() && x.has(N) && o.current.add(T.getColId());
682
- }
683
- u.addEventListener("columnVisible", t);
684
- }, h = () => {
685
- const u = m();
686
- if (!u) return;
687
- p(u);
688
- const b = u.getColumns();
689
- if (!b) return;
690
- const v = l.getBoundingClientRect().width, x = Q(v, i), T = [], N = [];
691
- for (const w of b) {
692
- const D = w.getColId();
693
- if (o.current.has(D)) continue;
694
- const V = j(w.getColDef());
695
- if (!V) continue;
696
- const k = x.has(V);
697
- k && !w.isVisible() ? T.push(w) : !k && w.isVisible() && N.push(w);
698
- }
699
- if (!(T.length === 0 && N.length === 0)) {
700
- c.current = !0;
701
- try {
702
- T.length > 0 && u.setColumnsVisible(T, !0), N.length > 0 && u.setColumnsVisible(N, !1);
703
- } finally {
704
- c.current = !1;
705
- }
706
- }
707
- }, g = new ResizeObserver(() => h());
708
- return g.observe(l), h(), () => {
709
- var u;
710
- g.disconnect(), (u = m()) == null || u.removeEventListener("columnVisible", t);
711
- };
712
- }, [s, r, i, e]), { lockColumns: H((l) => {
713
- for (const m of l) o.current.add(m);
714
- }, []) };
715
- }
716
- function et(e) {
717
- var n;
718
- return (n = e.data) != null && n.isArchived ? "data-table-row-archived" : void 0;
719
- }
720
- function tt(e) {
721
- return e.data.id;
722
- }
723
- function nt({
724
- views: e,
725
- handleRef: n,
726
- lockColumns: s,
727
- label: r
728
- }) {
729
- const [i, o] = J(""), c = O(
730
- () => e.map((m) => ({ value: m.id, label: m.label })),
731
- [e]
732
- ), f = H(
733
- (m) => {
734
- const t = e.find((h) => h.id === m), a = n.current;
735
- if (!t || !a) return;
736
- const p = a.getRawApi();
737
- if (p) {
738
- const h = new Set(t.columns), g = [], u = [];
739
- for (const b of p.getColumns() ?? []) {
740
- if (j(b.getColDef()) === void 0) continue;
741
- const v = b.getColId();
742
- h.has(v) ? g.push(v) : u.push(v);
743
- }
744
- s([...g, ...u]), g.length > 0 && p.setColumnsVisible(g, !0), u.length > 0 && p.setColumnsVisible(u, !1);
745
- }
746
- a.setFilter(t.filterModel), a.setSort(t.sortModel), p == null || p.onFilterChanged();
747
- },
748
- [e, n, s]
749
- ), l = H(
750
- (m) => {
751
- o(m), m && f(m);
752
- },
753
- [f]
754
- );
755
- return (
756
- // Width-constraining wrapper (same pattern as the toolbar's QuickSearch) so
757
- // the Select's intrinsic `w-full` trigger sizes to a compact, legible width
758
- // instead of absorbing the whole FilterBar row.
759
- /* @__PURE__ */ d("div", { className: "ds:w-[12rem] ds:max-w-full ds:min-w-0 ds:shrink-0", children: /* @__PURE__ */ d(
760
- Ce,
761
- {
762
- options: c,
763
- value: i,
764
- onValueChange: l,
765
- size: "sm",
766
- "aria-label": r
767
- }
768
- ) })
769
- );
770
- }
771
- const at = me(
772
- function({
773
- rowData: n,
774
- columns: s,
775
- gridId: r,
776
- density: i,
777
- responsive: o = !0,
778
- views: c,
779
- onRowAction: f,
780
- bulkActions: l,
781
- loading: m = !1,
782
- toolbar: t,
783
- hideQuickSearch: a = !1,
784
- paginationPageSizeSelector: p,
785
- hideDetails: h = !1,
786
- identityHref: g,
787
- "aria-label": u,
788
- className: b
789
- }, v) {
790
- const { t: x } = A("ui"), T = B(null), N = B(null), [w, D] = J(null);
791
- fe(
792
- v,
793
- () => w ?? T.current,
794
- [w]
795
- );
796
- const { lockColumns: V } = Ze(T, {
797
- containerRef: N,
798
- enabled: o
799
- }), k = O(
800
- () => s ?? Qe(x, {
801
- hideDetails: h,
802
- onRowAction: f,
803
- identityHref: g,
804
- getActionsCompact: () => i === "compact"
805
- }),
806
- [s, x, h, f, g, i]
807
- ), ie = ((c == null ? void 0 : c.length) ?? 0) > 0, le = /* @__PURE__ */ C(R.Toolbar, { children: [
808
- /* @__PURE__ */ C(R.Toolbar.FilterBar, { children: [
809
- ie && c ? /* @__PURE__ */ d(
810
- nt,
811
- {
812
- views: c,
813
- handleRef: T,
814
- lockColumns: V,
815
- label: x("patientTable.views.label")
816
- }
817
- ) : null,
818
- a ? null : /* @__PURE__ */ d(R.Toolbar.QuickSearch, {}),
819
- /* @__PURE__ */ d(R.Toolbar.FilterChips, {})
820
- ] }),
821
- /* @__PURE__ */ C(R.Toolbar.Actions, { children: [
822
- l == null ? void 0 : l.map((P) => /* @__PURE__ */ d(
823
- R.Toolbar.BulkAction,
824
- {
825
- label: P.label,
826
- icon: P.icon,
827
- variant: P.variant,
828
- onClick: (y) => {
829
- const de = (y == null ? void 0 : y.getSelectedNodes().map((M) => M.id).filter((M) => M != null)) ?? [];
830
- P.onSelect(de);
831
- }
832
- },
833
- P.id
834
- )),
835
- /* @__PURE__ */ d(R.Toolbar.ColumnToggle, {}),
836
- /* @__PURE__ */ d(R.Toolbar.ExportMenu, {})
837
- ] })
838
- ] }), se = t ?? le, re = m ? void 0 : n, oe = O(() => ({ getRowId: tt }), []);
839
- return ve(
840
- Te,
841
- w,
842
- r
843
- ), /* @__PURE__ */ d(
844
- "div",
845
- {
846
- ref: N,
847
- role: "region",
848
- "aria-label": u ?? x("patientTable.regionLabel"),
849
- "data-component": "patient-table",
850
- "data-component-id": r,
851
- className: "ds:flex ds:w-full ds:min-h-0 ds:flex-1 ds:flex-col",
852
- children: /* @__PURE__ */ d(
853
- R,
854
- {
855
- ref: (P) => {
856
- T.current = P, D(
857
- (y) => y === P ? y : P
858
- );
859
- },
860
- gridId: r,
861
- columnDefs: k,
862
- rowData: re,
863
- rowSelection: "multiple",
864
- pagination: !0,
865
- ...p !== void 0 ? { paginationPageSizeSelector: p } : {},
866
- density: i,
867
- getRowClass: et,
868
- gridOptions: oe,
869
- className: b,
870
- children: se
871
- }
872
- )
873
- }
874
- );
875
- }
876
- );
877
- at.displayName = "PatientTable";
878
- export {
879
- De as B,
880
- ze as C,
881
- Ue as N,
882
- qe as P,
883
- ae as a,
884
- at as b,
885
- Qe as c,
886
- j as g,
887
- Ze as u
888
- };
889
- //# sourceMappingURL=patient-table-CDuosVru.js.map