@alfadocs/ui-kit 0.46.0 → 0.48.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 (200) hide show
  1. package/dist/_chunks/{agenda-card-CFyWSX7Z.js → agenda-card-BaSfVfrL.js} +25 -29
  2. package/dist/_chunks/{agenda-tray-Dyj9ChHC.js → agenda-tray-DQayYmQ0.js} +50 -67
  3. package/dist/_chunks/ai-consent-banner-DO5ingMq.js +169 -0
  4. package/dist/_chunks/ai-tools-rail-CxYG04cw.js +280 -0
  5. package/dist/_chunks/alia-sidebar-DlvyXgVC.js +1126 -0
  6. package/dist/_chunks/anamnesis-card-CmkBVAln.js +156 -0
  7. package/dist/_chunks/appointment-tray-BwDHhWWC.js +419 -0
  8. package/dist/_chunks/{audio-recorder-C1rhKhSN.js → audio-recorder-DC-v9YFW.js} +81 -91
  9. package/dist/_chunks/{bmi-calculator-CQqXTVNL.js → bmi-calculator-DdylQzT6.js} +2 -2
  10. package/dist/_chunks/{booking-DlDVuWMd.js → booking-WV2GSru5.js} +291 -303
  11. package/dist/_chunks/{calculator-dialog-D-nfvteH.js → calculator-dialog-CFk4I91b.js} +2 -2
  12. package/dist/_chunks/calendar-days-C4BmpCZg.js +23 -0
  13. package/dist/_chunks/{calendar-YHFknAGv.js → calendar-oYWOCrnf.js} +195 -210
  14. package/dist/_chunks/care-plan-card-QmNpGggC.js +252 -0
  15. package/dist/_chunks/care-plan-entry-card-Cnra7vUc.js +318 -0
  16. package/dist/_chunks/{chat-input-CQe7nR_v.js → chat-input-CFwc7JxL.js} +2 -1
  17. package/dist/_chunks/{chat-message-ASgGtj-L.js → chat-message-Dm8U2RY1.js} +81 -74
  18. package/dist/_chunks/clinical-note-card-BYo437dU.js +333 -0
  19. package/dist/_chunks/code-block-HoddNOKJ.js +106 -0
  20. package/dist/_chunks/{contact-profile-card-DHyuAPXM.js → contact-profile-card-DvvVfAA2.js} +102 -115
  21. package/dist/_chunks/{cycle-calculator-KxA8dqDf.js → cycle-calculator-DYvGm_m1.js} +2 -2
  22. package/dist/_chunks/{dialog-BTpZV6It.js → dialog-DMGnSelc.js} +55 -55
  23. package/dist/_chunks/download-CDF1sbL9.js +16 -0
  24. package/dist/_chunks/{due-date-calculator-mFxpHLml.js → due-date-calculator-BXd3ANj7.js} +2 -2
  25. package/dist/_chunks/{editable-currency-cell-renderer-BEBUQl9P.js → editable-currency-cell-renderer-CLil9B29.js} +283 -293
  26. package/dist/_chunks/entity-card-COhmqHly.js +69 -0
  27. package/dist/_chunks/{gestational-age-calculator-gWI_uRA1.js → gestational-age-calculator-Crj6FgZw.js} +2 -2
  28. package/dist/_chunks/{insert-result-C5ABnzDl.js → insert-result-DNdi_JYW.js} +140 -168
  29. package/dist/_chunks/is-safe-url-DkETxeHz.js +7 -0
  30. package/dist/_chunks/languages-DsVf_WzT.js +19 -0
  31. package/dist/_chunks/layers-pzGcbLPj.js +34 -0
  32. package/dist/_chunks/{message-card-DSPw5ghw.js → message-card-Dvl1TgaN.js} +15 -19
  33. package/dist/_chunks/{message-tray-hSQff9u4.js → message-tray-Dl6GQaaV.js} +2 -2
  34. package/dist/_chunks/mic-B4Gog3Gi.js +16 -0
  35. package/dist/_chunks/operator-hero-CM8949Hd.js +198 -0
  36. package/dist/_chunks/patient-summary-card-BnTqxcTr.js +443 -0
  37. package/dist/_chunks/payment-request-card-B_lyobd0.js +478 -0
  38. package/dist/_chunks/{pdf-viewer-CWEXTlwq.js → pdf-viewer-G8SU6Azw.js} +3 -3
  39. package/dist/_chunks/pencil-CfQX-0Qc.js +21 -0
  40. package/dist/_chunks/periodontal-chart-card-BYs9hax1.js +455 -0
  41. package/dist/_chunks/phone-Bi5yUm4I.js +20 -0
  42. package/dist/_chunks/{practice-results-DDi-kvaD.js → practice-results-BFL_mcDW.js} +3 -2
  43. package/dist/_chunks/{pregnancy-weight-gain-BtEHaSqy.js → pregnancy-weight-gain-C7dK89jE.js} +2 -2
  44. package/dist/_chunks/scan-line-lGioFwLC.js +18 -0
  45. package/dist/_chunks/shield-check-BjCGH_Sr.js +21 -0
  46. package/dist/_chunks/{sign-document-BCyLpFHJ.js → sign-document-DPI2pY9V.js} +2 -2
  47. package/dist/_chunks/{streaming-text-GH07yIYh.js → streaming-text-CfhDqtIT.js} +49 -45
  48. package/dist/_chunks/{transaction-chip-B8ujzowA.js → transaction-chip-BZCa6XDn.js} +8 -6
  49. package/dist/_chunks/{unit-converter-u3CwNDpP.js → unit-converter-jWp3Z85y.js} +2 -2
  50. package/dist/_chunks/user-cog-BS_qc8nA.js +24 -0
  51. package/dist/_chunks/video-BAeICxCT.js +21 -0
  52. package/dist/_chunks/{workflow-map-BFNpzTiw.js → workflow-map-ZXw-zsZ8.js} +186 -219
  53. package/dist/agent-catalog.json +324 -1
  54. package/dist/components/_shared/code-block.d.ts +39 -0
  55. package/dist/components/_shared/entity-card/entity-card.d.ts +40 -0
  56. package/dist/components/_shared/entity-card/index.d.ts +3 -0
  57. package/dist/components/_shared/index.d.ts +2 -0
  58. package/dist/components/_shared/is-safe-url.d.ts +13 -0
  59. package/dist/components/agenda-card/agenda-card.d.ts +1 -2
  60. package/dist/components/agenda-card/index.d.ts +2 -1
  61. package/dist/components/agenda-card/index.js +6 -5
  62. package/dist/components/agenda-tray/index.js +1 -1
  63. package/dist/components/ai-consent-banner/ai-consent-banner.agent.d.ts +4 -0
  64. package/dist/components/ai-consent-banner/ai-consent-banner.d.ts +45 -0
  65. package/dist/components/ai-consent-banner/index.d.ts +4 -0
  66. package/dist/components/ai-consent-banner/index.js +6 -0
  67. package/dist/components/ai-tools-rail/ai-tools-rail.agent.d.ts +4 -0
  68. package/dist/components/ai-tools-rail/ai-tools-rail.d.ts +60 -0
  69. package/dist/components/ai-tools-rail/index.d.ts +4 -0
  70. package/dist/components/ai-tools-rail/index.js +6 -0
  71. package/dist/components/anamnesis-card/anamnesis-card.d.ts +68 -0
  72. package/dist/components/anamnesis-card/index.d.ts +3 -0
  73. package/dist/components/anamnesis-card/index.js +5 -0
  74. package/dist/components/appointment-card/appointment-card.agent.d.ts +3 -0
  75. package/dist/components/appointment-card/appointment-card.d.ts +93 -0
  76. package/dist/components/appointment-card/appointment-tray.agent.d.ts +4 -0
  77. package/dist/components/appointment-card/appointment-tray.d.ts +48 -0
  78. package/dist/components/appointment-card/index.d.ts +8 -0
  79. package/dist/components/appointment-card/index.js +10 -0
  80. package/dist/components/audio-recorder/index.js +1 -1
  81. package/dist/components/badge/badge.d.ts +1 -1
  82. package/dist/components/bmi-calculator/index.js +1 -1
  83. package/dist/components/booking/index.js +1 -1
  84. package/dist/components/calculator-dialog/index.js +1 -1
  85. package/dist/components/calendar/index.js +1 -1
  86. package/dist/components/card/card.d.ts +1 -1
  87. package/dist/components/care-plan-card/care-plan-card.agent.d.ts +4 -0
  88. package/dist/components/care-plan-card/care-plan-card.d.ts +102 -0
  89. package/dist/components/care-plan-card/index.d.ts +4 -0
  90. package/dist/components/care-plan-card/index.js +6 -0
  91. package/dist/components/care-plan-entry-card/care-plan-entry-card.agent.d.ts +4 -0
  92. package/dist/components/care-plan-entry-card/care-plan-entry-card.d.ts +110 -0
  93. package/dist/components/care-plan-entry-card/index.d.ts +4 -0
  94. package/dist/components/care-plan-entry-card/index.js +6 -0
  95. package/dist/components/chat-input/index.js +1 -1
  96. package/dist/components/chat-message/chat-message.d.ts +13 -0
  97. package/dist/components/chat-message/index.js +1 -1
  98. package/dist/components/clinical-note-card/clinical-note-card.agent.d.ts +4 -0
  99. package/dist/components/clinical-note-card/clinical-note-card.d.ts +98 -0
  100. package/dist/components/clinical-note-card/index.d.ts +4 -0
  101. package/dist/components/clinical-note-card/index.js +6 -0
  102. package/dist/components/contact-profile-card/index.js +1 -1
  103. package/dist/components/cycle-calculator/index.js +1 -1
  104. package/dist/components/data-table/index.js +1 -1
  105. package/dist/components/dialog/dialog.d.ts +7 -0
  106. package/dist/components/dialog/index.js +1 -1
  107. package/dist/components/due-date-calculator/index.js +1 -1
  108. package/dist/components/gestational-age-calculator/index.js +1 -1
  109. package/dist/components/index.d.ts +10 -0
  110. package/dist/components/message-card/index.js +5 -4
  111. package/dist/components/message-card/message-card.d.ts +1 -2
  112. package/dist/components/message-tray/index.js +1 -1
  113. package/dist/components/operator-hero/index.js +1 -1
  114. package/dist/components/operator-hero/operator-hero.d.ts +9 -0
  115. package/dist/components/patient-summary-card/index.d.ts +4 -0
  116. package/dist/components/patient-summary-card/index.js +6 -0
  117. package/dist/components/patient-summary-card/patient-summary-card.agent.d.ts +4 -0
  118. package/dist/components/patient-summary-card/patient-summary-card.d.ts +120 -0
  119. package/dist/components/payment-card/index.d.ts +7 -0
  120. package/dist/components/payment-card/index.js +8 -0
  121. package/dist/components/payment-card/payment-card.agent.d.ts +4 -0
  122. package/dist/components/payment-card/payment-card.d.ts +71 -0
  123. package/dist/components/payment-card/payment-request-card.agent.d.ts +4 -0
  124. package/dist/components/payment-card/payment-request-card.d.ts +43 -0
  125. package/dist/components/pdf-viewer/index.js +1 -1
  126. package/dist/components/periodontal-chart-card/index.d.ts +4 -0
  127. package/dist/components/periodontal-chart-card/index.js +7 -0
  128. package/dist/components/periodontal-chart-card/periodontal-chart-card.agent.d.ts +4 -0
  129. package/dist/components/periodontal-chart-card/periodontal-chart-card.d.ts +74 -0
  130. package/dist/components/practice-results/index.js +1 -1
  131. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  132. package/dist/components/public-header/public-header.d.ts +1 -1
  133. package/dist/components/sign-document/index.js +1 -1
  134. package/dist/components/stat/stat.d.ts +1 -1
  135. package/dist/components/streaming-text/index.js +1 -1
  136. package/dist/components/transaction-chip/index.js +1 -1
  137. package/dist/components/unit-converter/index.js +1 -1
  138. package/dist/components/workflow/index.js +1 -1
  139. package/dist/i18n/locales/ar.d.ts +366 -0
  140. package/dist/i18n/locales/ar.js +367 -1
  141. package/dist/i18n/locales/de.d.ts +366 -0
  142. package/dist/i18n/locales/de.js +367 -1
  143. package/dist/i18n/locales/el.d.ts +366 -0
  144. package/dist/i18n/locales/el.js +367 -1
  145. package/dist/i18n/locales/en.d.ts +366 -0
  146. package/dist/i18n/locales/en.js +367 -1
  147. package/dist/i18n/locales/es.d.ts +366 -0
  148. package/dist/i18n/locales/es.js +367 -1
  149. package/dist/i18n/locales/fr.d.ts +366 -0
  150. package/dist/i18n/locales/fr.js +367 -1
  151. package/dist/i18n/locales/hi.d.ts +366 -0
  152. package/dist/i18n/locales/hi.js +367 -1
  153. package/dist/i18n/locales/it.d.ts +366 -0
  154. package/dist/i18n/locales/it.js +367 -1
  155. package/dist/i18n/locales/ja.d.ts +366 -0
  156. package/dist/i18n/locales/ja.js +367 -1
  157. package/dist/i18n/locales/nl.d.ts +366 -0
  158. package/dist/i18n/locales/nl.js +367 -1
  159. package/dist/i18n/locales/pl.d.ts +366 -0
  160. package/dist/i18n/locales/pl.js +367 -1
  161. package/dist/i18n/locales/pt.d.ts +366 -0
  162. package/dist/i18n/locales/pt.js +367 -1
  163. package/dist/i18n/locales/ro.d.ts +366 -0
  164. package/dist/i18n/locales/ro.js +367 -1
  165. package/dist/i18n/locales/ru.d.ts +366 -0
  166. package/dist/i18n/locales/ru.js +367 -1
  167. package/dist/i18n/locales/sq.d.ts +366 -0
  168. package/dist/i18n/locales/sq.js +367 -1
  169. package/dist/i18n/locales/sv.d.ts +366 -0
  170. package/dist/i18n/locales/sv.js +367 -1
  171. package/dist/i18n/locales/tr.d.ts +366 -0
  172. package/dist/i18n/locales/tr.js +367 -1
  173. package/dist/i18n/locales/zh.d.ts +366 -0
  174. package/dist/i18n/locales/zh.js +367 -1
  175. package/dist/index.js +527 -491
  176. package/dist/locales/ar.json +367 -1
  177. package/dist/locales/de.json +367 -1
  178. package/dist/locales/el.json +367 -1
  179. package/dist/locales/en.json +367 -1
  180. package/dist/locales/es.json +367 -1
  181. package/dist/locales/fr.json +367 -1
  182. package/dist/locales/hi.json +367 -1
  183. package/dist/locales/it.json +367 -1
  184. package/dist/locales/ja.json +367 -1
  185. package/dist/locales/nl.json +367 -1
  186. package/dist/locales/pl.json +367 -1
  187. package/dist/locales/pt.json +367 -1
  188. package/dist/locales/ro.json +367 -1
  189. package/dist/locales/ru.json +367 -1
  190. package/dist/locales/sq.json +367 -1
  191. package/dist/locales/sv.json +367 -1
  192. package/dist/locales/tr.json +367 -1
  193. package/dist/locales/zh.json +367 -1
  194. package/dist/patterns/alia-assistant/alia-types.d.ts +76 -0
  195. package/dist/patterns/alia-assistant/index.js +1 -1
  196. package/dist/tokens.css +1 -1
  197. package/package.json +42 -1
  198. package/dist/_chunks/alia-sidebar-Be8FhKYd.js +0 -837
  199. package/dist/_chunks/operator-hero-7LiiP7zi.js +0 -171
  200. package/dist/_chunks/shield-check-C73ma9Cs.js +0 -36
