@alfadocs/ui-kit 1.41.1 → 1.43.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 (32) hide show
  1. package/dist/_chunks/{calendar-workspace-Bx8xxvic.js → calendar-workspace-DhXqqu-D.js} +1981 -1968
  2. package/dist/_chunks/control-room-rail-Cv7GpMqX.js +354 -0
  3. package/dist/_chunks/{marketplace-app-shell-D_g9BaDI.js → marketplace-app-shell-DdwPj03y.js} +3 -3
  4. package/dist/_chunks/{notes-panel-Daq5T_cS.js → notes-panel-CRAovkjx.js} +84 -68
  5. package/dist/_chunks/{sidebar-ClTY9lLI.js → sidebar-DbZXLl8h.js} +2 -2
  6. package/dist/_chunks/tab-bar-Cw9UK18Z.js +228 -0
  7. package/dist/_chunks/{tool-rail-D89USYE6.js → tool-rail-CCFqDfAn.js} +282 -276
  8. package/dist/_chunks/use-edge-resize-BHesP0kg.js +149 -0
  9. package/dist/_chunks/use-scroll-overflow-UbLrUfBo.js +72 -0
  10. package/dist/agent-catalog.json +1 -1
  11. package/dist/components/control-room-rail/control-room-rail.d.ts +9 -0
  12. package/dist/components/control-room-rail/index.js +1 -1
  13. package/dist/components/notes-panel/index.js +1 -1
  14. package/dist/components/notes-panel/notes-panel.d.ts +32 -0
  15. package/dist/components/sidebar/index.js +1 -1
  16. package/dist/components/tab-bar/index.js +1 -1
  17. package/dist/components/tool-rail/index.js +1 -1
  18. package/dist/components/tool-rail/tool-rail.d.ts +16 -0
  19. package/dist/hooks/index.d.ts +2 -0
  20. package/dist/hooks/index.js +35 -32
  21. package/dist/hooks/use-edge-resize.d.ts +13 -1
  22. package/dist/index.js +6 -6
  23. package/dist/patterns/calendar/calendar.journey.d.ts +11 -0
  24. package/dist/patterns/calendar/calendar.sheets.d.ts +20 -0
  25. package/dist/patterns/calendar/index.js +1 -1
  26. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  27. package/dist/tokens.css +1 -1
  28. package/package.json +1 -1
  29. package/dist/_chunks/control-room-rail-CnNZusR5.js +0 -337
  30. package/dist/_chunks/tab-bar-rDkLiaA6.js +0 -268
  31. package/dist/_chunks/use-edge-resize-ZnGG7gyO.js +0 -139
  32. package/dist/_chunks/use-overflow-collapse-BIOzKbni.js +0 -32
