@devfellowship/components 1.4.0 → 2.0.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.
package/dist/index.d.ts CHANGED
@@ -1,9 +1,8 @@
1
1
  import * as React$1 from 'react';
2
- import { ReactNode } from 'react';
2
+ import React__default, { ReactNode } from 'react';
3
3
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
4
4
  import * as class_variance_authority_types from 'class-variance-authority/types';
5
5
  import { VariantProps } from 'class-variance-authority';
6
- import * as react_jsx_runtime from 'react/jsx-runtime';
7
6
  import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
8
7
  import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio';
9
8
  import * as AvatarPrimitive from '@radix-ui/react-avatar';
@@ -17,7 +16,6 @@ import * as DialogPrimitive from '@radix-ui/react-dialog';
17
16
  import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
18
17
  import { Drawer as Drawer$1 } from 'vaul';
19
18
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
20
- import * as _radix_ui_react_slot from '@radix-ui/react-slot';
21
19
  import * as react_hook_form from 'react-hook-form';
22
20
  import { FieldValues, FieldPath, ControllerProps } from 'react-hook-form';
23
21
  import * as LabelPrimitive from '@radix-ui/react-label';
@@ -43,7 +41,7 @@ import * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';
43
41
  import { LucideIcon } from 'lucide-react';
44
42
  export { c as cn } from './utils-Cbsgs0XP.js';
45
43
  export { ToastProps, ToastVariant, toast, useIframeAuth, useIframeNavigate, useIsMobile, useToast } from './hooks.js';
46
- export { A as AuthContextType, a as AuthProvider, b as AuthProviderProps, U as UserProfile, u as useAuth, c as useSession } from './use-auth-DdapDv2H.js';
44
+ export { A as AuthContextType, a as AuthProvider, b as AuthProviderProps, U as UserProfile, u as useAuth, c as useSession } from './use-auth-t8aJ9mx7.js';
47
45
  export { FeatureFlagProvider, FeatureFlagProviderProps, FeatureFlags, useFeatureFlag, useFeatureFlags } from './providers.js';
48
46
  import 'clsx';
49
47
  import '@supabase/supabase-js';
@@ -54,41 +52,146 @@ declare const AccordionTrigger: React$1.ForwardRefExoticComponent<Omit<Accordion
54
52
  declare const AccordionContent: React$1.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
55
53
 
56
54
  declare const Alert: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
57
- variant?: "default" | "destructive" | null | undefined;
55
+ variant?: "default" | "info" | "success" | "warning" | "danger" | "destructive" | null | undefined;
58
56
  } & class_variance_authority_types.ClassProp) | undefined) => string> & React$1.RefAttributes<HTMLDivElement>>;
59
57
  declare const AlertTitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLHeadingElement> & React$1.RefAttributes<HTMLParagraphElement>>;
60
58
  declare const AlertDescription: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
61
59
 
60
+ /**
61
+ * AlertDialog — DFL Design System v0
62
+ *
63
+ * Organism-level modal requiring explicit confirmation before a consequential
64
+ * action. Two semantic action variants:
65
+ *
66
+ * <AlertDialogAction> — neutral (amber primary)
67
+ * <AlertDialogAction variant="destructive"> — danger ghost-outline
68
+ *
69
+ * Tokens consumed (Layer 3):
70
+ * --c-alert-dialog-bg, --c-alert-dialog-border, --c-alert-dialog-radius,
71
+ * --c-alert-dialog-shadow, --c-alert-dialog-scrim,
72
+ * --c-alert-dialog-title-fg, --c-alert-dialog-desc-fg
73
+ *
74
+ * Focus ring: uniform 2px-gap + 1px-amber box-shadow on every focusable
75
+ * element (Cancel, Action, Trigger). Applied via focus-visible: override that
76
+ * replaces the generic button ring-3 approach.
77
+ */
62
78
  declare const AlertDialog: React$1.FC<AlertDialogPrimitive.AlertDialogProps>;
63
79
  declare const AlertDialogTrigger: React$1.ForwardRefExoticComponent<AlertDialogPrimitive.AlertDialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
64
80
  declare const AlertDialogPortal: React$1.FC<AlertDialogPrimitive.AlertDialogPortalProps>;
65
81
  declare const AlertDialogOverlay: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogOverlayProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
66
82
  declare const AlertDialogContent: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
67
83
  declare const AlertDialogHeader: {
68
- ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
84
+ ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): React$1.JSX.Element;
69
85
  displayName: string;
70
86
  };
71
87
  declare const AlertDialogFooter: {
72
- ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
88
+ ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): React$1.JSX.Element;
73
89
  displayName: string;
74
90
  };
75
91
  declare const AlertDialogTitle: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>, "ref"> & React$1.RefAttributes<HTMLHeadingElement>>;
76
92
  declare const AlertDialogDescription: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
77
- declare const AlertDialogAction: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogActionProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
93
+ /** Props for AlertDialogAction extends Radix Action with a semantic variant. */
94
+ interface AlertDialogActionProps extends React$1.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action> {
95
+ /**
96
+ * "default" — amber primary (neutral confirmation, e.g. "Continue")
97
+ * "destructive" — danger ghost-outline (irreversible action, e.g. "Delete account")
98
+ *
99
+ * @default "default"
100
+ */
101
+ variant?: "default" | "destructive";
102
+ }
103
+ declare const AlertDialogAction: React$1.ForwardRefExoticComponent<AlertDialogActionProps & React$1.RefAttributes<HTMLButtonElement>>;
78
104
  declare const AlertDialogCancel: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
79
105
 
80
- declare function AspectRatio({ ...props }: React$1.ComponentProps<typeof AspectRatioPrimitive.Root>): react_jsx_runtime.JSX.Element;
106
+ declare function AspectRatio({ ...props }: React$1.ComponentProps<typeof AspectRatioPrimitive.Root>): React$1.JSX.Element;
81
107
 
82
- declare const Avatar: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
108
+ /** Size scale for Avatar drives both the circle dimensions and fallback font-size. */
109
+ type AvatarSize = "sm" | "md" | "default" | "lg" | "xl";
110
+ declare const Avatar: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & {
111
+ /**
112
+ * Circle diameter preset.
113
+ * sm=24px · md=32px · default=40px · lg=48px · xl=64px
114
+ *
115
+ * For stacked avatar groups, add a separator ring via outline:
116
+ * `outline: 2px solid var(--c-avatar-ring)`
117
+ */
118
+ size?: AvatarSize;
119
+ } & React$1.RefAttributes<HTMLSpanElement>>;
83
120
  declare const AvatarImage: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarImageProps & React$1.RefAttributes<HTMLImageElement>, "ref"> & React$1.RefAttributes<HTMLImageElement>>;
84
- declare const AvatarFallback: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarFallbackProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
121
+ declare const AvatarFallback: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarFallbackProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & {
122
+ /** Background tone — default | brand (amber) | member (hashed). */
123
+ tone?: AvatarTone;
124
+ /** Seed for deterministic member colour (only used when tone="member"). */
125
+ seed?: string;
126
+ } & React$1.RefAttributes<HTMLSpanElement>>;
127
+ /** Fallback background tone.
128
+ * default — neutral elevated surface (--c-avatar-fallback-bg).
129
+ * brand — DFL amber (--c-avatar-brand-bg), the "branded" avatar.
130
+ * member — deterministic colour hashed from `seed` (member palette).
131
+ */
132
+ type AvatarTone = "default" | "brand" | "member";
133
+ /** Number of colours in the deterministic member palette (--c-avatar-member-N). */
134
+ declare const AVATAR_MEMBER_PALETTE_SIZE = 12;
135
+ /**
136
+ * Deterministic member colour — hashes a seed (name / initials / id) into a
137
+ * stable `var(--c-avatar-member-N)` token so a given person is ALWAYS the same
138
+ * colour across the app.
139
+ */
140
+ declare function avatarMemberColor(seed: string): string;
141
+ type AvatarStatusValue = "online" | "away" | "offline";
142
+ /**
143
+ * Presence indicator — a coloured dot pinned to the bottom-right of the Avatar,
144
+ * ringed in the page colour. Render as a sibling of AvatarImage/AvatarFallback
145
+ * INSIDE <Avatar> (which is `position: relative`).
146
+ */
147
+ declare const AvatarStatus: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLSpanElement> & {
148
+ status?: AvatarStatusValue;
149
+ } & React$1.RefAttributes<HTMLSpanElement>>;
150
+ /**
151
+ * Overlapping avatar stack. Each child avatar gets a page-coloured separator
152
+ * ring (box-shadow) and a negative left margin so they tuck under the previous
153
+ * one. `max` truncates and appends a "+N" fallback avatar.
154
+ */
155
+ declare const AvatarGroup: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & {
156
+ /** Overlap amount in px (negative margin). Default 8. */
157
+ spacing?: number;
158
+ /** Show at most `max` avatars; the rest collapse into a "+N" chip. */
159
+ max?: number;
160
+ } & React$1.RefAttributes<HTMLDivElement>>;
85
161
 
162
+ /**
163
+ * Badge — DFL Design System v0
164
+ *
165
+ * Tokens consumed (all pre-existing):
166
+ * Shape: --c-pill-radius (999px, default), --c-badge-radius (4px, square)
167
+ * Brand: --s-brand-subtle / --s-brand-fg / --s-brand-border
168
+ * Danger: --s-danger-subtle / --s-danger-fg / --s-danger-border
169
+ * Success: --s-success-subtle / --s-success-fg / --s-success-border
170
+ * Warning: --s-warning-subtle / --s-warning-fg / --s-warning-border
171
+ * Info: --s-info-subtle / --s-info-fg / --s-info-border
172
+ * Surface: --s-surface-raised / --s-ink-secondary / --s-border-subtle
173
+ * Outline: --s-border-strong
174
+ *
175
+ * Variants: default | secondary | danger | outline | success | warning | info
176
+ * (`destructive` kept as legacy alias → same styles as `danger`)
177
+ * Shapes: pill (default) | square
178
+ *
179
+ * Focus ring: DS-uniform amber box-shadow via :focus-visible (badge must
180
+ * receive tabIndex={0} + role when used as a filter chip / interactive element).
181
+ */
86
182
  declare const badgeVariants: (props?: ({
87
- variant?: "default" | "destructive" | "secondary" | "outline" | null | undefined;
183
+ variant?: "default" | "info" | "success" | "warning" | "danger" | "destructive" | "secondary" | "outline" | null | undefined;
184
+ shape?: "pill" | "square" | null | undefined;
185
+ fill?: "solid" | "subtle" | null | undefined;
88
186
  } & class_variance_authority_types.ClassProp) | undefined) => string;
89
187
  interface BadgeProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
188
+ /**
189
+ * Render a leading status dot (coloured with the badge's own text/intent
190
+ * colour via currentColor). For presence/status chips — "● Active".
191
+ */
192
+ dot?: boolean;
90
193
  }
