import { Control } from 'react-hook-form'; import { CSSProperties } from 'react'; import { default as default_2 } from 'react'; import { FC } from 'react'; import { FieldPath } from 'react-hook-form'; import { FieldValues } from 'react-hook-form'; import { JSX as JSX_2 } from 'react/jsx-runtime'; import { NamedExoticComponent } from 'react'; import { ReactNode } from 'react'; import { UseFormReturn } from 'react-hook-form'; export declare const Accordion: default_2.FC; declare interface AccordionBaseProps { className?: string; children?: default_2.ReactNode; /** * Visual style. `default` is the flat list row (arrow leading, row dividers, * hover background). `sunken` draws the section as a sunken card (dimmed * rounded container, arrow pinned right, no dividers/hover) — used for stacked * detail sections in side panels and detail pages (see `CollapsibleSection`). */ variant?: 'default' | 'sunken'; /** * Content pinned to the right of the header, OUTSIDE the toggle button — so it may * be interactive (e.g. a Checkbox) without nesting a button inside a button. */ trailing?: default_2.ReactNode; defaultExpanded?: boolean; isExpanded?: boolean; onToggle?: (expanded: boolean) => void; /** Disables the toggle (and its hover). Trailing controls manage their own state. */ disabled?: boolean; /** * Pin the header row to the top of the nearest scroll container so it stays * reachable while the body scrolls. Needs a scroll ancestor that clips without * trapping sticky — e.g. a `` (`overflow: hidden` traps it). */ stickyHeader?: boolean; /** Offset (px) from the top of the scroll container when `stickyHeader` is set. */ stickyTopOffset?: number; /** * Animate the expand/collapse height (default `true`). Set `false` for an instant * open — the body isn't clipped, so a `position: sticky` child pins immediately with * no post-animation settle. */ animate?: boolean; } /** * Requires at least one of `title` (simple text header) or `header` (rich ReactNode * content for the toggle area, e.g. avatar + badges) so the toggle is never empty. */ export declare type AccordionProps = AccordionBaseProps & ({ title: string; header?: default_2.ReactNode; } | { title?: string; header: default_2.ReactNode; }); export declare const AccountIcon: React.FC; export declare const AccountsIcon: React.FC; export declare const ActionBar: default_2.FC; export declare interface ActionBarItem { label: string; onClick?: () => void; disabled?: boolean; icon?: default_2.ReactNode; tooltip?: string; variant?: BaseButtonProps['variant']; size?: BaseButtonProps['size']; radius?: BaseButtonProps['radius']; /** Renders a vertical rule before this button (and a menu divider when collapsed). */ dividerBefore?: boolean; } export declare interface ActionBarProps { buttons: ActionBarItem[]; /** Container width, in px, below which the row collapses into a single menu. */ collapseBelow?: number; /** Accessible name for the collapsed menu trigger. */ menuLabel?: string; className?: string; } /** * ActionMenu is a kebab-style overflow action menu. The trigger is a square * icon-only outline Button (three-dot icon by default); on click, a popover * appears with the given items. The popover is rendered to document.body via * createPortal so it escapes any Shadow DOM or overflow:hidden ancestors — * which is also why the popover is styled inline rather than with Tailwind: * the scoped stylesheet does not reach document.body. */ export declare const ActionMenu: default_2.FC; export declare type ActionMenuItem = { type?: 'item'; key: string; label: default_2.ReactNode; onClick?: () => void; disabled?: boolean; danger?: boolean; tooltip?: string; icon?: default_2.ReactNode; } | { type: 'divider'; key: string; }; export declare interface ActionMenuProps { items: ActionMenuItem[]; label?: string; triggerIcon?: default_2.ReactNode; minWidth?: number; size?: 'small' | 'xsmall'; /** * Shows `label` beside the icon instead of leaving it to the accessible name. For a menu * that is the point of its corner rather than an overflow for a row that already reads — * a kebab nobody can name is only safe when the row it belongs to says what it acts on. */ showLabel?: boolean; /** Trigger's Button variant. Defaults to `outline`, the overflow-kebab look. */ variant?: ButtonVariant; } export declare const AddIcon: React.FC; export declare const AdvancedLogsIcon: React.FC; export declare const Alert: default_2.FC; declare interface AlertProps { type?: AlertType; message: string; hasMargin?: boolean; className?: string; children?: default_2.ReactNode; isExpanded?: boolean; onToggle?: (expanded: boolean) => void; } export declare type AlertType = 'info' | 'success' | 'error' | 'warning' | 'assistant'; export declare const ApiKeysIcon: React.FC; export declare const AppLogo: default_2.FC; export declare interface AppLogoProps { /** Connector logo URL. Falls back to a coloured initial tile when missing or broken. */ src?: string; /** Connector name — the accessible label, the fallback initial, and the visible text. */ name: string; /** Renders the name beside the mark. Omit for a bare logo (e.g. inside a dense row). */ showName?: boolean; /** Pixel size of the square mark. */ size?: number; nameSize?: FontSize; /** Defaults to `normal`. Raise it when the logo doubles as a page title. */ nameWeight?: FontWeight; /** Rendered as a tag after the name, e.g. `v1.2.0` or `Legacy`. */ version?: string; /** Truncates a long name with an ellipsis and reveals the full value on hover. */ truncate?: boolean; className?: string; } /** * Apply a custom theme while preserving the current theme mode (light/dark) */ export declare function applyCustomTheme(customTheme: PartialMalachiteTheme): void; /** * Apply the dark theme */ export declare function applyDarkTheme(): void; /** * Apply the default (light) theme */ export declare function applyLightTheme(): void; /** * Apply a custom theme to Malachite components * This function sets CSS custom properties that will be used by all Malachite components * Works with Shadow DOM isolation by applying to all registered shadow roots */ export declare function applyTheme(theme: PartialMalachiteTheme): void; /** Scope the active theme (base mode + any persisted custom overrides) to one element/root, without changing global mode. Used by . */ export declare function applyThemeVars(target: HTMLElement | ShadowRoot, mode: ThemeMode): void; export declare const ArchiveIcon: React.FC; export declare const ArrowLeftIcon: React.FC; export declare const ArrowUpIcon: React.FC; export declare const ArrowUpRightIcon: React.FC; export declare const AuthenticationIcon: React.FC; /** * A logo/initial avatar. Renders `src` when available, otherwise a coloured tile * with the first letter of `name`. Encapsulates the fallback colour so consumers * never hand-roll it. */ export declare const Avatar: default_2.FC; export declare interface AvatarProps { /** Image URL (logo/photo). Falls back to the initial of `name` when missing or it fails to load. */ src?: string; /** Used for the initial fallback and as the image alt / accessible label. */ name?: string; /** Pixel size of the (square) avatar. */ size?: number; shape?: AvatarShape; className?: string; } export declare type AvatarShape = 'square' | 'circle'; declare type BaseButtonProps = default_2.ComponentProps; export declare const BaseFormComponent: default_2.FC; declare interface BaseFormComponentProps { label?: string; description?: string; hint?: string; rightSideContent?: RightSideContent; tooltip?: string; required?: boolean; requiredIndicator?: RequiredIndicator; name: FieldPath; defaultValue?: string; loading?: boolean; formControl?: Control; loadingComponent: default_2.ReactNode; children?: FormItemChildren; /** Accessibility wiring, from `useFormFieldIds` — see `FormFieldIds`. */ controlId?: string; labelId?: string; descriptionId?: string; hintId?: string; fullWidth?: boolean; } declare interface BaseSkeletonProps { active?: boolean; className?: string; } export declare const BellIcon: React.FC; export declare const BellSlashIcon: React.FC; export declare const BiDirectionalArrowsIcon: React.FC; export declare interface BreadcrumbLink { name: default_2.ReactNode; url?: string; isRoot?: boolean; } export declare const Breadcrumbs: default_2.FC; export declare interface BreadcrumbsProps { links: BreadcrumbLink[]; actions?: PageAction[]; renderLink?: RenderBreadcrumbLink; className?: string; style?: default_2.CSSProperties; } export declare const buildActionBarMenuItems: (buttons: ActionBarItem[]) => ActionMenuItem[]; export declare const Button: default_2.ForwardRefExoticComponent>; declare interface ButtonDefinition { label: string; onClick?: (e?: default_2.MouseEvent) => Promise | void; disabled?: boolean; danger?: boolean; icon?: default_2.ReactNode; tooltip?: string; variant?: ButtonVariant; size?: ButtonSize; } declare interface ButtonDefinition_2 { label: string; onClick?: (e?: default_2.MouseEvent) => Promise | void; disabled?: boolean; danger?: boolean; icon?: default_2.ReactNode; tooltip?: string; } export declare const ButtonList: default_2.FC; declare interface ButtonListProps { buttons: Array<{ key: string; children: ReactNode; onClick?: (event: default_2.MouseEvent) => void; /** When set, the item renders as an anchor so it can be opened in a new tab. */ href?: string; }>; className?: string; /** Renders shorter, denser rows. */ compact?: boolean; } declare interface ButtonProps extends default_2.ButtonHTMLAttributes { variant: ButtonVariant; size?: ButtonSize; radius?: ButtonRadius; loading?: boolean; disabled?: boolean; icon?: default_2.ReactNode; iconPosition?: 'start' | 'end'; flexGrow?: boolean; fill?: boolean; tooltip?: string; tooltipPlacement?: 'top' | 'bottom' | 'left' | 'right'; iconOnly?: boolean; children?: default_2.ReactNode; onClick?: default_2.MouseEventHandler; /** Renders the button as a real anchor, so a link action is never an nested in a * * Hello world * * */ export declare const MalachiteContext: default_2.FC; declare interface MalachiteContextProps { children: default_2.ReactNode; className?: string; /** * Stretches the shadow host, and every plain div between it and `children`, to 100% of * the height available from this component's own parent. Without it, the host sizes to * its content: a percentage height set further down (inside `children`) has nothing * non-`auto` to resolve against, and a chain of plain `
`s does not propagate a * parent's height to its children on its own. Off by default: every existing consumer * relies on the host hugging its content, and turning this on for all of them would * change how much space they take up. */ fillHeight?: boolean; } export declare interface MalachiteTheme { fontSizes: { xsmall: string; small: string; medium: string; /** Off-ladder: the control ladder's large tier is 15px, between `medium` and `large`. */ '15'?: string; large: string; xlarge: string; xxlarge: string; }; /** * Heights of the shared control ladder. Optional so adding the family never breaks a * consumer building a full theme literal — same reason `radius.xs` is optional. */ controlHeights?: { small: string; medium: string; large: string; }; iconSizes: { xsmall: string; small: string; medium: string; large: string; }; radius: { /** Optional so adding a rung never breaks a consumer building a full theme literal. */ xs?: string; sm: string; md: string; lg: string; /** Off-ladder: no rung exists between `lg` (8px) and `xl` (12px). */ '10'?: string; xl: string; xxl: string; xxxl: string; }; shadows: { sm: string; md: string; lg: string; xl: string; default: string; glow?: string; glowLg?: string; /** Optional so adding a shadow never breaks a consumer building a full theme literal. */ accent?: string; success: string; warning: string; error: string; }; colors: { shadowColor: string; shadowOpacity: number; card: { background: string; foreground: string; border: string; shadow: string; dimmedBackground: string; sunkenBackground: string; warmBackground: string; headerBackground: string; footerBackground: string; /** @deprecated No longer read by any component — glass surfaces derive from `sunkenBackground` (see `glassSurface.ts`). */ footerGlassBackground: string; trayNeutral?: string; trayWarning?: string; trayError?: string; traySuccess?: string; subtleDivider?: string; }; overlay: { /** Dimming layer drawn behind modal overlays (e.g. SidePanel). */ scrim: string; }; alert: { info: { background: string; foreground: string; }; success: { background: string; foreground: string; }; error: { background: string; foreground: string; }; warning: { background: string; foreground: string; }; /** Says a machine wrote this, not that anything is wrong — the violet the * assistant is named in elsewhere, not a fifth severity. */ assistant: { background: string; foreground: string; }; }; tooltip: { background: string; foreground: string; border: string; shadow: string; }; primary: { background: string; foreground: string; border: string; borderHover: string; }; /** Brand accent for interaction states — checked, selected, active. Green today, * but a rebrand repaints it; `success.*` stays status-only and does not follow. * Optional so adding a group never breaks a consumer building a full theme literal. */ accent?: { background: string; foreground: string; border: string; backgroundGlass: string; }; control: { borderHover: string; }; outline: { foreground: string; }; secondary: { background: string; foreground: string; border: string; borderHover: string; }; destructive: { background: string; foreground: string; border: string; borderHover: string; shadow: string; shadowLight: string; shadowMedium: string; }; success: { background: string; foreground: string; border: string; borderHover: string; backgroundGlass: string; shadowLight: string; shadowMedium: string; }; warning: { background: string; foreground: string; border: string; borderHover: string; backgroundGlass: string; shadowLight: string; shadowMedium: string; }; error: { background: string; foreground: string; border: string; borderHover: string; backgroundGlass: string; shadowLight: string; shadowMedium: string; }; buttonList: { background: string; foreground: string; hoverBackground: string; hoverForeground: string; }; pillButton: { background: string; foreground: string; hoverBackground: string; hoverForeground: string; pressedBackground: string; pressedForeground: string; pressedOpacity: string; activeBackground: string; activeForeground: string; staticBackground: string; staticForeground: string; invertedBackground: string; invertedForeground: string; invertedHoverBackground: string; invertedHoverForeground: string; invertedPressedBackground: string; invertedPressedForeground: string; }; toggle: { track: string; trackChecked: string; /** The checked track while the change it represents has not been saved yet. */ trackCheckedPending: string; knob: string; }; segmentedControl: { trackBackground: string; itemForeground: string; itemHoverForeground: string; selectedBackground: string; selectedForeground: string; selectedShadow: string; }; selectableCard: { background: string; border: string; selectedTint: string; selectedSurfaceEnd: string; selectedBorder: string; librarySelectedTint: string; librarySelectedBorder: string; editingTint: string; accent: string; mutedForeground: string; hoverBackground: string; hoverRule: string; pendingForeground: string; }; cardStrip: { background: string; divider: string; fade: string; arrowBackground: string; arrowBorder: string; addPrimaryBackground: string; addPrimaryForeground: string; }; selectionBar: { background: string; foreground: string; mutedForeground: string; divider: string; border: string; primaryBorder: string; shadow: string; noticeBackground: string; noticeForeground: string; noticeShadow: string; }; inlineConfirm: { background: string; foreground: string; divider: string; shadow: string; }; dropdown: { border: string; borderActive: string; borderFilter: string; borderError: string; borderPending: string; shadow: string; shadowHover: string; shadowActive: string; shadowFilter: string; shadowError: string; shadowPending: string; disabledBackground: string; }; tag: { primary: { background: string; foreground: string; border: string; shadow: string; }; secondary: { background: string; foreground: string; border: string; shadow: string; }; default: { background: string; foreground: string; border: string; shadow: string; }; error: { background: string; foreground: string; border: string; shadow: string; }; warning: { background: string; foreground: string; border: string; shadow: string; }; success: { background: string; foreground: string; border: string; shadow: string; }; emphasis: { background: string; foreground: string; border: string; shadow: string; }; info: { background: string; foreground: string; border: string; shadow: string; }; assistant: { background: string; foreground: string; border: string; shadow: string; }; }; numberTag: { background: string; foreground: string; emphasisBackground: string; emphasisForeground: string; }; table: { background: string; boxShadow: string; header: { background: string; foreground: string; border: string; }; row: { background: string; foreground: string; hoverBackground: string; border: string; /** `Table`'s `selectedRowKey` tint. Must stay distinguishable from * `hoverBackground`: a selected row keeps this tint under the cursor. */ selectedBackground: string; /** Leading accent bar on that same row. */ selectedAccent: string; /** Cascades, so cells setting their own colour are deliberately unaffected. */ selectedForeground: string; }; border: string; borderedRow: { background: string; outline: string; }; rowVariant: { success: { background: string; }; warning: { background: string; }; error: { background: string; }; info: { background: string; }; }; error: { iconBackground: string; iconForeground: string; titleForeground: string; subtitleForeground: string; }; }; text: { primary: string; secondary: string; dimmed: string; emphasis: string; muted: string; placeholder: string; destructive: string; success: string; highlight: string; warning: string; warningMuted: string; error: string; info: string; linkForeground: string; linkForegroundHover: string; rightSideText: { muted: string; primary: string; alignment: 'left' | 'right'; fontSize: string; minWidth: string; }; }; codeBlock: { background: string; foreground: string; border: string; lineNumber: string; keyword: string; comment: string; string: string; number: string; type: string; diffAddedBackground: string; diffRemovedBackground: string; diffAssistantBackground: string; diffAssistantForeground: string; diffAssistantRemovedBackground: string; diffRemovedForeground: string; diffContextForeground: string; diffContextText: string; }; /** The conversation's own surfaces — message bubbles, not chrome around them. */ chat: { userBubbleBackground: string; userBubbleBorder: string; assistantBubbleBackground: string; assistantBubbleBorder: string; assistantBubbleForeground: string; }; /** Chrome marking machine-authored content outside the conversation itself * (badges, diff callouts) — distinct from `chat`, which is the conversation's * own bubbles. */ assistant: { foreground: string; surfaceBackground: string; surfaceBorder: string; /** Body text sitting on `surfaceBackground` — darker/muted so a run of it reads, * unlike `foreground`, which is the vivid accent. */ surfaceForeground: string; }; }; } export declare const ManageTeamIcon: React.FC; export declare const ManualWebhookIcon: React.FC; export declare interface MarkdownProps { text: string; color?: TextColor; size?: FontSize; omitMargin?: boolean; variant?: MarkdownVariant; normalizeSource?: boolean; } export declare type MarkdownVariant = 'block' | 'flow'; export declare const MarkReadIcon: React.FC; export declare const MarkUnreadIcon: React.FC; export declare const MembersIcon: React.FC; export declare const Modal: default_2.FC; export declare const ModalIcon: React.FC; export declare interface ModalProps { open: boolean; /** Dismiss handler — close button, ESC, or overlay click. */ onClose: () => void; title: default_2.ReactNode; /** Secondary line beneath the title. */ subtitle?: default_2.ReactNode; /** Leading header slot, typically an icon or logo. */ icon?: default_2.ReactNode; /** Content pinned right in the header, before the close button. */ headerExtra?: default_2.ReactNode; titleAdornment?: default_2.ReactNode; tray?: { tone?: ModalTrayTone; caption?: { label?: string; message: string; }; }; /** Divider under the header. Default: false. */ headerDivider?: boolean; /** Pinned action row below the scrolling body. */ footer?: default_2.ReactNode; size?: ModalSize; /** Default: true. */ showCloseButton?: boolean; /** Default: true. Turn off for a dialog whose choice must be made deliberately. */ closeOnOverlayClick?: boolean; /** Whether the body gets default padding. Default: true. */ bodyPadding?: boolean; /** * `alertdialog` for a dialog interrupting the user over a consequential choice — it * tells assistive tech to announce the body, not just the name. */ role?: 'dialog' | 'alertdialog'; /** Accessible dialog name; required when `title` isn't a plain string. */ 'aria-label'?: string; /** ID of a visible element naming the dialog (alternative to `aria-label`). */ 'aria-labelledby'?: string; /** ID of the element describing what the dialog is asking. */ 'aria-describedby'?: string; /** * Work is in flight: suppresses the pointer dismissal routes and announces the busy * state. Never ESC — that is the only guaranteed keyboard exit from a focus trap, so it * always reaches `onClose` and whether to abort is left to the caller. */ busy?: boolean; children: default_2.ReactNode; } export declare type ModalSize = 'small' | 'medium' | 'large'; export declare type ModalTrayTone = 'neutral' | 'warning' | 'error' | 'success'; export declare const MoreHorizontalIcon: React.FC; export declare const MoreVerticalIcon: React.FC; export declare const MultiSelect: default_2.FC; declare interface MultiSelectBaseProps { options: MultiSelectOption[]; /** Controlled value. When provided, component is fully controlled. */ value?: string[]; /** Initial value for uncontrolled usage (like Dropdown's defaultValue). */ defaultValue?: string[]; onChange?: (next: string[]) => void; placeholder?: string; renderTrigger?: (selected: MultiSelectOption[]) => default_2.ReactNode; searchable?: boolean; /** 'large' (42px) for form inputs; 'medium' (32px) for toolbar chips; 'small' (28px) beside a title. */ size?: MultiSelectSize; width?: string | number; minWidth?: number; disabled?: boolean; error?: boolean; loading?: boolean; label?: string; description?: string; tooltip?: string; hint?: string; rightSideContent?: RightSideContent; required?: boolean; requiredIndicator?: RequiredIndicator; /** Show selected values as chips instead of "N selected" text */ chips?: boolean; /** Show × button on each chip to remove it (only when chips=true) */ chipsRemovable?: boolean; /** Max visible chips. 'auto' = show all chips. Number = hard limit with "+N" badge */ chipsMax?: number | 'auto'; /** Search input inside the trigger field instead of external search bar */ inlineSearch?: boolean; /** * Called with the query as typed, and with `''` whenever the component clears it — on * select, and on close — so a consumer's request stays in step with what is on screen. * * For a list too large to load in full: fire the request here and pass the results back * as `options`. Pair it with `localFilter={false}`, or the component filters the answer * the server already filtered. Debouncing is left to the caller, who is the only one who * knows what a request costs. */ onSearchChange?: (query: string) => void; /** * Whether this component filters `options` itself. Default true. * * Set false when the options already reflect the query. A server commonly matches on * fields the label does not contain — an account found by its owner's email, say — and * filtering again here would hide precisely those matches. */ localFilter?: boolean; className?: string; style?: default_2.CSSProperties; /** Names the trigger from the light DOM, where `htmlFor` cannot reach into the shadow root. */ id?: string; 'aria-label'?: string; 'aria-labelledby'?: string; } export declare interface MultiSelectOption { value: string; label: default_2.ReactNode; searchText?: string; /** Prevent toggling or removing this option — used for mandatory/locked selections */ disabled?: boolean; /** Right-aligned badge shown in the dropdown only (not in chips) */ badge?: default_2.ReactNode; /** Description text for this option */ description?: string; /** How description renders — 'icon': info icon with tooltip, 'subtitle': text below label, 'hover': tooltip on label. Default: 'icon' */ descriptionMode?: 'icon' | 'subtitle' | 'hover'; /** Custom icon for 'icon' mode. Default: built-in ⓘ */ descriptionIcon?: default_2.ReactNode; /** Truncate subtitle after N lines. Only applies to 'subtitle' mode */ descriptionMaxLines?: number; } export declare type MultiSelectProps = (MultiSelectBaseProps & { formControl: Control; name: string; }) | (MultiSelectBaseProps & { formControl?: undefined; name?: string; }); export declare type MultiSelectSize = 'small' | 'medium' | 'large'; export declare const NavbarCollapseIcon: React.FC; export declare const NavbarExpandIcon: React.FC; export declare const NotFoundIcon: React.FC; export declare const NumberTag: default_2.FC; export declare interface NumberTagProps { value: number | string; emphasis?: boolean; /** * Names the bare number for assistive tech — "3 schemas" rather than "3". Rendered as * visually-hidden text, because `aria-label` on a plain span is not honoured. */ 'aria-label'?: string; className?: string; } export declare const OrganizationIcon: React.FC; export declare const OverflowRow: default_2.FC; declare interface OverflowRowProps { children?: default_2.ReactNode; gap?: number | string; align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline'; justify?: 'start' | 'center' | 'end' | 'space-between' | 'space-around' | 'space-evenly'; className?: string; renderOverflow?: (hiddenCount: number) => default_2.ReactNode; } export declare const Padded: default_2.FC; declare interface PaddedProps { vertical: PaddingSize_2; horizontal: PaddingSize_2; children: default_2.ReactNode; fullHeight?: boolean; className?: string; overflow?: 'hidden' | 'visible' | 'scroll' | 'auto'; } export declare enum PaddingSize { XSmall = "xsmall", Small = "small", Medium = "medium", Large = "large" } declare type PaddingSize_2 = 'xsmall' | 'small' | 'medium' | 'large' | 'none'; declare type PaddingSize_3 = 'default' | 'compact'; export declare interface PageAction { label: string; /** Ignored when `href` is set. */ onClick?: () => void; disabled?: boolean; variant?: ButtonVariant; icon?: default_2.ReactNode; href?: string; /** Defaults to `_blank`. */ target?: '_self' | '_blank'; tooltip?: string; tooltipPlacement?: 'top' | 'bottom' | 'left' | 'right'; dividerBefore?: boolean; } /** * The page's action buttons, collapsing into an overflow menu as the row narrows. Exported so * a page that renders its own header block — e.g. one that scrolls the title away — keeps the * same behaviour instead of hand-rolling `buttons.map(...)` and losing the collapse, the * dividers and the href handling. */ export declare const PageActions: default_2.FC<{ buttons: PageAction[]; }>; declare type PageContentGap = 'small' | 'medium' | 'large' | 'xlarge'; export declare const PageLayout: { Regular: FC; Empty: FC; }; declare interface PageTitleProps { children: default_2.ReactNode; margin?: string; className?: string; style?: default_2.CSSProperties; } export declare interface PartialMalachiteTheme { fontSizes?: Partial; iconSizes?: Partial; radius?: Partial; controlHeights?: Partial; shadows?: Partial; colors?: { shadowColor?: string; shadowOpacity?: number; card?: Partial; overlay?: Partial; /** Nested-partial: a sub-object may be overridden leaf by leaf. A flat * `Partial<…>` would demand every leaf of any group you touch. */ alert?: { [K in keyof MalachiteTheme['colors']['alert']]?: Partial; }; tooltip?: Partial; primary?: Partial; accent?: Partial>; control?: Partial; outline?: Partial; secondary?: Partial; destructive?: Partial; success?: Partial; warning?: Partial; error?: Partial; buttonList?: Partial; pillButton?: Partial; toggle?: Partial; segmentedControl?: Partial; selectableCard?: Partial; cardStrip?: Partial; selectionBar?: Partial; inlineConfirm?: Partial; dropdown?: Partial; tag?: { [K in keyof MalachiteTheme['colors']['tag']]?: Partial; }; numberTag?: Partial; table?: Partial> & { header?: Partial; row?: Partial; borderedRow?: Partial; rowVariant?: { [K in keyof MalachiteTheme['colors']['table']['rowVariant']]?: Partial; }; error?: Partial; }; text?: Partial> & { rightSideText?: Partial; }; codeBlock?: Partial; chat?: Partial; assistant?: Partial; }; } declare type PhraseLabel = string | { prefix: string; suffix?: string; }; export declare const PillButton: default_2.FC; declare interface PillButtonProps { label: string; icon?: default_2.ReactNode; className?: string; selected?: boolean; disabled?: boolean; interactive?: boolean; size?: PillButtonSize; variant?: PillButtonVariant; shape?: PillButtonShape; tone?: PillButtonTone; /** Sits after the label — a caret on a pill that opens a menu. */ trailingIcon?: default_2.ReactNode; onClick?: () => void; } /** * `tab` squares the top corners so the pill reads as attached to whatever sits above it — * a row of controls hanging under an input, rather than free-floating pills. */ declare type PillButtonShape = 'pill' | 'tab'; declare type PillButtonSize = 'xsmall' | 'small' | 'medium'; /** * `assistant` is the chrome for AI-authored chips (e.g. `ChangeReview.Jump`): a fixed * violet-on-white look with its own border, independent of `variant`/`selected`. */ declare type PillButtonTone = 'default' | 'assistant'; declare type PillButtonVariant = 'default' | 'inverted'; export declare const PinIcon: React.FC; export declare const PlusIcon: React.FC; export declare const PreviewIcon: React.FC; /** A translucent rounded card that groups {@link PreviewTreeRow}s into a tree preview. */ export declare const PreviewTree: default_2.FC; declare interface PreviewTreeProps { children: default_2.ReactNode; } export declare const PreviewTreeRow: default_2.FC; declare interface PreviewTreeRowProps { icon: default_2.ReactNode; label: string; tag: string; highlighted?: boolean; indented?: boolean; onToggle?: () => void; expanded?: boolean; } export declare const ProgrammaticWebhookIcon: React.FC; export declare const Progress: default_2.FC; declare interface ProgressCommonProps { height?: number; 'aria-label'?: string; 'aria-labelledby'?: string; /** Spoken instead of the range, which reads as 100% once segments fill the track. */ 'aria-valuetext'?: string; className?: string; style?: default_2.CSSProperties; } /** One fill or a list of segments, never both — `color`/`trackColor` mean nothing to segments. */ export declare type ProgressProps = ProgressValueProps | ProgressSegmentsProps; export declare interface ProgressSegment { /** Portion of `max` this segment covers, in the same units. */ value: number; variant?: ProgressSegmentVariant; fill?: ProgressSegmentFill; } /** `hatched` reads as claimed-but-unpaid-for — usage past an allowance, not more of it. */ export declare type ProgressSegmentFill = 'solid' | 'hatched'; declare interface ProgressSegmentsProps extends ProgressCommonProps { segments: ProgressSegment[]; /** Scale the segments measure against. Defaults to their sum, and a larger sum wins. */ max?: number; value?: never; color?: never; trackColor?: never; } /** * Semantic colour role for a segment. Colours come from theme tokens by design — unlike * `color`/`trackColor`, which predate that rule, there is no free-form colour here. To * restyle a role, override its token via `applyTheme` / `applyCustomTheme`. */ export declare type ProgressSegmentVariant = 'default' | 'success' | 'warning' | 'error' | 'info'; declare interface ProgressValueProps extends ProgressCommonProps { value: number; color?: string; trackColor?: string; segments?: never; max?: never; } export declare const PulseIcon: React.FC; export declare const QueryInput: default_2.FC; export declare interface QueryInputProps { value: string; onChange: (value: string) => void; /** Ranges to colour. Tokens that are out of range, reversed or overlapping are ignored. */ tokens?: QueryToken[]; /** Rows for the caret menu. Empty or undefined means the menu stays closed. */ suggestions?: QuerySuggestion[]; /** The span an accepted suggestion replaces. Defaults to a zero-width span at the caret. */ activeRange?: { start: number; end: number; }; onAccept?: (suggestion: QuerySuggestion) => void; /** Every value change AND every caret move, so the consumer can recompute tokens/suggestions. */ onQueryContextChange?: (context: { value: string; caret: number; }) => void; /** Enter with nothing highlighted in the menu. */ onSubmit?: (value: string) => void; placeholder?: string; size?: QueryInputSize; disabled?: boolean; /** Suggestions are being fetched: the menu shows a loading row instead of the empty message. */ loading?: boolean; emptyMessage?: string; className?: string; style?: default_2.CSSProperties; 'aria-label'?: string; 'aria-labelledby'?: string; } export declare type QueryInputSize = 'small' | 'medium' | 'large'; export declare interface QuerySuggestion { id: string; label: string; /** Secondary text, right-aligned in the row. */ detail?: string; /** What replaces `activeRange` when accepted. Defaults to `label`. */ insertText?: string; } export declare interface QueryToken { /** Index into `value`. */ start: number; /** Exclusive. */ end: number; kind: QueryTokenKind; } export declare type QueryTokenKind = 'key' | 'value' | 'operator' | 'negation' | 'punctuation' | 'error' | 'plain'; export declare const Radio: default_2.FC; export declare interface RadioProps { checked: boolean; /** Optional when `presentational` — a presentational radio is a visual indicator only. */ onChange?: (checked: boolean) => void; disabled?: boolean; size?: number; /** * Render a visual-only indicator (a non-interactive, non-focusable ``, * `aria-hidden`) instead of an interactive radio. Use this inside a clickable * row/card whose wrapper is the real control, so there's a single tab stop. */ presentational?: boolean; 'aria-label'?: string; 'aria-labelledby'?: string; className?: string; id?: string; } export declare const RefreshIcon: React.FC; export declare interface RegularLayoutProps { breadcrumbLinks?: BreadcrumbLink[]; breadcrumbActions?: PageAction[]; renderLink?: RenderBreadcrumbLink; title?: default_2.ReactNode; titleSuffix?: default_2.ReactNode; subtitle?: string; description?: default_2.ReactNode; buttons?: PageAction[]; /** * Hides the buttons and skeletons the title. `subtitle` and `description` are only * skeletoned when those props are also passed. */ loading?: boolean; children: default_2.ReactNode; centered?: boolean; noPadding?: boolean; contentGap?: PageContentGap; alert?: { message: string; type?: AlertType; }; /** Demotes the default `main` landmark — pass e.g. `region` when the app owns its own. */ role?: default_2.AriaRole; 'aria-label'?: string; 'aria-labelledby'?: string; className?: string; style?: default_2.CSSProperties; } export declare const RejectIcon: React.FC; export declare const ReloadIcon: React.FC; /** * Renders a crumb or the back button through the app's own link component, spreading every * field onto it. A client-side-routed consumer MUST pass this, or navigation breaks. */ declare type RenderBreadcrumbLink = (props: { href: string; children: default_2.ReactNode; className?: string; 'aria-current'?: 'page'; 'aria-label'?: string; }) => default_2.ReactNode; export declare const ReplyIcon: React.FC; export declare const RequiredFieldIndicatorIcon: React.FC; export declare type RequiredIndicator = 'optional-suffix' | 'asterisk' | 'none'; /** * Reset theme to default values */ export declare function resetTheme(): void; /** * What sits at the far end of a field's label row. Data rather than a node, so nothing * arbitrary reaches the row; discriminated so a further kind is additive. Plain text is * already `hint`. */ export declare type RightSideContent = { type?: 'link'; text: string; href: string; }; declare const Row: default_2.FC; export declare type RowVariant = 'success' | 'warning' | 'error' | 'info'; export declare const Search: default_2.FC; export declare const SearchIcon: React.FC; export declare interface SearchProps { value: string; onChange: (value: string) => void; placeholder?: string; /** 'large' (42px) for form inputs; 'medium' (32px) for toolbars; 'small' (28px) in a table. */ size?: SearchSize; variant?: SearchVariant; disabled?: boolean; autoFocus?: boolean; className?: string; width?: string | number; style?: default_2.CSSProperties; } export declare type SearchSize = 'small' | 'medium' | 'large'; export declare type SearchVariant = 'default' | 'muted'; declare interface SecondaryTextProps { children: default_2.ReactNode; fontWeight?: FontWeight; size?: FontSize; textTransform?: 'uppercase' | 'lowercase' | 'capitalize' | 'none'; className?: string; style?: default_2.CSSProperties; } declare interface SectionTitleProps { children: default_2.ReactNode; className?: string; style?: default_2.CSSProperties; } export declare const SecurityIcon: React.FC; /** * A rounded track of mutually-exclusive options — the segmented "one of these" control. * * Owns the track background, the selected-thumb chrome and the radiogroup semantics in * one place, so consumers never hand-roll a track around `PillButton` (whose `default` * variant tokens are tuned for standalone filter pills, not for a sunken track). * * Selection is conveyed non-visually via `role="radio"` + `aria-checked`, and by a * foreground-colour change as well as the thumb, so it does not rest on background * colour alone. */ export declare const SegmentedControl: ({ options, value, onChange, size, fullWidth, disabled, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, className, }: SegmentedControlProps) => JSX_2.Element; export declare interface SegmentedControlOption { value: T; label: string; icon?: default_2.ReactNode; disabled?: boolean; } export declare interface SegmentedControlProps { options: SegmentedControlOption[]; /** The selected option's value. A value not present in `options` renders nothing selected. */ value: T; onChange: (value: T) => void; size?: SegmentedControlSize; /** Stretch the track to its container and split it into equal segments. */ fullWidth?: boolean; /** Disables every segment. Individual segments can also be disabled via `options`. */ disabled?: boolean; 'aria-label'?: string; 'aria-labelledby'?: string; className?: string; } export declare type SegmentedControlSize = 'small' | 'medium' | 'large'; /** A fixed-size card that behaves as one option in a radio group: a card-shaped `Surface.Row`. */ export declare const SelectableCard: default_2.FC; export declare interface SelectableCardProps { /** Identifies the card inside its group; handed back to `onSelect`. */ value: string; title: string; /** Leading glyph on the title line, e.g. a library/book icon. */ titleIcon?: default_2.ReactNode; /** Pins the card as the account default, marked beside the title. */ isDefault?: boolean; /** Palette only — gradient, borders, indicator and eyebrow; position is settled by the strip. */ variant?: SelectableCardVariant; /** Small label above the title ("Profile", "Explore"). */ eyebrow?: string; /** Status pill rendered next to the eyebrow — or in its place when there is no eyebrow. */ status?: SelectableCardStatus; /** Supporting copy under the title, clamped to two lines. */ description?: string; /** Bottom-left summary ("16 Actions", "10 Selected"). */ countLabel?: string; /** Top-right cluster (markers, an ActionMenu…). The eyebrow row gives way to one * xsmall control; a wider cluster needs a shorter eyebrow and status to clear it. */ actions?: default_2.ReactNode; selected?: boolean; /** Replaces the card's content with a centred in-progress message. */ loading?: boolean; loadingLabel?: string; loadingHint?: string; /** Blocks selection. Draws no dimming of its own — a switched-off profile is signalled by its `status` tag. */ disabled?: boolean; /** Mutes the title without blocking selection. */ dimmed?: boolean; onSelect?: (value: string) => void; /** Tab stop for the card. */ tabIndex?: number; /** Replaces the generated accessible name (eyebrow + title + status). */ 'aria-label'?: string; className?: string; style?: default_2.CSSProperties; } export declare interface SelectableCardStatus { label: string; /** Maps to Tag's palette — `default` (grey) for "Disabled", `warning` (amber) for "Draft". */ type?: TagType; } /** The card's palette: `profile` is green, `library` neutral, `editing` amber for a * profile with unsaved changes. */ export declare type SelectableCardVariant = 'profile' | 'library' | 'editing'; /** * A bar reporting a pending, not-yet-written selection and the actions that resolve it. Every * action destroys the button just pressed, so an `onClick` that ends the pending state must * also move focus. */ export declare const SelectionBar: default_2.FC; export declare interface SelectionBarAction { label: string; onClick: () => void; /** 'primary' commits the pending change; 'secondary' (the default) is a filled chip; * 'quiet' is unfilled and takes a wash on hover. */ emphasis?: SelectionBarEmphasis; icon?: default_2.ReactNode; iconPosition?: 'start' | 'end'; disabled?: boolean; /** Renders a separator glyph before this action. */ dividerBefore?: boolean; } /** A `value + label` pair, e.g. `{ value: 3, label: 'Added' }`. */ export declare interface SelectionBarCount { value: string | number; label: string; } export declare type SelectionBarEmphasis = 'primary' | 'secondary' | 'quiet'; export declare interface SelectionBarProps { /** Drives the mount: the bar animates in on true and animates out on false. */ open: boolean; counts: SelectionBarCount[]; actions: SelectionBarAction[]; /** 'sticky' keeps the bar in view while its container scrolls; render it as the last child * of that content, with no `overflow: hidden` on any ancestor. */ placement?: 'sticky' | 'inline'; /** * Wraps the bar in a warning sleeve carrying this message, for state the bar is * reporting rather than an action it offers — e.g. that the selection is unsaved. * It leads the announcement. An empty string renders no sleeve. */ notice?: string; 'aria-label'?: string; 'aria-labelledby'?: string; className?: string; } export declare const SendIcon: React.FC; export declare const SettingRow: default_2.FC; /** The ids a control needs to name and describe itself from the row's own text. */ export declare interface SettingRowControlIds { labelId: string; descriptionId?: string; } export declare interface SettingRowProps { label: string; /** Small badge after the label, e.g. a `Tag`. */ badge?: default_2.ReactNode; /** Explanation rendered under the row, outside its border. */ description?: default_2.ReactNode; /** The control on the trailing edge. Passed the row's ids: a control `