@@ -0,0 +1,455 @@
1
+ import { jsxs as o, jsx as e, Fragment as Z } from "react/jsx-runtime";
2
+ import { forwardRef as ee, useId as te, useMemo as O } from "react";
3
+ import { c as R } from "./index-D2ZczOXr.js";
4
+ import { useTranslation as ae } from "react-i18next";
5
+ import { B as re } from "./badge-zsf5i5bH.js";
6
+ import { C as S } from "./card-DPmk26CL.js";
7
+ import { K as ne, a as se } from "./key-value-pair-CkQIb9EG.js";
8
+ import { u as oe } from "./registry-nPAVE19X.js";
9
+ const de = {
10
+ id: "periodontal-chart-card",
11
+ capabilities: [],
12
+ state: {
13
+ toothIds: {
14
+ type: "string[]",
15
+ descriptionKey: "ui.agent.periodontalChartCard.state.toothIds",
16
+ description: "FDI ids of the teeth currently charted. Tooth identifiers only — no patient identity.",
17
+ read: (d) => d.getToothIds()
18
+ },
19
+ siteCount: {
20
+ type: "number",
21
+ descriptionKey: "ui.agent.periodontalChartCard.state.siteCount",
22
+ description: "Total number of probing sites rendered.",
23
+ read: (d) => d.getSiteCount()
24
+ },
25
+ deepPocketCount: {
26
+ type: "number",
27
+ descriptionKey: "ui.agent.periodontalChartCard.state.deepPocketCount",
28
+ description: "Number of sites with a probing depth at or above the 6mm severe threshold.",
29
+ read: (d) => d.getDeepPocketCount()
30
+ }
31
+ },
32
+ actions: {},
33
+ domHooks: {
34
+ root: {
35
+ attr: "data-component",
36
+ value: "periodontal-chart-card",
37
+ description: "Marks the PeriodontalChartCard root region."
38
+ },
39
+ instanceId: {
40
+ attr: "data-component-id",
41
+ sourceProp: "id",
42
+ description: "Sourced from the id prop."
43
+ }
44
+ }
45
+ }, le = R("ds:w-full ds:text-[color:var(--foreground)]", {
46
+ variants: {
47
+ // Matches the kit's other `surface` props. `elevated` wraps in
48
+ // `<Card variant="elevated">`; `flat` drops the chrome for use
49
+ // inside an existing Card / Sheet.
50
+ surface: {
51
+ flat: "",
52
+ elevated: ""
53
+ }
54
+ },
55
+ defaultVariants: { surface: "elevated" }
56
+ }), ie = R(
57
+ "ds:[font-variant-numeric:var(--font-feature-tabular)] ds:tabular-nums",
58
+ {
59
+ variants: {
60
+ severity: {
61
+ normal: "ds:text-[color:var(--foreground)]",
62
+ moderate: "ds:font-semibold ds:text-[color:var(--warning-foreground)]",
63
+ severe: "ds:font-bold ds:text-[color:var(--destructive)]"
64
+ }
65
+ },
66
+ defaultVariants: { severity: "normal" }
67
+ }
68
+ ), I = 4, N = 6, f = [
69
+ "db",
70
+ "b",
71
+ "mb",
72
+ "dl",
73
+ "l",
74
+ "ml"
75
+ ], ce = {
76
+ db: "Disto-buccal",
77
+ b: "Buccal",
78
+ mb: "Mesio-buccal",
79
+ dl: "Disto-lingual",
80
+ l: "Lingual",
81
+ ml: "Mesio-lingual"
82
+ }, L = ["1", "2", "3", "4"];
83
+ function pe(d) {
84
+ return d == null || !Number.isFinite(d) ? "normal" : d >= N ? "severe" : d >= I ? "moderate" : "normal";
85
+ }
86
+ function ue(d) {
87
+ return d === "severe" ? "∗∗" : d === "moderate" ? "∗" : "";
88
+ }
89
+ function A(d) {
90
+ const m = d.trim().charAt(0);
91
+ return L.includes(m) ? m : null;
92
+ }
93
+ const he = ee(
94
+ ({
95
+ sites: d,
96
+ dateIso: m,
97
+ dentition: y = "permanent",
98
+ mobility: v,
99
+ summary: u,
100
+ locale: q,
101
+ surface: P = "elevated",
102
+ "aria-label": F,
103
+ id: b,
104
+ className: _,
105
+ ...B
106
+ }, K) => {
107
+ const { t: a, i18n: Q } = ae(), k = te(), C = q ?? Q.language ?? "en", { quadrants: D, toothIds: U, siteCount: j, deepPocketCount: z } = O(() => {
108
+ const t = /* @__PURE__ */ new Map();
109
+ let h = 0, p = 0;
110
+ for (const n of d) {
111
+ h += 1, (n.pocketDepthMm ?? 0) >= N && (p += 1);
112
+ let c = t.get(n.tooth);
113
+ c || (c = { tooth: n.tooth, sites: {} }, t.set(n.tooth, c)), c.sites[n.site] = n;
114
+ }
115
+ const l = Array.from(t.values()), i = L.map((n) => ({
116
+ quadrant: n,
117
+ teeth: l.filter((c) => A(c.tooth) === n).sort((c, Y) => c.tooth.localeCompare(Y.tooth, "en"))
118
+ })).filter((n) => n.teeth.length > 0), r = l.filter((n) => A(n.tooth) === null);
119
+ r.length > 0 && i.push({ quadrant: null, teeth: r });
120
+ const s = i.flatMap((n) => n.teeth.map((c) => c.tooth));
121
+ return {
122
+ quadrants: i,
123
+ toothIds: s,
124
+ siteCount: h,
125
+ deepPocketCount: p
126
+ };
127
+ }, [d]);
128
+ oe(
129
+ de,
130
+ {
131
+ getToothIds: () => U,
132
+ getSiteCount: () => j,
133
+ getDeepPocketCount: () => z
134
+ },
135
+ b
136
+ );
137
+ const w = O(() => {
138
+ if (!m) return;
139
+ const t = new Date(m);
140
+ if (!Number.isNaN(t.getTime()))
141
+ try {
142
+ return new Intl.DateTimeFormat(C, {
143
+ dateStyle: "medium"
144
+ }).format(t);
145
+ } catch {
146
+ return t.toISOString().slice(0, 10);
147
+ }
148
+ }, [m, C]), M = a(
149
+ "periodontalChartCard.heading",
150
+ "Periodontal chart"
151
+ ), $ = F ?? M, H = {
152
+ permanent: "Permanent dentition",
153
+ primary: "Primary dentition",
154
+ mixed: "Mixed dentition"
155
+ }, T = a(`periodontalChartCard.dentition.${y}`, {
156
+ defaultValue: H[y]
157
+ }), x = (t) => {
158
+ try {
159
+ return new Intl.NumberFormat(C, {
160
+ maximumFractionDigits: 1
161
+ }).format(t);
162
+ } catch {
163
+ return String(t);
164
+ }
165
+ }, g = [];
166
+ (u == null ? void 0 : u.meanPocketDepthMm) != null && g.push({
167
+ key: "meanPocketDepth",
168
+ label: a(
169
+ "periodontalChartCard.summary.meanPocketDepth",
170
+ "Mean probing depth"
171
+ ),
172
+ value: a("periodontalChartCard.unit.mm", {
173
+ value: x(u.meanPocketDepthMm),
174
+ defaultValue: "{{value}} mm"
175
+ })
176
+ }), (u == null ? void 0 : u.bleedingOnProbingPercent) != null && g.push({
177
+ key: "bleedingOnProbing",
178
+ label: a(
179
+ "periodontalChartCard.summary.bleedingOnProbing",
180
+ "Bleeding on probing"
181
+ ),
182
+ value: a("periodontalChartCard.unit.percent", {
183
+ value: x(u.bleedingOnProbingPercent),
184
+ defaultValue: "{{value}}%"
185
+ })
186
+ });
187
+ const E = (t, h) => {
188
+ if (t == null || !Number.isFinite(t))
189
+ return /* @__PURE__ */ e(
190
+ "span",
191
+ {
192
+ "aria-hidden": "true",
193
+ className: "ds:text-[color:var(--muted-foreground)]",
194
+ children: a("periodontalChartCard.cell.empty", "–")
195
+ }
196
+ );
197
+ const p = h === "pocket" ? pe(t) : "normal", l = h === "pocket" ? ue(p) : "", i = x(t), r = p === "severe" ? ` ${a("periodontalChartCard.flag.severe", "severe pocket")}` : p === "moderate" ? ` ${a("periodontalChartCard.flag.moderate", "moderate pocket")}` : "";
198
+ return /* @__PURE__ */ o("span", { className: ie({ severity: p }), children: [
199
+ /* @__PURE__ */ e("span", { children: i }),
200
+ l ? /* @__PURE__ */ e("span", { "aria-hidden": "true", children: l }) : null,
201
+ r ? /* @__PURE__ */ e("span", { className: "ds:sr-only", children: r }) : null
202
+ ] });
203
+ }, G = (t) => !t || !t.bleeding && !t.suppuration ? /* @__PURE__ */ e(
204
+ "span",
205
+ {
206
+ "aria-hidden": "true",
207
+ className: "ds:text-[color:var(--muted-foreground)]",
208
+ children: a("periodontalChartCard.cell.empty", "–")
209
+ }
210
+ ) : /* @__PURE__ */ o("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
211
+ t.bleeding ? /* @__PURE__ */ e(
212
+ "span",
213
+ {
214
+ role: "img",
215
+ "aria-label": a(
216
+ "periodontalChartCard.sign.bleeding",
217
+ "Bleeding on probing"
218
+ ),
219
+ className: "ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--destructive)]"
220
+ }
221
+ ) : null,
222
+ t.suppuration ? /* @__PURE__ */ e(
223
+ "span",
224
+ {
225
+ role: "img",
226
+ "aria-label": a(
227
+ "periodontalChartCard.sign.suppuration",
228
+ "Suppuration"
229
+ ),
230
+ className: "ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--warning)]"
231
+ }
232
+ ) : null
233
+ ] }), J = (t) => {
234
+ const h = {
235
+ 1: "Upper right (Q1)",
236
+ 2: "Upper left (Q2)",
237
+ 3: "Lower left (Q3)",
238
+ 4: "Lower right (Q4)"
239
+ }, p = t.quadrant != null ? a(`periodontalChartCard.quadrant.${t.quadrant}`, {
240
+ defaultValue: h[t.quadrant]
241
+ }) : a("periodontalChartCard.quadrant.other", "Other teeth"), l = "ds:px-[var(--spacing-xs)] ds:py-[var(--spacing-2xs)] ds:text-center ds:border-b ds:border-[color:var(--border)]", i = "ds:px-[var(--spacing-xs)] ds:py-[var(--spacing-2xs)] ds:text-start ds:font-medium ds:border-b ds:border-[color:var(--border)] ds:whitespace-nowrap";
242
+ return /* @__PURE__ */ e(
243
+ "div",
244
+ {
245
+ className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:overflow-x-auto",
246
+ children: /* @__PURE__ */ o("table", { className: "type-body-sm ds:w-full ds:border-collapse", children: [
247
+ /* @__PURE__ */ e("caption", { className: "type-label ds:text-start ds:mb-[var(--spacing-2xs)] ds:text-[color:var(--muted-foreground)]", children: p }),
248
+ /* @__PURE__ */ e("thead", { children: /* @__PURE__ */ o("tr", { children: [
249
+ /* @__PURE__ */ e(
250
+ "th",
251
+ {
252
+ scope: "col",
253
+ className: "ds:px-[var(--spacing-xs)] ds:py-[var(--spacing-2xs)] ds:text-start ds:border-b ds:border-[color:var(--border)]",
254
+ children: a("periodontalChartCard.column.measure", "Measurement")
255
+ }
256
+ ),
257
+ t.teeth.map((r) => /* @__PURE__ */ o(
258
+ "th",
259
+ {
260
+ scope: "col",
261
+ "data-tooth-id": r.tooth,
262
+ className: "ds:px-[var(--spacing-xs)] ds:py-[var(--spacing-2xs)] ds:text-center ds:border-b ds:border-[color:var(--border)] ds:[font-variant-numeric:var(--font-feature-tabular)] ds:tabular-nums",
263
+ children: [
264
+ /* @__PURE__ */ e("span", { className: "ds:sr-only", children: a("periodontalChartCard.toothHeader", {
265
+ tooth: r.tooth,
266
+ defaultValue: "Tooth {{tooth}}"
267
+ }) }),
268
+ /* @__PURE__ */ e("span", { "aria-hidden": "true", children: r.tooth })
269
+ ]
270
+ },
271
+ r.tooth
272
+ ))
273
+ ] }) }),
274
+ /* @__PURE__ */ o("tbody", { children: [
275
+ /* @__PURE__ */ o("tr", { children: [
276
+ /* @__PURE__ */ e("th", { scope: "row", className: i, children: a(
277
+ "periodontalChartCard.row.pocketDepth",
278
+ "Pocket depth (PD)"
279
+ ) }),
280
+ t.teeth.map((r) => /* @__PURE__ */ e("td", { className: l, children: /* @__PURE__ */ o("span", { className: "ds:flex ds:items-center ds:justify-center ds:gap-[var(--spacing-2xs)]", children: [
281
+ f.map((s) => /* @__PURE__ */ e("span", { className: "ds:sr-only", children: a(`periodontalChartCard.site.${s}`, {
282
+ defaultValue: ce[s]
283
+ }) }, s)),
284
+ /* @__PURE__ */ e("span", { className: "ds:flex ds:gap-[var(--spacing-2xs)]", children: f.map((s) => {
285
+ var n;
286
+ return /* @__PURE__ */ e("span", { children: E(
287
+ (n = r.sites[s]) == null ? void 0 : n.pocketDepthMm,
288
+ "pocket"
289
+ ) }, s);
290
+ }) })
291
+ ] }) }, r.tooth))
292
+ ] }),
293
+ /* @__PURE__ */ o("tr", { children: [
294
+ /* @__PURE__ */ e("th", { scope: "row", className: i, children: a("periodontalChartCard.row.recession", "Recession (REC)") }),
295
+ t.teeth.map((r) => /* @__PURE__ */ e("td", { className: l, children: /* @__PURE__ */ e("span", { className: "ds:flex ds:gap-[var(--spacing-2xs)] ds:justify-center", children: f.map((s) => {
296
+ var n;
297
+ return /* @__PURE__ */ e("span", { children: E(
298
+ (n = r.sites[s]) == null ? void 0 : n.recessionMm,
299
+ "recession"
300
+ ) }, s);
301
+ }) }) }, r.tooth))
302
+ ] }),
303
+ /* @__PURE__ */ o("tr", { children: [
304
+ /* @__PURE__ */ e("th", { scope: "row", className: i, children: a(
305
+ "periodontalChartCard.row.signs",
306
+ "Bleeding / suppuration"
307
+ ) }),
308
+ t.teeth.map((r) => /* @__PURE__ */ e("td", { className: l, children: /* @__PURE__ */ e("span", { className: "ds:flex ds:gap-[var(--spacing-2xs)] ds:justify-center", children: f.map((s) => /* @__PURE__ */ e("span", { children: G(r.sites[s]) }, s)) }) }, r.tooth))
309
+ ] }),
310
+ v && t.teeth.some((r) => v[r.tooth] != null) ? /* @__PURE__ */ o("tr", { children: [
311
+ /* @__PURE__ */ e("th", { scope: "row", className: i, children: a("periodontalChartCard.row.mobility", "Mobility") }),
312
+ t.teeth.map((r) => {
313
+ const s = v[r.tooth];
314
+ return /* @__PURE__ */ e("td", { className: l, children: s != null ? /* @__PURE__ */ e(
315
+ re,
316
+ {
317
+ variant: s >= 2 ? "warning" : "neutral",
318
+ size: "sm",
319
+ "aria-label": a(
320
+ "periodontalChartCard.mobility.label",
321
+ {
322
+ grade: s,
323
+ defaultValue: "Mobility grade {{grade}}"
324
+ }
325
+ ),
326
+ children: s
327
+ }
328
+ ) : /* @__PURE__ */ e(
329
+ "span",
330
+ {
331
+ "aria-hidden": "true",
332
+ className: "ds:text-[color:var(--muted-foreground)]",
333
+ children: a("periodontalChartCard.cell.empty", "–")
334
+ }
335
+ ) }, r.tooth);
336
+ })
337
+ ] }) : null
338
+ ] })
339
+ ] })
340
+ },
341
+ t.quadrant ?? "other"
342
+ );
343
+ }, W = /* @__PURE__ */ o(
344
+ "div",
345
+ {
346
+ role: "group",
347
+ className: "type-meta ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)] ds:text-[color:var(--muted-foreground)]",
348
+ "aria-label": a("periodontalChartCard.legend.label", "Chart legend"),
349
+ children: [
350
+ /* @__PURE__ */ o("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
351
+ /* @__PURE__ */ e(
352
+ "span",
353
+ {
354
+ "aria-hidden": "true",
355
+ className: "ds:font-semibold ds:text-[color:var(--warning-foreground)]",
356
+ children: "∗"
357
+ }
358
+ ),
359
+ a("periodontalChartCard.legend.moderate", {
360
+ threshold: I,
361
+ defaultValue: "PD ≥ {{threshold}} mm"
362
+ })
363
+ ] }),
364
+ /* @__PURE__ */ o("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
365
+ /* @__PURE__ */ e(
366
+ "span",
367
+ {
368
+ "aria-hidden": "true",
369
+ className: "ds:font-bold ds:text-[color:var(--destructive)]",
370
+ children: "∗∗"
371
+ }
372
+ ),
373
+ a("periodontalChartCard.legend.severe", {
374
+ threshold: N,
375
+ defaultValue: "PD ≥ {{threshold}} mm"
376
+ })
377
+ ] }),
378
+ /* @__PURE__ */ o("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
379
+ /* @__PURE__ */ e(
380
+ "span",
381
+ {
382
+ "aria-hidden": "true",
383
+ className: "ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--destructive)]"
384
+ }
385
+ ),
386
+ a("periodontalChartCard.sign.bleeding", "Bleeding on probing")
387
+ ] }),
388
+ /* @__PURE__ */ o("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
389
+ /* @__PURE__ */ e(
390
+ "span",
391
+ {
392
+ "aria-hidden": "true",
393
+ className: "ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--warning)]"
394
+ }
395
+ ),
396
+ a("periodontalChartCard.sign.suppuration", "Suppuration")
397
+ ] })
398
+ ]
399
+ }
400
+ ), X = D.length === 0, V = /* @__PURE__ */ o("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", children: [
401
+ /* @__PURE__ */ o("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]", children: [
402
+ /* @__PURE__ */ e(
403
+ "h2",
404
+ {
405
+ id: k,
406
+ className: "type-title-card ds:m-0 ds:text-[color:var(--foreground)]",
407
+ children: M
408
+ }
409
+ ),
410
+ /* @__PURE__ */ e("p", { className: "type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]", children: w ? a("periodontalChartCard.subtitle.dated", {
411
+ dentition: T,
412
+ date: w,
413
+ defaultValue: "{{dentition}} · {{date}}"
414
+ }) : T })
415
+ ] }),
416
+ g.length > 0 ? /* @__PURE__ */ e(ne, { rowGap: "sm", children: g.map((t) => /* @__PURE__ */ e(se, { label: t.label, value: t.value }, t.key)) }) : null,
417
+ X ? /* @__PURE__ */ e(
418
+ "p",
419
+ {
420
+ role: "status",
421
+ className: "type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]",
422
+ children: a(
423
+ "periodontalChartCard.empty",
424
+ "No periodontal readings recorded."
425
+ )
426
+ }
427
+ ) : /* @__PURE__ */ o(Z, { children: [
428
+ /* @__PURE__ */ e("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", children: D.map((t) => J(t)) }),
429
+ W
430
+ ] })
431
+ ] });
432
+ return /* @__PURE__ */ e(
433
+ "div",
434
+ {
435
+ ref: K,
436
+ role: "region",
437
+ "aria-label": $,
438
+ "aria-labelledby": k,
439
+ "data-component": "periodontal-chart-card",
440
+ "data-component-id": b,
441
+ id: b,
442
+ className: le({ surface: P, className: _ }),
443
+ ...B,
444
+ children: P === "elevated" ? /* @__PURE__ */ e(S, { variant: "elevated", children: /* @__PURE__ */ e(S.Body, { children: V }) }) : V
445
+ }
446
+ );
447
+ }
448
+ );
449
+ he.displayName = "PeriodontalChartCard";
450
+ export {
451
+ f as P,
452
+ he as a,
453
+ de as p
454
+ };
455
+ //# sourceMappingURL=periodontal-chart-card-BYs9hax1.js.map
@@ -0,0 +1,20 @@
1
+ import { c as a } from "./createLucideIcon-CrFbzy84.js";
2
+ /**
3
+ * @license lucide-react v1.8.0 - ISC
4
+ *
5
+ * This source code is licensed under the ISC license.
6
+ * See the LICENSE file in the root directory of this source tree.
7
+ */
8
+ const o = [
9
+ [
10
+ "path",
11
+ {
12
+ d: "M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384",
13
+ key: "9njp5v"
14
+ }
15
+ ]
16
+ ], c = a("phone", o);
17
+ export {
18
+ c as P
19
+ };
20
+ //# sourceMappingURL=phone-Bi5yUm4I.js.map
@@ -19,7 +19,8 @@ import { c as nt } from "./createLucideIcon-CrFbzy84.js";
19
19
  import { R as at } from "./refresh-cw-CC8jSKMr.js";
