@alfadocs/ui-kit 1.44.0 → 1.46.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 (156) hide show
  1. package/dist/_chunks/{actions-cell-renderer-BXBy9c0f.js → actions-cell-renderer-B5m9lwgC.js} +2 -2
  2. package/dist/_chunks/ai-credits-notice-xszqOZTC.js +90 -0
  3. package/dist/_chunks/ai-credits-notice.agent-C9L7orrP.js +17 -0
  4. package/dist/_chunks/{ai-consent-banner-D7I2U-cz.js → ai-permission-notice-D7I2U-cz.js} +1 -1
  5. package/dist/_chunks/ai-sparkle-D23NT8Z_.js +45 -0
  6. package/dist/_chunks/{anamnesis-summary-rows-DQUqwWc1.js → anamnesis-summary-rows-DI-UX5r6.js} +2 -2
  7. package/dist/_chunks/{appointment-card-TgR_2GKS.js → appointment-card-DluZy8Iv.js} +2 -2
  8. package/dist/_chunks/{appointment-peek-abiR0T9e.js → appointment-peek-BsfCpiJs.js} +3 -3
  9. package/dist/_chunks/{appointment-timeline-CCnyUYKz.js → appointment-timeline-Cs5f9viN.js} +3 -3
  10. package/dist/_chunks/{appointment-tray-N0yEI8UF.js → appointment-tray-CLrGGnKR.js} +2 -2
  11. package/dist/_chunks/baby-Dku-Xvg9.js +23 -0
  12. package/dist/_chunks/{balance-badge-cell-o6LldMUA.js → balance-badge-cell-YGrYdrvR.js} +3 -3
  13. package/dist/_chunks/{booking-D43ASl8y.js → booking-B7gA9gFB.js} +279 -296
  14. package/dist/_chunks/button-group-CA1tmu39.js +325 -0
  15. package/dist/_chunks/{calendar-U6N0F99w.js → calendar-OzSeTb4V.js} +2 -2
  16. package/dist/_chunks/{calendar-event-card-DKUnT9Be.js → calendar-event-card-B6N5h1dO.js} +57 -48
  17. package/dist/_chunks/{calendar-workspace-DBYAtdyd.js → calendar-workspace-BB-BZT7W.js} +3002 -2912
  18. package/dist/_chunks/{chart-PF2krCZC.js → chart-D8ucl8hH.js} +2 -2
  19. package/dist/_chunks/{data-table-CcAx_I1w.js → data-table-DnKOmEVw.js} +2 -2
  20. package/dist/_chunks/{editable-currency-cell-renderer-Psb6XKHR.js → editable-currency-cell-renderer-OUkUv7U4.js} +2 -2
  21. package/dist/_chunks/{face-scheme-Bm6pe7R8.js → face-scheme-mIhwrQXt.js} +3 -3
  22. package/dist/_chunks/{file-manager-BfLQxF5t.js → file-manager-DOcJGIx2.js} +4 -4
  23. package/dist/_chunks/{header-settings-CTe45iDy.js → header-settings-BEfx_-TF.js} +2 -2
  24. package/dist/_chunks/{help-me-write-templates-GUeEn3Ff.js → help-me-write-templates-DHIwa4xR.js} +205 -199
  25. package/dist/_chunks/{hover-card-BMJBVqIf.js → hover-card-nUae8NPJ.js} +67 -62
  26. package/dist/_chunks/{icon-button-group-DkkdIygu.js → icon-button-group-DZKC6KGf.js} +181 -168
  27. package/dist/_chunks/kit-extensions-DuoFF1R3.js +94 -0
  28. package/dist/_chunks/{marketplace-app-shell-DdwPj03y.js → marketplace-app-shell-PB89Dkk_.js} +2 -2
  29. package/dist/_chunks/{notes-panel-CY4KmDo-.js → notes-panel-CHbDDMx8.js} +83 -73
  30. package/dist/_chunks/{patient-details-C8ImUrVg.js → patient-details-DUj1htsH.js} +2 -2
  31. package/dist/_chunks/{patient-field-row-BRSOKvme.js → patient-field-row-CO0WR7yA.js} +2 -2
  32. package/dist/_chunks/{patient-summary-card-BhmKB2KR.js → patient-summary-card-DNzdYjxE.js} +59 -45
  33. package/dist/_chunks/rich-text-editor-BwDV2XkZ.js +4153 -0
  34. package/dist/_chunks/{tasks-panel-CpcikOeY.js → tasks-panel-DncuBPIZ.js} +2 -2
  35. package/dist/_chunks/{theme-toggle-bI0pgDDv.js → theme-toggle-BP0XRGMM.js} +2 -2
  36. package/dist/_chunks/use-ai-sparkle-Cf4yVTLB.js +76 -0
  37. package/dist/_chunks/{workflow-status-xeaJTzD3.js → workflow-status-CuJAOuKL.js} +43 -42
  38. package/dist/agent-catalog.json +32 -4
  39. package/dist/agent-i18n/en.json +1 -1
  40. package/dist/components/ai-credits-notice/ai-credits-notice.agent.d.ts +3 -0
  41. package/dist/components/ai-credits-notice/ai-credits-notice.d.ts +48 -0
  42. package/dist/components/ai-credits-notice/index.d.ts +4 -0
  43. package/dist/components/ai-credits-notice/index.js +7 -0
  44. package/dist/components/{ai-consent-banner/ai-consent-banner.agent.d.ts → ai-permission-notice/ai-permission-notice.agent.d.ts} +2 -2
  45. package/dist/components/{ai-consent-banner/ai-consent-banner.d.ts → ai-permission-notice/ai-permission-notice.d.ts} +1 -1
  46. package/dist/components/ai-permission-notice/index.d.ts +4 -0
  47. package/dist/components/{ai-consent-banner → ai-permission-notice}/index.js +1 -1
  48. package/dist/components/ai-sparkle/ai-sparkle.d.ts +24 -0
  49. package/dist/components/ai-sparkle/index.d.ts +3 -0
  50. package/dist/components/ai-sparkle/index.js +5 -0
  51. package/dist/components/appointment-card/index.js +2 -2
  52. package/dist/components/appointment-peek/index.js +1 -1
  53. package/dist/components/appointment-timeline/index.js +1 -1
  54. package/dist/components/booking/index.js +1 -1
  55. package/dist/components/button-group/index.js +1 -1
  56. package/dist/components/calendar/index.js +1 -1
  57. package/dist/components/calendar-event-card/index.js +1 -1
  58. package/dist/components/chart/index.js +1 -1
  59. package/dist/components/data-table/index.js +3 -3
  60. package/dist/components/face-scheme/index.js +1 -1
  61. package/dist/components/file-manager/index.js +1 -1
  62. package/dist/components/header-settings/index.js +1 -1
  63. package/dist/components/hover-card/hover-card.d.ts +4 -0
  64. package/dist/components/hover-card/index.d.ts +1 -1
  65. package/dist/components/hover-card/index.js +3 -2
  66. package/dist/components/icon-button-group/index.js +1 -1
  67. package/dist/components/index.d.ts +5 -3
  68. package/dist/components/notes-panel/index.js +1 -1
  69. package/dist/components/notes-panel/notes-panel.d.ts +10 -0
  70. package/dist/components/patient-details/index.js +1 -1
  71. package/dist/components/patient-summary-card/index.js +1 -1
  72. package/dist/components/patient-table/index.js +1 -1
  73. package/dist/components/rich-text-editor/editor-extensions.d.ts +54 -0
  74. package/dist/components/rich-text-editor/editor-toolbar.d.ts +2 -1
  75. package/dist/components/rich-text-editor/help-me-write-overlay.d.ts +4 -0
  76. package/dist/components/rich-text-editor/index.d.ts +2 -0
  77. package/dist/components/rich-text-editor/index.js +6 -4
  78. package/dist/components/rich-text-editor/kit-extensions.d.ts +4 -0
  79. package/dist/components/rich-text-editor/rich-text-editor.d.ts +18 -2
  80. package/dist/components/tasks-panel/index.js +1 -1
  81. package/dist/components/theme-toggle/index.js +1 -1
  82. package/dist/components/workflow-status/index.js +1 -1
  83. package/dist/hooks/index.d.ts +1 -0
  84. package/dist/hooks/index.js +54 -48
  85. package/dist/hooks/use-ai-sparkle.d.ts +91 -0
  86. package/dist/host-compat.css +2 -2
  87. package/dist/i18n/locales/ar.d.ts +31 -0
  88. package/dist/i18n/locales/ar.js +33 -2
  89. package/dist/i18n/locales/de.d.ts +31 -0
  90. package/dist/i18n/locales/de.js +33 -2
  91. package/dist/i18n/locales/el.d.ts +31 -0
  92. package/dist/i18n/locales/el.js +33 -2
  93. package/dist/i18n/locales/en.d.ts +31 -0
  94. package/dist/i18n/locales/en.js +33 -2
  95. package/dist/i18n/locales/es.d.ts +31 -0
  96. package/dist/i18n/locales/es.js +33 -2
  97. package/dist/i18n/locales/fr.d.ts +31 -0
  98. package/dist/i18n/locales/fr.js +33 -2
  99. package/dist/i18n/locales/hi.d.ts +31 -0
  100. package/dist/i18n/locales/hi.js +33 -2
  101. package/dist/i18n/locales/it.d.ts +31 -0
  102. package/dist/i18n/locales/it.js +33 -2
  103. package/dist/i18n/locales/ja.d.ts +31 -0
  104. package/dist/i18n/locales/ja.js +33 -2
  105. package/dist/i18n/locales/nl.d.ts +31 -0
  106. package/dist/i18n/locales/nl.js +33 -2
  107. package/dist/i18n/locales/pl.d.ts +31 -0
  108. package/dist/i18n/locales/pl.js +33 -2
  109. package/dist/i18n/locales/pt.d.ts +31 -0
  110. package/dist/i18n/locales/pt.js +33 -2
  111. package/dist/i18n/locales/ro.d.ts +31 -0
  112. package/dist/i18n/locales/ro.js +33 -2
  113. package/dist/i18n/locales/ru.d.ts +31 -0
  114. package/dist/i18n/locales/ru.js +33 -2
  115. package/dist/i18n/locales/sq.d.ts +31 -0
  116. package/dist/i18n/locales/sq.js +33 -2
  117. package/dist/i18n/locales/sv.d.ts +31 -0
  118. package/dist/i18n/locales/sv.js +33 -2
  119. package/dist/i18n/locales/tr.d.ts +31 -0
  120. package/dist/i18n/locales/tr.js +33 -2
  121. package/dist/i18n/locales/zh.d.ts +31 -0
  122. package/dist/i18n/locales/zh.js +33 -2
  123. package/dist/index.js +1113 -1102
  124. package/dist/locales/ar.json +33 -2
  125. package/dist/locales/de.json +33 -2
  126. package/dist/locales/el.json +33 -2
  127. package/dist/locales/en.json +33 -2
  128. package/dist/locales/es.json +33 -2
  129. package/dist/locales/fr.json +33 -2
  130. package/dist/locales/hi.json +33 -2
  131. package/dist/locales/it.json +33 -2
  132. package/dist/locales/ja.json +33 -2
  133. package/dist/locales/nl.json +33 -2
  134. package/dist/locales/pl.json +33 -2
  135. package/dist/locales/pt.json +33 -2
  136. package/dist/locales/ro.json +33 -2
  137. package/dist/locales/ru.json +33 -2
  138. package/dist/locales/sq.json +33 -2
  139. package/dist/locales/sv.json +33 -2
  140. package/dist/locales/tr.json +33 -2
  141. package/dist/locales/zh.json +33 -2
  142. package/dist/patterns/anamnesis/index.js +1 -1
  143. package/dist/patterns/calendar/calendar-workspace.d.ts +6 -4
  144. package/dist/patterns/calendar/calendar.data.d.ts +9 -0
  145. package/dist/patterns/calendar/calendar.journey.d.ts +1 -1
  146. package/dist/patterns/calendar/calendar.sheets.d.ts +16 -5
  147. package/dist/patterns/calendar/calendar.types.d.ts +3 -1
  148. package/dist/patterns/calendar/index.js +1 -1
  149. package/dist/patterns/help-me-write-templates/help-me-write-templates.d.ts +11 -2
  150. package/dist/patterns/help-me-write-templates/index.js +1 -1
  151. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  152. package/dist/tokens.css +1 -1
  153. package/package.json +14 -4
  154. package/dist/_chunks/button-group-R32U7SyV.js +0 -307
  155. package/dist/_chunks/rich-text-editor-BYE6kK4u.js +0 -3839
  156. package/dist/components/ai-consent-banner/index.d.ts +0 -4
