export { UseAtlasSummaryTypewriterOptions, useAtlasSummaryTypewriter } from './hooks/use-atlas-summary-typewriter.js';
import { UseShuffleTextOptions } from './hooks/use-shuffle-text.js';
export { SHUFFLE_TEXT_DEFAULT_SYMBOLS, ShuffleTextFrameOptions, getShuffleTextAtFrame, useShuffleText } from './hooks/use-shuffle-text.js';
import * as react_jsx_runtime from 'react/jsx-runtime';

interface ShuffleTextProps extends UseShuffleTextOptions {
    text: string;
    className?: string;
}
/** Per-character matrix shuffle reveal for inline labels and table cells. */
declare function ShuffleText({ text, className, ...options }: ShuffleTextProps): react_jsx_runtime.JSX.Element;

/**
 * Invoice list row → detail A4 sheet morph — single duration anchor with derived beats.
 *
 * Easing follows Emil Kowalski's motion rules: **ease-in-out** for on-screen movement
 * (row → sheet FLIP), **ease-out** for opacity handoffs. See `animations.md` in the
 * design-engineering skill.
 */
/** Row → sheet FLIP morph duration (adjust here; sibling/crossfade beats derive below). */
declare const INVOICE_FORWARD_MORPH_DURATION_MS = 280;
declare const INVOICE_FORWARD_MORPH_DURATION_S: number;
declare const INVOICE_MORPH_SETTLE_BUFFER_MS = 160;
/** Overlay ↔ sheet opacity crossfade in the final morph beat. */
declare const INVOICE_MORPH_CROSSFADE_MS: number;
declare const INVOICE_MORPH_CROSSFADE_S: number;
declare const INVOICE_MORPH_CROSSFADE_START_MS: number;
/** Sibling rows + list chrome — outlasts the morph so both run in parallel. */
declare const INVOICE_NAV_SIBLING_FADE_MS: number;
declare const INVOICE_NAV_SIBLING_FADE_DURATION_S: number;
/** Activating row inner content fade — overlaps the opening morph beat. */
declare const INVOICE_MORPH_SOURCE_CONTENT_FADE_MS: number;
declare const INVOICE_MORPH_SOURCE_CONTENT_FADE_DURATION_S: number;
/** Delay before fading activating-row inner content (overlay replaces the shell first). */
declare const INVOICE_MORPH_SOURCE_CONTENT_FADE_START_MS: number;
/**
 * @deprecated Route swap runs on the next animation frame; kept for tests/docs only.
 */
declare const INVOICE_NAV_HANDOFF_DELAY_MS = 0;
/** @deprecated Use immediate overlay handoff + `requestAnimationFrame` route swap. */
declare function getInvoiceNavNavigateDelayMs(): number;

declare const INVOICE_MORPH_EASE_IN_OUT: CubicBezierEase;
declare const INVOICE_MORPH_EASE_OUT: CubicBezierEase;
/** Geometry morph: transform + radius (same duration/ease as sheet + carried labels). */
declare const invoiceForwardMorphTransition: {
    type: "tween";
    duration: number;
    ease: CubicBezierEase;
};
/** Opacity handoffs: ease-out enter/exit (Emil). */
declare const invoiceMorphCrossfadeTransition: {
    type: "tween";
    duration: number;
    ease: CubicBezierEase;
};
/** Detail chrome reveal — syncs with morph crossfade start. */
declare const INVOICE_DETAIL_REVEAL_DELAY_S: number;

/**
 * Transitions.dev — Card resize
 * @see https://transitions.dev
 *
 * CSS: `.t-resize` in `/design-system/styles/motion/card-resize.css`
 * Cross-route morphs (e.g. invoice list row → detail sheet) use the same duration
 * and easing via {@link cardResizeFramerLayoutTransition} on Framer `layoutId`.
 */
declare const CARD_RESIZE_DURATION_MS = 300;
declare const CARD_RESIZE_DURATION_S: number;
/** Matches `--resize-ease` in card-resize.css */
type CubicBezierEase = [number, number, number, number];
declare const CARD_RESIZE_EASE: CubicBezierEase;
declare const CARD_RESIZE_EASE_CSS = "cubic-bezier(0.22, 1, 0.36, 1)";
/** Framer shared-layout morph — same feel as `.t-resize` width/height tween. */
declare const cardResizeFramerLayoutTransition: {
    layout: {
        type: "tween";
        duration: number;
        ease: CubicBezierEase;
    };
};
/** List prepare beat before route swap + card resize morph. */
declare const INVOICE_NAV_PREPARE_MS = 50;
declare const INVOICE_NAV_PREPARE_DURATION_S: number;
declare const invoiceNavPrepareTransition: {
    duration: number;
    ease: CubicBezierEase;
};

declare const invoiceNavSiblingFadeTransition: {
    duration: number;
    ease: CubicBezierEase;
};
declare const invoiceMorphSourceContentFadeTransition: {
    duration: number;
    ease: CubicBezierEase;
};
/** Clear forward morph state after prepare + card resize + small buffer. */
declare function getInvoiceNavMorphClearMs(): number;

export { CARD_RESIZE_DURATION_MS, CARD_RESIZE_DURATION_S, CARD_RESIZE_EASE, CARD_RESIZE_EASE_CSS, type CubicBezierEase, INVOICE_DETAIL_REVEAL_DELAY_S, INVOICE_FORWARD_MORPH_DURATION_MS, INVOICE_FORWARD_MORPH_DURATION_S, INVOICE_MORPH_CROSSFADE_MS, INVOICE_MORPH_CROSSFADE_S, INVOICE_MORPH_CROSSFADE_START_MS, INVOICE_MORPH_EASE_IN_OUT, INVOICE_MORPH_EASE_OUT, INVOICE_MORPH_SETTLE_BUFFER_MS, INVOICE_MORPH_SOURCE_CONTENT_FADE_DURATION_S, INVOICE_MORPH_SOURCE_CONTENT_FADE_MS, INVOICE_MORPH_SOURCE_CONTENT_FADE_START_MS, INVOICE_NAV_HANDOFF_DELAY_MS, INVOICE_NAV_PREPARE_DURATION_S, INVOICE_NAV_PREPARE_MS, INVOICE_NAV_SIBLING_FADE_DURATION_S, INVOICE_NAV_SIBLING_FADE_MS, ShuffleText, type ShuffleTextProps, UseShuffleTextOptions, cardResizeFramerLayoutTransition, getInvoiceNavMorphClearMs, getInvoiceNavNavigateDelayMs, invoiceForwardMorphTransition, invoiceMorphCrossfadeTransition, invoiceMorphSourceContentFadeTransition, invoiceNavPrepareTransition, invoiceNavSiblingFadeTransition };
