import type { ButtonHTMLAttributes, HTMLAttributes, ReactNode } from 'react';
/**
* NeoPop primitives mirrored from the OttoRouter dashboard
* (`setu/apps/web/src/components/neopop`) but re-expressed with Tailwind
* arbitrary values so they work inside the product's shadcn-style theme
* without adding global stylesheet rules to every app shell.
*
* The palette lives on {@link NEO_SCOPE}: put that class on the root of any
* NeoPop surface and every descendant inherits the `--np-*` custom properties.
*/
export type NeoTone = 'surface' | 'card' | 'bg' | 'ink';
/** The four brand colours. Blue is primary, lime positive, yellow caution,
* coral danger — the same semantics the OttoRouter dashboard uses. */
export type NeoAccent = 'blue' | 'lime' | 'yellow' | 'coral';
export type NeoElevation = 'none' | 'sm' | 'md' | 'lg';
export declare function cn(...parts: Array): string;
/** Near-square corners keep the boxy silhouette while avoiding hard pixels. */
export declare const NEO_RADIUS = "rounded-[3px]";
/** 11px / 0.18em / 600 uppercase — the NeoPop micro-label. */
export declare const NEO_EYEBROW = "text-[11px] font-semibold uppercase leading-none tracking-[0.18em]";
/**
* Declares the whole NeoPop palette as inherited custom properties. The four
* accents hold the same value in both themes so the dashboard reads
* identically light or dark; only the structural edge/shadow neutrals flip,
* because a hard offset shadow has to invert to stay visible.
*/
export declare const NEO_SCOPE: string;
export declare const NEO_EDGE = "border-2 border-[rgb(var(--np-edge))]";
export declare const ELEVATION: Record;
/** Background + foreground pair for each neutral tone. */
export declare const TONE_SURFACE: Record;
/** Solid accent fill, for chart bars, meters, and active controls. */
export declare const ACCENT_FILL: Record;
/** Readable foreground on top of the matching {@link ACCENT_FILL}. */
export declare const ACCENT_ON: Record;
/** Foreground-only accent colour, for values and icons on neutral surfaces. */
export declare const ACCENT_TEXT: Record;
/**
* Deep shade of each accent. A filled accent surface takes this for its border
* and hard drop, so the extrusion reads as the fill in shadow rather than ink.
*/
export declare const ACCENT_CAST_BORDER: Record;
export declare const ACCENT_CAST_SHADOW: Record;
/**
* Colours the edge and hard shadow in the accent itself while the fill stays
* neutral — an outlined-and-dropped card.
*/
export declare const ACCENT_TINT: Record;
export declare const ACCENT_ORDER: NeoAccent[];
export interface NeoPanelProps extends HTMLAttributes {
as?: 'div' | 'section' | 'article' | 'header' | 'aside' | 'li';
tone?: NeoTone;
/** Draws the edge and drop in a brand colour while the fill stays neutral. */
accent?: NeoAccent;
elevation?: NeoElevation;
children?: ReactNode;
}
/**
* Bordered dashboard surface. Elevation is opt-in: only hero-level panels and
* stat tiles carry the hard drop, so a page of panels does not read as noise.
*/
export declare function NeoPanel({ as: Tag, tone, accent, elevation, className, children, ...rest }: NeoPanelProps): import("react/jsx-runtime").JSX.Element;
/** Mono uppercase micro-label that opens each panel and stat. */
export declare function NeoEyebrow({ children, className, }: {
children: ReactNode;
className?: string;
}): import("react/jsx-runtime").JSX.Element;
export interface NeoBadgeProps {
children: ReactNode;
accent?: NeoAccent;
/** Outline-only rendering for lower-emphasis metadata. */
outline?: boolean;
title?: string;
className?: string;
}
/** Compact boxy label used for status chips and deltas. */
export declare function NeoBadge({ children, accent, outline, title, className, }: NeoBadgeProps): import("react/jsx-runtime").JSX.Element;
export interface NeoTabOption {
value: T;
label: ReactNode;
title?: string;
}
export interface NeoTabsProps {
options: ReadonlyArray>;
value: T;
onChange: (value: T) => void;
/** Fill colour of the active cell. */
accent?: NeoAccent;
'aria-label': string;
className?: string;
}
/**
* Segmented control: a bordered tray of flat cells where the selected cell
* lifts out as a filled accent block with its own cast shadow.
*/
export declare function NeoTabs({ options, value, onChange, accent, className, 'aria-label': ariaLabel, }: NeoTabsProps): import("react/jsx-runtime").JSX.Element;
export interface NeoIconButtonProps extends ButtonHTMLAttributes {
label: string;
children: ReactNode;
}
/** Square hard-edged action; translates into its shadow on press. */
export declare function NeoIconButton({ label, children, className, ...rest }: NeoIconButtonProps): import("react/jsx-runtime").JSX.Element;
/** Legend swatch: a small hard square in the accent colour. */
export declare function NeoSwatch({ accent, label, }: {
accent: NeoAccent;
label: string;
}): import("react/jsx-runtime").JSX.Element;
/** Faint 44px NeoPop grid, used behind empty states. */
export declare const NEO_GRID_BG = "bg-[linear-gradient(to_right,rgb(var(--np-edge)/0.09)_1px,transparent_1px),linear-gradient(to_bottom,rgb(var(--np-edge)/0.09)_1px,transparent_1px)] bg-[length:44px_44px]";
export declare function NeoEmptyState({ children }: {
children: ReactNode;
}): import("react/jsx-runtime").JSX.Element;
//# sourceMappingURL=neopop.d.ts.map