@@ -5,7 +5,7 @@ import { useTranslation as _t } from "react-i18next";
5
5
  import { B as Dt } from "./badge-BudgzTe_.js";
6
6
  import { B as oe } from "./button-CaUe1uyd.js";
7
7
  import { I as ne } from "./icon-button-CehAeZoP.js";
8
- import { B as xe } from "./button-group-R32U7SyV.js";
8
+ import { B as xe } from "./button-group-CA1tmu39.js";
9
9
  import { P as Rt } from "./panel-header-D_mTdhUp.js";
10
10
  import { S as Ne } from "./select-CLSUnKjF.js";
11
11
  import { S as Tt } from "./switch-OILsBLWo.js";
@@ -841,4 +841,4 @@ export {
841
841
  ns as T,
842
842
  Gt as t
843
843
  };
844
- //# sourceMappingURL=tasks-panel-CpcikOeY.js.map
844
+ //# sourceMappingURL=tasks-panel-DncuBPIZ.js.map
@@ -3,7 +3,7 @@ import { forwardRef as M, useRef as k, useImperativeHandle as N, useMemo as _, u
3
3
  import { c as P } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as g } from "react-i18next";
5
5
  import { I as y } from "./icon-button-CehAeZoP.js";
6
- import { I as j } from "./icon-button-group-DkkdIygu.js";
6
+ import { I as j } from "./icon-button-group-DZKC6KGf.js";
7
7
  import { S as K } from "./switch-OILsBLWo.js";
