export { Action, ActionProps, Button, ButtonProps } from './button.js'; export { AccordionOrientation, AccordionPanel, AccordionPanelContent, AccordionPanelContentProps, AccordionPanelProps, AccordionPanelSection, AccordionPanelSectionProps, AccordionPanelTrigger, AccordionPanelTriggerProps, SectionRenderState, SectionRenderable, useAccordionPanel, useAccordionSection } from './accordion-panel.js'; export { Field, FieldProps } from './field.js'; export { Input, InputProps } from './input.js'; export { Textarea, TextareaProps } from './textarea.js'; export { Select, SelectProps } from './select.js'; export { Checkbox, CheckboxProps } from './checkbox.js'; export { CheckboxGroup, CheckboxGroupProps } from './checkbox-group.js'; export { RadioGroup, RadioGroupProps } from './radio-group.js'; export { Switch, SwitchProps } from './switch.js'; export { Slider, SliderProps } from './slider.js'; export { MultiSwitch, MultiSwitchProps } from './multi-switch.js'; export { DatePicker, DatePickerProps } from './date-picker.js'; export { A as AffixPosition, F as FieldMode, I as InputAffixProps, a as InputBaseProps, b as InputOption, c as InputOptionGroup } from './inputs.types-vl3PAc4q.js'; export { D as DisplayValue, a as DisplayValueProps, F as FieldModeContext, b as FieldModeContextValue, c as Form, d as FormProps, e as FormProvider, f as FormProviderProps, u as useFieldMode } from './FieldMode.context-DNyItEKV.js'; export { d as Carousel, e as CarouselContextValue, b as CarouselControlsProps, C as CarouselPanelsProps, f as CarouselProps, a as CarouselSlideProps, c as CarouselStepsProps, g as CarouselVariant, u as useCarousel } from './Carousel.context-Ba3gKZHQ.js'; export { ColorPicker, ColorPickerProps } from './color-picker.js'; export { E as EMOJI_CATEGORY_ORDER, a as EMOJI_DATA, b as EMOJI_ENTRIES, c as Emoji, d as EmojiCategory, e as EmojiCategoryKey, f as EmojiEntry, g as EmojiFlatEntry, h as EmojiProps, S as SKIN_TONES, i as SkinTone, j as applyTone, k as find, l as hasSkinTones, r as resolve, s as search, m as skinTones } from './index-BktWpyRH.js'; export { EmojiSelect, EmojiSelectProps } from './emoji-select.js'; export { Table, TableBodyProps, TableCellProps, TableColumnProps, TableHeadProps, TablePaginationProps, TableProps, TableRowProps, TableRowTrayProps, TableSearchProps, TableTrayProps } from './table.js'; export { Portal, PortalProps } from './portal.js'; export { Heading, HeadingProps } from './heading.js'; export { Text, TextProps } from './text.js'; export { Separator, SeparatorProps } from './separator.js'; export { Badge, BadgeProps } from './badge.js'; export { Icon, IconProps, IconSet, configureIcons, registerIconAddendum, registerIconSet, registerIcons } from './icon.js'; export { Avatar, AvatarProps } from './avatar.js'; export { Skeleton, SkeletonProps } from './skeleton.js'; export { Progress, ProgressProps } from './progress.js'; export { Brand, BrandMark, BrandMarkProps, BrandProps } from './brand.js'; export { Eyebrow, EyebrowProps } from './eyebrow.js'; export { Container, ContainerProps } from './container.js'; export { Section, SectionProps } from './section.js'; export { Grid, GridProps } from './grid.js'; export { StatList, StatListItem, StatListProps } from './stat-list.js'; export { Kbd, KbdProps } from './kbd.js'; export { IndexList, IndexListItem, IndexListProps } from './index-list.js'; export { PullQuote, PullQuoteProps } from './pull-quote.js'; export { Stat, StatBand, StatBandProps, StatProps } from './stat.js'; export { Profile, ProfileProps } from './profile.js'; export { d as Card, a as CardBodyProps, b as CardFooterProps, C as CardHeaderProps, e as CardProps } from './Card-BZ5F6-wd.js'; export { Callout, CalloutProps } from './callout.js'; export { FauxClient, FauxClientProps } from './faux-client.js'; export { StickyNote, StickyNoteColor, StickyNoteProps } from './sticky-note.js'; export { b as Timeline, a as TimelineBlockProps, c as TimelineEvent, T as TimelineItemProps, d as TimelineOrientation, e as TimelineProps, f as TimelineVariant } from './Timeline-Cvrd7N7-.js'; export { TimeGrid, TimeGridProps, TimeGridTone } from './time-grid.js'; export { Marquee, MarqueeDirection, MarqueeProps } from './marquee.js'; export { Tooltip, TooltipProps } from './tooltip.js'; export { Popover, PopoverContentProps, PopoverContextValue, PopoverProps, PopoverTriggerProps, usePopover } from './popover.js'; export { Dropdown, DropdownContextValue, DropdownItemProps, DropdownItemsProps, DropdownProps, DropdownSeparatorProps, DropdownTriggerProps, useDropdown } from './dropdown.js'; export { ContextMenu, ContextMenuContentProps, ContextMenuContextValue, ContextMenuItemProps, ContextMenuProps, ContextMenuSeparatorProps, ContextMenuTriggerProps, useContextMenu } from './context-menu.js'; export { Modal, ModalBodyProps, ModalContextValue, ModalFooterProps, ModalHeaderProps, ModalProps, useModal } from './modal.js'; export { Drawer, DrawerAttach, DrawerBodyProps, DrawerContainerProps, DrawerContextValue, DrawerFooterProps, DrawerHeaderProps, DrawerProps, DrawerSide, DrawerSize, useDrawer } from './drawer.js'; export { Toast, ToastAction, ToastContextValue, ToastData, ToastPosition, ToastProviderProps, ToastVariant, useToast } from './toast.js'; export { Command, CommandContextValue, CommandEmptyProps, CommandGroupProps, CommandInputProps, CommandItemProps, CommandListProps, CommandProps, useCommand } from './command.js'; export { Tabs, TabsContextValue, TabsListProps, TabsPanelProps, TabsPanelsProps, TabsProps, TabsTabProps, TabsVariant, useTabs } from './tabs.js'; export { Accordion, AccordionContentProps, AccordionContextValue, AccordionItemProps, AccordionProps, AccordionTriggerProps, useAccordion } from './accordion.js'; export { Breadcrumbs, BreadcrumbsItemProps, BreadcrumbsProps } from './breadcrumbs.js'; export { Navbar, NavbarBrandProps, NavbarContextValue, NavbarItemProps, NavbarItemsProps, NavbarProps, NavbarToggleProps, useNavbar } from './navbar.js'; export { Pagination, PaginationProps } from './pagination.js'; export { Autocomplete, AutocompleteOption, AutocompleteProps } from './autocomplete.js'; export { Pillbox, PillboxProps } from './pillbox.js'; export { OtpInput, OtpInputProps } from './otp-input.js'; export { FileUpload, FileUploadContextValue, FileUploadDropzoneProps, FileUploadListProps, FileUploadProps, useFileUpload } from './file-upload.js'; export { TimePicker, TimePickerProps } from './time-picker.js'; export { Calendar, CalendarMode, CalendarProps, DateRange } from './calendar.js'; export { Composer, ComposerProps } from './composer.js'; export { Chart, ChartAreaProps, ChartBarData, ChartBarProps, ChartCommonProps, ChartDonutData, ChartDonutProps, ChartHorizontalBarProps, ChartLineProps, ChartPieData, ChartPieProps, ChartSeries, ChartSparklineProps, ChartStackedBarProps } from './chart.js'; export { Editor, EditorAction, EditorContentProps, EditorContextValue, EditorProps, EditorSourceToggleProps, EditorToolbarProps, useEditor } from './editor.js'; export { CodeView, CodeViewProps } from './code-view.js'; export { ContentRenderer, ContentRendererProps } from './content-renderer.js'; export { R as RenderExtension, a as RenderExtensionProps, r as registerExtension, b as registerExtensions } from './extensions-6PVd3-vB.js'; export { Menu, MenuContextValue, MenuGroupProps, MenuItemProps, MenuOrientation, MenuProps, MenuSubmenuProps, useMenu } from './menu.js'; export { Sidebar, SidebarCollapseMode, SidebarContextValue, SidebarGroupProps, SidebarItemProps, SidebarProps, SidebarSubmenuProps, SidebarToggleProps, useSidebar } from './sidebar.js'; export { MobileMenu, MobileMenuBottomBarProps, MobileMenuContextValue, MobileMenuFlyoutProps, MobileMenuItemProps, MobileMenuSide, MobileMenuVariant, useMobileMenu } from './mobile-menu.js'; export { Kanban, KanbanCardMoveHandler, KanbanCardProps, KanbanColumnHandleProps, KanbanColumnMoveHandler, KanbanColumnProps, KanbanContextValue, KanbanProps, useKanban } from './kanban.js'; export { DropPosition, TreeNav, TreeNavContextValue, TreeNavProps, TreeNodeData, TreeNodeProps, useTreeNav } from './tree-nav.js'; export { FileBrowser, FileBrowserContextValue, FileBrowserNewFolder, FileBrowserNodeProps, FileBrowserPathBarProps, FileBrowserProps, FileBrowserProvider, FileBrowserRow, FileBrowserToolbarProps, FileBrowserTreeProps, FileEntry, FileKind, FileLoadStatus, FileSelectMode, FileSnapshotNode, FileSort, FileSortDirection, FileSortField, useFileBrowser, validateFolderName } from './file-browser.js'; export { M as MediaKind, a as MediaViewer, b as MediaViewerProps, R as ResolveMediaTypeInput, r as resolveMediaType } from './index-IeivGsNg.js'; import { P as Placement } from './types-8Sv0rCjw.js'; export { A as ActionColor, B as ButtonColor, C as Color, S as Size, V as Variant } from './types-8Sv0rCjw.js'; import { RefObject } from 'react'; export { ReasonTag, ReasonTagProps, ReasonTagSource, ReasonTagTheme } from './reason-tag.js'; export { MoodMeter, MoodMeterProps } from './mood-meter.js'; export { PromptAttachment, PromptCmd, PromptInput, PromptInputProps, PromptMention } from './prompt-input.js'; export { ChatDrawer, ChatDrawerProps, ChatDrawerTab } from './chat-drawer.js'; export { ControlledAdapterHandle, InputTag, InputTagAdapter, InputTagAdapterState, InputTagProps, InputTagTrigger, InputTagTriggers, contentEditableAdapter, controlledAdapter, inputAdapter, textareaAdapter } from './input-tag.js'; export { MagicWand, MagicWandAction, MagicWandAppearance, MagicWandProps, MagicWandSelection } from './magic-wand.js'; export { ImageViewer } from './image-viewer.js'; export { I as ImageViewerProps, a as ImageViewerViewport } from './ImageViewer.types-BaqlDeuo.js'; export { VideoViewer } from './video-viewer.js'; export { V as VideoViewerProps } from './VideoViewer.types-_AwQ8DQr.js'; export { AudioViewer } from './audio-viewer.js'; export { A as AudioViewerProps } from './AudioViewer.types-CyhmQVQd.js'; export { PdfViewer } from './pdf-viewer.js'; export { P as PdfViewerProps } from './PdfViewer.types-_u6vboSl.js'; export { J as JSON_FIELD_TYPES, a as JsonArray, b as JsonEditor, c as JsonEditorActivity, d as JsonEditorEdit, e as JsonEditorIssue, f as JsonEditorNode, g as JsonEditorPendingEdit, h as JsonEditorProps, i as JsonFieldType, j as JsonKeyMapEntry, k as JsonKeyRule, l as JsonObject, m as JsonPath, n as JsonPrimitive, o as JsonValue, P as ParsedKeyMap, p as applyJsonEdit, q as describeEdit, r as findJsonConflicts, s as getAtPath, t as inferType, u as parseKeyMap, v as parsePath, w as pathToString, x as resolveKeyRule, y as typeMatches } from './index-DWJGBEW9.js'; /** * A class value: a string, a number, a conditional map, an array of any of * those, or nothing. Mirrors what `clsx` accepted, because every component in * this package already passes these shapes. */ type ClassValue = string | number | bigint | null | undefined | false | ClassDictionary | ClassValue[]; type ClassDictionary = Record; declare function cn(...inputs: ClassValue[]): string; /** * HTML and URL sanitization utilities. * * Hand-rolled (no third-party deps) using browser-native `DOMParser`. Designed * for the trust model "consumer passes user-generated markdown/HTML to a * react-fancy component" — strips script tags, event handlers, and dangerous * URI schemes from `href`/`src` attributes. * * For server-side rendering (no `window`), `sanitizeHtml` returns the input * unchanged. Consumers SSR-rendering untrusted content should sanitize on the * server with their own pipeline. */ /** * Validate a URL/href against an allow-list of safe protocols. Returns the * input if safe, or `undefined` if it begins with a dangerous scheme like * `javascript:`, `data:`, or `vbscript:`. Relative URLs and fragment links * are allowed. */ declare function sanitizeHref(href: string | undefined | null): string | undefined; /** * Sanitize an HTML string by removing dangerous tags (script, iframe, etc.), * event-handler attributes (`onclick`, `onerror`, ...), and dangerous URI * schemes in `href`/`src` attributes. * * Uses the browser's `DOMParser`. In non-browser environments returns the * input unchanged — sanitize on the server in those cases. */ declare function sanitizeHtml(html: string): string; declare function useControllableState(controlledValue: T | undefined, defaultValue: T, onChange?: (value: T) => void): [T, (value: T | ((prev: T) => T)) => void]; declare function useOutsideClick(ref: RefObject, handler: (event: MouseEvent | TouchEvent) => void, enabled?: boolean, ignoreRef?: RefObject): void; declare function useEscapeKey(handler: () => void, enabled?: boolean): void; declare function useFocusTrap(ref: RefObject, enabled?: boolean): void; interface FloatingPosition { x: number; y: number; placement: Placement; } interface UseFloatingPositionOptions { placement?: Placement; offset?: number; enabled?: boolean; } declare function useFloatingPosition(anchorRef: RefObject, floatingRef: RefObject, options?: UseFloatingPositionOptions): FloatingPosition; interface UseAnimationOptions { open: boolean; enterClass: string; exitClass: string; } interface UseAnimationReturn { mounted: boolean; className: string; ref: React.RefObject; } declare function useAnimation({ open, enterClass, exitClass, }: UseAnimationOptions): UseAnimationReturn; declare function useId(prefix?: string): string; interface ViewportState { panX: number; panY: number; zoom: number; } interface UsePanZoomOptions { viewport: ViewportState; setViewport: (vp: ViewportState | ((prev: ViewportState) => ViewportState)) => void; minZoom: number; maxZoom: number; pannable: boolean; zoomable: boolean; containerRef: React.RefObject; } interface UsePanZoomReturn { containerProps: { onPointerDown: (e: React.PointerEvent) => void; onPointerMove: (e: React.PointerEvent) => void; onPointerUp: (e: React.PointerEvent) => void; }; isPanning: boolean; } declare function usePanZoom({ viewport, setViewport, minZoom, maxZoom, pannable, zoomable, containerRef, }: UsePanZoomOptions): UsePanZoomReturn; interface NodeRect { x: number; y: number; width: number; height: number; } interface UseNodeRegistryReturn { registerNode: (id: string, rect: NodeRect) => void; unregisterNode: (id: string) => void; nodeRects: Map; version: number; } declare function useNodeRegistry(): UseNodeRegistryReturn; /** * Light / dark / **system** theming. * * `styles.css` in this package defines the dark contract — it redefines the * whole `--color-secondary-*` scale under `:where(.dark)` so that "900" always * means strongest foreground and "50" always means faintest surface. This module * is the other half of that contract: the thing that decides when `.dark` is on. * * It lives here rather than in each app because every consumer was hand-rolling * it, and every hand-rolled copy had the same two holes: * * - **No live listener.** The OS preference was read once at boot, so changing * the system theme with the page open did nothing. That is a default, not a * "system" mode. * - **No way back.** Choosing light or dark wrote to storage forever, so * "follow my system" was unreachable after a single click. * * Both are fixed by treating **"system" as the absence of a stored choice** * rather than as a third stored value. * * Every export is safe to call during SSR, where it is a no-op that resolves to * `"light"`. Pair it with `useTheme`, which deliberately renders `system/light` * on the server and syncs in an effect — this project has paid for hydration * mismatches caused by reading the real theme during render. */ type ThemePreference = "light" | "dark" | "system"; type ResolvedTheme = "light" | "dark"; /** * Deliberately the key the showcase already used, so adopting this module keeps * a returning visitor's saved choice instead of silently resetting it. */ declare const THEME_STORAGE_KEY = "fancy-ui.theme"; type ThemeListener = (resolved: ResolvedTheme, preference: ThemePreference) => void; /** The stored choice, or `"system"` when there isn't one. */ declare function getThemePreference(): ThemePreference; /** What is actually on screen, as opposed to what the user asked for. */ declare function resolveTheme(preference?: ThemePreference): ResolvedTheme; /** * Choose a theme. `"system"` REMOVES the stored value rather than storing the * string — an absent choice is what lets the OS keep speaking for the user. */ declare function setThemePreference(preference: ThemePreference): void; /** Observe theme changes. Returns an unsubscribe. */ declare function subscribeTheme(listener: ThemeListener): () => void; /** * Apply the current theme and start following the OS. Call once, as early as * possible — before first paint if you want to avoid a flash of the wrong * theme. Returns a disposer; calling it again is harmless. */ declare function initTheme(options?: { storageKey?: string; }): () => void; type UseThemeResult = { /** What the user asked for, including `"system"`. */ preference: ThemePreference; /** What is actually on screen. */ resolved: ResolvedTheme; setPreference: (preference: ThemePreference) => void; }; /** * Read and set the theme from a component, re-rendering when it changes — * including when the OS theme changes underneath a `"system"` preference. * * The initial state is deliberately `system` / `light` rather than the real * theme: the server has neither storage nor an OS preference, so reading the * truth during render is exactly the hydration mismatch this project has * already chased down more than once. The effect syncs immediately on mount. */ declare function useTheme(): UseThemeResult; export { type NodeRect, Placement, type ResolvedTheme, THEME_STORAGE_KEY, type ThemePreference, type UseThemeResult, cn, getThemePreference, initTheme, resolveTheme, sanitizeHref, sanitizeHtml, setThemePreference, subscribeTheme, useAnimation, useControllableState, useEscapeKey, useFloatingPosition, useFocusTrap, useId, useNodeRegistry, useOutsideClick, usePanZoom, useTheme };