@akhil-saxena/design-system 1.2.0 → 1.4.2

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,5 +1,5 @@
1
1
  import * as react from 'react';
2
- import react__default, { ButtonHTMLAttributes, ReactNode, InputHTMLAttributes, TextareaHTMLAttributes, HTMLAttributes, ChangeEvent, CSSProperties, ReactElement, RefObject } from 'react';
2
+ import react__default, { ButtonHTMLAttributes, ReactNode, InputHTMLAttributes, CSSProperties, HTMLAttributes, ElementType, AnchorHTMLAttributes, TextareaHTMLAttributes, ChangeEvent, ReactElement, RefObject } from 'react';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  export { I as Icon, a as IconProps } from './Icon-XUp5t4PQ.js';
5
5
  import { UniqueIdentifier } from '@dnd-kit/core';
@@ -51,6 +51,28 @@ interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
51
51
  */
52
52
  declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
53
53
 
54
+ type OAuthProvider = "google" | "github" | "apple";
55
+ interface OAuthButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
56
+ /** OAuth provider — determines logo + default label. @default "google" */
57
+ provider?: OAuthProvider;
58
+ /** Override the button label (defaults to "Continue with {Provider}"). */
59
+ label?: string;
60
+ /** When true, renders inverted for dark surfaces. @default false */
61
+ dark?: boolean;
62
+ }
63
+ /**
64
+ * OAuth provider button. Renders the provider's official logo + a label
65
+ * styled to match DS Button conventions (44px height, 9px radius, transitions).
66
+ *
67
+ * Hooks into press feedback via `.ds-atom-oauthbtn:active { transform: scale(.97); }`
68
+ * defined in primitives.css.
69
+ *
70
+ * @example
71
+ * <OAuthButton provider="google" type="submit" />
72
+ * <OAuthButton provider="github" dark />
73
+ */
74
+ declare const OAuthButton: react.ForwardRefExoticComponent<OAuthButtonProps & react.RefAttributes<HTMLButtonElement>>;
75
+
54
76
  interface TextInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "prefix"> {
55
77
  /** When true, applies error-state border color to the input or wrapper. */
56
78
  error?: boolean;
@@ -65,6 +87,282 @@ interface TextInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "pr
65
87
  }
66
88
  declare const TextInput: react.ForwardRefExoticComponent<TextInputProps & react.RefAttributes<HTMLInputElement>>;
67
89
 
