@alfadocs/ui-kit-debug 1.4.8 → 1.4.9

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 (106) hide show
  1. package/dist/_chunks/anamnesis-summary-card-FNSkuUMB.js +346 -0
  2. package/dist/_chunks/anamnesis-summary-card-FNSkuUMB.js.map +1 -0
  3. package/dist/_chunks/{anamnesis-summary-rows-Co3BA0ro.js → anamnesis-summary-rows-6tOCXdoz.js} +587 -592
  4. package/dist/_chunks/anamnesis-summary-rows-6tOCXdoz.js.map +1 -0
  5. package/dist/agent-catalog.json +1 -1
  6. package/dist/components/anamnesis-summary-card/anamnesis-summary-card.d.ts +6 -0
  7. package/dist/components/anamnesis-summary-card/anamnesis-summary-card.d.ts.map +1 -1
  8. package/dist/components/anamnesis-summary-card/index.js +1 -1
  9. package/dist/i18n/locales/ar.d.ts +1 -0
  10. package/dist/i18n/locales/ar.d.ts.map +1 -1
  11. package/dist/i18n/locales/ar.js +1 -0
  12. package/dist/i18n/locales/ar.js.map +1 -1
  13. package/dist/i18n/locales/de.d.ts +1 -0
  14. package/dist/i18n/locales/de.d.ts.map +1 -1
  15. package/dist/i18n/locales/de.js +1 -0
  16. package/dist/i18n/locales/de.js.map +1 -1
  17. package/dist/i18n/locales/el.d.ts +1 -0
  18. package/dist/i18n/locales/el.d.ts.map +1 -1
  19. package/dist/i18n/locales/el.js +1 -0
  20. package/dist/i18n/locales/el.js.map +1 -1
  21. package/dist/i18n/locales/en.d.ts +1 -0
  22. package/dist/i18n/locales/en.d.ts.map +1 -1
  23. package/dist/i18n/locales/en.js +1 -0
  24. package/dist/i18n/locales/en.js.map +1 -1
  25. package/dist/i18n/locales/es.d.ts +1 -0
  26. package/dist/i18n/locales/es.d.ts.map +1 -1
  27. package/dist/i18n/locales/es.js +1 -0
  28. package/dist/i18n/locales/es.js.map +1 -1
  29. package/dist/i18n/locales/fr.d.ts +1 -0
  30. package/dist/i18n/locales/fr.d.ts.map +1 -1
  31. package/dist/i18n/locales/fr.js +1 -0
  32. package/dist/i18n/locales/fr.js.map +1 -1
  33. package/dist/i18n/locales/hi.d.ts +1 -0
  34. package/dist/i18n/locales/hi.d.ts.map +1 -1
  35. package/dist/i18n/locales/hi.js +1 -0
  36. package/dist/i18n/locales/hi.js.map +1 -1
  37. package/dist/i18n/locales/it.d.ts +1 -0
  38. package/dist/i18n/locales/it.d.ts.map +1 -1
  39. package/dist/i18n/locales/it.js +1 -0
  40. package/dist/i18n/locales/it.js.map +1 -1
  41. package/dist/i18n/locales/ja.d.ts +1 -0
  42. package/dist/i18n/locales/ja.d.ts.map +1 -1
  43. package/dist/i18n/locales/ja.js +1 -0
  44. package/dist/i18n/locales/ja.js.map +1 -1
  45. package/dist/i18n/locales/nl.d.ts +1 -0
  46. package/dist/i18n/locales/nl.d.ts.map +1 -1
  47. package/dist/i18n/locales/nl.js +1 -0
  48. package/dist/i18n/locales/nl.js.map +1 -1
  49. package/dist/i18n/locales/pl.d.ts +1 -0
  50. package/dist/i18n/locales/pl.d.ts.map +1 -1
  51. package/dist/i18n/locales/pl.js +1 -0
  52. package/dist/i18n/locales/pl.js.map +1 -1
  53. package/dist/i18n/locales/pt.d.ts +1 -0
  54. package/dist/i18n/locales/pt.d.ts.map +1 -1
  55. package/dist/i18n/locales/pt.js +1 -0
  56. package/dist/i18n/locales/pt.js.map +1 -1
  57. package/dist/i18n/locales/ro.d.ts +1 -0
  58. package/dist/i18n/locales/ro.d.ts.map +1 -1
  59. package/dist/i18n/locales/ro.js +1 -0
  60. package/dist/i18n/locales/ro.js.map +1 -1
  61. package/dist/i18n/locales/ru.d.ts +1 -0
  62. package/dist/i18n/locales/ru.d.ts.map +1 -1
  63. package/dist/i18n/locales/ru.js +1 -0
  64. package/dist/i18n/locales/ru.js.map +1 -1
  65. package/dist/i18n/locales/sq.d.ts +1 -0
  66. package/dist/i18n/locales/sq.d.ts.map +1 -1
  67. package/dist/i18n/locales/sq.js +1 -0
  68. package/dist/i18n/locales/sq.js.map +1 -1
  69. package/dist/i18n/locales/sv.d.ts +1 -0
  70. package/dist/i18n/locales/sv.d.ts.map +1 -1
  71. package/dist/i18n/locales/sv.js +1 -0
  72. package/dist/i18n/locales/sv.js.map +1 -1
  73. package/dist/i18n/locales/tr.d.ts +1 -0
  74. package/dist/i18n/locales/tr.d.ts.map +1 -1
  75. package/dist/i18n/locales/tr.js +1 -0
  76. package/dist/i18n/locales/tr.js.map +1 -1
  77. package/dist/i18n/locales/zh.d.ts +1 -0
  78. package/dist/i18n/locales/zh.d.ts.map +1 -1
  79. package/dist/i18n/locales/zh.js +1 -0
  80. package/dist/i18n/locales/zh.js.map +1 -1
  81. package/dist/index.js +2 -2
  82. package/dist/locales/ar.json +1 -0
  83. package/dist/locales/de.json +1 -0
  84. package/dist/locales/el.json +1 -0
  85. package/dist/locales/en.json +1 -0
  86. package/dist/locales/es.json +1 -0
  87. package/dist/locales/fr.json +1 -0
  88. package/dist/locales/hi.json +1 -0
  89. package/dist/locales/it.json +1 -0
  90. package/dist/locales/ja.json +1 -0
  91. package/dist/locales/nl.json +1 -0
  92. package/dist/locales/pl.json +1 -0
  93. package/dist/locales/pt.json +1 -0
  94. package/dist/locales/ro.json +1 -0
  95. package/dist/locales/ru.json +1 -0
  96. package/dist/locales/sq.json +1 -0
  97. package/dist/locales/sv.json +1 -0
  98. package/dist/locales/tr.json +1 -0
  99. package/dist/locales/zh.json +1 -0
  100. package/dist/patterns/anamnesis/anamnesis-intake.d.ts.map +1 -1
  101. package/dist/patterns/anamnesis/index.js +1 -1
  102. package/dist/tokens.css +1 -1
  103. package/package.json +1 -1
  104. package/dist/_chunks/anamnesis-summary-card-BvaSnAbI.js +0 -302
  105. package/dist/_chunks/anamnesis-summary-card-BvaSnAbI.js.map +0 -1
  106. package/dist/_chunks/anamnesis-summary-rows-Co3BA0ro.js.map +0 -1