20
20
  import { C as Ne } from "./chevron-down-BX_NP2Yh.js";
21
21
  import { M as te } from "./map-pin-B8STOPMJ.js";
22
- import { L as Se, S as Pe } from "./shield-check-C73ma9Cs.js";
22
+ import { L as Se } from "./languages-DsVf_WzT.js";
23
+ import { S as Pe } from "./shield-check-BjCGH_Sr.js";
23
24
  import { H as Me } from "./heart-C0faivFf.js";
24
25
  import { C as Ae } from "./calendar-clock-CYkcqdwl.js";
25
26
  /**
@@ -1569,4 +1570,4 @@ export {
1569
1570
  Ct as P,
1570
1571
  rt as p
1571
1572
  };
1572
- //# sourceMappingURL=practice-results-DDi-kvaD.js.map
1573
+ //# sourceMappingURL=practice-results-BFL_mcDW.js.map
@@ -6,7 +6,7 @@ import { F as y } from "./form-field-BOm9hK35.js";
6
6
  import { N as x } from "./number-input-Dj5L3pXK.js";
7
7
  import { C as $ } from "./card-DPmk26CL.js";
8
8
  import { B as C } from "./badge-zsf5i5bH.js";
9
- import { I as H } from "./insert-result-C5ABnzDl.js";
9
+ import { I as H } from "./insert-result-DNdi_JYW.js";
10
10
  import { b as M, e as j } from "./bmi-BxD-tFzU.js";
11
11
  const L = {
12
12
  underweight: { min: 12.5, max: 18 },
@@ -243,4 +243,4 @@ export {
243
243
  z as a,
244
244
  U as r
245
245
  };
246
- //# sourceMappingURL=pregnancy-weight-gain-BtEHaSqy.js.map
246
+ //# sourceMappingURL=pregnancy-weight-gain-C7dK89jE.js.map
@@ -0,0 +1,18 @@
1
+ import { c as a } from "./createLucideIcon-CrFbzy84.js";
2
+ /**
3
+ * @license lucide-react v1.8.0 - ISC
4
+ *
5
+ * This source code is licensed under the ISC license.
6
+ * See the LICENSE file in the root directory of this source tree.
7
+ */
8
+ const e = [
9
+ ["path", { d: "M3 7V5a2 2 0 0 1 2-2h2", key: "aa7l1z" }],
10
+ ["path", { d: "M17 3h2a2 2 0 0 1 2 2v2", key: "4qcy5o" }],
11
+ ["path", { d: "M21 17v2a2 2 0 0 1-2 2h-2", key: "6vwrx8" }],
12
+ ["path", { d: "M7 21H5a2 2 0 0 1-2-2v-2", key: "ioqczr" }],
13
+ ["path", { d: "M7 12h10", key: "b7w52i" }]
14
+ ], o = a("scan-line", e);
15
+ export {
16
+ o as S
17
+ };
18
+ //# sourceMappingURL=scan-line-lGioFwLC.js.map
@@ -0,0 +1,21 @@
1
+ import { c } from "./createLucideIcon-CrFbzy84.js";
2
+ /**
3
+ * @license lucide-react v1.8.0 - ISC
4
+ *
5
+ * This source code is licensed under the ISC license.
6
+ * See the LICENSE file in the root directory of this source tree.
7
+ */
8
+ const e = [
9
+ [
10
+ "path",
11
+ {
12
+ d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
13
+ key: "oel41y"
14
+ }
15
+ ],
16
+ ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
17
+ ], o = c("shield-check", e);
18
+ export {
19
+ o as S
20
+ };
21
+ //# sourceMappingURL=shield-check-BjCGH_Sr.js.map
@@ -2,7 +2,7 @@ import { jsxs as c, jsx as n } from "react/jsx-runtime";
2
2
  import { forwardRef as ce, useId as le, useMemo as G, useRef as L, useState as x, useEffect as _, useCallback as l, useImperativeHandle as ue } from "react";
3
3
  import { c as i } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as me } from "react-i18next";
5
- import { P as ge } from "./pdf-viewer-CWEXTlwq.js";
5
+ import { P as ge } from "./pdf-viewer-G8SU6Azw.js";
6
6
  import { S as pe } from "./signature-capture-CpMBhqQ9.js";
7
7
  import { u as fe } from "./registry-nPAVE19X.js";
8
8
  import { C as J } from "./circle-check-9AeSgJD_.js";
@@ -341,4 +341,4 @@ export {
341
341
  je as S,
342
342
  ve as s
343
343
  };
344
- //# sourceMappingURL=sign-document-BCyLpFHJ.js.map
344
+ //# sourceMappingURL=sign-document-DPI2pY9V.js.map