@alfadocs/ui-kit 1.43.0 → 1.45.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 (113) hide show
  1. package/dist/_chunks/ai-sparkle-DXeP_6a0.js +52 -0
  2. package/dist/_chunks/{calendar-ChJQzRw-.js → calendar-U6N0F99w.js} +383 -359
  3. package/dist/_chunks/calendar-workspace-B7KvZ1_D.js +12161 -0
  4. package/dist/_chunks/{face-scheme-Dg6ZyLKb.js → face-scheme-Bm6pe7R8.js} +265 -275
  5. package/dist/_chunks/help-me-write-templates-GUeEn3Ff.js +741 -0
  6. package/dist/_chunks/{notes-panel-CRAovkjx.js → notes-panel-Dkk9QPPX.js} +159 -152
  7. package/dist/_chunks/{panel-subview-PMBRPFOa.js → panel-subview-CYnuX-KR.js} +61 -40
  8. package/dist/_chunks/rich-text-editor-BrAvNajV.js +3779 -0
  9. package/dist/_chunks/undo-2-CYNAzclj.js +26 -0
  10. package/dist/_chunks/use-ai-sparkle-CyQSRTCe.js +103 -0
  11. package/dist/_chunks/variables-menu-vXUaSBj4.js +401 -0
  12. package/dist/agent-catalog.json +84 -3
  13. package/dist/agent-i18n/en.json +14 -3
  14. package/dist/components/ai-sparkle/ai-sparkle.d.ts +24 -0
  15. package/dist/components/ai-sparkle/index.d.ts +3 -0
  16. package/dist/components/ai-sparkle/index.js +5 -0
  17. package/dist/components/calendar/calendar.d.ts +6 -0
  18. package/dist/components/calendar/index.js +1 -1
  19. package/dist/components/face-scheme/index.js +1 -1
  20. package/dist/components/index.d.ts +4 -2
  21. package/dist/components/notes-panel/index.js +1 -1
  22. package/dist/components/notes-panel/notes-panel.d.ts +4 -0
  23. package/dist/components/panel-subview/index.js +1 -1
  24. package/dist/components/panel-subview/panel-subview.d.ts +6 -0
  25. package/dist/components/rich-text-editor/editor-toolbar.d.ts +35 -3
  26. package/dist/components/rich-text-editor/index.d.ts +1 -1
  27. package/dist/components/rich-text-editor/index.js +1 -1
  28. package/dist/components/rich-text-editor/rich-text-editor.d.ts +98 -15
  29. package/dist/components/variables-menu/index.d.ts +4 -0
  30. package/dist/components/variables-menu/index.js +6 -0
  31. package/dist/components/variables-menu/variables-menu.agent.d.ts +10 -0
  32. package/dist/components/variables-menu/variables-menu.d.ts +53 -0
  33. package/dist/hooks/index.d.ts +1 -0
  34. package/dist/hooks/index.js +64 -56
  35. package/dist/hooks/use-ai-sparkle.d.ts +109 -0
  36. package/dist/host-compat.css +5 -5
  37. package/dist/i18n/locales/ar.d.ts +77 -6
  38. package/dist/i18n/locales/ar.js +78 -7
  39. package/dist/i18n/locales/de.d.ts +77 -6
  40. package/dist/i18n/locales/de.js +78 -7
  41. package/dist/i18n/locales/el.d.ts +77 -6
  42. package/dist/i18n/locales/el.js +78 -7
  43. package/dist/i18n/locales/en.d.ts +77 -6
  44. package/dist/i18n/locales/en.js +85 -7
  45. package/dist/i18n/locales/es.d.ts +77 -6
  46. package/dist/i18n/locales/es.js +78 -7
  47. package/dist/i18n/locales/fr.d.ts +77 -6
  48. package/dist/i18n/locales/fr.js +78 -7
  49. package/dist/i18n/locales/hi.d.ts +77 -6
  50. package/dist/i18n/locales/hi.js +78 -7
  51. package/dist/i18n/locales/it.d.ts +77 -6
  52. package/dist/i18n/locales/it.js +78 -7
  53. package/dist/i18n/locales/ja.d.ts +77 -6
  54. package/dist/i18n/locales/ja.js +78 -7
  55. package/dist/i18n/locales/nl.d.ts +77 -6
  56. package/dist/i18n/locales/nl.js +78 -7
  57. package/dist/i18n/locales/pl.d.ts +77 -6
  58. package/dist/i18n/locales/pl.js +78 -7
  59. package/dist/i18n/locales/pt.d.ts +77 -6
  60. package/dist/i18n/locales/pt.js +78 -7
  61. package/dist/i18n/locales/ro.d.ts +77 -6
  62. package/dist/i18n/locales/ro.js +78 -7
  63. package/dist/i18n/locales/ru.d.ts +77 -6
  64. package/dist/i18n/locales/ru.js +78 -7
  65. package/dist/i18n/locales/sq.d.ts +77 -6
  66. package/dist/i18n/locales/sq.js +78 -7
  67. package/dist/i18n/locales/sv.d.ts +77 -6
  68. package/dist/i18n/locales/sv.js +78 -7
  69. package/dist/i18n/locales/tr.d.ts +77 -6
  70. package/dist/i18n/locales/tr.js +78 -7
  71. package/dist/i18n/locales/zh.d.ts +77 -6
  72. package/dist/i18n/locales/zh.js +78 -7
  73. package/dist/index.js +1106 -1099
  74. package/dist/locales/ar.json +78 -7
  75. package/dist/locales/de.json +78 -7
  76. package/dist/locales/el.json +78 -7
  77. package/dist/locales/en.json +78 -7
  78. package/dist/locales/es.json +78 -7
  79. package/dist/locales/fr.json +78 -7
  80. package/dist/locales/hi.json +78 -7
  81. package/dist/locales/it.json +78 -7
  82. package/dist/locales/ja.json +78 -7
  83. package/dist/locales/nl.json +78 -7
  84. package/dist/locales/pl.json +78 -7
  85. package/dist/locales/pt.json +78 -7
  86. package/dist/locales/ro.json +78 -7
  87. package/dist/locales/ru.json +78 -7
  88. package/dist/locales/sq.json +78 -7
  89. package/dist/locales/sv.json +78 -7
  90. package/dist/locales/tr.json +78 -7
  91. package/dist/locales/zh.json +78 -7
  92. package/dist/patterns/calendar/calendar-bookings-panel.d.ts +8 -3
  93. package/dist/patterns/calendar/calendar-care-rules.d.ts +49 -0
  94. package/dist/patterns/calendar/calendar-task-editor.d.ts +31 -0
  95. package/dist/patterns/calendar/calendar-workspace.d.ts +8 -1
  96. package/dist/patterns/calendar/calendar-workspace.model.d.ts +39 -12
  97. package/dist/patterns/calendar/calendar.data.d.ts +9 -0
  98. package/dist/patterns/calendar/calendar.journey.d.ts +35 -3
  99. package/dist/patterns/calendar/calendar.model.d.ts +23 -1
  100. package/dist/patterns/calendar/calendar.sheets.d.ts +21 -3
  101. package/dist/patterns/calendar/calendar.surface.d.ts +6 -1
  102. package/dist/patterns/calendar/calendar.types.d.ts +32 -1
  103. package/dist/patterns/calendar/index.js +1 -1
  104. package/dist/patterns/help-me-write-templates/help-me-write-templates.d.ts +58 -26
  105. package/dist/patterns/help-me-write-templates/index.d.ts +1 -1
  106. package/dist/patterns/help-me-write-templates/index.js +1 -1
  107. package/dist/tokens.css +6 -6
  108. package/package.json +5 -1
  109. package/dist/_chunks/calendar-workspace-DhXqqu-D.js +0 -11392
  110. package/dist/_chunks/help-me-write-templates-B-m7zgJa.js +0 -775
  111. package/dist/_chunks/highlighter-DSkckT2Q.js +0 -15
  112. package/dist/_chunks/rich-text-editor-DUMeifwc.js +0 -3176
  113. package/dist/_chunks/wand-sparkles-DAjKyhz7.js +0 -27