@@ -0,0 +1,149 @@
1
+ import { useState as T, useRef as b, useCallback as o } from "react";
2
+ import { useTranslation as Y } from "react-i18next";
3
+ import { u as A } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
4
+ const $ = 16, H = 64;
5
+ function j({
6
+ edge: P,
7
+ targetRef: n,
8
+ cssProperty: c,
9
+ minSize: p,
10
+ maxSize: d,
11
+ defaultSize: k,
12
+ disabled: l = !1,
13
+ onResize: u,
14
+ size: f
15
+ }) {
16
+ const { t: K } = Y(), E = f !== void 0, [h, g] = T(
17
+ E ? f : null
18
+ ), [M, x] = T(!1), m = b(null), w = b(null);
19
+ A(() => {
20
+ const t = n.current;
21
+ if (!t) return;
22
+ const r = t.getBoundingClientRect().width;
23
+ r > 0 && (m.current = r);
24
+ });
25
+ const I = o(
26
+ (t) => Math.min(d, Math.max(p, t)),
27
+ [p, d]
28
+ );
29
+ A(() => {
30
+ var r, e;
31
+ if (!E) return;
32
+ const t = f === null ? null : I(f);
33
+ g(t), t === null ? ((r = n.current) == null || r.style.removeProperty(c), m.current = null) : (e = n.current) == null || e.style.setProperty(c, `${t}px`);
34
+ }, [E, f, I, c, n]);
35
+ const s = o(() => {
36
+ if (h !== null) return h;
37
+ const t = n.current;
38
+ if (t) {
39
+ const r = t.getBoundingClientRect().width;
40
+ if (r > 0)
41
+ return m.current = r, r;
42
+ }
43
+ return m.current ?? k;
44
+ }, [h, k, n]), a = o(
45
+ (t) => {
46
+ var e;
47
+ const r = I(t);
48
+ return g(r), (e = n.current) == null || e.style.setProperty(c, `${r}px`), r;
49
+ },
50
+ [I, c, n]
51
+ ), C = o(() => {
52
+ var t;
53
+ g(null), (t = n.current) == null || t.style.removeProperty(c), m.current = null, u == null || u(null);
54
+ }, [c, u, n]), y = o(() => {
55
+ const t = n.current, r = t ? getComputedStyle(t).direction === "rtl" : !1;
56
+ return (P === "inline-end" ? 1 : -1) * (r ? -1 : 1);
57
+ }, [P, n]), v = o(
58
+ (t) => {
59
+ l || !t.isPrimary || (t.currentTarget.setPointerCapture(t.pointerId), w.current = {
60
+ pointerId: t.pointerId,
61
+ startX: t.clientX,
62
+ startSize: s(),
63
+ sign: y()
64
+ }, x(!0));
65
+ },
66
+ [l, s, y]
67
+ ), _ = o(
68
+ (t) => {
69
+ const r = w.current;
70
+ !r || t.pointerId !== r.pointerId || a(r.startSize + r.sign * (t.clientX - r.startX));
71
+ },
72
+ [a]
73
+ ), D = o(
74
+ (t) => {
75
+ const r = w.current;
76
+ if (!r || t.pointerId !== r.pointerId) return;
77
+ t.currentTarget.releasePointerCapture(t.pointerId), w.current = null, x(!1);
78
+ const e = a(
79
+ r.startSize + r.sign * (t.clientX - r.startX)
80
+ );
81
+ u == null || u(e);
82
+ },
83
+ [a, u]
84
+ ), B = o(
85
+ (t) => {
86
+ if (l) return;
87
+ const r = t.shiftKey ? H : $, e = y();
88
+ let i = null;
89
+ switch (t.key) {
90
+ case "ArrowRight":
91
+ i = s() + e * r;
92
+ break;
93
+ case "ArrowLeft":
94
+ i = s() - e * r;
95
+ break;
96
+ case "Home":
97
+ i = p;
98
+ break;
99
+ case "End":
100
+ i = d;
101
+ break;
102
+ case "Enter":
103
+ t.preventDefault(), C();
104
+ return;
105
+ default:
106
+ return;
107
+ }
108
+ if (i === null) return;
109
+ t.preventDefault();
110
+ const L = a(i);
111
+ u == null || u(L);
112
+ },
113
+ [
114
+ a,
115
+ s,
116
+ l,
117
+ d,
118
+ p,
119
+ u,
120
+ C,
121
+ y
122
+ ]
123
+ ), X = Math.round(s());
124
+ return {
125
+ separatorProps: {
126
+ role: "separator",
127
+ tabIndex: l ? -1 : 0,
128
+ "aria-orientation": "vertical",
129
+ "aria-valuemin": p,
130
+ "aria-valuemax": d,
131
+ "aria-valuenow": X,
132
+ "aria-valuetext": K("resizable.widthAnnounce", { width: X }),
133
+ "aria-disabled": l || void 0,
134
+ onPointerDown: v,
135
+ onPointerMove: _,
136
+ onPointerUp: D,
137
+ onPointerCancel: D,
138
+ onKeyDown: B,
139
+ onDoubleClick: C
140
+ },
141
+ isResizing: M,
142
+ isResized: h !== null,
143
+ reset: C
144
+ };
145
+ }
146
+ export {
147
+ j as u
148
+ };
149
+ //# sourceMappingURL=use-edge-resize-BHesP0kg.js.map
@@ -0,0 +1,72 @@
1
+ import { useRef as m, useState as h, useCallback as v } from "react";
2
+ import { u as R } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
3
+ function b(l = !0) {
4
+ const i = m(null), [o, a] = h(null), d = v(
5
+ (e) => {
6
+ l && a(e);
7
+ },
8
+ [l]
9
+ ), [t, n] = h(!1), r = m(null);
10
+ return R(() => {
11
+ if (!l) {
12
+ r.current = null, n((c) => c && !1);
13
+ return;
14
+ }
15
+ const e = i.current;
16
+ if (!e) return;
17
+ const u = () => {
18
+ o && (r.current = o.scrollWidth);
19
+ const c = r.current;
20
+ if (c == null) return;
21
+ const f = c - e.clientWidth > 1;
22
+ n((w) => w === f ? w : f);
23
+ };
24
+ if (u(), typeof ResizeObserver > "u") return;
25
+ const s = new ResizeObserver(u);
26
+ return s.observe(e), o && s.observe(o), () => s.disconnect();
27
+ }, [l, o]), { containerRef: i, contentRef: d, isOverflowing: t };
28
+ }
29
+ function y(l = !0) {
30
+ const i = m(null), [o, a] = h({ start: !1, end: !1 });
31
+ R(() => {
32
+ const t = i.current;
33
+ if (!t || !l) {
34
+ a(
35
+ (e) => e.start || e.end ? { start: !1, end: !1 } : e
36
+ );
37
+ return;
38
+ }
39
+ const n = () => {
40
+ const e = Math.abs(t.scrollLeft), u = t.scrollWidth - t.clientWidth, s = e > 1, c = u - e > 1;
41
+ a(
42
+ (f) => f.start === s && f.end === c ? f : { start: s, end: c }
43
+ );
44
+ };
45
+ n(), t.addEventListener("scroll", n, { passive: !0 });
46
+ let r;
47
+ return typeof ResizeObserver < "u" && (r = new ResizeObserver(n), r.observe(t), t.firstElementChild && r.observe(t.firstElementChild)), () => {
48
+ t.removeEventListener("scroll", n), r == null || r.disconnect();
49
+ };
50
+ }, [l]);
51
+ const d = v((t) => {
52
+ var s;
53
+ const n = i.current;
54
+ if (!n || typeof window > "u") return;
55
+ const r = window.getComputedStyle(n).direction === "rtl", e = (s = window.matchMedia) == null ? void 0 : s.call(
56
+ window,
57
+ "(prefers-reduced-motion: reduce)"
58
+ ).matches, u = n.clientWidth * 0.85 * t * (r ? -1 : 1);
59
+ n.scrollBy({ left: u, behavior: e ? "auto" : "smooth" });
60
+ }, []);
61
+ return {
62
+ ref: i,
63
+ canScrollStart: o.start,
64
+ canScrollEnd: o.end,
65
+ scrollByPage: d
66
+ };
67
+ }
68
+ export {
69
+ y as a,
70
+ b as u
71
+ };
72
+ //# sourceMappingURL=use-scroll-overflow-UbLrUfBo.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "1.41.1",
3
+ "packageVersion": "1.43.0",
4
4
  "components": [
5
5
  {
6
6
  "kind": "component",
@@ -39,6 +39,15 @@ export interface ControlRoomRailProps extends Omit<ToolRailProps, 'tools' | 'onR
39
39
  onFavoriteIdsChange?: (next: string[]) => void;
40
40
  /** localStorage key for the uncontrolled favourites. */
41
41
  persistFavoritesKey?: string;
42
+ /**
43
+ * localStorage key for the uncontrolled committed panel width, mirroring
44
+ * `persistFavoritesKey`: when set and `panelWidth` is absent, the rail
45
+ * seeds its width from storage on mount and writes each commit back.
46
+ * Unlike `persistFavoritesKey` this has no default — persistence is
47
+ * opt-in. Only meaningful with `resizablePanel` — there is nothing to
48
+ * persist without the resize handle.
49
+ */
50
+ persistPanelWidthKey?: string;
42
51
  }
43
52
  export declare const ControlRoomRail: import("react").ForwardRefExoticComponent<ControlRoomRailProps & import("react").RefAttributes<ToolRailHandle>>;
44
53
  //# sourceMappingURL=control-room-rail.d.ts.map
@@ -1,4 +1,4 @@
1
- import { C as r, a as l, c as a, u as t, b as e, d as n } from "../../_chunks/control-room-rail-CnNZusR5.js";
1
+ import { C as r, a as l, c as a, u as t, b as e, d as n } from "../../_chunks/control-room-rail-Cv7GpMqX.js";
2
2
  export {
3
3
  r as ControlRoomProvider,
4
4
  l as ControlRoomRail,
@@ -1,4 +1,4 @@
1
- import { N as a } from "../../_chunks/notes-panel-Daq5T_cS.js";
1
+ import { N as a } from "../../_chunks/notes-panel-CRAovkjx.js";
2
2
  export {
3
3
  a as NotesPanel
4
4
  };
@@ -145,6 +145,38 @@ export interface NotesPanelProps extends Omit<HTMLAttributes<HTMLElement>, 'titl
145
145
  * neither affordance).
146
146
  */
147
147
  aiConsent?: AiConsentGate;
148
+ /**
149
+ * Template variables for the rich composer's "Insert variable" menu and
150
+ * `[[TOKEN]]` chip rendering. Forwarded straight to `RichTextEditor`.
151
+ * Ignored by the `'plain'` composer.
152
+ */
153
+ variables?: RichTextEditorProps['variables'];
154
+ /** Decide whether a `[[TOKEN]]` is valid. See `RichTextEditor`. */
155
+ validateVariable?: RichTextEditorProps['validateVariable'];
156
+ /** The invalid `[[TOKEN]]`s in the draft, reported by the rich composer. */
157
+ onVariableValidityChange?: RichTextEditorProps['onVariableValidityChange'];
158
+ /**
159
+ * Bring your own Help-me-write surface (e.g. practice templates) into the
160
+ * composer, forwarded straight to `RichTextEditor`. See
161
+ * `RichTextEditorProps['renderHelpMeWrite']`.
162
+ */
163
+ renderHelpMeWrite?: RichTextEditorProps['renderHelpMeWrite'];
164
+ /** Upload an image yourself and resolve its URL. See `RichTextEditor`. */
165
+ onUploadImage?: RichTextEditorProps['onUploadImage'];
166
+ /** An AI call ran out of credits. See `RichTextEditor`. */
167
+ onAiCreditsExhausted?: RichTextEditorProps['onAiCreditsExhausted'];
168
+ /**
169
+ * Rendered just above the composer — e.g. the Help-me-write templates
170
+ * pattern's `undoNotice`. Renders in both add and edit mode, whenever the
171
+ * composer itself is mounted.
172
+ */
173
+ composerBefore?: ReactNode;
174
+ /**
175
+ * Rendered just after the composer — e.g. the Help-me-write templates
176
+ * pattern's `manager` dialog. Renders in both add and edit mode, whenever
177
+ * the composer itself is mounted.
178
+ */
179
+ composerAfter?: ReactNode;
148
180
  /** Toggle a note's pinned state — renders an inline pin button per note. */
149
181
  onTogglePin?: (id: string) => void;
150
182
  /** Toggle a note's flagged state — renders an inline flag button per note. */
@@ -1,4 +1,4 @@
1
- import { S as r, a as i, b as s, c as d, d as S, e as b, f as t, g as o, h as m, i as n, j as p, k as l, l as c, m as g, n as u, o as I, p as P, q as f, s as h, u as B } from "../../_chunks/sidebar-ClTY9lLI.js";
1
+ import { S as r, a as i, b as s, c as d, d as S, e as b, f as t, g as o, h as m, i as n, j as p, k as l, l as c, m as g, n as u, o as I, p as P, q as f, s as h, u as B } from "../../_chunks/sidebar-DbZXLl8h.js";
2
2
  import { u as k } from "../../_chunks/use-persistent-state-nZwZAnE9.js";
3
3
  export {
4
4
  r as Sidebar,
@@ -1,4 +1,4 @@
1
- import { T as o } from "../../_chunks/tab-bar-rDkLiaA6.js";
1
+ import { T as o } from "../../_chunks/tab-bar-Cw9UK18Z.js";
2
2
  export {
3
3
  o as TabBar
4
4
  };
@@ -1,4 +1,4 @@
1
- import { T as l, t } from "../../_chunks/tool-rail-D89USYE6.js";
1
+ import { T as l, t } from "../../_chunks/tool-rail-CCFqDfAn.js";
2
2
  export {
3
3
  l as ToolRail,
4
4
  t as toolRailAgent
@@ -96,6 +96,22 @@ export interface ToolRailProps extends VariantProps<typeof railVariants> {
96
96
  * Enter / double-click resets to the token-driven default. Default `false`.
97
97
  */
98
98
  resizablePanel?: boolean;
99
+ /**
100
+ * Controlled committed panel width, px; `null` for the token-driven
101
+ * default. Only meaningful when `resizablePanel` is `true` — the width
102
+ * has nothing to resize without the handle. Applied to
103
+ * `--tool-rail-panel-inline-size` on mount and whenever it changes,
104
+ * clamped to 288–880px. Omit for uncontrolled sizing (the rail owns the
105
+ * committed width internally, the existing behaviour).
106
+ */
107
+ panelWidth?: number | null;
108
+ /**
109
+ * Fires with the committed px width on every commit — pointer release,
110
+ * a keyboard step, or `null` on reset (Enter / double-click). Fires
111
+ * whether or not `panelWidth` is controlled, so an uncontrolled host can
112
+ * still observe the width to persist it.
113
+ */
114
+ onPanelWidthChange?: (px: number | null) => void;
99
115
  /**
100
116
  * Fires when the user reorders the `reorderable` run (drag-drop or
101
117
  * `Alt`+Arrow). `from` / `to` are indices into `tools`; the host applies the
@@ -28,4 +28,6 @@ export { useCheckAnimation, type UseCheckAnimationOptions, type UseCheckAnimatio
28
28
  export { useExitTransition, type UseExitTransitionOptions, type UseExitTransitionReturn, } from './use-exit-transition';
29
29
  export { usePresenceTransition, type PresencePhase, type UsePresenceTransitionOptions, type UsePresenceTransitionReturn, } from './use-presence-transition';
30
30
  export { useListReflow, REFLOW_ROW_CLASS, type UseListReflowOptions, type UseListReflowReturn, } from './use-list-reflow';
31
+ export { useClampOverflow } from './use-clamp-overflow';
32
+ export { useScrollOverflow, type UseScrollOverflowReturn, } from './use-scroll-overflow';
31
33
  //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,6 @@
1
- import { u as y } from "../_chunks/use-prefers-reduced-motion-BMwIQRjB.js";
2
- import { u as v } from "../_chunks/use-media-query-CcAx5SMM.js";
3
- import { Z as R, u as _, a as w, b as F } from "../_chunks/use-zoom-drilldown-qCX34w9I.js";
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
4
  import { u as g } from "../_chunks/use-count-up-BLLetaZ8.js";
5
5
  import { u as k } from "../_chunks/use-locale-BkCIHujH.js";
6
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";
@@ -11,15 +11,16 @@ import { useState as b, useRef as x, 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 } from "../_chunks/use-overflow-collapse-BIOzKbni.js";
15
- import { c as se, u as ne } from "../_chunks/use-priority-overflow-c9SjxZkZ.js";
16
- import { u as ie } from "../_chunks/use-web-otp-D_utzp6S.js";
14
+ import { u as oe, a as ue } from "../_chunks/use-scroll-overflow-UbLrUfBo.js";
15
+ import { c as ne, u as ae } from "../_chunks/use-priority-overflow-c9SjxZkZ.js";
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
- import { u as me } from "../_chunks/use-edge-resize-ZnGG7gyO.js";
19
- import { u as pe } from "../_chunks/use-countdown-Yd6ts0_a.js";
20
- import { u as Ee } from "../_chunks/use-check-animation--I3cS00X.js";
21
- import { R as Te, u as Se, a as Ce } from "../_chunks/use-list-reflow-Cw43nxw5.js";
22
- import { u as Ae } from "../_chunks/use-presence-transition-cDwWUXV-.js";
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";
23
24
  function C(e, o) {
24
25
  const [t, i] = b(e), u = x(null);
25
26
  return E(() => {
@@ -33,7 +34,7 @@ function C(e, o) {
33
34
  return u.current = n, () => clearTimeout(n);
34
35
  }, [e, o]), t;
35
36
  }
36
- const T = [
37
+ const S = [
37
38
  "a[href]",
38
39
  "button:not([disabled])",
39
40
  'input:not([disabled]):not([type="hidden"])',
@@ -46,7 +47,7 @@ const T = [
46
47
  ].join(",");
47
48
  function p(e) {
48
49
  return Array.from(
49
- e.querySelectorAll(T)
50
+ e.querySelectorAll(S)
50
51
  ).filter((o) => {
51
52
  if (o.hidden) return !1;
52
53
  let t = o;
@@ -67,7 +68,7 @@ function L(e, o = {}) {
67
68
  const s = p(a)[0] ?? (a.tabIndex >= -1 ? a : null);
68
69
  s == null || s.focus();
69
70
  }
70
- function l(r) {
71
+ function f(r) {
71
72
  if (r.key !== "Tab") return;
72
73
  const s = e.current;
73
74
  if (!s) return;
@@ -76,11 +77,11 @@ function L(e, o = {}) {
76
77
  r.preventDefault();
77
78
  return;
78
79
  }
79
- const m = c[0], d = c[c.length - 1], f = document.activeElement;
80
- r.shiftKey ? (f === m || !s.contains(f)) && (r.preventDefault(), d.focus()) : (f === d || !s.contains(f)) && (r.preventDefault(), m.focus());
80
+ 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());
81
82
  }
82
- return a.addEventListener("keydown", l), () => {
83
- if (a.removeEventListener("keydown", l), u && n.current) {
83
+ return a.addEventListener("keydown", f), () => {
84
+ if (a.removeEventListener("keydown", f), u && n.current) {
84
85
  const r = n.current;
85
86
  requestAnimationFrame(() => {
86
87
  r.isConnected && r.focus();
@@ -94,36 +95,38 @@ export {
94
95
  Te as REFLOW_ROW_CLASS,
95
96
  V as THEME_CLASS,
96
97
  W as THEME_STORAGE_KEY,
97
- R as ZOOM_DRILLDOWN_TRANSITION_CLASS,
98
- se as computePriorityLayout,
98
+ D as ZOOM_DRILLDOWN_TRANSITION_CLASS,
99
+ ne as computePriorityLayout,
99
100
  H as resolveTheme,
100
101
  N as themeClassList,
101
- Ee as useCheckAnimation,
102
+ be as useCheckAnimation,
103
+ ve as useClampOverflow,
102
104
  q as useControllableState,
103
105
  G as useCopyToClipboard,
104
106
  g as useCountUp,
105
- pe as useCountdown,
107
+ xe as useCountdown,
106
108
  j as useDebouncedCallback,
107
109
  C as useDebouncedValue,
108
110
  Q as useDirection,
109
111
  J as useDocumentDirection,
110
- me as useEdgeResize,
111
- Se as useExitTransition,
112
+ de as useEdgeResize,
113
+ Ce as useExitTransition,
112
114
  L as useFocusTrap,
113
115
  te as useIsomorphicLayoutEffect,
114
- Ce as useListReflow,
116
+ Le as useListReflow,
115
117
  k as useLocale,
116
- v as useMediaQuery,
118
+ y as useMediaQuery,
117
119
  oe as useOverflowCollapse,
118
120
  $ as usePersistentState,
119
- y as usePrefersReducedMotion,
120
- Ae as usePresenceTransition,
121
- ne as usePriorityOverflow,
122
- _ as useScrollToFirstError,
123
- w as useSigningSession,
121
+ h as usePrefersReducedMotion,
122
+ Oe as usePresenceTransition,
123
+ ae as usePriorityOverflow,
124
+ ue as useScrollOverflow,
125
+ R as useScrollToFirstError,
126
+ _ as useSigningSession,
124
127
  Y as useTheme,
125
128
  fe as useVisualViewportPin,
126
- ie as useWebOtp,
129
+ ce as useWebOtp,
127
130
  F as useZoomDrilldown
128
131
  };
129
132
  //# sourceMappingURL=index.js.map
@@ -43,6 +43,18 @@ export interface UseEdgeResizeOptions {
43
43
  disabled?: boolean;
44
44
  /** Fired with the committed px width; `null` means reset-to-default. */
45
45
  onResize?: (size: number | null) => void;
46
+ /**
47
+ * Controlled committed width, px; `null` for the token-driven default.
48
+ * When provided (including `null`), the hook applies it to the target's
49
+ * CSS property on mount and on every change — mirroring the "re-assert
50
+ * on remount" effect components already run for the uncontrolled case.
51
+ * Dragging and keyboard steps still update the CSS property and fire
52
+ * `onResize` immediately for a responsive handle; the host is expected
53
+ * to feed the committed value back through `size` on its next render,
54
+ * the same contract as a controlled form input. Omit for uncontrolled
55
+ * (internally-owned) sizing — the hook's default and existing behaviour.
56
+ */
57
+ size?: number | null;
46
58
  }
47
59
  export interface EdgeResizeSeparatorProps {
48
60
  role: 'separator';
@@ -74,5 +86,5 @@ export interface UseEdgeResizeReturn {
74
86
  /** Programmatic reset to the token-driven default width. */
75
87
  reset: () => void;
76
88
  }
77
- export declare function useEdgeResize({ edge, targetRef, cssProperty, minSize, maxSize, defaultSize, disabled, onResize, }: UseEdgeResizeOptions): UseEdgeResizeReturn;
89
+ export declare function useEdgeResize({ edge, targetRef, cssProperty, minSize, maxSize, defaultSize, disabled, onResize, size: controlledSize, }: UseEdgeResizeOptions): UseEdgeResizeReturn;
78
90
  //# sourceMappingURL=use-edge-resize.d.ts.map
package/dist/index.js CHANGED
@@ -109,7 +109,7 @@ import { S as Qt } from "./_chunks/stat-Bs80Z6Yv.js";
109
109
  import { T as Jt } from "./_chunks/tag-Ci3xJPcH.js";
110
110
  import { T as an, t as en } from "./_chunks/timeline-61AihzYz.js";
111
111
  import { T as rn } from "./_chunks/timestamp-BV2lC-wV.js";
112
- import { C as tn, a as nn, c as pn, u as mn, b as ln, d as dn } from "./_chunks/control-room-rail-CnNZusR5.js";
112
+ import { C as tn, a as nn, c as pn, u as mn, b as ln, d as dn } from "./_chunks/control-room-rail-Cv7GpMqX.js";
113
113
  import { B as cn, a as fn, b as gn, c as Sn, d as Cn, e as Tn, f as xn } from "./_chunks/breadcrumb-agut0PwN.js";
114
114
  import { C as Pn, a as In, b as En, c as Rn, d as _n, e as bn, f as Nn, g as Dn, h as hn, i as On, j as Fn, k as Ln, u as Mn } from "./_chunks/command-palette-DQl_SNEv.js";
115
115
  import { H as kn, a as Bn, b as Gn, c as Hn, d as vn, e as wn, f as Wn, g as Un } from "./_chunks/header-3o9o9v_T.js";
@@ -121,11 +121,11 @@ import { P as pi, a as mi, b as li, c as di, d as Ai, e as ci, f as fi, g as gi,
121
121
  import { D as Ti, a as xi, P as ui, S as Pi, c as Ii, p as Ei } from "./_chunks/public-footer.agent-BKkK3T3V.js";
122
122
  import { P as _i, p as bi } from "./_chunks/public-header.agent-D-EBVskf.js";
123
123
  import { S as Di, f as hi, s as Oi } from "./_chunks/search-bar-CCmViqaa.js";
124
- import { S as Li, a as Mi, b as yi, c as ki, d as Bi, e as Gi, f as Hi, g as vi, h as wi, i as Wi, j as Ui, k as Vi, l as Ki, m as Yi, n as Xi, o as qi, p as zi, q as ji, s as Qi, u as Zi } from "./_chunks/sidebar-ClTY9lLI.js";
124
+ import { S as Li, a as Mi, b as yi, c as ki, d as Bi, e as Gi, f as Hi, g as vi, h as wi, i as Wi, j as Ui, k as Vi, l as Ki, m as Yi, n as Xi, o as qi, p as zi, q as ji, s as Qi, u as Zi } from "./_chunks/sidebar-DbZXLl8h.js";
125
125
  import { S as $i } from "./_chunks/stepper-accordion-DmVykr5F.js";
126
126
  import { s as ep } from "./_chunks/stepper-accordion.agent-cmEguIdx.js";
127
127
  import { S as rp, s as op } from "./_chunks/stepper-progress-Bv0njx4g.js";
128
- import { T as np } from "./_chunks/tab-bar-rDkLiaA6.js";
128
+ import { T as np } from "./_chunks/tab-bar-Cw9UK18Z.js";
129
129
  import { T as pp, a as mp, b as lp, c as dp, t as Ap } from "./_chunks/tabs-BnRaLT0y.js";
130
130
  import { T as fp, t as gp } from "./_chunks/theme-toggle-bI0pgDDv.js";
131
131
  import { A as Cp } from "./_chunks/agenda-card-DyQtHb9z.js";
@@ -153,7 +153,7 @@ import { M as Cm, m as Tm } from "./_chunks/message-tray-CrRIHfiQ.js";
153
153
  import { N as um, i as Pm } from "./_chunks/notification-card-B2gLO6dK.js";
154
154
  import { n as Em } from "./_chunks/notification-card.agent-DxGBZb8T.js";
155
155
  import { N as _m, n as bm } from "./_chunks/notification-tray-BOEKegVV.js";
156
- import { N as Dm } from "./_chunks/notes-panel-Daq5T_cS.js";
156
+ import { N as Dm } from "./_chunks/notes-panel-CRAovkjx.js";
157
157
  import { P as Om, p as Fm } from "./_chunks/popover-DO-pssF3.js";
158
158
  import { R as Mm, I as ym, r as km } from "./_chunks/radiograph-panel.agent-LrILY2lN.js";
159
159
  import { P as Gm, R as Hm, T as vm, a as wm, p as Wm, r as Um } from "./_chunks/pregnancy-weight-gain-Bfq4Kwt5.js";
@@ -238,9 +238,9 @@ import { W as xC, a as uC, w as PC } from "./_chunks/workflow-status-xeaJTzD3.js
238
238
  import { C as EC, W as RC, a as _C, b as bC, c as NC, i as DC, l as hC, m as OC, r as FC, w as LC, d as MC, e as yC, f as kC } from "./_chunks/workflow-map-DhR_h5yw.js";
239
239
  import { A as GC, a as HC, b as vC, c as wC } from "./_chunks/alia-sidebar-CUqaJNPQ.js";
240
240
  import { A as UC, a as VC, L as KC, P as YC, S as XC, T as qC, b as zC, c as jC, d as QC, e as ZC, f as JC, g as $C, h as aT, i as eT, j as sT, k as rT, l as oT, m as tT, n as nT, o as iT, p as pT, r as mT, q as lT, s as dT, t as AT, u as cT } from "./_chunks/anamnesis-summary-rows-DQUqwWc1.js";
241
- import { C as gT, a as ST, b as CT, c as TT, D as xT, d as uT, S as PT, V as IT, W as ET, e as RT, i as _T, m as bT, r as NT, u as DT, f as hT, g as OT } from "./_chunks/calendar-workspace-Bx8xxvic.js";
241
+ import { C as gT, a as ST, b as CT, c as TT, D as xT, d as uT, S as PT, V as IT, W as ET, e as RT, i as _T, m as bT, r as NT, u as DT, f as hT, g as OT } from "./_chunks/calendar-workspace-DhXqqu-D.js";
242
242
  import { A as LT, a as MT, b as yT, H as kT, c as BT, u as GT } from "./_chunks/help-me-write-templates-B-m7zgJa.js";
243
- import { C as vT, M as wT, P as WT } from "./_chunks/marketplace-app-shell-D_g9BaDI.js";
243
+ import { C as vT, M as wT, P as WT } from "./_chunks/marketplace-app-shell-DdwPj03y.js";
244
244
  import { P as VT } from "./_chunks/payment-automation-upsell-BKmBXU4i.js";
245
245
  import { S as YT } from "./_chunks/signature-request-D_j2aQu1.js";
246
246
  import { D as qT, d as zT } from "./_chunks/dependent-selector-BHDP0nBB.js";
@@ -13,6 +13,7 @@
13
13
  import type { CalendarEventStatus } from '../../components/calendar';
14
14
  import type { Dispatch, SetStateAction } from 'react';
15
15
  import type { NotesPanelNote, NotesPanelProps, NotesPanelSubmission, AiConsentGate } from '../../components/notes-panel';
16
+ import type { PatientNotesSeam } from './calendar.sheets';
16
17
  import type { AvailabilityContext, BacklogFilter, BacklogItem, CalendarFreeSlot, CalendarRow, DisplaySettings, DraftSlot, EditorDraft, EditorPrefill, FindSlotsSeed, HistoryInput, RailFocus, SlotPatch, WaitingEntryDraft } from './calendar.model';
17
18
  import type { DeleteOptions, EditorDraftExtras, RecurringScope } from './calendar-workspace.model';
18
19
  import type { CalendarHistoryEntry, CalendarSignChannel, CalendarWaitingEntry } from './calendar.types';
@@ -168,5 +169,15 @@ export interface CalendarJourney {
168
169
  * `ic_internal_api_post_patient_ai_consent` grant route.
169
170
  */
170
171
  noteAiConsentFor?: (patientId: string) => AiConsentGate | undefined;
172
+ /**
173
+ * The notes composer's template-variable, Help-me-write and image-upload
174
+ * seams for one patient, read as the details panel opens them — one hook
175
+ * instead of six props, mirroring `noteAiConsentFor`. Omit any key (or the
176
+ * whole hook) and that affordance is not offered: the kit ships no
177
+ * variables, no bring-your-own Help-me-write surface and no image upload
178
+ * of its own. Typically backed by the host's own `useHelpMeWriteTemplates`
179
+ * call, built once per patient and passed straight through.
180
+ */
181
+ noteComposerExtrasFor?: (patientId: string) => Partial<Pick<PatientNotesSeam, 'variables' | 'validateVariable' | 'onVariableValidityChange' | 'renderHelpMeWrite' | 'onUploadImage' | 'onAiCreditsExhausted' | 'composerBefore' | 'composerAfter'>> | undefined;
171
182
  }
172
183
  //# sourceMappingURL=calendar.journey.d.ts.map
@@ -82,6 +82,26 @@ export interface PatientNotesSeam {
82
82
  * mics. Omitted → today's ungated behaviour (matches `NotesPanel`).
83
83
  */
84
84
  aiConsent?: AiConsentGate;
85
+ /** Template variables for the composer's "Insert variable" menu. See
86
+ * `RichTextEditor`. */
87
+ variables?: NotesPanelProps['variables'];
88
+ /** Decide whether a `[[TOKEN]]` is valid. See `RichTextEditor`. */
89
+ validateVariable?: NotesPanelProps['validateVariable'];
90
+ /** The invalid `[[TOKEN]]`s in the draft. See `RichTextEditor`. */
91
+ onVariableValidityChange?: NotesPanelProps['onVariableValidityChange'];
92
+ /** Bring your own Help-me-write surface (e.g. practice templates). See
93
+ * `RichTextEditor`. */
94
+ renderHelpMeWrite?: NotesPanelProps['renderHelpMeWrite'];
95
+ /** Upload an image yourself and resolve its URL. See `RichTextEditor`. */
96
+ onUploadImage?: NotesPanelProps['onUploadImage'];
97
+ /** An AI call ran out of credits. See `RichTextEditor`. */
98
+ onAiCreditsExhausted?: NotesPanelProps['onAiCreditsExhausted'];
99
+ /** Rendered just above the composer — e.g. the templates pattern's
100
+ * `undoNotice`. See `NotesPanel`. */
101
+ composerBefore?: NotesPanelProps['composerBefore'];
102
+ /** Rendered just after the composer — e.g. the templates pattern's
103
+ * `manager`. See `NotesPanel`. */
104
+ composerAfter?: NotesPanelProps['composerAfter'];
85
105
  /** The host's read. Absent while `onLoad` is present reads as loading. */
86
106
  status?: 'loading' | 'ready' | 'error';
87
107
  total?: number | null;
@@ -1,4 +1,4 @@
1
- import { C as s, a as r, b as E, c as P, D as S, d as o, S as C, V as t, W as d, e as A, i, m as n, r as D, u as W, f as _, g as c } from "../../_chunks/calendar-workspace-Bx8xxvic.js";
1
+ import { C as s, a as r, b as E, c as P, D as S, d as o, S as C, V as t, W as d, e as A, i, m as n, r as D, u as W, f as _, g as c } from "../../_chunks/calendar-workspace-DhXqqu-D.js";
2
2
  export {
3
3
  s as CALENDAR_PREFERENCE_KEYS,
4
4
  r as CalendarDataProvider,
@@ -1,4 +1,4 @@
1
- import { C as l, M as o } from "../../_chunks/marketplace-app-shell-D_g9BaDI.js";
1
+ import { C as l, M as o } from "../../_chunks/marketplace-app-shell-DdwPj03y.js";
2
2
  export {
3
3
  l as ConnectWithAlfadocs,
4
4
  o as MarketplaceAppShell