@urbicon-ui/blocks 6.19.2 → 6.21.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 (30) hide show
  1. package/dist/components/Calendar/Calendar.svelte +8 -0
  2. package/dist/components/Calendar/CalendarGrid.svelte +19 -77
  3. package/dist/components/Calendar/calendar.context.d.ts +2 -0
  4. package/dist/components/Calendar/calendar.variants.d.ts +62 -62
  5. package/dist/i18n/index.d.ts +372 -2
  6. package/dist/icons/IconProvider.svelte +3 -0
  7. package/dist/mint/styles.css +1 -1
  8. package/dist/primitives/Accordion/Accordion.svelte +3 -0
  9. package/dist/primitives/Alert/alert.variants.d.ts +7 -7
  10. package/dist/primitives/Avatar/Avatar.svelte +74 -48
  11. package/dist/primitives/Avatar/avatar.variants.d.ts +32 -6
  12. package/dist/primitives/Avatar/avatar.variants.js +43 -18
  13. package/dist/primitives/Avatar/index.d.ts +6 -1
  14. package/dist/primitives/Checkbox/Checkbox.svelte +7 -4
  15. package/dist/primitives/Collapsible/Collapsible.svelte +3 -0
  16. package/dist/primitives/ConfirmDialog/index.d.ts +12 -0
  17. package/dist/primitives/Dialog/Dialog.svelte +2 -0
  18. package/dist/primitives/Drawer/Drawer.svelte +3 -1
  19. package/dist/primitives/JourneyTimeline/journey-timeline.variants.d.ts +21 -21
  20. package/dist/primitives/Menu/MenuSubmenu.svelte +1 -0
  21. package/dist/primitives/Select/Select.svelte +1 -1
  22. package/dist/primitives/Spinner/spinner.variants.d.ts +15 -15
  23. package/dist/primitives/Stepper/stepper.variants.d.ts +10 -10
  24. package/dist/primitives/Tab/Tab.svelte +3 -0
  25. package/dist/primitives/Toast/toast.variants.d.ts +8 -8
  26. package/dist/primitives/Toggle/Toggle.svelte +7 -4
  27. package/dist/primitives/Tooltip/tooltip.variants.d.ts +2 -2
  28. package/dist/style/interaction.css +1 -1
  29. package/dist/system/attachments/ContextIsolation.svelte +2 -0
  30. package/package.json +3 -3