8
8
  import { D as o } from "./dropdown-menu-DU-Hrf33.js";
9
9
  import { u as x } from "./use-theme-CAuo6EYT.js";
@@ -364,4 +364,4 @@ export {
364
364
  F as T,
365
365
  D as t
366
366
  };
367
- //# sourceMappingURL=theme-toggle-bI0pgDDv.js.map
367
+ //# sourceMappingURL=theme-toggle-BP0XRGMM.js.map
@@ -0,0 +1,76 @@
1
+ import { useState as _, useEffect as v, useCallback as n } from "react";
2
+ import { u as y } from "./use-prefers-reduced-motion-BMwIQRjB.js";
3
+ const p = {
4
+ intro: 1840,
5
+ landed: 1440
6
+ }, f = {
7
+ intro: "ds:animate-[ai-pill-shimmer_calc(var(--animation-duration)*6)_var(--ease-in-out)_1]",
8
+ working: "ds:animate-[ai-pill-shimmer_calc(var(--animation-duration)*6)_var(--ease-in-out)_infinite]",
9
+ landed: "ds:animate-[ai-pill-shimmer_calc(var(--animation-duration)*4)_var(--ease-out)_1]"
10
+ }, g = {
11
+ intro: "ds:animate-[ai-comet-orbit_calc(var(--animation-duration)*7)_var(--ease-in-out)_1_both]",
12
+ working: "ds:animate-[ai-comet-orbit_calc(var(--animation-duration)*8)_linear_infinite]",
13
+ landed: "ds:animate-[ai-comet-orbit_calc(var(--animation-duration)*5)_var(--ease-out)_1_both]"
14
+ }, b = "ds:pointer-events-none ds:absolute ds:[inset-block-start:0] ds:[inset-inline-start:0] ds:opacity-0 ds:[offset-path:inset(0_round_var(--radius-full))] ds:[offset-rotate:0deg]", C = [
15
+ {
16
+ key: 1,
17
+ lag: "ds:[animation-delay:calc(var(--animation-duration)*0.2)]",
18
+ dot: "ds:size-2.5 ds:opacity-[var(--opacity-90)]"
19
+ },
20
+ {
21
+ key: 2,
22
+ lag: "ds:[animation-delay:calc(var(--animation-duration)*0.4)]",
23
+ dot: "ds:size-2 ds:opacity-[var(--opacity-70)]"
24
+ },
25
+ {
26
+ key: 3,
27
+ lag: "ds:[animation-delay:calc(var(--animation-duration)*0.6)]",
28
+ dot: "ds:size-2 ds:opacity-[var(--opacity-50)]"
29
+ },
30
+ {
31
+ key: 4,
32
+ lag: "ds:[animation-delay:calc(var(--animation-duration)*0.8)]",
33
+ dot: "ds:size-1.5 ds:opacity-[var(--opacity-30)]"
34
+ },
35
+ {
36
+ key: 5,
37
+ lag: "ds:[animation-delay:calc(var(--animation-duration)*1)]",
38
+ dot: "ds:size-1.5 ds:opacity-[var(--opacity-20)]"
39
+ },
40
+ {
41
+ key: 6,
42
+ lag: "ds:[animation-delay:calc(var(--animation-duration)*1.2)]",
43
+ dot: "ds:size-1 ds:opacity-[var(--opacity-10)]"
44
+ }
45
+ ];
46
+ function w(e = {}) {
47
+ const { enabled: s = !0, reducedMotion: d = "auto" } = e, r = y(), o = d === "off" ? !1 : r, [a, t] = _(
48
+ s ? "intro" : null
49
+ );
50
+ v(() => {
51
+ if (a !== "intro" && a !== "landed") return;
52
+ const i = o ? 0 : p[a], u = window.setTimeout(() => t(null), i);
53
+ return () => window.clearTimeout(u);
54
+ }, [a, o]);
55
+ const c = n(() => t("working"), []), l = n(() => t("landed"), []), m = n(() => {
56
+ t((i) => i === "working" ? null : i);
57
+ }, []);
58
+ return {
59
+ state: a,
60
+ props: {
61
+ "data-ai-sparkle": a ?? void 0,
62
+ className: a ? f[a] : ""
63
+ },
64
+ start: c,
65
+ land: l,
66
+ reset: m
67
+ };
68
+ }
69
+ export {
70
+ C,
71
+ f as S,
72
+ b as a,
73
+ g as b,
74
+ w as u
75
+ };
76
+ //# sourceMappingURL=use-ai-sparkle-Cf4yVTLB.js.map
@@ -4,7 +4,7 @@ import { c as f } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as L } from "react-i18next";
5
5
  import { u as de } from "./registry-DvAUVLHh.js";