90
+ interface InlineEditFieldProps {
91
+ /** Current display value. */
92
+ value: string;
93
+ /**
94
+ * Called with the new value on commit (Enter, ⌘Enter for multiline, or blur).
95
+ * Return a Promise to trigger the saving state.
96
+ * If the Promise rejects, component enters error state with rejection message.
97
+ */
98
+ onSave: (next: string) => void | Promise<void>;
99
+ /** When true, renders a Textarea instead of a single-line TextInput.
100
+ * @default false
101
+ */
102
+ multiline?: boolean;
103
+ /** Placeholder shown in idle state when value is empty.
104
+ * Rendered as an italic span with `var(--ink-4)` color.
105
+ */
106
+ placeholder?: string;
107
+ /** When true, the idle span is not clickable.
108
+ * @default false
109
+ */
110
+ disabled?: boolean;
111
+ /** Maximum character length passed to the underlying input/textarea. */
112
+ maxLength?: number;
113
+ /**
114
+ * Accessible label for the trigger element in idle state and the underlying
115
+ * input in edit state. Required.
116
+ */
117
+ ariaLabel: string;
118
+ /**
119
+ * Typography preset for edit-mode input. Controls font-family + matching
120
+ * size defaults. Does NOT affect idle mode — idle inherits from parent.
121
+ * - "default" — Inter, 13px, weight 500 (matches existing INPUT style object)
122
+ * - "mono" — var(--mono), 10.5px, weight 700, letter-spacing .12em, uppercase
123
+ * - "serif" — Newsreader, 14px, line-height 1.55
124
+ * @default "default"
125
+ */
126
+ font?: "default" | "mono" | "serif";
127
+ className?: string;
128
+ style?: CSSProperties;
129
+ }
130
+ declare function InlineEditField({ value, onSave, multiline, placeholder, disabled, maxLength, ariaLabel, font, className, style, }: InlineEditFieldProps): react_jsx_runtime.JSX.Element;
131
+
132
+ type EyebrowSize = "xs" | "sm" | "md";
133
+ type EyebrowTone = "ink-3" | "ink-4" | "amber";
134
+ interface EyebrowProps extends HTMLAttributes<HTMLSpanElement> {
135
+ /** Type-scale token. @default "sm" */
136
+ size?: EyebrowSize;
137
+ /** Override color (legacy — defaults to var(--ink-3)). Use `tone` for the
138
+ * declarative path. */
139
+ color?: string;
140
+ /** Tone token — emits a data-attr so CSS rules apply the color. */
141
+ tone?: EyebrowTone;
142
+ }
143
+ /**
144
+ * Mono-caps eyebrow / overline. Used as form field labels, hero kickers,
145
+ * section headers, and stage-chip captions.
146
+ *
147
+ * `tone` (declarative, CSS data-attr) is the preferred way to set color in
148
+ * new code; `color` (legacy inline override) still works for one-offs.
149
+ *
150
+ * @example
151
+ * <Eyebrow>FULL NAME</Eyebrow>
152
+ * <Eyebrow size="md" tone="amber">WELCOME BACK</Eyebrow>
153
+ */
154
+ declare const Eyebrow: react.ForwardRefExoticComponent<EyebrowProps & react.RefAttributes<HTMLSpanElement>>;
155
+
156
+ type TextVariant = "body" | "small" | "caption" | "legal";
157
+ type TextElement = "p" | "span" | "div";
158
+ type TextSizeToken = "2xs" | "xs" | "sm" | "base" | "md" | "lg";
159
+ type TextWeightToken = "regular" | "medium" | "bold" | "black";
160
+ type TextTone = "ink" | "ink-2" | "ink-3" | "ink-4" | "amber" | "red" | "green";
161
+ type TextLeading = "tight" | "snug" | "normal" | "relaxed";
162
+ interface TextProps extends HTMLAttributes<HTMLElement> {
163
+ /** Legacy preset — drives inline style. @default "body" */
164
+ variant?: TextVariant;
165
+ /** Semantic element to render. @default "p" */
166
+ as?: TextElement;
167
+ /** Override color (legacy — defaults to tone for variant). Use `tone` for
168
+ * the declarative path. */
169
+ color?: string;
170
+ /** Override max-width — caps line length for readability. */
171
+ maxWidth?: number | string;
172
+ /** Type-scale token — emits data-attr; CSS applies font-size. */
173
+ size?: TextSizeToken;
174
+ /** Weight token — emits data-attr; CSS applies font-weight. */
175
+ weight?: TextWeightToken;
176
+ /** Color tone token — emits data-attr; CSS applies color. */
177
+ tone?: TextTone;
178
+ /** When true, swaps to var(--mono) family + letter-spacing. */
179
+ mono?: boolean;
180
+ /** Line-height token — overrides the default (relaxed). */
181
+ leading?: TextLeading;
182
+ }
183
+ /**
184
+ * Body text primitive. Two APIs coexist:
185
+ * - **Legacy:** `variant` preset drives inline style (body/small/caption/legal).
186
+ * - **Token/data-attr:** `size` + `tone` + `weight` + `mono` + `leading` all
187
+ * emit data-attrs; `primitives.css` resolves them. Use this for new code.
188
+ *
189
+ * The two are NOT exclusive — pass `variant` for the base + a `size`/`tone`
190
+ * override to tweak one axis.
191
+ *
192
+ * @example
193
+ * <Text>Mark every step of your job search.</Text>
194
+ * <Text size="sm" tone="ink-3">Applied 3d ago</Text>
195
+ * <Text variant="caption" maxWidth={360}>Sent to alex@example.com…</Text>
196
+ */
197
+ declare const Text: react.ForwardRefExoticComponent<TextProps & react.RefAttributes<HTMLElement>>;
198
+
199
+ type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
200
+ type HeadingSizeToken = "2xs" | "xs" | "sm" | "base" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl";
201
+ type HeadingWeightToken = "regular" | "medium" | "bold" | "black";
202
+ type HeadingTone = "ink" | "ink-2" | "ink-3" | "amber";
203
+ interface HeadingProps extends HTMLAttributes<HTMLHeadingElement> {
204
+ /** Semantic heading level. @default 2 */
205
+ level?: HeadingLevel;
206
+ /** Visual size — either a px number (legacy, drives inline style) or a
207
+ * type-scale token ('2xs'..'4xl') which routes through the CSS data-attr
208
+ * path. @default 28
209
+ */
210
+ size?: number | HeadingSizeToken;
211
+ /** Archivo weight — numeric (legacy) or token. @default 900 */
212
+ weight?: 500 | 600 | 700 | 800 | 900 | HeadingWeightToken;
213
+ /** Override color (legacy — defaults to var(--ink)). Use `tone` for the
214
+ * declarative path. */
215
+ color?: string;
216
+ /** Tone token — emits a data-attr so CSS rules apply the color. */
217
+ tone?: HeadingTone;
218
+ /** Override the rendered tag — useful when the visual size and the semantic
219
+ * level diverge (e.g. an `<h2>` styled as a small kicker). */
220
+ as?: ElementType;
221
+ }
222
+ /**
223
+ * Display heading primitive — for hero headlines and form headlines.
224
+ *
225
+ * Two APIs coexist:
226
+ * - **Legacy/inline:** `size={28}` (number) + `weight={900}` (number) drives
227
+ * inline style. Letter-spacing derives from size.
228
+ * - **Token/data-attr:** `size="2xl"` + `weight="black"` emit data-attrs;
229
+ * `primitives.css` applies font-size + font-weight from token vars. Use this
230
+ * for new code where the theme drives sizing.
231
+ *
232
+ * @example
233
+ * <Heading level={1} size={72} weight={900}>Job search, organized.</Heading>
234
+ * <Heading level={2} size="2xl" weight="black" tone="amber">Settings</Heading>
235
+ */
236
+ declare const Heading: react.ForwardRefExoticComponent<HeadingProps & react.RefAttributes<HTMLHeadingElement>>;
237
+
238
+ type DividerSpacing = "none" | "sm" | "md" | "lg" | "xl";
239
+ type DividerAccent = "dashed" | "amber";
240
+ interface DividerProps extends HTMLAttributes<HTMLDivElement> {
241
+ /** Optional centered label between two hairlines (e.g. "OR"). */
242
+ label?: ReactNode;
243
+ /** When true, renders vertically (height: 100%, width: 1px). @default false */
244
+ vertical?: boolean;
245
+ /** Override the hairline color (defaults to var(--rule)). */
246
+ color?: string;
247
+ /** Margin preset — data-attr-driven via primitives.css. When set, overrides
248
+ * the legacy default (no margin for horizontal, var(--space-3) horizontal
249
+ * for vertical). */
250
+ spacing?: DividerSpacing;
251
+ /** Accent style — `dashed` uses a dashed top-border, `amber` paints an
252
+ * amber-tinted 2px hairline. */
253
+ accent?: DividerAccent;
254
+ }
255
+ /**
256
+ * Hairline rule with an optional centered label.
257
+ *
258
+ * - Horizontal (default): `1px` rule across the row; label centered with
259
+ * monospace caps if provided (e.g. the "OR" between OAuth and email forms).
260
+ * - Vertical: `1px` rule fills the parent's height.
261
+ *
262
+ * New axes (data-attr driven):
263
+ * - `spacing` adds the bundle's margin presets.
264
+ * - `accent` swaps to dashed or amber-tinted stylings via primitives.css.
265
+ *
266
+ * @example
267
+ * <Divider />
268
+ * <Divider label="OR" spacing="md" />
269
+ * <Divider accent="amber" spacing="lg" />
270
+ */
271
+ declare const Divider: react.ForwardRefExoticComponent<DividerProps & react.RefAttributes<HTMLDivElement>>;
272
+
273
+ type LinkVariant = "default" | "inline" | "footer" | "action" | "quiet";
274
+ interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
275
+ /** Style variant.
276
+ * - `default` — neutral inline link, amber on hover.
277
+ * - `inline` — body-text inline link, amber underline.
278
+ * - `footer` — small footer/cross-link.
279
+ * - `action` — bold action link with trailing arrow (e.g. "Sign in →").
280
+ * - `quiet` — muted, no underline until hover.
281
+ * @default "inline"
282
+ */
283
+ variant?: LinkVariant;
284
+ /** Override color (inline). */
285
+ color?: string;
286
+ /** Override the rendered element. Use to attach Link styles to a `<button>`
287
+ * or any custom element. @default "a"
288
+ */
289
+ as?: ElementType;
290
+ }
291
+ /**
292
+ * Text-style hyperlink primitive. Five variants cover the common surfaces:
293
+ * default (neutral), inline (body-text amber), footer (small cross-link),
294
+ * action (bold with arrow), quiet (muted, hover-only underline).
295
+ *
296
+ * `as` overrides the rendered element — useful when the visual contract is
297
+ * "link" but the semantic is "button" (e.g. JS-handled actions).
298
+ *
299
+ * @example
300
+ * <Link href="/signin">Sign in</Link>
301
+ * <Link variant="quiet" href="/legal">Legal</Link>
302
+ * <Link variant="footer" as="button" onClick={clear}>CLEAR</Link>
303
+ */
304
+ declare const Link: react.ForwardRefExoticComponent<LinkProps & react.RefAttributes<HTMLAnchorElement>>;
305
+
306
+ interface DotGridProps extends HTMLAttributes<HTMLDivElement> {
307
+ /** Dot color (any CSS color). @default "var(--cream)" */
308
+ color?: string;
309
+ /** Dot opacity. @default 0.055 */
310
+ opacity?: number;
311
+ /** Tile size in px — controls dot spacing. @default 18 */
312
+ tile?: number;
313
+ /** Dot radius in px. @default 1.4 */
314
+ dotRadius?: number;
315
+ }
316
+ /**
317
+ * Radial-gradient dot-pattern overlay. Use as an `position: absolute; inset: 0;`
318
+ * decoration on dark hero panels, marketing surfaces, or empty-state backgrounds.
319
+ *
320
+ * Pointer-events disabled so it never blocks content underneath.
321
+ *
322
+ * @example
323
+ * <div style={{ position: "relative" }}>
324
+ * <DotGrid />
325
+ * <p>Hero content over dots…</p>
326
+ * </div>
327
+ */
328
+ declare const DotGrid: react.ForwardRefExoticComponent<DotGridProps & react.RefAttributes<HTMLDivElement>>;
329
+
330
+ interface SplitHeroProps extends Omit<HTMLAttributes<HTMLElement>, "children"> {
331
+ /** Left/aside content — typically a marketing or brand panel on a dark surface. */
332
+ aside: ReactNode;
333
+ /** Right/main content — typically the form, body, or interactive payload. */
334
+ main: ReactNode;
335
+ /** Aside-to-main column ratio, e.g. "1fr 1fr" (default) or "1.15fr 1fr". @default "1fr 1fr" */
336
+ ratio?: string;
337
+ /** Aside background color. @default "var(--ink)" */
338
+ asideBackground?: string;
339
+ /** Main background color. @default "var(--cream)" */
340
+ mainBackground?: string;
341
+ /** When viewport ≤ this breakpoint (px), stack vertically (aside on top). @default 900 */
342
+ stackBelow?: number;
343
+ /** When viewport ≤ this breakpoint (px), hide the aside entirely. @default 600 */
344
+ hideAsideBelow?: number;
345
+ }
346
+ /**
347
+ * Two-column page chrome for marketing / auth / onboarding surfaces.
348
+ *
349
+ * - Desktop (`> stackBelow`): aside | main, side-by-side.
350
+ * - Tablet (`≤ stackBelow`, `> hideAsideBelow`): stacked vertically.
351
+ * - Mobile (`≤ hideAsideBelow`): aside hidden, main fills the viewport.
352
+ *
353
+ * The root is `height: 100vh; overflow: hidden;` so the aside cannot push the
354
+ * page taller than the viewport; the `main` slot internally allows scroll for
355
+ * long forms. At the stacked breakpoints the clamp releases so the page
356
+ * scrolls naturally.
357
+ *
358
+ * @example
359
+ * <SplitHero
360
+ * aside={<HeroPanel kicker="WELCOME BACK" headline="Sign in to your trail." />}
361
+ * main={<SignInForm />}
362
+ * />
363
+ */
364
+ declare const SplitHero: react.ForwardRefExoticComponent<SplitHeroProps & react.RefAttributes<HTMLElement>>;
365
+
68
366
  interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