91
- declare function Badge({ className, variant, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
194
+ declare function Badge({ className, variant, shape, fill, dot, children, ...props }: BadgeProps): React$1.JSX.Element;
92
195
 
93
196
  declare const Breadcrumb: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & {
94
197
  separator?: React$1.ReactNode;
@@ -100,11 +203,11 @@ declare const BreadcrumbLink: React$1.ForwardRefExoticComponent<Omit<React$1.Det
100
203
  } & React$1.RefAttributes<HTMLAnchorElement>>;
101
204
  declare const BreadcrumbPage: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
102
205
  declare const BreadcrumbSeparator: {
103
- ({ children, className, ...props }: React$1.ComponentProps<"li">): react_jsx_runtime.JSX.Element;
206
+ ({ children, className, ...props }: React$1.ComponentProps<"li">): React$1.JSX.Element;
104
207
  displayName: string;
105
208
  };
106
209
  declare const BreadcrumbEllipsis: {
107
- ({ className, ...props }: React$1.ComponentProps<"span">): react_jsx_runtime.JSX.Element;
210
+ ({ className, ...props }: React$1.ComponentProps<"button">): React$1.JSX.Element;
108
211
  displayName: string;
109
212
  };
110
213
 
@@ -114,19 +217,27 @@ declare const BreadcrumbEllipsis: {
114
217
  * Tokens consumed:
115
218
  * --c-button-radius, --c-button-font-weight
116
219
  * --c-button-{primary,secondary,ghost,destructive,success}-{bg,fg,border,bg-hover,border-hover,bg-active}
117
- * --s-brand-ring (focus ring)
220
+ *
221
+ * Focus ring (brand spec ch.5.2):
222
+ * box-shadow: 0 0 0 2px var(--s-surface-page), 0 0 0 3px #E07A4A
223
+ * 2px page-bg gap + 1px solid amber — no alpha bleed on dark bg.
224
+ * (Replaces the old `--s-brand-ring: rgba(224,122,74,.45)` ring which had no
225
+ * gap and alpha-diluted amber into a glow instead of a crisp indicator.)
118
226
  *
119
227
  * Variants: primary (default), secondary, outline, ghost, destructive, success, link
120
228
  * Sizes: sm (28px), default (34px — DS v0 spec), lg (40px), icon (square 34)
229
+ * Shape: rounded (default: --c-button-radius md), pill (--p-radius-pill 999px)
121
230
  *
122
231
  * Additive props (v1.0.0):
123
232
  * loading — disables button + shows spinner + keeps width
124
233
  * kbd — renders <kbd> hint at the right (e.g. ⌘K)
234
+ * rounded — "default" | "pill" shape modifier (token-driven, not raw Tailwind)
125
235
  * asChild — render as a child Slot (Radix pattern, kept from shadcn)
126
236
  */
127
237
  declare const buttonVariants: (props?: ({
128
- variant?: "link" | "default" | "destructive" | "primary" | "secondary" | "outline" | "ghost" | "success" | null | undefined;
238
+ variant?: "link" | "default" | "success" | "destructive" | "primary" | "secondary" | "outline" | "ghost" | null | undefined;
129
239
  size?: "default" | "sm" | "lg" | "icon" | "icon-sm" | "icon-lg" | null | undefined;
240
+ rounded?: "default" | "pill" | null | undefined;
130
241
  } & class_variance_authority_types.ClassProp) | undefined) => string;
131
242
  interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
132
243
  asChild?: boolean;
@@ -135,19 +246,87 @@ interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement>, V
135
246
  }
136
247
  declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
137
248
 
249
+ /**
250
+ * Calendar — DFL Design System v0
251
+ *
252
+ * Tokens consumed (Layer 3 — component knobs):
253
+ * --c-cal-{bg,border,radius,padding}
254
+ * --c-cal-nav-btn-{bg,bg-hover,fg,fg-hover,border,border-hover,radius}
255
+ * --c-cal-{caption-fg,head-fg}
256
+ * --c-cal-day-{radius,fg,bg-hover,fg-outside}
257
+ * --c-cal-day-today-{bg,fg,border} ← tinted, NOT filled (distinct from selected)
258
+ * --c-cal-day-selected-{bg,fg,bg-hover}
259
+ * --c-cal-range-{mid,end}-{bg,fg}
260
+ * --c-cal-day-disabled-fg
261
+ *
262
+ * Focus ring: box-shadow 0 0 0 2px --c-cal-bg, 0 0 0 3px #E07A4A applied to
263
+ * nav buttons and day cells via :focus-visible (uniform DS amber spec).
264
+ *
265
+ * Key fixes vs. vanilla shadcn:
266
+ * - Today uses tinted bg + border, NOT the same solid fill as selected.
267
+ * - Nav buttons use surface-elevation tokens, NOT raw opacity tricks.
268
+ * - Disabled days use --s-ink-disabled at 0.45, cursor:not-allowed.
269
+ * - Range mid uses amber-14% tint with zero radius; start/end have
270
+ * half-rounded corners per DS radius spec.
271
+ */
138
272
  type CalendarProps = React$1.ComponentProps<typeof DayPicker>;
139
- declare function Calendar({ className, classNames, showOutsideDays, ...props }: CalendarProps): react_jsx_runtime.JSX.Element;
273
+ declare function Calendar({ className, classNames, showOutsideDays, ...props }: CalendarProps): React$1.JSX.Element;
140
274
  declare namespace Calendar {
141
275
  var displayName: string;
142
276
  }
143
277
 
278
+ /**
279
+ * Card — DFL Design System v0
280
+ *
281
+ * Tokens consumed (Layer 3 → Layer 2 → Layer 1):
282
+ * --c-card-bg background surface (→ --s-surface-panel)
283
+ * --c-card-border default border (→ --s-border-subtle)
284
+ * --c-card-border-hover hover / focus lift (→ --s-border-strong)
285
+ * --c-card-radius corner radius (→ --p-radius-lg = 10px)
286
+ * --c-card-padding inner section pad (→ --p-space-5 = 20px)
287
+ * --c-card-shadow resting shadow (→ --p-shadow-sm)
288
+ *
289
+ * Ink:
290
+ * --s-ink-primary CardTitle text
291
+ * --s-ink-muted CardDescription text
292
+ *
293
+ * Focus ring (DS uniform spec — a11y):
294
+ * Applied via focus-visible on any focusable card (role="button" + tabIndex).
295
+ * Renders: box-shadow 0 0 0 2px --s-surface-page (gap), 0 0 0 3px #E07A4A (ring).
296
+ *
297
+ * Hover (clickable cards):
298
+ * Consumers add className="hover:border-[var(--c-card-border-hover)] hover:shadow-[var(--p-shadow)]"
299
+ * transition already included on the base element.
300
+ */
144
301
  declare const Card: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
145
302
  declare const CardHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
146
- declare const CardTitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLHeadingElement> & React$1.RefAttributes<HTMLParagraphElement>>;
303
+ /**
304
+ * CardTitle — DS spec: 16px / 600 / −0.2px tracking / --s-ink-primary
305
+ * Replaces the shadcn default of text-2xl (24px) which is oversized for card context.
306
+ */
307
+ declare const CardTitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLHeadingElement> & React$1.RefAttributes<HTMLHeadingElement>>;
147
308
  declare const CardDescription: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
148
309
  declare const CardContent: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
149
310
  declare const CardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
150
311
 
312
+ /**
313
+ * Carousel — DFL Design System v0
314
+ *
315
+ * Tokens consumed:
316
+ * --c-carousel-nav-{bg,border,fg} default nav button state
317
+ * --c-carousel-nav-{bg,border,fg}-hover hover + focus state
318
+ * --c-carousel-nav-fg-disabled disabled arrow color (no opacity hack)
319
+ * --c-carousel-dot-{bg,active} pagination indicator
320
+ * --c-carousel-{dot-radius,radius} shape knobs
321
+ * backed by --s-surface-elevated, --s-ink-*, --s-brand-*, --s-border-*
322
+ *
323
+ * New in this revision:
324
+ * • Nav buttons styled with --c-carousel-nav-* tokens (amber hover/focus, no generic outline)
325
+ * • Carousel region receives tabIndex={0} + ds-focus-ring for keyboard users
326
+ * • Nav buttons receive ds-focus-ring for uniform DFL amber outline on :focus-visible
327
+ * • CarouselDots — pagination indicators that auto-detect scroll-snap count
328
+ * • Vertical orientation: ArrowUp/ArrowDown navigation (horizontal: ArrowLeft/ArrowRight)
329
+ */
151
330
  type CarouselApi = UseEmblaCarouselType[1];
152
331
  type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
153
332
  type CarouselOptions = UseCarouselParameters[0];
@@ -158,11 +337,38 @@ type CarouselProps = {
158
337
  orientation?: "horizontal" | "vertical";
159
338
  setApi?: (api: CarouselApi) => void;
160
339
  };
161
- declare function Carousel({ orientation, opts, setApi, plugins, className, children, ...props }: React$1.ComponentProps<"div"> & CarouselProps): react_jsx_runtime.JSX.Element;
162
- declare function CarouselContent({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
163
- declare function CarouselItem({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
164
- declare function CarouselPrevious({ className, variant, size, ...props }: React$1.ComponentProps<typeof Button>): react_jsx_runtime.JSX.Element;
165
- declare function CarouselNext({ className, variant, size, ...props }: React$1.ComponentProps<typeof Button>): react_jsx_runtime.JSX.Element;
340
+ declare function Carousel({ orientation, opts, setApi, plugins, className, children, ...props }: React$1.ComponentProps<"div"> & CarouselProps): React$1.JSX.Element;
341
+ declare function CarouselContent({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
342
+ declare function CarouselItem({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
343
+ /**
344
+ * CarouselPrevious
345
+ *
346
+ * Styled with --c-carousel-nav-* tokens (not the generic Button variant="outline").
347
+ * States:
348
+ * default → elevated bg, subtle border, secondary ink
349
+ * hover → brand-subtle bg, brand-border, amber-hover ink
350
+ * focus → same as hover + ds-focus-ring outline
351
+ * disabled → transparent bg, subtle border, ink-disabled (no opacity hack)
352
+ */
353
+ declare const CarouselPrevious: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
354
+ /**
355
+ * CarouselNext
356
+ *
357
+ * Mirror of CarouselPrevious. Disabled when no more slides to scroll.
358
+ */
359
+ declare const CarouselNext: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
360
+ /**
361
+ * CarouselDots
362
+ *
363
+ * Pagination indicators. Auto-detects scroll-snap count from the embla API
364
+ * so it reflects "page count" in multi-item views (e.g. 6 slides / 3-per-page = 2 dots),
365
+ * not raw slide count. Hidden (returns null) when there is only 1 snap.
366
+ *
367
+ * Tokens: --c-carousel-dot-{bg,active,radius}
368
+ */
369
+ declare function CarouselDots({ className }: {
370
+ className?: string;
371
+ }): React$1.JSX.Element | null;
166
372
 
167
373
  declare const THEMES: {
168
374
  readonly light: "";
@@ -180,14 +386,21 @@ type ChartConfig = {
180
386
  theme: Record<keyof typeof THEMES, string>;
181
387
  });
182
388
  };
183
- declare function ChartContainer({ id, className, children, config, ...props }: React$1.ComponentProps<"div"> & {
389
+ declare function ChartContainer({ id, className, children, config, isEmpty, emptyState, ...props }: React$1.ComponentProps<"div"> & {
184
390
  config: ChartConfig;
185
391
  children: React$1.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>["children"];
186
- }): react_jsx_runtime.JSX.Element;
392
+ /**
393
+ * When true, renders `emptyState` instead of the Recharts ResponsiveContainer.
394
+ * Use this when `data.length === 0` to show the muted no-data UI.
395
+ */
396
+ isEmpty?: boolean;
397
+ /** Node to render in place of the chart when `isEmpty` is true. */
398
+ emptyState?: React$1.ReactNode;
399
+ }): React$1.JSX.Element;
187
400
  declare const ChartStyle: ({ id, config }: {
188
401
  id: string;
189
402
  config: ChartConfig;
190
- }) => react_jsx_runtime.JSX.Element | null;
403
+ }) => React$1.JSX.Element | null;
191
404
  declare const ChartTooltip: typeof RechartsPrimitive.Tooltip;
192
405
  declare function ChartTooltipContent({ active, payload, className, indicator, hideLabel, hideIndicator, label, labelFormatter, labelClassName, formatter, color, nameKey, labelKey, }: React$1.ComponentProps<typeof RechartsPrimitive.Tooltip> & React$1.ComponentProps<"div"> & {
193
406
  hideLabel?: boolean;
@@ -195,82 +408,242 @@ declare function ChartTooltipContent({ active, payload, className, indicator, hi
195
408
  indicator?: "line" | "dot" | "dashed";
196
409
  nameKey?: string;
197
410
  labelKey?: string;
198
- }): react_jsx_runtime.JSX.Element | null;
411
+ }): React$1.JSX.Element | null;
199
412
  declare const ChartLegend: typeof RechartsPrimitive.Legend;
200
413
  declare function ChartLegendContent({ className, hideIcon, payload, verticalAlign, nameKey, }: React$1.ComponentProps<"div"> & Pick<RechartsPrimitive.LegendProps, "payload" | "verticalAlign"> & {
201
414
  hideIcon?: boolean;
202
415
  nameKey?: string;
203
- }): react_jsx_runtime.JSX.Element | null;
416
+ }): React$1.JSX.Element | null;
204
417
 
418
+ /**
419
+ * Checkbox — DFL Design System v0
420
+ *
421
+ * Tokens consumed (Layer 3 → --c-checkbox-*):
422
+ * size, radius, border-width, bg, border, border-hover,
423
+ * checked-bg, checked-border, checked-fg,
424
+ * focus-ring, disabled-opacity,
425
+ * danger-border, danger-bg, danger-checked-bg
426
+ * (all backed by --s-surface-*, --s-border-*, --s-brand-*, --s-danger-*)
427
+ *
428
+ * Focus ring — uniform DFL two-layer amber ring, replaces shadcn ring utilities:
429
+ * box-shadow: 0 0 0 2px var(--s-surface-page), 0 0 0 3px var(--c-checkbox-focus-ring)
430
+ *
431
+ * Checked/indeterminate state: use the Radix `checked` prop
432
+ * (true | false | "indeterminate"). Indeterminate renders a Minus dash icon
433
+ * with the same amber fill as checked.
434
+ *
435
+ * Error state: pass `aria-invalid={true}` — mirrors the Input/Textarea pattern.
436
+ */
205
437
  declare const Checkbox: React$1.ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
206
438
 
207
- declare function Collapsible({ ...props }: React$1.ComponentProps<typeof CollapsiblePrimitive.Root>): react_jsx_runtime.JSX.Element;
208
- declare function CollapsibleTrigger({ ...props }: React$1.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>): react_jsx_runtime.JSX.Element;
209
- declare function CollapsibleContent({ ...props }: React$1.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>): react_jsx_runtime.JSX.Element;
439
+ /**
440
+ * Collapsible DFL Design System v0
441
+ *
442
+ * Tokens consumed:
443
+ * --c-collapsible-{bg, bg-hover, border, border-hover, radius}
444
+ * --c-collapsible-header-fg
445
+ * --c-collapsible-content-{bg, border}
446
+ * --c-collapsible-item-fg
447
+ * --c-collapsible-trigger-{fg, fg-hover, ring}
448
+ * backed by --s-{surface-*, border-*, ink-*, brand-*} semantic tokens
449
+ *
450
+ * Subcomponents:
451
+ * <Collapsible> — Root (w-[320px] flex col gap-1.5; Radix open/disabled control)
452
+ * <CollapsibleHeader> — Header row: label slot + CollapsibleTrigger
453
+ * <CollapsibleTrigger> — 28×28 ghost icon button; amber focus ring + hover affordance
454
+ * <CollapsibleContent> — Animated content area (Radix animated reveal)
455
+ * <CollapsibleItem> — Individual content row with elevated surface bg
456
+ *
457
+ * Reference: Alert pilot pattern (merged) for token-wire approach.
458
+ */
459
+ declare function Collapsible({ className, ...props }: React$1.ComponentProps<typeof CollapsiblePrimitive.Root>): React$1.JSX.Element;
460
+ /**
461
+ * CollapsibleHeader — the header row.
462
+ *
463
+ * Provides the panel bg (--c-collapsible-bg), border, radius, and a
464
+ * subtle hover lift (border-hover, bg-hover). Slot the label + trigger inside.
465
+ */
466
+ declare function CollapsibleHeader({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): React$1.JSX.Element;
467
+ /**
468
+ * CollapsibleTrigger — 28×28 ghost icon button.
469
+ *
470
+ * Focus ring: double-layer box-shadow via --c-collapsible-trigger-ring
471
+ * (0 0 0 2px var(--s-surface-page), 0 0 0 3px #E07A4A)
472
+ * Hover: amber fg shift (--c-collapsible-trigger-fg-hover) + brand-subtle bg chip.
473
+ * Disabled: 45% opacity, pointer-events-none (propagated from Radix root `disabled`).
474
+ */
475
+ declare function CollapsibleTrigger({ className, ...props }: React$1.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>): React$1.JSX.Element;
476
+ /**
477
+ * CollapsibleContent — animated reveal, items stacked with gap.
478
+ * Surface is transparent; individual CollapsibleItems carry the elevation.
479
+ */
480
+ declare function CollapsibleContent({ className, ...props }: React$1.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>): React$1.JSX.Element;
481
+ /**
482
+ * CollapsibleItem — individual content row inside CollapsibleContent.
483
+ * Elevated surface bg (--c-collapsible-content-bg) + subtle border + muted ink.
484
+ */
485
+ declare function CollapsibleItem({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): React$1.JSX.Element;
210
486
 
487
+ /**
488
+ * Dialog — DFL Design System v0
489
+ *
490
+ * Token changes vs vanilla shadcn (v1.1.0):
491
+ * - Overlay: bg-[var(--c-dialog-scrim)] — warm rgba(10,9,8,0.72) vs cold bg-black/80
492
+ * - Panel bg: bg-[var(--c-dialog-bg)] (--s-surface-raised)
493
+ * - Panel border: border-[var(--c-dialog-border)] (--s-border-subtle)
494
+ * - Panel radius: rounded-[var(--c-dialog-radius)] (--p-radius-xl = 14px) vs sm:rounded-lg (8px)
495
+ * - Panel shadow: shadow-[var(--c-dialog-shadow)] (--p-shadow-overlay) vs shadow-lg
496
+ * - Close button focus ring: 0 0 0 2px --c-dialog-bg, 0 0 0 3px #E07A4A (uniform DFL ring)
497
+ *
498
+ * Added props on DialogContent:
499
+ * showClose?: false hides the close button (e.g. loading / in-progress states)
500
+ * autoFocusClose?: true auto-focuses the close button on mount (focus-ring stories)
501
+ */
211
502
  declare const Dialog: React$1.FC<DialogPrimitive.DialogProps>;
212
503
  declare const DialogTrigger: React$1.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
213
504
  declare const DialogPortal: React$1.FC<DialogPrimitive.DialogPortalProps>;
214
505
  declare const DialogClose: React$1.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React$1.RefAttributes<HTMLButtonElement>>;
215
506
  declare const DialogOverlay: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
216
- declare const DialogContent: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
507
+ interface DialogContentProps extends React$1.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {
508
+ /**
509
+ * When false the close button is not rendered.
510
+ * Use for in-progress / loading states where dismissal must be prevented.
511
+ * @default true
512
+ */
513
+ showClose?: boolean;
514
+ /**
515
+ * When true the close button receives autoFocus on mount so the focus ring is
516
+ * immediately visible (useful for focus-ring stories / a11y demos).
517
+ * @default false
518
+ */
519
+ autoFocusClose?: boolean;
520
+ }
521
+ declare const DialogContent: React$1.ForwardRefExoticComponent<DialogContentProps & React$1.RefAttributes<HTMLDivElement>>;
217
522
  declare const DialogHeader: {
218
- ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
523
+ ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): React$1.JSX.Element;
219
524
  displayName: string;
220
525
  };
221
526
  declare const DialogFooter: {
222
- ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
527
+ ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): React$1.JSX.Element;
223
528
  displayName: string;
224
529
  };
225
530
  declare const DialogTitle: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>, "ref"> & React$1.RefAttributes<HTMLHeadingElement>>;
226
531
  declare const DialogDescription: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
227
532
 
228
- declare function Command({ className, ...props }: React$1.ComponentProps<typeof Command$1>): react_jsx_runtime.JSX.Element;
533
+ declare function Command({ className, ...props }: React$1.ComponentProps<typeof Command$1>): React$1.JSX.Element;
229
534
  declare function CommandDialog({ title, description, children, ...props }: React$1.ComponentProps<typeof Dialog> & {
230
535
  title?: string;
231
536
  description?: string;
232
- }): react_jsx_runtime.JSX.Element;
233
- declare function CommandInput({ className, ...props }: React$1.ComponentProps<typeof Command$1.Input>): react_jsx_runtime.JSX.Element;
234
- declare function CommandList({ className, ...props }: React$1.ComponentProps<typeof Command$1.List>): react_jsx_runtime.JSX.Element;
235
- declare function CommandEmpty({ ...props }: React$1.ComponentProps<typeof Command$1.Empty>): react_jsx_runtime.JSX.Element;
236
- declare function CommandGroup({ className, ...props }: React$1.ComponentProps<typeof Command$1.Group>): react_jsx_runtime.JSX.Element;
237
- declare function CommandSeparator({ className, ...props }: React$1.ComponentProps<typeof Command$1.Separator>): react_jsx_runtime.JSX.Element;
238
- declare function CommandItem({ className, ...props }: React$1.ComponentProps<typeof Command$1.Item>): react_jsx_runtime.JSX.Element;
239
- declare function CommandShortcut({ className, ...props }: React$1.ComponentProps<"span">): react_jsx_runtime.JSX.Element;
240
-
241
- declare function ContextMenu({ ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Root>): react_jsx_runtime.JSX.Element;
242
- declare function ContextMenuTrigger({ ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
243
- declare function ContextMenuGroup({ ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Group>): react_jsx_runtime.JSX.Element;
244
- declare function ContextMenuPortal({ ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Portal>): react_jsx_runtime.JSX.Element;
245
- declare function ContextMenuSub({ ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Sub>): react_jsx_runtime.JSX.Element;
246
- declare function ContextMenuRadioGroup({ ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>): react_jsx_runtime.JSX.Element;
537
+ }): React$1.JSX.Element;
538
+ declare function CommandInput({ className, ...props }: React$1.ComponentProps<typeof Command$1.Input>): React$1.JSX.Element;
539
+ declare function CommandList({ className, ...props }: React$1.ComponentProps<typeof Command$1.List>): React$1.JSX.Element;
540
+ declare function CommandEmpty({ ...props }: React$1.ComponentProps<typeof Command$1.Empty>): React$1.JSX.Element;
541
+ declare function CommandGroup({ className, ...props }: React$1.ComponentProps<typeof Command$1.Group>): React$1.JSX.Element;
542
+ declare function CommandSeparator({ className, ...props }: React$1.ComponentProps<typeof Command$1.Separator>): React$1.JSX.Element;
543
+ declare function CommandItem({ className, ...props }: React$1.ComponentProps<typeof Command$1.Item>): React$1.JSX.Element;
544
+ declare function CommandShortcut({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
545
+
546
+ /**
547
+ * ContextMenu DS v0 token-aligned right-click menu.
548
+ *
549
+ * Token layer: --c-contextmenu-* (Layer 3) → --s-* → --p-*
550
+ *
551
+ * Key fixes vs. vanilla shadcn:
552
+ * • bg-accent (solid amber fill) → --c-contextmenu-item-hover-bg (brand-subtle 10%)
553
+ * • accent-foreground (sand-950 on orange) → --c-contextmenu-item-hover-fg (amber-300)
554
+ * • Keyboard-focus: same hover bg + inset ring (--c-contextmenu-item-focus-ring)
555
+ * via focus-visible — distinguishes keyboard from pointer-hover.
556
+ * • ContextMenuShortcut gets font-mono (JetBrains Mono) per DS kbd/code spec.
557
+ * • Destructive items: --s-danger-fg text, --s-danger-subtle hover bg.
558
+ * • CheckIcon + CircleIcon indicators tinted with --s-brand-solid (amber).
559
+ * • ContextMenuLabel: uppercase, tracking-wider, font-mono, muted — per DS spec.
560
+ */
561
+ declare function ContextMenu({ ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Root>): React$1.JSX.Element;
562
+ declare function ContextMenuTrigger({ ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Trigger>): React$1.JSX.Element;
563
+ declare function ContextMenuGroup({ ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Group>): React$1.JSX.Element;
564
+ declare function ContextMenuPortal({ ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Portal>): React$1.JSX.Element;
565
+ declare function ContextMenuSub({ ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Sub>): React$1.JSX.Element;
566
+ declare function ContextMenuRadioGroup({ ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>): React$1.JSX.Element;
247
567
  declare function ContextMenuSubTrigger({ className, inset, children, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {
248
568
  inset?: boolean;
249
- }): react_jsx_runtime.JSX.Element;
250
- declare function ContextMenuSubContent({ className, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.SubContent>): react_jsx_runtime.JSX.Element;
251
- declare function ContextMenuContent({ className, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Content>): react_jsx_runtime.JSX.Element;
569
+ }): React$1.JSX.Element;
570
+ declare function ContextMenuSubContent({ className, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.SubContent>): React$1.JSX.Element;
571
+ declare function ContextMenuContent({ className, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Content>): React$1.JSX.Element;
252
572
  declare function ContextMenuItem({ className, inset, variant, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Item> & {
253
573
  inset?: boolean;
254
574
  variant?: "default" | "destructive";
255
- }): react_jsx_runtime.JSX.Element;
256
- declare function ContextMenuCheckboxItem({ className, children, checked, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>): react_jsx_runtime.JSX.Element;
257
- declare function ContextMenuRadioItem({ className, children, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.RadioItem>): react_jsx_runtime.JSX.Element;
575
+ }): React$1.JSX.Element;
576
+ declare function ContextMenuCheckboxItem({ className, children, checked, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>): React$1.JSX.Element;
577
+ declare function ContextMenuRadioItem({ className, children, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.RadioItem>): React$1.JSX.Element;
258
578
  declare function ContextMenuLabel({ className, inset, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Label> & {
259
579
  inset?: boolean;
260
- }): react_jsx_runtime.JSX.Element;
261
- declare function ContextMenuSeparator({ className, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Separator>): react_jsx_runtime.JSX.Element;
262
- declare function ContextMenuShortcut({ className, ...props }: React$1.ComponentProps<"span">): react_jsx_runtime.JSX.Element;
263
-
264
- declare function Drawer({ ...props }: React$1.ComponentProps<typeof Drawer$1.Root>): react_jsx_runtime.JSX.Element;
265
- declare function DrawerTrigger({ ...props }: React$1.ComponentProps<typeof Drawer$1.Trigger>): react_jsx_runtime.JSX.Element;
266
- declare function DrawerPortal({ ...props }: React$1.ComponentProps<typeof Drawer$1.Portal>): react_jsx_runtime.JSX.Element;
267
- declare function DrawerClose({ ...props }: React$1.ComponentProps<typeof Drawer$1.Close>): react_jsx_runtime.JSX.Element;
268
- declare function DrawerOverlay({ className, ...props }: React$1.ComponentProps<typeof Drawer$1.Overlay>): react_jsx_runtime.JSX.Element;
269
- declare function DrawerContent({ className, children, ...props }: React$1.ComponentProps<typeof Drawer$1.Content>): react_jsx_runtime.JSX.Element;
270
- declare function DrawerHeader({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
271
- declare function DrawerFooter({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
272
- declare function DrawerTitle({ className, ...props }: React$1.ComponentProps<typeof Drawer$1.Title>): react_jsx_runtime.JSX.Element;
273
- declare function DrawerDescription({ className, ...props }: React$1.ComponentProps<typeof Drawer$1.Description>): react_jsx_runtime.JSX.Element;
580
+ }): React$1.JSX.Element;
581
+ declare function ContextMenuSeparator({ className, ...props }: React$1.ComponentProps<typeof ContextMenuPrimitive.Separator>): React$1.JSX.Element;
582
+ declare function ContextMenuShortcut({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
583
+
584
+ /**
585
+ * Drawer DFL Design System v0
586
+ *
587
+ * Tokens consumed (Layer 3 already defined in tokens.css):
588
+ * --c-dialog-bg → --s-surface-raised (#1a1714) elevated overlay, NOT page bg
589
+ * --c-dialog-border --s-border-subtle
590
+ * --c-dialog-radius --p-radius-xl (14px)
591
+ * --c-dialog-shadow --p-shadow-overlay
592
+ * --c-dialog-scrim → --s-surface-scrim (rgba(10,9,8,0.72))
593
+ *
594
+ * Focus ring (uniform DS spec, all interactive children):
595
+ * box-shadow: 0 0 0 2px var(--background), 0 0 0 3px #E07A4A
596
+ * Applied via `focus-visible:` on DrawerClose; footer buttons use Button's ring.
597
+ *
598
+ * Direction rounding (leading corners only, matching the spec):
599
+ * bottom → top corners rounded (border-radius on tl + tr)
600
+ * top → bottom corners rounded (border-radius on bl + br)
601
+ * right → left corners rounded (border-radius on tl + bl)
602
+ * left → right corners rounded (border-radius on tr + br)
603
+ */
604
+
605
+ declare function Drawer({ ...props }: React$1.ComponentProps<typeof Drawer$1.Root>): React$1.JSX.Element;
606
+ declare function DrawerTrigger({ ...props }: React$1.ComponentProps<typeof Drawer$1.Trigger>): React$1.JSX.Element;
607
+ declare function DrawerPortal({ ...props }: React$1.ComponentProps<typeof Drawer$1.Portal>): React$1.JSX.Element;
608
+ declare function DrawerClose({ className, ...props }: React$1.ComponentProps<typeof Drawer$1.Close>): React$1.JSX.Element;
609
+ declare function DrawerOverlay({ className, style, ...props }: React$1.ComponentProps<typeof Drawer$1.Overlay>): React$1.JSX.Element;
610
+ declare function DrawerContent({ className, children, style, ...props }: React$1.ComponentProps<typeof Drawer$1.Content>): React$1.JSX.Element;
611
+ declare function DrawerHeader({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
612
+ declare function DrawerFooter({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
613
+ declare function DrawerTitle({ className, ...props }: React$1.ComponentProps<typeof Drawer$1.Title>): React$1.JSX.Element;
614
+ declare function DrawerDescription({ className, ...props }: React$1.ComponentProps<typeof Drawer$1.Description>): React$1.JSX.Element;
615
+
616
+ /**
617
+ * DropdownMenu — DFL Design System v0
618
+ *
619
+ * Tokens consumed (Layer 3 — all defined in tokens.css):
620
+ * --c-dropdownmenu-bg popover surface (--s-surface-raised, #1a1714)
621
+ * --c-dropdownmenu-border panel border (--s-border-subtle, #2a2622)
622
+ * --c-dropdownmenu-radius panel corner radius (--p-radius-md, 6px)
623
+ * --c-dropdownmenu-item-radius item corner radius (--p-radius-sm, 4px)
624
+ * --c-dropdownmenu-shadow panel drop-shadow (multi-layer)
625
+ * --c-dropdownmenu-item-fg default item text (--s-ink-secondary, #e8e0d0)
626
+ * --c-dropdownmenu-item-bg-hover item hover/highlight bg (--s-surface-elevated, #1f1c18)
627
+ * --c-dropdownmenu-item-fg-hover item hover/highlight text (--s-ink-primary, #f6f1e7)
628
+ * --c-dropdownmenu-label-fg section-label colour (--s-ink-muted, #7d7568)
629
+ * --c-dropdownmenu-separator separator hairline (--s-border-subtle, #2a2622)
630
+ * --c-dropdownmenu-shortcut-fg shortcut key colour (--s-ink-muted, #7d7568)
631
+ * --c-dropdownmenu-check-color checkbox checkmark (--s-brand-solid, #E07A4A)
632
+ * --c-dropdownmenu-destructive-fg danger item text (--s-danger-fg, #e89898)
633
+ * --c-dropdownmenu-destructive-bghov danger item hover bg (--s-danger-subtle)
634
+ * --c-dropdownmenu-focus-ring uniform DS ring: 2px bg-gap + 1px amber
635
+ *
636
+ * Brand fixes vs vanilla shadcn:
637
+ * - Focus ring: replaced amber bg-flood (focus:bg-accent) with uniform DS ring.
638
+ * data-[highlighted] drives the bg/text shift for BOTH pointer and keyboard;
639
+ * focus-visible:shadow-[...] drives the amber ring for keyboard ONLY.
640
+ * - Separator: was bg-muted (#1a1714 == popover bg, zero contrast, invisible).
641
+ * Now bg-[var(--c-dropdownmenu-separator)] (#2a2622, visible hairline).
642
+ * - Label: was full ink-secondary (no visual hierarchy vs item text).
643
+ * Now --c-dropdownmenu-label-fg (muted) + uppercase + tight tracking.
644
+ * - Shortcut: added [font-family:var(--p-font-mono)] (JetBrains Mono per brand spec).
645
+ * Removed opacity-60 — muted ink colour meets contrast floor without it.
646
+ */
274
647
 
275
648
  declare const DropdownMenu: React$1.FC<DropdownMenuPrimitive.DropdownMenuProps>;
276
649
  declare const DropdownMenuTrigger: React$1.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
@@ -293,12 +666,26 @@ declare const DropdownMenuLabel: React$1.ForwardRefExoticComponent<Omit<Dropdown
293
666
  } & React$1.RefAttributes<HTMLDivElement>>;
294
667
  declare const DropdownMenuSeparator: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
295
668
  declare const DropdownMenuShortcut: {
296
- ({ className, ...props }: React$1.HTMLAttributes<HTMLSpanElement>): react_jsx_runtime.JSX.Element;
669
+ ({ className, ...props }: React$1.HTMLAttributes<HTMLSpanElement>): React$1.JSX.Element;
297
670
  displayName: string;
298
671
  };
299
672
 
300
- declare const Form: <TFieldValues extends FieldValues, TContext = any, TTransformedValues = TFieldValues>(props: react_hook_form.FormProviderProps<TFieldValues, TContext, TTransformedValues>) => React$1.JSX.Element;
301
- declare const FormField: <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ ...props }: ControllerProps<TFieldValues, TName>) => react_jsx_runtime.JSX.Element;
673
+ /**
674
+ * Form DFL Design System v0
675
+ *
676
+ * Thin React Hook Form wrapper (FormProvider + Controller). Composes
677
+ * FormItem, FormLabel, FormControl, FormDescription, FormMessage.
678
+ *
679
+ * Tokens consumed (Layer 3 → Layer 2 → Layer 1):
680
+ * --c-form-gap (8px, p-space-2) — gap between label/control/hint/message
681
+ * --c-form-section-gap (20px, p-space-5) — gap between FormItems in a <form>
682
+ * --c-form-label-fg (s-ink-secondary) — label default colour
683
+ * --c-form-label-error-fg (s-danger-fg) — label colour when field has error
684
+ * --c-form-description-fg (s-ink-muted) — helper text below the control
685
+ * --c-form-message-error-fg (s-danger-fg) — validation-error message colour
686
+ */
687
+ declare const Form: <TFieldValues extends FieldValues, TContext = any, TTransformedValues = TFieldValues>({ children, watch, getValues, getFieldState, setError, clearErrors, setValue, setValues, trigger, formState, resetField, reset, handleSubmit, unregister, control, register, setFocus, subscribe, }: react_hook_form.FormProviderProps<TFieldValues, TContext, TTransformedValues>) => React$1.JSX.Element;
688
+ declare const FormField: <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ ...props }: ControllerProps<TFieldValues, TName>) => React$1.JSX.Element;
302
689
  declare const useFormField: () => {
303
690
  invalid: boolean;
304
691
  isDirty: boolean;
@@ -311,15 +698,51 @@ declare const useFormField: () => {
311
698
  formDescriptionId: string;
312
699
  formMessageId: string;
313
700
  };
701
+ /**
702
+ * FormItem — vertical flex stack.
703
+ * Gap is driven by --c-form-gap (replaces the Tailwind `space-y-2` utility).
704
+ */
314
705
  declare const FormItem: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
706
+ /**
707
+ * FormLabel — wraps the DS Label.
708
+ * Error state switches colour from --c-form-label-fg (→ --s-ink-secondary)
709
+ * to --c-form-label-error-fg (→ --s-danger-fg, #e89898 — the softer danger-fg
710
+ * tint) instead of leaking the Tailwind alias `text-destructive`
711
+ * (→ --destructive → --s-danger-solid, full-saturation #e07a7a).
712
+ */
315
713
  declare const FormLabel: React$1.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React$1.RefAttributes<HTMLLabelElement>, "ref"> & React$1.RefAttributes<HTMLLabelElement>>;
316
- declare const FormControl: React$1.ForwardRefExoticComponent<Omit<_radix_ui_react_slot.SlotProps & React$1.RefAttributes<HTMLElement>, "ref"> & React$1.RefAttributes<HTMLElement>>;
714
+ declare const FormControl: React$1.ForwardRefExoticComponent<Omit<React$1.HTMLAttributes<HTMLElement> & {
715
+ children?: React$1.ReactNode;
716
+ } & React$1.RefAttributes<HTMLElement>, "ref"> & React$1.RefAttributes<HTMLElement>>;
717
+ /**
718
+ * FormDescription — helper text below the control.
719
+ * Uses --c-form-description-fg (→ --s-ink-muted) instead of the Tailwind
720
+ * alias `text-muted-foreground`.
721
+ */
317
722
  declare const FormDescription: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
723
+ /**
724
+ * FormMessage — validation-error text.
725
+ * Uses --c-form-message-error-fg (→ --s-danger-fg, #e89898) instead of the
726
+ * Tailwind alias `text-destructive` (→ --s-danger-solid, #e07a7a).
727
+ */
318
728
  declare const FormMessage: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
319
729
 
320
- declare function HoverCard({ ...props }: React$1.ComponentProps<typeof HoverCardPrimitive.Root>): react_jsx_runtime.JSX.Element;
321
- declare function HoverCardTrigger({ ...props }: React$1.ComponentProps<typeof HoverCardPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
322
- declare function HoverCardContent({ className, align, sideOffset, ...props }: React$1.ComponentProps<typeof HoverCardPrimitive.Content>): react_jsx_runtime.JSX.Element;
730
+ /**
731
+ * HoverCard DFL Design System v0
732
+ *
733
+ * Tokens consumed:
734
+ * --c-hovercard-{bg,border,radius,padding,shadow,focus-ring}
735
+ * backed by --s-surface-raised, --s-border-subtle, --p-radius-lg (10px),
736
+ * --p-space-4, --p-shadow, and a double box-shadow focus ring
737
+ * (0 0 0 2px page-bg + 0 0 0 3px amber — DS uniform ring).
738
+ *
739
+ * Panel radius: --p-radius-lg = 10px (overlay/card tier).
740
+ * NOT --p-radius-md = 6px (input/button tier).
741
+ * Trigger focus ring: DS uniform ring via --c-hovercard-focus-ring.
742
+ */
743
+ declare function HoverCard({ ...props }: React$1.ComponentProps<typeof HoverCardPrimitive.Root>): React$1.JSX.Element;
744
+ declare function HoverCardTrigger({ className, ...props }: React$1.ComponentProps<typeof HoverCardPrimitive.Trigger>): React$1.JSX.Element;
745
+ declare function HoverCardContent({ className, align, sideOffset, ...props }: React$1.ComponentProps<typeof HoverCardPrimitive.Content>): React$1.JSX.Element;
323
746
 
324
747
  /**
325
748
  * IconButton — DFL Design System v0 (NEW in v1.0.0).
@@ -334,13 +757,23 @@ declare function HoverCardContent({ className, align, sideOffset, ...props }: Re
334
757
  * <IconButton aria-label="Search"><SearchIcon /></IconButton>
335
758
  *
336
759
  * Tokens consumed:
337
- * --c-button-radius, --s-brand-subtle, --s-brand-fg, --s-brand-ring,
760
+ * --c-button-radius, --s-brand-subtle, --s-brand-fg,
761
+ * --s-surface-page (focus ring bg-gap), --s-border-focus (focus ring outline),
338
762
  * --c-button-ghost-fg, --c-button-ghost-bg-hover, --s-ink-primary,
339
- * --s-surface-raised, --s-border-subtle, --s-border-strong.
763
+ * --s-surface-raised, --s-border-subtle, --s-border-strong,
764
+ * --c-button-primary-bg, --c-button-primary-fg, --c-button-primary-bg-hover,
765
+ * --c-button-destructive-fg, --c-button-destructive-bg-hover.
766
+ *
767
+ * Focus ring: DFL uniform two-layer box-shadow — 2px page-color gap +
768
+ * 1px solid amber. Applied via box-shadow (not Tailwind ring utilities)
769
+ * to preserve border-radius on all variants.
770
+ * ⚠️ DO NOT revert to `focus-visible:ring-[3px] focus-visible:ring-[var(--s-brand-ring)]`
771
+ * — that produces a single semi-transparent halo (rgba 0.45), not the
772
+ * mandated crisp two-layer ring (brand spec: box-shadow 0 0 0 2px page, 0 0 0 3px amber).
340
773
  */
341
774
  declare const iconButtonVariants: (props?: ({
342
775
  variant?: "destructive" | "outline" | "ghost" | "solid" | null | undefined;
343
- size?: "default" | "sm" | "lg" | "xs" | null | undefined;
776
+ size?: "default" | "sm" | "lg" | "md" | "xs" | null | undefined;
344
777
  } & class_variance_authority_types.ClassProp) | undefined) => string;
345
778
  interface IconButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof iconButtonVariants> {
346
779
  asChild?: boolean;
@@ -360,26 +793,48 @@ declare const IconButton: React$1.ForwardRefExoticComponent<IconButtonProps & Re
360
793
  */
361
794
  declare const Input: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
362
795
 
363
- declare function InputOTP({ className, containerClassName, ...props }: React$1.ComponentProps<typeof OTPInput> & {
796
+ /**
797
+ * Visual validation status for the OTP widget.
798
+ *
799
+ * - default: idle / filling — warm sand borders, no tint
800
+ * - error: rejected code — --s-danger-solid border, --s-danger-subtle bg
801
+ * - success: verified code — --s-success-solid border, --s-success-subtle bg
802
+ *
803
+ * Provided to all child InputOTPSlots via InputOTPStatusContext so the caller
804
+ * sets it once on the <InputOTP> root, not on every slot.
805
+ */
806
+ type OTPStatus = "default" | "error" | "success";
807
+ declare function InputOTP({ className, containerClassName, status, ...props }: React$1.ComponentProps<typeof OTPInput> & {
364
808
  containerClassName?: string;
365
- }): react_jsx_runtime.JSX.Element;
366
- declare function InputOTPGroup({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
367
- declare function InputOTPSlot({ index, className, ...props }: React$1.ComponentProps<"div"> & {
809
+ /** Visual validation status applied uniformly to all slots. */
810
+ status?: OTPStatus;
811
+ }): React$1.JSX.Element;
812
+ declare function InputOTPGroup({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
813
+ declare function InputOTPSlot({ index, className, style, ...props }: React$1.ComponentProps<"div"> & {
368
814
  index: number;
369
- }): react_jsx_runtime.JSX.Element;
370
- declare function InputOTPSeparator({ ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
815
+ }): React$1.JSX.Element;
816
+ declare function InputOTPSeparator({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
371
817
 
372
818
  /**
373
819
  * Kbd — DFL Design System v0 (NEW in v1.0.0).
374
820
  *
375
821
  * Single-key chip. Combine like:
376
- * <Kbd>⌘</Kbd><Kbd>K</Kbd>
822
+ * <Kbd>⌘</Kbd><span aria-hidden="true">+</span><Kbd>K</Kbd>
377
823
  *
378
824
  * Also exposed as the `kbd` prop on <Button /> for inline shortcut hints.
379
825
  *
380
- * Tokens consumed:
381
- * --s-surface-raised, --s-border-subtle, --s-ink-muted, --p-radius-sm,
382
- * --s-font-mono.
826
+ * Tokens consumed (Layer 3 → Layer 2 → Layer 1):
827
+ * --c-kbd-bg → --s-surface-raised (#1a1714)
828
+ * --c-kbd-bg-depth → --s-surface-panel (#141210) — bottom shadow ridge
829
+ * --c-kbd-border → --s-border-subtle (#2a2622)
830
+ * --c-kbd-fg → --s-ink-primary (#f6f1e7) — upgraded from ink-secondary for legibility
831
+ * --c-kbd-shine rgba(255,255,255,0.055) — top inset highlight
832
+ * --c-kbd-radius → --p-radius-sm (4px)
833
+ *
834
+ * Size specs (per DS v0 spec):
835
+ * sm 9.5px mono · 17px height · 3px radius
836
+ * default 10.5px mono · 20px height · 4px radius
837
+ * lg 12px mono · 24px height · 4px radius
383
838
  */
384
839
  declare const kbdVariants: (props?: ({
385
840
  size?: "default" | "sm" | "lg" | null | undefined;
@@ -391,86 +846,289 @@ declare const Kbd: React$1.ForwardRefExoticComponent<KbdProps & React$1.RefAttri
391
846
  /**
392
847
  * Label — DFL Design System v0
393
848
  *
394
- * DS v0 spec: 12px, weight 500, leading 1.4. Two variants:
395
- * default — Inter, sentence case for form fields.
396
- * mono — JetBrains Mono uppercase, used for "meta about meta" (KeyValueList keys, table headers).
849
+ * Tokens consumed (Layer 3 Layer 2 Layer 1):
850
+ * --c-label-fg → --s-ink-secondary (default variant)
851
+ * --c-label-fg-muted → --s-ink-muted (mono variant)
852
+ * --c-label-fg-error → --s-danger-fg (error state; #e89898)
853
+ * --c-label-fg-disabled → --s-ink-disabled (explicit disabled state)
854
+ * --c-label-required-color → --s-brand-solid (required asterisk)
855
+ * --c-label-font-size → --p-text-12 (12px default)
856
+ * --c-label-mono-font-size → 10.5px (mono; no p-text primitive)
857
+ * --c-label-mono-tracking → 0.06em (mono letter-spacing)
858
+ *
859
+ * Two shape variants:
860
+ * default — Inter 12px/500, sentence case for form fields.
861
+ * mono — JetBrains Mono uppercase, for "meta about meta" (table headers, key lists).
862
+ *
863
+ * Three explicit states (peer-disabled also propagates automatically via CSS):
864
+ * default — no additional override.
865
+ * error — label adopts --c-label-fg-error when its paired field is invalid.
866
+ * disabled — reduced opacity + cursor:not-allowed (for label-first layouts where
867
+ * peer-disabled cannot propagate via DOM sibling order).
397
868
  */
398
869
  declare const labelVariants: (props?: ({
399
870
  variant?: "default" | "mono" | null | undefined;
871
+ state?: "disabled" | "default" | "error" | null | undefined;
400
872
  } & class_variance_authority_types.ClassProp) | undefined) => string;
401
873
  declare const Label: React$1.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React$1.RefAttributes<HTMLLabelElement>, "ref"> & VariantProps<(props?: ({
402
874
  variant?: "default" | "mono" | null | undefined;
875
+ state?: "disabled" | "default" | "error" | null | undefined;
403
876
  } & class_variance_authority_types.ClassProp) | undefined) => string> & React$1.RefAttributes<HTMLLabelElement>>;
404
877
 
405
- declare function Menubar({ className, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Root>): react_jsx_runtime.JSX.Element;
406
- declare function MenubarMenu({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Menu>): react_jsx_runtime.JSX.Element;
407
- declare function MenubarGroup({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Group>): react_jsx_runtime.JSX.Element;
408
- declare function MenubarPortal({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Portal>): react_jsx_runtime.JSX.Element;
409
- declare function MenubarRadioGroup({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.RadioGroup>): react_jsx_runtime.JSX.Element;
410
- declare function MenubarTrigger({ className, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
411
- declare function MenubarContent({ className, align, alignOffset, sideOffset, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Content>): react_jsx_runtime.JSX.Element;
878
+ /**
879
+ * Menubar DFL Design System v0
880
+ *
881
+ * Tokens consumed (Layer 3 Layer 2 → Layer 1):
882
+ * --c-menubar-bar-bg, --c-menubar-bar-border, --c-menubar-bar-radius
883
+ * --c-menubar-trigger-fg, --c-menubar-trigger-bg-hover, --c-menubar-trigger-bg-open, --c-menubar-trigger-radius
884
+ * --c-menubar-content-bg, --c-menubar-item-fg, --c-menubar-item-bg-hover, --c-menubar-item-radius
885
+ * --c-menubar-shortcut-font, --c-menubar-shortcut-fg
886
+ * --c-menubar-indicator-color
887
+ * --c-menubar-dest-fg, --c-menubar-dest-bg-hover
888
+ * --c-menubar-ring-trigger, --c-menubar-ring-item (DS 2-layer amber focus ring)
889
+ *
890
+ * Focus ring spec: box-shadow: 0 0 0 2px <surface-bg>, 0 0 0 3px #E07A4A
891
+ * Triggers sit on bar bg → ring uses --c-menubar-bar-bg as inner layer.
892
+ * Items sit inside the dropdown → ring uses --c-menubar-content-bg.
893
+ *
894
+ * Item hover: brand-subtle tint (rgba(224,122,74,0.10)) — NOT solid accent fill.
895
+ * CheckboxItem/RadioItem indicators: --c-menubar-indicator-color (#E07A4A amber).
896
+ * Shortcuts: JetBrains Mono via --c-menubar-shortcut-font.
897
+ */
898
+ declare function Menubar({ className, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Root>): React$1.JSX.Element;
899
+ declare function MenubarMenu({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Menu>): React$1.JSX.Element;
900
+ declare function MenubarGroup({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Group>): React$1.JSX.Element;
901
+ declare function MenubarPortal({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Portal>): React$1.JSX.Element;
902
+ declare function MenubarRadioGroup({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.RadioGroup>): React$1.JSX.Element;
903
+ declare function MenubarTrigger({ className, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Trigger>): React$1.JSX.Element;
904
+ declare function MenubarContent({ className, align, alignOffset, sideOffset, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Content>): React$1.JSX.Element;
412
905
  declare function MenubarItem({ className, inset, variant, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Item> & {
413
906
  inset?: boolean;
414
907
  variant?: "default" | "destructive";
415
- }): react_jsx_runtime.JSX.Element;
416
- declare function MenubarCheckboxItem({ className, children, checked, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.CheckboxItem>): react_jsx_runtime.JSX.Element;
417
- declare function MenubarRadioItem({ className, children, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.RadioItem>): react_jsx_runtime.JSX.Element;
908
+ }): React$1.JSX.Element;
909
+ declare function MenubarCheckboxItem({ className, children, checked, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.CheckboxItem>): React$1.JSX.Element;
910
+ declare function MenubarRadioItem({ className, children, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.RadioItem>): React$1.JSX.Element;
418
911
  declare function MenubarLabel({ className, inset, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Label> & {
419
912
  inset?: boolean;
420
- }): react_jsx_runtime.JSX.Element;
421
- declare function MenubarSeparator({ className, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Separator>): react_jsx_runtime.JSX.Element;
422
- declare function MenubarShortcut({ className, ...props }: React$1.ComponentProps<"span">): react_jsx_runtime.JSX.Element;
423
- declare function MenubarSub({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Sub>): react_jsx_runtime.JSX.Element;
913
+ }): React$1.JSX.Element;
914
+ declare function MenubarSeparator({ className, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Separator>): React$1.JSX.Element;
915
+ declare function MenubarShortcut({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
916
+ declare function MenubarSub({ ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Sub>): React$1.JSX.Element;
424
917
  declare function MenubarSubTrigger({ className, inset, children, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {
425
918
  inset?: boolean;
426
- }): react_jsx_runtime.JSX.Element;
427
- declare function MenubarSubContent({ className, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.SubContent>): react_jsx_runtime.JSX.Element;
919
+ }): React$1.JSX.Element;
920
+ declare function MenubarSubContent({ className, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.SubContent>): React$1.JSX.Element;
428
921
 
429
922
  declare function NavigationMenu({ className, children, viewport, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Root> & {
430
923
  viewport?: boolean;
431
- }): react_jsx_runtime.JSX.Element;
432
- declare function NavigationMenuList({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.List>): react_jsx_runtime.JSX.Element;
433
- declare function NavigationMenuItem({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Item>): react_jsx_runtime.JSX.Element;
924
+ }): React$1.JSX.Element;
925
+ declare function NavigationMenuList({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.List>): React$1.JSX.Element;
926
+ declare function NavigationMenuItem({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Item>): React$1.JSX.Element;
927
+ /**
928
+ * DS-token-aware trigger style.
929
+ *
930
+ * Fixes vs previous shadcn generic:
931
+ * • hover:bg-accent (= --accent = amber #E07A4A full-fill) → surface-elevated
932
+ * lift via --c-nav-trigger-hover-bg (#1f1c18). Amber is reserved for CTA only.
933
+ * • focus ring: was ring-[3px] ring-ring/50 (wrong width + opacity) →
934
+ * DS uniform ring: 2px gap + 1px amber ring via ring-1 / ring-offset-2,
935
+ * with transition-none so it appears instantly.
936
+ * • open state: amber-subtle bg tint (--c-nav-trigger-open-bg) + amber-300
937
+ * text + amber border — NOT a full amber fill.
938
+ */
434
939
  declare const navigationMenuTriggerStyle: (props?: class_variance_authority_types.ClassProp | undefined) => string;
435
- declare function NavigationMenuTrigger({ className, children, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
436
- declare function NavigationMenuContent({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Content>): react_jsx_runtime.JSX.Element;
437
- declare function NavigationMenuViewport({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Viewport>): react_jsx_runtime.JSX.Element;
438
- declare function NavigationMenuLink({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Link>): react_jsx_runtime.JSX.Element;
439
- declare function NavigationMenuIndicator({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Indicator>): react_jsx_runtime.JSX.Element;
440
-
441
- declare function Pagination({ className, ...props }: React$1.ComponentProps<"nav">): react_jsx_runtime.JSX.Element;
442
- declare function PaginationContent({ className, ...props }: React$1.ComponentProps<"ul">): react_jsx_runtime.JSX.Element;
443
- declare function PaginationItem({ ...props }: React$1.ComponentProps<"li">): react_jsx_runtime.JSX.Element;
940
+ declare function NavigationMenuTrigger({ className, children, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Trigger>): React$1.JSX.Element;
941
+ /**
942
+ * NavigationMenuContent dropdown panel content.
943
+ *
944
+ * Fix: removed `**:data-[slot=navigation-menu-link]:focus:ring-0` and
945
+ * `**:data-[slot=navigation-menu-link]:focus:outline-none` which were
946
+ * silencing all focus rings inside the open dropdown (keyboard a11y regression).
947
+ * Content panel now uses --c-nav-content-* tokens instead of generic popover vars.
948
+ */
949
+ declare function NavigationMenuContent({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Content>): React$1.JSX.Element;
950
+ declare function NavigationMenuViewport({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Viewport>): React$1.JSX.Element;
951
+ /**
952
+ * NavigationMenuLink — top-level direct links AND content panel items.
953
+ *
954
+ * Fixes:
955
+ * • hover:bg-accent (amber full-fill) → --c-nav-item-hover-bg (surface-elevated)
956
+ * • focus:bg-accent → removed; replaced with DS ring on focus-visible
957
+ * • focus ring now visible (parent Content no longer suppresses it)
958
+ * • active state: brand-subtle bg + brand-fg text
959
+ * For content items with left-border indicator, add
960
+ * `border-l-2 border-l-[var(--c-nav-item-active-border)]` via className.
961
+ */
962
+ declare function NavigationMenuLink({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Link>): React$1.JSX.Element;
963
+ declare function NavigationMenuIndicator({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Indicator>): React$1.JSX.Element;
964
+
965
+ declare function Pagination({ className, ...props }: React$1.ComponentProps<"nav">): React$1.JSX.Element;
966
+ declare function PaginationContent({ className, ...props }: React$1.ComponentProps<"ul">): React$1.JSX.Element;
967
+ declare function PaginationItem({ ...props }: React$1.ComponentProps<"li">): React$1.JSX.Element;
444
968
  type PaginationLinkProps = {
445
969
  isActive?: boolean;
446
- } & Pick<React$1.ComponentProps<typeof Button>, "size"> & React$1.ComponentProps<"a">;
447
- declare function PaginationLink({ className, isActive, size, ...props }: PaginationLinkProps): react_jsx_runtime.JSX.Element;
448
- declare function PaginationPrevious({ className, ...props }: React$1.ComponentProps<typeof PaginationLink>): react_jsx_runtime.JSX.Element;
449
- declare function PaginationNext({ className, ...props }: React$1.ComponentProps<typeof PaginationLink>): react_jsx_runtime.JSX.Element;
450
- declare function PaginationEllipsis({ className, ...props }: React$1.ComponentProps<"span">): react_jsx_runtime.JSX.Element;
970
+ } & React$1.ComponentProps<"a">;
971
+ declare function PaginationLink({ className, isActive, ...props }: PaginationLinkProps): React$1.JSX.Element;
972
+ type PaginationNavProps = {
973
+ disabled?: boolean;
974
+ } & React$1.ComponentProps<"a">;
975
+ declare function PaginationPrevious({ className, disabled, ...props }: PaginationNavProps): React$1.JSX.Element;
976
+ declare function PaginationNext({ className, disabled, ...props }: PaginationNavProps): React$1.JSX.Element;
977
+ declare function PaginationEllipsis({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
451
978
 
979
+ /**
980
+ * Popover — DFL Design System v0
981
+ *
982
+ * Tokens consumed (Layer 3):
983
+ * --c-popover-bg background surface (--s-surface-elevated #1f1c18)
984
+ * --c-popover-fg primary text (--s-ink-primary)
985
+ * --c-popover-border border color (--s-border-subtle)
986
+ * --c-popover-radius 10px (--p-radius-lg) — overlays use lg, not md
987
+ * --c-popover-shadow DS shadow token (--p-shadow 0 4px 12px…)
988
+ * --c-popover-padding interior padding (--p-space-4 = 16px)
989
+ *
990
+ * Focus ring on the trigger — apply via className on the wrapped element:
991
+ * focus-visible:ring-0
992
+ * focus-visible:[box-shadow:0_0_0_2px_var(--s-surface-page),_0_0_0_3px_#E07A4A]
993
+ *
994
+ * sideOffset default raised to 6 (was 4) — breathing room per DS spec.
995
+ */
452
996
  declare const Popover: React$1.FC<PopoverPrimitive.PopoverProps>;
453
997
  declare const PopoverTrigger: React$1.ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
998
+ declare const PopoverAnchor: React$1.ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & React$1.RefAttributes<HTMLDivElement>>;
454
999
  declare const PopoverContent: React$1.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
455
1000
 
456
- declare const Progress: React$1.ForwardRefExoticComponent<Omit<ProgressPrimitive.ProgressProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1001
+ /**
1002
+ * Progress — DFL Design System v0
1003
+ *
1004
+ * Tokens consumed:
1005
+ * --c-progress-{track-bg,radius,h-sm,h-md,h-lg,duration,easing}
1006
+ * --c-progress-fill-{default,success,danger,warning,info}
1007
+ * backed by --s-brand-solid, --s-{success,danger,warning,info}-solid
1008
+ *
1009
+ * Props:
1010
+ * size: sm (4px) | md (8px, default) | lg (12px)
1011
+ * variant: default (amber) | success | danger | warning | info
1012
+ * value: 0–100
1013
+ */
1014
+ declare const progressTrackVariants: (props?: ({
1015
+ size?: "sm" | "lg" | "md" | null | undefined;
1016
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1017
+ declare const progressFillVariants: (props?: ({
1018
+ variant?: "default" | "info" | "success" | "warning" | "danger" | null | undefined;
1019
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1020
+ interface ProgressProps extends React$1.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>, VariantProps<typeof progressTrackVariants>, VariantProps<typeof progressFillVariants> {
1021
+ }
1022
+ declare const Progress: React$1.ForwardRefExoticComponent<ProgressProps & React$1.RefAttributes<HTMLDivElement>>;
457
1023
 
1024
+ /**
1025
+ * RadioGroup — DS v0 token-native refactor.
1026
+ *
1027
+ * Changes from vanilla shadcn:
1028
+ * - Border on unselected items uses --c-radio-border (→ --s-border-strong, #3a3530)
1029
+ * instead of border-primary (amber) which leaked the brand accent onto neutral state.
1030
+ * - Focus ring is the uniform DFL ring: box-shadow 0 0 0 2px page-bg, 0 0 0 3px #E07A4A
1031
+ * (instant — box-shadow not in transition-colors, appears/disappears without animation).
1032
+ * - Indicator is a pure CSS div (8px filled circle) replacing the Lucide <Circle> icon
1033
+ * which required SVG fill/color coupling via fill-current text-current.
1034
+ * - All knobs resolve through --c-radio-* component tokens → --s-* semantic tokens.
1035
+ */
458
1036
  declare const RadioGroup: React$1.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
459
1037
  declare const RadioGroupItem: React$1.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupItemProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
1038
+ /**
1039
+ * RadioGroupRow — convenience compound: RadioGroupItem + Label with correct
1040
+ * disabled handling. Disabled propagates to both the circle (opacity/cursor via
1041
+ * the item) and the label (--c-radio-label-fg-disabled, cursor not-allowed).
1042
+ *
1043
+ * Use for typical radio list rows. Use RadioGroupItem directly when you need
1044
+ * finer composition control (e.g. custom label markup).
1045
+ */
1046
+ interface RadioGroupRowProps {
1047
+ value: string;
1048
+ id: string;
1049
+ disabled?: boolean;
1050
+ children: React$1.ReactNode;
1051
+ className?: string;
1052
+ }
1053
+ declare const RadioGroupRow: {
1054
+ ({ value, id, disabled, children, className, }: RadioGroupRowProps): React$1.JSX.Element;
1055
+ displayName: string;
1056
+ };
460
1057
 
461
- declare function ResizablePanelGroup({ className, ...props }: React$1.ComponentProps<typeof ResizablePrimitive.PanelGroup>): react_jsx_runtime.JSX.Element;
462
- declare function ResizablePanel({ ...props }: React$1.ComponentProps<typeof ResizablePrimitive.Panel>): react_jsx_runtime.JSX.Element;
1058
+ /**
1059
+ * ResizablePanelGroup / ResizablePanel / ResizableHandle
1060
+ *
1061
+ * DS v0 token adoption — Layer 3 component tokens (--c-resizable-*):
1062
+ * --c-resizable-handle-track → --s-border-subtle (1px divider, idle)
1063
+ * --c-resizable-handle-track-hover → --s-border-strong (divider on hover)
1064
+ * --c-resizable-handle-track-focus → --s-brand-solid (divider on keyboard focus)
1065
+ * --c-resizable-handle-track-drag → --s-brand-solid (divider while dragging)
1066
+ * --c-resizable-grip-bg → --s-surface-elevated
1067
+ * --c-resizable-grip-border → --s-border-subtle
1068
+ * --c-resizable-grip-border-hover → --s-border-strong
1069
+ * --c-resizable-grip-border-focus → --s-brand-solid
1070
+ * --c-resizable-grip-border-drag → --s-brand-solid
1071
+ * --c-resizable-grip-icon → --s-ink-muted
1072
+ * --c-resizable-grip-icon-drag → --s-brand-solid
1073
+ *
1074
+ * Focus ring: DFL uniform ring (2px surface-page gap + 1px amber) applied as
1075
+ * box-shadow on the grip widget when the handle has :focus-visible.
1076
+ * Drag state: react-resizable-panels emits data-resize-handle-active on
1077
+ * PanelResizeHandle during drag — drives amber track + amber-tinted grip +
1078
+ * amber dot icons.
1079
+ */
1080
+ declare function ResizablePanelGroup({ className, ...props }: React$1.ComponentProps<typeof ResizablePrimitive.PanelGroup>): React$1.JSX.Element;
1081
+ declare function ResizablePanel({ ...props }: React$1.ComponentProps<typeof ResizablePrimitive.Panel>): React$1.JSX.Element;
463
1082
  declare function ResizableHandle({ withHandle, className, ...props }: React$1.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {
464
1083
  withHandle?: boolean;
465
- }): react_jsx_runtime.JSX.Element;
1084
+ }): React$1.JSX.Element;
466
1085
 
467
- declare const ScrollArea: React$1.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1086
+ /**
1087
+ * ScrollArea — Radix custom-scrollbar container with DS v0 token adoption.
1088
+ *
1089
+ * DS tokens consumed (Layer 3 → Layer 2 chain):
1090
+ * --c-scroll-area-thumb rest → --s-ink-muted (#7d7568)
1091
+ * --c-scroll-area-thumb-hover hover → --s-brand-solid (#E07A4A)
1092
+ * --c-scroll-area-thumb-active active → --s-brand-pressed (#c2663b)
1093
+ * --c-scroll-area-track-hover track bg on container hover
1094
+ * --c-scroll-area-width 8px scrollbar rail width
1095
+ * --c-scroll-area-radius 999px pill thumb
1096
+ *
1097
+ * Focus: the Viewport receives keyboard focus when children are non-focusable
1098
+ * (plain-text lists). The DS uniform amber ring is applied via focus-visible:
1099
+ * box-shadow: 0 0 0 2px var(--s-surface-page), 0 0 0 3px #E07A4A
1100
+ * When children ARE focusable (buttons, links), the ring belongs on those
1101
+ * elements — not on the scroll container.
1102
+ */
1103
+ type ScrollAreaScrollbars = "vertical" | "horizontal" | "both";
1104
+ interface ScrollAreaProps extends React$1.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root> {
1105
+ /** Which scrollbar orientations to render. @default "vertical" */
1106
+ scrollbars?: ScrollAreaScrollbars;
1107
+ }
1108
+ declare const ScrollArea: React$1.ForwardRefExoticComponent<ScrollAreaProps & React$1.RefAttributes<HTMLDivElement>>;
468
1109
  declare const ScrollBar: React$1.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaScrollbarProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
469
1110
 
470
1111
  declare const Select: React$1.FC<SelectPrimitive.SelectProps>;
471
1112
  declare const SelectGroup: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React$1.RefAttributes<HTMLDivElement>>;
472
1113
  declare const SelectValue: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React$1.RefAttributes<HTMLSpanElement>>;
473
- declare const SelectTrigger: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
1114
+ /**
1115
+ * SelectTrigger — DFL Design System v0
1116
+ *
1117
+ * Design changes vs shadcn baseline:
1118
+ * - Focus ring: canonical DFL `outline: 1px solid #E07A4A; outline-offset: 3px`
1119
+ * via `.ds-focus-ring` class (no shadcn `ring-*` utilities).
1120
+ * - bg: --c-select-bg (sand-850), border: --c-select-border (sand-700)
1121
+ * - Hover: border escalates to --c-select-border-hover (sand-600)
1122
+ * - Open state: amber border + amber outline ring + chevron rotates 180° to amber
1123
+ * - Disabled: opacity 0.45 (spec), cursor not-allowed
1124
+ * - Error: border switches to --c-select-border-error (danger-solid)
1125
+ * - Chevron: --c-select-icon-color (sand-400); escalates on hover/open
1126
+ */
1127
+ interface SelectTriggerProps extends React$1.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> {
1128
+ /** When true, the trigger displays the error border (--c-select-border-error). */
1129
+ error?: boolean;
1130
+ }
1131
+ declare const SelectTrigger: React$1.ForwardRefExoticComponent<SelectTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
474
1132
  declare const SelectScrollUpButton: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
475
1133
  declare const SelectScrollDownButton: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
476
1134
  declare const SelectContent: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
@@ -478,7 +1136,34 @@ declare const SelectLabel: React$1.ForwardRefExoticComponent<Omit<SelectPrimitiv
478
1136
  declare const SelectItem: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
479
1137
  declare const SelectSeparator: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
480
1138
 
1139
+ /**
1140
+ * Separator — Radix UI primitive, 1-pixel rule consuming DS component tokens.
1141
+ *
1142
+ * Component tokens consumed (defined in tokens.css Layer 3):
1143
+ * --c-separator-color : line fill (default → --s-border-subtle → #2a2622)
1144
+ * --c-separator-thickness : line width/height (default → 1px)
1145
+ *
1146
+ * Override per-use via inline style:
1147
+ * style={{ "--c-separator-color": "var(--s-border-strong)" } as React.CSSProperties}
1148
+ *
1149
+ * Non-interactive — no focus ring needed.
1150
+ */
481
1151
  declare const Separator: React$1.ForwardRefExoticComponent<Omit<SeparatorPrimitive.SeparatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1152
+ /**
1153
+ * SeparatorWithLabel — composite: two separator lines flanking a centered label.
1154
+ *
1155
+ * Additional component tokens consumed:
1156
+ * --c-separator-label-fg : label text color (default → --s-ink-muted → #7d7568)
1157
+ * --c-separator-label-size : label font size (default → 11px)
1158
+ *
1159
+ * Usage:
1160
+ * <SeparatorWithLabel label="ou continue com" />
1161
+ * <SeparatorWithLabel label="Módulo 3" />
1162
+ */
1163
+ interface SeparatorWithLabelProps extends React$1.HTMLAttributes<HTMLDivElement> {
1164
+ label: string;
1165
+ }
1166
+ declare const SeparatorWithLabel: React$1.ForwardRefExoticComponent<SeparatorWithLabelProps & React$1.RefAttributes<HTMLDivElement>>;
482
1167
 
483
1168
  declare const Sheet: React$1.FC<DialogPrimitive.DialogProps>;
484
1169
  declare const SheetTrigger: React$1.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
@@ -486,25 +1171,56 @@ declare const SheetClose: React$1.ForwardRefExoticComponent<DialogPrimitive.Dial
486
1171
  declare const SheetPortal: React$1.FC<DialogPrimitive.DialogPortalProps>;
487
1172
  declare const SheetOverlay: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
488
1173
  declare const sheetVariants: (props?: ({
489
- side?: "top" | "bottom" | "right" | "left" | null | undefined;
1174
+ side?: "left" | "right" | "bottom" | "top" | null | undefined;
490
1175
  } & class_variance_authority_types.ClassProp) | undefined) => string;
491
1176
  interface SheetContentProps extends React$1.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, VariantProps<typeof sheetVariants> {
492
1177
  }
493
1178
  declare const SheetContent: React$1.ForwardRefExoticComponent<SheetContentProps & React$1.RefAttributes<HTMLDivElement>>;
494
1179
  declare const SheetHeader: {
495
- ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
1180
+ ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): React$1.JSX.Element;
496
1181
  displayName: string;
497
1182
  };
498
1183
  declare const SheetFooter: {
499
- ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
1184
+ ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): React$1.JSX.Element;
500
1185
  displayName: string;
501
1186
  };
502
1187
  declare const SheetTitle: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>, "ref"> & React$1.RefAttributes<HTMLHeadingElement>>;
503
1188
  declare const SheetDescription: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
504
1189
 
1190
+ /**
1191
+ * Tooltip — DFL Design System v0
1192
+ *
1193
+ * Tokens consumed:
1194
+ * --c-tooltip-bg, --c-tooltip-fg, --c-tooltip-border,
1195
+ * --c-tooltip-radius, --c-tooltip-shadow
1196
+ *
1197
+ * Anatomy:
1198
+ * TooltipProvider — wrap page / section once (controls delayDuration etc.)
1199
+ * Tooltip — root (open state machine)
1200
+ * TooltipTrigger — the interactive element; carries the DS uniform focus ring
1201
+ * TooltipContent — the floating bubble; includes a directional Radix Arrow
1202
+ *
1203
+ * Focus ring:
1204
+ * TooltipTrigger adds the `.ds-focus-ring` class, which resolves to
1205
+ * `outline: 1px solid var(--s-border-focus); outline-offset: 3px` on
1206
+ * :focus-visible. When used with `asChild` + a Button, the class merges
1207
+ * into the child via Radix Slot.
1208
+ *
1209
+ * Arrow / caret:
1210
+ * TooltipPrimitive.Arrow is wired inside TooltipContent.
1211
+ * fill = --c-tooltip-bg (same as bubble bg)
1212
+ * stroke = --c-tooltip-border (matches bubble border)
1213
+ *
1214
+ * sideOffset default raised 4 → 6 for breathing room between bubble and trigger.
1215
+ */
505
1216
  declare const TooltipProvider: React$1.FC<TooltipPrimitive.TooltipProviderProps>;
506
1217
  declare const Tooltip: React$1.FC<TooltipPrimitive.TooltipProps>;
507
- declare const TooltipTrigger: React$1.ForwardRefExoticComponent<TooltipPrimitive.TooltipTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
1218
+ /**
1219
+ * TooltipTrigger — wraps Radix Trigger and injects the DS uniform focus ring.
1220
+ * The `.ds-focus-ring` class is defined in tokens.css and applies
1221
+ * `outline: 1px solid var(--s-border-focus); outline-offset: 3px` on :focus-visible.
1222
+ */
1223
+ declare const TooltipTrigger: React$1.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipTriggerProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
508
1224
  declare const TooltipContent: React$1.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
509
1225
 
510
1226
  type SidebarContext = {
@@ -570,14 +1286,86 @@ declare const SidebarMenuSubButton: React$1.ForwardRefExoticComponent<Omit<React
570
1286
  isActive?: boolean;
571
1287
  }, "ref"> & React$1.RefAttributes<HTMLAnchorElement>>;
572
1288
 
573
- declare function Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
1289
+ /**
1290
+ * Skeleton — loading placeholder block.
1291
+ *
1292
+ * Renders a directional warm shimmer (sand-800 → sand-700 sweep) driven by
1293
+ * `--c-skeleton-*` component tokens defined in tokens.css. Animates via
1294
+ * `@keyframes skeleton-shimmer`; automatically static under
1295
+ * `prefers-reduced-motion: reduce` (WCAG 2.3.3).
1296
+ *
1297
+ * Radius defaults to `--c-skeleton-radius-sm` (4px). Override via `style`:
1298
+ * borderRadius: "var(--c-skeleton-radius-lg)" — hero / media blocks
1299
+ * borderRadius: "var(--c-skeleton-radius-circle)" — circular avatars
1300
+ * borderRadius: "var(--p-radius-pill)" — pill / badge shapes
1301
+ */
1302
+ declare function Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React$1.JSX.Element;
574
1303
 
575
- declare function Slider({ className, defaultValue, value, min, max, ...props }: React$1.ComponentProps<typeof SliderPrimitive.Root>): react_jsx_runtime.JSX.Element;
1304
+ /**
1305
+ * Slider — DFL Design System v0
1306
+ *
1307
+ * Tokens consumed (Layer 3 — see tokens.css → --c-slider-*):
1308
+ * --c-slider-track-h track height 4px
1309
+ * --c-slider-track-bg empty track fill → --s-border-subtle
1310
+ * --c-slider-range-bg filled range fill → --s-brand-solid
1311
+ * --c-slider-thumb-size thumb diameter 20px
1312
+ * --c-slider-thumb-bg thumb fill → --s-surface-page
1313
+ * --c-slider-thumb-border thumb border color → --s-brand-solid
1314
+ * --c-slider-thumb-shadow base drop shadow
1315
+ * --c-slider-thumb-hover-shadow hover halo (7px amber rgba)
1316
+ * --c-slider-thumb-focus-shadow DS uniform ring (0 0 0 2px bg + 0 0 0 3px amber)
1317
+ *
1318
+ * States:
1319
+ * hover → amber-400 border + soft 7px rgba halo via --c-slider-thumb-hover-shadow
1320
+ * focus → DS uniform box-shadow ring, transition:none (instant per DS spec)
1321
+ * disabled → opacity-50, pointer-events-none, not-allowed cursor
1322
+ *
1323
+ * @param showTicks Render tick marks below the track at each step boundary.
1324
+ * Ticks before the current value are amber-tinted.
1325
+ */
1326
+ declare function Slider({ className, defaultValue, value, min, max, step, showTicks, ...props }: React$1.ComponentProps<typeof SliderPrimitive.Root> & {
1327
+ showTicks?: boolean;
1328
+ }): React$1.JSX.Element;
576
1329
 
577
- declare const SonnerToaster: ({ ...props }: ToasterProps) => react_jsx_runtime.JSX.Element;
1330
+ declare const SonnerToaster: ({ ...props }: ToasterProps) => React$1.JSX.Element;
578
1331
 
1332
+ /**
1333
+ * Switch — Radix UI primitive wired to DS v0 component tokens.
1334
+ *
1335
+ * Fixes vs original shadcn output:
1336
+ * 1. Thumb was `bg-background` → `--s-surface-page` (#0a0908, near-black) — invisible
1337
+ * on the dark unchecked track. Now uses `--c-switch-thumb-bg` (#f6f1e7, warm off-white).
1338
+ * 2. Focus ring was shadcn `ring-2 ring-ring ring-offset-2` (CSS outline approach).
1339
+ * Now uses the uniform DS box-shadow ring via `--c-switch-focus-ring`
1340
+ * (0 0 0 2px page-bg gap + 0 0 0 3px amber — box-shadow only, no outline property).
1341
+ * 3. Component token layer added: all values flow through `--c-switch-*` knobs
1342
+ * (appended to tokens.css Layer 3), making the component theme-overridable
1343
+ * at the per-component level without touching global alias chains.
1344
+ */
579
1345
  declare const Switch: React$1.ForwardRefExoticComponent<Omit<SwitchPrimitives.SwitchProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
580
1346
 
1347
+ /**
1348
+ * Table — DFL Design System v0 (token-native refactor)
1349
+ *
1350
+ * Tokens consumed (Layer 3 → Layer 2):
1351
+ * --c-table-header-fg → --s-ink-muted header cell text
1352
+ * --c-table-header-bg → transparent header cell bg
1353
+ * --c-table-divider → --s-border-subtle row separator lines
1354
+ * --c-table-row-hover-bg → --s-surface-raised tbody row hover bg
1355
+ * --c-table-row-selected-bg → --s-brand-subtle selected row amber wash
1356
+ * --c-table-row-selected-border → --s-brand-border selected row 2px left signal
1357
+ * --c-table-caption-fg → --s-ink-muted caption / empty-state text
1358
+ *
1359
+ * Body cell default ink: --s-ink-secondary (#c9c0b4)
1360
+ *
1361
+ * Numeric / ID cell conventions (applied by consumer via className):
1362
+ * font-mono text-[var(--s-ink-primary)] — ID cells (JetBrains Mono)
1363
+ * font-mono text-[var(--s-ink-primary)] text-right — amount cells (JetBrains Mono)
1364
+ *
1365
+ * Focus ring for interactive table elements (sort buttons, row-action icons):
1366
+ * Use <Button variant="ghost"> or <IconButton variant="ghost"> — both carry
1367
+ * the uniform DS amber double-shadow ring on :focus-visible automatically.
1368
+ */
581
1369
  declare const Table: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLTableElement> & React$1.RefAttributes<HTMLTableElement>>;
582
1370
  declare const TableHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLTableSectionElement> & React$1.RefAttributes<HTMLTableSectionElement>>;
583
1371
  declare const TableBody: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLTableSectionElement> & React$1.RefAttributes<HTMLTableSectionElement>>;
@@ -587,6 +1375,24 @@ declare const TableHead: React$1.ForwardRefExoticComponent<React$1.ThHTMLAttribu
587
1375
  declare const TableCell: React$1.ForwardRefExoticComponent<React$1.TdHTMLAttributes<HTMLTableCellElement> & React$1.RefAttributes<HTMLTableCellElement>>;
588
1376
  declare const TableCaption: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLTableCaptionElement> & React$1.RefAttributes<HTMLTableCaptionElement>>;
589
1377
 
1378
+ /**
1379
+ * Tabs — DFL Design System v0
1380
+ *
1381
+ * Tokens consumed (underline-indicator pattern):
1382
+ * --c-tabs-fg inactive trigger text → --s-ink-muted
1383
+ * --c-tabs-fg-active active trigger text → --s-ink-primary
1384
+ * --c-tabs-indicator active 2 px bottom border → --s-brand-solid (#E07A4A)
1385
+ * --c-tabs-divider list 1 px bottom border → --s-border-subtle
1386
+ *
1387
+ * Layout:
1388
+ * - TabsList: transparent container, 1 px --c-tabs-divider bottom border.
1389
+ * No pill bg, no card-bg affordance, no border-radius container.
1390
+ * - TabsTrigger: 2 px transparent bottom border that becomes --c-tabs-indicator
1391
+ * when active. Overlaps list divider by 1 px so indicator sits on the line.
1392
+ * - Hover: secondary ink + faint rgba wash (rgba 255 255 255 / 0.035).
1393
+ * - Focus: uniform DFL ring via `.ds-focus-ring` (1 px amber, 3 px offset).
1394
+ * - Disabled: ink-disabled, pointer-events-none, opacity-50.
1395
+ */
590
1396
  declare const Tabs: React$1.ForwardRefExoticComponent<TabsPrimitive.TabsProps & React$1.RefAttributes<HTMLDivElement>>;
591
1397
  declare const TabsList: React$1.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsListProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
592
1398
  declare const TabsTrigger: React$1.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsTriggerProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
@@ -597,14 +1403,36 @@ interface TextareaProps extends React$1.TextareaHTMLAttributes<HTMLTextAreaEleme
597
1403
  /**
598
1404
  * Textarea — DFL Design System v0
599
1405
  *
600
- * Shares Input tokens (--c-input-*). Multi-line, 80px min height.
1406
+ * Shares Input tokens (--c-input-*). Multi-line, 80px min height. Resizable.
1407
+ *
1408
+ * Focus ring (DS v0 ch.5.2 uniform spec):
1409
+ * --c-textarea-ring-focus = 0 0 0 2px page-bg, 0 0 0 3px amber
1410
+ * --c-textarea-ring-focus-error = 0 0 0 2px page-bg, 0 0 0 3px danger-red
601
1411
  */
602
1412
  declare const Textarea: React$1.ForwardRefExoticComponent<TextareaProps & React$1.RefAttributes<HTMLTextAreaElement>>;
603
1413
 
1414
+ /**
1415
+ * Toast — DFL Design System v0
1416
+ *
1417
+ * Tokens consumed (Layer 3 → Layer 2 → Layer 1):
1418
+ * --c-toast-{bg,border,fg,fg-desc,radius,shadow,close-fg,close-fg-hover,accent-w,action-border}
1419
+ * --c-toast-{success,warning,danger,info}-{bg,border}
1420
+ * backed by --s-{success,warning,danger,info}-{subtle,border,fg,solid}
1421
+ *
1422
+ * Variants: default | success | warning | danger | info
1423
+ * `destructive` is kept as a backward-compat alias of `danger`.
1424
+ *
1425
+ * A11y fixes vs vanilla shadcn:
1426
+ * - ToastClose always visible at opacity-60 (was opacity-0 until group-hover)
1427
+ * - Focus ring uses the uniform DFL box-shadow ring instead of raw ring-2/ring-offset
1428
+ * - Semantic close-fg / title accent inherit per-variant colour via group selectors
1429
+ *
1430
+ * Left accent stripe rendered as ::before pseudo-element, coloured per variant.
1431
+ */
604
1432
  declare const ToastProvider: React$1.FC<ToastPrimitives.ToastProviderProps>;
605
1433
  declare const ToastViewport: React$1.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastViewportProps & React$1.RefAttributes<HTMLOListElement>, "ref"> & React$1.RefAttributes<HTMLOListElement>>;
606
1434
  declare const Toast: React$1.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastProps & React$1.RefAttributes<HTMLLIElement>, "ref"> & VariantProps<(props?: ({
607
- variant?: "default" | "destructive" | null | undefined;
1435
+ variant?: "default" | "info" | "success" | "warning" | "danger" | "destructive" | null | undefined;
608
1436
  } & class_variance_authority_types.ClassProp) | undefined) => string> & React$1.RefAttributes<HTMLLIElement>>;
609
1437
  declare const ToastAction: React$1.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastActionProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
610
1438
  declare const ToastClose: React$1.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastCloseProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
@@ -613,16 +1441,57 @@ declare const ToastDescription: React$1.ForwardRefExoticComponent<Omit<ToastPrim
613
1441
  type ToastComponentProps = React$1.ComponentPropsWithoutRef<typeof Toast>;
614
1442
  type ToastActionElement = React$1.ReactElement<typeof ToastAction>;
615
1443
 
616
- declare function Toaster(): react_jsx_runtime.JSX.Element;
1444
+ declare function Toaster(): React$1.JSX.Element;
617
1445
 
1446
+ /**
1447
+ * toggleVariants — DFL DS v0
1448
+ *
1449
+ * Token hierarchy consumed:
1450
+ * --c-toggle-{bg,bg-hover,bg-active,bg-active-hover}
1451
+ * --c-toggle-{fg,fg-hover,fg-active}
1452
+ * --c-toggle-border
1453
+ * --c-toggle-focus-ring (uniform 2px-gap + 1px-amber spec, ch.5.2)
1454
+ *
1455
+ * Active state: amber wash (--s-brand-subtle) + amber-300 fg (--s-brand-fg),
1456
+ * NOT the generic --accent alias. Hover on active: slightly stronger amber wash.
1457
+ *
1458
+ * Focus ring: box-shadow 0 0 0 2px page-bg + 0 0 0 3px #E07A4A, z-index:10
1459
+ * so the ring is NOT clipped by siblings in a group.
1460
+ *
1461
+ * Disabled: 40% opacity + pointer-events:none (active state still visible at
1462
+ * reduced opacity to preserve context).
1463
+ */
618
1464
  declare const toggleVariants: (props?: ({
619
1465
  variant?: "default" | "outline" | null | undefined;
620
1466
  size?: "default" | "sm" | "lg" | null | undefined;
621
1467
  } & class_variance_authority_types.ClassProp) | undefined) => string;
622
- declare function Toggle({ className, variant, size, ...props }: React$1.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>): react_jsx_runtime.JSX.Element;
1468
+ declare function Toggle({ className, variant, size, ...props }: React$1.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>): React$1.JSX.Element;
623
1469
 
624
- declare function ToggleGroup({ className, variant, size, children, ...props }: React$1.ComponentProps<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants>): react_jsx_runtime.JSX.Element;
625
- declare function ToggleGroupItem({ className, children, variant, size, ...props }: React$1.ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>): react_jsx_runtime.JSX.Element;
1470
+ /**
1471
+ * ToggleGroup DFL DS v0
1472
+ *
1473
+ * Tokens consumed (via toggleVariants in toggle.tsx):
1474
+ * --c-toggle-{bg,bg-hover,bg-active,bg-active-hover,fg,fg-hover,fg-active}
1475
+ * --c-toggle-{border,focus-ring,outline-active-shadow}
1476
+ * --c-toggle-group-radius
1477
+ *
1478
+ * Variant "outline":
1479
+ * • Group container gets --p-shadow-sm depth shadow
1480
+ * • Each item's border is `border-[var(--c-toggle-border)]` (--s-border-subtle)
1481
+ * • Non-first items have `border-l-0` (left removed) so only item-1's right
1482
+ * border acts as the internal divider — no double lines
1483
+ * • Active item gets an inset top-highlight shadow (--c-toggle-outline-active-shadow)
1484
+ *
1485
+ * Focus ring: see toggle.tsx — z-10 ensures ring renders above siblings.
1486
+ */
1487
+ declare function ToggleGroup({ className, variant, size, children, ...props }: React$1.ComponentProps<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants>): React$1.JSX.Element;
1488
+ declare function ToggleGroupItem({ className, children, variant, size, ...props }: React$1.ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>): React$1.JSX.Element;
1489
+
1490
+ /**
1491
+ * ProtectedRoute — auth guard component.
1492
+ * Renders children only when authenticated; calls onUnauthenticated otherwise.
1493
+ * Identical pattern across all 4 audited apps (~25-40 lines each).
1494
+ */
626
1495
 
627
1496
  interface ProtectedRouteProps {
628
1497
  children: ReactNode;
@@ -631,7 +1500,7 @@ interface ProtectedRouteProps {
631
1500
  /** Rendered while auth state is loading. Defaults to null. */
632
1501
  loadingFallback?: ReactNode;
633
1502
  }
634
- declare const ProtectedRoute: ({ children, onUnauthenticated, loadingFallback, }: ProtectedRouteProps) => react_jsx_runtime.JSX.Element;
1503
+ declare const ProtectedRoute: ({ children, onUnauthenticated, loadingFallback, }: ProtectedRouteProps) => React__default.JSX.Element;
635
1504
 
636
1505
  interface DflRemoteProps {
637
1506
  src: string;
@@ -650,13 +1519,13 @@ interface DflRemoteProps {
650
1519
  style?: React.CSSProperties;
651
1520
  allow?: string;
652
1521
  }
653
- declare function DflRemote({ src, title, authToken, supabaseSession, onNavigate, onReady, fallback, className, style, allow, }: DflRemoteProps): react_jsx_runtime.JSX.Element;
1522
+ declare function DflRemote({ src, title, authToken, supabaseSession, onNavigate, onReady, fallback, className, style, allow, }: DflRemoteProps): React$1.JSX.Element;
654
1523
 
655
1524
  interface IframeAwareProps {
656
1525
  children: React.ReactNode;
657
1526
  allowedOrigins?: RegExp[];
658
1527
  }
659
- declare function IframeAware({ children, allowedOrigins }: IframeAwareProps): react_jsx_runtime.JSX.Element;
1528
+ declare function IframeAware({ children, allowedOrigins }: IframeAwareProps): React$1.JSX.Element;
660
1529
 
661
1530
  interface IframeContextValue {
662
1531
  token: string | null;
@@ -686,6 +1555,60 @@ interface DflResizeMessage {
686
1555
  type DflIframeMessage = DflSetTokenMessage | DflNavigateMessage | DflReadyMessage | DflResizeMessage;
687
1556
  declare function isAllowedOrigin(origin: string): boolean;
688
1557
 
1558
+ /**
1559
+ * PasswordInput — DFL Design System v0 (Molecule)
1560
+ *
1561
+ * Opinionated password field: Input atom + reveal toggle (Eye/EyeOff).
1562
+ * Accepts optional label, help text, and error message.
1563
+ *
1564
+ * Tokens consumed (Layer 3 component tokens):
1565
+ * --c-input-{bg,fg,placeholder,border,border-hover,border-focus,ring-focus,border-error,radius}
1566
+ * --c-passwordinput-toggle-fg — toggle idle color (--s-ink-muted)
1567
+ * --c-passwordinput-toggle-fg-hover — toggle hover color (--s-ink-primary)
1568
+ *
1569
+ * WCAG 2.1 SC 2.1.1: toggle button is keyboard-reachable (tabIndex=0, default
1570
+ * for <button>). The DS uniform focus ring (2px bg gap + 1px amber) is applied
1571
+ * via focus-visible ring utilities.
1572
+ *
1573
+ * Error border: delegated to the Input atom's aria-invalid styles which resolve
1574
+ * to --c-input-border-error (= --s-danger-solid, #e07a7a). No raw hex fallbacks.
1575
+ *
1576
+ * ATOMIC TIER: Molecule (Input atom + Eye/EyeOff icons + optional label/help/error)
1577
+ * Moved from organisms/ to molecules/ to match the atomic-tier map.
1578
+ */
1579
+
1580
+ interface PasswordInputProps extends Omit<React$1.ComponentPropsWithoutRef<typeof Input>, "type"> {
1581
+ /** Optional field label rendered above the input. */
1582
+ label?: React$1.ReactNode;
1583
+ /** Error text — also flips the border to danger via aria-invalid. */
1584
+ error?: string;
1585
+ /** Helper text shown when there is no error. */
1586
+ helpText?: string;
1587
+ /** Convenience callback receiving the raw string value. */
1588
+ onValueChange?: (value: string) => void;
1589
+ }
1590
+ declare const PasswordInput: React$1.ForwardRefExoticComponent<PasswordInputProps & React$1.RefAttributes<HTMLInputElement>>;
1591
+
1592
+ /**
1593
+ * LoginPage organism
1594
+ * Ported from dfl-learn's Login + AuthForm components.
1595
+ * Self-contained: uses @dfl/components primitives + useAuth hook.
1596
+ * No framer-motion dependency — plain CSS transitions.
1597
+ *
1598
+ * v1.1 — DS token hygiene pass:
1599
+ * - Removed raw hex overrides (#E07A4A); CTA consumes --c-button-primary-bg
1600
+ * via the Button primary variant. Mode-switch <button> and terms <a> use
1601
+ * --s-brand-solid via CSS var class.
1602
+ * - Uniform DS focus ring (box-shadow: 0 0 0 2px --s-surface-page, 0 0 0 3px
1603
+ * --s-border-focus) on mode-switch button and terms link via
1604
+ * --c-loginpage-focus-ring; Input + Button components carry their own rings.
1605
+ * - Inputs consume --c-input-* tokens natively (bg-secondary/border-secondary
1606
+ * compatibility aliases removed); aria-invalid drives error-border + bg.
1607
+ * - Error state: error banner (--c-loginpage-error-*), inputs get aria-invalid.
1608
+ * - Disabled CTA (signup + no terms) shows --s-surface-elevated bg +
1609
+ * --s-ink-disabled fg via inline style override.
1610
+ */
1611
+
689
1612
  interface LoginPageProps {
690
1613
  /** Logo element or image src string. Defaults to DFL logo. */
691
1614
  logo?: ReactNode | string;
@@ -703,8 +1626,42 @@ interface LoginPageProps {
703
1626
  termsUrl?: string;
704
1627
  /** Custom CSS class for the outer wrapper. */
705
1628
  className?: string;
1629
+ /**
1630
+ * Pre-seed an error message for Storybook / SSR error hand-off.
1631
+ * Renders the component in the post-submit error state (banner + input borders).
1632
+ */
1633
+ initialErrorMessage?: string;
1634
+ /** Pre-seed the submitting/loading state (Storybook). */
1635
+ initialIsSubmitting?: boolean;
1636
+ /** Pre-seed accepted-terms for signup stories (Storybook). */
1637
+ initialAcceptedTerms?: boolean;
1638
+ /**
1639
+ * Auto-focus a specific field on mount.
1640
+ * Used by the LoginInputFocused story to demonstrate the DS focus ring.
1641
+ */
1642
+ focusField?: "email" | "password";
706
1643
  }
707
- declare function LoginPage({ logo, title, redirectUrl, onSuccess, onError, defaultMode, termsUrl, className, }: LoginPageProps): react_jsx_runtime.JSX.Element;
1644
+ declare function LoginPage({ logo, title, redirectUrl, onSuccess, onError, defaultMode, termsUrl, className, initialErrorMessage, initialIsSubmitting, initialAcceptedTerms, focusField, }: LoginPageProps): React__default.JSX.Element;
1645
+
1646
+ /**
1647
+ * LoginScreen organism
1648
+ * Shared, behavior-agnostic auth UI. Renders branding + email/password fields
1649
+ * (the password field is the canonical PasswordInput with a reveal toggle) and
1650
+ * calls `onSubmit(email, password)`. NO supabase/auth logic lives here — the
1651
+ * consuming app wires its existing handler to `onSubmit` and drives `error` /
1652
+ * `loading` from its own state.
1653
+ *
1654
+ * NOTE: this is the prop-driven login. The legacy `LoginPage` (which embeds the
1655
+ * `useAuth` hook) is kept for existing consumers; new apps should adopt
1656
+ * `LoginScreen`.
1657
+ *
1658
+ * DS token fixes applied (v1.5.x):
1659
+ * • Title: Barlow Condensed 700 via --c-loginscreen-title-font (--s-font-display)
1660
+ * • Outer wrapper: explicit background: var(--c-loginscreen-bg) (--s-surface-page)
1661
+ * • Card: border-radius via --c-card-radius (10px), not rounded-xl (12px)
1662
+ * • Error: color via --c-loginscreen-error-fg (--s-danger-fg), no raw hex fallback
1663
+ * • Focus ring: DS uniform 2px gap + 1px amber ring on all focusable elements
1664
+ */
708
1665
 
709
1666
  interface LoginScreenProps {
710
1667
  /** Logo element or image src. Defaults to the DFL logomark. */
@@ -730,37 +1687,7 @@ interface LoginScreenProps {
730
1687
  /** Outer wrapper class. */
731
1688
  className?: string;
732
1689
  }
733
- declare function LoginScreen({ logo, title, subtitle, emailLabel, passwordLabel, submitLabel, onSubmit, error, loading, footer, className, }: LoginScreenProps): react_jsx_runtime.JSX.Element;
734
-
735
- /**
736
- * PasswordInput organism
737
- * Canonical password field with a show/hide reveal toggle.
738
- * Generalised from dfl-reviews' atoms/password-input. Optional label/error/help.
739
- * Uncontrolled-friendly: spreads native input props; `onValueChange` is a
740
- * convenience on top of the standard `onChange`.
741
- */
742
-
743
- interface PasswordInputProps extends Omit<React$1.ComponentPropsWithoutRef<typeof Input>, "type"> {
744
- /** Optional field label rendered above the input. */
745
- label?: React$1.ReactNode;
746
- /** Error text — also flips the border to danger. */
747
- error?: string;
748
- /** Helper text shown when there's no error. */
749
- helpText?: string;
750
- /** Convenience callback receiving the raw string value. */
751
- onValueChange?: (value: string) => void;
752
- }
753
- declare const PasswordInput: React$1.ForwardRefExoticComponent<PasswordInputProps & React$1.RefAttributes<HTMLInputElement>>;
754
-
755
- /**
756
- * UserAvatar organism
757
- * Avatar with a deterministic member-palette fallback hue.
758
- *
759
- * Behavior-agnostic: pass `name` (and optional `src`). When no image loads,
760
- * the initials are shown on one of the 10 `--member-*` hues, picked
761
- * deterministically from a stable hash of `id ?? name`. The same person
762
- * therefore always gets the same colour across every DFL app.
763
- */
1690
+ declare function LoginScreen({ logo, title, subtitle, emailLabel, passwordLabel, submitLabel, onSubmit, error, loading, footer, className, }: LoginScreenProps): React$1.JSX.Element;
764
1691
 
765
1692
  /** Number of member hues defined as `--member-1..N` in tokens.css. */
766
1693
  declare const MEMBER_PALETTE_SIZE = 10;
@@ -773,22 +1700,63 @@ declare function getInitials(name: string): string;
773
1700
  declare function memberHueIndex(seed: string, paletteSize?: number): number;
774
1701
  /** The CSS var() expression for a seed's member hue (e.g. `var(--member-3)`). */
775
1702
  declare function memberHueVar(seed: string): string;
776
- interface UserAvatarProps extends React$1.ComponentPropsWithoutRef<typeof Avatar> {
1703
+ /** CVA for the avatar root (width/height). */
1704
+ declare const avatarSizeVariants: (props?: ({
1705
+ size?: "sm" | "lg" | "md" | "xl" | "xs" | null | undefined;
1706
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1707
+ interface UserAvatarProps extends Omit<React$1.ComponentPropsWithoutRef<typeof Avatar>, "size">, VariantProps<typeof avatarSizeVariants> {
777
1708
  /** Display name — drives the initials and (by default) the hue. */
778
1709
  name: string;
779
- /** Avatar image URL. Falls back to the coloured initials if absent/broken. */
1710
+ /** Avatar image URL. Falls back to coloured initials if absent/broken. */
780
1711
  src?: string | null;
781
1712
  /**
782
1713
  * Stable identity used to pick the hue (e.g. user id). Defaults to `name`.
783
1714
  * Pass a sticky id so the colour survives display-name changes.
784
1715
  */
785
1716
  colorSeed?: string;
1717
+ /**
1718
+ * Size variant (xs=24 / sm=32 / md=40 / lg=56 / xl=72 px).
1719
+ * Defaults to `md`. Replaces the previous workaround of passing raw className.
1720
+ */
1721
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
786
1722
  }
787
1723
  /**
788
- * <UserAvatar name="Ada Lovelace" src={url} colorSeed={userId} />
1724
+ * <UserAvatar name="Ada Lovelace" src={url} colorSeed={userId} size="md" />
1725
+ *
1726
+ * Interactive usage — wrap in a button/link for clickable profile targets:
1727
+ * <button
1728
+ * className="rounded-full outline-none
1729
+ * focus-visible:shadow-[0_0_0_2px_var(--background),0_0_0_3px_#E07A4A]"
1730
+ * >
1731
+ * <UserAvatar name="Ada Lovelace" />
1732
+ * </button>
1733
+ *
1734
+ * The focus ring MUST live on the outer wrapper, NOT on UserAvatar itself,
1735
+ * because overflow:hidden on the circle clips any box-shadow.
789
1736
  */
790
1737
  declare const UserAvatar: React$1.ForwardRefExoticComponent<UserAvatarProps & React$1.RefAttributes<HTMLSpanElement>>;
791
1738
 
1739
+ /**
1740
+ * UserMenu organism
1741
+ * UserAvatar trigger + dropdown menu. Fully prop-driven and
1742
+ * behavior-agnostic — the consuming app passes its own handlers/items;
1743
+ * no routing or auth logic lives here.
1744
+ *
1745
+ * Tokens consumed (Layer 3 — --c-usermenu-*):
1746
+ * --c-usermenu-panel-bg dropdown panel background
1747
+ * --c-usermenu-panel-width panel fixed width (replaces hardcoded w-52)
1748
+ * --c-usermenu-item-hover-bg item hover/highlighted surface (#2a2622)
1749
+ * --c-usermenu-danger-fg destructive item fg (--s-danger-fg, no inline fallback)
1750
+ * --c-usermenu-danger-hover-bg destructive item hover bg (--s-danger-subtle)
1751
+ * --c-usermenu-item-focus-ring DS uniform focus ring for regular items
1752
+ * --c-usermenu-item-danger-focus-ring danger-fg ring for destructive items
1753
+ *
1754
+ * Trigger focus ring: inherited from Button variant="ghost" via
1755
+ * --c-button-focus-gap + --c-button-focus-brand (atoms-button refactor, 2026-07-02).
1756
+ * box-shadow: 0 0 0 2px var(--c-button-focus-gap), 0 0 0 3px var(--c-button-focus-brand).
1757
+ * No additional trigger-level override required in UserMenu.
1758
+ */
1759
+
792
1760
  interface UserMenuItem {
793
1761
  /** Visible label. */
794
1762
  label: string;
@@ -825,9 +1793,23 @@ interface UserMenuProps {
825
1793
  onSignOut?: () => void;
826
1794
  /** Dropdown alignment. Defaults to "end". */
827
1795
  align?: "start" | "center" | "end";
1796
+ /**
1797
+ * Open the dropdown on mount (uncontrolled). Useful for stories / tests
1798
+ * that need to show the open panel without user interaction.
1799
+ */
1800
+ defaultOpen?: boolean;
828
1801
  className?: string;
829
1802
  }
830
- declare function UserMenu({ name, email, avatarUrl, colorSeed, showName, items, onProfile, onSettings, onSignOut, align, className, }: UserMenuProps): react_jsx_runtime.JSX.Element;
1803
+ declare function UserMenu({ name, email, avatarUrl, colorSeed, showName, items, onProfile, onSettings, onSignOut, align, defaultOpen, className, }: UserMenuProps): React$1.JSX.Element;
1804
+
1805
+ /**
1806
+ * ConfirmDialog organism
1807
+ * Generic confirm/delete dialog built on the AlertDialog primitive.
1808
+ * Replaces the per-app Confirm/Delete re-wraps — pass title/body/labels
1809
+ * and an onConfirm handler. Behavior-agnostic: the consumer owns the action.
1810
+ *
1811
+ * Controlled (`open` + `onOpenChange`) or trigger-driven (`trigger`).
1812
+ */
831
1813
 
832
1814
  interface ConfirmDialogProps {
833
1815
  /** Dialog heading. */
@@ -856,7 +1838,14 @@ interface ConfirmDialogProps {
856
1838
  /** Disable the confirm button (e.g. while a parent validates). */
857
1839
  confirmDisabled?: boolean;
858
1840
  }
859
- declare function ConfirmDialog({ title, body, confirmLabel, cancelLabel, variant, onConfirm, onCancel, open, onOpenChange, trigger, confirmDisabled, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
1841
+ declare function ConfirmDialog({ title, body, confirmLabel, cancelLabel, variant, onConfirm, onCancel, open, onOpenChange, trigger, confirmDisabled, }: ConfirmDialogProps): React$1.JSX.Element;
1842
+
1843
+ /**
1844
+ * AppSidebar organism
1845
+ * Generic collapsible sidebar for DFL apps.
1846
+ * Based on João's AppSidebar (dfl-notifications) + DFL design tokens.
1847
+ * Uses the Sidebar primitive from @dfl/components.
1848
+ */
860
1849
 
861
1850
  interface NavItem {
862
1851
  title: string;
@@ -899,10 +1888,44 @@ interface AppSidebarProps {
899
1888
  }
900
1889
  /**
901
1890
  * AppSidebar wraps the Sidebar primitive with SidebarProvider.
902
- * Renders an optional trigger button + the sidebar itself.
903
1891
  * Pass `children` to render the main content area next to the sidebar.
1892
+ *
1893
+ * The SidebarTrigger (collapse toggle) MUST live inside an AppNavbar `leftSlot`
1894
+ * that is passed as part of `children` — this keeps the unified 56px topbar as
1895
+ * the only top chrome (no separate 48px trigger strip stacking above it).
1896
+ *
1897
+ * Example:
1898
+ * <AppSidebar navGroups={...}>
1899
+ * <AppNavbar leftSlot={<SidebarTrigger />} ... />
1900
+ * <main>...</main>
1901
+ * </AppSidebar>
1902
+ */
1903
+ declare function AppSidebar({ defaultOpen, children, ...props }: AppSidebarProps): React__default.JSX.Element;
1904
+
1905
+ /**
1906
+ * AppNavbar organism
1907
+ * Top navigation bar with optional left slot (e.g. SidebarTrigger), breadcrumb,
1908
+ * user menu, and theme toggle. Works standalone — no router dependency.
1909
+ *
1910
+ * DS v0 tokens consumed (Layer 3 → Layer 2):
1911
+ * --c-navbar-bg → --s-surface-panel (#141210 — elevated panel, NOT page flush)
1912
+ * --c-navbar-border → --s-border-subtle
1913
+ * --c-navbar-h → 56px (same as --c-header-h)
1914
+ * --c-navbar-px → --p-space-4
1915
+ * --c-navbar-breadcrumb-fg → --s-ink-muted
1916
+ * --c-navbar-breadcrumb-fg-current → --s-ink-primary
1917
+ *
1918
+ * leftSlot: embed a SidebarTrigger here so the sidebar toggle lives in the unified
1919
+ * 56px topbar rather than in a separate 48px strip (which would create 104px of dead
1920
+ * chrome). Pass <SidebarTrigger /> as leftSlot in the AppShell template.
1921
+ *
1922
+ * Focus ring: all interactive elements carry `.ds-focus-ring` (outline form, from
1923
+ * tokens.css) or `.c-appshell-focus` (box-shadow form, preferred in AppShell context).
1924
+ * The button's built-in `focus-visible:ring-*` is zeroed so only the DS ring shows.
1925
+ *
1926
+ * Sign-out item: uses --s-danger-fg / --s-danger-subtle directly — never
1927
+ * the raw `text-destructive` shadcn alias which breaks if compat mapping drifts.
904
1928
  */
905
- declare function AppSidebar({ defaultOpen, children, ...props }: AppSidebarProps): react_jsx_runtime.JSX.Element;
906
1929
 
907
1930
  interface BreadcrumbEntry {
908
1931
  label: string;
@@ -919,7 +1942,12 @@ interface AppNavbarProps {
919
1942
  breadcrumbs?: BreadcrumbEntry[];
920
1943
  /** User info for the avatar menu. */
921
1944
  userInfo?: NavbarUserInfo;
922
- /** Current theme. Toggles between "light" and "dark". */
1945
+ /**
1946
+ * Current theme — controls the toggle icon only (Moon ↔ Sun).
1947
+ * The navbar surface is ALWAYS --c-navbar-bg (--s-surface-page, #0a0908),
1948
+ * dark-first regardless of this prop. "light" mode is editorial-only in DFL DS v0.
1949
+ * Default is "dark" (dark-first per DFL DS v0).
1950
+ */
923
1951
  theme?: "light" | "dark";
924
1952
  /** Called when user clicks the theme toggle button. */
925
1953
  onThemeToggle?: () => void;
@@ -929,12 +1957,39 @@ interface AppNavbarProps {
929
1957
  onSettingsClick?: () => void;
930
1958
  /** Called when user clicks Sign Out menu item. */
931
1959
  onSignOut?: () => void;
932
- /** Extra action buttons rendered to the right of breadcrumbs. */
1960
+ /** Extra action elements rendered to the right of breadcrumbs (8px gap). */
933
1961
  actions?: ReactNode;
1962
+ /**
1963
+ * Optional slot rendered to the LEFT of the breadcrumb row.
1964
+ * Embed a `<SidebarTrigger />` here so the sidebar toggle lives inside the
1965
+ * unified 56px topbar, replacing the redundant 48px trigger strip above it.
1966
+ */
1967
+ leftSlot?: ReactNode;
934
1968
  /** Custom CSS class for the navbar wrapper. */
935
1969
  className?: string;
936
1970
  }
937
- declare function AppNavbar({ breadcrumbs, userInfo, theme, onThemeToggle, onProfileClick, onSettingsClick, onSignOut, actions, className, }: AppNavbarProps): react_jsx_runtime.JSX.Element;
1971
+ declare function AppNavbar({ breadcrumbs, userInfo, theme, onThemeToggle, onProfileClick, onSettingsClick, onSignOut, actions, leftSlot, className, }: AppNavbarProps): React__default.JSX.Element;
1972
+
1973
+ /**
1974
+ * Gantt organism — a real roadmap Gantt (rows × week columns).
1975
+ *
1976
+ * Ported from João's cohort Gantt (joao.devfellowship.com home) to the DFL
1977
+ * design system: dark surfaces, amber single-accent, Barlow/Inter/JBMono,
1978
+ * 4px grid, rounded (radius-lg) cards. ~90% visual parity, on-brand.
1979
+ *
1980
+ * Anatomy (matches the reference):
1981
+ * ┌ STAGE / TASK ┬ W1 │ W2 │ W3 │ … │ Wn ┐ ← week axis header (mono-uppercase)
1982
+ * │ ▸ Stage 1 ● │ ▓▓▓▓▓▓░░░░░ 40% │ ← stage row: bar across its week-span,
1983
+ * │ milestone │ ▓▓▓ │ amber-filled to progress
1984
+ * │ milestone │ ░░░ │ ← milestone sub-bars positioned by week
1985
+ * │ ▸ Stage 2 ● │ ░░░░░ 0% │
1986
+ * └──────────────┴───────────────────────┘
1987
+ * Dependencies (predecessor → successor) render as connector links between
1988
+ * stage bars, NOT plain arrows between cards.
1989
+ *
1990
+ * Pure (no data fetching). Consumer maps its model into GanttStage[] and the
1991
+ * derived week axis. Self-contained: only depends on cn + DS tokens/utilities.
1992
+ */
938
1993
 
939
1994
  interface GanttMilestone {
940
1995
  id: string;
@@ -999,6 +2054,14 @@ interface GanttProps extends React$1.HTMLAttributes<HTMLDivElement> {
999
2054
  nameColWidth?: number;
1000
2055
  /** Min px width of a single week column. Defaults to 64. */
1001
2056
  weekMinWidth?: number;
2057
+ /**
2058
+ * Optional click handler for a milestone. When provided, each milestone's
2059
+ * name-column cell becomes a keyboard-accessible button that invokes this
2060
+ * callback with the milestone and its parent stage. When omitted, milestone
2061
+ * rows render exactly as before (a non-interactive cell) — fully
2062
+ * backward-compatible, so existing consumers are unaffected.
2063
+ */
2064
+ onMilestoneClick?: (milestone: GanttMilestone, stage: GanttStage) => void;
1002
2065
  }
1003
2066
  /** Default width of the sticky name column. ~2× the original 240 → readable. */
1004
2067
  declare const DEFAULT_NAME_COL_WIDTH = 320;
@@ -1020,7 +2083,40 @@ declare function barGridColumn(weekStart: number, weekSpan: number, weekCount: n
1020
2083
  start: number;
1021
2084
  span: number;
1022
2085
  };
1023
- declare function Gantt({ stages, weeks, dependencies, rowsHeader, stagesOnly, header, labelWidth, nameColWidth, weekMinWidth, className, style, ...rest }: GanttProps): react_jsx_runtime.JSX.Element;
2086
+ declare function Gantt({ stages, weeks, dependencies, rowsHeader, stagesOnly, header, labelWidth, nameColWidth, weekMinWidth, onMilestoneClick, className, style, ...rest }: GanttProps): React$1.JSX.Element;
2087
+
2088
+ /**
2089
+ * PublishDrawer organism — the central node of the DFL content-creation machine.
2090
+ *
2091
+ * A shared, app-agnostic publish widget (ADR-6 of plan
2092
+ * `20260501-content-creation-machine`). Any DFL creator app (Lesson Studio,
2093
+ * Course Shaper, …) imports it, hands it a recorded `videoUrl` plus a Supabase
2094
+ * client, and it orchestrates the existing `dfl-publisher-*` edge functions to
2095
+ * publish the piece cross-platform via Zernio + register the lesson.
2096
+ *
2097
+ * v1 scope (Q3=B, locked TG 2026-05-31): **YouTube only**. IG / TikTok are v2.
2098
+ * v1 SEO (Q4=B): the creator types title / keyword manually — no dfl-seo call.
2099
+ *
2100
+ * Self-contained: composes @dfl/components primitives. The `SupabaseClient` is
2101
+ * injected (never hardcoded) — same convention as AuthProvider/LoginPage. The
2102
+ * caller's session JWT rides along automatically via `supabase.functions.invoke`,
2103
+ * which the edge fns require for `auth.getUser()`.
2104
+ *
2105
+ * Edge-fn contracts (dfl-schema/supabase/functions):
2106
+ * - dfl-publisher-list-accounts GET → { ok, accounts: PublisherAccount[] }
2107
+ * - render-design-template POST → { output_url } (Thumbify)
2108
+ * - dfl-publisher-create-post POST → { ok, zernio_post_id, post_url, status, log_id }
2109
+ * - dfl-publisher-register-lesson POST → { ok, lesson_id, ... }
2110
+ *
2111
+ * DS token corrections (v1.1.0):
2112
+ * - Youtube icon: text-red-600 → color: var(--c-publish-drawer-platform-fg)
2113
+ * - CheckCircle2: text-green-600 → color: var(--c-publish-drawer-success-fg)
2114
+ * - Error message: bare text-destructive <p> → styled box via --s-danger-* tokens
2115
+ * - Zernio post ID: bare text → JetBrains Mono chip via --c-publish-drawer-postid-font
2116
+ * - SelectTrigger: shadcn legacy focus:ring-2 → DS focus ring via --c-input-ring-focus
2117
+ * - RenderingThumb: added indeterminate progress bar + brand status note
2118
+ * - Publishing: added inline brand status note
2119
+ */
1024
2120
 
1025
2121
  /** Minimal subset of `@supabase/supabase-js` SupabaseClient we rely on.
1026
2122
  * Kept structural so the package never hard-depends on supabase-js. */
@@ -1083,6 +2179,15 @@ interface PublishDrawerProps {
1083
2179
  /** Called on error. */
1084
2180
  onError?: (error: Error) => void;
1085
2181
  className?: string;
2182
+ /**
2183
+ * @internal Storybook-only props — bypass async effects to pin a specific
2184
+ * visual state without needing mock supabase timing tricks.
2185
+ * Never pass these in production code.
2186
+ */
2187
+ _storyStatus?: PublishStatus;
2188
+ _storyResult?: PublishResult | null;
2189
+ _storyAccounts?: PublisherAccount[];
2190
+ _storyErrorMsg?: string | null;
1086
2191
  }
1087
2192
  /** Parse a comma/space-separated tag/keyword string into a clean array. */
1088
2193
  declare function parseTags(raw: string): string[];
@@ -1095,6 +2200,6 @@ declare function validatePublishForm(input: {
1095
2200
  description: string;
1096
2201
  accountId: string | null;
1097
2202
  }): string | null;
1098
- declare function PublishDrawer({ open, onOpenChange, supabase, videoUrl, transcript, suggestedTitle, suggestedDescription, suggestedThumbnailUrl, thumbnailTemplateId, buId, registerLesson, onPublished, onError, className, }: PublishDrawerProps): react_jsx_runtime.JSX.Element;
2203
+ declare function PublishDrawer({ open, onOpenChange, supabase, videoUrl, transcript, suggestedTitle, suggestedDescription, suggestedThumbnailUrl, thumbnailTemplateId, buId, registerLesson, onPublished, onError, className, _storyStatus, _storyResult, _storyAccounts, _storyErrorMsg, }: PublishDrawerProps): React$1.JSX.Element;
1099
2204
 
1100
- export { ALLOWED_ORIGINS, Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppNavbar, type AppNavbarProps, AppSidebar, type AppSidebarProps, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, Breadcrumb, BreadcrumbEllipsis, type BreadcrumbEntry, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, type CalendarProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ConfirmDialog, type ConfirmDialogProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DEFAULT_NAME_COL_WIDTH, type DflIframeMessage, type DflNavigateMessage, type DflReadyMessage, DflRemote, type DflRemoteProps, type DflResizeMessage, type DflSetTokenMessage, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Gantt, type GanttDependency, type GanttMilestone, type GanttProps, type GanttStage, HoverCard, HoverCardContent, HoverCardTrigger, IconButton, type IconButtonProps, IframeAware, type IframeAwareProps, IframeContext, type IframeContextValue, type IframeMessageType, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Kbd, type KbdProps, Label, LoginPage, type LoginPageProps, LoginScreen, type LoginScreenProps, MEMBER_PALETTE_SIZE, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, type NavGroup, type NavItem, type NavbarUserInfo, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PasswordInput, type PasswordInputProps, Popover, PopoverContent, PopoverTrigger, Progress, ProtectedRoute, type ProtectedRouteProps, PublishDrawer, type PublishDrawerProps, type PublishDrawerSupabase, type PublishResult, type PublishStatus, type PublisherAccount, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, SonnerToaster, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, Toast, ToastAction, type ToastActionElement, ToastClose, type ToastComponentProps, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserAvatar, type UserAvatarProps, type UserInfo, UserMenu, type UserMenuItem, type UserMenuProps, badgeVariants, barGridColumn, buttonVariants, clampPct, filterPublishableAccounts, getInitials, iconButtonVariants, isAllowedOrigin, kbdVariants, labelVariants, memberHueIndex, memberHueVar, navigationMenuTriggerStyle, parseTags, resolveNameColWidth, resolveWeekCount, resolveWeekLabels, stageProgress, toggleVariants, useFormField, useSidebar, validatePublishForm };
2205
+ export { ALLOWED_ORIGINS, AVATAR_MEMBER_PALETTE_SIZE, Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, type AlertDialogActionProps, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppNavbar, type AppNavbarProps, AppSidebar, type AppSidebarProps, AspectRatio, Avatar, AvatarFallback, AvatarGroup, AvatarImage, type AvatarSize, AvatarStatus, type AvatarStatusValue, type AvatarTone, Badge, type BadgeProps, Breadcrumb, BreadcrumbEllipsis, type BreadcrumbEntry, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, type CalendarProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselDots, CarouselItem, CarouselNext, CarouselPrevious, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleHeader, CollapsibleItem, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ConfirmDialog, type ConfirmDialogProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DEFAULT_NAME_COL_WIDTH, type DflIframeMessage, type DflNavigateMessage, type DflReadyMessage, DflRemote, type DflRemoteProps, type DflResizeMessage, type DflSetTokenMessage, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Gantt, type GanttDependency, type GanttMilestone, type GanttProps, type GanttStage, HoverCard, HoverCardContent, HoverCardTrigger, IconButton, type IconButtonProps, IframeAware, type IframeAwareProps, IframeContext, type IframeContextValue, type IframeMessageType, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Kbd, type KbdProps, Label, LoginPage, type LoginPageProps, LoginScreen, type LoginScreenProps, MEMBER_PALETTE_SIZE, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, type NavGroup, type NavItem, type NavbarUserInfo, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, type OTPStatus, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PasswordInput, type PasswordInputProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, type ProgressProps, ProtectedRoute, type ProtectedRouteProps, PublishDrawer, type PublishDrawerProps, type PublishDrawerSupabase, type PublishResult, type PublishStatus, type PublisherAccount, RadioGroup, RadioGroupItem, RadioGroupRow, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, type ScrollAreaScrollbars, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, SeparatorWithLabel, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, SonnerToaster, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, Toast, ToastAction, type ToastActionElement, ToastClose, type ToastComponentProps, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserAvatar, type UserAvatarProps, type UserInfo, UserMenu, type UserMenuItem, type UserMenuProps, avatarMemberColor, badgeVariants, barGridColumn, buttonVariants, clampPct, filterPublishableAccounts, getInitials, iconButtonVariants, isAllowedOrigin, kbdVariants, labelVariants, memberHueIndex, memberHueVar, navigationMenuTriggerStyle, parseTags, resolveNameColWidth, resolveWeekCount, resolveWeekLabels, stageProgress, toggleVariants, useFormField, useSidebar, validatePublishForm };