@@ -0,0 +1,346 @@
1
+ import { jsxs as n, jsx as a } from "react/jsx-runtime";
2
+ import { forwardRef as ae, useId as se, useMemo as I, useImperativeHandle as te } from "react";
3
+ import { c as h } from "./index-D2ZczOXr.js";
4
+ import { useTranslation as re } from "react-i18next";
5
+ import { B as H } from "./badge-DCOqV9mI.js";
6
+ import { C as f } from "./card-DPmk26CL.js";
7
+ import { K as E, a as D } from "./key-value-pair-DGkGlgCF.js";
8
+ import { S as P } from "./skeleton-CZbwyJAA.js";
9
+ import { a as de, T as ne } from "./tooltip-DvmfrNvB.js";
10
+ import { u as ie } from "./registry-DvAUVLHh.js";
11
+ import { H as k } from "./heart-pulse-BCppJyN2.js";
12
+ const le = {
13
+ id: "anamnesis-summary-card",
14
+ // The card is read-only: the only handle method is a getSummary
15
+ // projection, so there is no capability to declare.
16
+ capabilities: [],
17
+ state: {
18
+ summary: {
19
+ type: "{ id?: string; sectionCount: number; answerCount: number; highlightedCount: number; unansweredCount: number }",
20
+ descriptionKey: "ui.agent.anamnesisSummaryCard.state.summary",
21
+ description: "Structural summary of the anamnesis card — section, answer, highlighted and unanswered counts plus the consumer id. Never question labels or answer values.",
22
+ read: (r) => r.getSummary()
23
+ }
24
+ },
25
+ actions: {},
26
+ domHooks: {
27
+ root: {
28
+ attr: "data-component",
29
+ value: "anamnesis-summary-card",
30
+ description: "Marks the AnamnesisSummaryCard root region."
31
+ },
32
+ instanceId: {
33
+ attr: "data-component-id",
34
+ sourceProp: "id",
35
+ description: "Sourced from the id prop."
36
+ },
37
+ item: {
38
+ attr: "data-answer-id",
39
+ description: "One per answer row (KeyValuePair); the value is the intake field key. Highlighted rows also carry data-highlighted."
40
+ }
41
+ }
42
+ }, oe = h("ds:w-full ds:text-[color:var(--foreground)]", {
43
+ variants: {
44
+ // Same `surface` vocabulary as PatientSummaryCard / ContactProfileCard.
45
+ // Both surfaces keep the Card chrome — `flat` only drops the shadow.
46
+ surface: {
47
+ flat: "",
48
+ elevated: ""
49
+ },
50
+ density: {
51
+ comfortable: "",
52
+ compact: ""
53
+ }
54
+ },
55
+ defaultVariants: {
56
+ surface: "elevated",
57
+ density: "comfortable"
58
+ }
59
+ }), ce = h("ds:flex ds:flex-col", {
60
+ variants: {
61
+ density: {
62
+ comfortable: "ds:gap-[var(--spacing-lg)]",
63
+ compact: "ds:gap-[var(--spacing-md)]"
64
+ }
65
+ },
66
+ defaultVariants: { density: "comfortable" }
67
+ }), me = h("", {
68
+ variants: {
69
+ density: {
70
+ comfortable: "",
71
+ compact: "ds:p-[var(--spacing-sm)] ds:pb-0"
72
+ }
73
+ },
74
+ defaultVariants: { density: "comfortable" }
75
+ }), ue = h("", {
76
+ variants: {
77
+ density: {
78
+ comfortable: "",
79
+ compact: "ds:p-[var(--spacing-sm)]"
80
+ }
81
+ },
82
+ defaultVariants: { density: "comfortable" }
83
+ }), he = h("", {
84
+ variants: {
85
+ density: {
86
+ comfortable: "",
87
+ compact: "ds:p-[var(--spacing-sm)] ds:pt-0"
88
+ }
89
+ },
90
+ defaultVariants: { density: "comfortable" }
91
+ }), pe = /^(\d{4})-(\d{2})-(\d{2})$/, ge = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2}))?$/, fe = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/;
92
+ function ve(r) {
93
+ const l = pe.exec(r);
94
+ if (l)
95
+ return {
96
+ date: new Date(Number(l[1]), Number(l[2]) - 1, Number(l[3])),
97
+ hasTime: !1
98
+ };
99
+ const t = ge.exec(r);
100
+ if (t)
101
+ return {
102
+ date: new Date(
103
+ Number(t[1]),
104
+ Number(t[2]) - 1,
105
+ Number(t[3]),
106
+ Number(t[4]),
107
+ Number(t[5]),
108
+ t[6] ? Number(t[6]) : 0
109
+ ),
110
+ hasTime: !0
111
+ };
112
+ const d = new Date(r);
113
+ return Number.isNaN(d.getTime()) ? null : { date: d, hasTime: fe.test(r) };
114
+ }
115
+ function B(r, l) {
116
+ const t = ve(r);
117
+ if (!t) return null;
118
+ const d = t.hasTime ? { dateStyle: "medium", timeStyle: "short" } : { dateStyle: "medium" };
119
+ try {
120
+ return new Intl.DateTimeFormat(l, d).format(t.date);
121
+ } catch {
122
+ return new Intl.DateTimeFormat(void 0, d).format(t.date);
123
+ }
124
+ }
125
+ const be = "ds:rounded-[var(--radius-md)] ds:bg-[color:color-mix(in_srgb,var(--accent)_6%,transparent)] ds:px-[var(--spacing-xs)] ds:-mx-[var(--spacing-xs)]", ye = 'ds:relative ds:inline-flex ds:appearance-none ds:border-0 ds:bg-transparent ds:p-0 ds:m-0 ds:cursor-default ds:rounded-[var(--radius-full)] ds:before:absolute ds:before:content-[""] ds:before:inset-x-[calc((var(--min-target-size)-100%)/-2)] ds:before:inset-y-[calc((var(--min-target-size)-100%)/-2)] ds:sm:before:inset-x-[calc((var(--spacing-lg)-100%)/-2)] ds:sm:before:inset-y-[calc((var(--spacing-lg)-100%)/-2)] ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-[var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:forced-colors:focus-visible:outline-[CanvasText]', v = "type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]", xe = ae(
126
+ ({
127
+ sections: r,
128
+ title: l,
129
+ subtitle: t,
130
+ unansweredCount: d = 0,
131
+ locale: O,
132
+ highlightedFirst: y = !0,
133
+ highlightedGroup: R = !0,
134
+ surface: x = "elevated",
135
+ density: o = "comfortable",
136
+ loading: p = !1,
137
+ actionSlot: N,
138
+ id: u,
139
+ className: K,
140
+ "aria-label": M,
141
+ ...z
142
+ }, G) => {
143
+ const { t: i, i18n: $ } = re(), j = se(), C = O ?? $.language ?? "en", m = I(
144
+ () => r.filter((e) => e.answers.length > 0).map((e) => ({
145
+ ...e,
146
+ answers: y ? [...e.answers].sort(
147
+ (s, c) => +!!c.highlighted - +!!s.highlighted
148
+ ) : e.answers
149
+ })),
150
+ [r, y]
151
+ ), S = m.reduce(
152
+ (e, s) => e + s.answers.length,
153
+ 0
154
+ ), g = m.reduce(
155
+ (e, s) => e + s.answers.filter((c) => c.highlighted).length,
156
+ 0
157
+ ), T = m.length, A = m.flatMap(
158
+ (e) => e.answers.filter((s) => s.highlighted)
159
+ ), V = (e) => {
160
+ const s = e.reportedAtIso ? B(e.reportedAtIso, C) : null, c = [e.sourceLabel, s].filter(
161
+ (ee) => !!ee
162
+ );
163
+ return c.length > 0 ? c.join(" · ") : null;
164
+ }, b = I(
165
+ () => ({
166
+ getSummary: () => ({
167
+ id: u,
168
+ sectionCount: T,
169
+ answerCount: S,
170
+ highlightedCount: g,
171
+ unansweredCount: d
172
+ })
173
+ }),
174
+ [u, T, S, g, d]
175
+ );
176
+ te(G, () => b, [b]), ie(le, b, u);
177
+ const F = i("anamnesisSummaryCard.regionLabel", {
178
+ defaultValue: "Anamnesis summary"
179
+ }), L = l ?? F, q = M ?? L, _ = i("anamnesisSummaryCard.highlighted", {
180
+ defaultValue: "Highlighted"
181
+ }), U = o === "comfortable" ? "type-title-card" : "type-title-item", w = o === "comfortable" ? "md" : "sm", W = (e) => {
182
+ const s = e.reportedAtIso ? B(e.reportedAtIso, C) : null, c = s && e.sourceLabel ? i("anamnesisSummaryCard.reportedOnFrom", {
183
+ date: s,
184
+ source: e.sourceLabel,
185
+ defaultValue: "Highlighted on {{date}} · {{source}}"
186
+ }) : s ? i("anamnesisSummaryCard.reportedOn", {
187
+ date: s,
188
+ defaultValue: "Highlighted on {{date}}"
189
+ }) : _;
190
+ return /* @__PURE__ */ a(ne, { label: c, side: "top", children: /* @__PURE__ */ a(
191
+ "button",
192
+ {
193
+ type: "button",
194
+ className: ye,
195
+ "data-highlighted-chip": "",
196
+ children: /* @__PURE__ */ a(
197
+ H,
198
+ {
199
+ variant: "accentSoft",
200
+ size: "sm",
201
+ leading: /* @__PURE__ */ a(k, { "aria-hidden": "true" }),
202
+ children: _
203
+ }
204
+ )
205
+ }
206
+ ) });
207
+ }, Y = /* @__PURE__ */ n("div", { className: "ds:flex ds:flex-wrap ds:items-start ds:gap-[var(--spacing-sm)]", children: [
208
+ /* @__PURE__ */ n("div", { className: "ds:flex ds:min-w-0 ds:flex-1 ds:flex-col ds:gap-[var(--spacing-2xs)]", children: [
209
+ /* @__PURE__ */ a(
210
+ "h3",
211
+ {
212
+ id: j,
213
+ className: `ds:m-0 ${U} ds:text-[color:var(--foreground)]`,
214
+ children: L
215
+ }
216
+ ),
217
+ t ? /* @__PURE__ */ a("p", { className: v, children: t }) : null
218
+ ] }),
219
+ !p && g > 0 ? /* @__PURE__ */ a(
220
+ H,
221
+ {
222
+ variant: "accentSoft",
223
+ size: "sm",
224
+ leading: /* @__PURE__ */ a(k, { "aria-hidden": "true" }),
225
+ className: "ds:shrink-0",
226
+ children: i("anamnesisSummaryCard.highlightedCount", {
227
+ count: g,
228
+ defaultValue: "{{count}} highlighted"
229
+ })
230
+ }
231
+ ) : null,
232
+ N ? /* @__PURE__ */ a("div", { className: "ds:ms-auto ds:flex ds:shrink-0 ds:items-center ds:gap-[var(--spacing-xs)]", children: N }) : null
233
+ ] }), J = /* @__PURE__ */ n("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", children: [
234
+ /* @__PURE__ */ a(P, { variant: "text", width: "40%" }),
235
+ /* @__PURE__ */ a(P, { variant: "text", lines: 4 })
236
+ ] }), Q = /* @__PURE__ */ a("p", { className: v, children: i("anamnesisSummaryCard.empty", {
237
+ defaultValue: "No answers recorded yet"
238
+ }) }), X = /* @__PURE__ */ n(
239
+ "div",
240
+ {
241
+ role: "group",
242
+ "aria-label": i("anamnesisSummaryCard.sectionsLabel", {
243
+ defaultValue: "Anamnesis sections"
244
+ }),
245
+ className: ce({ density: o }),
246
+ children: [
247
+ R && A.length > 0 ? /* @__PURE__ */ n(
248
+ "div",
249
+ {
250
+ "data-highlighted-group": "",
251
+ className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]",
252
+ children: [
253
+ /* @__PURE__ */ a("h4", { className: "ds:m-0 type-eyebrow ds:text-[color:var(--muted-foreground)]", children: i("anamnesisSummaryCard.highlightedGroup", {
254
+ defaultValue: "Highlighted answers"
255
+ }) }),
256
+ /* @__PURE__ */ a("div", { className: "ds:@container/afields", children: /* @__PURE__ */ a(
257
+ E,
258
+ {
259
+ rowGap: w,
260
+ className: "ds:@[672px]/afields:grid-cols-[repeat(2,auto_auto_minmax(0,1fr))]",
261
+ children: A.map((e) => /* @__PURE__ */ a(
262
+ D,
263
+ {
264
+ "data-answer-id": e.id,
265
+ label: e.label,
266
+ value: /* @__PURE__ */ n("span", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]", children: [
267
+ /* @__PURE__ */ n("span", { className: "ds:inline-flex ds:flex-wrap ds:items-center ds:gap-x-[var(--spacing-xs)]", children: [
268
+ /* @__PURE__ */ a("span", { children: e.value }),
269
+ e.unit ? /* @__PURE__ */ a("span", { className: "type-body-sm ds:text-[color:var(--muted-foreground)]", children: e.unit }) : null
270
+ ] }),
271
+ V(e) ? /* @__PURE__ */ a("span", { className: v, children: V(e) }) : null
272
+ ] })
273
+ },
274
+ `highlighted-${e.id}`
275
+ ))
276
+ }
277
+ ) })
278
+ ]
279
+ }
280
+ ) : null,
281
+ m.map((e) => /* @__PURE__ */ n(
282
+ "div",
283
+ {
284
+ "data-section-id": e.id,
285
+ className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]",
286
+ children: [
287
+ /* @__PURE__ */ a("h4", { className: "ds:m-0 type-eyebrow ds:text-[color:var(--muted-foreground)]", children: e.heading }),
288
+ /* @__PURE__ */ a("div", { className: "ds:@container/afields", children: /* @__PURE__ */ a(
289
+ E,
290
+ {
291
+ rowGap: w,
292
+ className: "ds:@[672px]/afields:grid-cols-[repeat(2,auto_auto_minmax(0,1fr))]",
293
+ children: e.answers.map((s) => /* @__PURE__ */ a(
294
+ D,
295
+ {
296
+ "data-answer-id": s.id,
297
+ "data-highlighted": s.highlighted ? "" : void 0,
298
+ label: s.label,
299
+ className: s.highlighted ? be : void 0,
300
+ value: /* @__PURE__ */ n("span", { className: "ds:inline-flex ds:flex-wrap ds:items-center ds:gap-x-[var(--spacing-xs)] ds:gap-y-[var(--spacing-2xs)]", children: [
301
+ /* @__PURE__ */ a("span", { children: s.value }),
302
+ s.unit ? /* @__PURE__ */ a("span", { className: "type-body-sm ds:text-[color:var(--muted-foreground)]", children: s.unit }) : null,
303
+ s.highlighted ? W(s) : null
304
+ ] })
305
+ },
306
+ s.id
307
+ ))
308
+ }
309
+ ) })
310
+ ]
311
+ },
312
+ e.id
313
+ ))
314
+ ]
315
+ }
316
+ ), Z = p ? J : m.length === 0 ? Q : X;
317
+ return /* @__PURE__ */ a(
318
+ "div",
319
+ {
320
+ role: "region",
321
+ "aria-label": q,
322
+ "aria-busy": p || void 0,
323
+ "data-component": "anamnesis-summary-card",
324
+ "data-component-id": u,
325
+ "data-density": o,
326
+ id: u,
327
+ className: oe({ surface: x, density: o, className: K }),
328
+ ...z,
329
+ children: /* @__PURE__ */ n(f, { variant: x === "flat" ? "outlined" : "elevated", children: [
330
+ /* @__PURE__ */ a(f.Header, { className: me({ density: o }), children: Y }),
331
+ /* @__PURE__ */ a(de, { children: /* @__PURE__ */ a(f.Body, { className: ue({ density: o }), children: Z }) }),
332
+ !p && d > 0 ? /* @__PURE__ */ a(f.Footer, { className: he({ density: o }), children: /* @__PURE__ */ a("p", { className: v, children: i("anamnesisSummaryCard.unanswered", {
333
+ count: d,
334
+ defaultValue: "{{count}} questions not answered"
335
+ }) }) }) : null
336
+ ] })
337
+ }
338
+ );
339
+ }
340
+ );
341
+ xe.displayName = "AnamnesisSummaryCard";
342
+ export {
343
+ xe as A,
344
+ le as a
345
+ };
346
+ //# sourceMappingURL=anamnesis-summary-card-FNSkuUMB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anamnesis-summary-card-FNSkuUMB.js","sources":["../../src/components/anamnesis-summary-card/anamnesis-summary-card.agent.ts","../../src/components/anamnesis-summary-card/anamnesis-summary-card.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { AnamnesisSummaryCardHandle } from './anamnesis-summary-card';\n\n/* -------------------------------------------------------------------- */\n/* Agent adapter — AnamnesisSummaryCard */\n/* */\n/* Read-only adapter. Surfaces a STRUCTURAL snapshot of the anamnesis */\n/* summary — section / answer / highlighted / unanswered counts and the */\n/* consumer id only. Never a question label or an answer value, so an */\n/* agent can answer \"does this patient have highlighted answers?\" without */\n/* re-parsing the DOM and without leaking PHI (PRS §Security). */\n/* -------------------------------------------------------------------- */\n\nexport const anamnesisSummaryCardAgent: AgentAdapter<AnamnesisSummaryCardHandle> =\n {\n id: 'anamnesis-summary-card',\n // The card is read-only: the only handle method is a getSummary\n // projection, so there is no capability to declare.\n capabilities: [],\n state: {\n summary: {\n type: '{ id?: string; sectionCount: number; answerCount: number; highlightedCount: number; unansweredCount: number }',\n descriptionKey: 'ui.agent.anamnesisSummaryCard.state.summary',\n description:\n 'Structural summary of the anamnesis card — section, answer, highlighted and unanswered counts plus the consumer id. Never question labels or answer values.',\n read: (handle) => handle.getSummary(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'anamnesis-summary-card',\n description: 'Marks the AnamnesisSummaryCard root region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-answer-id',\n description:\n 'One per answer row (KeyValuePair); the value is the intake field key. Highlighted rows also carry data-highlighted.',\n },\n },\n };\n","import {\n forwardRef,\n useId,\n useImperativeHandle,\n useMemo,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { HeartPulse } from 'lucide-react';\nimport { Badge } from '../badge/badge';\nimport { Card } from '../card/card';\nimport { KeyValueList, KeyValuePair } from '../key-value-pair/key-value-pair';\nimport { Skeleton } from '../skeleton/skeleton';\nimport { Tooltip, TooltipProvider } from '../tooltip/tooltip';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { anamnesisSummaryCardAgent } from './anamnesis-summary-card.agent';\n\n/* -------------------------------------------------------------------- */\n/* AnamnesisSummaryCard */\n/* */\n/* A read-only summary of a patient's anamnesis answers: every answered */\n/* question as a label/value row, grouped by section, two columns when */\n/* the card is wide. Practice-flagged (\"highlighted\") answers carry an */\n/* accent rail plus a HeartPulse chip whose tooltip says WHEN the answer */\n/* was recorded (and from which module when the card combines several). */\n/* */\n/* Templated on PatientSummaryCard: the consumer passes rows, the kit */\n/* owns layout, icons, i18n, and a11y. Used by the platform both for the */\n/* Overview tab (one card combining each module's latest interview) and */\n/* under the archive table (one card per interview). */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* CVA */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva('ds:w-full ds:text-[color:var(--foreground)]', {\n variants: {\n // Same `surface` vocabulary as PatientSummaryCard / ContactProfileCard.\n // Both surfaces keep the Card chrome — `flat` only drops the shadow.\n surface: {\n flat: '',\n elevated: '',\n },\n density: {\n comfortable: '',\n compact: '',\n },\n },\n defaultVariants: {\n surface: 'elevated',\n density: 'comfortable',\n },\n});\n\n/** Stack of sections inside the body — the density tunes the section gap. */\nconst sectionsVariants = cva('ds:flex ds:flex-col', {\n variants: {\n density: {\n comfortable: 'ds:gap-[var(--spacing-lg)]',\n compact: 'ds:gap-[var(--spacing-md)]',\n },\n },\n defaultVariants: { density: 'comfortable' },\n});\n\n/** Card padding per density — overrides Card.Header / Body / Footer defaults. */\nconst headerPaddingVariants = cva('', {\n variants: {\n density: {\n comfortable: '',\n compact: 'ds:p-[var(--spacing-sm)] ds:pb-0',\n },\n },\n defaultVariants: { density: 'comfortable' },\n});\n\nconst bodyPaddingVariants = cva('', {\n variants: {\n density: {\n comfortable: '',\n compact: 'ds:p-[var(--spacing-sm)]',\n },\n },\n defaultVariants: { density: 'comfortable' },\n});\n\nconst footerPaddingVariants = cva('', {\n variants: {\n density: {\n comfortable: '',\n compact: 'ds:p-[var(--spacing-sm)] ds:pt-0',\n },\n },\n defaultVariants: { density: 'comfortable' },\n});\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\nexport interface AnamnesisSummaryAnswer {\n /** Stable key (the intake field key). */\n id: string;\n /** Question label, already translated by the consumer. */\n label: string;\n /** Formatted answer. Strings preferred; ReactNode allowed. */\n value: ReactNode;\n /** Unit symbol rendered muted after the value (e.g. \"kg\"). */\n unit?: string;\n /** The practice's highlight rule fired for this answer. */\n highlighted?: boolean;\n /**\n * When the answer was recorded — `YYYY-MM-DD`, `YYYY-MM-DDTHH:mm` (LOCAL\n * wall time, no zone) or full ISO-8601. A bare date is never read as UTC.\n */\n reportedAtIso?: string;\n /** Where the answer came from when the card combines modules (module name). */\n sourceLabel?: string;\n}\n\nexport interface AnamnesisSummarySection {\n id: string;\n heading: string;\n answers: AnamnesisSummaryAnswer[];\n}\n\nexport interface AnamnesisSummaryCardHandle {\n /** Structural snapshot only — counts, never labels or values. */\n getSummary: () => {\n id?: string;\n sectionCount: number;\n answerCount: number;\n highlightedCount: number;\n unansweredCount: number;\n };\n}\n\nexport interface AnamnesisSummaryCardProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title'\n> {\n sections: AnamnesisSummarySection[];\n /** Card title (e.g. the module name). Falls back to the \"Anamnesis summary\" region label. */\n title?: string;\n /** Muted line under the title (e.g. the interview date-time, already formatted). */\n subtitle?: string;\n /** Questions the consumer omitted because they were unanswered — one muted footer line when > 0. */\n unansweredCount?: number;\n /** BCP-47 tag for the tooltip date; defaults to the active i18next language. */\n locale?: string;\n /** Highlighted answers sort to the top of their section. Default `true`. */\n highlightedFirst?: boolean;\n /**\n * Open the card with a \"Highlighted answers\" group collecting every\n * flagged answer, each with where and when it was recorded, before the\n * sections. Default `true`; absent when nothing is flagged.\n */\n highlightedGroup?: boolean;\n /** `'elevated'` (default) — Card with shadow; `'flat'` — outlined Card. */\n surface?: 'flat' | 'elevated';\n /** `'comfortable'` (default) or `'compact'` (tighter row gap + paddings). */\n density?: 'comfortable' | 'compact';\n /** Render the skeleton loading placeholder. */\n loading?: boolean;\n /** Rendered at the inline-end of the heading row (e.g. an action menu). */\n actionSlot?: ReactNode;\n /** Agent-readiness consumer id, surfaced as `data-component-id`. */\n id?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Date helpers */\n/* -------------------------------------------------------------------- */\n\nconst DATE_ONLY_RE = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst LOCAL_DATETIME_RE =\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2}))?$/;\nconst CLOCK_TIME_RE = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}/;\n\n/**\n * Parse a stored stamp by fields when it carries no zone, so `2026-03-01`\n * stays 1 March in every viewer zone (`new Date('2026-03-01')` would read\n * it as UTC midnight and print 29 February west of Greenwich).\n */\nfunction parseReportedAt(iso: string): { date: Date; hasTime: boolean } | null {\n const day = DATE_ONLY_RE.exec(iso);\n if (day) {\n return {\n date: new Date(Number(day[1]), Number(day[2]) - 1, Number(day[3])),\n hasTime: false,\n };\n }\n const local = LOCAL_DATETIME_RE.exec(iso);\n if (local) {\n return {\n date: new Date(\n Number(local[1]),\n Number(local[2]) - 1,\n Number(local[3]),\n Number(local[4]),\n Number(local[5]),\n local[6] ? Number(local[6]) : 0,\n ),\n hasTime: true,\n };\n }\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) return null;\n return { date, hasTime: CLOCK_TIME_RE.test(iso) };\n}\n\nfunction formatReportedAt(iso: string, locale: string): string | null {\n const parsed = parseReportedAt(iso);\n if (!parsed) return null;\n const options: Intl.DateTimeFormatOptions = parsed.hasTime\n ? { dateStyle: 'medium', timeStyle: 'short' }\n : { dateStyle: 'medium' };\n try {\n return new Intl.DateTimeFormat(locale, options).format(parsed.date);\n } catch {\n // An unknown BCP-47 tag throws — fall back to the runtime default locale.\n return new Intl.DateTimeFormat(undefined, options).format(parsed.date);\n }\n}\n\n/* -------------------------------------------------------------------- */\n/* Styling fragments */\n/* -------------------------------------------------------------------- */\n\n/** Soft accent wash on rounded corners — no rail: a bar on one side read\n * as an edge, not a mark. The padding is paid back with a negative margin\n * so the row's label and value stay on the grid's tracks. */\nconst HIGHLIGHTED_ROW_CLASS =\n 'ds:rounded-[var(--radius-md)] ds:bg-[color:color-mix(in_srgb,var(--accent)_6%,transparent)] ds:px-[var(--spacing-xs)] ds:-mx-[var(--spacing-xs)]';\n\n/** Bare button carrying the chip — it exists only to give the tooltip a\n * keyboard-focusable trigger, so it inherits the chip's pill outline.\n * The 16px chip sits below `--min-target-size`, so the same `::before`\n * hit-area recipe as InfoTip `size=\"sm\"` expands the target: the full\n * 44/48px on touch, relaxing to the `--spacing-lg` 24px floor from `sm:` up. */\nconst CHIP_BUTTON_CLASS =\n 'ds:relative ds:inline-flex ds:appearance-none ds:border-0 ds:bg-transparent ds:p-0 ds:m-0 ds:cursor-default ds:rounded-[var(--radius-full)] ds:before:absolute ds:before:content-[\"\"] ds:before:inset-x-[calc((var(--min-target-size)-100%)/-2)] ds:before:inset-y-[calc((var(--min-target-size)-100%)/-2)] ds:sm:before:inset-x-[calc((var(--spacing-lg)-100%)/-2)] ds:sm:before:inset-y-[calc((var(--spacing-lg)-100%)/-2)] ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-[var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:forced-colors:focus-visible:outline-[CanvasText]';\n\nconst MUTED_LINE_CLASS =\n 'type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]';\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const AnamnesisSummaryCard = forwardRef<\n AnamnesisSummaryCardHandle,\n AnamnesisSummaryCardProps\n>(\n (\n {\n sections,\n title,\n subtitle,\n unansweredCount = 0,\n locale,\n highlightedFirst = true,\n highlightedGroup = true,\n surface = 'elevated',\n density = 'comfortable',\n loading = false,\n actionSlot,\n id,\n className,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const headingId = useId();\n const activeLocale = locale ?? i18n.language ?? 'en';\n\n // Drop empty sections and apply the highlighted-first order once per\n // input change; `sort` is stable so unhighlighted rows keep their order.\n const visibleSections = useMemo(\n () =>\n sections\n .filter((section) => section.answers.length > 0)\n .map((section) => ({\n ...section,\n answers: highlightedFirst\n ? [...section.answers].sort(\n (a, b) => Number(!!b.highlighted) - Number(!!a.highlighted),\n )\n : section.answers,\n })),\n [sections, highlightedFirst],\n );\n\n const answerCount = visibleSections.reduce(\n (sum, section) => sum + section.answers.length,\n 0,\n );\n const highlightedCount = visibleSections.reduce(\n (sum, section) =>\n sum + section.answers.filter((answer) => answer.highlighted).length,\n 0,\n );\n const sectionCount = visibleSections.length;\n // Every flagged answer in section order, for the opening group.\n const highlightedAnswers = visibleSections.flatMap((section) =>\n section.answers.filter((answer) => answer.highlighted),\n );\n const recordedLine = (answer: AnamnesisSummaryAnswer): string | null => {\n const date = answer.reportedAtIso\n ? formatReportedAt(answer.reportedAtIso, activeLocale)\n : null;\n const parts = [answer.sourceLabel, date].filter((part): part is string =>\n Boolean(part),\n );\n return parts.length > 0 ? parts.join(' · ') : null;\n };\n\n // Imperative handle — structural snapshot only (counts + consumer id),\n // never a question label or an answer value.\n const handle = useMemo<AnamnesisSummaryCardHandle>(\n () => ({\n getSummary: () => ({\n id,\n sectionCount,\n answerCount,\n highlightedCount,\n unansweredCount,\n }),\n }),\n [id, sectionCount, answerCount, highlightedCount, unansweredCount],\n );\n useImperativeHandle(ref, () => handle, [handle]);\n useAgentRegistration(anamnesisSummaryCardAgent, handle, id);\n\n const regionLabel = t('anamnesisSummaryCard.regionLabel', {\n defaultValue: 'Anamnesis summary',\n });\n const resolvedTitle = title ?? regionLabel;\n const resolvedAriaLabel = ariaLabel ?? resolvedTitle;\n const highlightedText = t('anamnesisSummaryCard.highlighted', {\n defaultValue: 'Highlighted',\n });\n\n const titleClass =\n density === 'comfortable' ? 'type-title-card' : 'type-title-item';\n const rowGap = density === 'comfortable' ? 'md' : 'sm';\n\n /* ---------------------------------------------------------------- */\n /* Highlight chip */\n /* ---------------------------------------------------------------- */\n\n const renderChip = (answer: AnamnesisSummaryAnswer) => {\n const date = answer.reportedAtIso\n ? formatReportedAt(answer.reportedAtIso, activeLocale)\n : null;\n const tooltipLabel =\n date && answer.sourceLabel\n ? t('anamnesisSummaryCard.reportedOnFrom', {\n date,\n source: answer.sourceLabel,\n defaultValue: 'Highlighted on {{date}} · {{source}}',\n })\n : date\n ? t('anamnesisSummaryCard.reportedOn', {\n date,\n defaultValue: 'Highlighted on {{date}}',\n })\n : highlightedText;\n return (\n <Tooltip label={tooltipLabel} side=\"top\">\n <button\n type=\"button\"\n className={CHIP_BUTTON_CLASS}\n data-highlighted-chip=\"\"\n >\n <Badge\n variant=\"accentSoft\"\n size=\"sm\"\n leading={<HeartPulse aria-hidden=\"true\" />}\n >\n {highlightedText}\n </Badge>\n </button>\n </Tooltip>\n );\n };\n\n /* ---------------------------------------------------------------- */\n /* Header */\n /* ---------------------------------------------------------------- */\n\n const header = (\n <div className=\"ds:flex ds:flex-wrap ds:items-start ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:min-w-0 ds:flex-1 ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <h3\n id={headingId}\n className={`ds:m-0 ${titleClass} ds:text-[color:var(--foreground)]`}\n >\n {resolvedTitle}\n </h3>\n {subtitle ? <p className={MUTED_LINE_CLASS}>{subtitle}</p> : null}\n </div>\n {!loading && highlightedCount > 0 ? (\n <Badge\n variant=\"accentSoft\"\n size=\"sm\"\n leading={<HeartPulse aria-hidden=\"true\" />}\n className=\"ds:shrink-0\"\n >\n {t('anamnesisSummaryCard.highlightedCount', {\n count: highlightedCount,\n defaultValue: '{{count}} highlighted',\n })}\n </Badge>\n ) : null}\n {actionSlot ? (\n <div className=\"ds:ms-auto ds:flex ds:shrink-0 ds:items-center ds:gap-[var(--spacing-xs)]\">\n {actionSlot}\n </div>\n ) : null}\n </div>\n );\n\n /* ---------------------------------------------------------------- */\n /* Body */\n /* ---------------------------------------------------------------- */\n\n const skeletonBody = (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <Skeleton variant=\"text\" width=\"40%\" />\n <Skeleton variant=\"text\" lines={4} />\n </div>\n );\n\n const emptyBody = (\n <p className={MUTED_LINE_CLASS}>\n {t('anamnesisSummaryCard.empty', {\n defaultValue: 'No answers recorded yet',\n })}\n </p>\n );\n\n const sectionsBody = (\n <div\n role=\"group\"\n aria-label={t('anamnesisSummaryCard.sectionsLabel', {\n defaultValue: 'Anamnesis sections',\n })}\n className={sectionsVariants({ density })}\n >\n {/* Plain <div>, deliberately not a named <section>: a named\n <section> is a `region` landmark, and one per anamnesis section\n per card would drown the page-level landmarks. The <h4> already\n gives heading navigation into each section. */}\n {highlightedGroup && highlightedAnswers.length > 0 ? (\n <div\n data-highlighted-group=\"\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n <h4 className=\"ds:m-0 type-eyebrow ds:text-[color:var(--muted-foreground)]\">\n {t('anamnesisSummaryCard.highlightedGroup', {\n defaultValue: 'Highlighted answers',\n })}\n </h4>\n <div className=\"ds:@container/afields\">\n <KeyValueList\n rowGap={rowGap}\n className=\"ds:@[672px]/afields:grid-cols-[repeat(2,auto_auto_minmax(0,1fr))]\"\n >\n {highlightedAnswers.map((answer) => (\n <KeyValuePair\n key={`highlighted-${answer.id}`}\n data-answer-id={answer.id}\n label={answer.label}\n value={\n <span className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <span className=\"ds:inline-flex ds:flex-wrap ds:items-center ds:gap-x-[var(--spacing-xs)]\">\n <span>{answer.value}</span>\n {answer.unit ? (\n <span className=\"type-body-sm ds:text-[color:var(--muted-foreground)]\">\n {answer.unit}\n </span>\n ) : null}\n </span>\n {/* Where and when it was recorded, in the open — the\n chip's tooltip says the same in the sections. */}\n {recordedLine(answer) ? (\n <span className={MUTED_LINE_CLASS}>\n {recordedLine(answer)}\n </span>\n ) : null}\n </span>\n }\n />\n ))}\n </KeyValueList>\n </div>\n </div>\n ) : null}\n {visibleSections.map((section) => (\n <div\n key={section.id}\n data-section-id={section.id}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n <h4 className=\"ds:m-0 type-eyebrow ds:text-[color:var(--muted-foreground)]\">\n {section.heading}\n </h4>\n {/* Container-queried so the rows flow into two columns when the\n card is wide enough and stay single-column in a narrow rail —\n the same six-track grid PatientSummaryCard uses, so both cards\n break at the same 672px (px, not rem: container-query rem\n follows the host root font-size). */}\n <div className=\"ds:@container/afields\">\n <KeyValueList\n rowGap={rowGap}\n className=\"ds:@[672px]/afields:grid-cols-[repeat(2,auto_auto_minmax(0,1fr))]\"\n >\n {section.answers.map((answer) => (\n <KeyValuePair\n key={answer.id}\n data-answer-id={answer.id}\n data-highlighted={answer.highlighted ? '' : undefined}\n label={answer.label}\n className={\n answer.highlighted ? HIGHLIGHTED_ROW_CLASS : undefined\n }\n value={\n <span className=\"ds:inline-flex ds:flex-wrap ds:items-center ds:gap-x-[var(--spacing-xs)] ds:gap-y-[var(--spacing-2xs)]\">\n <span>{answer.value}</span>\n {answer.unit ? (\n <span className=\"type-body-sm ds:text-[color:var(--muted-foreground)]\">\n {answer.unit}\n </span>\n ) : null}\n {answer.highlighted ? renderChip(answer) : null}\n </span>\n }\n />\n ))}\n </KeyValueList>\n </div>\n </div>\n ))}\n </div>\n );\n\n const body = loading\n ? skeletonBody\n : visibleSections.length === 0\n ? emptyBody\n : sectionsBody;\n\n return (\n <div\n role=\"region\"\n aria-label={resolvedAriaLabel}\n aria-busy={loading || undefined}\n data-component=\"anamnesis-summary-card\"\n data-component-id={id}\n data-density={density}\n id={id}\n className={rootVariants({ surface, density, className })}\n {...rest}\n >\n <Card variant={surface === 'flat' ? 'outlined' : 'elevated'}>\n <Card.Header className={headerPaddingVariants({ density })}>\n {header}\n </Card.Header>\n {/* Own TooltipProvider so a host without one still gets the chip\n tooltips; Radix providers compose, so a host-level one also works. */}\n <TooltipProvider>\n <Card.Body className={bodyPaddingVariants({ density })}>\n {body}\n </Card.Body>\n </TooltipProvider>\n {!loading && unansweredCount > 0 ? (\n <Card.Footer className={footerPaddingVariants({ density })}>\n <p className={MUTED_LINE_CLASS}>\n {t('anamnesisSummaryCard.unanswered', {\n count: unansweredCount,\n defaultValue: '{{count}} questions not answered',\n })}\n </p>\n </Card.Footer>\n ) : null}\n </Card>\n </div>\n );\n },\n);\n\nAnamnesisSummaryCard.displayName = 'AnamnesisSummaryCard';\n\n/** Variant unions re-exported for downstream typing. */\nexport type AnamnesisSummaryCardSurface = NonNullable<\n VariantProps<typeof rootVariants>['surface']\n>;\nexport type AnamnesisSummaryCardDensity = NonNullable<\n VariantProps<typeof rootVariants>['density']\n>;\n"],"names":["anamnesisSummaryCardAgent","handle","rootVariants","cva","sectionsVariants","headerPaddingVariants","bodyPaddingVariants","footerPaddingVariants","DATE_ONLY_RE","LOCAL_DATETIME_RE","CLOCK_TIME_RE","parseReportedAt","iso","day","local","date","formatReportedAt","locale","parsed","options","HIGHLIGHTED_ROW_CLASS","CHIP_BUTTON_CLASS","MUTED_LINE_CLASS","AnamnesisSummaryCard","forwardRef","sections","title","subtitle","unansweredCount","highlightedFirst","highlightedGroup","surface","density","loading","actionSlot","id","className","ariaLabel","rest","ref","t","i18n","useTranslation","headingId","useId","activeLocale","visibleSections","useMemo","section","a","b","answerCount","sum","highlightedCount","answer","sectionCount","highlightedAnswers","recordedLine","parts","part","useImperativeHandle","useAgentRegistration","regionLabel","resolvedTitle","resolvedAriaLabel","highlightedText","titleClass","rowGap","renderChip","tooltipLabel","jsx","Tooltip","Badge","HeartPulse","header","jsxs","skeletonBody","Skeleton","emptyBody","sectionsBody","KeyValueList","KeyValuePair","body","Card","TooltipProvider"],"mappings":"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"}