6
6
  import { u as ie } from "./use-controllable-state-BiY4xTzM.js";
7
- import { a as N } from "./input-surface-xyERuLU_.js";
7
+ import { a as z } from "./input-surface-xyERuLU_.js";
8
8
  import { D as p } from "./dropdown-menu-DU-Hrf33.js";
9
9
  import { C as T } from "./circle-alert-rGDZ73Wh.js";
10
10
  import { L as le } from "./loader-circle-BECIU_8N.js";
@@ -114,9 +114,9 @@ const ue = {
114
114
  {
115
115
  variants: {
116
116
  size: {
117
- sm: `${N.sm} ds:gap-[var(--spacing-xs)] ds:ps-[var(--spacing-2xs)] ds:pe-[var(--spacing-sm)]`,
118
- md: `${N.md} ds:gap-[var(--spacing-sm)] ds:ps-[var(--spacing-2xs)] ds:pe-[var(--spacing-sm)]`,
119
- lg: `${N.lg} ds:gap-[var(--spacing-sm)] ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-md)]`
117
+ sm: `${z.sm} ds:gap-[var(--spacing-xs)] ds:ps-[var(--spacing-2xs)] ds:pe-[var(--spacing-sm)]`,
118
+ md: `${z.md} ds:gap-[var(--spacing-sm)] ds:ps-[var(--spacing-2xs)] ds:pe-[var(--spacing-sm)]`,
119
+ lg: `${z.lg} ds:gap-[var(--spacing-sm)] ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-md)]`
120
120
  },
121
121
  interactive: {
122
122
  true: [
@@ -271,14 +271,14 @@ function A({
271
271
  ] }) : null
272
272
  ] });
273
273
  }
