import React, { useEffect, Dispatch, SetStateAction, RefObject, ReactNode } from 'react'; import * as react_jsx_runtime from 'react/jsx-runtime'; import { FieldValues, UseFormReturn, FieldPath, RegisterOptions, UseControllerProps, ControllerRenderProps, ControllerFieldState } from 'react-hook-form'; export { FieldValues, FieldPath as Path, UseFormReturn } from 'react-hook-form'; import { ColumnDef, Table } from '@tanstack/react-table'; export { ColumnDef, ColumnFiltersState, ColumnHelper, PaginationState, Row, RowSelectionState, SortingState, VisibilityState, createColumnHelper } from '@tanstack/react-table'; import { EmblaOptionsType, EmblaPluginType, EmblaCarouselType } from 'embla-carousel'; declare const containerWidth: { readonly sm: "max-w-2xl"; readonly md: "max-w-3xl"; readonly lg: "max-w-4xl"; readonly xl: "max-w-5xl"; readonly '2xl': "max-w-6xl"; readonly '3xl': "max-w-7xl"; readonly '4xl': "max-w-[1400px]"; readonly '5xl': "max-w-[1600px]"; readonly '6xl': "max-w-[1800px]"; readonly '7xl': "max-w-[2000px]"; readonly prose: "max-w-prose"; readonly full: "max-w-none"; }; declare const pageGutter: { readonly 0: "px-0"; readonly sm: "px-3"; readonly md: "px-4 sm:px-6"; readonly lg: "px-4 sm:px-6 lg:px-8"; readonly xl: "px-6 sm:px-8 lg:px-12"; }; declare const sectionRhythm: { readonly none: "py-0"; readonly sm: "py-8 sm:py-12"; readonly md: "py-12 sm:py-16"; readonly lg: "py-16 sm:py-20 lg:py-24"; readonly xl: "py-20 sm:py-28 lg:py-32"; }; declare const stackGap: { readonly 0: "gap-0"; readonly 1: "gap-1"; readonly 2: "gap-2"; readonly 3: "gap-3"; readonly 4: "gap-4"; readonly 5: "gap-5"; readonly 6: "gap-6"; readonly 8: "gap-8"; readonly 10: "gap-10"; readonly 12: "gap-12"; readonly 16: "gap-16"; }; declare const rhythm: { readonly eyebrowToHeadline: "mt-5"; readonly headlineToSubline: "mt-3"; readonly sublineToCtas: "mt-7"; readonly ctasToMeta: "mt-10"; readonly metaToInstall: "mt-5"; }; /** * Layout/surface-scale tone tokens — consumed by the card/layout/hero family * (PixelCard, PixelBox, PixelBentoCell, PixelHeroSection, PixelSidebar, …). * * DECISION (do not "sync" with `toneMap` in common.tsx): this map and * `toneMap` are two deliberately distinct tiers, and BOTH are rendered * truth for their own consumers: * - `toneMap` (common.tsx) targets control-scale chrome (buttons, badges, * inputs, chips) and uses `border-*\/40` — borders must stay visible at * body-text sizes. * - this `tone` map targets large surfaces (cards, sections) and uses * `border-*\/30` plus a `glow` shadow — large areas need softer borders * to avoid visual heaviness (and it has no `hover` tier; surfaces are * not interactive by default). * Aligning the values either way would change rendered pixels for one of * the two component families, so the divergence is intentional and kept. */ declare const tone: { readonly neutral: { readonly border: "border-retro-border"; readonly bg: "bg-retro-surface/40"; readonly soft: "bg-retro-surface/20"; readonly glow: "shadow-[0_0_24px_-12px_rgba(0,0,0,0.4)]"; readonly ring: "focus-visible:ring-retro-border"; readonly text: "text-retro-text"; readonly fill: "bg-retro-muted"; }; readonly green: { readonly border: "border-retro-green/30"; readonly bg: "bg-retro-green/18"; readonly soft: "bg-retro-green/8"; readonly glow: "shadow-[0_0_24px_-8px_rgba(0,255,128,0.45)]"; readonly ring: "focus-visible:ring-retro-green/40"; readonly text: "text-retro-green"; readonly fill: "bg-retro-green"; }; readonly cyan: { readonly border: "border-retro-cyan/30"; readonly bg: "bg-retro-cyan/18"; readonly soft: "bg-retro-cyan/8"; readonly glow: "shadow-[0_0_24px_-8px_rgba(14,165,233,0.45)]"; readonly ring: "focus-visible:ring-retro-cyan/40"; readonly text: "text-retro-cyan"; readonly fill: "bg-retro-cyan"; }; readonly gold: { readonly border: "border-retro-gold/30"; readonly bg: "bg-retro-gold/18"; readonly soft: "bg-retro-gold/8"; readonly glow: "shadow-[0_0_24px_-8px_rgba(234,179,8,0.45)]"; readonly ring: "focus-visible:ring-retro-gold/40"; readonly text: "text-retro-gold"; readonly fill: "bg-retro-gold"; }; readonly red: { readonly border: "border-retro-red/30"; readonly bg: "bg-retro-red/18"; readonly soft: "bg-retro-red/8"; readonly glow: "shadow-[0_0_24px_-8px_rgba(239,68,68,0.45)]"; readonly ring: "focus-visible:ring-retro-red/40"; readonly text: "text-retro-red"; readonly fill: "bg-retro-red"; }; readonly purple: { readonly border: "border-retro-purple/30"; readonly bg: "bg-retro-purple/18"; readonly soft: "bg-retro-purple/8"; readonly glow: "shadow-[0_0_24px_-8px_rgba(168,85,247,0.45)]"; readonly ring: "focus-visible:ring-retro-purple/40"; readonly text: "text-retro-purple"; readonly fill: "bg-retro-purple"; }; readonly pink: { readonly border: "border-retro-pink/30"; readonly bg: "bg-retro-pink/18"; readonly soft: "bg-retro-pink/8"; readonly glow: "shadow-[0_0_24px_-8px_rgba(236,72,153,0.45)]"; readonly ring: "focus-visible:ring-retro-pink/40"; readonly text: "text-retro-pink"; readonly fill: "bg-retro-pink"; }; }; declare const durations: { readonly fast: "duration-150"; readonly normal: "duration-200"; readonly slow: "duration-300"; readonly slower: "duration-500"; }; declare const easings: { readonly standard: "ease-out"; readonly bounce: "ease-[cubic-bezier(.34,1.56,.64,1)]"; readonly linear: "ease-linear"; }; type ContainerWidth = keyof typeof containerWidth; type PageGutter = keyof typeof pageGutter; type SectionRhythmKey = keyof typeof sectionRhythm; type StackGapKey = keyof typeof stackGap; type RhythmKey = keyof typeof rhythm; type ToneKey = keyof typeof tone; /** * Wrap a subtree to change the default `surface` of every nested Pxlkit * component without setting the prop on each one individually. * * @example * * Looks modern * */ declare function PxlKitSurfaceProvider({ surface, children, }: { surface?: Surface; children: React.ReactNode; }): react_jsx_runtime.JSX.Element; type Tone = 'green' | 'cyan' | 'gold' | 'red' | 'purple' | 'pink' | 'neutral'; type Size$1 = 'sm' | 'md' | 'lg'; /** * Shared visual weight axis used across the kit. Every component that has * a visible body picks one of these. * * - `solid` — opaque tone background + contrasting text (highest weight). * - `soft` — tinted tone background + tone text (default for cards / badges / chips). * - `ghost` — transparent body until hover, tone text + border. * - `outline` — transparent body, tone border, tone text. * * Components that historically only accepted `solid | ghost` continue to do * so; this union is the canonical superset and is what new components should * accept. */ type Variant$1 = 'solid' | 'soft' | 'ghost' | 'outline'; type Option = { value: string; label: string; icon?: React.ReactNode; }; type TabItem = { id: string; label: string; icon?: React.ReactNode; content: React.ReactNode; }; type AccordionItem = { id: string; title: string; content: React.ReactNode; }; /** * Surface — visual aesthetic of a Pxlkit component. * * - `"pixel"` (default) — chunky 2px borders, sharp pixel-art corners, offset * block shadow with no blur, mono typography. Matches the brand identity. * - `"linear"` — soft 1px borders, gentle rounded corners, blurred drop * shadows, sans typography. For projects that want the same components * without the retro aesthetic. * * Every component reads its surface from the nearest `PxlKitSurfaceProvider` * (default: `"pixel"`); the `surface` prop on a component overrides the * provider for that single instance. */ type Surface = 'pixel' | 'linear'; /** * Class bundles returned by `surfaceClasses(surface)`. * Every component composes these to match the active aesthetic. */ interface SurfaceClasses { /** Border width — `border-2` (pixel) vs `border` (linear). */ border: string; /** Standard interactive radius. */ radius: string; /** Larger radius for cards / modals / panels. */ radiusLg: string; /** Radius for chips and badges (pill in linear, chamfered in pixel). */ radiusFull: string; /** Resting drop shadow. */ shadow: string; /** Hover shadow (subtle elevation change). */ shadowHover: string; /** Active / pressed shadow. */ shadowActive: string; /** Body / control typography. */ font: string; /** Display / heading typography. */ fontDisplay: string; /** Transition timing. */ transition: string; /** Press feedback — pixel translates, linear scales. */ press: string; } /** * Resolve surface-specific class strings. * @example * const s = surfaceClasses(surface); *
...
*/ declare function surfaceClasses(surface?: Surface): SurfaceClasses; declare function usePxlKitSurface(): Surface; declare function cn(...classes: Array): string; /** * Per-tone class bundle. Conventions: * - `bg` ≈ 18 % tint — soft surface for chip / badge / alert / stat bodies. * 18 % (vs the 10 % we used pre-v1.4.3) brings light-theme contrast above * the 3:1 floor for badge text on light backgrounds. * - `soft` ≈ 8 % tint — even gentler surface for hover states or nested fills. * - `hover` adds another ~7 % on interaction. * - `border` 40 % opacity — visible at body sizes; for thin dividers prefer * `border-retro-border` or `/30`. * - `ring` 40 % — keyboard focus ring. * - `fill` opaque — solid tone backgrounds (`solid` variant of any * component). * * NOTE: `tokens.ts` exports a *separate* `tone` map for layout/surface-scale * components (cards, hero, bento, …) that intentionally uses `border-*\/30` * + a `glow` tier. The two maps are different design tiers, not a drifted * copy — see the decision comment on `tone` in tokens.ts before changing * either one to "match" the other. */ declare const toneMap: Record; /** * Default control geometry — height + horizontal padding + text size + gap. * Used by interactive elements that own their own padding (`PixelButton`, * `PixelInput`, `PixelSelect`, ...). */ declare const sizeClass: Record; /** * Standalone control height + body text size (no horizontal padding) — for * elements that provide their own internal layout: input shells, sliders, * switches, container divs. Matches `sizeClass` height / text-size for * baseline-level consistency with other controls on the same form row. */ declare const sizeHeight: Record; /** * Square control geometry — for icon buttons, avatars, swatches and any * other control where width = height. Single source of truth replacing the * inline ternaries in actions / data-display / inputs. */ declare const sizeSquare: Record; /** * Pixel "dot" — small interactive squares (checkbox, switch handle, radio * marker, slider thumb). Sized for crisp pixel rendering, not tied to the * text scale. */ declare const pixelDot: Record; /** * Two flavours of pixel corner. `dot` is the 2 px rounded square used on * inline indicators; `square` is the 3 px corner used on avatars and small * card chips. Use these instead of inlining `rounded-[2px]` everywhere. */ declare const pixelRadius: { readonly dot: "rounded-[2px]"; readonly square: "rounded-[3px]"; }; /** * Pixel typography scale. Drops any text below 10 px (below WCAG sidebar * thresholds) and pins the available steps for the kit. Use these instead * of arbitrary `text-[9px]` etc. on body text — the `micro` step is * intentionally the floor. */ declare const pixelType: { /** 10 px — chips, kbd, tooltips. */ readonly micro: "text-[10px]"; /** 12 px — captions, helper text. */ readonly xs: "text-xs"; /** 14 px — body. */ readonly sm: "text-sm"; /** 16 px — section bodies. */ readonly base: "text-base"; }; declare const focusRing = "focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-retro-bg"; /** * Base styles shared by every input shell. Notably does NOT pin a radius * — the active `SurfaceClasses.radius` owns radius — and uses * `bg-retro-surface/40` (with `/70` on focus) so inputs stay visually * "depressed" against both `retro-bg` (page) and `retro-card` (cards) in * either theme. */ declare const inputBase = "w-full border bg-retro-surface/40 focus:bg-retro-surface/70 text-retro-text font-mono transition-all outline-none disabled:opacity-50 disabled:cursor-not-allowed"; type BentoSpan = '2x2' | '2x1' | '1x2' | '1x1' | '3x1' | '1x3'; type BentoKind = 'feature' | 'stat' | 'compact' | 'media'; interface PixelBentoCellProps extends React.HTMLAttributes { span?: BentoSpan; /** Canonical structural variant. */ variant?: BentoKind; /** * @deprecated Use `variant` instead. Retained as alias for one minor. */ kind?: BentoKind; tone?: ToneKey; surface?: Surface; /** Render with surface-aware border + radius chrome. Defaults to false (no chrome). */ bordered?: boolean; } declare const PixelBentoCell: React.ForwardRefExoticComponent>; type BentoColumns = 3 | 4 | 6; interface PixelBentoProps extends React.HTMLAttributes { columns?: BentoColumns; gap?: StackGapKey; } declare const PixelBento: React.ForwardRefExoticComponent>; type BoxPadding = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'; type BoxRadius = 'none' | 'sm' | 'md' | 'lg' | 'full'; type BoxAs = 'div' | 'section' | 'article' | 'aside' | 'header' | 'footer' | 'main' | 'nav'; interface PixelBoxProps extends Omit, 'color'> { tone?: Tone; surface?: Surface; variant?: Variant$1; padding?: BoxPadding; radius?: BoxRadius; /** * Whether to render a border. Defaults to `true` when `variant === 'outline'` * (outlines without a border are meaningless), `false` otherwise. Pass `true` * to force a border on `solid`/`soft`/`ghost`; pass `false` to force-off on * outline. Note: when polymorphic `as` is a landmark element (`section`, * `nav`, `aside`, `main`), supply `aria-label` or `aria-labelledby` for a11y. */ border?: boolean; shadow?: boolean; as?: BoxAs; } /** * Surface-aware container box. * * Polymorphic ref note: the ref is typed `HTMLDivElement` because that's the * default render target. When you set `as="nav"` / `"section"` etc, the * underlying element is still focusable/queryable via the ref — TypeScript * just won't know the narrower subtype. If you need a narrower type, cast at * the call site or use `React.useRef()`. */ declare const PixelBox: React.ForwardRefExoticComponent>; interface PixelCenterProps extends Omit, 'align'> { maxWidth?: ContainerWidth; gutter?: PageGutter; /** Text alignment of the centered content (canonical). */ align?: 'left' | 'center' | 'right'; /** * @deprecated Use `align` instead. Retained as alias for one minor. */ text?: 'left' | 'center' | 'right'; inline?: boolean; as?: keyof React.JSX.IntrinsicElements; surface?: Surface; bordered?: boolean; } declare const PixelCenter: React.ForwardRefExoticComponent>; interface PixelClusterProps extends React.HTMLAttributes { gap?: StackGapKey; align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline'; justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'; as?: keyof React.JSX.IntrinsicElements; surface?: Surface; } declare const PixelCluster: React.ForwardRefExoticComponent>; interface PixelContainerProps extends React.HTMLAttributes { maxWidth?: ContainerWidth; padding?: SectionRhythmKey | { x?: PageGutter; y?: SectionRhythmKey; }; surface?: Surface; as?: 'section' | 'main' | 'header' | 'footer' | 'article' | 'aside' | 'div'; } declare const PixelContainer: React.ForwardRefExoticComponent>; interface PixelDividerProps { /** Optional centered label between two rules. */ label?: string; /** Color tone of the label text. */ tone?: Tone; /** Symmetric vertical padding. */ spacing?: 'none' | 'sm' | 'md' | 'lg'; className?: string; /** Surface variant. Falls back to nearest . */ surface?: Surface; } declare function PixelDivider({ label, tone, spacing, className, surface: surfaceProp, }: PixelDividerProps): react_jsx_runtime.JSX.Element; type ColCount = 1 | 2 | 3 | 4 | 5 | 6 | 12; type RowCount = 1 | 2 | 3 | 4 | 5 | 6; type ResponsiveCols = { base?: ColCount; sm?: ColCount; md?: ColCount; lg?: ColCount; xl?: ColCount; }; interface PixelGridProps extends React.HTMLAttributes { cols?: ColCount | ResponsiveCols; rows?: RowCount; gap?: StackGapKey; colGap?: StackGapKey; rowGap?: StackGapKey; autoFit?: boolean; autoFill?: boolean; minColWidth?: string; align?: 'start' | 'center' | 'end' | 'stretch'; justify?: 'start' | 'center' | 'end' | 'stretch'; as?: keyof React.JSX.IntrinsicElements; surface?: Surface; } declare const PixelGrid: React.ForwardRefExoticComponent>; interface PixelEqualHeightGridProps extends Omit { rowAlign?: 'top' | 'stretch'; } declare const PixelEqualHeightGrid: React.ForwardRefExoticComponent>; type ScrollType = 'auto' | 'always' | 'scroll' | 'hover'; interface PixelScrollAreaProps extends Omit, 'type'> { maxHeight?: string | number; /** Canonical structural variant (scrollbar visibility mode). */ variant?: ScrollType; /** * @deprecated Use `variant` instead. Retained as alias for one minor. */ type?: ScrollType; offsetScrollbars?: boolean; scrollbarSize?: number; surface?: Surface; /** Render with surface-aware border + radius chrome. Defaults to false (no chrome). */ bordered?: boolean; /** * Accessible name for the scrollable region. Required for keyboard users to * understand what they've landed on. Provide either `aria-label` or * `aria-labelledby`. In dev, a missing label logs a warning. */ 'aria-label'?: string; 'aria-labelledby'?: string; children: React.ReactNode; } /** * Surface-aware scroll container with styled scrollbar (CSS `scrollbar-width` * + `::-webkit-scrollbar`). Use `type` to control scrollbar visibility, * `maxHeight` to cap height before content scrolls. * * The styled scrollbar palette is owned by `styles.css` `.pxl-scroll-*` * classes; this component only wires the variant + dimensions. */ declare const PixelScrollArea: React.ForwardRefExoticComponent>; interface PixelSectionProps { /** Title rendered as an uppercase heading row at the top of the section. */ title?: string; /** Optional subtitle below the title. */ subtitle?: string; children: React.ReactNode; /** Surface variant. Falls back to nearest . */ surface?: Surface; /** Inner container max-width. Pass `false` to skip the centered container wrapper. */ container?: ContainerWidth | false; /** Vertical padding token (margin between consecutive sections). */ verticalPadding?: SectionRhythmKey; /** Horizontal gutter token (used only when `container` is `false`). */ horizontalGutter?: PageGutter; /** Render with surface-aware border + radius chrome. Defaults to false (no chrome). */ bordered?: boolean; } declare const PixelSection: React.ForwardRefExoticComponent>; interface PixelSectionHeaderProps extends Omit, 'title'> { eyebrow?: string; title: string; titleTone?: ToneKey; description?: string; align?: 'start' | 'center'; size?: 'sm' | 'md' | 'lg'; spacing?: 'tight' | 'normal' | 'loose'; actions?: React.ReactNode; as?: 'h1' | 'h2' | 'h3' | 'h4'; surface?: Surface; } declare const PixelSectionHeader: React.ForwardRefExoticComponent>; interface PixelStackProps extends React.HTMLAttributes { direction?: 'col' | 'row'; gap?: StackGapKey; align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline'; justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'; wrap?: boolean; inline?: boolean; as?: keyof React.JSX.IntrinsicElements; surface?: Surface; } declare const PixelStack: React.ForwardRefExoticComponent>; type Ratio$1 = '50/50' | '60/40' | '40/60' | '70/30' | '30/70'; type StackBp = 'sm' | 'md' | 'lg'; type Align$1 = 'start' | 'center' | 'end' | 'stretch'; interface PixelTwoColumnProps extends React.HTMLAttributes { ratio?: Ratio$1; gap?: StackGapKey; reverse?: boolean; stackBelow?: StackBp; align?: Align$1; left: React.ReactNode; right: React.ReactNode; surface?: Surface; as?: keyof React.JSX.IntrinsicElements; bordered?: boolean; } declare const PixelTwoColumn: React.ForwardRefExoticComponent>; /** * Attach a typed event listener to `target` (default: `window`) for the * component lifetime. The listener is held in a ref so updating the * `listener` prop across re-renders does NOT detach/reattach — only `type` * or `target` (or a meaningfully-different `options` object) cause a * re-subscription. SSR-safe: a `null` target (or `window` when not in a * browser) is a no-op. */ declare function useEventListener(type: K, listener: (e: WindowEventMap[K]) => void, target?: Window | null, options?: AddEventListenerOptions): void; declare function useEventListener(type: K, listener: (e: DocumentEventMap[K]) => void, target: Document | null, options?: AddEventListenerOptions): void; declare function useEventListener(type: K, listener: (e: HTMLElementEventMap[K]) => void, target: HTMLElement | null, options?: AddEventListenerOptions): void; declare const useIsomorphicLayoutEffect: typeof useEffect; /** * Subscribe to a CSS media query. * * SSR-safe: returns `defaultValue` (default `false`) when `window` is * undefined or `matchMedia` is unavailable. On mount, syncs to the current * match state and subscribes to `change` events. Re-subscribes when the * `query` string changes and cleans up its listener on unmount. * * @example * const isDesktop = useMediaQuery('(min-width: 768px)'); */ declare function useMediaQuery(query: string, defaultValue?: boolean): boolean; /** * Subscribe to the user's `prefers-reduced-motion: reduce` setting. * * Returns `true` when the OS-level reduced-motion preference is active. * Thin wrapper over `useMediaQuery` — SSR-safe (defaults to `false` on the * server) and automatically reacts to OS-level toggles at runtime. * * @example * const reduced = useReducedMotion(); *
...
*/ declare function useReducedMotion(): boolean; interface UseLocalStorageOptions { /** Custom serializer (default: `JSON.stringify`). */ serialize?: (value: T) => string; /** Custom deserializer (default: `JSON.parse`). */ deserialize?: (raw: string) => T; /** Subscribe to cross-tab `storage` events. Default `true`. */ syncTabs?: boolean; } /** * Persistent state synced to `window.localStorage`. * * SSR-safe: returns `initialValue` on first paint when `window` is undefined, * then hydrates from localStorage in an effect. Returns a tuple of * `[value, setValue, remove]`. `setValue` accepts a value or an updater * function (same signature as `useState`). `remove` deletes the key and resets * state back to `initialValue`. * * When `syncTabs` is `true` (default) the hook listens for `storage` events on * `window` and updates state when another tab mutates the same key. */ declare function useLocalStorage(key: string, initialValue: T, opts?: UseLocalStorageOptions): readonly [T, (next: T | ((prev: T) => T)) => void, () => void]; type DarkMode = 'light' | 'dark' | 'system'; type ResolvedMode = 'light' | 'dark'; declare function useDarkMode(): { mode: DarkMode; resolved: ResolvedMode; setMode: (m: DarkMode) => void; }; interface UseControllableStateOptions { value?: T; defaultValue?: T; onChange?: (next: T) => void; } /** * Hook for a value that may be either controlled (`value` prop set) or * uncontrolled (use `defaultValue`). The returned setter is * `Dispatch>` so it plugs into any React API that expects * a state setter. * * Overloads: * - If `value` is `T | undefined` (i.e. potentially uncontrolled), the * `defaultValue` is required — otherwise the hook would return * `undefined` pretending to be `T`. * - If `value` is explicitly `T`, `defaultValue` is optional. */ declare function useControllableState(opts: { value: T; defaultValue?: T; onChange?: (next: T) => void; }): readonly [T, Dispatch>]; declare function useControllableState(opts: { value?: T; defaultValue: T; onChange?: (next: T) => void; }): readonly [T, Dispatch>]; /** * Fires `handler` when the user presses Escape anywhere in the window. * * @param handler - Invoked with the originating `KeyboardEvent` when Escape is pressed. * @param enabled - Toggle the listener without unmounting (default `true`). When * `false`, no listener is attached and Escape presses are ignored. */ declare function useEscape(handler: (e: KeyboardEvent) => void, enabled?: boolean): void; /** * Lock page scroll while `active` is true. Multiple consumers stack — body * scroll is restored only after every lock has released. * * iOS Safari note: simply setting `body { overflow: hidden }` does NOT stop * touch scroll. This hook ALSO pins the body via `position: fixed` (saving the * current scrollY in `body.top`) and restores `window.scrollTo(savedScrollY)` * on release. This works on iOS, desktop, and Android. * * a11y note: this hook only locks scroll. Background content remains * readable by assistive tech. Modal callers should additionally apply * `inert` (or `aria-hidden="true"`) to siblings of the modal root and use * `useFocusTrap` to keep keyboard focus inside the modal. */ declare function useScrollLock(active: boolean): void; /** * Trap Tab focus inside `containerRef.current` while `active` is true. * * - On activate: snapshot `document.activeElement`, then focus the first * focusable element inside the container. * - On Tab / Shift+Tab: cycle focus within the container's focusable * children (ignores elements hidden via `aria-hidden`, `hidden`, * `display:none`, or `visibility:hidden`). * - On deactivate: restore focus to the element that had it before — only * if it's still in the DOM and focusable; otherwise falls back to body. */ declare function useFocusTrap(active: boolean, containerRef: RefObject): void; type RibbonPosition = 'top-center' | 'top-left' | 'top-right' | 'corner-tl' | 'corner-tr'; type RibbonOffset = 'sm' | 'md' | 'lg'; interface PixelRibbonProps extends React.HTMLAttributes { position?: RibbonPosition; tone?: ToneKey; offset?: RibbonOffset; tilt?: number; surface?: Surface; children: React.ReactNode; } declare const PixelRibbon: React.ForwardRefExoticComponent>; type IconSize = 48 | 56 | 64 | 80; type DescLines = 2 | 3 | 4; type Orientation$1 = 'vertical' | 'horizontal'; interface PixelFeatureCardProps extends React.HTMLAttributes { icon?: React.ReactNode; iconSize?: IconSize; badge?: { label: string; tone?: ToneKey; }; title: string; /** Muted paragraph rendered under the title. */ description?: string; /** Apply `line-clamp-N` + `min-h-[N lh]` to the description. */ descriptionLines?: DescLines; /** @deprecated Use `description` for consistency with PixelCard / PixelPricingCard. */ desc?: string; /** @deprecated Use `descriptionLines` for consistency with PixelCard / PixelPricingCard. */ descLines?: DescLines; footer?: React.ReactNode; tone?: ToneKey; interactive?: boolean; /** * When provided, the card renders as `` and accepts anchor-specific * attributes via the spread. Nesting interactive children inside the card * (e.g. PixelButton, PixelTextLink) is invalid HTML in this mode. */ href?: string; /** Anchor target — only meaningful when `href` is set. */ target?: React.AnchorHTMLAttributes['target']; /** Anchor rel — only meaningful when `href` is set. */ rel?: React.AnchorHTMLAttributes['rel']; /** Anchor download — only meaningful when `href` is set. */ download?: React.AnchorHTMLAttributes['download']; /** When `interactive=true` without `href`, an onClick is REQUIRED for accessibility. */ onClick?: React.MouseEventHandler; orientation?: Orientation$1; surface?: Surface; /** Render with surface-aware border + radius chrome. Defaults to true — a feature card needs visible chrome. */ bordered?: boolean; } declare const PixelFeatureCard: React.ForwardRefExoticComponent>; interface PixelPricingCardProps extends React.HTMLAttributes { tone?: ToneKey; icon?: React.ReactNode; name: string; description?: string; /** Clamp the description to N lines. Defaults to 2; use 'none' to let long copy flow. */ descriptionLines?: 2 | 3 | 'none'; price: { amount: string | number; period?: string; strikethrough?: string | number; }; /** Promo badge rendered beside the price (e.g. a discount PixelBadge). */ priceBadge?: React.ReactNode; popular?: { label?: string; tone?: ToneKey; }; features?: { label: string; tooltip?: string; included?: boolean; highlight?: boolean; }[]; cta?: React.ReactNode; highlight?: boolean; footer?: React.ReactNode; surface?: Surface; /** Render with surface-aware border + radius chrome. Defaults to true — a pricing card needs visible chrome. */ bordered?: boolean; } declare const PixelPricingCard: React.ForwardRefExoticComponent>; type QuoteSize = 'compact' | 'normal' | 'long'; type Variant = 'card' | 'quote' | 'slider'; interface PixelTestimonialCardProps extends React.HTMLAttributes { quote: string; name: string; role?: string; company?: string; avatar?: { src?: string; name: string; tone?: ToneKey; }; stars?: number; verified?: boolean; tone?: ToneKey; variant?: Variant; quoteSize?: QuoteSize; actions?: React.ReactNode; surface?: Surface; } declare const PixelTestimonialCard: React.ForwardRefExoticComponent>; type StarSize = 'sm' | 'md' | 'lg'; type StarTone = 'gold' | 'green'; interface PixelStarRatingProps extends Omit, 'onChange' | 'defaultValue'> { /** Controlled rating value (0..max). */ value?: number; /** Uncontrolled initial rating value (0..max). */ defaultValue?: number; /** Total number of stars rendered. Default 5. */ max?: number; /** Visual size of each star — maps to 16 / 20 / 24 px for sm / md / lg. */ size?: StarSize; /** Color tone applied to filled stars. */ tone?: StarTone; /** When true, renders "N/M" beside the stars. */ showCount?: boolean; /** When true, exposes each star as a button that updates the rating on click. */ interactive?: boolean; /** Called with the new rating when the user clicks a star (interactive only). */ onChange?: (next: number) => void; /** Override the ambient surface (pixel | linear). */ surface?: Surface; /** * Polymorphic escape hatch. Replace the default gamification Star glyph * with any custom node, or a render function called per-star with * `{ filled, size, tone }` so the caller can choose a different sibling * pack icon (Heart, Coin, Crown…) without forking the component. * * - `undefined` (default) → render the gamification {@link Star} for * filled positions and the inline outlined rect-SVG for empty ones. * - `ReactNode` → render for filled positions only; empty positions * continue to use the outlined fallback for the empty-state silhouette. * - `(args) => ReactNode` → render for both filled and empty positions, * giving full control over the glyph in every state. */ starIcon?: ReactNode | ((args: { filled: boolean; size: number; tone: StarTone; }) => ReactNode); } declare const PixelStarRating: React.ForwardRefExoticComponent>; type FrameSize = 48 | 56 | 64 | 80 | 112; type FrameShape = 'square' | 'rounded' | 'circle'; type AccentPosition = 'top-right' | 'bottom-right'; interface PixelIconFrameProps extends React.HTMLAttributes { icon: React.ReactNode; size?: FrameSize; tone?: ToneKey; shape?: FrameShape; accent?: { icon: React.ReactNode; position?: AccentPosition; }; animated?: boolean; surface?: Surface; } declare const PixelIconFrame: React.ForwardRefExoticComponent>; type HeadlineEffect = 'typewriter' | 'glitch' | 'none'; type HeroVariant = 'centered' | 'split' | 'parallax'; type HeroDensity = 'compact' | 'comfortable'; type HeroMinHeight = 'sm' | 'md' | 'lg' | 'fullscreen'; interface PixelHeroSectionProps extends React.HTMLAttributes { variant?: HeroVariant; eyebrow?: string; headline: string; headlineEffect?: HeadlineEffect; subline?: string; primaryCta?: React.ReactNode; secondaryCta?: React.ReactNode; install?: React.ReactNode; meta?: React.ReactNode; media?: React.ReactNode; tone?: ToneKey; density?: HeroDensity; minHeight?: HeroMinHeight; surface?: Surface; } declare const PixelHeroSection: React.ForwardRefExoticComponent>; type Ratio = '1/1' | '4/5' | '16/10' | '16/9'; type Anchor = 'center' | 'baseline-headline'; interface PixelHeroMediaProps extends React.HTMLAttributes { ratio?: Ratio; anchor?: Anchor; framed?: boolean; tone?: ToneKey; caption?: string; /** Optional className applied to the inner caption (figcaption). */ captionClassName?: string; surface?: Surface; children: React.ReactNode; } declare const PixelHeroMedia: React.ForwardRefExoticComponent>; interface PixelPortalProps { children: React.ReactNode; container?: HTMLElement | null; disabled?: boolean; } /** * Portals children to `container` (default: `document.body`). On the server * AND on the first client render, renders children inline so SSR + first-paint * hydration are non-empty; switches to a real `createPortal` after mount. */ declare const PixelPortal: React.ForwardRefExoticComponent>; type PopoverSide = 'top' | 'bottom' | 'left' | 'right'; type PopoverAlign = 'start' | 'center' | 'end'; type PopoverHasPopup = 'dialog' | 'listbox' | 'menu' | 'tree' | 'grid'; type PopoverRole = 'dialog' | 'none' | 'listbox' | 'menu'; interface PixelPopoverProps { open: boolean; onOpenChange: (open: boolean) => void; children: React.ReactNode; side?: PopoverSide; align?: PopoverAlign; sideOffset?: number; closeOnEscape?: boolean; closeOnOutsideClick?: boolean; surface?: Surface; /** * ARIA `aria-haspopup` value advertised on the trigger. Default `'dialog'`. * Set to `'listbox'` for combobox patterns, `'menu'` for menu patterns, etc. */ haspopup?: PopoverHasPopup; /** * Role applied to the content element. Default `'dialog'`. Set to `'none'` * (or any non-dialog value) when the popover wraps an inner widget that * owns the semantics (e.g. a listbox inside a combobox). */ role?: PopoverRole; } type PopoverRootComponent = React.FC & { Trigger: typeof PixelPopoverTrigger; Content: typeof PixelPopoverContent; Arrow: typeof PixelPopoverArrow; }; interface PixelPopoverTriggerProps { children: React.ReactElement; } declare const PixelPopoverTrigger: React.ForwardRefExoticComponent>; interface PixelPopoverContentProps extends React.HTMLAttributes { surface?: Surface; } declare const PixelPopoverContent: React.ForwardRefExoticComponent>; interface PixelPopoverArrowProps extends React.HTMLAttributes { } declare const PixelPopoverArrow: React.ForwardRefExoticComponent>; declare const PixelPopover: PopoverRootComponent; type DrawerSide = 'right' | 'left' | 'top' | 'bottom'; type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'; interface PixelDrawerProps { open: boolean; onOpenChange: (open: boolean) => void; side?: DrawerSide; size?: DrawerSize; overlay?: boolean; dismissOnOverlay?: boolean; trapFocus?: boolean; title?: string; description?: string; /** * Accessible name fallback when `title` is omitted. WCAG 4.1.2 requires * every `role="dialog"` to expose a name; supply `title` OR `aria-label`. */ 'aria-label'?: string; surface?: Surface; container?: HTMLElement | null; children: React.ReactNode; } type DrawerComponent = React.ForwardRefExoticComponent> & { Header: typeof PixelDrawerHeader; Body: typeof PixelDrawerBody; Footer: typeof PixelDrawerFooter; }; interface PixelDrawerHeaderProps extends React.HTMLAttributes { surface?: Surface; } declare const PixelDrawerHeader: React.ForwardRefExoticComponent>; interface PixelDrawerBodyProps extends React.HTMLAttributes { } declare const PixelDrawerBody: React.ForwardRefExoticComponent>; interface PixelDrawerFooterProps extends React.HTMLAttributes { surface?: Surface; } declare const PixelDrawerFooter: React.ForwardRefExoticComponent>; declare const PixelDrawer: DrawerComponent; interface PixelCommandItem { id: string; label: string; icon?: ReactNode; shortcut?: string; keywords?: string[]; onSelect: () => void; } interface PixelCommandGroup { heading: string; items: PixelCommandItem[]; } interface PixelCommandProps { open: boolean; onOpenChange: (open: boolean) => void; shortcut?: string; placeholder?: string; emptyMessage?: string; groups: PixelCommandGroup[]; surface?: Surface; } declare const PixelCommand: React.ForwardRefExoticComponent>; interface PixelAlertDialogProps { open: boolean; onOpenChange: (open: boolean) => void; title: string; description?: string; cancelLabel?: string; actionLabel?: string; onAction: () => void | Promise; /** * Called when `onAction` throws / rejects. Receives the thrown value. * When set, the dialog stays OPEN on failure so the consumer can show * an inline error. When unset, errors are silently swallowed (back-compat). */ onError?: (error: unknown) => void; destructive?: boolean; surface?: Surface; } declare const PixelAlertDialog: React.ForwardRefExoticComponent>; /** Public prop bag for {@link PixelSheet}. */ interface PixelSheetProps { open: boolean; onOpenChange: (open: boolean) => void; side?: 'bottom' | 'top'; size?: 'sm' | 'md' | 'lg' | 'full'; dragHandle?: boolean; surface?: Surface; title?: string; description?: string; /** * Accessible name fallback when `title` is omitted. WCAG 4.1.2 requires * every `role="dialog"` to expose a name; supply `title` OR `aria-label`. */ 'aria-label'?: string; children: React.ReactNode; } declare const PixelSheet: React.ForwardRefExoticComponent>; interface PixelComboboxOption { value: string; label: string; group?: string; disabled?: boolean; } interface PixelComboboxProps { value?: string; defaultValue?: string; onChange?: (next: string) => void; options: PixelComboboxOption[]; searchable?: boolean; placeholder?: string; emptyMessage?: string; disabled?: boolean; size?: 'sm' | 'md' | 'lg'; surface?: Surface; label?: string; hint?: string; error?: string; name?: string; id?: string; } declare const PixelCombobox: React.ForwardRefExoticComponent>; interface PixelMultiSelectOption { value: string; label: string; icon?: React.ReactNode; disabled?: boolean; } interface PixelMultiSelectProps { value?: string[]; defaultValue?: string[]; onChange?: (next: string[]) => void; options: PixelMultiSelectOption[]; searchable?: boolean; max?: number; placeholder?: string; clearable?: boolean; surface?: Surface; size?: 'sm' | 'md' | 'lg'; label?: string; hint?: string; error?: string; /** * Hidden-input `name`. Multiple values are serialized as repeated * `` entries; read with * `FormData.getAll(name)`. */ name?: string; id?: string; } declare const PixelMultiSelect: React.ForwardRefExoticComponent>; interface PixelDatePickerProps { value?: Date | null; defaultValue?: Date; onChange?: (date: Date | null) => void; min?: Date; max?: Date; disabledDates?: Date[] | ((d: Date) => boolean); format?: (d: Date) => string; placeholder?: string; clearable?: boolean; presets?: { label: string; value: Date; }[]; surface?: Surface; size?: Size$1; label?: string; hint?: string; error?: string; name?: string; id?: string; /** Hook for tests + custom triggers. */ ['data-testid']?: string; } declare const PixelDatePicker: React.ForwardRefExoticComponent>; type NumSize = 'sm' | 'md' | 'lg'; interface PixelNumberInputProps extends Omit, 'value' | 'defaultValue' | 'onChange' | 'type' | 'size'> { value?: number; defaultValue?: number; onChange?: (next: number) => void; min?: number; max?: number; step?: number; precision?: number; clampBehavior?: 'strict' | 'blur' | 'none'; prefix?: string; suffix?: string; thousandsSeparator?: string; allowNegative?: boolean; hideControls?: boolean; size?: NumSize; surface?: Surface; tone?: Tone; label?: string; hint?: string; error?: string; } declare const PixelNumberInput: React.ForwardRefExoticComponent>; /** Public prop bag for {@link PixelOTPInput}. */ interface PixelOTPInputProps { length?: number; value?: string; defaultValue?: string; onChange?: (next: string) => void; onComplete?: (full: string) => void; mask?: boolean; /** Canonical structural variant. */ variant?: 'numeric' | 'alphanumeric'; /** * @deprecated Use `variant` instead. Retained as alias for one minor. */ type?: 'numeric' | 'alphanumeric'; autoFocus?: boolean; separator?: React.ReactNode; size?: 'sm' | 'md' | 'lg'; surface?: Surface; name?: string; disabled?: boolean; } declare const PixelOTPInput: React.ForwardRefExoticComponent>; type PixelFileRejection = { file: File; reasons: string[]; }; /** Public prop bag for {@link PixelFileUpload}. */ interface PixelFileUploadProps { value?: File[]; defaultValue?: File[]; onChange?: (files: File[]) => void; accept?: string; multiple?: boolean; /** Bytes per file. */ maxSize?: number; maxFiles?: number; dropzone?: boolean; renderItem?: (file: File, remove: () => void) => React.ReactNode; onReject?: (rejections: PixelFileRejection[]) => void; surface?: Surface; size?: Size$1; label?: string; hint?: string; error?: string; disabled?: boolean; /** * Deprecated form-serialization hint. Files are not serializable through * a hidden mirror once `e.target.value` is reset, so this prop no longer * wires to a native input. Read selected files from `onChange` and POST * them manually (e.g. `FormData.append(name, file)` per file). * * Kept in the prop bag so consumers using it don't break — the `id` of * the file input still uses it via the `id` prop fallback path. */ name?: string; id?: string; className?: string; } declare const PixelFileUpload: React.ForwardRefExoticComponent>; /** Public prop bag for {@link PixelFormRoot}. */ interface PixelFormRootProps { form: UseFormReturn; onSubmit: (data: T) => void | Promise; children: React.ReactNode; className?: string; surface?: Surface; } type PixelFormRootGeneric = ((props: PixelFormRootProps & { ref?: React.Ref; }) => React.ReactElement) & { displayName?: string; }; declare const PixelFormRoot: PixelFormRootGeneric; /** Public prop bag for {@link PixelFormField}. */ interface PixelFormFieldProps = FieldPath> { name: TName; rules?: Omit, 'valueAsNumber' | 'valueAsDate' | 'setValueAs' | 'disabled'>; defaultValue?: UseControllerProps['defaultValue']; shouldUnregister?: boolean; render: (args: { field: ControllerRenderProps; fieldState: ControllerFieldState; }) => React.ReactElement; } declare function PixelFormField = FieldPath>({ name, rules, defaultValue, shouldUnregister, render }: PixelFormFieldProps): react_jsx_runtime.JSX.Element; /** Public prop bag for {@link PixelFormItem}. */ interface PixelFormItemProps extends React.HTMLAttributes { children: React.ReactNode; } declare const PixelFormItem: React.ForwardRefExoticComponent>; /** Public prop bag for {@link PixelFormLabel}. */ interface PixelFormLabelProps extends React.LabelHTMLAttributes { surface?: Surface; } declare const PixelFormLabel: React.ForwardRefExoticComponent>; /** Public prop bag for {@link PixelFormControl}. Wraps a single child and clones aria-*/ interface PixelFormControlProps { children: React.ReactElement; } declare const PixelFormControl: React.ForwardRefExoticComponent>; /** Public prop bag for {@link PixelFormDescription}. */ interface PixelFormDescriptionProps extends React.HTMLAttributes { surface?: Surface; } declare const PixelFormDescription: React.ForwardRefExoticComponent>; /** Public prop bag for {@link PixelFormMessage}. */ interface PixelFormMessageProps extends React.HTMLAttributes { surface?: Surface; } declare const PixelFormMessage: React.ForwardRefExoticComponent>; type PixelFormNamespace = PixelFormRootGeneric & { Root: typeof PixelFormRoot; Field: typeof PixelFormField; Item: typeof PixelFormItem; Label: typeof PixelFormLabel; Control: typeof PixelFormControl; Description: typeof PixelFormDescription; Message: typeof PixelFormMessage; }; declare const PixelForm: PixelFormNamespace; type PixelDataTableInstance = Table; type PixelDataTableDensity = 'compact' | 'normal' | 'comfortable'; interface PixelDataTableProps { data: TData[]; columns: ColumnDef[]; sorting?: { id: string; desc: boolean; }[]; onSortingChange?: (next: { id: string; desc: boolean; }[]) => void; filtering?: Record; onFilteringChange?: (next: Record) => void; pagination?: { pageIndex: number; pageSize: number; }; onPaginationChange?: (next: { pageIndex: number; pageSize: number; }) => void; rowSelection?: Record; onRowSelectionChange?: (next: Record) => void; columnVisibility?: Record; onColumnVisibilityChange?: (next: Record) => void; getRowId?: (row: TData, idx: number) => string; density?: PixelDataTableDensity; stickyHeader?: boolean; loading?: boolean; emptyState?: React.ReactNode; onRowClick?: (row: TData) => void; surface?: Surface; className?: string; /** Render with surface-aware border + radius chrome. Defaults to true — data table needs visible chrome. */ bordered?: boolean; } declare function PixelDataTableInner({ data, columns, sorting, onSortingChange, filtering, onFilteringChange, pagination, onPaginationChange, rowSelection, onRowSelectionChange, columnVisibility, onColumnVisibilityChange, getRowId, density, stickyHeader, loading, emptyState, onRowClick, surface: surfaceProp, className, bordered, }: PixelDataTableProps, ref: React.Ref): react_jsx_runtime.JSX.Element; /** * `PixelDataTable` — TanStack-powered surface-aware data table with sorting, * filtering, pagination, row selection, column visibility, density, sticky * header, loading skeletons, and empty state. All state is controllable. * * Polymorphic-ref note: rendered root is a `
` wrapping ``; ref * targets the wrapper div for measurement / scroll control. */ declare const PixelDataTable: (props: PixelDataTableProps & { ref?: React.Ref; }) => ReturnType; type Orientation = 'horizontal' | 'vertical'; interface PixelCarouselProps extends React.HTMLAttributes { /** * Full embla options surface (see embla-carousel docs). Common subset: * `loop`, `align`, `slidesToScroll`, `startIndex`, `dragFree`, * `containScroll`, `inViewThreshold`. `axis` is set internally from * `orientation`. */ opts?: Omit; /** Optional embla plugins (autoplay, autoScroll, etc.). */ plugins?: EmblaPluginType[]; /** Receives the embla API once ready; called again with `undefined` on unmount. */ setApi?: (api: EmblaCarouselType | undefined) => void; orientation?: Orientation; showArrows?: boolean; showDots?: boolean; surface?: Surface; /** Accessible name for the carousel region (required for landmark navigation). */ 'aria-label'?: string; children: React.ReactNode; } interface PixelCarouselItemProps extends React.HTMLAttributes { children: React.ReactNode; } declare const PixelCarouselItem: React.ForwardRefExoticComponent>; declare const PixelCarouselRoot: React.ForwardRefExoticComponent>; type PixelCarouselNamespace = typeof PixelCarouselRoot & { Item: typeof PixelCarouselItem; }; declare const PixelCarousel: PixelCarouselNamespace; type BulletSize = 'sm' | 'md' | 'lg'; type Align = 'left' | 'right'; type LineVariant = 'solid' | 'dashed' | 'dotted'; interface PixelTimelineItemProps extends React.HTMLAttributes { /** Canonical label for the item. */ label?: string; /** * @deprecated Use `label` instead. Retained as alias for one minor. */ title?: string; bullet?: React.ReactNode; time?: string; lineVariant?: LineVariant; children?: React.ReactNode; } declare const PixelTimelineItem: React.ForwardRefExoticComponent>; interface PixelTimelineProps extends React.HTMLAttributes { active?: number; bulletSize?: BulletSize; align?: Align; surface?: Surface; children: React.ReactNode; } declare const PixelTimeline: React.ForwardRefExoticComponent>; type Layout = 'row' | 'grid'; interface PixelStatGroupProps extends React.HTMLAttributes { layout?: Layout; columns?: number; /** Gap between grid cells (stackGap scale). Only applies to layout="grid"; omit for flush cells. */ gap?: StackGapKey; tone?: ToneKey; surface?: Surface; /** Render with surface-aware border + radius chrome. Defaults to true — group needs visible chrome. */ bordered?: boolean; /** Accessible name for the group landmark. Without it, role=group is dropped. */ 'aria-label'?: string; 'aria-labelledby'?: string; children: React.ReactNode; } declare const PixelStatGroup: React.ForwardRefExoticComponent>; type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'; interface PixelAvatarGroupProps extends React.HTMLAttributes { max?: number; size?: AvatarSize; tone?: ToneKey; surface?: Surface; /** Accessible name for the avatar landmark. Without one, role=group is dropped. */ 'aria-label'?: string; 'aria-labelledby'?: string; children: React.ReactNode; } declare const PixelAvatarGroup: React.ForwardRefExoticComponent>; interface PixelChipGroupProps extends Omit, 'onChange' | 'defaultValue'> { /** Controlled selection. */ value?: string[]; /** Uncontrolled initial selection. */ defaultValue?: string[]; onChange?: (next: string[]) => void; multiple?: boolean; surface?: Surface; /** Accessible name (required when single-select so SR users hear the group). */ 'aria-label'?: string; 'aria-labelledby'?: string; children: React.ReactNode; } declare const PixelChipGroup: React.ForwardRefExoticComponent>; interface PixelBadgeGroupProps extends React.HTMLAttributes { max?: number; surface?: Surface; /** * Optional accessible name for the group. When provided, the wrapper renders * `role="group"` so SR users can navigate the landmark; otherwise it stays a * plain div to avoid an unlabeled group announcement. */ 'aria-label'?: string; 'aria-labelledby'?: string; children: React.ReactNode; } declare const PixelBadgeGroup: React.ForwardRefExoticComponent>; interface PixelSparklineProps extends React.SVGAttributes { data: PixelChartDataPoint[]; tone?: ToneKey; size?: ChartSize; showArea?: boolean; surface?: Surface; /** Render with surface-aware border + radius chrome. Defaults to false (no chrome). */ bordered?: boolean; } declare const PixelSparkline: React.ForwardRefExoticComponent>; interface PixelBarChartProps extends React.SVGAttributes { data: PixelChartDataPoint[]; tone?: ToneKey; size?: ChartSize; orientation?: 'vertical' | 'horizontal'; showValues?: boolean; surface?: Surface; /** Render with surface-aware border + radius chrome. Defaults to false (no chrome). */ bordered?: boolean; } declare const PixelBarChart: React.ForwardRefExoticComponent>; interface PixelAreaChartProps extends React.SVGAttributes { data: PixelChartDataPoint[]; tone?: ToneKey; size?: ChartSize; smooth?: boolean; surface?: Surface; /** Render with surface-aware border + radius chrome. Defaults to false (no chrome). */ bordered?: boolean; } declare const PixelAreaChart: React.ForwardRefExoticComponent>; interface PixelChartDataPoint { x: number | string; y: number; label?: string; } type ChartSize = 'sm' | 'md' | 'lg'; type Size = 'sm' | 'md' | 'lg'; interface PixelStepperStepProps extends Omit, 'children'> { label: string; description?: string; icon?: React.ReactNode; loading?: boolean; completed?: boolean; error?: boolean; children?: React.ReactNode; } declare const PixelStepperStep: React.ForwardRefExoticComponent>; interface PixelStepperProps extends Omit, 'children'> { active: number; onStepClick?: (idx: number) => void; orientation?: 'horizontal' | 'vertical'; allowNextStepsSelect?: boolean; size?: Size; surface?: Surface; /** Accessible name for the steps landmark. Defaults to "Progress steps". */ ariaLabel?: string; children: React.ReactNode; } declare const PixelStepperRoot: React.ForwardRefExoticComponent>; type PixelStepperNamespace = typeof PixelStepperRoot & { Step: typeof PixelStepperStep; }; declare const PixelStepper: PixelStepperNamespace; interface PixelMenubarItem { value: string; label: string; icon?: React.ReactNode; shortcut?: string; onSelect?: () => void; submenu?: PixelMenubarItem[]; separator?: boolean; disabled?: boolean; } interface PixelMenubarMenu { label: string; items: PixelMenubarItem[]; } interface PixelMenubarProps extends React.HTMLAttributes { menus: PixelMenubarMenu[]; surface?: Surface; } declare const PixelMenubar: React.ForwardRefExoticComponent>; interface PixelNavigationMenuItem { label: string; href?: string; onSelect?: () => void; content?: ReactNode; icon?: ReactNode; description?: string; } interface PixelNavigationMenuProps extends Omit, 'children'> { items: PixelNavigationMenuItem[]; orientation?: 'horizontal' | 'vertical'; viewport?: boolean; surface?: Surface; /** * Accessible name for the nav landmark. Required when more than one nav * lands on the same page (WCAG 2.4.6). Defaults to "Main navigation". */ ariaLabel?: string; } declare const PixelNavigationMenu: React.ForwardRefExoticComponent>; interface PixelSidebarItemProps { id: string; label: string; icon?: React.ReactNode; badge?: { label: string; tone?: ToneKey; }; href?: string; onSelect?: () => void; active?: boolean; nested?: PixelSidebarItemProps[]; } interface PixelSidebarSectionProps { /** Canonical section label. */ label?: string; /** * @deprecated Use `label` instead. Retained as alias for one minor. */ title?: string; items: PixelSidebarItemProps[]; } interface PixelSidebarProps extends React.HTMLAttributes { collapsible?: boolean; defaultCollapsed?: boolean; collapsed?: boolean; onCollapsedChange?: (next: boolean) => void; sections: PixelSidebarSectionProps[]; header?: React.ReactNode; footer?: React.ReactNode; surface?: Surface; } declare const PixelSidebar: React.ForwardRefExoticComponent>; type SpinnerSize = 'xs' | 'sm' | 'md' | 'lg'; interface PixelSpinnerProps extends React.HTMLAttributes { size?: SpinnerSize; label?: string; surface?: Surface; tone?: ToneKey; /** * When `true`, renders as pure decoration (aria-hidden, no role, no label). * Use inside an already-announcing parent (e.g. a `