@@ -1,40 +1,41 @@
1
- import { u as h } from "../_chunks/use-prefers-reduced-motion-BMwIQRjB.js";
2
- import { u as y } from "../_chunks/use-media-query-CcAx5SMM.js";
3
- import { Z as D, u as R, a as _, b as F } from "../_chunks/use-zoom-drilldown-qCX34w9I.js";
4
- import { u as g } from "../_chunks/use-count-up-BLLetaZ8.js";
5
- import { u as k } from "../_chunks/use-locale-BkCIHujH.js";
6
- import { A as M, T as V, a as W, r as H, t as N, u as Y } from "../_chunks/use-theme-CAuo6EYT.js";
7
- import { u as q } from "../_chunks/use-controllable-state-BiY4xTzM.js";
8
- import { u as G } from "../_chunks/use-copy-to-clipboard-Cyfc_dlv.js";
1
+ import { u as R } from "../_chunks/use-prefers-reduced-motion-BMwIQRjB.js";
2
+ import { u as I } from "../_chunks/use-media-query-CcAx5SMM.js";
3
+ import { Z as h, u as v, a as y, b as w } from "../_chunks/use-zoom-drilldown-qCX34w9I.js";
4
+ import { u as K } from "../_chunks/use-count-up-BLLetaZ8.js";
5
+ import { u as M } from "../_chunks/use-locale-BkCIHujH.js";
6
+ import { A as k, T as H, a as W, r as B, t as V, u as Y } from "../_chunks/use-theme-CAuo6EYT.js";
7
+ import { u as N } from "../_chunks/use-controllable-state-BiY4xTzM.js";
8
+ import { u as Z } from "../_chunks/use-copy-to-clipboard-Cyfc_dlv.js";
9
9
  import { u as j } from "../_chunks/use-debounced-callback-BisrB-Fq.js";