69
367
  /** When true, applies error-state border color to the textarea. */
70
368
  error?: boolean;
@@ -84,6 +382,13 @@ interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
84
382
  }
85
383
  declare const Badge: react.ForwardRefExoticComponent<BadgeProps & react.RefAttributes<HTMLSpanElement>>;
86
384
 
385
+ type KbdSize = "sm" | "md";
386
+ interface KbdProps extends HTMLAttributes<HTMLElement> {
387
+ /** Size variant. "sm" for inline hints (9.5px); "md" default (11px). */
388
+ size?: KbdSize;
389
+ }
390
+ declare const Kbd: react.ForwardRefExoticComponent<KbdProps & react.RefAttributes<HTMLElement>>;
391
+
87
392
  type ChipTone = "default" | "match" | "miss" | "learning" | "tag";
88
393
  interface ChipProps extends HTMLAttributes<HTMLSpanElement> {
89
394
  /** Color tone applying semantic background and text colors.
@@ -248,6 +553,55 @@ interface RollingNumberProps {
248
553
  }
249
554
  declare function RollingNumber({ value, format, prefix, suffix, variant, ariaLabel, className, style, }: RollingNumberProps): react_jsx_runtime.JSX.Element;
250
555
 
556
+ type StatCardChangeDir = "up" | "down";
557
+ interface StatCardProps {
558
+ /** Monospace uppercase label, e.g. "Total Applications" */
559
+ label: string;
560
+ /** Primary metric value as string or number, e.g. "24", "42%", "4.2d" */
561
+ value: string | number;
562
+ /** Change string displayed in trend badge, e.g. "+12%", "-5%" */
563
+ change?: string;
564
+ /** Trend direction — determines badge and sparkline color */
565
+ changeDir?: StatCardChangeDir;
566
+ /** Sparkline data points — renders chart when provided (min 2 points) */
567
+ data?: number[];
568
+ /** Additional className forwarded to the root div */
569
+ className?: string;
570
+ /** Additional inline styles for the root div */
571
+ style?: CSSProperties;
572
+ }
573
+ declare function StatCard({ label, value, change, changeDir, data, className, style, }: StatCardProps): react_jsx_runtime.JSX.Element;
574
+
575
+ interface SparklineProps {
576
+ data: number[];
577
+ width?: number;
578
+ height?: number;
579
+ color?: string;
580
+ fill?: boolean;
581
+ /** Accessible label. Defaults to "Trend chart". */
582
+ ariaLabel?: string;
583
+ }
584
+ declare function Sparkline({ data, width, height, color, fill, ariaLabel, }: SparklineProps): react_jsx_runtime.JSX.Element | null;
585
+
586
+ interface MiniDonutProps {
587
+ value: number;
588
+ max?: number;
589
+ size?: number;
590
+ strokeWidth?: number;
591
+ color?: string;
592
+ /** Accessible label. Defaults to "{percentage}%". */
593
+ ariaLabel?: string;
594
+ }
595
+ declare function MiniDonut({ value, max, size, strokeWidth, color, ariaLabel, }: MiniDonutProps): react_jsx_runtime.JSX.Element;
596
+
597
+ interface MiniBarProps {
598
+ data: number[];
599
+ labels?: string[];
600
+ height?: number;
601
+ barColor?: string;
602
+ }
603
+ declare function MiniBar({ data, labels, height, barColor }: MiniBarProps): react_jsx_runtime.JSX.Element;
604
+
251
605
  interface RangeSliderProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "onChange" | "min" | "max" | "step" | "disabled"> {
252
606
  /** Controlled numeric value of the slider thumb position. */
253
607
  value: number;
@@ -310,6 +664,41 @@ interface StarRatingProps {
310
664
  }
311
665
  declare function StarRating({ value, onChange, size, label, readOnly, disabled, className, style, }: StarRatingProps): react_jsx_runtime.JSX.Element;
312
666
 
667
+ type StatusPillStage = "wishlist" | "applied" | "screening" | "interviewing" | "offer" | "closed";
668
+ interface StatusPillBaseProps {
669
+ /** Pipeline stage — drives bg/color tinting. */
670
+ stage: StatusPillStage;
671
+ /** Show trailing chevron (▾) — signals the pill is a dropdown trigger. */
672
+ withChevron?: boolean;
673
+ /** When true, renders as <button>. When false, renders as <span> and ignores
674
+ * onClick. Use false for table cells / read-only kanban cards where the pill
675
+ * is decorative.
676
+ * @default true
677
+ */
678
+ interactive?: boolean;
679
+ children: ReactNode;
680
+ }
681
+ type StatusPillProps = StatusPillBaseProps & ((Omit<ButtonHTMLAttributes<HTMLButtonElement>, keyof StatusPillBaseProps> & {
682
+ interactive?: true;
683
+ }) | (Omit<HTMLAttributes<HTMLSpanElement>, keyof StatusPillBaseProps> & {
684
+ interactive: false;
685
+ }));
686
+ /**
687
+ * StatusPill - per-stage tinted chip for Cairn-style kanban + DataGrid status columns.
688
+ *
689
+ * Six locked stage variants (`wishlist`, `applied`, `screening`, `interviewing`,
690
+ * `offer`, `closed`) map to subtle tints — `wishlist`/`applied` are outlined,
691
+ * `screening`/`interviewing` use amber tints, `offer` uses green, `closed` is muted.
692
+ * Use the same atom in both kanban cards and DataGrid status columns so the
693
+ * visual contract stays single-sourced.
694
+ *
695
+ * <StatusPill stage="screening" withChevron onClick={openMenu}>Screening</StatusPill>
696
+ * <StatusPill stage="offer" interactive={false}>Offer</StatusPill>
697
+ *
698
+ * Visual styling lives in primitives.css under `.ds-atom-statuspill[.stage]`.
699
+ */
700
+ declare const StatusPill: react.ForwardRefExoticComponent<StatusPillProps & react.RefAttributes<HTMLButtonElement | HTMLSpanElement>>;
701
+
313
702
  type StickyNoteRotation = "left" | "right" | "none";
314
703
  interface StickyNoteProps extends HTMLAttributes<HTMLDivElement> {
315
704
  /** Static rotation applied to the note surface for a handwritten feel.
@@ -338,38 +727,39 @@ interface StickyNoteProps extends HTMLAttributes<HTMLDivElement> {
338
727
  declare const StickyNote: react.ForwardRefExoticComponent<StickyNoteProps & react.RefAttributes<HTMLDivElement>>;
339
728
 
340
729
  type CardVariant = "glass" | "amber" | "dark" | "kanban";
730
+ type CardPadding = "none" | "sm" | "md" | "lg" | "xl";
731
+ type CardRadius = "sm" | "md" | "lg" | "xl";
732
+ type CardTone = "amber" | "cream-2" | "flat";
733
+ type CardHover = "elevate";
341
734
  interface CardProps extends HTMLAttributes<HTMLDivElement> {
342
- /** Surface style variant.
343
- * - `glass` - translucent glass surface (default).
344
- * - `amber` - amber-tinted CTA card.
345
- * - `dark` - always-dark surface independent of theme.
346
- * - `kanban` - compact glass with hover-lift; use for drag-and-drop boards.
347
- * @default "glass"
348
- */
735
+ /** Top-level preset (legacy). One of glass / amber / dark / kanban. Adds
736
+ * its own bg + border treatment via `data-variant`. @default "glass" */
349
737
  variant?: CardVariant;
350
- /** Arbitrary JSX content; Card has no compound structure - compose freely. */
738
+ /** Padding scale. Independent of variant. */
739
+ padding?: CardPadding;
740
+ /** Border-radius token. Independent of variant. */
741
+ radius?: CardRadius;
742
+ /** Surface tone (separate axis from variant). `amber` tints the bg, `flat`
743
+ * uses a dashed neutral border, `cream-2` switches to the cream-2 surface. */
744
+ tone?: CardTone;
745
+ /** Interactive elevation on hover. Adds shadow + cursor + border-color shift. */
746
+ hover?: CardHover;
747
+ /** Override the rendered element. @default "div" */
748
+ as?: ElementType;
351
749
  children: ReactNode;
352
750
  }
353
751
  /**
354
- * Card - surface primitive with 4 variants (D-300, D-301, D-302).
752
+ * Card surface primitive. Visual is driven by a top-level `variant` plus
753
+ * independent data-attr axes (`padding`, `radius`, `tone`, `hover`).
355
754
  *
356
- * <Card variant="glass"> // default - translucent glass surface
357
- * <Card variant="amber"> // amber-tinted CTA card
358
- * <Card variant="dark"> // always-dark surface (handoff invariant)
359
- * <Card variant="kanban"> // compact glass card with hover-lift; visual surface only
755
+ * <Card>...</Card> // glass, default radius/padding
756
+ * <Card variant="amber">...</Card> // amber CTA card
757
+ * <Card variant="kanban" hover="elevate">...</Card> // hover-lift kanban surface
758
+ * <Card padding="lg" radius="xl" tone="cream-2"> // declarative overrides
360
759
  *
361
- * Children are arbitrary JSX - there is no compound API. Compose freely:
362
- *
363
- * <Card variant="glass">
364
- * <header>...</header>
365
- * <div>...</div>
366
- * <footer>...</footer>
367
- * </Card>
368
- *
369
- * The `kanban` variant ships only the VISUAL surface (12px padding, 10px
370
- * radius, glass bg, hover shadow lift). Application data binding (logo +
371
- * role + age + chips + priority dot) is deferred to Wave 7 / DragDropList
372
- * per D-302.
760
+ * The four axes layer on top of each other variant sets the baseline, the
761
+ * data-attr axes refine padding/radius/tone/hover. See primitives.css for
762
+ * the resolved rules.
373
763
  */
374
764
  declare const Card: react.ForwardRefExoticComponent<CardProps & react.RefAttributes<HTMLDivElement>>;
375
765
 
@@ -538,57 +928,92 @@ interface ModalProps {
538
928
  * - closeOnBackdropClick defaults to true; click on backdrop only (not panel) closes
539
929
  * - Animations namespaced (ds-atom-modal-fadein, ds-atom-modal-in) to avoid
540
930
  * colliding with consumer-defined keyframes
541
- *
542
- * ConfirmDialog ships from this same file as a named variant export (D-287, D-356).
543
931
  */
544
932
  declare function Modal({ open, onClose, title, description, footer, children, closeOnBackdropClick, role, initialFocus, className, style, }: ModalProps): react_jsx_runtime.JSX.Element | null;
933
+
934
+ type ConfirmDialogTone = "danger" | "warn" | "success" | "neutral";
545
935
  interface ConfirmDialogProps {
546
936
  /** Controls visibility; returns null when false. */
547
937
  open: boolean;
548
- /** Called when the user dismisses or cancels the dialog. */
938
+ /** Called when the user cancels (Escape key or Cancel button). */
549
939
  onClose: () => void;
550
- /** Heading text for the confirmation dialog. */
940
+ /** Called when the user confirms (Enter key or Confirm button). */
941
+ onConfirm: () => void;
942
+ /** Visual tone — controls icon, icon bg, and confirm button style. */
943
+ tone?: ConfirmDialogTone;
944
+ /** Dialog heading. */
551
945
  title: ReactNode;
552
- /** Supplemental explanation shown below the title; string gets `aria-describedby`, ReactNode renders as children. */
553
- description?: ReactNode;
554
- /** Label for the confirm action button.
946
+ /** Optional body text below the heading. */
947
+ body?: ReactNode;
948
+ /** Label for the confirm button.
555
949
  * @default "Confirm"
556
950
  */
557
951
  confirmLabel?: string;
558
- /** Label for the cancel action button.
952
+ /** Label for the cancel button.
559
953
  * @default "Cancel"
560
954
  */
561
955
  cancelLabel?: string;
562
- /** When true, uses `role="alertdialog"`, disables backdrop close, and styles confirm as `danger`.
563
- * @default false
564
- */
565
- danger?: boolean;
566
- /** Called when the user clicks the confirm button. */
956
+ }
957
+ declare function ConfirmDialog({ open, onClose, onConfirm, tone, title, body, confirmLabel, cancelLabel, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element | null;
958
+ interface TypeToConfirmProps {
959
+ /** Controls visibility; returns null when false. */
960
+ open: boolean;
961
+ /** Called when the user cancels (Escape key or Cancel button). */
962
+ onClose: () => void;
963
+ /** Called when the user confirms (Enter key when ok, or Confirm button). */
567
964
  onConfirm: () => void;
965
+ /** Dialog heading. */
966
+ title: ReactNode;
967
+ /** Optional body text below the heading. */
968
+ body?: ReactNode;
969
+ /** Word the user must type exactly (case-sensitive, no trim) to enable confirm.
970
+ * @default "DELETE"
971
+ */
972
+ guardWord?: string;
973
+ /** Label for the confirm button.
974
+ * @default "Delete forever"
975
+ */
976
+ confirmLabel?: string;
977
+ /** Label for the cancel button.
978
+ * @default "Cancel"
979
+ */
980
+ cancelLabel?: string;
568
981
  }
569
- /**
570
- * ConfirmDialog - Modal-as-confirmation variant (D-287, D-356).
571
- *
572
- * <ConfirmDialog
573
- * open={open}
574
- * onClose={close}
575
- * onConfirm={doDelete}
576
- * title="Delete application?"
577
- * description="This cannot be undone."
578
- * confirmLabel="Yes, delete"
579
- * danger
580
- * />
581
- *
582
- * When `danger=true`:
583
- * - role="alertdialog"
584
- * - closeOnBackdropClick=false (forces explicit Cancel/Confirm)
585
- * - Confirm button uses Button variant="danger"
586
- *
587
- * `description` accepts string or ReactNode. Strings flow to Modal's
588
- * `description` prop (gets aria-describedby wiring); ReactNode renders
589
- * inline as Modal children (no auto aria-describedby).
590
- */
591
- declare function ConfirmDialog({ open, onClose, title, description, confirmLabel, cancelLabel, danger, onConfirm, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
982
+ declare function TypeToConfirm({ open, onClose, onConfirm, title, body, guardWord, confirmLabel, cancelLabel, }: TypeToConfirmProps): react_jsx_runtime.JSX.Element | null;
983
+
984
+ interface CommandPaletteItem {
985
+ /** Stable identity used as the React key. */
986
+ id: string;
987
+ /** Display label; used for case-insensitive substring filtering. */
988
+ label: string;
989
+ /** Group bucket name; items with the same group cluster under a header. */
990
+ group: string;
991
+ /** Optional ReactNode icon (16–18px recommended). */
992
+ icon?: ReactNode;
993
+ /** Optional keyboard shortcut hint, rendered as a Kbd chip. */
994
+ shortcut?: string;
995
+ /** Fires when the item is selected (Enter on active row, or click). */
996
+ onSelect: () => void;
997
+ }
998
+ interface CommandPaletteProps {
999
+ /** Controls visibility; component returns null when false. */
1000
+ open: boolean;
1001
+ /** Called when the user dismisses the palette (Escape, backdrop click, item select). */
1002
+ onClose: () => void;
1003
+ /** Flat list of items; the component derives groups internally. */
1004
+ items: CommandPaletteItem[];
1005
+ /** Search input placeholder.
1006
+ * @default "Type a command or search…"
1007
+ */
1008
+ placeholder?: string;
1009
+ /** Optional override text shown when filter has zero matches. Defaults to `No results for "<query>"`. */
1010
+ emptyText?: string;
1011
+ /** Optional className appended to the panel. */
1012
+ className?: string;
1013
+ /** Optional inline style applied to the panel. */
1014
+ style?: CSSProperties;
1015
+ }
1016
+ declare function CommandPalette({ open, onClose, items, placeholder, emptyText, className, style, }: CommandPaletteProps): react_jsx_runtime.JSX.Element | null;
592
1017
 
593
1018
  type SheetSide = "right" | "left";
594
1019
  interface SheetProps {
@@ -937,6 +1362,12 @@ interface AlertBannerProps extends Omit<HTMLAttributes<HTMLDivElement>, "title">
937
1362
  children?: ReactNode;
938
1363
  /** Whether to show the dismiss X button. Defaults to `!!onDismiss`. Pass `false` to suppress it. */
939
1364
  dismissible?: boolean;
1365
+ /** Whether the title renders in semibold (600) or regular (400) weight.
1366
+ * Default `true` keeps the original bold weight; `false` is for surfaces
1367
+ * where the icon + tone already signal severity and bold feels heavy.
1368
+ * @default true
1369
+ */
1370
+ boldTitle?: boolean;
940
1371
  }
941
1372
  /**
942
1373
  * AlertBanner - inline-flow controlled tone banner (D-410, D-411).
@@ -1059,6 +1490,81 @@ interface ToastProviderProps {
1059
1490
  */
1060
1491
  declare function ToastProvider({ children }: ToastProviderProps): react_jsx_runtime.JSX.Element;
1061
1492
 
1493
+ /**
1494
+ * Snackbar — bottom-center, solid-fill action surface. Companion to Toast
1495
+ * but with a different intent: snackbars confirm a destructive or
1496
+ * reversible action and offer an inline UNDO / RETRY. Toast is for
1497
+ * passive notifications; Snackbar pairs with a callback. Single-at-a-time
1498
+ * (replaces any active snackbar with FIFO ordering) — never stacks. Solid
1499
+ * ink background so the message stays readable over any page chrome
1500
+ * (Toast's translucent fill becomes hard to read on top-heavy apps).
1501
+ */
1502
+ type SnackbarTone = "neutral" | "success" | "error";
1503
+ interface SnackbarAction {
1504
+ /** Visible label, e.g. "UNDO", "RETRY". Rendered mono caps amber. */
1505
+ label: string;
1506
+ /** Fires when the action is activated. The snackbar auto-dismisses after. */
1507
+ onClick: () => void;
1508
+ }
1509
+ interface SnackbarOptions {
1510
+ /** Auto-dismiss after `duration` ms. Default 5000 (longer than Toast — the
1511
+ * user needs time to read + click the action). Pass `Infinity` to disable. */
1512
+ duration?: number;
1513
+ /** Optional inline action (UNDO / RETRY / etc.). Rendered to the right of
1514
+ * the message. Clicking it fires `onClick` then dismisses the snackbar. */
1515
+ action?: SnackbarAction;
1516
+ /** Visual tone. `"neutral"` (default) for confirmations; `"success"` /
1517
+ * `"error"` add a left-border accent without changing the ink fill. */
1518
+ tone?: SnackbarTone;
1519
+ /** Show the explicit dismiss "✕" affordance.
1520
+ *
1521
+ * Default behavior:
1522
+ * - with `action` → false (the action button doubles as the dismiss path,
1523
+ * plus the timeout will close it; an extra "✕" is redundant chrome)
1524
+ * - without `action` → true (otherwise the snackbar would only have the
1525
+ * timeout as an escape hatch, which is too implicit)
1526
+ *
1527
+ * Pass an explicit boolean to override.
1528
+ */
1529
+ dismissible?: boolean;
1530
+ }
1531
+ interface SnackbarApi {
1532
+ /** Show a snackbar. Replaces any active snackbar (single-at-a-time). */
1533
+ show: (message: ReactNode, opts?: SnackbarOptions) => number;
1534
+ dismiss: (id: number) => void;
1535
+ }
1536
+ /**
1537
+ * useSnackbar — imperative bottom-center action surface hook.
1538
+ *
1539
+ * Must be called inside a `<SnackbarProvider>`. Throws otherwise.
1540
+ *
1541
+ * const snack = useSnackbar();
1542
+ * snack.show("Application deleted.", {
1543
+ * action: { label: "UNDO", onClick: () => restore(row) },
1544
+ * });
1545
+ * snack.show("Saved.", { tone: "success" });
1546
+ * const id = snack.show("...", { duration: Infinity });
1547
+ * snack.dismiss(id);
1548
+ */
1549
+ declare function useSnackbar(): SnackbarApi;
1550
+ interface SnackbarProviderProps {
1551
+ children: ReactNode;
1552
+ }
1553
+ /**
1554
+ * SnackbarProvider — context + DSPortal-mounted region (bottom-center).
1555
+ *
1556
+ * <SnackbarProvider>
1557
+ * <App />
1558
+ * </SnackbarProvider>
1559
+ *
1560
+ * Single-snackbar-at-a-time: calling show() while another is visible
1561
+ * dismisses the old one before fading in the new (FIFO swap, not a queue).
1562
+ * Mounts a fixed bottom-center region (z-1100) that renders only when a
1563
+ * snackbar is active. The region pointer-events:none lets clicks pass to
1564
+ * the page; the snackbar itself sets pointer-events:auto.
1565
+ */
1566
+ declare function SnackbarProvider({ children }: SnackbarProviderProps): react_jsx_runtime.JSX.Element;
1567
+
1062
1568
  interface CopyToClipboardProps extends Omit<HTMLAttributes<HTMLButtonElement>, "onCopy" | "onError"> {
1063
1569
  /** The string value written to the clipboard on click. */
1064
1570
  value: string;
@@ -1084,6 +1590,16 @@ interface CopyToClipboardProps extends Omit<HTMLAttributes<HTMLButtonElement>, "
1084
1590
  */
1085
1591
  declare const CopyToClipboard: react.ForwardRefExoticComponent<CopyToClipboardProps & react.RefAttributes<HTMLButtonElement>>;
1086
1592
 
1593
+ interface RelativeTimeProps extends HTMLAttributes<HTMLTimeElement> {
1594
+ /** Date to format. Accepts Date object, ISO string, or Unix ms timestamp. */
1595
+ date: Date | string | number;
1596
+ /** Optional prefix rendered in --ink-4 color before the relative string (e.g. "Applied"). */
1597
+ prefix?: string;
1598
+ /** Recompute interval in ms. Pass 0 to disable live updates. @default 60000 */
1599
+ updateInterval?: number;
1600
+ }
1601
+ declare const RelativeTime: react.ForwardRefExoticComponent<RelativeTimeProps & react.RefAttributes<HTMLTimeElement>>;
1602
+
1087
1603
  interface DatePickerProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
1088
1604
  /** Controlled selected date; pass `null` for no selection. */
1089
1605
  value: Date | null;
@@ -1117,6 +1633,15 @@ interface DatePickerProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange
1117
1633
  isRangeStart?: (d: Date) => boolean;
1118
1634
  /** Marks a cell as the end of a range for edge-pill visual polish; used by DateRangePicker. */
1119
1635
  isRangeEnd?: (d: Date) => boolean;
1636
+ /** Render mode. `"inline"` (default) shows the calendar grid in flow. `"popover"`
1637
+ * renders a trigger pill that opens the grid in an anchored DS Popover.
1638
+ * @default "inline"
1639
+ */
1640
+ variant?: "inline" | "popover";
1641
+ /** Placeholder text shown on the trigger pill when `value` is null. Only used when `variant="popover"`. */
1642
+ placeholder?: string;
1643
+ /** Override the date formatter for the trigger pill label. Only used when `variant="popover"`. */
1644
+ formatLabel?: (d: Date, showTime: boolean) => string;
1120
1645
  }
1121
1646
  declare const DatePicker: react.ForwardRefExoticComponent<DatePickerProps & react.RefAttributes<HTMLDivElement>>;
1122
1647
 
@@ -1191,6 +1716,42 @@ interface MultiSelectProps {
1191
1716
  * @default "Select…"
1192
1717
  */
1193
1718
  placeholder?: string;
1719
+ /** When true, the trigger renders as a single-line count summary instead of
1720
+ * the default chips-in-trigger layout. Useful in filter bars where the
1721
+ * trigger height needs to stay stable regardless of selection count.
1722
+ *
1723
+ * Trigger copy:
1724
+ * - 0 selected → `placeholder` (e.g. "Status")
1725
+ * - all selected (value.length === options.length) → `allSelectedLabel`
1726
+ * - 1+ selected (partial) → `${placeholder} (${count})`
1727
+ *
1728
+ * @default false
1729
+ */
1730
+ compact?: boolean;
1731
+ /** Label rendered in the compact trigger when every option is selected.
1732
+ * Has no effect unless `compact` is true.
1733
+ * @default "All"
1734
+ */
1735
+ allSelectedLabel?: string;
1736
+ /** Visual tone of the trigger surface.
1737
+ * - `"default"` — cream surface with ink text + a thin rule border.
1738
+ * The standard look for filter-bar triggers.
1739
+ * - `"solid"` — ink fill with cream text, no border. A confident
1740
+ * "filter applied" affordance; pairs well with `compact` for a
1741
+ * count-summary chip.
1742
+ *
1743
+ * @default "default"
1744
+ */
1745
+ tone?: "default" | "solid";
1746
+ /** Trigger height + padding scale.
1747
+ * - `"md"` (default) — 36px height, standard form-input rhythm.
1748
+ * - `"sm"` — 28px height, smaller padding + 12px text.
1749
+ * Use when the trigger sits in a dense filter row where the chips
1750
+ * should read as chips, not full-size form controls.
1751
+ *
1752
+ * @default "md"
1753
+ */
1754
+ size?: "sm" | "md";
1194
1755
  /** When true, disables the trigger and prevents interaction.
1195
1756
  * @default false
1196
1757
  */
@@ -1228,6 +1789,22 @@ interface SelectProps {
1228
1789
  * @default true
1229
1790
  */
1230
1791
  searchable?: boolean;
1792
+ /** Visual tone of the trigger surface.
1793
+ * - `"default"` — cream surface with ink text + a thin rule border.
1794
+ * - `"solid"` — ink fill with cream text, no visible border. Pairs with
1795
+ * MultiSelect's matching tone for filter-bar consistency.
1796
+ *
1797
+ * @default "default"
1798
+ */
1799
+ tone?: "default" | "solid";
1800
+ /** Trigger height + padding scale.
1801
+ * - `"md"` (default) — 36px height, standard form-input rhythm.
1802
+ * - `"sm"` — 28px height, smaller padding + 12px text. Use in
1803
+ * dense filter rows alongside MultiSelect at the same size.
1804
+ *
1805
+ * @default "md"
1806
+ */
1807
+ size?: "sm" | "md";
1231
1808
  /** When true, disables the trigger button and prevents interaction.
1232
1809
  * @default false
1233
1810
  */
@@ -1342,6 +1919,89 @@ interface AutocompleteProps<T> {
1342
1919
  */
1343
1920
  declare function Autocomplete<T>({ value, onValueChange, items, recentItems, onSelect, onCreate, getItemLabel, getItemKey, renderItem, placeholder, className, style, }: AutocompleteProps<T>): react_jsx_runtime.JSX.Element;
1344
1921
 
1922
+ interface FileInputProps {
1923
+ /** Called when the user selects or drops file(s). */
1924
+ onSelect: (files: File[]) => void;
1925
+ /** MIME type or file extension allowlist (passed to hidden input `accept`).
1926
+ * @example "application/pdf" | ".pdf,.docx,.md"
1927
+ */
1928
+ accept?: string;
1929
+ /** Whether to allow multiple files.
1930
+ * @default false
1931
+ */
1932
+ multiple?: boolean;
1933
+ /** Maximum file size in bytes. `onError` is called if exceeded.
1934
+ * @default undefined (no limit)
1935
+ */
1936
+ maxSizeBytes?: number;
1937
+ /**
1938
+ * Called when a file is rejected due to type or size constraint.
1939
+ * Receives a human-readable reason string.
1940
+ */
1941
+ onError?: (reason: string) => void;
1942
+ /** When true, disables interaction.
1943
+ * @default false
1944
+ */
1945
+ disabled?: boolean;
1946
+ /**
1947
+ * Visual variant.
1948
+ * - "dropzone" — dashed bordered drop area; accepts drag-and-drop.
1949
+ * - "button" — renders a Button-like trigger with no drop area.
1950
+ * @default "dropzone"
1951
+ */
1952
+ variant?: "dropzone" | "button";
1953
+ /** Accessible label for the trigger.
1954
+ * @default "Upload file"
1955
+ */
1956
+ ariaLabel?: string;
1957
+ /**
1958
+ * Content rendered inside the dropzone area (dropzone variant only).
1959
+ * When not provided, a default amber icon + "Drop a file here, or click
1960
+ * to upload" + meta line is rendered (matching cairn UploadDropZone visual).
1961
+ */
1962
+ children?: ReactNode;
1963
+ className?: string;
1964
+ style?: CSSProperties;
1965
+ }
1966
+ declare function FileInput({ onSelect, accept, multiple, maxSizeBytes, onError, disabled, variant, ariaLabel, children, className, style, }: FileInputProps): react_jsx_runtime.JSX.Element;
1967
+
1968
+ interface ColorPickerProps {
1969
+ /** Controlled hex value, e.g. '#f59e0b'. Optional — uncontrolled if absent. */
1970
+ value?: string;
1971
+ /** Called with new hex string when color changes via any sub-control. */
1972
+ onChange?: (hex: string) => void;
1973
+ /** Initial hex when uncontrolled. @default '#f59e0b' */
1974
+ defaultValue?: string;
1975
+ /** Custom preset swatches. @default the 10-color amber-led palette */
1976
+ presets?: string[];
1977
+ /** Additional className applied to the root wrapper. */
1978
+ className?: string;
1979
+ /** Inline styles applied to the root wrapper. */
1980
+ style?: CSSProperties;
1981
+ }
1982
+ declare function ColorPicker({ value, onChange, defaultValue, presets, className, style, }: ColorPickerProps): react_jsx_runtime.JSX.Element;
1983
+
1984
+ interface ColorInputProps {
1985
+ /** Controlled hex value, e.g. '#f59e0b'. Optional — uncontrolled if absent. */
1986
+ value?: string;
1987
+ /** Called with new hex string when a valid 6-digit hex is typed. */
1988
+ onChange?: (hex: string) => void;
1989
+ /** Initial hex when uncontrolled. @default '#f59e0b' */
1990
+ defaultValue?: string;
1991
+ /** Optional label rendered above the input row. */
1992
+ label?: string;
1993
+ /** Additional className applied to the root wrapper. */
1994
+ className?: string;
1995
+ /** Inline styles applied to the root wrapper. */
1996
+ style?: CSSProperties;
1997
+ }
1998
+ /**
1999
+ * Compact inline color field — swatch + hex text input.
2000
+ * No popover, no full picker — designed to drop into form rows alongside
2001
+ * other inline form fields.
2002
+ */
2003
+ declare function ColorInput({ value, onChange, defaultValue, label, className, style, }: ColorInputProps): react_jsx_runtime.JSX.Element;
2004
+
1345
2005
  interface SegmentedOption<T extends string = string> {
1346
2006
  value: T;
1347
2007
  label: string;
@@ -1751,6 +2411,83 @@ declare const Calendar: react.ForwardRefExoticComponent<CalendarProps & react.Re
1751
2411
  Agenda: typeof AgendaList;
1752
2412
  };
1753
2413
 
2414
+ interface PaginationProps {
2415
+ /** Total number of pages. */
2416
+ totalPages: number;
2417
+ /** Currently active page (1-based). */
2418
+ currentPage: number;
2419
+ /** Called when user navigates to a different page. */
2420
+ onPageChange: (page: number) => void;
2421
+ /** Display variant. "full" shows numbered page buttons; "compact" shows "N / M" only.
2422
+ * @default "full"
2423
+ */
2424
+ variant?: "full" | "compact";
2425
+ /** Accessible label for the nav landmark.
2426
+ * @default "Pagination"
2427
+ */
2428
+ ariaLabel?: string;
2429
+ /** Additional className applied to the root `<nav>` element. */
2430
+ className?: string;
2431
+ /** Inline styles applied to the root `<nav>` element. */
2432
+ style?: CSSProperties;
2433
+ }
2434
+ declare const Pagination: react.ForwardRefExoticComponent<PaginationProps & react.RefAttributes<HTMLElement>>;
2435
+
2436
+ /**
2437
+ * # Usage Audit - DataGrid (DS-62)
2438
+ *
2439
+ * Composed component built on Table.* + three table hooks. Provides a
2440
+ * higher-level columns/rows API with status badge rendering, priority dots,
2441
+ * bulk-action bar, and footer pagination.
2442
+ *
2443
+ * <DataGrid
2444
+ * columns={cols}
2445
+ * rows={rows}
2446
+ * page={page}
2447
+ * totalPages={n}
2448
+ * onPageChange={setPage}
2449
+ * onSelectionChange={(ids) => setSelected(ids)}
2450
+ * />
2451
+ *
2452
+ * Important: <Pagination> is rendered as a SIBLING of the inner Table.Root,
2453
+ * NOT inside it. <nav> inside <table> is invalid HTML.
2454
+ *
2455
+ * Status mapping:
2456
+ * applied → Badge tone="upcoming" label="Applied"
2457
+ * interviewing → Badge tone="done" label="Interview"
2458
+ * offer → Badge tone="passed" label="Offer"
2459
+ * rejected → Badge tone="pending" label="Rejected"
2460
+ *
2461
+ * Priority mapping:
2462
+ * high → red dot (var(--red-vivid))
2463
+ * medium → amber dot (var(--amber-vivid))
2464
+ * low → green dot (var(--green-vivid))
2465
+ */
2466
+
2467
+ interface DataGridColumn {
2468
+ key: string;
2469
+ label: string;
2470
+ width: number;
2471
+ sortable?: boolean;
2472
+ align?: "left" | "right";
2473
+ }
2474
+ type DataGridRow = Record<string, unknown> & {
2475
+ id: string | number;
2476
+ };
2477
+ interface DataGridProps extends react__default.HTMLAttributes<HTMLDivElement> {
2478
+ columns: DataGridColumn[];
2479
+ rows: DataGridRow[];
2480
+ /** Current page (1-based). Optional — defaults to 1 when pagination not used. */
2481
+ page?: number;
2482
+ /** Total page count. Optional — defaults to 1. */
2483
+ totalPages?: number;
2484
+ /** Page-change callback wired to <Pagination>. */
2485
+ onPageChange?: (page: number) => void;
2486
+ /** Fires whenever the selected row IDs change. */
2487
+ onSelectionChange?: (ids: Array<string | number>) => void;
2488
+ }
2489
+ declare const DataGrid: react__default.ForwardRefExoticComponent<DataGridProps & react__default.RefAttributes<HTMLDivElement>>;
2490
+
1754
2491
  interface RichTextProps {
1755
2492
  /** Controlled HTML string (default) or TipTap JSON Doc object when `outputFormat="json"`. */
1756
2493
  value: string | object;
@@ -2088,4 +2825,4 @@ declare function SortableItem({ id, children, reducedMotion }: SortableItemProps
2088
2825
  declare function SortableDndContext({ children, onMove, renderOverlay }: SortableDndContextProps): react_jsx_runtime.JSX.Element;
2089
2826
  declare function Sortable({ items, onReorder, renderItem, id, className, style }: SortableProps): react_jsx_runtime.JSX.Element;
2090
2827
 
2091
- export { Accordion, type AccordionItemProps, type AccordionProps, AlertBanner, type AlertBannerProps, type AlertBannerTone, AppBar, type AppBarProps, type AppBarVariant, AppShell, type AppShellProps, Autocomplete, type AutocompleteProps, Avatar, type AvatarPresence, type AvatarPresencePosition, type AvatarProps, type AvatarSize, AvatarStack, type AvatarStackProps, Badge, type BadgeProps, type BadgeTone, BottomSheet, type BottomSheetHeight, type BottomSheetProps, type BreadcrumbItem, Breadcrumbs, type BreadcrumbsProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarEvent, type CalendarProps, Card, type CardProps, type CardVariant, Carousel, type CarouselProps, type CarouselSlide, Checkbox, type CheckboxProps, Chip, type ChipProps, type ChipTone, Coachmark, type CoachmarkProps, ConfirmDialog, type ConfirmDialogProps, ContextMenu, type ContextMenuItem, type ContextMenuProps, CopyToClipboard, type CopyToClipboardProps, DSPortal, type DSPortalProps, DatePicker, type DatePickerProps, type DateRange, DateRangePicker, type DateRangePickerProps, EmptyState, type EmptyStateProps, FieldError, type FieldErrorProps, Footer, type FooterColumn, type FooterProps, type FooterVariant, FormErrorSummary, type FormErrorSummaryProps, HoverCard, type HoverCardPlacement, type HoverCardProps, InfiniteList, type InfiniteListProps, InlineConfirm, type InlineConfirmProps, type InlineConfirmTriggerProps, InlineEdit, type InlineEditProps, Lightbox, type LightboxItem, type LightboxProps, Modal, type ModalProps, type ModalRole, MultiSelect, type MultiSelectOption, type MultiSelectProps, NumberStepper, type NumberStepperProps, PasswordStrength, type PasswordStrengthProps, Popover, type PopoverPlacement, type PopoverProps, type PopoverVariant, ProgressBar, type ProgressBarProps, Radio, RadioGroup, type RadioGroupProps, type RadioProps, RangeSlider, type RangeSliderProps, RichText, type RichTextProps, RollingNumber, type RollingNumberProps, SearchAndFilters, type SearchAndFiltersProps, type SearchFilter, type SearchSuggestion, SegmentedControl, type SegmentedControlProps, type SegmentedOption, Select, type SelectOption, type SelectProps, Sheet, type SheetProps, type SheetSide, Skeleton, type SkeletonProps, type SkeletonShape, Sortable, SortableDndContext, type SortableDndContextProps, SortableItem, type SortableItemData, type SortableItemProps, type SortableProps, SplitButton, type SplitButtonAction, type SplitButtonProps, StarRating, type StarRatingProps, type StarRatingSize, StickyNote, type StickyNoteProps, type StickyNoteRotation, type TabItem, Table, type TableHeaderCellProps, type TableRootProps, Tabs, type TabsProps, TextInput, type TextInputProps, Textarea, type TextareaProps, Timeline, type TimelineEvent, type TimelineProps, type ToastOptions, ToastProvider, type ToastProviderProps, type ToastTone, Toggle, type ToggleProps, Tooltip, type TooltipPlacement, type TooltipProps, Wizard, type WizardProps, type WizardStep, deriveGradient, deriveInitials, useToast };
2828
+ export { Accordion, type AccordionItemProps, type AccordionProps, AlertBanner, type AlertBannerProps, type AlertBannerTone, AppBar, type AppBarProps, type AppBarVariant, AppShell, type AppShellProps, Autocomplete, type AutocompleteProps, Avatar, type AvatarPresence, type AvatarPresencePosition, type AvatarProps, type AvatarSize, AvatarStack, type AvatarStackProps, Badge, type BadgeProps, type BadgeTone, BottomSheet, type BottomSheetHeight, type BottomSheetProps, type BreadcrumbItem, Breadcrumbs, type BreadcrumbsProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarEvent, type CalendarProps, Card, type CardProps, type CardVariant, Carousel, type CarouselProps, type CarouselSlide, Checkbox, type CheckboxProps, Chip, type ChipProps, type ChipTone, Coachmark, type CoachmarkProps, ColorInput, type ColorInputProps, ColorPicker, type ColorPickerProps, CommandPalette, type CommandPaletteItem, type CommandPaletteProps, ConfirmDialog, type ConfirmDialogProps, type ConfirmDialogTone, ContextMenu, type ContextMenuItem, type ContextMenuProps, CopyToClipboard, type CopyToClipboardProps, DSPortal, type DSPortalProps, DataGrid, type DataGridColumn, type DataGridProps, type DataGridRow, DatePicker, type DatePickerProps, type DateRange, DateRangePicker, type DateRangePickerProps, Divider, type DividerProps, DotGrid, type DotGridProps, EmptyState, type EmptyStateProps, Eyebrow, type EyebrowProps, type EyebrowSize, FieldError, type FieldErrorProps, FileInput, type FileInputProps, Footer, type FooterColumn, type FooterProps, type FooterVariant, FormErrorSummary, type FormErrorSummaryProps, Heading, type HeadingLevel, type HeadingProps, HoverCard, type HoverCardPlacement, type HoverCardProps, InfiniteList, type InfiniteListProps, InlineConfirm, type InlineConfirmProps, type InlineConfirmTriggerProps, InlineEdit, InlineEditField, type InlineEditFieldProps, type InlineEditProps, Kbd, type KbdProps, type KbdSize, Lightbox, type LightboxItem, type LightboxProps, Link, type LinkProps, type LinkVariant, MiniBar, type MiniBarProps, MiniDonut, type MiniDonutProps, Modal, type ModalProps, type ModalRole, MultiSelect, type MultiSelectOption, type MultiSelectProps, NumberStepper, type NumberStepperProps, OAuthButton, type OAuthButtonProps, type OAuthProvider, Pagination, type PaginationProps, PasswordStrength, type PasswordStrengthProps, Popover, type PopoverPlacement, type PopoverProps, type PopoverVariant, ProgressBar, type ProgressBarProps, Radio, RadioGroup, type RadioGroupProps, type RadioProps, RangeSlider, type RangeSliderProps, RelativeTime, type RelativeTimeProps, RichText, type RichTextProps, RollingNumber, type RollingNumberProps, SearchAndFilters, type SearchAndFiltersProps, type SearchFilter, type SearchSuggestion, SegmentedControl, type SegmentedControlProps, type SegmentedOption, Select, type SelectOption, type SelectProps, Sheet, type SheetProps, type SheetSide, Skeleton, type SkeletonProps, type SkeletonShape, type SnackbarAction, type SnackbarOptions, SnackbarProvider, type SnackbarProviderProps, type SnackbarTone, Sortable, SortableDndContext, type SortableDndContextProps, SortableItem, type SortableItemData, type SortableItemProps, type SortableProps, Sparkline, type SparklineProps, SplitButton, type SplitButtonAction, type SplitButtonProps, SplitHero, type SplitHeroProps, StarRating, type StarRatingProps, type StarRatingSize, StatCard, type StatCardChangeDir, type StatCardProps, StatusPill, type StatusPillProps, type StatusPillStage, StickyNote, type StickyNoteProps, type StickyNoteRotation, type TabItem, Table, type TableHeaderCellProps, type TableRootProps, Tabs, type TabsProps, Text, type TextElement, TextInput, type TextInputProps, type TextProps, type TextVariant, Textarea, type TextareaProps, Timeline, type TimelineEvent, type TimelineProps, type ToastOptions, ToastProvider, type ToastProviderProps, type ToastTone, Toggle, type ToggleProps, Tooltip, type TooltipPlacement, type TooltipProps, TypeToConfirm, type TypeToConfirmProps, Wizard, type WizardProps, type WizardStep, deriveGradient, deriveInitials, useSnackbar, useToast };