@lovett/ui 0.0.9 → 0.0.11
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 +823 -135
- package/dist/index.js +2048 -358
- package/dist/index.js.map +1 -1
- package/dist/styles.css +44 -2
- package/dist/theme-v2.css +228 -0
- package/dist/tokens.css +123 -8
- package/package.json +1 -1
- package/src/__tests__/anchor.test.tsx +422 -0
- package/src/__tests__/combobox.test.tsx +677 -0
- package/src/__tests__/dropdown-menu.test.tsx +418 -0
- package/src/__tests__/helpers/geometry.ts +58 -0
- package/src/__tests__/layer-stack.test.tsx +228 -0
- package/src/__tests__/modal.test.tsx +180 -6
- package/src/__tests__/popover.test.tsx +460 -0
- package/src/__tests__/select.test.tsx +543 -0
- package/src/__tests__/tooltip.test.tsx +355 -0
- package/src/calculator-shell-v2.tsx +19 -39
- package/src/code-block.tsx +15 -26
- package/src/combobox.tsx +796 -0
- package/src/dropdown-menu.tsx +142 -152
- package/src/icons/brand.tsx +81 -2
- package/src/index.ts +111 -0
- package/src/lib/anchor.ts +427 -0
- package/src/lib/focus.ts +32 -0
- package/src/lib/layer-stack.ts +188 -0
- package/src/lib/refs.ts +31 -0
- package/src/metric-card.tsx +57 -22
- package/src/modal.tsx +149 -9
- package/src/page-shell.tsx +91 -2
- package/src/popover.tsx +407 -0
- package/src/segmented-pill.tsx +33 -10
- package/src/select.tsx +646 -0
- package/src/stat-row.tsx +108 -70
- package/src/styles.css +44 -2
- package/src/theme-v2.css +7 -245
- package/src/tokens.css +123 -8
- package/src/tooltip.tsx +297 -0
- package/src/react-syntax-highlighter-prism.d.ts +0 -34
- package/src/v2/README.md +0 -208
- package/src/v2/__demo__/showcase.tsx +0 -1045
- package/src/v2/action.tsx +0 -91
- package/src/v2/callout.tsx +0 -76
- package/src/v2/document-section.tsx +0 -82
- package/src/v2/document-shell.tsx +0 -0
- package/src/v2/field-row.tsx +0 -113
- package/src/v2/icons.tsx +0 -165
- package/src/v2/index.ts +0 -147
- package/src/v2/layout.tsx +0 -293
- package/src/v2/progress-track.tsx +0 -89
- package/src/v2/stat-tile.tsx +0 -129
- package/src/v2/states.tsx +0 -271
- package/src/v2/status-pill.tsx +0 -74
- package/src/v2/theme.css +0 -1861
- package/src/v2/timeline.tsx +0 -81
- package/src/v2/tokens.ts +0 -228
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
1
2
|
import * as react from 'react';
|
|
2
|
-
import react__default, { HTMLAttributes, ReactNode, ButtonHTMLAttributes, InputHTMLAttributes, TextareaHTMLAttributes, CSSProperties, RefObject, ComponentProps, ComponentType, FormHTMLAttributes, FormEvent } from 'react';
|
|
3
|
+
import react__default, { HTMLAttributes, ReactNode, ButtonHTMLAttributes, InputHTMLAttributes, TextareaHTMLAttributes, CSSProperties, RefObject, ComponentProps, ComponentType, RefAttributes, ReactElement, Ref, FormHTMLAttributes, FormEvent } from 'react';
|
|
3
4
|
import { Toaster as Toaster$1 } from 'sonner';
|
|
4
5
|
export { toast } from 'sonner';
|
|
5
6
|
import { DndContext, DragEndEvent } from '@dnd-kit/core';
|
|
@@ -33,21 +34,21 @@ interface CardProps extends DivProps {
|
|
|
33
34
|
interactive?: boolean;
|
|
34
35
|
}
|
|
35
36
|
declare const CardRoot: react.ForwardRefExoticComponent<CardProps & react.RefAttributes<HTMLDivElement>>;
|
|
36
|
-
declare function Head({ className, ...rest }: DivProps):
|
|
37
|
-
declare function Body({ className, ...rest }: DivProps):
|
|
38
|
-
declare function Tray$1({ className, ...rest }: DivProps):
|
|
39
|
-
declare function Foot({ className, ...rest }: DivProps):
|
|
40
|
-
declare function Title({ children, className, ...rest }: HTMLAttributes<HTMLDivElement>):
|
|
37
|
+
declare function Head({ className, ...rest }: DivProps): react_jsx_runtime.JSX.Element;
|
|
38
|
+
declare function Body({ className, ...rest }: DivProps): react_jsx_runtime.JSX.Element;
|
|
39
|
+
declare function Tray$1({ className, ...rest }: DivProps): react_jsx_runtime.JSX.Element;
|
|
40
|
+
declare function Foot({ className, ...rest }: DivProps): react_jsx_runtime.JSX.Element;
|
|
41
|
+
declare function Title({ children, className, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
41
42
|
declare function Desc({ children, className, ...rest }: HTMLAttributes<HTMLDivElement> & {
|
|
42
43
|
clamp?: 2 | 3;
|
|
43
|
-
}):
|
|
44
|
-
declare function Meta({ className, ...rest }: DivProps):
|
|
44
|
+
}): react_jsx_runtime.JSX.Element;
|
|
45
|
+
declare function Meta({ className, ...rest }: DivProps): react_jsx_runtime.JSX.Element;
|
|
45
46
|
declare function MetaItem({ icon, children, className, }: {
|
|
46
47
|
icon?: ReactNode;
|
|
47
48
|
children: ReactNode;
|
|
48
49
|
className?: string;
|
|
49
|
-
}):
|
|
50
|
-
declare function Actions({ className, ...rest }: DivProps):
|
|
50
|
+
}): react_jsx_runtime.JSX.Element;
|
|
51
|
+
declare function Actions({ className, ...rest }: DivProps): react_jsx_runtime.JSX.Element;
|
|
51
52
|
interface ActionButtonProps$1 extends HTMLAttributes<HTMLButtonElement> {
|
|
52
53
|
danger?: boolean;
|
|
53
54
|
}
|
|
@@ -62,13 +63,13 @@ declare function IconTile({ bg, fg, size, className, children, }: {
|
|
|
62
63
|
size?: number;
|
|
63
64
|
className?: string;
|
|
64
65
|
children: ReactNode;
|
|
65
|
-
}):
|
|
66
|
+
}): react_jsx_runtime.JSX.Element;
|
|
66
67
|
/** Tag row helper — reads `--tag-bg`/`--border` automatically. */
|
|
67
68
|
declare function TagRow({ tags, max, className, }: {
|
|
68
69
|
tags: string[];
|
|
69
70
|
max?: number;
|
|
70
71
|
className?: string;
|
|
71
|
-
}):
|
|
72
|
+
}): react_jsx_runtime.JSX.Element;
|
|
72
73
|
type CardComponent = typeof CardRoot & {
|
|
73
74
|
Head: typeof Head;
|
|
74
75
|
Body: typeof Body;
|
|
@@ -99,7 +100,7 @@ interface CollapsibleCardProps {
|
|
|
99
100
|
contentClassName?: string;
|
|
100
101
|
children: ReactNode;
|
|
101
102
|
}
|
|
102
|
-
declare function CollapsibleCard({ title, icon, meta, actions, defaultOpen, contentClassName, children, }: CollapsibleCardProps):
|
|
103
|
+
declare function CollapsibleCard({ title, icon, meta, actions, defaultOpen, contentClassName, children, }: CollapsibleCardProps): react_jsx_runtime.JSX.Element;
|
|
103
104
|
|
|
104
105
|
type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'destructive' | 'destructive-soft' | 'icon' | 'toolbar';
|
|
105
106
|
type ButtonSize = 'sm' | 'md' | 'lg';
|
|
@@ -122,7 +123,7 @@ interface ButtonGroupProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
122
123
|
/** One or more `<Button>` elements. */
|
|
123
124
|
children: ReactNode;
|
|
124
125
|
}
|
|
125
|
-
declare function ButtonGroup({ children, className, role, ...rest }: ButtonGroupProps):
|
|
126
|
+
declare function ButtonGroup({ children, className, role, ...rest }: ButtonGroupProps): react_jsx_runtime.JSX.Element;
|
|
126
127
|
|
|
127
128
|
type InputSize = 'sm' | 'md' | 'lg';
|
|
128
129
|
interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {
|
|
@@ -186,18 +187,58 @@ declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.Re
|
|
|
186
187
|
* <Button>Confirm</Button>
|
|
187
188
|
* </Modal.Footer>
|
|
188
189
|
* </Modal>
|
|
190
|
+
*
|
|
191
|
+
* Accessibility. The panel is a `role="dialog" aria-modal="true"` region
|
|
192
|
+
* named by its own `<h2>` (`aria-labelledby`), or by the `ariaLabel` prop
|
|
193
|
+
* when a caller renders a titleless modal. Opening moves focus to the
|
|
194
|
+
* panel — so a screen reader announces the dialog's name — and closing
|
|
195
|
+
* RESTORES focus to whatever was focused before it opened. Tab and
|
|
196
|
+
* Shift+Tab wrap inside the panel; Escape closes.
|
|
197
|
+
*
|
|
198
|
+
* Callers that want a specific control focused on open mark it
|
|
199
|
+
* `data-autofocus`; anything else and the panel itself takes focus.
|
|
200
|
+
*
|
|
201
|
+
* WHY A FOCUS TRAP AND NOT `inert` ON THE APP ROOT. Modal renders INLINE
|
|
202
|
+
* in the React tree — it is a descendant of `#root`, not a portal — so
|
|
203
|
+
* `inert` on the app root would make the modal itself inert. Portaling it
|
|
204
|
+
* to `document.body` to unlock that would move all 59 consuming files off
|
|
205
|
+
* the `.cs-frame`-scoped token layer and out of their current stacking /
|
|
206
|
+
* inheritance context, which is a much larger change than an a11y fix
|
|
207
|
+
* should make. Inerting `document.body`'s other children is also wrong:
|
|
208
|
+
* `DropdownMenu`, `Popover`, `TagChipInput` and `FolderTreePicker` portal
|
|
209
|
+
* their content THERE, so a select inside a modal would go dead. Focus trap
|
|
210
|
+
* it is — the keyboard hole is closed; pointer and AT virtual-cursor access
|
|
211
|
+
* to the background remains, which is the documented residual.
|
|
212
|
+
*
|
|
213
|
+
* Escape and dismiss order come from the shared layer stack
|
|
214
|
+
* (`lib/layer-stack.ts`): the topmost open surface — modal, menu or
|
|
215
|
+
* popover — answers Escape alone.
|
|
216
|
+
*/
|
|
217
|
+
/**
|
|
218
|
+
* Dismiss order lives in the shared layer stack (`lib/layer-stack.ts`),
|
|
219
|
+
* which this file used to own as a module-level `openPanels` array. Only
|
|
220
|
+
* the topmost layer answers Escape, so nested modals do not both close on
|
|
221
|
+
* one keypress — and now a DropdownMenu or Popover opened from inside a
|
|
222
|
+
* modal closes on its own first, leaving the modal open. The Tab trap asks
|
|
223
|
+
* for the topmost MODAL (`isTopOfKind`), so a popover above it does not
|
|
224
|
+
* switch the trap off.
|
|
189
225
|
*/
|
|
190
226
|
interface ModalProps {
|
|
191
227
|
isOpen: boolean;
|
|
192
228
|
onClose: () => void;
|
|
193
229
|
title: string;
|
|
194
230
|
children: ReactNode;
|
|
195
|
-
className?: string;
|
|
231
|
+
className?: string | undefined;
|
|
232
|
+
/**
|
|
233
|
+
* Accessible name for a modal rendered with an empty `title`. Ignored
|
|
234
|
+
* when `title` is non-empty — the `<h2>` names the dialog then.
|
|
235
|
+
*/
|
|
236
|
+
ariaLabel?: string | undefined;
|
|
196
237
|
}
|
|
197
|
-
declare function Modal({ isOpen, onClose, title, children, className }: ModalProps):
|
|
238
|
+
declare function Modal({ isOpen, onClose, title, children, className, ariaLabel }: ModalProps): react_jsx_runtime.JSX.Element | null;
|
|
198
239
|
declare namespace Modal {
|
|
199
|
-
var Tray: ({ className, ...rest }: HTMLAttributes<HTMLDivElement>) =>
|
|
200
|
-
var Footer: ({ className, ...rest }: HTMLAttributes<HTMLDivElement>) =>
|
|
240
|
+
var Tray: ({ className, ...rest }: HTMLAttributes<HTMLDivElement>) => react_jsx_runtime.JSX.Element;
|
|
241
|
+
var Footer: ({ className, ...rest }: HTMLAttributes<HTMLDivElement>) => react_jsx_runtime.JSX.Element;
|
|
201
242
|
}
|
|
202
243
|
|
|
203
244
|
type Side$1 = 'right' | 'bottom';
|
|
@@ -260,7 +301,7 @@ interface FloatingDrawerProps {
|
|
|
260
301
|
* the right-drawer's body padding so the action bar feels integrated. */
|
|
261
302
|
headerClassName?: string;
|
|
262
303
|
}
|
|
263
|
-
declare function FloatingDrawer({ isOpen, onClose, side, size, resizable, onResize, title, titleSlot, footer, children, className, panelClassName, modal, anchor, showClose, headerClassName, collapsed, }: FloatingDrawerProps):
|
|
304
|
+
declare function FloatingDrawer({ isOpen, onClose, side, size, resizable, onResize, title, titleSlot, footer, children, className, panelClassName, modal, anchor, showClose, headerClassName, collapsed, }: FloatingDrawerProps): react_jsx_runtime.JSX.Element;
|
|
264
305
|
/**
|
|
265
306
|
* DetailSection — small label/value layout for drawer body content.
|
|
266
307
|
* Ports verbatim from brand-ai-extension's detail-drawer.tsx.
|
|
@@ -269,7 +310,7 @@ declare function DetailSection({ label, children, className, }: {
|
|
|
269
310
|
label: string;
|
|
270
311
|
children: ReactNode;
|
|
271
312
|
className?: string;
|
|
272
|
-
}):
|
|
313
|
+
}): react_jsx_runtime.JSX.Element;
|
|
273
314
|
|
|
274
315
|
type BrandLogoTileSize = 'xs' | 'sm' | 'md' | 'lg' | number;
|
|
275
316
|
interface BrandLogoTileProps {
|
|
@@ -315,12 +356,12 @@ interface BrandLogoTileProps {
|
|
|
315
356
|
className?: string;
|
|
316
357
|
style?: CSSProperties;
|
|
317
358
|
}
|
|
318
|
-
declare function BrandLogoTile({ size, url, name, isFavicon, accentGlow, fallbackChar, background, color, borderless, className, style, }: BrandLogoTileProps):
|
|
359
|
+
declare function BrandLogoTile({ size, url, name, isFavicon, accentGlow, fallbackChar, background, color, borderless, className, style, }: BrandLogoTileProps): react_jsx_runtime.JSX.Element;
|
|
319
360
|
|
|
320
361
|
interface ActionButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
321
362
|
label: string;
|
|
322
363
|
}
|
|
323
|
-
declare function ActionButton({ label, className, children, ...rest }: ActionButtonProps):
|
|
364
|
+
declare function ActionButton({ label, className, children, ...rest }: ActionButtonProps): react_jsx_runtime.JSX.Element;
|
|
324
365
|
interface FootProps {
|
|
325
366
|
meta?: ReactNode;
|
|
326
367
|
link?: {
|
|
@@ -332,7 +373,7 @@ interface FootProps {
|
|
|
332
373
|
/** FootItem — a single icon+text item inside the foot. */
|
|
333
374
|
declare function FootItem({ children }: {
|
|
334
375
|
children: ReactNode;
|
|
335
|
-
}):
|
|
376
|
+
}): react_jsx_runtime.JSX.Element;
|
|
336
377
|
interface BaseProps {
|
|
337
378
|
/** DOM id and `data-section-id` for ChipNav scroll-spy. */
|
|
338
379
|
id: string;
|
|
@@ -384,7 +425,7 @@ interface EditableSectionProps extends BaseProps {
|
|
|
384
425
|
actions?: undefined;
|
|
385
426
|
}
|
|
386
427
|
type ProfileSectionProps = StaticSectionProps | EditableSectionProps;
|
|
387
|
-
declare function ProfileSection(props: ProfileSectionProps):
|
|
428
|
+
declare function ProfileSection(props: ProfileSectionProps): react_jsx_runtime.JSX.Element;
|
|
388
429
|
type ProfileSectionComponent = typeof ProfileSection & {
|
|
389
430
|
ActionButton: typeof ActionButton;
|
|
390
431
|
FootItem: typeof FootItem;
|
|
@@ -464,7 +505,7 @@ interface ChipNavProps {
|
|
|
464
505
|
*/
|
|
465
506
|
density?: 'comfortable' | 'compact';
|
|
466
507
|
}
|
|
467
|
-
declare function ChipNav({ items, scrollContainer, stickyTop, scrollOffset, actions, className, style, surface, activeId: activeIdProp, onItemClick, position, density, }: ChipNavProps):
|
|
508
|
+
declare function ChipNav({ items, scrollContainer, stickyTop, scrollOffset, actions, className, style, surface, activeId: activeIdProp, onItemClick, position, density, }: ChipNavProps): react_jsx_runtime.JSX.Element;
|
|
468
509
|
|
|
469
510
|
interface CompletionRingProps {
|
|
470
511
|
/** 0–100. Values outside the range are clamped. */
|
|
@@ -489,7 +530,7 @@ interface CompletionRingProps {
|
|
|
489
530
|
className?: string;
|
|
490
531
|
style?: CSSProperties;
|
|
491
532
|
}
|
|
492
|
-
declare function CompletionRing({ percent, size, strokeWidth, label, showLabel, trackColor, fillColor, className, style, }: CompletionRingProps):
|
|
533
|
+
declare function CompletionRing({ percent, size, strokeWidth, label, showLabel, trackColor, fillColor, className, style, }: CompletionRingProps): react_jsx_runtime.JSX.Element;
|
|
493
534
|
|
|
494
535
|
/**
|
|
495
536
|
* MicrosoftLogo — the Microsoft four-square brand mark, for "Sign in with
|
|
@@ -505,7 +546,7 @@ interface MicrosoftLogoProps {
|
|
|
505
546
|
size?: number;
|
|
506
547
|
className?: string;
|
|
507
548
|
}
|
|
508
|
-
declare function MicrosoftLogo({ size, className }: MicrosoftLogoProps):
|
|
549
|
+
declare function MicrosoftLogo({ size, className }: MicrosoftLogoProps): react_jsx_runtime.JSX.Element;
|
|
509
550
|
|
|
510
551
|
/**
|
|
511
552
|
* Brand platform glyphs — real mono (currentColor) marks for the ad platforms
|
|
@@ -529,27 +570,27 @@ declare function MicrosoftLogo({ size, className }: MicrosoftLogoProps): react.J
|
|
|
529
570
|
interface BrandIconProps {
|
|
530
571
|
/** Square box size in px; the glyph letterboxes inside (non-square viewBoxes
|
|
531
572
|
* centre via preserveAspectRatio). Default 16 — a tab/affix glyph. */
|
|
532
|
-
size?: number;
|
|
533
|
-
className?: string;
|
|
573
|
+
size?: number | undefined;
|
|
574
|
+
className?: string | undefined;
|
|
534
575
|
}
|
|
535
576
|
/** Meta brand glyph (mono, currentColor). */
|
|
536
|
-
declare function BrandMeta({ size, className }: BrandIconProps):
|
|
577
|
+
declare function BrandMeta({ size, className }: BrandIconProps): react_jsx_runtime.JSX.Element;
|
|
537
578
|
/** Facebook brand glyph (mono, currentColor). */
|
|
538
|
-
declare function BrandFacebook({ size, className }: BrandIconProps):
|
|
579
|
+
declare function BrandFacebook({ size, className }: BrandIconProps): react_jsx_runtime.JSX.Element;
|
|
539
580
|
/** Instagram brand glyph (mono, currentColor). */
|
|
540
|
-
declare function BrandInstagram({ size, className }: BrandIconProps):
|
|
581
|
+
declare function BrandInstagram({ size, className }: BrandIconProps): react_jsx_runtime.JSX.Element;
|
|
541
582
|
/** Messenger brand glyph (mono, currentColor). */
|
|
542
|
-
declare function BrandMessenger({ size, className }: BrandIconProps):
|
|
583
|
+
declare function BrandMessenger({ size, className }: BrandIconProps): react_jsx_runtime.JSX.Element;
|
|
543
584
|
/** LinkedIn brand glyph (mono, currentColor). */
|
|
544
|
-
declare function BrandLinkedIn({ size, className }: BrandIconProps):
|
|
585
|
+
declare function BrandLinkedIn({ size, className }: BrandIconProps): react_jsx_runtime.JSX.Element;
|
|
545
586
|
/** Nextdoor brand glyph (mono, currentColor). */
|
|
546
|
-
declare function BrandNextdoor({ size, className }: BrandIconProps):
|
|
587
|
+
declare function BrandNextdoor({ size, className }: BrandIconProps): react_jsx_runtime.JSX.Element;
|
|
547
588
|
/** Pinterest brand glyph (mono, currentColor). */
|
|
548
|
-
declare function BrandPinterest({ size, className }: BrandIconProps):
|
|
589
|
+
declare function BrandPinterest({ size, className }: BrandIconProps): react_jsx_runtime.JSX.Element;
|
|
549
590
|
/** Snapchat brand glyph (mono, currentColor). */
|
|
550
|
-
declare function BrandSnapchat({ size, className }: BrandIconProps):
|
|
591
|
+
declare function BrandSnapchat({ size, className }: BrandIconProps): react_jsx_runtime.JSX.Element;
|
|
551
592
|
/** TikTok brand glyph (mono, currentColor). */
|
|
552
|
-
declare function BrandTikTok({ size, className }: BrandIconProps):
|
|
593
|
+
declare function BrandTikTok({ size, className }: BrandIconProps): react_jsx_runtime.JSX.Element;
|
|
553
594
|
/** Keyed map for registry-style resolution (e.g. the Social Spec tactic icons). */
|
|
554
595
|
declare const BRAND_ICONS: {
|
|
555
596
|
readonly meta: typeof BrandMeta;
|
|
@@ -563,6 +604,20 @@ declare const BRAND_ICONS: {
|
|
|
563
604
|
readonly tiktok: typeof BrandTikTok;
|
|
564
605
|
};
|
|
565
606
|
type BrandIconKey = keyof typeof BRAND_ICONS;
|
|
607
|
+
/** Every platform `<BrandIcon>` can draw in colour. */
|
|
608
|
+
declare function hasBrandIcon(name: string): boolean;
|
|
609
|
+
interface BrandIconRegistryProps extends BrandIconProps {
|
|
610
|
+
/** Platform key, e.g. "facebook", "youtube". */
|
|
611
|
+
name: string;
|
|
612
|
+
/** Give a label only when the mark stands alone; decorative beside text. */
|
|
613
|
+
title?: string | undefined;
|
|
614
|
+
}
|
|
615
|
+
/**
|
|
616
|
+
* A full-colour platform mark, looked up by key. Use when the platform is
|
|
617
|
+
* chosen at runtime; use the named mono `Brand*` components when it is known
|
|
618
|
+
* at author time and the mark sits in coloured chrome.
|
|
619
|
+
*/
|
|
620
|
+
declare function BrandIcon({ name, size, className, title }: BrandIconRegistryProps): react_jsx_runtime.JSX.Element | null;
|
|
566
621
|
|
|
567
622
|
interface ChoroplethProps {
|
|
568
623
|
/** `radius` → concentric circles; `isochrone` → concentric polygons. */
|
|
@@ -570,7 +625,7 @@ interface ChoroplethProps {
|
|
|
570
625
|
className?: string;
|
|
571
626
|
style?: CSSProperties;
|
|
572
627
|
}
|
|
573
|
-
declare function Choropleth({ mode, className, style }: ChoroplethProps):
|
|
628
|
+
declare function Choropleth({ mode, className, style }: ChoroplethProps): react_jsx_runtime.JSX.Element;
|
|
574
629
|
|
|
575
630
|
type Crumb = {
|
|
576
631
|
label: string;
|
|
@@ -604,9 +659,26 @@ interface PageShellProps {
|
|
|
604
659
|
/** Override content padding if needed. Default leaves room for the sticky-blend header. */
|
|
605
660
|
contentClassName?: string;
|
|
606
661
|
}
|
|
607
|
-
|
|
662
|
+
/**
|
|
663
|
+
* The app's home destination, rendered as the first breadcrumb.
|
|
664
|
+
*
|
|
665
|
+
* PER-APP AND OPT-IN, which is the whole reason it lives on the provider
|
|
666
|
+
* instead of being hardcoded in `Breadcrumbs`. `PageShell` is shared: the
|
|
667
|
+
* workspace and `apps/approvals` both render it, and approvals has no
|
|
668
|
+
* `/clients` route — a hardcoded home would have shipped it a dead link on
|
|
669
|
+
* every page. An app that wants a home crumb says where home is; an app that
|
|
670
|
+
* does not gets no icon and nothing breaks.
|
|
671
|
+
*/
|
|
672
|
+
interface HomeCrumb {
|
|
673
|
+
to: string;
|
|
674
|
+
/** Accessible name for the icon-only link, e.g. "Clients". */
|
|
675
|
+
label: string;
|
|
676
|
+
}
|
|
677
|
+
declare function PageHeaderSlotProvider({ children, home, }: {
|
|
608
678
|
children: ReactNode;
|
|
609
|
-
|
|
679
|
+
/** Where the leading home crumb points. Omit to render no home crumb. */
|
|
680
|
+
home?: HomeCrumb | null;
|
|
681
|
+
}): react_jsx_runtime.JSX.Element;
|
|
610
682
|
/**
|
|
611
683
|
* Page shell — promoted from brand-ai-extension Phase 2a (ADR-009 Decision 7).
|
|
612
684
|
*
|
|
@@ -619,7 +691,7 @@ declare function PageHeaderSlotProvider({ children }: {
|
|
|
619
691
|
* rendering its own bar — the workspace uses this to merge the lens crumbs
|
|
620
692
|
* onto the same row as the workspace sidebar toggle.
|
|
621
693
|
*/
|
|
622
|
-
declare function PageShell({ crumbs, breadcrumb, title, actions, headerCenter, children, contentClassName, }: PageShellProps):
|
|
694
|
+
declare function PageShell({ crumbs, breadcrumb, title, actions, headerCenter, children, contentClassName, }: PageShellProps): react_jsx_runtime.JSX.Element;
|
|
623
695
|
|
|
624
696
|
/**
|
|
625
697
|
* PageHeaderHost — single workspace-level header bar that the active
|
|
@@ -656,7 +728,33 @@ declare function PageHeaderHost({ leading, center, trailing, padX, }: {
|
|
|
656
728
|
*/
|
|
657
729
|
center?: ReactNode;
|
|
658
730
|
trailing?: ReactNode;
|
|
659
|
-
}):
|
|
731
|
+
}): react_jsx_runtime.JSX.Element;
|
|
732
|
+
/**
|
|
733
|
+
* The app's home destination, or null when the app has not declared one.
|
|
734
|
+
*
|
|
735
|
+
* Exported because not every breadcrumb in the app goes through `PageShell` —
|
|
736
|
+
* the Generate lens renders its own trail beside an editable project title —
|
|
737
|
+
* and those forks should read the same destination rather than each hardcoding
|
|
738
|
+
* a path that then drifts.
|
|
739
|
+
*/
|
|
740
|
+
declare function useBreadcrumbHome(): HomeCrumb | null;
|
|
741
|
+
/**
|
|
742
|
+
* The leading home crumb: an icon, not a word.
|
|
743
|
+
*
|
|
744
|
+
* WHY AN ICON REPLACES THE FIRST CRUMB RATHER THAN SITTING BESIDE IT. Thirty-one
|
|
745
|
+
* lens trails already began `Clients / …` pointing at `/clients`, which is
|
|
746
|
+
* exactly where home goes — so rendering both would put the same destination on
|
|
747
|
+
* screen twice in a row, once as a picture and once as a word. The icon takes
|
|
748
|
+
* that crumb's place when they agree and prepends when they do not (the tools
|
|
749
|
+
* trails start at `/tools`), so "first position" holds either way.
|
|
750
|
+
*
|
|
751
|
+
* It carries an `aria-label` and a `title`: an icon-only link has no accessible
|
|
752
|
+
* name otherwise, and the tooltip is what tells a first-time user that the house
|
|
753
|
+
* means the client list rather than some other notion of home.
|
|
754
|
+
*/
|
|
755
|
+
declare function HomeCrumbLink({ home }: {
|
|
756
|
+
home: HomeCrumb;
|
|
757
|
+
}): react_jsx_runtime.JSX.Element;
|
|
660
758
|
/**
|
|
661
759
|
* Scrollable wrapper that exposes its scrollRef via a render prop so
|
|
662
760
|
* the consuming header (PageShell's internal PageHeader) can subscribe
|
|
@@ -665,7 +763,7 @@ declare function PageHeaderHost({ leading, center, trailing, padX, }: {
|
|
|
665
763
|
declare function AppScroll({ children, className, }: {
|
|
666
764
|
children: (scrollRef: RefObject<HTMLDivElement | null>) => ReactNode;
|
|
667
765
|
className?: string;
|
|
668
|
-
}):
|
|
766
|
+
}): react_jsx_runtime.JSX.Element;
|
|
669
767
|
|
|
670
768
|
type SonnerToasterProps = ComponentProps<typeof Toaster$1>;
|
|
671
769
|
/**
|
|
@@ -678,18 +776,18 @@ type SonnerToasterProps = ComponentProps<typeof Toaster$1>;
|
|
|
678
776
|
* Apps can override any prop (position, duration, theme, etc.) by
|
|
679
777
|
* passing it through.
|
|
680
778
|
*/
|
|
681
|
-
declare function Toaster(props: SonnerToasterProps):
|
|
779
|
+
declare function Toaster(props: SonnerToasterProps): react_jsx_runtime.JSX.Element;
|
|
682
780
|
|
|
683
781
|
declare function SectionLabel({ children }: {
|
|
684
782
|
children: ReactNode;
|
|
685
|
-
}):
|
|
783
|
+
}): react_jsx_runtime.JSX.Element;
|
|
686
784
|
declare function IdentityLabel({ children }: {
|
|
687
785
|
children: ReactNode;
|
|
688
|
-
}):
|
|
786
|
+
}): react_jsx_runtime.JSX.Element;
|
|
689
787
|
declare function IdentityValue({ children, className, }: {
|
|
690
788
|
children: ReactNode;
|
|
691
789
|
className?: string;
|
|
692
|
-
}):
|
|
790
|
+
}): react_jsx_runtime.JSX.Element;
|
|
693
791
|
declare function TextInput({ value, onChange, placeholder, autoFocus, autoComplete, name, }: {
|
|
694
792
|
value: string;
|
|
695
793
|
onChange: (v: string) => void;
|
|
@@ -699,7 +797,7 @@ declare function TextInput({ value, onChange, placeholder, autoFocus, autoComple
|
|
|
699
797
|
autoComplete?: string | undefined;
|
|
700
798
|
/** Forwarded so the field participates in form submission / autofill heuristics. */
|
|
701
799
|
name?: string | undefined;
|
|
702
|
-
}):
|
|
800
|
+
}): react_jsx_runtime.JSX.Element;
|
|
703
801
|
declare function TextareaInput({ value, onChange, placeholder, autoFocus, autoComplete, name, rows, }: {
|
|
704
802
|
value: string;
|
|
705
803
|
onChange: (v: string) => void;
|
|
@@ -708,15 +806,15 @@ declare function TextareaInput({ value, onChange, placeholder, autoFocus, autoCo
|
|
|
708
806
|
autoComplete?: string | undefined;
|
|
709
807
|
name?: string | undefined;
|
|
710
808
|
rows?: number | undefined;
|
|
711
|
-
}):
|
|
809
|
+
}): react_jsx_runtime.JSX.Element;
|
|
712
810
|
declare function EmptyPlaceholder({ label, description, onAdd, }: {
|
|
713
811
|
label: string;
|
|
714
812
|
description?: string | undefined;
|
|
715
813
|
onAdd?: (() => void) | undefined;
|
|
716
|
-
}):
|
|
814
|
+
}): react_jsx_runtime.JSX.Element;
|
|
717
815
|
declare function ListItem({ children }: {
|
|
718
816
|
children: ReactNode;
|
|
719
|
-
}):
|
|
817
|
+
}): react_jsx_runtime.JSX.Element;
|
|
720
818
|
|
|
721
819
|
type Strategy = 'vertical' | 'horizontal' | 'grid';
|
|
722
820
|
declare function SortableList<T>({ items, getId, onReorder, strategy, children, }: {
|
|
@@ -725,7 +823,7 @@ declare function SortableList<T>({ items, getId, onReorder, strategy, children,
|
|
|
725
823
|
onReorder: (items: T[]) => void;
|
|
726
824
|
strategy?: Strategy;
|
|
727
825
|
children: ReactNode;
|
|
728
|
-
}):
|
|
826
|
+
}): react_jsx_runtime.JSX.Element;
|
|
729
827
|
declare function SortableItem({ id, children, }: {
|
|
730
828
|
id: string;
|
|
731
829
|
children: (props: {
|
|
@@ -734,11 +832,11 @@ declare function SortableItem({ id, children, }: {
|
|
|
734
832
|
style: CSSProperties;
|
|
735
833
|
isDragging: boolean;
|
|
736
834
|
}) => ReactNode;
|
|
737
|
-
}):
|
|
835
|
+
}): react_jsx_runtime.JSX.Element;
|
|
738
836
|
declare function DragHandle({ dragHandleProps, className, }: {
|
|
739
837
|
dragHandleProps: HTMLAttributes<HTMLElement>;
|
|
740
838
|
className?: string;
|
|
741
|
-
}):
|
|
839
|
+
}): react_jsx_runtime.JSX.Element;
|
|
742
840
|
|
|
743
841
|
interface EmptyStateProps {
|
|
744
842
|
/** Lucide icon (or any ReactNode) rendered inside the 56×56 tile.
|
|
@@ -754,7 +852,7 @@ interface EmptyStateProps {
|
|
|
754
852
|
* (e.g. when the parent already provides vertical padding). */
|
|
755
853
|
className?: string;
|
|
756
854
|
}
|
|
757
|
-
declare function EmptyState({ icon, title, description, actions, className, }: EmptyStateProps):
|
|
855
|
+
declare function EmptyState({ icon, title, description, actions, className, }: EmptyStateProps): react_jsx_runtime.JSX.Element;
|
|
758
856
|
|
|
759
857
|
interface RadioGroupProps<T extends string = string> {
|
|
760
858
|
/** Form name — required for proper radio semantics + form submission. */
|
|
@@ -774,7 +872,7 @@ interface RadioGroupProps<T extends string = string> {
|
|
|
774
872
|
/** Disable every child radio. */
|
|
775
873
|
disabled?: boolean;
|
|
776
874
|
}
|
|
777
|
-
declare function RadioGroup<T extends string = string>({ name, value, onChange, children, ariaLabel, orientation, className, disabled, }: RadioGroupProps<T>):
|
|
875
|
+
declare function RadioGroup<T extends string = string>({ name, value, onChange, children, ariaLabel, orientation, className, disabled, }: RadioGroupProps<T>): react_jsx_runtime.JSX.Element;
|
|
778
876
|
interface RadioProps {
|
|
779
877
|
/** Value emitted to the group's onChange when picked. */
|
|
780
878
|
value: string;
|
|
@@ -800,7 +898,7 @@ interface OptionTileProps {
|
|
|
800
898
|
disabled: boolean | undefined;
|
|
801
899
|
className: string | undefined;
|
|
802
900
|
}
|
|
803
|
-
declare function OptionTile({ selected, onSelect, inputType, inputName, label, description, disabled, className, }: OptionTileProps):
|
|
901
|
+
declare function OptionTile({ selected, onSelect, inputType, inputName, label, description, disabled, className, }: OptionTileProps): react_jsx_runtime.JSX.Element;
|
|
804
902
|
interface OptionTileGroupOption<T extends string> {
|
|
805
903
|
value: T;
|
|
806
904
|
label: ReactNode;
|
|
@@ -827,7 +925,7 @@ type OptionTileGroupProps<T extends string = string> = {
|
|
|
827
925
|
/** Optional shared `name` attr on the underlying checkboxes (rarely needed). */
|
|
828
926
|
name?: string;
|
|
829
927
|
};
|
|
830
|
-
declare function OptionTileGroup<T extends string = string>(props: OptionTileGroupProps<T>):
|
|
928
|
+
declare function OptionTileGroup<T extends string = string>(props: OptionTileGroupProps<T>): react_jsx_runtime.JSX.Element;
|
|
831
929
|
|
|
832
930
|
type MetricCardTone = 'neutral' | 'accent' | 'success' | 'warning' | 'destructive' | 'info';
|
|
833
931
|
interface MetricCardProps {
|
|
@@ -850,8 +948,13 @@ interface MetricCardProps {
|
|
|
850
948
|
labelPosition?: 'top' | 'bottom';
|
|
851
949
|
/** Optional className override for the outer container. */
|
|
852
950
|
className?: string;
|
|
951
|
+
/** Make the whole card a copy-to-clipboard button. */
|
|
952
|
+
copyable?: boolean;
|
|
953
|
+
/** What a copyable card writes. Defaults to `value` when it is a string;
|
|
954
|
+
* REQUIRED when `value` is a node (there is nothing else to copy). */
|
|
955
|
+
copyValue?: string;
|
|
853
956
|
}
|
|
854
|
-
declare function MetricCard({ value, label, tone, icon, labelPosition, className, }: MetricCardProps):
|
|
957
|
+
declare function MetricCard({ value, label, tone, icon, labelPosition, className, copyable, copyValue, }: MetricCardProps): react_jsx_runtime.JSX.Element;
|
|
855
958
|
|
|
856
959
|
/**
|
|
857
960
|
* ProgressBar — labeled fill bar.
|
|
@@ -875,7 +978,7 @@ interface ProgressBarProps {
|
|
|
875
978
|
/** Track height in px (default 8). */
|
|
876
979
|
height?: number;
|
|
877
980
|
}
|
|
878
|
-
declare function ProgressBar({ label, percent, status, height }: ProgressBarProps):
|
|
981
|
+
declare function ProgressBar({ label, percent, status, height }: ProgressBarProps): react_jsx_runtime.JSX.Element;
|
|
879
982
|
|
|
880
983
|
/**
|
|
881
984
|
* StepLoader — a sequential, multi-step loading indicator (3-5 steps). Each step
|
|
@@ -907,7 +1010,7 @@ interface StepLoaderProps {
|
|
|
907
1010
|
minLastStepMs?: number;
|
|
908
1011
|
className?: string;
|
|
909
1012
|
}
|
|
910
|
-
declare function StepLoader({ steps, done, onComplete, defaultStepMs, minLastStepMs, className, }: StepLoaderProps):
|
|
1013
|
+
declare function StepLoader({ steps, done, onComplete, defaultStepMs, minLastStepMs, className, }: StepLoaderProps): react_jsx_runtime.JSX.Element;
|
|
911
1014
|
|
|
912
1015
|
type BadgeTone = 'neutral' | 'accent' | 'success' | 'warning' | 'destructive' | 'info';
|
|
913
1016
|
interface BadgeProps {
|
|
@@ -924,7 +1027,7 @@ interface BadgeProps {
|
|
|
924
1027
|
/** Extra classes merged onto the outer span (no longer replaces base). */
|
|
925
1028
|
className?: string;
|
|
926
1029
|
}
|
|
927
|
-
declare function Badge({ tone, children, icon, dot, size, className, }: BadgeProps):
|
|
1030
|
+
declare function Badge({ tone, children, icon, dot, size, className, }: BadgeProps): react_jsx_runtime.JSX.Element;
|
|
928
1031
|
|
|
929
1032
|
interface TokenBadgeProps {
|
|
930
1033
|
/** Public token name to tint from, e.g. `--folder-teal`, `--accent`,
|
|
@@ -946,7 +1049,7 @@ interface TokenBadgeProps {
|
|
|
946
1049
|
uppercase?: boolean;
|
|
947
1050
|
className?: string;
|
|
948
1051
|
}
|
|
949
|
-
declare function TokenBadge({ colorVar, children, variant, dot, icon, size, shape, uppercase, className, }: TokenBadgeProps):
|
|
1052
|
+
declare function TokenBadge({ colorVar, children, variant, dot, icon, size, shape, uppercase, className, }: TokenBadgeProps): react_jsx_runtime.JSX.Element;
|
|
950
1053
|
|
|
951
1054
|
interface ValueChipProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {
|
|
952
1055
|
children: ReactNode;
|
|
@@ -1048,7 +1151,7 @@ interface AllocationSparkbarProps {
|
|
|
1048
1151
|
height?: number;
|
|
1049
1152
|
className?: string;
|
|
1050
1153
|
}
|
|
1051
|
-
declare function AllocationSparkbar({ values, baseColorVar, colorVars, labels, titles, height, className, }: AllocationSparkbarProps):
|
|
1154
|
+
declare function AllocationSparkbar({ values, baseColorVar, colorVars, labels, titles, height, className, }: AllocationSparkbarProps): react_jsx_runtime.JSX.Element;
|
|
1052
1155
|
|
|
1053
1156
|
type FloatingStatusTone = 'neutral' | 'accent' | 'success' | 'warning' | 'destructive' | 'info';
|
|
1054
1157
|
interface FloatingStatusBarProps {
|
|
@@ -1066,7 +1169,7 @@ interface FloatingStatusBarProps {
|
|
|
1066
1169
|
* bottom-center. */
|
|
1067
1170
|
className?: string;
|
|
1068
1171
|
}
|
|
1069
|
-
declare function FloatingStatusBar({ tone, label, meta, summary, action, className, }: FloatingStatusBarProps):
|
|
1172
|
+
declare function FloatingStatusBar({ tone, label, meta, summary, action, className, }: FloatingStatusBarProps): react_jsx_runtime.JSX.Element;
|
|
1070
1173
|
|
|
1071
1174
|
interface StatsGridProps {
|
|
1072
1175
|
children: ReactNode;
|
|
@@ -1076,7 +1179,7 @@ interface StatsGridProps {
|
|
|
1076
1179
|
/** Optional className override for the outer container. */
|
|
1077
1180
|
className?: string;
|
|
1078
1181
|
}
|
|
1079
|
-
declare function StatsGrid({ children, minColumnWidth, className, }: StatsGridProps):
|
|
1182
|
+
declare function StatsGrid({ children, minColumnWidth, className, }: StatsGridProps): react_jsx_runtime.JSX.Element;
|
|
1080
1183
|
|
|
1081
1184
|
interface Column<T> {
|
|
1082
1185
|
/** Unique id; doubles as the sort key. Use a `keyof T` string or
|
|
@@ -1115,7 +1218,7 @@ interface SortableTableProps<T> {
|
|
|
1115
1218
|
/** Compact density (smaller padding). Default false. */
|
|
1116
1219
|
compact?: boolean;
|
|
1117
1220
|
}
|
|
1118
|
-
declare function SortableTable<T>({ columns, rows, rowKey, initialSort, onRowClick, emptyState, zebra, compact, }: SortableTableProps<T>):
|
|
1221
|
+
declare function SortableTable<T>({ columns, rows, rowKey, initialSort, onRowClick, emptyState, zebra, compact, }: SortableTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
1119
1222
|
|
|
1120
1223
|
/**
|
|
1121
1224
|
* Pagination — "Showing X-Y of Z" + prev/next buttons.
|
|
@@ -1137,7 +1240,7 @@ interface PaginationProps {
|
|
|
1137
1240
|
totalItems: number;
|
|
1138
1241
|
onPageChange: (page: number) => void;
|
|
1139
1242
|
}
|
|
1140
|
-
declare function Pagination({ currentPage, pageSize, totalItems, onPageChange, }: PaginationProps):
|
|
1243
|
+
declare function Pagination({ currentPage, pageSize, totalItems, onPageChange, }: PaginationProps): react_jsx_runtime.JSX.Element | null;
|
|
1141
1244
|
|
|
1142
1245
|
interface Tab {
|
|
1143
1246
|
id: string;
|
|
@@ -1163,7 +1266,7 @@ interface TabsProps {
|
|
|
1163
1266
|
stretch?: boolean;
|
|
1164
1267
|
className?: string;
|
|
1165
1268
|
}
|
|
1166
|
-
declare function Tabs({ tabs, activeTabId, onTabChange, size, variant, stretch, className, }: TabsProps):
|
|
1269
|
+
declare function Tabs({ tabs, activeTabId, onTabChange, size, variant, stretch, className, }: TabsProps): react_jsx_runtime.JSX.Element;
|
|
1167
1270
|
|
|
1168
1271
|
interface PillButtonProps {
|
|
1169
1272
|
active: boolean;
|
|
@@ -1177,7 +1280,7 @@ interface PillButtonProps {
|
|
|
1177
1280
|
icon?: ReactNode;
|
|
1178
1281
|
disabled?: boolean;
|
|
1179
1282
|
}
|
|
1180
|
-
declare function PillButton({ active, onClick, children, size, tone, icon, disabled, }: PillButtonProps):
|
|
1283
|
+
declare function PillButton({ active, onClick, children, size, tone, icon, disabled, }: PillButtonProps): react_jsx_runtime.JSX.Element;
|
|
1181
1284
|
|
|
1182
1285
|
interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange' | 'checked'> {
|
|
1183
1286
|
checked?: boolean;
|
|
@@ -1186,8 +1289,242 @@ interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'typ
|
|
|
1186
1289
|
}
|
|
1187
1290
|
declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLInputElement>>;
|
|
1188
1291
|
|
|
1189
|
-
|
|
1190
|
-
|
|
1292
|
+
/**
|
|
1293
|
+
* Dismiss-layer stack — the ONE "topmost layer wins" registry shared by
|
|
1294
|
+
* Modal, DropdownMenu and Popover (and, next, ContextMenu / Select /
|
|
1295
|
+
* Combobox / Tooltip / CommandPalette).
|
|
1296
|
+
*
|
|
1297
|
+
* Extracted from modal.tsx's module-level `openPanels` array so every
|
|
1298
|
+
* dismissable surface participates in the same order. Before this, a
|
|
1299
|
+
* DropdownMenu opened from inside a Modal answered Escape at the same time
|
|
1300
|
+
* the Modal did — two document listeners, one keypress, both closed. Now a
|
|
1301
|
+
* single document `keydown` listener dispatches Escape to the top of the
|
|
1302
|
+
* stack ONLY, then stops propagation so window-level handlers (the chat
|
|
1303
|
+
* conversation drawer's Escape, lens hotkey maps) do not treat a consumed
|
|
1304
|
+
* Escape as theirs — which is what DropdownMenu's own listener already did.
|
|
1305
|
+
*
|
|
1306
|
+
* Promoted per ADR-0030 Decision G (meta-ads-audit-dashboard task manager:
|
|
1307
|
+
* every picker, sheet and palette needs one dismiss order). First consumer
|
|
1308
|
+
* is the workspace app: Modal (51 files), DropdownMenu (137 call sites) and
|
|
1309
|
+
* Popover all register here.
|
|
1310
|
+
*
|
|
1311
|
+
* Two kinds. A `modal` layer also owns a focus trap, and that trap must not
|
|
1312
|
+
* switch off because a `popover` opened above it — so Modal asks
|
|
1313
|
+
* `isTopOfKind()` for Tab handling while Escape always goes to `isTop()`.
|
|
1314
|
+
* Order is push order, which under React is effect order: a surface that
|
|
1315
|
+
* mounts or opens later sits above one that opened earlier.
|
|
1316
|
+
*
|
|
1317
|
+
* Usage (a dismissable surface):
|
|
1318
|
+
*
|
|
1319
|
+
* const layer = useLayer({
|
|
1320
|
+
* enabled: open,
|
|
1321
|
+
* kind: 'popover',
|
|
1322
|
+
* elementRef: contentRef,
|
|
1323
|
+
* onEscape: () => setOpen(false),
|
|
1324
|
+
* })
|
|
1325
|
+
* useOutsideClick([triggerRef, contentRef], () => setOpen(false), {
|
|
1326
|
+
* enabled: open,
|
|
1327
|
+
* layer, // clicks inside a layer stacked ABOVE this one are not "outside"
|
|
1328
|
+
* })
|
|
1329
|
+
*
|
|
1330
|
+
* `useEscapeKey(handler, { enabled })` is the one-liner for anything that
|
|
1331
|
+
* only needs Escape.
|
|
1332
|
+
*/
|
|
1333
|
+
|
|
1334
|
+
type LayerKind = 'modal' | 'popover';
|
|
1335
|
+
interface LayerHandle {
|
|
1336
|
+
/** True while no layer of ANY kind sits above this one. */
|
|
1337
|
+
isTop(): boolean;
|
|
1338
|
+
/** True while no layer of the SAME kind sits above this one. */
|
|
1339
|
+
isTopOfKind(): boolean;
|
|
1340
|
+
/**
|
|
1341
|
+
* True when `node` is inside the element of a layer stacked above this
|
|
1342
|
+
* one — a nested Select's listbox, a Combobox inside a Popover. Outside-
|
|
1343
|
+
* click handlers treat those as inside.
|
|
1344
|
+
*/
|
|
1345
|
+
containsInLayerAbove(node: Node): boolean;
|
|
1346
|
+
}
|
|
1347
|
+
interface UseLayerOptions {
|
|
1348
|
+
/** Register while true; pop when it turns false or the owner unmounts. */
|
|
1349
|
+
enabled: boolean;
|
|
1350
|
+
kind: LayerKind;
|
|
1351
|
+
/**
|
|
1352
|
+
* The surface's root element. Read lazily, so a ref that is filled in
|
|
1353
|
+
* after the layer registers (portal content) still resolves.
|
|
1354
|
+
*/
|
|
1355
|
+
elementRef?: RefObject<HTMLElement | null>;
|
|
1356
|
+
/** Called when this layer is topmost and Escape is pressed. */
|
|
1357
|
+
onEscape: (event: KeyboardEvent) => void;
|
|
1358
|
+
}
|
|
1359
|
+
/**
|
|
1360
|
+
* Register a dismiss layer for as long as `enabled` holds. `onEscape` is
|
|
1361
|
+
* read through a ref, so an inline arrow does not re-register the layer
|
|
1362
|
+
* (and does not reorder it) on every render.
|
|
1363
|
+
*/
|
|
1364
|
+
declare function useLayer(options: UseLayerOptions): LayerHandle;
|
|
1365
|
+
interface UseEscapeKeyOptions {
|
|
1366
|
+
/** Default true. */
|
|
1367
|
+
enabled?: boolean;
|
|
1368
|
+
/** Default `popover`. */
|
|
1369
|
+
kind?: LayerKind;
|
|
1370
|
+
}
|
|
1371
|
+
/**
|
|
1372
|
+
* Escape-only participant in the layer stack. Fires `onEscape` only while
|
|
1373
|
+
* this is the topmost layer; a layer that opens later takes over until it
|
|
1374
|
+
* closes.
|
|
1375
|
+
*/
|
|
1376
|
+
declare function useEscapeKey(onEscape: (event: KeyboardEvent) => void, options?: UseEscapeKeyOptions): LayerHandle;
|
|
1377
|
+
|
|
1378
|
+
/**
|
|
1379
|
+
* Anchored positioning — the ONE measure / flip / clamp routine behind every
|
|
1380
|
+
* floating surface in @lovett/ui.
|
|
1381
|
+
*
|
|
1382
|
+
* Four primitives (DropdownMenu, FilterDropdown, FolderTreePicker,
|
|
1383
|
+
* TagChipInput) each hand-rolled the same `useLayoutEffect` +
|
|
1384
|
+
* `getBoundingClientRect` + clamp + resize/scroll-listener block, with four
|
|
1385
|
+
* slightly different gaps: no flip at a viewport edge; no clamp; measuring in
|
|
1386
|
+
* a passive effect so the first paint was wrong; `top`/`bottom` only. This
|
|
1387
|
+
* module is the single implementation. DropdownMenu is rebuilt on it in the
|
|
1388
|
+
* same change; the other three keep their local copies for now (follow-up).
|
|
1389
|
+
*
|
|
1390
|
+
* Promoted per ADR-0030 Decision G (meta-ads-audit-dashboard task manager)
|
|
1391
|
+
* with the workspace app as the first consumer — DropdownMenu and Popover
|
|
1392
|
+
* position through this hook, so every menu in the app is on it. Select /
|
|
1393
|
+
* Combobox / Tooltip / ContextMenu build on it next.
|
|
1394
|
+
*
|
|
1395
|
+
* No Floating UI, no Popper (CLAUDE.md §1 allowed deps). Three pieces:
|
|
1396
|
+
* • `computeAnchoredPosition` — pure math, unit-tested without a DOM.
|
|
1397
|
+
* • `useAnchoredPosition` — measures, positions, tracks resize / scroll /
|
|
1398
|
+
* size changes. Anchor is an element (`anchorRef`) OR a virtual rect
|
|
1399
|
+
* (`anchorRect`) — ContextMenu passes the right-click point as
|
|
1400
|
+
* `{ left: e.clientX, top: e.clientY, width: 0, height: 0 }`.
|
|
1401
|
+
* • `useOutsideClick` — pointerdown outside a set of targets, aware of
|
|
1402
|
+
* layers stacked above (a nested Select's listbox is not "outside").
|
|
1403
|
+
*
|
|
1404
|
+
* Two-phase render, unchanged from the DropdownMenu it replaces: the first
|
|
1405
|
+
* paint measures the content parked at (-99999, -99999) with
|
|
1406
|
+
* `visibility: hidden`, the layout effect computes the real coordinates, and
|
|
1407
|
+
* the second paint reveals it. Components gate their entry animation on
|
|
1408
|
+
* `positioned` so `.ds-enter-pop` never plays from the parked location.
|
|
1409
|
+
*
|
|
1410
|
+
* Token discipline: the hook emits geometry only (`position: fixed` +
|
|
1411
|
+
* `left` / `top` in px). Surface colour, radius, shadow, padding and the
|
|
1412
|
+
* motion class stay with the component.
|
|
1413
|
+
*
|
|
1414
|
+
* Usage:
|
|
1415
|
+
*
|
|
1416
|
+
* const { ref, style, placement, positioned } =
|
|
1417
|
+
* useAnchoredPosition<HTMLDivElement>({
|
|
1418
|
+
* anchorRef: triggerRef,
|
|
1419
|
+
* side: 'bottom',
|
|
1420
|
+
* align: 'start',
|
|
1421
|
+
* offset: 6,
|
|
1422
|
+
* enabled: open,
|
|
1423
|
+
* })
|
|
1424
|
+
* return createPortal(
|
|
1425
|
+
* <div
|
|
1426
|
+
* ref={ref}
|
|
1427
|
+
* style={style}
|
|
1428
|
+
* data-side={placement?.side}
|
|
1429
|
+
* className={cn(positioned && 'ds-enter-pop')}
|
|
1430
|
+
* >
|
|
1431
|
+
* …
|
|
1432
|
+
* </div>,
|
|
1433
|
+
* document.body,
|
|
1434
|
+
* )
|
|
1435
|
+
*/
|
|
1436
|
+
|
|
1437
|
+
type AnchorSide = 'top' | 'bottom' | 'left' | 'right';
|
|
1438
|
+
type AnchorAlign = 'start' | 'center' | 'end';
|
|
1439
|
+
/** Viewport-relative rect. `DOMRect` satisfies it; so does a point. */
|
|
1440
|
+
interface AnchorRect {
|
|
1441
|
+
readonly left: number;
|
|
1442
|
+
readonly top: number;
|
|
1443
|
+
readonly width: number;
|
|
1444
|
+
readonly height: number;
|
|
1445
|
+
}
|
|
1446
|
+
interface AnchorSize {
|
|
1447
|
+
readonly width: number;
|
|
1448
|
+
readonly height: number;
|
|
1449
|
+
}
|
|
1450
|
+
/** The side and alignment actually used after flipping. */
|
|
1451
|
+
interface AnchorPlacement {
|
|
1452
|
+
readonly side: AnchorSide;
|
|
1453
|
+
readonly align: AnchorAlign;
|
|
1454
|
+
}
|
|
1455
|
+
interface AnchoredPositionOptions {
|
|
1456
|
+
/** Preferred side of the anchor. Default `bottom`. */
|
|
1457
|
+
side?: AnchorSide;
|
|
1458
|
+
/** Alignment along the anchor's cross axis. Default `start`. */
|
|
1459
|
+
align?: AnchorAlign;
|
|
1460
|
+
/** Gap between anchor and floating element along `side`, px. Default 6. */
|
|
1461
|
+
offset?: number;
|
|
1462
|
+
/** Shift along the alignment axis, px. Default 0. */
|
|
1463
|
+
alignOffset?: number;
|
|
1464
|
+
/**
|
|
1465
|
+
* Flip to the opposite side when the preferred side cannot fit and the
|
|
1466
|
+
* opposite side fits — or simply has more room. Default true.
|
|
1467
|
+
*/
|
|
1468
|
+
flip?: boolean;
|
|
1469
|
+
/** Keep the floating element inside the viewport, `gutter` px in. Default true. */
|
|
1470
|
+
clampToViewport?: boolean;
|
|
1471
|
+
/** Viewport inset used by both flip and clamp, px. Default 8. */
|
|
1472
|
+
gutter?: number;
|
|
1473
|
+
}
|
|
1474
|
+
interface AnchoredPosition {
|
|
1475
|
+
readonly left: number;
|
|
1476
|
+
readonly top: number;
|
|
1477
|
+
readonly placement: AnchorPlacement;
|
|
1478
|
+
}
|
|
1479
|
+
/**
|
|
1480
|
+
* Pure placement math. Given the anchor rect, the floating element's size
|
|
1481
|
+
* and the viewport size, returns fixed-position coordinates plus the
|
|
1482
|
+
* placement actually used. No DOM — this is what the tests pin.
|
|
1483
|
+
*/
|
|
1484
|
+
declare function computeAnchoredPosition(anchor: AnchorRect, floating: AnchorSize, viewport: AnchorSize, options?: AnchoredPositionOptions): AnchoredPosition;
|
|
1485
|
+
interface UseAnchoredPositionOptions extends AnchoredPositionOptions {
|
|
1486
|
+
/** Element to anchor to. Ignored while `anchorRect` is non-null. */
|
|
1487
|
+
anchorRef?: RefObject<Element | null>;
|
|
1488
|
+
/** Virtual anchor (a right-click point, a text caret). Wins over `anchorRef`. */
|
|
1489
|
+
anchorRect?: AnchorRect | null;
|
|
1490
|
+
/** Measure and track while true. Default true. */
|
|
1491
|
+
enabled?: boolean;
|
|
1492
|
+
}
|
|
1493
|
+
interface UseAnchoredPositionResult<T extends HTMLElement> {
|
|
1494
|
+
/** Attach to the floating element. */
|
|
1495
|
+
ref: (node: T | null) => void;
|
|
1496
|
+
/** The same node as a ref object — for `contains()` checks. */
|
|
1497
|
+
floatingRef: RefObject<T | null>;
|
|
1498
|
+
/** `position: fixed` + coordinates; hidden and parked off-screen until measured. */
|
|
1499
|
+
style: CSSProperties;
|
|
1500
|
+
/** Side / align actually used, or null until measured. */
|
|
1501
|
+
placement: AnchorPlacement | null;
|
|
1502
|
+
/** True once real coordinates are applied. Gate entry motion on this. */
|
|
1503
|
+
positioned: boolean;
|
|
1504
|
+
/** Re-measure now (after content you know changed size, for example). */
|
|
1505
|
+
update: () => void;
|
|
1506
|
+
}
|
|
1507
|
+
declare function useAnchoredPosition<T extends HTMLElement = HTMLElement>(options: UseAnchoredPositionOptions): UseAnchoredPositionResult<T>;
|
|
1508
|
+
type OutsideClickTarget = RefObject<Element | null> | Element | null | undefined;
|
|
1509
|
+
interface UseOutsideClickOptions {
|
|
1510
|
+
/** Default true. */
|
|
1511
|
+
enabled?: boolean;
|
|
1512
|
+
/**
|
|
1513
|
+
* This surface's dismiss layer. When given, a pointerdown inside any layer
|
|
1514
|
+
* stacked ABOVE it (a Select opened from inside a Popover) is treated as
|
|
1515
|
+
* inside, not outside.
|
|
1516
|
+
*/
|
|
1517
|
+
layer?: LayerHandle;
|
|
1518
|
+
}
|
|
1519
|
+
/**
|
|
1520
|
+
* Calls `onOutside` on a `pointerdown` whose target is inside none of
|
|
1521
|
+
* `targets`. Handler and targets are read through refs, so inline arrays
|
|
1522
|
+
* and arrows do not re-subscribe the listener.
|
|
1523
|
+
*/
|
|
1524
|
+
declare function useOutsideClick(targets: ReadonlyArray<OutsideClickTarget>, onOutside: (event: PointerEvent) => void, options?: UseOutsideClickOptions): void;
|
|
1525
|
+
|
|
1526
|
+
type Align = AnchorAlign;
|
|
1527
|
+
type Side = AnchorSide;
|
|
1191
1528
|
interface DropdownMenuProps {
|
|
1192
1529
|
/** Controlled open state. Omit for internal state. */
|
|
1193
1530
|
open?: boolean;
|
|
@@ -1196,7 +1533,7 @@ interface DropdownMenuProps {
|
|
|
1196
1533
|
defaultOpen?: boolean;
|
|
1197
1534
|
children: ReactNode;
|
|
1198
1535
|
}
|
|
1199
|
-
declare function DropdownMenu({ open: controlledOpen, onOpenChange, defaultOpen, children, }: DropdownMenuProps):
|
|
1536
|
+
declare function DropdownMenu({ open: controlledOpen, onOpenChange, defaultOpen, children, }: DropdownMenuProps): react_jsx_runtime.JSX.Element;
|
|
1200
1537
|
interface DropdownMenuTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
1201
1538
|
/** Skip the default secondary-Button styling. Useful when wrapping
|
|
1202
1539
|
* an existing Button primitive. */
|
|
@@ -1207,37 +1544,41 @@ interface DropdownMenuTriggerProps extends ButtonHTMLAttributes<HTMLButtonElemen
|
|
|
1207
1544
|
* secondary Button visual (rounded-xl + `--bg-card` fill + 1px
|
|
1208
1545
|
* `--border`). Set `unstyled` to wrap your own button shape.
|
|
1209
1546
|
*/
|
|
1210
|
-
declare
|
|
1547
|
+
declare const DropdownMenuTrigger: react.ForwardRefExoticComponent<DropdownMenuTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1211
1548
|
interface DropdownMenuContentProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
|
|
1212
1549
|
children: ReactNode;
|
|
1213
1550
|
/** Horizontal alignment relative to the trigger. Default `start`. */
|
|
1214
1551
|
align?: Align;
|
|
1215
1552
|
/** Pixel offset along the alignment axis. Default 0. */
|
|
1216
1553
|
alignOffset?: number;
|
|
1217
|
-
/**
|
|
1554
|
+
/**
|
|
1555
|
+
* Preferred side of the trigger. Default `bottom`. Flips to the opposite
|
|
1556
|
+
* side when it cannot fit (before the 2026-09-05 rebuild it was clamped
|
|
1557
|
+
* over its own trigger instead; only that no-room case differs).
|
|
1558
|
+
*/
|
|
1218
1559
|
side?: Side;
|
|
1219
1560
|
/** Pixel offset along the side axis. Default 6. */
|
|
1220
1561
|
sideOffset?: number;
|
|
1221
1562
|
}
|
|
1222
|
-
declare
|
|
1563
|
+
declare const DropdownMenuContent: react.ForwardRefExoticComponent<DropdownMenuContentProps & react.RefAttributes<HTMLDivElement>>;
|
|
1223
1564
|
interface DropdownMenuItemProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
1224
1565
|
variant?: 'default' | 'destructive';
|
|
1225
1566
|
/** Pad-left compensation so items with no leading icon align with
|
|
1226
1567
|
* items that have one. */
|
|
1227
1568
|
inset?: boolean;
|
|
1228
1569
|
}
|
|
1229
|
-
declare
|
|
1570
|
+
declare const DropdownMenuItem: react.ForwardRefExoticComponent<DropdownMenuItemProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1230
1571
|
interface DropdownMenuCheckboxItemProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {
|
|
1231
1572
|
checked?: boolean;
|
|
1232
1573
|
onCheckedChange?: (checked: boolean) => void;
|
|
1233
1574
|
}
|
|
1234
|
-
declare
|
|
1235
|
-
declare function DropdownMenuSeparator({ className, ...rest }: HTMLAttributes<HTMLDivElement>):
|
|
1575
|
+
declare const DropdownMenuCheckboxItem: react.ForwardRefExoticComponent<DropdownMenuCheckboxItemProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1576
|
+
declare function DropdownMenuSeparator({ className, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
1236
1577
|
interface DropdownMenuLabelProps extends HTMLAttributes<HTMLDivElement> {
|
|
1237
1578
|
inset?: boolean;
|
|
1238
1579
|
}
|
|
1239
|
-
declare function DropdownMenuLabel({ inset, className, ...rest }: DropdownMenuLabelProps):
|
|
1240
|
-
declare function DropdownMenuGroup({ className, ...rest }: HTMLAttributes<HTMLDivElement>):
|
|
1580
|
+
declare function DropdownMenuLabel({ inset, className, ...rest }: DropdownMenuLabelProps): react_jsx_runtime.JSX.Element;
|
|
1581
|
+
declare function DropdownMenuGroup({ className, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
1241
1582
|
|
|
1242
1583
|
/**
|
|
1243
1584
|
* DataGrid public types.
|
|
@@ -1374,7 +1715,7 @@ type EditingCell<ColumnId extends string> = {
|
|
|
1374
1715
|
};
|
|
1375
1716
|
};
|
|
1376
1717
|
|
|
1377
|
-
declare function DataGrid<Row extends DataGridRowBase, ColumnId extends string>({ rows, columns, getRowLabel, renderCell, isEditableColumn, getCellEditValue, applyCellEdit, getDrawerCellValue, canOpenDrawer, renderSummary, renderDrawerPanel, renderToolbar, onToolbarPropsChange, onOpenDrawerCell, drawerModal, drawerSize, stickySummaryFooter, stickyHeader, fillWidth, fillAvailableHeight, tableContainerClassName, onRowsChange, sort, onSortChange, }: DataGridProps<Row, ColumnId>):
|
|
1718
|
+
declare function DataGrid<Row extends DataGridRowBase, ColumnId extends string>({ rows, columns, getRowLabel, renderCell, isEditableColumn, getCellEditValue, applyCellEdit, getDrawerCellValue, canOpenDrawer, renderSummary, renderDrawerPanel, renderToolbar, onToolbarPropsChange, onOpenDrawerCell, drawerModal, drawerSize, stickySummaryFooter, stickyHeader, fillWidth, fillAvailableHeight, tableContainerClassName, onRowsChange, sort, onSortChange, }: DataGridProps<Row, ColumnId>): react_jsx_runtime.JSX.Element;
|
|
1378
1719
|
|
|
1379
1720
|
interface DataGridToolbarProps {
|
|
1380
1721
|
/** Left slot — typically a <SearchBar>. Stretches up to a comfortable
|
|
@@ -1384,19 +1725,19 @@ interface DataGridToolbarProps {
|
|
|
1384
1725
|
children?: ReactNode;
|
|
1385
1726
|
className?: string;
|
|
1386
1727
|
}
|
|
1387
|
-
declare function DataGridToolbar({ search, children, className, }: DataGridToolbarProps):
|
|
1728
|
+
declare function DataGridToolbar({ search, children, className, }: DataGridToolbarProps): react_jsx_runtime.JSX.Element;
|
|
1388
1729
|
|
|
1389
1730
|
type DataGridColumnOptionsMenuProps<ColumnId extends string> = Pick<DataGridToolbarRenderProps<ColumnId>, 'showSummaries' | 'onShowSummariesChange' | 'visibleColumns' | 'visibleColumnIds' | 'hiddenColumns' | 'toggleColumnVisibility' | 'optionsSensors' | 'onOptionColumnDragEnd' | 'optionsDndContextId'> & {
|
|
1390
1731
|
triggerLabel?: string;
|
|
1391
1732
|
};
|
|
1392
|
-
declare function DataGridColumnOptionsMenu<ColumnId extends string>({ showSummaries, onShowSummariesChange, visibleColumns, visibleColumnIds, hiddenColumns, toggleColumnVisibility, optionsSensors, onOptionColumnDragEnd, optionsDndContextId, triggerLabel, }: DataGridColumnOptionsMenuProps<ColumnId>):
|
|
1733
|
+
declare function DataGridColumnOptionsMenu<ColumnId extends string>({ showSummaries, onShowSummariesChange, visibleColumns, visibleColumnIds, hiddenColumns, toggleColumnVisibility, optionsSensors, onOptionColumnDragEnd, optionsDndContextId, triggerLabel, }: DataGridColumnOptionsMenuProps<ColumnId>): react_jsx_runtime.JSX.Element;
|
|
1393
1734
|
|
|
1394
1735
|
type DataGridDragOverlayProps<ColumnId extends string> = {
|
|
1395
1736
|
dragOverlayColumn: DataGridColumn<ColumnId> | null;
|
|
1396
1737
|
columnWidths: Record<ColumnId, number>;
|
|
1397
1738
|
dragOverlayHeight: number;
|
|
1398
1739
|
};
|
|
1399
|
-
declare function DataGridDragOverlay<ColumnId extends string>({ dragOverlayColumn, columnWidths, dragOverlayHeight, }: DataGridDragOverlayProps<ColumnId>):
|
|
1740
|
+
declare function DataGridDragOverlay<ColumnId extends string>({ dragOverlayColumn, columnWidths, dragOverlayHeight, }: DataGridDragOverlayProps<ColumnId>): react_jsx_runtime.JSX.Element | null;
|
|
1400
1741
|
type DataGridDropIndicatorProps = {
|
|
1401
1742
|
dropIndicatorLeft: number | null;
|
|
1402
1743
|
dragTableRect: {
|
|
@@ -1404,7 +1745,348 @@ type DataGridDropIndicatorProps = {
|
|
|
1404
1745
|
height: number;
|
|
1405
1746
|
} | null;
|
|
1406
1747
|
};
|
|
1407
|
-
declare function DataGridDropIndicator({ dropIndicatorLeft, dragTableRect, }: DataGridDropIndicatorProps):
|
|
1748
|
+
declare function DataGridDropIndicator({ dropIndicatorLeft, dragTableRect, }: DataGridDropIndicatorProps): react_jsx_runtime.JSX.Element | null;
|
|
1749
|
+
|
|
1750
|
+
/**
|
|
1751
|
+
* The popover surface chrome, shared with DropdownMenuContent so a menu and
|
|
1752
|
+
* a popover read as the same family. Inline rather than a stylesheet class
|
|
1753
|
+
* because the surface tokens are internal and the primitives already own
|
|
1754
|
+
* them here (Kbd, DropdownMenu follow the same pattern).
|
|
1755
|
+
*/
|
|
1756
|
+
declare const POPOVER_SURFACE_STYLE: CSSProperties;
|
|
1757
|
+
interface PopoverProps {
|
|
1758
|
+
/** Controlled open state. Omit for internal state. */
|
|
1759
|
+
open?: boolean;
|
|
1760
|
+
defaultOpen?: boolean;
|
|
1761
|
+
/** Fires whenever open transitions. */
|
|
1762
|
+
onOpenChange?: (open: boolean) => void;
|
|
1763
|
+
/**
|
|
1764
|
+
* Virtual anchor. When non-null, Content positions against this rect
|
|
1765
|
+
* instead of the Trigger — a right-click point, a caret, a cell.
|
|
1766
|
+
*/
|
|
1767
|
+
anchorRect?: AnchorRect | null;
|
|
1768
|
+
children: ReactNode;
|
|
1769
|
+
}
|
|
1770
|
+
declare function PopoverRoot({ open: controlledOpen, defaultOpen, onOpenChange, anchorRect, children, }: PopoverProps): react_jsx_runtime.JSX.Element;
|
|
1771
|
+
interface PopoverTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
1772
|
+
/**
|
|
1773
|
+
* Render the single child element as the trigger instead of a `<button>`.
|
|
1774
|
+
* The child receives the ref, click handler and ARIA attributes; the DOM
|
|
1775
|
+
* stays one element. It must be focusable and keyboard-operable on its
|
|
1776
|
+
* own (a `<button>`, an `<a href>`, or `role="button"` + `tabIndex={0}` +
|
|
1777
|
+
* Enter / Space handling): Trigger adds no role, tabIndex or key handler.
|
|
1778
|
+
*/
|
|
1779
|
+
asChild?: boolean;
|
|
1780
|
+
}
|
|
1781
|
+
interface PopoverContentProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role' | 'children'> {
|
|
1782
|
+
children: ReactNode;
|
|
1783
|
+
/** Preferred side of the anchor. Default `bottom`. Flips when it cannot fit. */
|
|
1784
|
+
side?: AnchorSide;
|
|
1785
|
+
/** Alignment along the anchor's cross axis. Default `start`. */
|
|
1786
|
+
align?: AnchorAlign;
|
|
1787
|
+
/** Gap from the anchor, px. Default 6. */
|
|
1788
|
+
offset?: number;
|
|
1789
|
+
/** Shift along the alignment axis, px. Default 0. */
|
|
1790
|
+
alignOffset?: number;
|
|
1791
|
+
/** Default true. */
|
|
1792
|
+
flip?: boolean;
|
|
1793
|
+
/** Default true. */
|
|
1794
|
+
clampToViewport?: boolean;
|
|
1795
|
+
/**
|
|
1796
|
+
* `dialog` (default) — a named, non-modal dialog; give it `aria-label` or
|
|
1797
|
+
* `aria-labelledby`. `none` — no role attribute, for content that is
|
|
1798
|
+
* itself the widget.
|
|
1799
|
+
*/
|
|
1800
|
+
role?: 'dialog' | 'none';
|
|
1801
|
+
/** Skip the surface chrome (background / border / shadow / radius / padding). */
|
|
1802
|
+
unstyled?: boolean;
|
|
1803
|
+
}
|
|
1804
|
+
declare const Popover: typeof PopoverRoot & {
|
|
1805
|
+
Trigger: react.ForwardRefExoticComponent<PopoverTriggerProps & react.RefAttributes<HTMLButtonElement>>;
|
|
1806
|
+
Content: react.ForwardRefExoticComponent<PopoverContentProps & react.RefAttributes<HTMLDivElement>>;
|
|
1807
|
+
};
|
|
1808
|
+
|
|
1809
|
+
type SelectSize = 'sm' | 'md';
|
|
1810
|
+
interface SelectOption<T extends string = string> {
|
|
1811
|
+
value: T;
|
|
1812
|
+
label: string;
|
|
1813
|
+
/** Secondary line under the label. */
|
|
1814
|
+
description?: string;
|
|
1815
|
+
/** Leading adornment — a Lucide icon, an avatar, a colour dot. */
|
|
1816
|
+
icon?: ReactNode;
|
|
1817
|
+
/** Rendered but not selectable; skipped by the arrow keys and type-ahead. */
|
|
1818
|
+
disabled?: boolean;
|
|
1819
|
+
}
|
|
1820
|
+
interface SelectProps<T extends string = string> extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value' | 'defaultValue' | 'onChange' | 'role'> {
|
|
1821
|
+
options: ReadonlyArray<SelectOption<T>>;
|
|
1822
|
+
/** Controlled value; `null` = nothing selected. Omit for internal state. */
|
|
1823
|
+
value?: T | null;
|
|
1824
|
+
defaultValue?: T | null;
|
|
1825
|
+
/** Fires when the user picks a DIFFERENT option. */
|
|
1826
|
+
onValueChange?: (value: T) => void;
|
|
1827
|
+
/** Shown while nothing is selected. Default "Select…". */
|
|
1828
|
+
placeholder?: string;
|
|
1829
|
+
/** Control height — matches `<Input inputSize>`. Default `md`. */
|
|
1830
|
+
size?: SelectSize;
|
|
1831
|
+
/** Error chrome (`is-error`) + `aria-invalid` on the trigger. A caller's own `aria-invalid` wins. */
|
|
1832
|
+
error?: boolean;
|
|
1833
|
+
/** Controlled open state. Omit for internal state. */
|
|
1834
|
+
open?: boolean;
|
|
1835
|
+
defaultOpen?: boolean;
|
|
1836
|
+
onOpenChange?: (open: boolean) => void;
|
|
1837
|
+
/** Preferred side for the listbox. Default `bottom`; flips when it cannot fit. */
|
|
1838
|
+
side?: AnchorSide;
|
|
1839
|
+
/** Alignment along the trigger's edge. Default `start`. */
|
|
1840
|
+
align?: AnchorAlign;
|
|
1841
|
+
/** Extra classes on the listbox surface. */
|
|
1842
|
+
listboxClassName?: string;
|
|
1843
|
+
}
|
|
1844
|
+
/**
|
|
1845
|
+
* The listbox popup chrome, shared with Combobox so the two lists read as
|
|
1846
|
+
* one family (Popover / DropdownMenu share `POPOVER_SURFACE_STYLE` the same
|
|
1847
|
+
* way).
|
|
1848
|
+
*/
|
|
1849
|
+
declare const LISTBOX_CLASS = "fixed z-[100] max-h-[min(60vh,20rem)] overflow-y-auto rounded-[var(--radius-lg)] p-1.5 outline-none";
|
|
1850
|
+
interface ListboxOptionProps {
|
|
1851
|
+
id: string;
|
|
1852
|
+
label: string;
|
|
1853
|
+
description?: string | undefined;
|
|
1854
|
+
icon?: ReactNode;
|
|
1855
|
+
/** Trailing count — tabular, muted. */
|
|
1856
|
+
count?: number | undefined;
|
|
1857
|
+
selected: boolean;
|
|
1858
|
+
highlighted: boolean;
|
|
1859
|
+
disabled?: boolean | undefined;
|
|
1860
|
+
onSelect: () => void;
|
|
1861
|
+
onHighlight: () => void;
|
|
1862
|
+
/** Replaces the default body (icon / label / description / count). The check mark stays. */
|
|
1863
|
+
children?: ReactNode;
|
|
1864
|
+
}
|
|
1865
|
+
/**
|
|
1866
|
+
* One row of a listbox — used by Select and Combobox. A `<button>` rather
|
|
1867
|
+
* than a `<div role="option">` so it is clickable without a keyboard handler
|
|
1868
|
+
* of its own; `tabIndex={-1}` keeps it out of the tab order (the trigger /
|
|
1869
|
+
* input owns the keyboard, per `aria-activedescendant`). Disabled rows use
|
|
1870
|
+
* `aria-disabled`, NOT the `disabled` attribute: a disabled control swallows
|
|
1871
|
+
* the mousedown the listbox prevents to keep focus on the trigger / in the
|
|
1872
|
+
* input, so clicking one would blur the Combobox and close the list.
|
|
1873
|
+
*/
|
|
1874
|
+
declare function ListboxOption({ id, label, description, icon, count, selected, highlighted, disabled, onSelect, onHighlight, children, }: ListboxOptionProps): react_jsx_runtime.JSX.Element;
|
|
1875
|
+
/**
|
|
1876
|
+
* `forwardRef` erases the component's type parameter (it is instantiated at
|
|
1877
|
+
* `string` above). This assertion restores the generic signature so
|
|
1878
|
+
* `onValueChange` narrows to the union of the option values a caller
|
|
1879
|
+
* passed; it changes nothing at runtime.
|
|
1880
|
+
*/
|
|
1881
|
+
declare const Select: <T extends string = string>(props: SelectProps<T> & RefAttributes<HTMLButtonElement>) => ReactElement | null;
|
|
1882
|
+
|
|
1883
|
+
/**
|
|
1884
|
+
* Combobox — a text input that filters a listbox; single- or multi-select.
|
|
1885
|
+
*
|
|
1886
|
+
* WAI-ARIA APG "editable combobox with list autocomplete": the `<input>` is
|
|
1887
|
+
* `role="combobox"` with `aria-autocomplete="list"`, `aria-expanded`,
|
|
1888
|
+
* `aria-controls` and `aria-activedescendant`; the popup is `role="listbox"`
|
|
1889
|
+
* (`aria-multiselectable` in multi mode) of `role="option"` rows, optionally
|
|
1890
|
+
* inside `role="group"` sections with a heading. DOM focus never leaves the
|
|
1891
|
+
* input: a mousedown in the list is prevented, so clicking an option keeps
|
|
1892
|
+
* the caret where it was.
|
|
1893
|
+
*
|
|
1894
|
+
* Filtering is client-side by default (case-insensitive substring over label
|
|
1895
|
+
* and description) and starts only once the user TYPES — opening a
|
|
1896
|
+
* single-select that already holds a value shows the whole list, not the one
|
|
1897
|
+
* row matching the selected label. Async-friendly: pass `shouldFilter={false}`
|
|
1898
|
+
* to show `options` exactly as given, read the query through
|
|
1899
|
+
* `onInputValueChange`, fetch, and flip `loading` while you wait. The
|
|
1900
|
+
* component never fetches anything itself.
|
|
1901
|
+
*
|
|
1902
|
+
* Single mode: picking an option sets it and closes; the input shows the
|
|
1903
|
+
* selected label; the label text is selected on focus so typing replaces it;
|
|
1904
|
+
* leaving the field (blur / outside click) with the text deliberately emptied
|
|
1905
|
+
* clears the value (`onValueChange(null)`), while Escape closes and reverts.
|
|
1906
|
+
* Multi mode: selected options render as chips ahead of the input; picking
|
|
1907
|
+
* toggles and keeps the list open; Backspace on an empty input removes the
|
|
1908
|
+
* last chip. Keep the selected options present in `options` (a chip whose
|
|
1909
|
+
* option has scrolled out of an async result set falls back to its raw
|
|
1910
|
+
* value as the label).
|
|
1911
|
+
*
|
|
1912
|
+
* Keyboard: ArrowDown / ArrowUp open the list and move the highlight
|
|
1913
|
+
* (disabled options are skipped, no wrap), Enter picks the highlighted
|
|
1914
|
+
* option, Escape closes (through the shared layer stack — a Combobox in a
|
|
1915
|
+
* Popover in a Modal peels one layer per keypress), Tab and blur close.
|
|
1916
|
+
* Home / End are left to the caret.
|
|
1917
|
+
*
|
|
1918
|
+
* Promoted per ADR-0030 Decision G (meta-ads-audit-dashboard task manager:
|
|
1919
|
+
* the row / card / context-menu / palette pickers are all "popover + search +
|
|
1920
|
+
* live counts", which is exactly `count` on each option). Second consumer is
|
|
1921
|
+
* the workspace app: `lenses/sem-spec/components/location-autocomplete.tsx`
|
|
1922
|
+
* hand-rolls this role, and TagChipInput carries the chip model this one
|
|
1923
|
+
* generalises.
|
|
1924
|
+
*
|
|
1925
|
+
* Token discipline: the shell is `.input-shell` (INTERNAL `--bg-input` /
|
|
1926
|
+
* `--border-input`, owned by styles.css); the listbox shares
|
|
1927
|
+
* `LISTBOX_CLASS` + `POPOVER_SURFACE_STYLE` with Select; chips are public
|
|
1928
|
+
* `--surface-overlay` on `--foreground`; counts and group headings
|
|
1929
|
+
* `--text-muted`. Geometry from `useAnchoredPosition`, motion from
|
|
1930
|
+
* `.ds-enter-pop` gated on `positioned` (prefers-reduced-motion honoured in
|
|
1931
|
+
* styles.css).
|
|
1932
|
+
*
|
|
1933
|
+
* TODO(tokens): the type / size literals here (`text-[12px]` chips,
|
|
1934
|
+
* `max-w-[12rem]`, `text-[12.5px]` and `text-[11px] tracking-[0.4px]` in
|
|
1935
|
+
* the list, `minWidth: '6rem'`) mirror dropdown-menu.tsx and sit off the
|
|
1936
|
+
* spacing scale; snap them once a type-scale token exists (review
|
|
1937
|
+
* 2026-09-05, MINOR).
|
|
1938
|
+
*
|
|
1939
|
+
* Usage:
|
|
1940
|
+
*
|
|
1941
|
+
* <Combobox
|
|
1942
|
+
* aria-label="Assignee"
|
|
1943
|
+
* placeholder="Search people…"
|
|
1944
|
+
* options={people.map((p) => ({ value: p.id, label: p.name, count: p.openTasks }))}
|
|
1945
|
+
* value={assigneeId}
|
|
1946
|
+
* onValueChange={setAssigneeId}
|
|
1947
|
+
* />
|
|
1948
|
+
*
|
|
1949
|
+
* <Combobox
|
|
1950
|
+
* multiple
|
|
1951
|
+
* aria-label="Statuses"
|
|
1952
|
+
* groups={[{ id: 'open', label: 'Open' }, { id: 'closed', label: 'Closed' }]}
|
|
1953
|
+
* options={statuses} // each with `group: 'open' | 'closed'`
|
|
1954
|
+
* value={selected}
|
|
1955
|
+
* onValueChange={setSelected}
|
|
1956
|
+
* renderOption={(o, { selected }) => <StatusRow status={o} checked={selected} />}
|
|
1957
|
+
* />
|
|
1958
|
+
*
|
|
1959
|
+
* // Async: the consumer owns the query and the fetch.
|
|
1960
|
+
* <Combobox shouldFilter={false} loading={isFetching} options={results}
|
|
1961
|
+
* inputValue={query} onInputValueChange={setQuery} … />
|
|
1962
|
+
*/
|
|
1963
|
+
|
|
1964
|
+
type ComboboxSize = 'sm' | 'md';
|
|
1965
|
+
interface ComboboxOption<T extends string = string> {
|
|
1966
|
+
value: T;
|
|
1967
|
+
label: string;
|
|
1968
|
+
/** Secondary line under the label. Searched by the default filter. */
|
|
1969
|
+
description?: string;
|
|
1970
|
+
/** Leading adornment — a Lucide icon, an avatar, a colour dot. */
|
|
1971
|
+
icon?: ReactNode;
|
|
1972
|
+
/** Rendered but not selectable; skipped by the arrow keys. */
|
|
1973
|
+
disabled?: boolean;
|
|
1974
|
+
/** Live count at the row's trailing edge (tasks per status, per assignee). */
|
|
1975
|
+
count?: number;
|
|
1976
|
+
/** Key into `groups`. Ungrouped options render first. */
|
|
1977
|
+
group?: string;
|
|
1978
|
+
}
|
|
1979
|
+
interface ComboboxGroup {
|
|
1980
|
+
id: string;
|
|
1981
|
+
label: string;
|
|
1982
|
+
}
|
|
1983
|
+
interface ComboboxOptionState {
|
|
1984
|
+
selected: boolean;
|
|
1985
|
+
highlighted: boolean;
|
|
1986
|
+
/** The query the list is currently filtered by ('' when unfiltered). */
|
|
1987
|
+
query: string;
|
|
1988
|
+
}
|
|
1989
|
+
interface ComboboxBaseProps<T extends string> {
|
|
1990
|
+
options: ReadonlyArray<ComboboxOption<T>>;
|
|
1991
|
+
/**
|
|
1992
|
+
* Group order and labels. Options whose `group` is not listed here render
|
|
1993
|
+
* in a trailing group labelled by the key; omit `groups` entirely to
|
|
1994
|
+
* derive groups from the options in order of first appearance.
|
|
1995
|
+
*/
|
|
1996
|
+
groups?: ReadonlyArray<ComboboxGroup>;
|
|
1997
|
+
/** Shows a spinner in the shell and `loadingMessage` while the list is empty. */
|
|
1998
|
+
loading?: boolean;
|
|
1999
|
+
placeholder?: string;
|
|
2000
|
+
/** Control height — matches `<Input inputSize>`. Default `md`. */
|
|
2001
|
+
size?: ComboboxSize;
|
|
2002
|
+
disabled?: boolean;
|
|
2003
|
+
/** Error chrome (`is-error`) on the shell + `aria-invalid` on the input. */
|
|
2004
|
+
error?: boolean;
|
|
2005
|
+
/** Controlled query text. Omit for internal state. */
|
|
2006
|
+
inputValue?: string;
|
|
2007
|
+
defaultInputValue?: string;
|
|
2008
|
+
onInputValueChange?: (value: string) => void;
|
|
2009
|
+
/** Filter `options` by the query on the client. Default true; false for async. */
|
|
2010
|
+
shouldFilter?: boolean;
|
|
2011
|
+
/** Custom match. Default: case-insensitive substring over label + description. */
|
|
2012
|
+
filter?: (option: ComboboxOption<T>, query: string) => boolean;
|
|
2013
|
+
/** Default "No results". */
|
|
2014
|
+
emptyMessage?: ReactNode;
|
|
2015
|
+
/** Default "Loading…". */
|
|
2016
|
+
loadingMessage?: ReactNode;
|
|
2017
|
+
/** Replaces the default row body (icon / label / description / count). The check mark stays. */
|
|
2018
|
+
renderOption?: (option: ComboboxOption<T>, state: ComboboxOptionState) => ReactNode;
|
|
2019
|
+
/** Controlled open state. Omit for internal state. */
|
|
2020
|
+
open?: boolean;
|
|
2021
|
+
onOpenChange?: (open: boolean) => void;
|
|
2022
|
+
/** Preferred side for the listbox. Default `bottom`; flips when it cannot fit. */
|
|
2023
|
+
side?: AnchorSide;
|
|
2024
|
+
/** Default `start`. */
|
|
2025
|
+
align?: AnchorAlign;
|
|
2026
|
+
/** id of the `<input>`, for `<label htmlFor>`. */
|
|
2027
|
+
id?: string;
|
|
2028
|
+
/**
|
|
2029
|
+
* Focus the input on mount. Also marks it `data-autofocus`: inside a
|
|
2030
|
+
* Popover the popover does the focusing, once its content is positioned.
|
|
2031
|
+
*/
|
|
2032
|
+
autoFocus?: boolean;
|
|
2033
|
+
'aria-label'?: string;
|
|
2034
|
+
'aria-labelledby'?: string;
|
|
2035
|
+
/** Extra classes on the `.input-shell`. */
|
|
2036
|
+
className?: string;
|
|
2037
|
+
/** Extra classes on the listbox surface. */
|
|
2038
|
+
listboxClassName?: string;
|
|
2039
|
+
}
|
|
2040
|
+
interface ComboboxSingleProps<T extends string = string> extends ComboboxBaseProps<T> {
|
|
2041
|
+
multiple?: false;
|
|
2042
|
+
/** Controlled value; `null` = nothing selected. */
|
|
2043
|
+
value?: T | null;
|
|
2044
|
+
defaultValue?: T | null;
|
|
2045
|
+
/** `null` when the user empties the field and leaves it. */
|
|
2046
|
+
onValueChange?: (value: T | null) => void;
|
|
2047
|
+
}
|
|
2048
|
+
interface ComboboxMultipleProps<T extends string = string> extends ComboboxBaseProps<T> {
|
|
2049
|
+
multiple: true;
|
|
2050
|
+
value?: ReadonlyArray<T>;
|
|
2051
|
+
defaultValue?: ReadonlyArray<T>;
|
|
2052
|
+
onValueChange?: (value: T[]) => void;
|
|
2053
|
+
}
|
|
2054
|
+
type ComboboxProps<T extends string = string> = ComboboxSingleProps<T> | ComboboxMultipleProps<T>;
|
|
2055
|
+
/**
|
|
2056
|
+
* `forwardRef` erases the component's type parameter (it is instantiated at
|
|
2057
|
+
* `string` above). This assertion restores the generic signature so
|
|
2058
|
+
* `onValueChange` narrows to the union of the option values a caller
|
|
2059
|
+
* passed; it changes nothing at runtime.
|
|
2060
|
+
*/
|
|
2061
|
+
declare const Combobox: <T extends string = string>(props: ComboboxProps<T> & RefAttributes<HTMLInputElement>) => ReactElement | null;
|
|
2062
|
+
|
|
2063
|
+
interface TooltipProps {
|
|
2064
|
+
/** The tip's content. Nothing renders (children pass through untouched) when null. */
|
|
2065
|
+
content: ReactNode;
|
|
2066
|
+
/** Exactly one element — it becomes the trigger. */
|
|
2067
|
+
children: ReactElement<TooltipTriggerProps>;
|
|
2068
|
+
/** Default `top`. Flips when it cannot fit. */
|
|
2069
|
+
side?: AnchorSide;
|
|
2070
|
+
/** Default `center`. */
|
|
2071
|
+
align?: AnchorAlign;
|
|
2072
|
+
/** Gap from the trigger, px. Default 6. */
|
|
2073
|
+
offset?: number;
|
|
2074
|
+
/** Hover-open delay, ms. Default 300. Focus opens immediately. */
|
|
2075
|
+
openDelay?: number;
|
|
2076
|
+
/** Close delay, ms. Default 0. */
|
|
2077
|
+
closeDelay?: number;
|
|
2078
|
+
/** Controlled open state. Omit for internal state. */
|
|
2079
|
+
open?: boolean;
|
|
2080
|
+
defaultOpen?: boolean;
|
|
2081
|
+
onOpenChange?: (open: boolean) => void;
|
|
2082
|
+
/** Extra classes on the tip surface. */
|
|
2083
|
+
className?: string;
|
|
2084
|
+
}
|
|
2085
|
+
/** What the cloned trigger element must accept. */
|
|
2086
|
+
type TooltipTriggerProps = HTMLAttributes<HTMLElement> & {
|
|
2087
|
+
ref?: Ref<HTMLElement>;
|
|
2088
|
+
};
|
|
2089
|
+
declare function Tooltip({ content, children, side, align, offset, openDelay, closeDelay, open: openProp, defaultOpen, onOpenChange, className, }: TooltipProps): react_jsx_runtime.JSX.Element;
|
|
1408
2090
|
|
|
1409
2091
|
interface DropdownButtonItem {
|
|
1410
2092
|
/** Stable id for keying. If omitted, the index is used (avoid for
|
|
@@ -1460,7 +2142,7 @@ interface DropdownButtonProps {
|
|
|
1460
2142
|
* an engaged filter. Pair with `activeId` for filter-chip use. */
|
|
1461
2143
|
active?: boolean;
|
|
1462
2144
|
}
|
|
1463
|
-
declare function DropdownButton({ label, variant, size, leadingIcon, trailingIcon, items, disabled, loading, className, align, side, sideOffset, menuWidth, triggerAriaLabel, activeId, active, }: DropdownButtonProps):
|
|
2145
|
+
declare function DropdownButton({ label, variant, size, leadingIcon, trailingIcon, items, disabled, loading, className, align, side, sideOffset, menuWidth, triggerAriaLabel, activeId, active, }: DropdownButtonProps): react_jsx_runtime.JSX.Element;
|
|
1464
2146
|
|
|
1465
2147
|
interface AccordionProps {
|
|
1466
2148
|
/** Ids of the currently-open sections. */
|
|
@@ -1470,7 +2152,7 @@ interface AccordionProps {
|
|
|
1470
2152
|
children: ReactNode;
|
|
1471
2153
|
className?: string;
|
|
1472
2154
|
}
|
|
1473
|
-
declare function Accordion({ openIds, onToggle, children, className }: AccordionProps):
|
|
2155
|
+
declare function Accordion({ openIds, onToggle, children, className }: AccordionProps): react_jsx_runtime.JSX.Element;
|
|
1474
2156
|
interface AccordionSectionProps {
|
|
1475
2157
|
/** Stable id — matched against the Accordion's `openIds`. */
|
|
1476
2158
|
id: string;
|
|
@@ -1484,7 +2166,7 @@ interface AccordionSectionProps {
|
|
|
1484
2166
|
complete?: boolean;
|
|
1485
2167
|
children: ReactNode;
|
|
1486
2168
|
}
|
|
1487
|
-
declare function AccordionSection({ id, title, summary, badge, complete, children, }: AccordionSectionProps):
|
|
2169
|
+
declare function AccordionSection({ id, title, summary, badge, complete, children, }: AccordionSectionProps): react_jsx_runtime.JSX.Element;
|
|
1488
2170
|
declare const AccordionCompound: typeof Accordion & {
|
|
1489
2171
|
Section: typeof AccordionSection;
|
|
1490
2172
|
};
|
|
@@ -1526,7 +2208,7 @@ interface MenuButtonProps {
|
|
|
1526
2208
|
/** aria-label for the trigger when the visible label is ambiguous. */
|
|
1527
2209
|
triggerAriaLabel?: string;
|
|
1528
2210
|
}
|
|
1529
|
-
declare function MenuButton({ label, items, leadingIcon, disabled, align, menuWidth, className, triggerAriaLabel, }: MenuButtonProps):
|
|
2211
|
+
declare function MenuButton({ label, items, leadingIcon, disabled, align, menuWidth, className, triggerAriaLabel, }: MenuButtonProps): react_jsx_runtime.JSX.Element;
|
|
1530
2212
|
|
|
1531
2213
|
/**
|
|
1532
2214
|
* CopyField — an input/output field with a copy button pinned to the
|
|
@@ -1568,7 +2250,7 @@ interface CopyFieldProps {
|
|
|
1568
2250
|
copyToastMessage?: string;
|
|
1569
2251
|
className?: string;
|
|
1570
2252
|
}
|
|
1571
|
-
declare function CopyField({ value, onChange, multiline, rows, placeholder, readOnly, label, hideLabel, id, copyToastMessage, className, }: CopyFieldProps):
|
|
2253
|
+
declare function CopyField({ value, onChange, multiline, rows, placeholder, readOnly, label, hideLabel, id, copyToastMessage, className, }: CopyFieldProps): react_jsx_runtime.JSX.Element;
|
|
1572
2254
|
|
|
1573
2255
|
/**
|
|
1574
2256
|
* TagChipInput — type-to-create chips with autocomplete.
|
|
@@ -1611,7 +2293,7 @@ interface TagChipInputProps {
|
|
|
1611
2293
|
error?: boolean;
|
|
1612
2294
|
className?: string;
|
|
1613
2295
|
}
|
|
1614
|
-
declare function TagChipInput({ value, onChange, suggestions, placeholder, max, maxLength, disabled, id, error, className, }: TagChipInputProps):
|
|
2296
|
+
declare function TagChipInput({ value, onChange, suggestions, placeholder, max, maxLength, disabled, id, error, className, }: TagChipInputProps): react_jsx_runtime.JSX.Element;
|
|
1615
2297
|
|
|
1616
2298
|
/**
|
|
1617
2299
|
* FolderTreePicker — dropdown picker for a nestable folder tree.
|
|
@@ -1664,7 +2346,7 @@ interface FolderTreePickerProps {
|
|
|
1664
2346
|
/** Apply error styling to the trigger. */
|
|
1665
2347
|
error?: boolean;
|
|
1666
2348
|
}
|
|
1667
|
-
declare function FolderTreePicker({ folders, value, onChange, onCreateFolder, placeholder, disabled, id, className, error, }: FolderTreePickerProps):
|
|
2349
|
+
declare function FolderTreePicker({ folders, value, onChange, onCreateFolder, placeholder, disabled, id, className, error, }: FolderTreePickerProps): react_jsx_runtime.JSX.Element;
|
|
1668
2350
|
|
|
1669
2351
|
interface HeroFormCardProps extends Omit<FormHTMLAttributes<HTMLFormElement>, 'title' | 'onSubmit'> {
|
|
1670
2352
|
/** Small accent text above the title, e.g. "Brand · Research". */
|
|
@@ -1704,7 +2386,7 @@ interface HeroFormCardSectionProps extends Omit<HTMLAttributes<HTMLElement>, 'ti
|
|
|
1704
2386
|
trailing?: ReactNode;
|
|
1705
2387
|
children: ReactNode;
|
|
1706
2388
|
}
|
|
1707
|
-
declare function Section({ title, icon, description, trailing, children, className, ...rest }: HeroFormCardSectionProps):
|
|
2389
|
+
declare function Section({ title, icon, description, trailing, children, className, ...rest }: HeroFormCardSectionProps): react_jsx_runtime.JSX.Element;
|
|
1708
2390
|
interface HeroFormCardFieldProps {
|
|
1709
2391
|
/** Visible field label. */
|
|
1710
2392
|
label: ReactNode;
|
|
@@ -1719,8 +2401,8 @@ interface HeroFormCardFieldProps {
|
|
|
1719
2401
|
children: ReactNode;
|
|
1720
2402
|
className?: string;
|
|
1721
2403
|
}
|
|
1722
|
-
declare function Field({ label, htmlFor, required, optional, error, hint, children, className, }: HeroFormCardFieldProps):
|
|
1723
|
-
declare function FieldRow({ children, className, ...rest }: HTMLAttributes<HTMLDivElement>):
|
|
2404
|
+
declare function Field({ label, htmlFor, required, optional, error, hint, children, className, }: HeroFormCardFieldProps): react_jsx_runtime.JSX.Element;
|
|
2405
|
+
declare function FieldRow({ children, className, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
1724
2406
|
interface HeroFormCardBannerProps {
|
|
1725
2407
|
/** Optional leading icon. */
|
|
1726
2408
|
icon?: ReactNode;
|
|
@@ -1730,7 +2412,7 @@ interface HeroFormCardBannerProps {
|
|
|
1730
2412
|
tone?: 'info' | 'accent' | 'success' | 'warning' | 'destructive';
|
|
1731
2413
|
className?: string;
|
|
1732
2414
|
}
|
|
1733
|
-
declare function Banner({ icon, children, tone, className, }: HeroFormCardBannerProps):
|
|
2415
|
+
declare function Banner({ icon, children, tone, className, }: HeroFormCardBannerProps): react_jsx_runtime.JSX.Element;
|
|
1734
2416
|
interface HeroFormCardAdvancedProps {
|
|
1735
2417
|
summary?: ReactNode;
|
|
1736
2418
|
/** Optional icon node next to the summary. */
|
|
@@ -1739,8 +2421,8 @@ interface HeroFormCardAdvancedProps {
|
|
|
1739
2421
|
children: ReactNode;
|
|
1740
2422
|
className?: string;
|
|
1741
2423
|
}
|
|
1742
|
-
declare function Advanced({ summary, icon, defaultOpen, children, className, }: HeroFormCardAdvancedProps):
|
|
1743
|
-
declare function Footer({ children, className, ...rest }: HTMLAttributes<HTMLDivElement>):
|
|
2424
|
+
declare function Advanced({ summary, icon, defaultOpen, children, className, }: HeroFormCardAdvancedProps): react_jsx_runtime.JSX.Element;
|
|
2425
|
+
declare function Footer({ children, className, ...rest }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
1744
2426
|
declare const HeroFormCardCompound: react.ForwardRefExoticComponent<HeroFormCardProps & react.RefAttributes<HTMLFormElement>> & {
|
|
1745
2427
|
Section: typeof Section;
|
|
1746
2428
|
Field: typeof Field;
|
|
@@ -1770,7 +2452,7 @@ interface RangeSliderProps {
|
|
|
1770
2452
|
disabled?: boolean;
|
|
1771
2453
|
className?: string;
|
|
1772
2454
|
}
|
|
1773
|
-
declare function RangeSlider({ min, max, value, onChange, step, label, formatValue, id, disabled, className, }: RangeSliderProps):
|
|
2455
|
+
declare function RangeSlider({ min, max, value, onChange, step, label, formatValue, id, disabled, className, }: RangeSliderProps): react_jsx_runtime.JSX.Element;
|
|
1774
2456
|
|
|
1775
2457
|
interface SegmentedPillItem<Id extends string = string> {
|
|
1776
2458
|
id: Id;
|
|
@@ -1794,7 +2476,7 @@ interface SegmentedPillProps<Id extends string = string> {
|
|
|
1794
2476
|
stretch?: boolean;
|
|
1795
2477
|
className?: string;
|
|
1796
2478
|
}
|
|
1797
|
-
declare function SegmentedPill<Id extends string = string>({ items, value, onChange, ariaLabel, size, stretch, className, }: SegmentedPillProps<Id>):
|
|
2479
|
+
declare function SegmentedPill<Id extends string = string>({ items, value, onChange, ariaLabel, size, stretch, className, }: SegmentedPillProps<Id>): react_jsx_runtime.JSX.Element;
|
|
1798
2480
|
|
|
1799
2481
|
interface ShellProps extends HTMLAttributes<HTMLDivElement> {
|
|
1800
2482
|
/** Max-width for the auto-centered page-level wrapper, in pixels.
|
|
@@ -1826,7 +2508,7 @@ interface ShellTrayHeaderProps extends Omit<HTMLAttributes<HTMLElement>, 'title'
|
|
|
1826
2508
|
/** Tighter padding for dense layouts. */
|
|
1827
2509
|
compact?: boolean;
|
|
1828
2510
|
}
|
|
1829
|
-
declare function TrayHeader({ title, meta, index, description, compact, className, style, ...rest }: ShellTrayHeaderProps):
|
|
2511
|
+
declare function TrayHeader({ title, meta, index, description, compact, className, style, ...rest }: ShellTrayHeaderProps): react_jsx_runtime.JSX.Element;
|
|
1830
2512
|
interface ShellTrayBodyProps extends HTMLAttributes<HTMLDivElement> {
|
|
1831
2513
|
/** Vertical gap between children. Default `form` (16px). `grid`
|
|
1832
2514
|
* (14px) is for tighter sub-card grids. `flush` (0) lets the
|
|
@@ -1835,7 +2517,7 @@ interface ShellTrayBodyProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
1835
2517
|
/** Tighter padding for dense layouts. */
|
|
1836
2518
|
compact?: boolean;
|
|
1837
2519
|
}
|
|
1838
|
-
declare function TrayBody({ spacing, compact, className, style, children, ...rest }: ShellTrayBodyProps):
|
|
2520
|
+
declare function TrayBody({ spacing, compact, className, style, children, ...rest }: ShellTrayBodyProps): react_jsx_runtime.JSX.Element;
|
|
1839
2521
|
interface ShellTrayFooterProps extends HTMLAttributes<HTMLDivElement> {
|
|
1840
2522
|
/** Tighter padding for dense layouts. */
|
|
1841
2523
|
compact?: boolean;
|
|
@@ -1846,12 +2528,12 @@ interface ShellTrayFooterProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
1846
2528
|
* the right edge via `margin-left: auto`. */
|
|
1847
2529
|
right?: ReactNode;
|
|
1848
2530
|
}
|
|
1849
|
-
declare function TrayFooter({ compact, left, right, className, style, children, ...rest }: ShellTrayFooterProps):
|
|
2531
|
+
declare function TrayFooter({ compact, left, right, className, style, children, ...rest }: ShellTrayFooterProps): react_jsx_runtime.JSX.Element;
|
|
1850
2532
|
interface ShellSubCardProps extends HTMLAttributes<HTMLDivElement> {
|
|
1851
2533
|
/** Optional header content rendered above the body. */
|
|
1852
2534
|
header?: ReactNode;
|
|
1853
2535
|
}
|
|
1854
|
-
declare function SubCard({ header, className, style, children, ...rest }: ShellSubCardProps):
|
|
2536
|
+
declare function SubCard({ header, className, style, children, ...rest }: ShellSubCardProps): react_jsx_runtime.JSX.Element;
|
|
1855
2537
|
/** Value-text tone for <ShellStat>. Semantic tones map to the public
|
|
1856
2538
|
* status tokens — handy for traffic-light KPIs (e.g. competition). */
|
|
1857
2539
|
type ShellStatTone = 'default' | 'accent' | 'success' | 'warning' | 'destructive';
|
|
@@ -1868,7 +2550,7 @@ interface ShellStatProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
|
1868
2550
|
* color (`success` / `warning` / `destructive`). */
|
|
1869
2551
|
valueTone?: ShellStatTone;
|
|
1870
2552
|
}
|
|
1871
|
-
declare function ShellStat({ label, value, icon, hint, valueTone, className, ...rest }: ShellStatProps):
|
|
2553
|
+
declare function ShellStat({ label, value, icon, hint, valueTone, className, ...rest }: ShellStatProps): react_jsx_runtime.JSX.Element;
|
|
1872
2554
|
type ShellComponent = typeof ShellRoot & {
|
|
1873
2555
|
Tray: typeof Tray;
|
|
1874
2556
|
TrayHeader: typeof TrayHeader;
|
|
@@ -1901,7 +2583,7 @@ interface FolderCardProps {
|
|
|
1901
2583
|
menuSlot?: ReactNode;
|
|
1902
2584
|
className?: string;
|
|
1903
2585
|
}
|
|
1904
|
-
declare function FolderCard({ name, colorKey, assetCount, folderCount, selected, selectable, onOpen, onSelect, menuSlot, className, }: FolderCardProps):
|
|
2586
|
+
declare function FolderCard({ name, colorKey, assetCount, folderCount, selected, selectable, onOpen, onSelect, menuSlot, className, }: FolderCardProps): react_jsx_runtime.JSX.Element;
|
|
1905
2587
|
|
|
1906
2588
|
interface BulkActionBarProps {
|
|
1907
2589
|
/** Selection count shown in the accent badge. */
|
|
@@ -1913,7 +2595,7 @@ interface BulkActionBarProps {
|
|
|
1913
2595
|
children: ReactNode;
|
|
1914
2596
|
onClear: () => void;
|
|
1915
2597
|
}
|
|
1916
|
-
declare function BulkActionBar({ count, summary, children, onClear, }: BulkActionBarProps):
|
|
2598
|
+
declare function BulkActionBar({ count, summary, children, onClear, }: BulkActionBarProps): react_jsx_runtime.JSX.Element;
|
|
1917
2599
|
|
|
1918
2600
|
/**
|
|
1919
2601
|
* FileUploadButton — paperclip trigger that opens a native file picker.
|
|
@@ -1927,7 +2609,7 @@ interface FileUploadButtonProps {
|
|
|
1927
2609
|
fileCount?: number;
|
|
1928
2610
|
maxFiles?: number;
|
|
1929
2611
|
}
|
|
1930
|
-
declare function FileUploadButton({ onFilesSelected, disabled, fileCount, maxFiles, }: FileUploadButtonProps):
|
|
2612
|
+
declare function FileUploadButton({ onFilesSelected, disabled, fileCount, maxFiles, }: FileUploadButtonProps): react_jsx_runtime.JSX.Element;
|
|
1931
2613
|
|
|
1932
2614
|
interface FileDropZoneProps {
|
|
1933
2615
|
children: ReactNode;
|
|
@@ -1935,7 +2617,7 @@ interface FileDropZoneProps {
|
|
|
1935
2617
|
disabled?: boolean;
|
|
1936
2618
|
className?: string;
|
|
1937
2619
|
}
|
|
1938
|
-
declare function FileDropZone({ children, onFilesDropped, disabled, className, }: FileDropZoneProps):
|
|
2620
|
+
declare function FileDropZone({ children, onFilesDropped, disabled, className, }: FileDropZoneProps): react_jsx_runtime.JSX.Element;
|
|
1939
2621
|
|
|
1940
2622
|
/**
|
|
1941
2623
|
* useFileUpload — stateful file-selection, validation, text-extraction, and
|
|
@@ -2008,13 +2690,13 @@ interface FilePreviewGridProps {
|
|
|
2008
2690
|
onRemove: (id: string) => void;
|
|
2009
2691
|
className?: string;
|
|
2010
2692
|
}
|
|
2011
|
-
declare function FilePreviewGrid({ files, onRemove, className }: FilePreviewGridProps):
|
|
2693
|
+
declare function FilePreviewGrid({ files, onRemove, className }: FilePreviewGridProps): react_jsx_runtime.JSX.Element | null;
|
|
2012
2694
|
|
|
2013
2695
|
interface FilePreviewItemProps {
|
|
2014
2696
|
pendingFile: PendingFile;
|
|
2015
2697
|
onRemove: (id: string) => void;
|
|
2016
2698
|
}
|
|
2017
|
-
declare function FilePreviewItem({ pendingFile, onRemove }: FilePreviewItemProps):
|
|
2699
|
+
declare function FilePreviewItem({ pendingFile, onRemove }: FilePreviewItemProps): react_jsx_runtime.JSX.Element;
|
|
2018
2700
|
|
|
2019
2701
|
/**
|
|
2020
2702
|
* FileThumbnail — icon-based preview tile for non-image files; renders the
|
|
@@ -2034,7 +2716,7 @@ interface FileThumbnailProps {
|
|
|
2034
2716
|
previewUrl?: string;
|
|
2035
2717
|
className?: string;
|
|
2036
2718
|
}
|
|
2037
|
-
declare function FileThumbnail({ file, previewUrl, className }: FileThumbnailProps):
|
|
2719
|
+
declare function FileThumbnail({ file, previewUrl, className }: FileThumbnailProps): react_jsx_runtime.JSX.Element;
|
|
2038
2720
|
|
|
2039
2721
|
interface CodeBlockProps {
|
|
2040
2722
|
/** Lowercased language identifier, e.g. "typescript" or "json". */
|
|
@@ -2042,7 +2724,7 @@ interface CodeBlockProps {
|
|
|
2042
2724
|
/** Raw source text. */
|
|
2043
2725
|
children: string;
|
|
2044
2726
|
}
|
|
2045
|
-
declare function CodeBlock({ language, children }: CodeBlockProps):
|
|
2727
|
+
declare function CodeBlock({ language, children }: CodeBlockProps): react_jsx_runtime.JSX.Element;
|
|
2046
2728
|
/**
|
|
2047
2729
|
* MarkdownCode — react-markdown code element adapter.
|
|
2048
2730
|
*
|
|
@@ -2050,7 +2732,7 @@ declare function CodeBlock({ language, children }: CodeBlockProps): react.JSX.El
|
|
|
2050
2732
|
* Fenced code (triple backtick, className="language-xxx") delegates to
|
|
2051
2733
|
* CodeBlock for syntax highlighting + copy button.
|
|
2052
2734
|
*/
|
|
2053
|
-
declare function MarkdownCode({ className, children }: HTMLAttributes<HTMLElement>):
|
|
2735
|
+
declare function MarkdownCode({ className, children }: HTMLAttributes<HTMLElement>): react_jsx_runtime.JSX.Element;
|
|
2054
2736
|
|
|
2055
2737
|
interface MarkdownRendererProps {
|
|
2056
2738
|
/** Raw markdown string to render. */
|
|
@@ -2063,7 +2745,7 @@ interface MarkdownRendererProps {
|
|
|
2063
2745
|
* Renders headings, lists, code (via CodeBlock), tables, task lists,
|
|
2064
2746
|
* strikethrough, blockquotes, and links with workspace token styling.
|
|
2065
2747
|
*/
|
|
2066
|
-
declare function MarkdownRenderer({ children, className }: MarkdownRendererProps):
|
|
2748
|
+
declare function MarkdownRenderer({ children, className }: MarkdownRendererProps): react_jsx_runtime.JSX.Element;
|
|
2067
2749
|
|
|
2068
2750
|
interface ResizableHandleProps {
|
|
2069
2751
|
/** Which edge of the parent the handle decorates. */
|
|
@@ -2088,12 +2770,12 @@ interface ResizableHandleProps {
|
|
|
2088
2770
|
disabled?: boolean;
|
|
2089
2771
|
className?: string;
|
|
2090
2772
|
}
|
|
2091
|
-
declare function ResizableHandle({ side, value, onChange, onCommit, min, max, defaultValue, step, 'aria-label': ariaLabel, disabled, className, }: ResizableHandleProps):
|
|
2773
|
+
declare function ResizableHandle({ side, value, onChange, onCommit, min, max, defaultValue, step, 'aria-label': ariaLabel, disabled, className, }: ResizableHandleProps): react_jsx_runtime.JSX.Element;
|
|
2092
2774
|
interface ResizablePaneProps extends ResizableHandleProps {
|
|
2093
2775
|
children: ReactNode;
|
|
2094
2776
|
paneClassName?: string;
|
|
2095
2777
|
}
|
|
2096
|
-
declare function ResizablePane({ children, paneClassName, ...handleProps }: ResizablePaneProps):
|
|
2778
|
+
declare function ResizablePane({ children, paneClassName, ...handleProps }: ResizablePaneProps): react_jsx_runtime.JSX.Element;
|
|
2097
2779
|
|
|
2098
2780
|
interface KbdProps {
|
|
2099
2781
|
/** Child text — typically a single key glyph or short string. */
|
|
@@ -2101,7 +2783,7 @@ interface KbdProps {
|
|
|
2101
2783
|
/** Optional size — defaults to 'md'. */
|
|
2102
2784
|
size?: 'sm' | 'md';
|
|
2103
2785
|
}
|
|
2104
|
-
declare function Kbd({ children, size }: KbdProps):
|
|
2786
|
+
declare function Kbd({ children, size }: KbdProps): react_jsx_runtime.JSX.Element;
|
|
2105
2787
|
|
|
2106
2788
|
interface FrameStackProps extends HTMLAttributes<HTMLDivElement> {
|
|
2107
2789
|
/** Visual gap between child cards. Defaults to 10 px to match the
|
|
@@ -2154,7 +2836,7 @@ interface CalculatorShellProps {
|
|
|
2154
2836
|
* CalculatorShell — the layout primitive. See file-level JSDoc for the
|
|
2155
2837
|
* locked layout / interaction / token rules.
|
|
2156
2838
|
*/
|
|
2157
|
-
declare function CalculatorShell({ title, subtitle, inputs, result, formula, secondaryStats, onReset, copyValue, shareUrl, }: CalculatorShellProps):
|
|
2839
|
+
declare function CalculatorShell({ title, subtitle, inputs, result, formula, secondaryStats, onReset, copyValue, shareUrl, }: CalculatorShellProps): react_jsx_runtime.JSX.Element;
|
|
2158
2840
|
|
|
2159
2841
|
type CalcLayout = 'shell' | 'open';
|
|
2160
2842
|
/**
|
|
@@ -2201,11 +2883,11 @@ interface CalculatorShellV2Props {
|
|
|
2201
2883
|
copyReport?: string | (() => string);
|
|
2202
2884
|
/** STUBBED (D9) — typed, not read this ADR. */
|
|
2203
2885
|
prefill?: CalcPrefill;
|
|
2204
|
-
/** "vs. benchmark" rail.
|
|
2205
|
-
*
|
|
2886
|
+
/** "vs. benchmark" rail. Rendered only when provided (the Amendment 1 E
|
|
2887
|
+
* placeholder is retired — ADR-145 amendment). */
|
|
2206
2888
|
benchmarkSlot?: ReactNode;
|
|
2207
2889
|
}
|
|
2208
|
-
declare function CalculatorShellV2({ eyebrow, title, icon, layout, inputs, result, footerNote, actions, assumptions, copyReport, benchmarkSlot, }: CalculatorShellV2Props):
|
|
2890
|
+
declare function CalculatorShellV2({ eyebrow, title, icon, layout, inputs, result, footerNote, actions, assumptions, copyReport, benchmarkSlot, }: CalculatorShellV2Props): react_jsx_runtime.JSX.Element;
|
|
2209
2891
|
|
|
2210
2892
|
interface StatRowStep {
|
|
2211
2893
|
/** Lucide glyph (~16px). Inherits the dark-frame label colour. */
|
|
@@ -2217,12 +2899,18 @@ interface StatRowStep {
|
|
|
2217
2899
|
/** The single pivotal tile — rendered in `--accent` instead of
|
|
2218
2900
|
* `--brand-ink`. At most one step should set this. */
|
|
2219
2901
|
pivotal?: boolean;
|
|
2902
|
+
/** What a copyable tile writes to the clipboard. Defaults to `value`;
|
|
2903
|
+
* set it when the display is rounded (e.g. "833.3K") and the exact
|
|
2904
|
+
* figure is what the user wants. */
|
|
2905
|
+
copyValue?: string;
|
|
2220
2906
|
}
|
|
2221
2907
|
interface StatRowProps {
|
|
2222
2908
|
steps: StatRowStep[];
|
|
2909
|
+
/** Make every tile's figure a copy-to-clipboard button. */
|
|
2910
|
+
copyable?: boolean;
|
|
2223
2911
|
className?: string;
|
|
2224
2912
|
}
|
|
2225
|
-
declare function StatRow({ steps, className }: StatRowProps):
|
|
2913
|
+
declare function StatRow({ steps, copyable, className }: StatRowProps): react_jsx_runtime.JSX.Element;
|
|
2226
2914
|
|
|
2227
2915
|
/**
|
|
2228
2916
|
* Slider — single-value numeric slider (ADR-076 D8).
|
|
@@ -2251,7 +2939,7 @@ interface SliderProps {
|
|
|
2251
2939
|
disabled?: boolean;
|
|
2252
2940
|
className?: string;
|
|
2253
2941
|
}
|
|
2254
|
-
declare function Slider({ value, min, max, step, onChange, 'aria-label': ariaLabel, disabled, className, }: SliderProps):
|
|
2942
|
+
declare function Slider({ value, min, max, step, onChange, 'aria-label': ariaLabel, disabled, className, }: SliderProps): react_jsx_runtime.JSX.Element;
|
|
2255
2943
|
|
|
2256
2944
|
/**
|
|
2257
2945
|
* Number-formatting helpers — small set of pure, zero-dep utilities
|
|
@@ -2361,7 +3049,7 @@ interface PageHeroProps {
|
|
|
2361
3049
|
leading?: ReactNode;
|
|
2362
3050
|
className?: string;
|
|
2363
3051
|
}
|
|
2364
|
-
declare function PageHero({ eyebrow, title, subtitle, actions, leading, className, }: PageHeroProps):
|
|
3052
|
+
declare function PageHero({ eyebrow, title, subtitle, actions, leading, className, }: PageHeroProps): react_jsx_runtime.JSX.Element;
|
|
2365
3053
|
|
|
2366
3054
|
interface SearchBarProps {
|
|
2367
3055
|
value: string;
|
|
@@ -2370,7 +3058,7 @@ interface SearchBarProps {
|
|
|
2370
3058
|
width?: number | string;
|
|
2371
3059
|
className?: string;
|
|
2372
3060
|
}
|
|
2373
|
-
declare function SearchBar({ value, onChange, placeholder, width, className, }: SearchBarProps):
|
|
3061
|
+
declare function SearchBar({ value, onChange, placeholder, width, className, }: SearchBarProps): react_jsx_runtime.JSX.Element;
|
|
2374
3062
|
|
|
2375
3063
|
interface FilterBarProps {
|
|
2376
3064
|
/**
|
|
@@ -2384,7 +3072,7 @@ interface FilterBarProps {
|
|
|
2384
3072
|
className?: string;
|
|
2385
3073
|
children: ReactNode;
|
|
2386
3074
|
}
|
|
2387
|
-
declare function FilterBarRoot({ variant, 'aria-label': ariaLabel, className, children, }: FilterBarProps):
|
|
3075
|
+
declare function FilterBarRoot({ variant, 'aria-label': ariaLabel, className, children, }: FilterBarProps): react_jsx_runtime.JSX.Element;
|
|
2388
3076
|
interface FilterBarSearchProps {
|
|
2389
3077
|
value: string;
|
|
2390
3078
|
onChange: (next: string) => void;
|
|
@@ -2395,15 +3083,15 @@ interface FilterBarSearchProps {
|
|
|
2395
3083
|
className?: string;
|
|
2396
3084
|
}
|
|
2397
3085
|
/** Standardized search field: small `Input` with a leading magnifier. */
|
|
2398
|
-
declare function FilterBarSearch({ value, onChange, placeholder, 'aria-label': ariaLabel, className, }: FilterBarSearchProps):
|
|
3086
|
+
declare function FilterBarSearch({ value, onChange, placeholder, 'aria-label': ariaLabel, className, }: FilterBarSearchProps): react_jsx_runtime.JSX.Element;
|
|
2399
3087
|
/** Flexible spacer — everything after it is pushed to the right edge. */
|
|
2400
|
-
declare function FilterBarSpacer():
|
|
3088
|
+
declare function FilterBarSpacer(): react_jsx_runtime.JSX.Element;
|
|
2401
3089
|
interface FilterBarCountProps {
|
|
2402
3090
|
shown: number;
|
|
2403
3091
|
total: number;
|
|
2404
3092
|
}
|
|
2405
3093
|
/** Right-aligned "{shown} of {total}" result count, tabular-nums. */
|
|
2406
|
-
declare function FilterBarCount({ shown, total }: FilterBarCountProps):
|
|
3094
|
+
declare function FilterBarCount({ shown, total }: FilterBarCountProps): react_jsx_runtime.JSX.Element;
|
|
2407
3095
|
declare const FilterBar: typeof FilterBarRoot & {
|
|
2408
3096
|
Search: typeof FilterBarSearch;
|
|
2409
3097
|
Spacer: typeof FilterBarSpacer;
|
|
@@ -2431,7 +3119,7 @@ interface FilterDropdownProps<T extends string = string> {
|
|
|
2431
3119
|
className?: string;
|
|
2432
3120
|
align?: 'left' | 'right';
|
|
2433
3121
|
}
|
|
2434
|
-
declare function FilterDropdown<T extends string = string>({ label, value, onChange, options, neutralValue, triggerValueLabel, className, align, }: FilterDropdownProps<T>):
|
|
3122
|
+
declare function FilterDropdown<T extends string = string>({ label, value, onChange, options, neutralValue, triggerValueLabel, className, align, }: FilterDropdownProps<T>): react_jsx_runtime.JSX.Element;
|
|
2435
3123
|
|
|
2436
3124
|
interface DeviceFrameProps {
|
|
2437
3125
|
/** Which device bezel to render. */
|
|
@@ -2447,7 +3135,7 @@ interface DeviceFrameProps {
|
|
|
2447
3135
|
/** Optional className on the outer frame element. */
|
|
2448
3136
|
className?: string;
|
|
2449
3137
|
}
|
|
2450
|
-
declare function DeviceFrame({ device, url, children, className }: DeviceFrameProps):
|
|
3138
|
+
declare function DeviceFrame({ device, url, children, className }: DeviceFrameProps): react_jsx_runtime.JSX.Element;
|
|
2451
3139
|
|
|
2452
3140
|
interface CreativeMediaProps {
|
|
2453
3141
|
src: string;
|
|
@@ -2656,4 +3344,4 @@ declare namespace index {
|
|
|
2656
3344
|
export { type index_CarouselCardView as CarouselCardView, type index_CarouselViewProps as CarouselViewProps, index_CreativeMedia as CreativeMedia, index_InstagramExplorePreview as InstagramExplorePreview, index_InstagramFeedCarousel as InstagramFeedCarousel, index_InstagramFeedPreview as InstagramFeedPreview, index_MetaFeedCarousel as MetaFeedCarousel, index_MetaFeedPreview as MetaFeedPreview, index_MetaInstreamPreview as MetaInstreamPreview, index_MetaMessengerPreview as MetaMessengerPreview, index_MetaReelPreview as MetaReelPreview, index_MetaRightColumnPreview as MetaRightColumnPreview, index_MetaSearchPreview as MetaSearchPreview, index_MetaStoryPreview as MetaStoryPreview, index_PLACEMENT_CONFIGS as PLACEMENT_CONFIGS, type index_PlacementPreview as PlacementPreview, type index_PreviewAdData as PreviewAdData, type index_PreviewConfiguration as PreviewConfiguration, type index_PreviewDevice as PreviewDevice, type index_PreviewPlacement as PreviewPlacement, type index_PreviewPlatform as PreviewPlatform };
|
|
2657
3345
|
}
|
|
2658
3346
|
|
|
2659
|
-
export { AccordionCompound as Accordion, type AccordionProps, type AccordionSectionProps, AllocationSparkbar, type AllocationSparkbarProps, AppScroll, BRAND_ICONS, Badge, type BadgeProps, type BadgeTone, BrandFacebook, type BrandIconKey, type BrandIconProps, BrandInstagram, BrandLinkedIn, BrandLogoTile, type BrandLogoTileProps, type BrandLogoTileSize, BrandMessenger, BrandMeta, BrandNextdoor, BrandPinterest, BrandSnapchat, BrandTikTok, BulkActionBar, type BulkActionBarProps, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, type ButtonShape, type ButtonSize, type ButtonVariant, type CalcLayout, type CalcPrefill, CalculatorShell, type CalculatorShellProps, CalculatorShellV2, type CalculatorShellV2Props, Card, Checkbox, type CheckboxProps, ChipNav, type ChipNavItem, Choropleth, type ChoroplethProps, CodeBlock, type CodeBlockProps, CollapsibleCard, type CollapsibleCardProps, CompletionRing, type CompletionRingProps, CopyField, type CopyFieldProps, type Crumb, DataGrid, type DataGridColumn, DataGridColumnOptionsMenu, DataGridDragOverlay, type DataGridDrawerPanelProps, DataGridDropIndicator, type DataGridIcon, type DataGridProps, type DataGridRowBase, type DataGridSortState, DataGridToolbar, type DataGridToolbarProps, type DataGridToolbarRenderProps, DetailSection, DeviceFrame, type DeviceFrameProps, DragHandle, DropdownButton, type DropdownButtonItem, type DropdownButtonProps, DropdownMenu, DropdownMenuCheckboxItem, type DropdownMenuCheckboxItemProps, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, DropdownMenuLabel, type DropdownMenuLabelProps, type DropdownMenuProps, DropdownMenuSeparator, DropdownMenuTrigger, type DropdownMenuTriggerProps, type EditingCell, EmptyPlaceholder, EmptyState, type EmptyStateProps, FOLDER_COLOR_KEYS, FileDropZone, FilePreviewGrid, FilePreviewItem, FileThumbnail, FileUploadButton, FilterBar, type FilterBarCountProps, type FilterBarProps, type FilterBarSearchProps, FilterDropdown, type FilterDropdownProps, type FilterOption, FloatingDrawer, type FloatingDrawerProps, FloatingStatusBar, type FloatingStatusBarProps, type FloatingStatusTone, FolderCard, type FolderCardProps, type FolderColorKey, type FolderTreeNode, FolderTreePicker, type FolderTreePickerProps, FrameStack, type FrameStackProps, HEADER_HEIGHT, HeroFormCardCompound as HeroFormCard, type HeroFormCardAdvancedProps, type HeroFormCardBannerProps, type HeroFormCardFieldProps, type HeroFormCardProps, type HeroFormCardSectionProps, IconTile, IdentityLabel, IdentityValue, Input, type InputProps, type InputSize, Kbd, type KbdProps, ListItem, MarkdownCode, MarkdownRenderer, type MarkdownRendererProps, MenuButton, type MenuButtonEntry, type MenuButtonItem, type MenuButtonProps, type MenuButtonSeparator, MetaCell, type MetaCellProps, index as MetaPreviews, MetricCard, type MetricCardProps, type MetricCardTone, MicrosoftLogo, type MicrosoftLogoProps, Modal, OptionTile, OptionTileGroup, type OptionTileGroupProps, type OptionTileProps, PLACEMENT_CONFIGS, PageHeaderHost, PageHeaderSlotProvider, PageHero, type PageHeroProps, PageShell, Pagination, type PaginationProps, type PendingFile, PillButton, type PillButtonProps, type PlacementPreview, type PreviewAdData, type PreviewConfiguration, type PreviewDevice, type PreviewPlacement, type PreviewPlatform, PS as ProfileSection, type ProfileSectionProps, ProgressBar, type ProgressBarProps, Radio, RadioGroup, type RadioGroupProps, type RadioProps, RangeSlider, type RangeSliderProps, ResizableHandle, type ResizableHandleProps, ResizablePane, type ResizablePaneProps, type RgbTuple, SECTION_SCROLL_OFFSET, SearchBar, type SearchBarProps, SectionLabel, SegmentedPill, type SegmentedPillItem, type SegmentedPillProps, Shell, type ShellProps, ShellStat, type ShellStatProps, type ShellStatTone, type ShellSubCardProps, type ShellTrayBodyProps, type ShellTrayFooterProps, type ShellTrayHeaderProps, type ShellTrayProps, Slider, type SliderProps, SortableItem, SortableList, SortableTable, type Column as SortableTableColumn, type SortableTableProps, StatRow, type StatRowProps, type StatRowStep, StatsGrid, type StatsGridProps, StepLoader, type StepLoaderProps, type StepLoaderStep, type Tab, Tabs, type TabsProps, TagChipInput, type TagChipInputProps, TagRow, TextInput, Textarea, TextareaInput, type TextareaProps, Toaster, TokenBadge, type TokenBadgeProps, type UploadResult, type UseFileUploadOptions, ValueChip, type ValueChipProps, type WcagBadge, bestTextOn, cn, contrastRatio, copyText, folderColorVar, formatCurrency, formatNumber, formatPercent, formatRatio, hexToRgbTuple, hslString, relativeLuminance, rgbCss, rgbString, useFileUpload, wcagBadges };
|
|
3347
|
+
export { AccordionCompound as Accordion, type AccordionProps, type AccordionSectionProps, AllocationSparkbar, type AllocationSparkbarProps, type AnchorAlign, type AnchorPlacement, type AnchorRect, type AnchorSide, type AnchorSize, type AnchoredPosition, type AnchoredPositionOptions, AppScroll, BRAND_ICONS, Badge, type BadgeProps, type BadgeTone, BrandFacebook, BrandIcon, type BrandIconKey, type BrandIconProps, BrandInstagram, BrandLinkedIn, BrandLogoTile, type BrandLogoTileProps, type BrandLogoTileSize, BrandMessenger, BrandMeta, BrandNextdoor, BrandPinterest, BrandSnapchat, BrandTikTok, BulkActionBar, type BulkActionBarProps, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, type ButtonShape, type ButtonSize, type ButtonVariant, type CalcLayout, type CalcPrefill, CalculatorShell, type CalculatorShellProps, CalculatorShellV2, type CalculatorShellV2Props, Card, Checkbox, type CheckboxProps, ChipNav, type ChipNavItem, Choropleth, type ChoroplethProps, CodeBlock, type CodeBlockProps, CollapsibleCard, type CollapsibleCardProps, Combobox, type ComboboxGroup, type ComboboxMultipleProps, type ComboboxOption, type ComboboxOptionState, type ComboboxProps, type ComboboxSingleProps, type ComboboxSize, CompletionRing, type CompletionRingProps, CopyField, type CopyFieldProps, type Crumb, DataGrid, type DataGridColumn, DataGridColumnOptionsMenu, DataGridDragOverlay, type DataGridDrawerPanelProps, DataGridDropIndicator, type DataGridIcon, type DataGridProps, type DataGridRowBase, type DataGridSortState, DataGridToolbar, type DataGridToolbarProps, type DataGridToolbarRenderProps, DetailSection, DeviceFrame, type DeviceFrameProps, DragHandle, DropdownButton, type DropdownButtonItem, type DropdownButtonProps, DropdownMenu, DropdownMenuCheckboxItem, type DropdownMenuCheckboxItemProps, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, DropdownMenuLabel, type DropdownMenuLabelProps, type DropdownMenuProps, DropdownMenuSeparator, DropdownMenuTrigger, type DropdownMenuTriggerProps, type EditingCell, EmptyPlaceholder, EmptyState, type EmptyStateProps, FOLDER_COLOR_KEYS, FileDropZone, FilePreviewGrid, FilePreviewItem, FileThumbnail, FileUploadButton, FilterBar, type FilterBarCountProps, type FilterBarProps, type FilterBarSearchProps, FilterDropdown, type FilterDropdownProps, type FilterOption, FloatingDrawer, type FloatingDrawerProps, FloatingStatusBar, type FloatingStatusBarProps, type FloatingStatusTone, FolderCard, type FolderCardProps, type FolderColorKey, type FolderTreeNode, FolderTreePicker, type FolderTreePickerProps, FrameStack, type FrameStackProps, HEADER_HEIGHT, HeroFormCardCompound as HeroFormCard, type HeroFormCardAdvancedProps, type HeroFormCardBannerProps, type HeroFormCardFieldProps, type HeroFormCardProps, type HeroFormCardSectionProps, type HomeCrumb, HomeCrumbLink, IconTile, IdentityLabel, IdentityValue, Input, type InputProps, type InputSize, Kbd, type KbdProps, LISTBOX_CLASS, type LayerHandle, type LayerKind, ListItem, ListboxOption, type ListboxOptionProps, MarkdownCode, MarkdownRenderer, type MarkdownRendererProps, MenuButton, type MenuButtonEntry, type MenuButtonItem, type MenuButtonProps, type MenuButtonSeparator, MetaCell, type MetaCellProps, index as MetaPreviews, MetricCard, type MetricCardProps, type MetricCardTone, MicrosoftLogo, type MicrosoftLogoProps, Modal, OptionTile, OptionTileGroup, type OptionTileGroupProps, type OptionTileProps, type OutsideClickTarget, PLACEMENT_CONFIGS, POPOVER_SURFACE_STYLE, PageHeaderHost, PageHeaderSlotProvider, PageHero, type PageHeroProps, PageShell, Pagination, type PaginationProps, type PendingFile, PillButton, type PillButtonProps, type PlacementPreview, Popover, type PopoverContentProps, type PopoverProps, type PopoverTriggerProps, type PreviewAdData, type PreviewConfiguration, type PreviewDevice, type PreviewPlacement, type PreviewPlatform, PS as ProfileSection, type ProfileSectionProps, ProgressBar, type ProgressBarProps, Radio, RadioGroup, type RadioGroupProps, type RadioProps, RangeSlider, type RangeSliderProps, ResizableHandle, type ResizableHandleProps, ResizablePane, type ResizablePaneProps, type RgbTuple, SECTION_SCROLL_OFFSET, SearchBar, type SearchBarProps, SectionLabel, SegmentedPill, type SegmentedPillItem, type SegmentedPillProps, Select, type SelectOption, type SelectProps, type SelectSize, Shell, type ShellProps, ShellStat, type ShellStatProps, type ShellStatTone, type ShellSubCardProps, type ShellTrayBodyProps, type ShellTrayFooterProps, type ShellTrayHeaderProps, type ShellTrayProps, Slider, type SliderProps, SortableItem, SortableList, SortableTable, type Column as SortableTableColumn, type SortableTableProps, StatRow, type StatRowProps, type StatRowStep, StatsGrid, type StatsGridProps, StepLoader, type StepLoaderProps, type StepLoaderStep, type Tab, Tabs, type TabsProps, TagChipInput, type TagChipInputProps, TagRow, TextInput, Textarea, TextareaInput, type TextareaProps, Toaster, TokenBadge, type TokenBadgeProps, Tooltip, type TooltipProps, type TooltipTriggerProps, type UploadResult, type UseAnchoredPositionOptions, type UseAnchoredPositionResult, type UseEscapeKeyOptions, type UseFileUploadOptions, type UseLayerOptions, type UseOutsideClickOptions, ValueChip, type ValueChipProps, type WcagBadge, bestTextOn, cn, computeAnchoredPosition, contrastRatio, copyText, folderColorVar, formatCurrency, formatNumber, formatPercent, formatRatio, hasBrandIcon, hexToRgbTuple, hslString, relativeLuminance, rgbCss, rgbString, useAnchoredPosition, useBreadcrumbHome, useEscapeKey, useFileUpload, useLayer, useOutsideClick, wcagBadges };
|