10
- import { useState as b, useRef as x, useEffect as E } from "react";
10
+ import { useState as A, useRef as S, useEffect as E } from "react";
11
11
  import { u as Q, a as J } from "../_chunks/use-direction-Dp8h70PP.js";
12
12
  import { u as $ } from "../_chunks/use-persistent-state-nZwZAnE9.js";
13
13
  import { u as te } from "../_chunks/use-isomorphic-layout-effect-BGfaCOP1.js";
14
- import { u as oe, a as ue } from "../_chunks/use-scroll-overflow-UbLrUfBo.js";
14
+ import { u as oe, a as se } from "../_chunks/use-scroll-overflow-UbLrUfBo.js";
15
15
  import { c as ne, u as ae } from "../_chunks/use-priority-overflow-c9SjxZkZ.js";
16
16
  import { u as ce } from "../_chunks/use-web-otp-D_utzp6S.js";
17
17
  import { u as fe } from "../_chunks/use-visual-viewport-pin-ChurOsHM.js";
18
18
  import { u as de } from "../_chunks/use-edge-resize-BHesP0kg.js";
19
- import { u as xe } from "../_chunks/use-countdown-Yd6ts0_a.js";
20
- import { u as be } from "../_chunks/use-check-animation--I3cS00X.js";
21
- import { R as Te, u as Ce, a as Le } from "../_chunks/use-list-reflow-Cw43nxw5.js";
22
- import { u as Oe } from "../_chunks/use-presence-transition-cDwWUXV-.js";
23
- import { u as ve } from "../_chunks/use-clamp-overflow-DQE2kwZ9.js";
24
- function C(e, o) {
25
- const [t, i] = b(e), u = x(null);
19
+ import { u as Se } from "../_chunks/use-countdown-Yd6ts0_a.js";
20
+ import { u as Ae } from "../_chunks/use-check-animation--I3cS00X.js";
21
+ import { R as Le, u as _e, a as Ce } from "../_chunks/use-list-reflow-Cw43nxw5.js";
22
+ import { u as be } from "../_chunks/use-presence-transition-cDwWUXV-.js";
23
+ import { u as Oe } from "../_chunks/use-clamp-overflow-DQE2kwZ9.js";
24
+ import { B as Pe, b as he, C as ve, a as ye, S as we, c as De, u as Ke } from "../_chunks/use-ai-sparkle-CyQSRTCe.js";
25
+ function _(e, o) {
26
+ const [t, i] = A(e), s = S(null);
26
27
  return E(() => {
27
28
  if (o <= 0) {
28
- u.current !== null && (clearTimeout(u.current), u.current = null), i(e);
29
+ s.current !== null && (clearTimeout(s.current), s.current = null), i(e);
29
30
  return;
30
31
  }
31
32
  const n = setTimeout(() => {
32
- i(e), u.current = null;
33
+ i(e), s.current = null;
33
34
  }, o);
34
- return u.current = n, () => clearTimeout(n);
35
+ return s.current = n, () => clearTimeout(n);
35
36
  }, [e, o]), t;
36
37
  }
37
- const S = [
38
+ const x = [
38
39
  "a[href]",
39
40
  "button:not([disabled])",
40
41
  'input:not([disabled]):not([type="hidden"])',
@@ -47,7 +48,7 @@ const S = [
47
48
  ].join(",");
48
49
  function p(e) {
49
50
  return Array.from(
50
- e.querySelectorAll(S)
51
+ e.querySelectorAll(x)
51
52
  ).filter((o) => {
52
53
  if (o.hidden) return !1;
53
54
  let t = o;
@@ -58,75 +59,82 @@ function p(e) {
58
59
  return !0;
59
60
  });
60
61
  }
61
- function L(e, o = {}) {
62
- const { enabled: t = !0, autoFocus: i = !0, restoreFocus: u = !0 } = o, n = x(null);
62
+ function C(e, o = {}) {
63
+ const { enabled: t = !0, autoFocus: i = !0, restoreFocus: s = !0 } = o, n = S(null);
63
64
  E(() => {
64
65
  if (!t) return;
65
66
  const a = e.current;
66
67
  if (!a) return;
67
68
  if (n.current = typeof document < "u" && document.activeElement instanceof HTMLElement ? document.activeElement : null, i) {
68
- const s = p(a)[0] ?? (a.tabIndex >= -1 ? a : null);
69
- s == null || s.focus();
69
+ const u = p(a)[0] ?? (a.tabIndex >= -1 ? a : null);
70
+ u == null || u.focus();
70
71
  }
71
72
  function f(r) {
72
73
  if (r.key !== "Tab") return;
73
- const s = e.current;
74
- if (!s) return;
75
- const c = p(s);
74
+ const u = e.current;
75
+ if (!u) return;
76
+ const c = p(u);
76
77
  if (c.length === 0) {
77
78
  r.preventDefault();
78
79
  return;
79
80
  }
80
81
  const m = c[0], d = c[c.length - 1], l = document.activeElement;
81
- r.shiftKey ? (l === m || !s.contains(l)) && (r.preventDefault(), d.focus()) : (l === d || !s.contains(l)) && (r.preventDefault(), m.focus());
82
+ r.shiftKey ? (l === m || !u.contains(l)) && (r.preventDefault(), d.focus()) : (l === d || !u.contains(l)) && (r.preventDefault(), m.focus());
82
83
  }
83
84
  return a.addEventListener("keydown", f), () => {
84
- if (a.removeEventListener("keydown", f), u && n.current) {
85
+ if (a.removeEventListener("keydown", f), s && n.current) {
85
86
  const r = n.current;
86
87
  requestAnimationFrame(() => {
87
88
  r.isConnected && r.focus();
88
89
  });
89
90
  }
90
91
  };
91
- }, [t, i, u, e]);
92
+ }, [t, i, s, e]);
92
93
  }
93
94
  export {
94
- M as ACCESSIBILITY_STORAGE_KEY,
95
- Te as REFLOW_ROW_CLASS,
96
- V as THEME_CLASS,
95
+ k as ACCESSIBILITY_STORAGE_KEY,
96
+ Pe as AI_SPARKLE_BURST_CLASS,
97
+ he as AI_SPARKLE_COMET_CLASS,
98
+ ve as AI_SPARKLE_COMET_TAIL,
99
+ ye as AI_SPARKLE_COMET_WRAPPER_CLASS,
100
+ we as AI_SPARKLE_GLYPHS,
101
+ De as AI_SPARKLE_SHIMMER_CLASS,
102
+ Le as REFLOW_ROW_CLASS,
103
+ H as THEME_CLASS,
97
104
  W as THEME_STORAGE_KEY,
98
- D as ZOOM_DRILLDOWN_TRANSITION_CLASS,
105
+ h as ZOOM_DRILLDOWN_TRANSITION_CLASS,
99
106
  ne as computePriorityLayout,
100
- H as resolveTheme,
101
- N as themeClassList,
102
- be as useCheckAnimation,
103
- ve as useClampOverflow,
104
- q as useControllableState,
105
- G as useCopyToClipboard,
106
- g as useCountUp,
107
- xe as useCountdown,
107
+ B as resolveTheme,
108
+ V as themeClassList,
109
+ Ke as useAiSparkle,
110
+ Ae as useCheckAnimation,
111
+ Oe as useClampOverflow,
112
+ N as useControllableState,
113
+ Z as useCopyToClipboard,
114
+ K as useCountUp,
115
+ Se as useCountdown,
108
116
  j as useDebouncedCallback,
109
- C as useDebouncedValue,
117
+ _ as useDebouncedValue,
110
118
  Q as useDirection,
111
119
  J as useDocumentDirection,
112
120
  de as useEdgeResize,
113
- Ce as useExitTransition,
114
- L as useFocusTrap,
121
+ _e as useExitTransition,
122
+ C as useFocusTrap,
115
123
  te as useIsomorphicLayoutEffect,
116
- Le as useListReflow,
117
- k as useLocale,
118
- y as useMediaQuery,
124
+ Ce as useListReflow,
125
+ M as useLocale,
126
+ I as useMediaQuery,
119
127
  oe as useOverflowCollapse,
120
128
  $ as usePersistentState,
121
- h as usePrefersReducedMotion,
122
- Oe as usePresenceTransition,
129
+ R as usePrefersReducedMotion,
130
+ be as usePresenceTransition,
123
131
  ae as usePriorityOverflow,
124
- ue as useScrollOverflow,
125
- R as useScrollToFirstError,
126
- _ as useSigningSession,
132
+ se as useScrollOverflow,
133
+ v as useScrollToFirstError,
134
+ y as useSigningSession,
127
135
  Y as useTheme,
128
136
  fe as useVisualViewportPin,
129
137
  ce as useWebOtp,
130
- F as useZoomDrilldown
138
+ w as useZoomDrilldown
131
139
  };
132
140
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,109 @@
1
+ /** Where the sparkle is: on first show, while an action runs, as it lands. */
2
+ export type AiSparkleState = 'intro' | 'working' | 'landed';
3
+ export declare const SHIMMER_CLASS: Record<AiSparkleState, string>;
4
+ export declare const COMET_CLASS: Record<AiSparkleState, string>;
5
+ export declare const BURST_CLASS: Record<AiSparkleState, string>;
6
+ export declare const SPARKLE_GLYPHS: readonly [{
7
+ readonly key: "start";
8
+ readonly className: "ds:absolute ds:opacity-0 ds:text-[color:var(--ai-sparkle)] ds:fill-current ds:drop-shadow-[0_0_var(--spacing-2xs)_var(--ai-sparkle)] ds:[animation-delay:calc(var(--animation-duration)*(var(--sparkle-base)+var(--sparkle-stagger)))] ds:[--sparkle-stagger:0] ds:size-3 ds:[inset-block-start:calc(var(--spacing-xs)*-1)] ds:[inset-inline-start:calc(var(--spacing-2xs)*-1)]";
9
+ }, {
10
+ readonly key: "top";
11
+ readonly className: "ds:absolute ds:opacity-0 ds:text-[color:var(--ai-sparkle)] ds:fill-current ds:drop-shadow-[0_0_var(--spacing-2xs)_var(--ai-sparkle)] ds:[animation-delay:calc(var(--animation-duration)*(var(--sparkle-base)+var(--sparkle-stagger)))] ds:[--sparkle-stagger:0.5] ds:size-4 ds:[inset-block-start:calc(var(--spacing-sm)*-1)] ds:[inset-inline-start:40%]";
12
+ }, {
13
+ readonly key: "end";
14
+ readonly className: "ds:absolute ds:opacity-0 ds:text-[color:var(--ai-sparkle)] ds:fill-current ds:drop-shadow-[0_0_var(--spacing-2xs)_var(--ai-sparkle)] ds:[animation-delay:calc(var(--animation-duration)*(var(--sparkle-base)+var(--sparkle-stagger)))] ds:[--sparkle-stagger:1] ds:size-3 ds:[inset-block-start:calc(var(--spacing-xs)*-1)] ds:[inset-inline-end:var(--spacing-md)]";
15
+ }, {
16
+ readonly key: "side";
17
+ readonly className: "ds:absolute ds:opacity-0 ds:text-[color:var(--ai-sparkle)] ds:fill-current ds:drop-shadow-[0_0_var(--spacing-2xs)_var(--ai-sparkle)] ds:[animation-delay:calc(var(--animation-duration)*(var(--sparkle-base)+var(--sparkle-stagger)))] ds:[--sparkle-stagger:1.5] ds:size-2 ds:[inset-block-start:40%] ds:[inset-inline-end:calc(var(--spacing-sm)*-1)]";
18
+ }, {
19
+ readonly key: "below";
20
+ readonly className: "ds:absolute ds:opacity-0 ds:text-[color:var(--ai-sparkle)] ds:fill-current ds:drop-shadow-[0_0_var(--spacing-2xs)_var(--ai-sparkle)] ds:[animation-delay:calc(var(--animation-duration)*(var(--sparkle-base)+var(--sparkle-stagger)))] ds:[--sparkle-stagger:2] ds:size-3 ds:[inset-block-end:calc(var(--spacing-xs)*-1)] ds:[inset-inline-start:25%]";
21
+ }];
22
+ export declare const COMET_WRAPPER_CLASS = "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]";
23
+ export declare const COMET_TAIL: readonly [{
24
+ readonly key: 1;
25
+ readonly lag: "ds:[animation-delay:calc(var(--animation-duration)*0.2)]";
26
+ readonly dot: "ds:size-2.5 ds:opacity-[var(--opacity-90)]";
27
+ }, {
28
+ readonly key: 2;
29
+ readonly lag: "ds:[animation-delay:calc(var(--animation-duration)*0.4)]";
30
+ readonly dot: "ds:size-2 ds:opacity-[var(--opacity-70)]";
31
+ }, {
32
+ readonly key: 3;
33
+ readonly lag: "ds:[animation-delay:calc(var(--animation-duration)*0.6)]";
34
+ readonly dot: "ds:size-2 ds:opacity-[var(--opacity-50)]";
35
+ }, {
36
+ readonly key: 4;
37
+ readonly lag: "ds:[animation-delay:calc(var(--animation-duration)*0.8)]";
38
+ readonly dot: "ds:size-1.5 ds:opacity-[var(--opacity-30)]";
39
+ }, {
40
+ readonly key: 5;
41
+ readonly lag: "ds:[animation-delay:calc(var(--animation-duration)*1)]";
42
+ readonly dot: "ds:size-1.5 ds:opacity-[var(--opacity-20)]";
43
+ }, {
44
+ readonly key: 6;
45
+ readonly lag: "ds:[animation-delay:calc(var(--animation-duration)*1.2)]";
46
+ readonly dot: "ds:size-1 ds:opacity-[var(--opacity-10)]";
47
+ }];
48
+ export interface UseAiSparkleOptions {
49
+ /**
50
+ * Whether the sparkle is available at all. Read once, at mount, to seed
51
+ * the initial `'intro'` phase — matches how the RichTextEditor's
52
+ * `aiSparkle` prop only ever gated the very first render. Default `true`.
53
+ */
54
+ enabled?: boolean;
55
+ /**
56
+ * `'auto'` (default) reads `prefers-reduced-motion` via
57
+ * `usePrefersReducedMotion`. `'off'` forces full motion regardless of the
58
+ * OS preference — useful for a story that wants to show the animated
59
+ * states side by side with a reduced one.
60
+ */
61
+ reducedMotion?: 'auto' | 'off';
62
+ }
63
+ export interface UseAiSparkleProps {
64
+ /** Spread (or picked) onto the host element as a pure styling hook. */
65
+ 'data-ai-sparkle': AiSparkleState | undefined;
66
+ /**
67
+ * The shimmer animation class for the current state — empty when at rest.
68
+ * Layer it over the host's own base positioning classes; the comet and
69
+ * burst layers need real DOM and live in the `AiSparkle` component instead.
70
+ */
71
+ className: string;
72
+ }
73
+ export interface UseAiSparkleReturn {
74
+ /** `null` at rest — nothing to render for the comet/burst layers either. */
75
+ state: AiSparkleState | null;
76
+ props: UseAiSparkleProps;
77
+ /** An AI action started: swap to the looping `'working'` phase. */
78
+ start: () => void;
79
+ /** An action's result landed: swap to the one-off `'landed'` phase. */
80
+ land: () => void;
81
+ /**
82
+ * Settle after an action ends. Clears back to rest only when still
83
+ * `'working'` (the action errored or was cancelled before `land()`);
84
+ * leaves `'landed'` alone so the one-off animation gets to play out.
85
+ */
86
+ reset: () => void;
87
+ }
88
+ /**
89
+ * Drives the AI-pill sparkle: lit on first show, looping while an action
90
+ * runs, and a one-off flourish as the result lands.
91
+ *
92
+ * The hook owns the state machine and the timing only — it paints nothing.
93
+ * `props['data-ai-sparkle']` is a plain styling hook for the host element;
94
+ * `props.className` carries the shimmer layer's animation class from the
95
+ * same lookup table the RichTextEditor's pill originally inlined. The
96
+ * comet and burst layers need actual DOM (a tail of dots, five staggered
97
+ * glyphs), so they live in the sibling `AiSparkle` component, keyed off the
98
+ * same `state`.
99
+ *
100
+ * Both `intro` and `landed` are one-off: this hook clears them back to
101
+ * `null` on a timer sized to the comet's lap plus the burst and its
102
+ * stagger, at the default 200ms `--animation-duration`. Under reduced
103
+ * motion (`prefers-reduced-motion` or `reducedMotion: 'auto'`'s system
104
+ * read) the CSS animations already collapse to 0ms, so the clear fires at
105
+ * the next tick instead of waiting out the full lap — the pill still gets
106
+ * its `data-ai-sparkle` attribute for a moment, but nothing visibly moves.
107
+ */
108
+ export declare function useAiSparkle(options?: UseAiSparkleOptions): UseAiSparkleReturn;
109
+ //# sourceMappingURL=use-ai-sparkle.d.ts.map
@@ -520,12 +520,12 @@
520
520
  .ds\:grid-cols-\[repeat\(auto-fit\,minmax\(12rem\,1fr\)\)\] {
521
521
  grid-template-columns:repeat(auto-fit,minmax(192px,1fr));
522
522
  }
523
+ .ds\:py-\[0\.0625rem\] {
524
+ padding-block:1px;
525
+ }
523
526
  .ds\:text-\[7rem\] {
524
527
  font-size:112px;
525
528
  }
526
- .ds\:\[block-size\:14rem\] {
527
- block-size:224px;
528
- }
529
529
  .ds\:\[block-size\:44rem\] {
530
530
  block-size:704px;
531
531
  }
@@ -562,8 +562,8 @@
562
562
  .ds\:\[max-block-size\:14rem\] {
563
563
  max-block-size:224px;
564
564
  }
565
- .ds\:\[max-block-size\:16rem\] {
566
- max-block-size:256px;
565
+ .ds\:\[max-block-size\:16\.5rem\] {
566
+ max-block-size:264px;
567
567
  }
568
568
  .ds\:\[max-inline-size\:6\.5rem\] {
569
569
  max-inline-size:104px;
@@ -2796,9 +2796,26 @@ export declare const arUi: {
2796
2796
  readonly heading: "عنوان";
2797
2797
  readonly extensions: "إضافات المحرر";
2798
2798
  readonly insertVariable: "إدراج متغير";
2799
- readonly variables: "المتغيرات";
2799
+ readonly variables: {
2800
+ readonly menuLabel: "المتغيرات";
2801
+ readonly search: "البحث عن المتغيرات…";
2802
+ readonly recent: "الأخيرة";
2803
+ readonly groups: {
2804
+ readonly patient: "المريض";
2805
+ readonly appointment: "الموعد";
2806
+ readonly practice: "العيادة";
2807
+ readonly operator: "المُشغّل";
2808
+ readonly document: "المستند";
2809
+ readonly other: "أخرى";
2810
+ };
2811
+ readonly empty: "لا يوجد متغير يطابق «{{query}}»";
2812
+ readonly footer: {
2813
+ readonly navigate: "التنقل";
2814
+ readonly insert: "الإدراج";
2815
+ readonly close: "إغلاق";
2816
+ };
2817
+ };
2800
2818
  readonly variableInvalid: "متغير غير صالح: {{tokens}}. اختر متغيرًا من إدراج متغير.";
2801
- readonly variableNoMatch: "لا يوجد متغير يطابق «{{query}}»";
2802
2819
  readonly more: "المزيد من الخيارات";
2803
2820
  readonly link: {
2804
2821
  readonly url: "URL";
@@ -2889,6 +2906,17 @@ export declare const arUi: {
2889
2906
  readonly autoFormat: "تنسيق المستند تلقائيًا";
2890
2907
  readonly consentRecorded: "تم تسجيل الموافقة على المساعدة بالذكاء الاصطناعي.";
2891
2908
  readonly consentRegionLabel: "موافقة المساعدة بالذكاء الاصطناعي لهذا المستند";
2909
+ readonly templates: "القوالب";
2910
+ readonly templatesGroup: "قوالب العيادة";
2911
+ readonly noTemplates: "لا توجد قوالب بعد";
2912
+ readonly templatesNoteEmpty: "الملاحظة فارغة. أملِ أو اكتب أولًا لاستخدام قالب.";
2913
+ readonly createFirstTemplate: "أنشئ قالبك الأول";
2914
+ readonly manageTemplates: "إدارة القوالب";
2915
+ readonly defaultBadge: "افتراضي";
2916
+ readonly actionError: "حدث خطأ ما. حاول مرة أخرى.";
2917
+ readonly actionStale: "تغيّر النص أثناء إعادة الكتابة. لم يُستبدل أي شيء. حاول مرة أخرى.";
2918
+ readonly selectionTools: "أدوات التحديد";
2919
+ readonly actionDone: "تم. جرى تحديث الملاحظة.";
2892
2920
  };
2893
2921
  };
2894
2922
  readonly payment: {
@@ -3144,6 +3172,8 @@ export declare const arUi: {
3144
3172
  };
3145
3173
  readonly helpMeWriteTemplates: {
3146
3174
  readonly bar: {
3175
+ readonly contextDocument: "يستخدم الملاحظة كلها سياقًا. تُدرج المسودة عند المؤشر.";
3176
+ readonly contextSelection: "يستخدم النص المحدد سياقًا. تحل المسودة محله.";
3147
3177
  readonly templatesMenu: "القوالب";
3148
3178
  readonly templatesGroup: "قوالب العيادة";
3149
3179
  readonly createFirst: "أنشئ قالبك الأول";
@@ -3188,10 +3218,12 @@ export declare const arUi: {
3188
3218
  };
3189
3219
  readonly manager: {
3190
3220
  readonly title: "قوالب الذكاء الاصطناعي";
3191
- readonly description: "مشتركة مع جميع أعضاء العيادة. يظهر القالب الافتراضي أولًا.";
3221
+ readonly description: "مشتركة مع كل من في العيادة. اسحب لتحديد ترتيب قائمة القوالب.";
3192
3222
  readonly new: "قالب جديد";
3193
3223
  readonly done: "تم";
3194
3224
  readonly listLabel: "القوالب";
3225
+ readonly reorderHandle: "إعادة ترتيب {{label}}. اضغط Alt + أعلى أو Alt + أسفل للنقل.";
3226
+ readonly reorderAnnounce: "تم نقل {{label}} إلى الموضع {{to}} من {{total}}";
3195
3227
  readonly edit: "تعديل {{name}}";
3196
3228
  readonly delete: "حذف {{name}}";
3197
3229
  readonly emptyTitle: "لا توجد قوالب بعد";
@@ -4161,7 +4193,10 @@ export declare const arUi: {
4161
4193
  readonly actions: {
4162
4194
  readonly groupLabel: "إجراءات الأجندة";
4163
4195
  readonly schedulingLabel: "الجدولة";
4196
+ readonly createGroupLabel: "إنشاء جديد";
4197
+ readonly toolsLabel: "أدوات الأجندة";
4164
4198
  readonly newAppointment: "موعد جديد";
4199
+ readonly newTask: "مهمة جديدة";
4165
4200
  readonly privacy: "وضع الخصوصية";
4166
4201
  readonly findFreeSlots: "البحث عن مواعيد متاحة";
4167
4202
  readonly printDay: "طباعة اليوم";
@@ -4546,6 +4581,8 @@ export declare const arUi: {
4546
4581
  readonly chairBusy: "الكرسي المختار مشغول في وقت الموعد.";
4547
4582
  readonly operatorBusy: "المعالج المختار مشغول في وقت الموعد.";
4548
4583
  readonly operatorAbsent: "المعالج المختار غائب في تاريخ الموعد.";
4584
+ readonly careRestrictedResourceHint: "غير مسموح به لهذه الخدمة";
4585
+ readonly careRestrictionConflict: "لا يوجد معالج/كرسي مشترك بين الخدمات المحددة";
4549
4586
  readonly reminderDisabled: "(معطّل)";
4550
4587
  readonly priceListAllPhases: "كل المراحل";
4551
4588
  readonly priceListBilled: "إجراء غير مسموح: الخدمة صدرت لها فاتورة بالفعل.";
@@ -4581,6 +4618,32 @@ export declare const arUi: {
4581
4618
  readonly signMode_two: "توقيع مستندين مطلوبين";
4582
4619
  readonly signMode_few: "توقيع {{count}} مستندات مطلوبة";
4583
4620
  };
4621
+ readonly taskEditor: {
4622
+ readonly title: "مهمة جديدة";
4623
+ readonly editTitle: "تعديل المهمة";
4624
+ readonly date: "التاريخ";
4625
+ readonly time: "الوقت";
4626
+ readonly note: "ملاحظة";
4627
+ readonly noteRequired: "أدخل ملاحظة.";
4628
+ readonly operator: "المشغّل";
4629
+ readonly operatorNone: "بلا مشغّل";
4630
+ readonly about: "يخص";
4631
+ readonly aboutNobody: "لا أحد";
4632
+ readonly aboutPatient: "المريض";
4633
+ readonly aboutCompany: "الشركة";
4634
+ readonly companyName: "اسم الشركة";
4635
+ readonly companyUnresolved: "الشركة المرتبطة (غير مدرجة): {{id}}";
4636
+ readonly companyReplace: "استبدال الشركة";
4637
+ readonly done: "مكتملة";
4638
+ readonly save: "حفظ";
4639
+ readonly cancel: "إلغاء";
4640
+ readonly delete: "حذف";
4641
+ readonly deleteConfirmTitle: "هل تريد حذف هذه المهمة؟";
4642
+ readonly deleteConfirmBody: "ستتم إزالة المهمة. لا يمكن التراجع عن هذا الإجراء هنا.";
4643
+ readonly deleteConfirm: "حذف";
4644
+ readonly deleteCancel: "الاحتفاظ";
4645
+ readonly readOnlyBody: "هذه المهمة للقراءة فقط.";
4646
+ };
4584
4647
  readonly findSlots: {
4585
4648
  readonly bandOptions: "الخيارات المتاحة";
4586
4649
  readonly tool: "البحث عن مواعيد متاحة";
@@ -4809,16 +4872,19 @@ export declare const arUi: {
4809
4872
  readonly undone: "تمت استعادة المدة";
4810
4873
  };
4811
4874
  readonly bookings: {
4812
- readonly title: "الحجوزات عبر الإنترنت";
4813
- readonly intro: "حجوزات آخر ثلاثين يوماً التي ما زالت تحتاج إلى مريض أو معالج.";
4875
+ readonly title: "بحاجة إلى إكمال";
4876
+ readonly intro: "المواعيد الظاهرة التي ما زالت تحتاج إلى مريض أو معالج أو كرسي، أياً كانت طريقة إنشائها.";
4814
4877
  readonly new: "جديد";
4815
4878
  readonly bookedOn: "حُجز في {{date}}";
4816
4879
  readonly needsPatient: "تعيين مريض";
4817
4880
  readonly needsOperator: "تعيين معالج";
4881
+ readonly needsChair: "تعيين كرسي";
4818
4882
  readonly assignPatient: "تعيين مريض";
4819
4883
  readonly assignOperator: "تعيين معالج";
4884
+ readonly assignChair: "تعيين كرسي";
4820
4885
  readonly assignPatientShort: "المريض";
4821
4886
  readonly assignOperatorShort: "المعالج";
4887
+ readonly assignChairShort: "الكرسي";
4822
4888
  readonly edit: "تعديل الموعد";
4823
4889
  readonly whatsapp: "مراسلة عبر واتساب";
4824
4890
  readonly whatsappNoNumber: "لا يوجد رقم واتساب لهذا الحجز";
@@ -4828,7 +4894,11 @@ export declare const arUi: {
4828
4894
  readonly current: "الحجز المحدد";
4829
4895
  readonly showInCalendarNamed: "إظهار حجز {{when}} في الأجندة";
4830
4896
  readonly showInCalendar: "إظهار في الأجندة";
4831
- readonly emptyTitle: "لا توجد حجوزات للمراجعة.";
4897
+ readonly emptyTitle: "لا توجد مواعيد لإكمالها.";
4898
+ readonly filterNoPatient: "بدون مريض";
4899
+ readonly filterNoOperator: "بدون معالج";
4900
+ readonly filterNoChair: "بدون كرسي";
4901
+ readonly notShownOnChairAxis: "لا تظهر في أعمدة الكراسي حتى يتم تعيين كرسي.";
4832
4902
  };
4833
4903
  readonly waitingList: {
4834
4904
  readonly removed: "أُزيل من قائمة الانتظار";
@@ -4872,6 +4942,7 @@ export declare const arUi: {
4872
4942
  };
4873
4943
  readonly readOnly: {
4874
4944
  readonly createBlocked: "ليست لديك صلاحية إنشاء المواعيد.";
4945
+ readonly createTaskBlocked: "ليست لديك صلاحية إنشاء المهام.";
4875
4946
  readonly changeBlocked: "ليست لديك صلاحية تعديل المواعيد.";
4876
4947
  readonly waitingBlocked: "ليست لديك صلاحية تعديل قائمة الانتظار.";
4877
4948
  readonly waitingLockedBody: "ليست لديك صلاحية تعديل قائمة الانتظار — اطلب من مالك العيادة صلاحية تعديل التقويم.";