274
- const ve = I(function({ value: a, option: t, size: n = "md", workflowLabel: l, id: c, className: o, dir: h }, v) {
275
- const { t: k } = L(), x = l ?? k("workflowStatus.label", "Workflow");
274
+ const ve = I(function({ value: a, option: t, size: n = "md", workflowLabel: l, id: c, className: o, dir: k }, b) {
275
+ const { t: x } = L(), y = l ?? x("workflowStatus.label", "Workflow");
276
276
  return /* @__PURE__ */ s(
277
277
  "div",
278
278
  {
279
- ref: v,
279
+ ref: b,
280
280
  id: c,
281
- dir: h,
281
+ dir: k,
282
282
  "data-component": "workflow-status",
283
283
  "data-component-id": c,
284
284
  "data-state": a,
@@ -288,7 +288,7 @@ const ve = I(function({ value: a, option: t, size: n = "md", workflowLabel: l, i
288
288
  A,
289
289
  {
290
290
  option: t,
291
- workflowLabel: x,
291
+ workflowLabel: y,
292
292
  size: n,
293
293
  interactive: !1,
294
294
  error: !1
@@ -305,64 +305,64 @@ const we = I(function({
305
305
  size: l = "md",
306
306
  disabled: c = !1,
307
307
  saving: o = !1,
308
- error: h = !1,
309
- errorMessage: v,
310
- workflowLabel: k,
311
- menuLabel: x,
308
+ error: k = !1,
309
+ errorMessage: b,
310
+ workflowLabel: x,
311
+ menuLabel: y,
312
312
  savingLabel: D,
313
313
  open: E,
314
314
  defaultOpen: K = !1,
315
315
  onOpenChange: $,
316
316
  id: u,
317
317
  className: H,
318
- dir: V,
318
+ dir: W,
319
319
  "aria-label": M,
320
320
  "aria-describedby": q
321
321
  }, F) {
322
- const { t: m } = L(), G = re(), z = ae(null), y = t.find((e) => e.value === a);
323
- if (!y)
322
+ const { t: m } = L(), G = re(), S = ae(null), C = t.find((e) => e.value === a);
323
+ if (!C)
324
324
  throw new Error(
325
325
  `WorkflowStatusControl requires an option matching value "${a}".`
326
326
  );
327
- const P = k ?? m("workflowStatus.label", "Workflow"), U = x ?? m("workflowStatus.menuLabel", "Workflow statuses"), J = D ?? m("workflowStatus.saving", "Saving workflow status"), Q = v ?? m(
327
+ const P = x ?? m("workflowStatus.label", "Workflow"), U = y ?? m("workflowStatus.menuLabel", "Workflow statuses"), J = D ?? m("workflowStatus.saving", "Saving workflow status"), Q = b ?? m(
328
328
  "workflowStatus.saveFailed",
329
329
  "Could not change workflow status. The previous status is still shown."
330
330
  ), X = M ?? m("workflowStatus.changeLabel", "Change workflow status: {{status}}", {
331
- status: y.label
332
- }), g = h || !!v, d = c || o, W = u ? `${u}-error` : G, Y = [q, g ? W : void 0].filter(Boolean).join(" ") || void 0, _ = o ? "saving" : c ? "disabled" : g ? "error" : "idle", [Z, w] = ie({
331
+ status: C.label
332
+ }), g = k || !!b, d = c || o, _ = u ? `${u}-error` : G, Y = [q, g ? _ : void 0].filter(Boolean).join(" ") || void 0, j = o ? "saving" : c ? "disabled" : g ? "error" : "idle", [Z, v] = ie({
333
333
  value: E,
334
334
  defaultValue: K,
335
335
  onChange: $
336
- }), b = !!Z && !d, S = te(
336
+ }), h = !!Z && !d, N = te(
337
337
  (e) => {
338
338
  if (d || e === a) return;
339
- const j = t.find((ee) => ee.value === e);
340
- if (!(!j || j.disabled))
339
+ const w = t.find((ee) => ee.value === e);
340
+ if (!(!w || w.disabled))
341
341
  return n(e);
342
342
  },
343
343
  [d, n, t, a]
344
- ), C = oe(
344
+ ), V = oe(
345
345
  () => ({
346
346
  getValue: () => a,
347
- getIsOpen: () => b,
347
+ getIsOpen: () => h,
348
348
  getIsSaving: () => o,
349
- setValue: S,
349
+ setValue: N,
350
350
  open: () => {
351
- d || w(!0);
351
+ d || v(!0);
352
352
  },
353
- close: () => w(!1),
353
+ close: () => v(!1),
354
354
  focus: () => {
355
355
  var e;
356
- return (e = z.current) == null ? void 0 : e.focus();
356
+ return (e = S.current) == null ? void 0 : e.focus();
357
357
  }
358
358
  }),
359
- [S, d, b, o, w, a]
359
+ [N, d, h, o, v, a]
360
360
  );
361
- return ne(F, () => C, [C]), de(ue, C, u), /* @__PURE__ */ i(
361
+ return ne(F, () => V, [V]), de(ue, V, u), /* @__PURE__ */ i(
362
362
  "div",
363
363
  {
364
364
  id: u,
365
- dir: V,
365
+ dir: W,
366
366
  "data-component": "workflow-status",
367
367
  "data-component-id": u,
368
368
  "data-state": a,
@@ -374,36 +374,36 @@ const we = I(function({
374
374
  /* @__PURE__ */ i(
375
375
  p.Root,
376
376
  {
377
- dir: V,
378
- open: b,
377
+ dir: W,
378
+ open: h,
379
379
  onOpenChange: (e) => {
380
- e && d || w(e);
380
+ e && d || v(e);
381
381
  },
382
382
  children: [
383
383
  /* @__PURE__ */ s(p.Trigger, { asChild: !0, children: /* @__PURE__ */ s(
384
384
  "button",
385
385
  {
386
- ref: z,
386
+ ref: S,
387
387
  id: u ? `${u}-trigger` : void 0,
388
388
  type: "button",
389
389
  disabled: d,
390
390
  "aria-label": X,
391
391
  "aria-describedby": Y,
392
392
  "aria-busy": o,
393
- "data-open": b ? "" : void 0,
393
+ "data-open": h ? "" : void 0,
394
394
  className: R({
395
395
  size: l,
396
396
  interactive: !0,
397
- operation: _
397
+ operation: j
398
398
  }),
399
399
  children: /* @__PURE__ */ s(
400
400
  A,
401
401
  {
402
- option: y,
402
+ option: C,
403
403
  workflowLabel: P,
404
404
  size: l,
405
405
  interactive: !0,
406
- operation: _,
406
+ operation: j,
407
407
  error: g
408
408
  }
409
409
  )
@@ -416,7 +416,8 @@ const we = I(function({
416
416
  {
417
417
  value: a,
418
418
  onValueChange: (e) => {
419
- S(e);
419
+ var w;
420
+ v(!1), (w = S.current) == null || w.focus(), N(e);
420
421
  },
421
422
  children: t.map((e) => /* @__PURE__ */ s(
422
423
  p.RadioItem,
@@ -459,7 +460,7 @@ const we = I(function({
459
460
  children: o ? J : ""
460
461
  }
461
462
  ),
462
- g ? /* @__PURE__ */ i("div", { id: W, role: "alert", className: ge(), children: [
463
+ g ? /* @__PURE__ */ i("div", { id: _, role: "alert", className: ge(), children: [
463
464
  /* @__PURE__ */ s(T, { "aria-hidden": "true" }),
464
465
  /* @__PURE__ */ s("span", { children: Q })
465
466
  ] }) : null
@@ -473,4 +474,4 @@ export {
473
474
  ve as a,
474
475
  ue as w
475
476
  };
476
- //# sourceMappingURL=workflow-status-xeaJTzD3.js.map
477
+ //# sourceMappingURL=workflow-status-CuJAOuKL.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "1.44.0",
3
+ "packageVersion": "1.46.0",
4
4
  "components": [
5
5
  {
6
6
  "kind": "component",
@@ -424,6 +424,20 @@
424
424
  }
425
425
  }
426
426
  },
427
+ {
428
+ "kind": "component",
429
+ "id": "ai-credits-notice",
430
+ "capabilities": [],
431
+ "state": [],
432
+ "actions": [],
433
+ "domHooks": {
434
+ "root": {
435
+ "attr": "data-component",
436
+ "value": "ai-credits-notice",
437
+ "description": "Marks the element as a kit AiCreditsNotice card body. Carries a sibling `data-mode=\"included|bundles\"` attribute for which notice is showing."
438
+ }
439
+ }
440
+ },
427
441
  {
428
442
  "kind": "component",
429
443
  "id": "ai-prompt-input",
@@ -16869,6 +16883,14 @@
16869
16883
  "as": "bookingRow",
16870
16884
  "entity": "appointment"
16871
16885
  },
16886
+ {
16887
+ "component": "popover",
16888
+ "as": "backlogSettings"
16889
+ },
16890
+ {
16891
+ "component": "switch",
16892
+ "as": "backlogGapToggle"
16893
+ },
16872
16894
  {
16873
16895
  "component": "collapsible",
16874
16896
  "as": "finderFilters"
@@ -17358,14 +17380,20 @@
17358
17380
  {
17359
17381
  "name": "triage_online_booking",
17360
17382
  "safety": "phi",
17361
- "description": "Review the online-bookings queue independently of the visible dates. The host owns membership and loading/error state. Show a row on the grid; completion is available only when the host enables it and the user can edit. Review-only rows remain in the queue on selection and cannot be dragged, resized or edited. Unknown last-seen data never marks a booking New. A host addresses one booking with the focusBookingId prop (bump focusBookingKey to repeat it): the tool docks, then the card carrying that data-booking-id takes focus and aria-current; an id outside the queue addresses nothing. An Assign patient or Assign operator segment opens the editor focused on that field. Completing writes patient-identifiable data.",
17383
+ "description": "Review the online-bookings queue independently of the visible dates. The host owns membership and loading/error state. Show a row on the grid; completion is available only when the host enables it and the user can edit. Review-only rows remain in the queue on selection and cannot be dragged, resized or edited. Unknown last-seen data never marks a booking New. A host addresses one booking with the focusBookingId prop (bump focusBookingKey to repeat it): the tool docks, then the card carrying that data-booking-id takes focus and aria-current; an id outside the queue addresses nothing. An Assign patient or Assign operator segment opens the editor focused on that field. A settings cog in the panel header (data-backlog-settings) opens a popover holding three switches — without a patient, without an operator, without a chair, the chair one only where the practice has chairs — all on by default; a card stays listed while at least one of its own gaps is still switched on. Read the cog before reading the list: while any switch is off it carries data-narrowed and its accessible name says the list is filtered, so a short queue is not an empty backlog. Selection only; completing writes patient-identifiable data.",
17362
17384
  "descriptionKey": "ui.agent.calendar.workflows.triageOnlineBooking",
17363
17385
  "uiActions": [
17364
17386
  "calendar.focus_event",
17365
- "control-room-rail.open"
17387
+ "control-room-rail.open",
17388
+ "popover.open",
17389
+ "popover.close",
17390
+ "switch.set_checked",
17391
+ "switch.toggle"
17366
17392
  ],
17367
17393
  "stateReads": [
17368
- "control-room-rail.activeToolId"
17394
+ "control-room-rail.activeToolId",
17395
+ "popover.isOpen",
17396
+ "switch.checked"
17369
17397
  ],
17370
17398
  "apiActions": [
17371
17399
  "onlineBooking.list",
@@ -189,7 +189,7 @@
189
189
  "manageWaitingListEntry": "Add, amend or remove a waiting-list entry. The four-field form opens as a rail SUB-VIEW — from the toolbar split button's plus segment, from Add entry, or from a row's pencil — with a back arrow to the queue. Editing is refused on a row already linked to an appointment, because those fields belong to the appointment; the pencil stays focusable and names that reason. Remove deletes at once with no confirmation, platform parity, and its toast carries an Undo that puts the entry back. Writes patient-identifiable data.",
190
190
  "scheduleWaitingPatient": "Give a waiting patient a slot. \"Schedule\" on an unlinked row hands off to the free-slot finder seeded from the entry — operator, chair, duration, patient, care and colour already filled in — and booking a slot opens the editor carrying the entry, so saving books the appointment and takes the entry off the list. A row already linked to an appointment reads \"Reschedule\" and seeds the same finder, but booking there MOVES the existing appointment rather than creating a second one. Writes patient-identifiable data.",
191
191
  "findFreeSlot": "Search the practice for bookable time in the finder panel. Operator and chair scope are grouped checklists behind a popover per axis — a select-all row first, operators sectioned under their groups, nothing ticked searching every eligible resource — beside the care, the duration, the date range and, for a care that needs one, a medical-device select. The results list groups the slots under a day heading; when the viewer may write appointments, a click steers the grid to that day and docks the editor prefilled with the date, time, duration, chair, operator and any seeded patient or care; read-only viewers see the list and projection only, under a lock note, with no Book. The 185-day range warning is advisory (the search still runs), \"Show more slots\" pushes the To date out by 30 days and re-searches, and an alert names which business hours are missing when the practice or its operators hold none (it links to the scheduler only where the host supplies that navigation, which this workspace does not). Projected bands open a modal list of original options by click, Enter or Space; only an explicit Book action uses the finder booking path. Read-only viewers can scroll those options without Book. Dismissal restores focus to the band.",
192
- "triageOnlineBooking": "Review the online-bookings queue independently of the visible dates. The host owns membership and loading/error state. Show a row on the grid; completion is available only when the host enables it and the user can edit. Review-only rows remain in the queue on selection and cannot be dragged, resized or edited. Unknown last-seen data never marks a booking New. A host addresses one booking with the focusBookingId prop (bump focusBookingKey to repeat it): the tool docks, then the card carrying that data-booking-id takes focus and aria-current; an id outside the queue addresses nothing. An Assign patient or Assign operator segment opens the editor focused on that field. Completing writes patient-identifiable data.",
192
+ "triageOnlineBooking": "Review the online-bookings queue independently of the visible dates. The host owns membership and loading/error state. Show a row on the grid; completion is available only when the host enables it and the user can edit. Review-only rows remain in the queue on selection and cannot be dragged, resized or edited. Unknown last-seen data never marks a booking New. A host addresses one booking with the focusBookingId prop (bump focusBookingKey to repeat it): the tool docks, then the card carrying that data-booking-id takes focus and aria-current; an id outside the queue addresses nothing. An Assign patient or Assign operator segment opens the editor focused on that field. A settings cog in the panel header (data-backlog-settings) opens a popover holding three switches — without a patient, without an operator, without a chair, the chair one only where the practice has chairs — all on by default; a card stays listed while at least one of its own gaps is still switched on. Read the cog before reading the list: while any switch is off it carries data-narrowed and its accessible name says the list is filtered, so a short queue is not an empty backlog. Selection only; completing writes patient-identifiable data.",
193
193
  "printDaySheet": "Print the front-desk call sheet. The toolbar's printer icon opens a dialog asking which day — one day, never the visible range — and Print renders that day's appointments through the browser, scoped by the filters in force and masked when privacy mode is on. Nothing is sent to a server, but the sheet itself is a patient-identifiable document."
194
194
  }
195
195
  },
@@ -0,0 +1,3 @@
1
+ import type { AgentAdapter } from '../../agent/types';
2
+ export declare const aiCreditsNoticeAgent: AgentAdapter;
3
+ //# sourceMappingURL=ai-credits-notice.agent.d.ts.map
@@ -0,0 +1,48 @@
1
+ import { type HTMLAttributes } from 'react';
2
+ /** The practice's current AI allowance, when the host tracks one. */
3
+ export interface AiCreditsNoticeAllowance {
4
+ /** AI actions left in the current period. */
5
+ remaining: number;
6
+ /** The monthly cap. */
7
+ limit: number;
8
+ /** When the allowance next resets. Omit if unknown. */
9
+ resetsOn?: Date;
10
+ }
11
+ interface AiCreditsNoticeSharedProps {
12
+ /**
13
+ * The practice's current AI allowance. In `included` mode it renders as an
14
+ * optional usage line + meter; in `bundles` mode it drives the heading
15
+ * ("{{remaining}} of {{limit}} credits") and the free-tier line in the
16
+ * body. Omit either mode's allowance to fall back to a generic line.
17
+ */
18
+ allowance?: AiCreditsNoticeAllowance;
19
+ className?: string;
20
+ }
21
+ export interface AiCreditsNoticeIncludedProps extends AiCreditsNoticeSharedProps {
22
+ mode: 'included';
23
+ /** Shows a quiet "Learn more" link — wire it once the credits upsell page ships. */
24
+ onLearnMore?: () => void;
25
+ /**
26
+ * Shows a quiet "Don't show again" link. The host decides what "again"
27
+ * means — typically stop rendering `aiCreditsNotice` on the editor for the
28
+ * rest of this mount, and persist the choice if it should survive a
29
+ * reload (see the component's docs for a `usePersistentState` example).
30
+ * Use a storage key scoped to the mode: switching from `included` to
31
+ * `bundles` is a different message and should show once more.
32
+ */
33
+ onDismiss?: () => void;
34
+ }
35
+ export interface AiCreditsNoticeBundlesProps extends AiCreditsNoticeSharedProps {
36
+ mode: 'bundles';
37
+ /** Opens the host's AI-credits bundle picker. The kit never builds that page itself. */
38
+ onViewBundles: () => void;
39
+ /** Shows a quiet "What each action costs" link. */
40
+ onSeeCosts?: () => void;
41
+ /** Shows a quiet "Don't show again" link. See the `included` prop of the
42
+ * same name — the same mode-scoped-key guidance applies here too. */
43
+ onDismiss?: () => void;
44
+ }
45
+ export type AiCreditsNoticeProps = AiCreditsNoticeIncludedProps | AiCreditsNoticeBundlesProps;
46
+ export declare const AiCreditsNotice: import("react").ForwardRefExoticComponent<(AiCreditsNoticeProps & Omit<HTMLAttributes<HTMLDivElement>, "className">) & import("react").RefAttributes<HTMLDivElement>>;
47
+ export {};
48
+ //# sourceMappingURL=ai-credits-notice.d.ts.map
@@ -0,0 +1,4 @@
1
+ export { AiCreditsNotice } from './ai-credits-notice';
2
+ export type { AiCreditsNoticeProps, AiCreditsNoticeIncludedProps, AiCreditsNoticeBundlesProps, AiCreditsNoticeAllowance, } from './ai-credits-notice';
3
+ export { aiCreditsNoticeAgent } from './ai-credits-notice.agent';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { A as i } from "../../_chunks/ai-credits-notice-xszqOZTC.js";
2
+ import { a as r } from "../../_chunks/ai-credits-notice.agent-C9L7orrP.js";
3
+ export {
4
+ i as AiCreditsNotice,
5
+ r as aiCreditsNoticeAgent
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
1
  import type { AgentAdapter } from '../../agent/types';
2
- import type { AiConsentBannerHandle } from './ai-consent-banner';
2
+ import type { AiConsentBannerHandle } from './ai-permission-notice';
3
3
  export declare const aiConsentBannerAgent: AgentAdapter<AiConsentBannerHandle>;
4
- //# sourceMappingURL=ai-consent-banner.agent.d.ts.map
4
+ //# sourceMappingURL=ai-permission-notice.agent.d.ts.map
@@ -51,4 +51,4 @@ export interface AiConsentBannerProps extends Omit<ComponentPropsWithoutRef<'div
51
51
  }
52
52
  export declare const AiConsentBanner: import("react").ForwardRefExoticComponent<AiConsentBannerProps & import("react").RefAttributes<HTMLDivElement>>;
53
53
  export {};
54
- //# sourceMappingURL=ai-consent-banner.d.ts.map
54
+ //# sourceMappingURL=ai-permission-notice.d.ts.map
@@ -0,0 +1,4 @@
1
+ export { AiConsentBanner } from './ai-permission-notice';
2
+ export type { AiConsentBannerProps, AiConsentBannerHandle, AiConsentState, AiConsentBannerHeadingLevel, } from './ai-permission-notice';
3
+ export { aiConsentBannerAgent } from './ai-permission-notice.agent';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,4 @@
1
- import { A as e, a as o } from "../../_chunks/ai-consent-banner-D7I2U-cz.js";
1
+ import { A as e, a as o } from "../../_chunks/ai-permission-notice-D7I2U-cz.js";
2
2
  export {
3
3
  e as AiConsentBanner,
4
4
  o as aiConsentBannerAgent
@@ -0,0 +1,24 @@
1
+ import { type AiSparkleState } from '../../hooks/use-ai-sparkle';
2
+ export type { AiSparkleState };
3
+ export interface AiSparkleProps {
4
+ /**
5
+ * The current phase, from `useAiSparkle`. Renders nothing when `null` —
6
+ * callers don't need to guard the mount themselves.
7
+ */
8
+ state: AiSparkleState | null;
9
+ }
10
+ /**
11
+ * The AI pill's comet sparkle: a comet with a six-dot tail riding the
12
+ * host's rounded outline — once on `intro`, looping while an action runs,
13
+ * and a faster lap as the result lands.
14
+ *
15
+ * Purely decorative (`aria-hidden`) and stateless — pass the `state` from
16
+ * `useAiSparkle`. The shimmer layer (a light sweep across the host itself)
17
+ * is not part of this component: it needs no extra DOM, so it travels as
18
+ * a class string on `useAiSparkle(...).props.className` instead. Position
19
+ * this component's host with `relative` (or `absolute`) sizing that matches
20
+ * the surface the sparkle decorates — it fills `inset-0` of its offset
21
+ * parent via the comet's `offset-path`.
22
+ */
23
+ export declare const AiSparkle: import("react").ForwardRefExoticComponent<AiSparkleProps & import("react").RefAttributes<HTMLSpanElement>>;
24
+ //# sourceMappingURL=ai-sparkle.d.ts.map
@@ -0,0 +1,3 @@
1
+ export { AiSparkle, type AiSparkleProps } from './ai-sparkle';
2
+ export type { AiSparkleState } from '../../hooks/use-ai-sparkle';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,5 @@
1
+ import { A as e } from "../../_chunks/ai-sparkle-D23NT8Z_.js";
2
+ export {
3
+ e as AiSparkle
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
- import { A as p } from "../../_chunks/appointment-card-TgR_2GKS.js";
2
- import { A as e, a as o, b as r } from "../../_chunks/appointment-tray-N0yEI8UF.js";
1
+ import { A as p } from "../../_chunks/appointment-card-DluZy8Iv.js";
2
+ import { A as e, a as o, b as r } from "../../_chunks/appointment-tray-CLrGGnKR.js";
3
3
  import { i } from "../../_chunks/is-safe-url-DkETxeHz.js";
4
4
  export {
5
5
  p as AppointmentCard,
@@ -1,4 +1,4 @@
1
- import { A as o } from "../../_chunks/appointment-peek-abiR0T9e.js";
1
+ import { A as o } from "../../_chunks/appointment-peek-BsfCpiJs.js";
2
2
  import { a as n } from "../../_chunks/appointment-peek.agent-C539tNFM.js";
3
3
  export {
4
4
  o as AppointmentPeek,
@@ -1,4 +1,4 @@
1
- import { A as i, a as t } from "../../_chunks/appointment-timeline-CCnyUYKz.js";
1
+ import { A as i, a as t } from "../../_chunks/appointment-timeline-Cs5f9viN.js";
2
2
  export {
3
3
  i as AppointmentTimeline,
4
4
  t as appointmentTimelineAgent
@@ -1,4 +1,4 @@
1
- import { B as A, C as R, O as a, b as s } from "../../_chunks/booking-D43ASl8y.js";
1
+ import { B as A, C as R, O as a, b as s } from "../../_chunks/booking-B7gA9gFB.js";
2
2
  export {
3
3
  A as Booking,
4
4
  R as CONFIRMATION_CHANNEL_ORDER,
@@ -1,4 +1,4 @@
1
- import { B as t } from "../../_chunks/button-group-R32U7SyV.js";
1
+ import { B as t } from "../../_chunks/button-group-CA1tmu39.js";
2
2
  export {
3
3
  t as ButtonGroup
4
4
  };
@@ -1,4 +1,4 @@
1
- import { C as r, c as l, r as n } from "../../_chunks/calendar-U6N0F99w.js";
1
+ import { C as r, c as l, r as n } from "../../_chunks/calendar-OzSeTb4V.js";
2
2
  export {
3
3
  r as Calendar,
4
4
  l as calendarAgent,
@@ -1,4 +1,4 @@
1
- import { C as e } from "../../_chunks/calendar-event-card-DKUnT9Be.js";
1
+ import { C as e } from "../../_chunks/calendar-event-card-B6N5h1dO.js";
2
2
  export {
3
3
  e as CalendarEventCard
4
4
  };
@@ -1,4 +1,4 @@
1
- import { C as t, c as s, a as c } from "../../_chunks/chart-PF2krCZC.js";
1
+ import { C as t, c as s, a as c } from "../../_chunks/chart-D8ucl8hH.js";
2
2
  export {
3
3
  t as Chart,
4
4
  s as chartAgent,
@@ -1,7 +1,7 @@
1
- import { D as r, E as l, T as t, a as s, b as d, c as o, d as n, e as i, f as R, i as C, g as T } from "../../_chunks/data-table-CcAx_I1w.js";
2
- import { B as g, C as D, a as b, E as x, b as c, R as p, T as u, c as m, r as E, u as f } from "../../_chunks/editable-currency-cell-renderer-Psb6XKHR.js";
1
+ import { D as r, E as l, T as t, a as s, b as d, c as o, d as n, e as i, f as R, i as C, g as T } from "../../_chunks/data-table-DnKOmEVw.js";
2
+ import { B as g, C as D, a as b, E as x, b as c, R as p, T as u, c as m, r as E, u as f } from "../../_chunks/editable-currency-cell-renderer-OUkUv7U4.js";
3
3
  import { D as h, a as A, b as w, I as y, L as I, N as L, c as N, S as P, d as W, e as B, T as U, f as _, g as k, U as v } from "../../_chunks/link-cell-renderer-s3oHzOwi.js";
4
- import { A as X, a as j } from "../../_chunks/actions-cell-renderer-BXBy9c0f.js";
4
+ import { A as X, a as j } from "../../_chunks/actions-cell-renderer-B5m9lwgC.js";
5
5
  export {
6
6
  X as ActionsCellRenderer,
7
7
  g as BalanceCellRenderer,
@@ -1,4 +1,4 @@
1
- import { A as e, F as o, a as n, b as A, c as i, d as f, e as t, I, f as N, g as T, h as F, i as _, j as E, k as c, l as h, m as r, n as p, o as O, p as S, q as m, r as l, s as d, t as C, u as D } from "../../_chunks/face-scheme-Bm6pe7R8.js";
1
+ import { A as e, F as o, a as n, b as A, c as i, d as f, e as t, I, f as N, g as T, h as F, i as _, j as E, k as c, l as h, m as r, n as p, o as O, p as S, q as m, r as l, s as d, t as C, u as D } from "../../_chunks/face-scheme-mIhwrQXt.js";
2
2
  export {
3
3
  e as ANNOTATION_TOOL_KIND,
4
4
  o as FACE_ANNOTATION_TOOLS,
@@ -1,4 +1,4 @@
1
- import { F as r, f } from "../../_chunks/file-manager-BfLQxF5t.js";
1
+ import { F as r, f } from "../../_chunks/file-manager-DOcJGIx2.js";
2
2
  export {
3
3
  r as FileManager,
4
4
  f as fileManagerAgent
@@ -1,4 +1,4 @@
1
- import { H as t } from "../../_chunks/header-settings-CTe45iDy.js";
1
+ import { H as t } from "../../_chunks/header-settings-BEfx_-TF.js";
2
2
  export {
3
3
  t as HeaderSettings
4
4
  };