@@ -29,35 +29,38 @@ export declare const avatarVariants: (props?: import("../../utils/variants.js").
29
29
  variant: {
30
30
  circle: {
31
31
  base: string;
32
+ frame: string;
32
33
  image: string;
33
34
  };
34
35
  rounded: {
35
36
  base: string;
37
+ frame: string;
36
38
  image: string;
37
39
  };
38
40
  square: {
39
41
  base: string;
42
+ frame: string;
40
43
  image: string;
41
44
  };
42
45
  };
43
46
  intent: {
44
47
  primary: {
45
- base: string;
48
+ frame: string;
46
49
  };
47
50
  secondary: {
48
- base: string;
51
+ frame: string;
49
52
  };
50
53
  success: {
51
- base: string;
54
+ frame: string;
52
55
  };
53
56
  warning: {
54
- base: string;
57
+ frame: string;
55
58
  };
56
59
  danger: {
57
- base: string;
60
+ frame: string;
58
61
  };
59
62
  neutral: {
60
- base: string;
63
+ frame: string;
61
64
  };
62
65
  };
63
66
  status: {
@@ -88,6 +91,11 @@ export declare const avatarVariants: (props?: import("../../utils/variants.js").
88
91
  status: string;
89
92
  };
90
93
  };
94
+ pulse: {
95
+ true: {
96
+ status: string;
97
+ };
98
+ };
91
99
  ring: {
92
100
  true: {
93
101
  base: string;
@@ -125,6 +133,21 @@ export declare const avatarVariants: (props?: import("../../utils/variants.js").
125
133
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
126
134
  status?: "offline" | "online" | "away" | "busy" | undefined;
127
135
  statusPosition?: "bottom-right" | "top-right" | "bottom-left" | "top-left" | undefined;
136
+ pulse?: boolean | undefined;
137
+ ring?: boolean | undefined;
138
+ ringIntent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
139
+ interactive?: boolean | undefined;
140
+ } & {
141
+ class?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
142
+ className?: string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | (string | false | /*elided*/ any | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined)[] | null | undefined;
143
+ }) | undefined) => string;
144
+ frame: (props?: ({
145
+ size?: "sm" | "md" | "lg" | "xl" | "xs" | "2xl" | undefined;
146
+ variant?: "rounded" | "circle" | "square" | undefined;
147
+ intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
148
+ status?: "offline" | "online" | "away" | "busy" | undefined;
149
+ statusPosition?: "bottom-right" | "top-right" | "bottom-left" | "top-left" | undefined;
150
+ pulse?: boolean | undefined;
128
151
  ring?: boolean | undefined;
129
152
  ringIntent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
130
153
  interactive?: boolean | undefined;
@@ -138,6 +161,7 @@ export declare const avatarVariants: (props?: import("../../utils/variants.js").
138
161
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
139
162
  status?: "offline" | "online" | "away" | "busy" | undefined;
140
163
  statusPosition?: "bottom-right" | "top-right" | "bottom-left" | "top-left" | undefined;
164
+ pulse?: boolean | undefined;
141
165
  ring?: boolean | undefined;
142
166
  ringIntent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
143
167
  interactive?: boolean | undefined;
@@ -151,6 +175,7 @@ export declare const avatarVariants: (props?: import("../../utils/variants.js").
151
175
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
152
176
  status?: "offline" | "online" | "away" | "busy" | undefined;
153
177
  statusPosition?: "bottom-right" | "top-right" | "bottom-left" | "top-left" | undefined;
178
+ pulse?: boolean | undefined;
154
179
  ring?: boolean | undefined;
155
180
  ringIntent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
156
181
  interactive?: boolean | undefined;
@@ -164,6 +189,7 @@ export declare const avatarVariants: (props?: import("../../utils/variants.js").
164
189
  intent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
165
190
  status?: "offline" | "online" | "away" | "busy" | undefined;
166
191
  statusPosition?: "bottom-right" | "top-right" | "bottom-left" | "top-left" | undefined;
192
+ pulse?: boolean | undefined;
167
193
  ring?: boolean | undefined;
168
194
  ringIntent?: "primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | undefined;
169
195
  interactive?: boolean | undefined;
@@ -1,10 +1,19 @@
1
1
  import { tv } from '../../utils/variants.js';
2
2
  export const avatarVariants = tv({
3
3
  slots: {
4
+ // Outer positioning context. Carries sizing, the ring, interactive/mint
5
+ // effects — but NOT `overflow-hidden`, so the status dot (a sibling of
6
+ // `frame`) is never clipped (AVT-1). The radius is mirrored here purely so
7
+ // the ring follows the avatar's shape.
4
8
  base: [
5
- 'relative inline-flex items-center justify-center',
6
- 'overflow-hidden font-semibold text-center select-none shrink-0',
7
- 'transition-[color,background-color,border-color,box-shadow,opacity] duration-[var(--blocks-duration-fast)] ease-out',
9
+ 'relative inline-flex shrink-0',
10
+ 'transition-[color,background-color,border-color,box-shadow,opacity] duration-[var(--blocks-duration-fast)] ease-out'
11
+ ],
12
+ // The visible disc. This is the element that clips the image/initials to
13
+ // the avatar shape; the status dot lives outside it so it stays whole.
14
+ frame: [
15
+ 'flex items-center justify-center w-full h-full overflow-hidden',
16
+ 'font-semibold text-center select-none',
8
17
  'bg-surface-interactive text-text-secondary'
9
18
  ],
10
19
  image: ['w-full h-full object-cover'],
@@ -42,61 +51,68 @@ export const avatarVariants = tv({
42
51
  // people and stand apart from the commit/modify/contain semantic system —
43
52
  // a brand that flattens commit-tier surfaces (e.g. squared pill-buttons)
44
53
  // should not also lose circular avatars. The radii below are physical
45
- // shape tokens, not tier tokens.
54
+ // shape tokens, not tier tokens. `frame` clips the content to the shape;
55
+ // `base` mirrors it so the ring tracks the same silhouette.
46
56
  variant: {
47
57
  circle: {
48
58
  base: 'rounded-full',
59
+ frame: 'rounded-full',
49
60
  image: 'rounded-full'
50
61
  },
51
62
  rounded: {
52
63
  // Avatar-specific soft-square. Maps to --radius-xl (foundation scale);
53
64
  // brands tune via the foundation token, not via a tier override.
54
65
  base: 'rounded-xl',
66
+ frame: 'rounded-xl',
55
67
  image: 'rounded-xl'
56
68
  },
57
69
  square: {
58
70
  base: 'rounded-none',
71
+ frame: 'rounded-none',
59
72
  image: 'rounded-none'
60
73
  }
61
74
  },
62
75
  intent: {
63
76
  primary: {
64
- base: 'bg-primary-subtle text-primary-emphasis'
77
+ frame: 'bg-primary-subtle text-primary-emphasis'
65
78
  },
66
79
  secondary: {
67
- base: 'bg-secondary-subtle text-secondary-emphasis'
80
+ frame: 'bg-secondary-subtle text-secondary-emphasis'
68
81
  },
69
82
  success: {
70
- base: 'bg-success-subtle text-success-emphasis'
83
+ frame: 'bg-success-subtle text-success-emphasis'
71
84
  },
72
85
  warning: {
73
- base: 'bg-warning-subtle text-warning-emphasis'
86
+ frame: 'bg-warning-subtle text-warning-emphasis'
74
87
  },
75
88
  danger: {
76
- base: 'bg-danger-subtle text-danger-emphasis'
89
+ frame: 'bg-danger-subtle text-danger-emphasis'
77
90
  },
78
91
  neutral: {
79
- base: 'bg-surface-interactive text-text-secondary'
92
+ frame: 'bg-surface-interactive text-text-secondary'
80
93
  }
81
94
  },
95
+ // Each status also publishes its colour as `--blocks-avatar-pulse-color`
96
+ // so the opt-in `pulse` ring (see Avatar.svelte) radiates in the matching
97
+ // hue without a second colour source.
82
98
  status: {
83
99
  online: {
84
- status: 'bg-success'
100
+ status: 'bg-success [--blocks-avatar-pulse-color:var(--color-success)]'
85
101
  },
86
102
  offline: {
87
- status: 'bg-text-quaternary'
103
+ status: 'bg-text-quaternary [--blocks-avatar-pulse-color:var(--color-text-quaternary)]'
88
104
  },
89
105
  away: {
90
- status: 'bg-warning'
106
+ status: 'bg-warning [--blocks-avatar-pulse-color:var(--color-warning)]'
91
107
  },
92
108
  busy: {
93
- status: 'bg-danger'
109
+ status: 'bg-danger [--blocks-avatar-pulse-color:var(--color-danger)]'
94
110
  }
95
111
  },
96
- // Status dot is translated out of the avatar's overflow-hidden edge so it
97
- // remains fully visible on circular avatars (AVT-1). Translation magnitude
98
- // is intentionally fractional — the dot sits half-overlapping the edge,
99
- // which matches the conventional badge look (Slack, Discord, Linear).
112
+ // Status dot is translated out of the avatar's edge so it half-overlaps the
113
+ // corner (AVT-1). Translation magnitude is intentionally fractional — the
114
+ // dot sits half-overlapping the edge, which matches the conventional badge
115
+ // look (Slack, Discord, Linear).
100
116
  statusPosition: {
101
117
  'bottom-right': {
102
118
  status: 'bottom-0 right-0 translate-x-1/4 translate-y-1/4'
@@ -111,6 +127,14 @@ export const avatarVariants = tv({
111
127
  status: 'top-0 left-0 -translate-x-1/4 -translate-y-1/4'
112
128
  }
113
129
  },
130
+ // Opt-in "live" pulse on the status dot — a radar ring that draws the eye to
131
+ // presence changes. Only has a visible effect together with `status`; the
132
+ // animation itself + reduced-motion handling live in Avatar.svelte.
133
+ pulse: {
134
+ true: {
135
+ status: 'blocks-avatar-status-pulse'
136
+ }
137
+ },
114
138
  ring: {
115
139
  true: {
116
140
  base: 'ring-2 ring-offset-2 ring-offset-surface-base'
@@ -184,6 +208,7 @@ export const avatarVariants = tv({
184
208
  variant: 'circle',
185
209
  intent: 'neutral',
186
210
  statusPosition: 'bottom-right',
211
+ pulse: false,
187
212
  ring: false,
188
213
  ringIntent: 'primary',
189
214
  interactive: false
@@ -17,6 +17,11 @@ import type { AvatarSlots, AvatarVariants } from './avatar.variants.js';
17
17
  * ```svelte
18
18
  * <Avatar name="Jane Smith" randomColor clickable onclick={() => showProfile()} />
19
19
  * ```
20
+ *
21
+ * @example
22
+ * ```svelte
23
+ * <Avatar name="Ada Lovelace" status="online" pulse />
24
+ * ```
20
25
  */
21
26
  export interface AvatarProps extends AvatarVariants, Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
22
27
  /** Image URL. Falls back to initials or `children` when empty or on load error. */
@@ -43,7 +48,7 @@ export interface AvatarProps extends AvatarVariants, Omit<HTMLAttributes<HTMLDiv
43
48
  class?: string;
44
49
  /** Remove all default tv classes. */
45
50
  unstyled?: boolean;
46
- /** Per-slot class overrides merged with tv styles. Slots: base | image | fallback | status */
51
+ /** Per-slot class overrides merged with tv styles. Slots: base | frame | image | fallback | status */
47
52
  slotClasses?: Partial<Record<AvatarSlots, string>>;
48
53
  /**
49
54
  * Apply a named preset registered via `<BlocksProvider presets={{ Avatar: {...} }}>`.
@@ -54,7 +54,7 @@
54
54
  const blocksConfig = getBlocksConfig();
55
55
  const unstyled = $derived(unstyledProp || blocksConfig?.unstyled || false);
56
56
 
57
- let controlElement = $state<HTMLElement>();
57
+ let boxElement = $state<HTMLElement>();
58
58
  let inputRef = $state<HTMLInputElement>();
59
59
 
60
60
  const dataState = $derived(indeterminate ? 'indeterminate' : checked ? 'checked' : 'unchecked');
@@ -85,9 +85,12 @@
85
85
  }
86
86
  });
87
87
 
88
+ // Mint targets the directional box (the visual checkbox), not the enclosing
89
+ // <label> that also wraps the text — a hover/scale effect belongs to the
90
+ // control surface, mirroring SegmentItem/Button (XC-1).
88
91
  $effect(() => {
89
- if (controlElement && mint && mint !== 'none' && !disabled) {
90
- return mintRegistry.apply(controlElement, mint);
92
+ if (boxElement && mint && mint !== 'none' && !disabled) {
93
+ return mintRegistry.apply(boxElement, mint);
91
94
  }
92
95
  });
93
96
 
@@ -111,7 +114,6 @@
111
114
  class={unstyled
112
115
  ? (slotClasses?.control ?? '')
113
116
  : styles.control({ class: slotClasses?.control })}
114
- bind:this={controlElement}
115
117
  for={id}
116
118
  >
117
119
  <input
@@ -133,6 +135,7 @@
133
135
 
134
136
  <span
135
137
  class={unstyled ? (slotClasses?.box ?? '') : styles.box({ class: slotClasses?.box })}
138
+ bind:this={boxElement}
136
139
  aria-hidden="true"
137
140
  data-state={dataState}
138
141
  >
@@ -28,6 +28,9 @@
28
28
  const blocksConfig = getBlocksConfig();
29
29
  const unstyled = $derived(unstyledProp || blocksConfig?.unstyled || false);
30
30
 
31
+ // Uncontrolled seed: capture only the initial `defaultOpen`; later changes
32
+ // must not clobber user interaction.
33
+ // svelte-ignore state_referenced_locally
31
34
  let internalOpen = $state(defaultOpen ?? false);
32
35
  const isOpen = $derived(open !== undefined ? open : internalOpen);
33
36
 
@@ -74,6 +74,18 @@ export interface ConfirmDialogProps {
74
74
  closeOnBackdropClick?: boolean;
75
75
  /** Whether Escape cancels. @default true */
76
76
  closeOnEscape?: boolean;
77
+ /**
78
+ * Override the enter/exit animation duration in milliseconds, forwarded to
79
+ * the underlying {@link Dialog}. Defaults to the overlay token
80
+ * `--blocks-overlay-enter-duration` / `--blocks-overlay-exit-duration`
81
+ * (200ms / 180ms). Respects `prefers-reduced-motion`.
82
+ */
83
+ transitionDuration?: number;
84
+ /**
85
+ * Override the enter/exit easing function, forwarded to the underlying
86
+ * {@link Dialog}. Defaults to the overlay token easing (`quintOut`).
87
+ */
88
+ transitionEasing?: (t: number) => number;
77
89
  /** Optional richer markup rendered below `description`. */
78
90
  children?: Snippet;
79
91
  }
@@ -41,6 +41,8 @@
41
41
  ...restProps
42
42
  }: DialogProps = $props();
43
43
 
44
+ // One-shot DEV sanity check on the initial close-path configuration.
45
+ // svelte-ignore state_referenced_locally
44
46
  if (
45
47
  import.meta.env?.DEV &&
46
48
  hideCloseButton &&
@@ -41,6 +41,8 @@
41
41
  ...restProps
42
42
  }: DrawerProps = $props();
43
43
 
44
+ // One-shot DEV sanity check on the initial close-path configuration.
45
+ // svelte-ignore state_referenced_locally
44
46
  if (
45
47
  import.meta.env?.DEV &&
46
48
  hideCloseButton &&
@@ -61,7 +63,7 @@
61
63
  let previouslyFocused: HTMLElement | null = null;
62
64
 
63
65
  const uid = $props.id();
64
- const titleId = title ? `drawer-title-${uid}` : undefined;
66
+ const titleId = $derived(title ? `drawer-title-${uid}` : undefined);
65
67
  const bodyId = `drawer-body-${uid}`;
66
68
  const overlayId = `drawer-${uid}`;
67
69
 
@@ -136,7 +136,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
136
136
  base: (props?: ({
137
137
  orientation?: "horizontal" | "vertical" | undefined;
138
138
  size?: "sm" | "md" | "lg" | undefined;
139
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
139
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
140
140
  focused?: boolean | undefined;
141
141
  interactive?: boolean | undefined;
142
142
  travelled?: boolean | undefined;
@@ -150,7 +150,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
150
150
  rail: (props?: ({
151
151
  orientation?: "horizontal" | "vertical" | undefined;
152
152
  size?: "sm" | "md" | "lg" | undefined;
153
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
153
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
154
154
  focused?: boolean | undefined;
155
155
  interactive?: boolean | undefined;
156
156
  travelled?: boolean | undefined;
@@ -164,7 +164,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
164
164
  node: (props?: ({
165
165
  orientation?: "horizontal" | "vertical" | undefined;
166
166
  size?: "sm" | "md" | "lg" | undefined;
167
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
167
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
168
168
  focused?: boolean | undefined;
169
169
  interactive?: boolean | undefined;
170
170
  travelled?: boolean | undefined;
@@ -178,7 +178,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
178
178
  metaColumn: (props?: ({
179
179
  orientation?: "horizontal" | "vertical" | undefined;
180
180
  size?: "sm" | "md" | "lg" | undefined;
181
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
181
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
182
182
  focused?: boolean | undefined;
183
183
  interactive?: boolean | undefined;
184
184
  travelled?: boolean | undefined;
@@ -192,7 +192,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
192
192
  meta: (props?: ({
193
193
  orientation?: "horizontal" | "vertical" | undefined;
194
194
  size?: "sm" | "md" | "lg" | undefined;
195
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
195
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
196
196
  focused?: boolean | undefined;
197
197
  interactive?: boolean | undefined;
198
198
  travelled?: boolean | undefined;
@@ -206,7 +206,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
206
206
  markerColumn: (props?: ({
207
207
  orientation?: "horizontal" | "vertical" | undefined;
208
208
  size?: "sm" | "md" | "lg" | undefined;
209
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
209
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
210
210
  focused?: boolean | undefined;
211
211
  interactive?: boolean | undefined;
212
212
  travelled?: boolean | undefined;
@@ -220,7 +220,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
220
220
  marker: (props?: ({
221
221
  orientation?: "horizontal" | "vertical" | undefined;
222
222
  size?: "sm" | "md" | "lg" | undefined;
223
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
223
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
224
224
  focused?: boolean | undefined;
225
225
  interactive?: boolean | undefined;
226
226
  travelled?: boolean | undefined;
@@ -234,7 +234,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
234
234
  connector: (props?: ({
235
235
  orientation?: "horizontal" | "vertical" | undefined;
236
236
  size?: "sm" | "md" | "lg" | undefined;
237
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
237
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
238
238
  focused?: boolean | undefined;
239
239
  interactive?: boolean | undefined;
240
240
  travelled?: boolean | undefined;
@@ -248,7 +248,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
248
248
  content: (props?: ({
249
249
  orientation?: "horizontal" | "vertical" | undefined;
250
250
  size?: "sm" | "md" | "lg" | undefined;
251
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
251
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
252
252
  focused?: boolean | undefined;
253
253
  interactive?: boolean | undefined;
254
254
  travelled?: boolean | undefined;
@@ -262,7 +262,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
262
262
  card: (props?: ({
263
263
  orientation?: "horizontal" | "vertical" | undefined;
264
264
  size?: "sm" | "md" | "lg" | undefined;
265
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
265
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
266
266
  focused?: boolean | undefined;
267
267
  interactive?: boolean | undefined;
268
268
  travelled?: boolean | undefined;
@@ -276,7 +276,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
276
276
  header: (props?: ({
277
277
  orientation?: "horizontal" | "vertical" | undefined;
278
278
  size?: "sm" | "md" | "lg" | undefined;
279
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
279
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
280
280
  focused?: boolean | undefined;
281
281
  interactive?: boolean | undefined;
282
282
  travelled?: boolean | undefined;
@@ -290,7 +290,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
290
290
  trigger: (props?: ({
291
291
  orientation?: "horizontal" | "vertical" | undefined;
292
292
  size?: "sm" | "md" | "lg" | undefined;
293
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
293
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
294
294
  focused?: boolean | undefined;
295
295
  interactive?: boolean | undefined;
296
296
  travelled?: boolean | undefined;
@@ -304,7 +304,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
304
304
  trailing: (props?: ({
305
305
  orientation?: "horizontal" | "vertical" | undefined;
306
306
  size?: "sm" | "md" | "lg" | undefined;
307
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
307
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
308
308
  focused?: boolean | undefined;
309
309
  interactive?: boolean | undefined;
310
310
  travelled?: boolean | undefined;
@@ -318,7 +318,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
318
318
  labelGroup: (props?: ({
319
319
  orientation?: "horizontal" | "vertical" | undefined;
320
320
  size?: "sm" | "md" | "lg" | undefined;
321
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
321
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
322
322
  focused?: boolean | undefined;
323
323
  interactive?: boolean | undefined;
324
324
  travelled?: boolean | undefined;
@@ -332,7 +332,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
332
332
  title: (props?: ({
333
333
  orientation?: "horizontal" | "vertical" | undefined;
334
334
  size?: "sm" | "md" | "lg" | undefined;
335
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
335
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
336
336
  focused?: boolean | undefined;
337
337
  interactive?: boolean | undefined;
338
338
  travelled?: boolean | undefined;
@@ -346,7 +346,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
346
346
  subtitle: (props?: ({
347
347
  orientation?: "horizontal" | "vertical" | undefined;
348
348
  size?: "sm" | "md" | "lg" | undefined;
349
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
349
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
350
350
  focused?: boolean | undefined;
351
351
  interactive?: boolean | undefined;
352
352
  travelled?: boolean | undefined;
@@ -360,7 +360,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
360
360
  segment: (props?: ({
361
361
  orientation?: "horizontal" | "vertical" | undefined;
362
362
  size?: "sm" | "md" | "lg" | undefined;
363
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
363
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
364
364
  focused?: boolean | undefined;
365
365
  interactive?: boolean | undefined;
366
366
  travelled?: boolean | undefined;
@@ -374,7 +374,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
374
374
  detail: (props?: ({
375
375
  orientation?: "horizontal" | "vertical" | undefined;
376
376
  size?: "sm" | "md" | "lg" | undefined;
377
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
377
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
378
378
  focused?: boolean | undefined;
379
379
  interactive?: boolean | undefined;
380
380
  travelled?: boolean | undefined;
@@ -388,7 +388,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
388
388
  detailInner: (props?: ({
389
389
  orientation?: "horizontal" | "vertical" | undefined;
390
390
  size?: "sm" | "md" | "lg" | undefined;
391
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
391
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
392
392
  focused?: boolean | undefined;
393
393
  interactive?: boolean | undefined;
394
394
  travelled?: boolean | undefined;
@@ -402,7 +402,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
402
402
  detailContent: (props?: ({
403
403
  orientation?: "horizontal" | "vertical" | undefined;
404
404
  size?: "sm" | "md" | "lg" | undefined;
405
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
405
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
406
406
  focused?: boolean | undefined;
407
407
  interactive?: boolean | undefined;
408
408
  travelled?: boolean | undefined;
@@ -416,7 +416,7 @@ export declare const journeyTimelineVariants: (props?: import("../../utils/varia
416
416
  panel: (props?: ({
417
417
  orientation?: "horizontal" | "vertical" | undefined;
418
418
  size?: "sm" | "md" | "lg" | undefined;
419
- status?: "active" | "blocked" | "attention" | "complete" | "pending" | "skipped" | undefined;
419
+ status?: "complete" | "active" | "pending" | "attention" | "blocked" | "skipped" | undefined;
420
420
  focused?: boolean | undefined;
421
421
  interactive?: boolean | undefined;
422
422
  travelled?: boolean | undefined;
@@ -43,6 +43,7 @@
43
43
 
44
44
  // Provide parent id to descendants exactly once per component instance
45
45
  // so that nested MenuItem components can register with correct parent.
46
+ // svelte-ignore state_referenced_locally
46
47
  setMenuParentId(id);
47
48
 
48
49
  function toggleOpen() {
@@ -63,7 +63,7 @@
63
63
  // `<Select bind:value={x: T | null}>` narrow correctly. Internally we
64
64
  // dispatch through a loose alias so the component code can hand either
65
65
  // shape into `onValueChange` without per-branch casts at every call site.
66
- const dispatchValueChange = onValueChange as ((v: any) => void) | undefined;
66
+ const dispatchValueChange = $derived(onValueChange as ((v: any) => void) | undefined);
67
67
 
68
68
  /** Resolved null option config — `null` when prop is unset or `groups` is in use. */
69
69
  const nullOptionConfig = $derived.by(() => {