Askr documentation
UI & Components

Alert, Badge, Empty, Skeleton, Spinner, and Stat

Alert, Badge, Empty, Skeleton, Spinner, and Stat: anatomy, keyboard behavior, state, and theming in Askr.

Example

import { Alert, AlertDescription, AlertTitle, Badge, Empty, EmptyDescription, EmptyTitle, Spinner } from '@askrjs/themes/components';

{query.pending ? <Spinner aria-label="Loading projects" /> :
 query.error ? <Alert variant="danger"><AlertTitle>Could not load projects</AlertTitle><AlertDescription>{query.error.message}</AlertDescription></Alert> :
 query.data.length === 0 ? <Empty><EmptyTitle>No projects</EmptyTitle><EmptyDescription>Create a project to get started.</EmptyDescription></Empty> :
 <Badge>{query.data.length} active</Badge>}

Published props

Generated from the TypeScript declarations shipped by the installed package. Named types in the Type column define the accepted values.

AlertProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
actionsactions?: unknown;
childrenchildren?: unknown;
descriptiondescription?: unknown;
dismissLabeldismissLabel?: string | undefined;
iconicon?: unknown;
onDismissonDismiss?: (() => void) | undefined;
refref?: Ref<HTMLDivElement>;
titletitle?: unknown;
titleAstitleAs?: AlertHeadingTag | undefined;
variantvariant?: AlertVariant | undefined;

AspectRatioAsChildProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild: true;
childrenchildren: JSXElement;
ratioratio?: string | number | undefined;
refref?: Ref<unknown>;
stylestyle?: unknown;

AspectRatioProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild?: false | undefined;
childrenchildren?: unknown;
ratioratio?: string | number | undefined;
refref?: Ref<HTMLDivElement>;
stylestyle?: unknown;

BadgeAsChildProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild: true;
childrenchildren: JSXElement;
refref?: Ref<unknown>;
variantvariant?: BadgeVariant | undefined;

BadgeOwnProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
variantvariant?: BadgeVariant | undefined;

BadgeProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild?: false | undefined;
childrenchildren?: unknown;
refref?: Ref<HTMLSpanElement>;
variantvariant?: BadgeVariant | undefined;

BlockAsChildProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
alignalign?: ResponsiveValue<BlockAlign> | undefined;
asChildasChild: true;
backgroundbackground?: ResponsiveValue<BlockBackground> | undefined;
borderborder?: ResponsiveValue<boolean> | undefined;
borderBottomborderBottom?: ResponsiveValue<boolean> | undefined;
borderRightborderRight?: ResponsiveValue<boolean> | undefined;
borderTopborderTop?: ResponsiveValue<boolean> | undefined;
centercenter?: ResponsiveValue<boolean> | undefined;
childrenchildren: JSXElement;
classNameclassName?: string | undefined;
directiondirection?: ResponsiveValue<BlockDirection> | undefined;
gapgap?: ResponsiveValue<BlockSpace> | undefined;
growgrow?: ResponsiveValue<number | boolean> | undefined;
heightheight?: ResponsiveValue<BlockSize> | undefined;
hidehide?: ResponsiveValue<boolean> | undefined;
justifyjustify?: ResponsiveValue<BlockJustify> | undefined;
marginmargin?: ResponsiveValue<BlockMargin> | undefined;
marginXmarginX?: ResponsiveValue<BlockMargin> | undefined;
marginYmarginY?: ResponsiveValue<BlockMargin> | undefined;
maxHeightmaxHeight?: ResponsiveValue<BlockSize> | undefined;
maxWidthmaxWidth?: ResponsiveValue<BlockSize> | undefined;
minHeightminHeight?: ResponsiveValue<BlockSize> | undefined;
minWidthminWidth?: ResponsiveValue<BlockSize> | undefined;
paddingpadding?: ResponsiveValue<BlockSpace> | undefined;
paddingXpaddingX?: ResponsiveValue<BlockSpace> | undefined;
paddingYpaddingY?: ResponsiveValue<BlockSpace> | undefined;
radiusradius?: ResponsiveValue<BlockRadius> | undefined;
refref?: Ref<unknown>;
rowFromrowFrom?: BlockRowFrom | undefined;
shadowshadow?: ResponsiveValue<BlockShadow> | undefined;
shrinkshrink?: ResponsiveValue<number | boolean> | undefined;
stickysticky?: boolean | undefined;
toptop?: ResponsiveValue<BlockSpace> | undefined;
widthwidth?: ResponsiveValue<BlockSize> | undefined;
wrapwrap?: ResponsiveValue<boolean> | undefined;
zIndexzIndex?: ResponsiveValue<BlockZIndex> | undefined;

BlockDivProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
alignalign?: ResponsiveValue<BlockAlign> | undefined;
asas?: "div" | undefined;
asChildasChild?: false | undefined;
backgroundbackground?: ResponsiveValue<BlockBackground> | undefined;
borderborder?: ResponsiveValue<boolean> | undefined;
borderBottomborderBottom?: ResponsiveValue<boolean> | undefined;
borderRightborderRight?: ResponsiveValue<boolean> | undefined;
borderTopborderTop?: ResponsiveValue<boolean> | undefined;
centercenter?: ResponsiveValue<boolean> | undefined;
childrenchildren?: unknown;
classNameclassName?: string | undefined;
directiondirection?: ResponsiveValue<BlockDirection> | undefined;
gapgap?: ResponsiveValue<BlockSpace> | undefined;
growgrow?: ResponsiveValue<number | boolean> | undefined;
heightheight?: ResponsiveValue<BlockSize> | undefined;
hidehide?: ResponsiveValue<boolean> | undefined;
justifyjustify?: ResponsiveValue<BlockJustify> | undefined;
marginmargin?: ResponsiveValue<BlockMargin> | undefined;
marginXmarginX?: ResponsiveValue<BlockMargin> | undefined;
marginYmarginY?: ResponsiveValue<BlockMargin> | undefined;
maxHeightmaxHeight?: ResponsiveValue<BlockSize> | undefined;
maxWidthmaxWidth?: ResponsiveValue<BlockSize> | undefined;
minHeightminHeight?: ResponsiveValue<BlockSize> | undefined;
minWidthminWidth?: ResponsiveValue<BlockSize> | undefined;
paddingpadding?: ResponsiveValue<BlockSpace> | undefined;
paddingXpaddingX?: ResponsiveValue<BlockSpace> | undefined;
paddingYpaddingY?: ResponsiveValue<BlockSpace> | undefined;
radiusradius?: ResponsiveValue<BlockRadius> | undefined;
refref?: Ref<unknown>;
rowFromrowFrom?: BlockRowFrom | undefined;
shadowshadow?: ResponsiveValue<BlockShadow> | undefined;
shrinkshrink?: ResponsiveValue<number | boolean> | undefined;
stickysticky?: boolean | undefined;
toptop?: ResponsiveValue<BlockSpace> | undefined;
widthwidth?: ResponsiveValue<BlockSize> | undefined;
wrapwrap?: ResponsiveValue<boolean> | undefined;
zIndexzIndex?: ResponsiveValue<BlockZIndex> | undefined;

BlockElementProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
alignalign?: ResponsiveValue<BlockAlign> | undefined;
asas?: TElement | undefined;
asChildasChild?: false | undefined;
backgroundbackground?: ResponsiveValue<BlockBackground> | undefined;
borderborder?: ResponsiveValue<boolean> | undefined;
borderBottomborderBottom?: ResponsiveValue<boolean> | undefined;
borderRightborderRight?: ResponsiveValue<boolean> | undefined;
borderTopborderTop?: ResponsiveValue<boolean> | undefined;
centercenter?: ResponsiveValue<boolean> | undefined;
childrenchildren?: unknown;
directiondirection?: ResponsiveValue<BlockDirection> | undefined;
gapgap?: ResponsiveValue<BlockSpace> | undefined;
growgrow?: ResponsiveValue<number | boolean> | undefined;
heightheight?: ResponsiveValue<BlockSize> | undefined;
hidehide?: ResponsiveValue<boolean> | undefined;
justifyjustify?: ResponsiveValue<BlockJustify> | undefined;
marginmargin?: ResponsiveValue<BlockMargin> | undefined;
marginXmarginX?: ResponsiveValue<BlockMargin> | undefined;
marginYmarginY?: ResponsiveValue<BlockMargin> | undefined;
maxHeightmaxHeight?: ResponsiveValue<BlockSize> | undefined;
maxWidthmaxWidth?: ResponsiveValue<BlockSize> | undefined;
minHeightminHeight?: ResponsiveValue<BlockSize> | undefined;
minWidthminWidth?: ResponsiveValue<BlockSize> | undefined;
paddingpadding?: ResponsiveValue<BlockSpace> | undefined;
paddingXpaddingX?: ResponsiveValue<BlockSpace> | undefined;
paddingYpaddingY?: ResponsiveValue<BlockSpace> | undefined;
radiusradius?: ResponsiveValue<BlockRadius> | undefined;
refref?: Ref<unknown>;
rowFromrowFrom?: BlockRowFrom | undefined;
shadowshadow?: ResponsiveValue<BlockShadow> | undefined;
shrinkshrink?: ResponsiveValue<number | boolean> | undefined;
stickysticky?: boolean | undefined;
toptop?: ResponsiveValue<BlockSpace> | undefined;
widthwidth?: ResponsiveValue<BlockSize> | undefined;
wrapwrap?: ResponsiveValue<boolean> | undefined;
zIndexzIndex?: ResponsiveValue<BlockZIndex> | undefined;

BlockNativeProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
alignalign?: ResponsiveValue<BlockAlign> | undefined;
asas?: "a" | "article" | "aside" | "div" | "form" | "footer" | "header" | "li" | "main" | "nav" | "ol" | "section" | "span" | "ul" | undefined;
asChildasChild?: false | undefined;
backgroundbackground?: ResponsiveValue<BlockBackground> | undefined;
borderborder?: ResponsiveValue<boolean> | undefined;
borderBottomborderBottom?: ResponsiveValue<boolean> | undefined;
borderRightborderRight?: ResponsiveValue<boolean> | undefined;
borderTopborderTop?: ResponsiveValue<boolean> | undefined;
centercenter?: ResponsiveValue<boolean> | undefined;
childrenchildren?: unknown;
classNameclassName?: string | ((() => IntrinsicClassValue) & string) | undefined;
directiondirection?: ResponsiveValue<BlockDirection> | undefined;
gapgap?: ResponsiveValue<BlockSpace> | undefined;
growgrow?: ResponsiveValue<number | boolean> | undefined;
heightheight?: ResponsiveValue<BlockSize> | undefined;
hidehide?: ResponsiveValue<boolean> | undefined;
justifyjustify?: ResponsiveValue<BlockJustify> | undefined;
marginmargin?: ResponsiveValue<BlockMargin> | undefined;
marginXmarginX?: ResponsiveValue<BlockMargin> | undefined;
marginYmarginY?: ResponsiveValue<BlockMargin> | undefined;
maxHeightmaxHeight?: ResponsiveValue<BlockSize> | undefined;
maxWidthmaxWidth?: ResponsiveValue<BlockSize> | undefined;
minHeightminHeight?: ResponsiveValue<BlockSize> | undefined;
minWidthminWidth?: ResponsiveValue<BlockSize> | undefined;
paddingpadding?: ResponsiveValue<BlockSpace> | undefined;
paddingXpaddingX?: ResponsiveValue<BlockSpace> | undefined;
paddingYpaddingY?: ResponsiveValue<BlockSpace> | undefined;
radiusradius?: ResponsiveValue<BlockRadius> | undefined;
refref?: Ref<unknown>;
rowFromrowFrom?: BlockRowFrom | undefined;
shadowshadow?: ResponsiveValue<BlockShadow> | undefined;
shrinkshrink?: ResponsiveValue<number | boolean> | undefined;
stickysticky?: boolean | undefined;
toptop?: ResponsiveValue<BlockSpace> | undefined;
widthwidth?: ResponsiveValue<BlockSize> | undefined;
wrapwrap?: ResponsiveValue<boolean> | undefined;
zIndexzIndex?: ResponsiveValue<BlockZIndex> | undefined;

BlockOwnProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
alignalign?: ResponsiveValue<BlockAlign> | undefined;
asas?: BlockElement | undefined;
backgroundbackground?: ResponsiveValue<BlockBackground> | undefined;
borderborder?: ResponsiveValue<boolean> | undefined;
borderBottomborderBottom?: ResponsiveValue<boolean> | undefined;
borderRightborderRight?: ResponsiveValue<boolean> | undefined;
borderTopborderTop?: ResponsiveValue<boolean> | undefined;
centercenter?: ResponsiveValue<boolean> | undefined;
childrenchildren?: unknown;
classNameclassName?: string | undefined;
directiondirection?: ResponsiveValue<BlockDirection> | undefined;
gapgap?: ResponsiveValue<BlockSpace> | undefined;
growgrow?: ResponsiveValue<number | boolean> | undefined;
heightheight?: ResponsiveValue<BlockSize> | undefined;
hidehide?: ResponsiveValue<boolean> | undefined;
justifyjustify?: ResponsiveValue<BlockJustify> | undefined;
marginmargin?: ResponsiveValue<BlockMargin> | undefined;
marginXmarginX?: ResponsiveValue<BlockMargin> | undefined;
marginYmarginY?: ResponsiveValue<BlockMargin> | undefined;
maxHeightmaxHeight?: ResponsiveValue<BlockSize> | undefined;
maxWidthmaxWidth?: ResponsiveValue<BlockSize> | undefined;
minHeightminHeight?: ResponsiveValue<BlockSize> | undefined;
minWidthminWidth?: ResponsiveValue<BlockSize> | undefined;
paddingpadding?: ResponsiveValue<BlockSpace> | undefined;
paddingXpaddingX?: ResponsiveValue<BlockSpace> | undefined;
paddingYpaddingY?: ResponsiveValue<BlockSpace> | undefined;
radiusradius?: ResponsiveValue<BlockRadius> | undefined;
rowFromrowFrom?: BlockRowFrom | undefined;
shadowshadow?: ResponsiveValue<BlockShadow> | undefined;
shrinkshrink?: ResponsiveValue<number | boolean> | undefined;
stickysticky?: boolean | undefined;
toptop?: ResponsiveValue<BlockSpace> | undefined;
widthwidth?: ResponsiveValue<BlockSize> | undefined;
wrapwrap?: ResponsiveValue<boolean> | undefined;
zIndexzIndex?: ResponsiveValue<BlockZIndex> | undefined;

BlockProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
alignalign?: ResponsiveValue<BlockAlign> | undefined;
asChildasChild?: boolean | undefined;
backgroundbackground?: ResponsiveValue<BlockBackground> | undefined;
borderborder?: ResponsiveValue<boolean> | undefined;
borderBottomborderBottom?: ResponsiveValue<boolean> | undefined;
borderRightborderRight?: ResponsiveValue<boolean> | undefined;
borderTopborderTop?: ResponsiveValue<boolean> | undefined;
centercenter?: ResponsiveValue<boolean> | undefined;
childrenchildren?: unknown;
classNameclassName?: string | ((() => IntrinsicClassValue) & string) | undefined;
directiondirection?: ResponsiveValue<BlockDirection> | undefined;
gapgap?: ResponsiveValue<BlockSpace> | undefined;
growgrow?: ResponsiveValue<number | boolean> | undefined;
heightheight?: ResponsiveValue<BlockSize> | undefined;
hidehide?: ResponsiveValue<boolean> | undefined;
justifyjustify?: ResponsiveValue<BlockJustify> | undefined;
marginmargin?: ResponsiveValue<BlockMargin> | undefined;
marginXmarginX?: ResponsiveValue<BlockMargin> | undefined;
marginYmarginY?: ResponsiveValue<BlockMargin> | undefined;
maxHeightmaxHeight?: ResponsiveValue<BlockSize> | undefined;
maxWidthmaxWidth?: ResponsiveValue<BlockSize> | undefined;
minHeightminHeight?: ResponsiveValue<BlockSize> | undefined;
minWidthminWidth?: ResponsiveValue<BlockSize> | undefined;
paddingpadding?: ResponsiveValue<BlockSpace> | undefined;
paddingXpaddingX?: ResponsiveValue<BlockSpace> | undefined;
paddingYpaddingY?: ResponsiveValue<BlockSpace> | undefined;
radiusradius?: ResponsiveValue<BlockRadius> | undefined;
refref?: Ref<unknown>;
rowFromrowFrom?: BlockRowFrom | undefined;
shadowshadow?: ResponsiveValue<BlockShadow> | undefined;
shrinkshrink?: ResponsiveValue<number | boolean> | undefined;
stickysticky?: boolean | undefined;
toptop?: ResponsiveValue<BlockSpace> | undefined;
widthwidth?: ResponsiveValue<BlockSize> | undefined;
wrapwrap?: ResponsiveValue<boolean> | undefined;
zIndexzIndex?: ResponsiveValue<BlockZIndex> | undefined;

BlockSpanProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
alignalign?: ResponsiveValue<BlockAlign> | undefined;
asas?: "span" | undefined;
asChildasChild?: false | undefined;
backgroundbackground?: ResponsiveValue<BlockBackground> | undefined;
borderborder?: ResponsiveValue<boolean> | undefined;
borderBottomborderBottom?: ResponsiveValue<boolean> | undefined;
borderRightborderRight?: ResponsiveValue<boolean> | undefined;
borderTopborderTop?: ResponsiveValue<boolean> | undefined;
centercenter?: ResponsiveValue<boolean> | undefined;
childrenchildren?: unknown;
classNameclassName?: string | undefined;
directiondirection?: ResponsiveValue<BlockDirection> | undefined;
gapgap?: ResponsiveValue<BlockSpace> | undefined;
growgrow?: ResponsiveValue<number | boolean> | undefined;
heightheight?: ResponsiveValue<BlockSize> | undefined;
hidehide?: ResponsiveValue<boolean> | undefined;
justifyjustify?: ResponsiveValue<BlockJustify> | undefined;
marginmargin?: ResponsiveValue<BlockMargin> | undefined;
marginXmarginX?: ResponsiveValue<BlockMargin> | undefined;
marginYmarginY?: ResponsiveValue<BlockMargin> | undefined;
maxHeightmaxHeight?: ResponsiveValue<BlockSize> | undefined;
maxWidthmaxWidth?: ResponsiveValue<BlockSize> | undefined;
minHeightminHeight?: ResponsiveValue<BlockSize> | undefined;
minWidthminWidth?: ResponsiveValue<BlockSize> | undefined;
paddingpadding?: ResponsiveValue<BlockSpace> | undefined;
paddingXpaddingX?: ResponsiveValue<BlockSpace> | undefined;
paddingYpaddingY?: ResponsiveValue<BlockSpace> | undefined;
radiusradius?: ResponsiveValue<BlockRadius> | undefined;
refref?: Ref<unknown>;
rowFromrowFrom?: BlockRowFrom | undefined;
shadowshadow?: ResponsiveValue<BlockShadow> | undefined;
shrinkshrink?: ResponsiveValue<number | boolean> | undefined;
stickysticky?: boolean | undefined;
toptop?: ResponsiveValue<BlockSpace> | undefined;
widthwidth?: ResponsiveValue<BlockSize> | undefined;
wrapwrap?: ResponsiveValue<boolean> | undefined;
zIndexzIndex?: ResponsiveValue<BlockZIndex> | undefined;

ButtonAsChildProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild: true;
childrenchildren: ButtonAsChildElement;
disableddisabled?: boolean | undefined;
onPressonPress?: ((e: PressEvent) => void) | undefined;
refref?: Ref<Element>;
sizesize?: ButtonSize | undefined;
typetype?: undefined;
variantvariant?: ButtonVariant | undefined;
widthwidth?: ButtonWidth | undefined;

ButtonGroupProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
attachedattached?: boolean | undefined;
childrenchildren?: unknown;
orientationorientation?: ButtonGroupOrientation | undefined;
refref?: Ref<HTMLDivElement>;

ButtonNativeProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild?: false | undefined;
childrenchildren?: unknown;
disableddisabled?: boolean | undefined;
onPressonPress?: ((e: PressEvent) => void) | undefined;
refref?: Ref<HTMLButtonElement>;
sizesize?: ButtonSize | undefined;
typetype?: "button" | "submit" | "reset" | undefined;
variantvariant?: ButtonVariant | undefined;
widthwidth?: ButtonWidth | undefined;

ButtonProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild?: boolean | undefined;
childrenchildren?: unknown;
disableddisabled?: boolean | undefined;
onPressonPress?: ((e: PressEvent) => void) | undefined;
refref?: ((value: Element | null) => void) | { current: Element | null; } | ((value: HTMLButtonElement | null) => void) | { current: HTMLButtonElement | null; } | null | undefined;
sizesize?: ButtonSize | undefined;
typetype?: "button" | "submit" | "reset" | undefined;
variantvariant?: ButtonVariant | undefined;
widthwidth?: ButtonWidth | undefined;

CardActionProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLDivElement>;

CardContentProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLDivElement>;

CardDescriptionProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLParagraphElement>;

CardFooterProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLDivElement>;

CardHeaderProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLDivElement>;

CardProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLDivElement>;
variantvariant?: CardVariant | undefined;

CardTitleProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLHeadingElement>;
titleAstitleAs?: CardTitleHeadingTag | undefined;Choose the level that follows the surrounding document hierarchy.

CatalogComponentProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asas?: keyof JSX.IntrinsicElements | undefined;
asChildasChild?: boolean | undefined;
childrenchildren?: unknown;
classclass?: string | undefined;
refref?: Ref<HTMLElement>;

CloseNativeProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
labellabel?: string | undefined;

CloseOwnProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
labellabel?: string | undefined;

CommandPaletteContentProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
closeOnBackdropcloseOnBackdrop?: boolean | undefined;
closeOnEscapecloseOnEscape?: boolean | undefined;
descriptiondescription?: string | undefined;
initialFocusinitialFocus?: string | false | (() => HTMLElement | null) | undefined;
onEscapeKeyDownonEscapeKeyDown?: ((event: KeyboardEvent) => void) | undefined;
onInteractOutsideonInteractOutside?: ((event: Event) => void) | undefined;
onPointerDownOutsideonPointerDownOutside?: ((event: PointerEvent) => void) | undefined;
overlayPropsoverlayProps?: DialogOverlayProps | undefined;
titletitle: string;

CommandPaletteLinkProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
closeOnSelectcloseOnSelect?: boolean | undefined;
onBeforeNavigateonBeforeNavigate?: ((event: Event) => void) | undefined;

CommandPaletteListProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLUListElement>;

ContainerProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
alignalign?: ResponsiveValue<BlockAlign> | undefined;
asas?: "div" | undefined;
backgroundbackground?: ResponsiveValue<BlockBackground> | undefined;
borderborder?: ResponsiveValue<boolean> | undefined;
borderBottomborderBottom?: ResponsiveValue<boolean> | undefined;
borderRightborderRight?: ResponsiveValue<boolean> | undefined;
borderTopborderTop?: ResponsiveValue<boolean> | undefined;
centercenter?: ResponsiveValue<boolean> | undefined;
childrenchildren?: unknown;
classNameclassName?: string | undefined;
directiondirection?: ResponsiveValue<BlockDirection> | undefined;
gapgap?: ResponsiveValue<BlockSpace> | undefined;
growgrow?: ResponsiveValue<number | boolean> | undefined;
heightheight?: ResponsiveValue<BlockSize> | undefined;
hidehide?: ResponsiveValue<boolean> | undefined;
justifyjustify?: ResponsiveValue<BlockJustify> | undefined;
marginmargin?: ResponsiveValue<BlockMargin> | undefined;
marginXmarginX?: ResponsiveValue<BlockMargin> | undefined;
marginYmarginY?: ResponsiveValue<BlockMargin> | undefined;
maxHeightmaxHeight?: ResponsiveValue<BlockSize> | undefined;
minHeightminHeight?: ResponsiveValue<BlockSize> | undefined;
minWidthminWidth?: ResponsiveValue<BlockSize> | undefined;
paddingpadding?: ResponsiveValue<BlockSpace> | undefined;
paddingXpaddingX?: ResponsiveValue<BlockSpace> | undefined;
paddingYpaddingY?: ResponsiveValue<BlockSpace> | undefined;
radiusradius?: ResponsiveValue<BlockRadius> | undefined;
rowFromrowFrom?: BlockRowFrom | undefined;
shadowshadow?: ResponsiveValue<BlockShadow> | undefined;
shrinkshrink?: ResponsiveValue<number | boolean> | undefined;
sizesize?: BlockSize | undefined;
stickysticky?: boolean | undefined;
toptop?: ResponsiveValue<BlockSpace> | undefined;
widthwidth?: ResponsiveValue<BlockSize> | undefined;
wrapwrap?: ResponsiveValue<boolean> | undefined;
zIndexzIndex?: ResponsiveValue<BlockZIndex> | undefined;

CopyButtonProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
failureMessagefailureMessage?: string | undefined;
labellabel: string;
resetAfterresetAfter?: number | undefined;
successMessagesuccessMessage?: string | undefined;
texttext: string;

DialogProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
defaultOpendefaultOpen?: boolean | undefined;
idid?: string | undefined;
modalmodal?: boolean | undefined;
onOpenChangeonOpenChange?: ((open: boolean) => void) | undefined;
openopen?: boolean | undefined;

EmptyStateProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
actionaction?: unknown;
alignalign?: ResponsiveValue<BlockAlign> | undefined;
asas?: "div" | undefined;
asChildasChild?: false | undefined;
backgroundbackground?: ResponsiveValue<BlockBackground> | undefined;
borderborder?: ResponsiveValue<boolean> | undefined;
borderBottomborderBottom?: ResponsiveValue<boolean> | undefined;
borderRightborderRight?: ResponsiveValue<boolean> | undefined;
borderTopborderTop?: ResponsiveValue<boolean> | undefined;
centercenter?: ResponsiveValue<boolean> | undefined;
childrenchildren?: unknown;
classNameclassName?: string | undefined;
descriptiondescription?: unknown;
directiondirection?: ResponsiveValue<BlockDirection> | undefined;
gapgap?: ResponsiveValue<BlockSpace> | undefined;
growgrow?: ResponsiveValue<number | boolean> | undefined;
heightheight?: ResponsiveValue<BlockSize> | undefined;
hidehide?: ResponsiveValue<boolean> | undefined;
iconicon?: unknown;
justifyjustify?: ResponsiveValue<BlockJustify> | undefined;
marginmargin?: ResponsiveValue<BlockMargin> | undefined;
marginXmarginX?: ResponsiveValue<BlockMargin> | undefined;
marginYmarginY?: ResponsiveValue<BlockMargin> | undefined;
maxHeightmaxHeight?: ResponsiveValue<BlockSize> | undefined;
maxWidthmaxWidth?: ResponsiveValue<BlockSize> | undefined;
minHeightminHeight?: ResponsiveValue<BlockSize> | undefined;
minWidthminWidth?: ResponsiveValue<BlockSize> | undefined;
paddingpadding?: ResponsiveValue<BlockSpace> | undefined;
paddingXpaddingX?: ResponsiveValue<BlockSpace> | undefined;
paddingYpaddingY?: ResponsiveValue<BlockSpace> | undefined;
radiusradius?: ResponsiveValue<BlockRadius> | undefined;
refref?: Ref<unknown>;
rowFromrowFrom?: BlockRowFrom | undefined;
shadowshadow?: ResponsiveValue<BlockShadow> | undefined;
shrinkshrink?: ResponsiveValue<number | boolean> | undefined;
stickysticky?: boolean | undefined;
titletitle?: unknown;
titleAstitleAs?: EmptyStateHeadingTag | undefined;
toptop?: ResponsiveValue<BlockSpace> | undefined;
widthwidth?: ResponsiveValue<BlockSize> | undefined;
wrapwrap?: ResponsiveValue<boolean> | undefined;
zIndexzIndex?: ResponsiveValue<BlockZIndex> | undefined;

FieldErrorProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLParagraphElement>;

FieldHintProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLParagraphElement>;

FieldProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
invalidinvalid?: boolean | undefined;
refref?: Ref<HTMLDivElement>;

FooterContentProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLDivElement>;

FooterDescriptionProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLParagraphElement>;

FooterLinkProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLAnchorElement>;

FooterLinksProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLElement>;

FooterSectionProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLDivElement>;

FooterTitleProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
refref?: Ref<HTMLHeadingElement>;

GridProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
alignalign?: ResponsiveValue<GridAlign> | undefined;
asas?: TElement | undefined;
childrenchildren?: unknown;
columnscolumns?: ResponsiveValue<GridColumns> | undefined;
gapgap?: ResponsiveValue<BlockSpace> | undefined;
refref?: Ref<HTMLElement>;

HeaderProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
positionposition?: "sticky" | "static" | undefined;
stickysticky?: boolean | undefined;

InputGroupProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
attachedattached?: boolean | undefined;
childrenchildren?: unknown;
orientationorientation?: InputGroupOrientation | undefined;
refref?: Ref<HTMLDivElement>;

InputGroupTextAsChildProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild: true;
childrenchildren: JSXElement;
refref?: Ref<unknown>;

InputGroupTextProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild?: false | undefined;
childrenchildren?: unknown;
refref?: Ref<HTMLSpanElement>;

LegacyLayoutProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
alignalign?: ResponsiveValue<BlockAlign> | undefined;
asas?: BlockElement | undefined;
asChildasChild?: boolean | undefined;
backgroundbackground?: ResponsiveValue<BlockBackground> | undefined;
borderborder?: ResponsiveValue<boolean> | undefined;
borderBottomborderBottom?: ResponsiveValue<boolean> | undefined;
borderRightborderRight?: ResponsiveValue<boolean> | undefined;
borderTopborderTop?: ResponsiveValue<boolean> | undefined;
centercenter?: ResponsiveValue<boolean> | undefined;
childrenchildren?: unknown;
classNameclassName?: string | undefined;
directiondirection?: ResponsiveValue<BlockDirection> | undefined;
gapgap?: ResponsiveValue<LegacySpace> | undefined;
growgrow?: ResponsiveValue<number | boolean> | undefined;
heightheight?: ResponsiveValue<BlockSize> | undefined;
hidehide?: ResponsiveValue<boolean> | undefined;
justifyjustify?: ResponsiveValue<BlockJustify> | undefined;
marginmargin?: ResponsiveValue<BlockMargin> | undefined;
marginXmarginX?: ResponsiveValue<BlockMargin> | undefined;
marginYmarginY?: ResponsiveValue<BlockMargin> | undefined;
maxHeightmaxHeight?: ResponsiveValue<BlockSize> | undefined;
maxWidthmaxWidth?: ResponsiveValue<BlockSize> | undefined;
minHeightminHeight?: ResponsiveValue<BlockSize> | undefined;
minWidthminWidth?: ResponsiveValue<BlockSize> | undefined;
pp?: ResponsiveValue<LegacySpace> | undefined;
paddingpadding?: ResponsiveValue<LegacySpace> | undefined;
paddingXpaddingX?: ResponsiveValue<BlockSpace> | undefined;
paddingYpaddingY?: ResponsiveValue<BlockSpace> | undefined;
radiusradius?: ResponsiveValue<BlockRadius> | undefined;
refref?: Ref<unknown>;
rowFromrowFrom?: BlockRowFrom | undefined;
shadowshadow?: ResponsiveValue<BlockShadow> | undefined;
shrinkshrink?: ResponsiveValue<number | boolean> | undefined;
stickysticky?: boolean | undefined;
toptop?: ResponsiveValue<BlockSpace> | undefined;
widthwidth?: ResponsiveValue<BlockSize> | undefined;
wrapwrap?: ResponsiveValue<LegacyWrap> | undefined;
zIndexzIndex?: ResponsiveValue<BlockZIndex> | undefined;

MetaStripProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
densitydensity?: MetaStripDensity | undefined;
itemsitems: readonly MetaStripItem[];
refref?: Ref<HTMLDListElement>;

NavbarProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
breakpointbreakpoint?: false | NavbarCollapseBreakpoint | undefined;
collapseAtcollapseAt?: false | NavbarCollapseBreakpoint | undefined;
collapseIconcollapseIcon?: unknown;
collapseLabelcollapseLabel?: string | undefined;

NavBrandProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
alignalign?: ResponsiveValue<BlockAlign> | undefined;
asChildasChild?: boolean | undefined;
backgroundbackground?: ResponsiveValue<BlockBackground> | undefined;
borderborder?: ResponsiveValue<boolean> | undefined;
borderBottomborderBottom?: ResponsiveValue<boolean> | undefined;
borderRightborderRight?: ResponsiveValue<boolean> | undefined;
borderTopborderTop?: ResponsiveValue<boolean> | undefined;
centercenter?: ResponsiveValue<boolean> | undefined;
childrenchildren?: unknown;
directiondirection?: ResponsiveValue<BlockDirection> | undefined;
gapgap?: ResponsiveValue<BlockSpace> | undefined;
growgrow?: ResponsiveValue<number | boolean> | undefined;
heightheight?: ResponsiveValue<BlockSize> | undefined;
hidehide?: ResponsiveValue<boolean> | undefined;
justifyjustify?: ResponsiveValue<BlockJustify> | undefined;
marginmargin?: ResponsiveValue<BlockMargin> | undefined;
marginXmarginX?: ResponsiveValue<BlockMargin> | undefined;
marginYmarginY?: ResponsiveValue<BlockMargin> | undefined;
maxHeightmaxHeight?: ResponsiveValue<BlockSize> | undefined;
maxWidthmaxWidth?: ResponsiveValue<BlockSize> | undefined;
minHeightminHeight?: ResponsiveValue<BlockSize> | undefined;
minWidthminWidth?: ResponsiveValue<BlockSize> | undefined;
paddingpadding?: ResponsiveValue<BlockSpace> | undefined;
paddingXpaddingX?: ResponsiveValue<BlockSpace> | undefined;
paddingYpaddingY?: ResponsiveValue<BlockSpace> | undefined;
radiusradius?: ResponsiveValue<BlockRadius> | undefined;
refref?: Ref<unknown>;
rowFromrowFrom?: BlockRowFrom | undefined;
shadowshadow?: ResponsiveValue<BlockShadow> | undefined;
shrinkshrink?: ResponsiveValue<number | boolean> | undefined;
stickysticky?: boolean | undefined;
toptop?: ResponsiveValue<BlockSpace> | undefined;
widthwidth?: ResponsiveValue<BlockSize> | undefined;
wrapwrap?: ResponsiveValue<boolean> | undefined;
zIndexzIndex?: ResponsiveValue<BlockZIndex> | undefined;

NavDropdownProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
labellabel: unknown;

NavGroupProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
labellabel?: unknown;
titletitle?: unknown;

NavItemAsChildProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
activeactive?: boolean | undefined;
asChildasChild: true;
childrenchildren: JSXElement;
refref?: Ref<unknown>;

NavItemProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
activeactive?: boolean | undefined;
asChildasChild?: false | undefined;
childrenchildren?: unknown;
refref?: Ref<HTMLAnchorElement>;

NavLinkProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
activeactive?: boolean | undefined;
matchmatch?: NavLinkMatch | undefined;

PageHeaderProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
actionsactions?: unknown;
descriptiondescription?: unknown;
directiondirection?: undefined;
rowFromrowFrom?: undefined;
titletitle: unknown;

PillProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
activeactive?: boolean | undefined;
matchmatch?: NavLinkMatch | undefined;

PillsAsChildProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild: true;
childrenchildren: JSXElement;
refref?: Ref<unknown>;

PillsProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild?: false | undefined;
childrenchildren?: unknown;
refref?: Ref<HTMLElement>;

SeparatorAsChildProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild: true;
childrenchildren: JSXElement;
decorativedecorative?: boolean | undefined;
orientationorientation?: "vertical" | "horizontal" | undefined;
refref?: Ref<unknown>;

SeparatorNativeProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild?: false | undefined;
childrenchildren?: unknown;
decorativedecorative?: boolean | undefined;
orientationorientation?: "vertical" | "horizontal" | undefined;
refref?: Ref<HTMLDivElement>;

SeparatorOwnProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
decorativedecorative?: boolean | undefined;
orientationorientation?: "vertical" | "horizontal" | undefined;

SeparatorProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild?: boolean | undefined;
childrenchildren?: unknown;
decorativedecorative?: boolean | undefined;
orientationorientation?: "vertical" | "horizontal" | undefined;
refref?: ((value: unknown) => void) | { current: unknown; } | ((value: HTMLDivElement | null) => void) | { current: HTMLDivElement | null; } | null | undefined;

SidebarButtonProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
activeactive?: boolean | undefined;
asChildasChild?: boolean | undefined;
sizesize?: "sm" | "lg" | "default" | undefined;
tooltiptooltip?: string | undefined;
tooltipSidetooltipSide?: SidebarTooltipSide | undefined;
variantvariant?: "default" | "outline" | undefined;

SidebarPartProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asas?: keyof JSX.IntrinsicElements | undefined;
asChildasChild?: boolean | undefined;

SidebarProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
collapsiblecollapsible?: SidebarCollapsible | undefined;
shrinkshrink?: ResponsiveValue<number | boolean> | undefined;
sideside?: SidebarSide | undefined;
variantvariant?: SidebarVariant | undefined;
widthwidth?: ResponsiveValue<BlockSize> | undefined;

SidebarRailProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
activeactive?: boolean | undefined;
asChildasChild?: boolean | undefined;
sizesize?: "sm" | "lg" | "default" | undefined;
tooltiptooltip?: string | undefined;
tooltipSidetooltipSide?: SidebarTooltipSide | undefined;
variantvariant?: "default" | "outline" | undefined;

SkeletonAsChildProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild: true;
childrenchildren: JSXElement;
heightheight?: string | number | undefined;
refref?: Ref<unknown>;
widthwidth?: string | number | undefined;

SkeletonOwnProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
heightheight?: string | number | undefined;
widthwidth?: string | number | undefined;

SkeletonProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild?: false | undefined;
childrenchildren?: unknown;
heightheight?: string | number | undefined;
refref?: Ref<HTMLDivElement>;
widthwidth?: string | number | undefined;

SpinnerOwnProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
labellabel?: string | undefined;
sizesize?: SpinnerSize | undefined;

SpinnerProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
labellabel?: string | undefined;
sizesize?: SpinnerSize | undefined;

TabProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
activeactive?: boolean | undefined;
matchmatch?: NavLinkMatch | undefined;

TabsAsChildProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild: true;
childrenchildren: JSXElement;
refref?: Ref<unknown>;

TabsProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asChildasChild?: false | undefined;
childrenchildren?: unknown;
refref?: Ref<HTMLElement>;

TextProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
asas?: TextElement | undefined;
childrenchildren?: unknown;
fontfont?: TextFont | undefined;
numericnumeric?: TextNumeric | undefined;
refref?: Ref<HTMLElement>;
sizesize?: TextSize | undefined;
tonetone?: TextTone | undefined;
truncatetruncate?: boolean | undefined;
weightweight?: TextWeight | undefined;
wrapwrap?: TextWrap | undefined;

ThemePickerProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
labellabel?: string | undefined;
themesthemes?: readonly ThemeOption[] | undefined;

ThemeScopeProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
defaultThemedefaultTheme?: ThemeName | undefined;
storageKeystorageKey?: string | undefined;
themesthemes?: readonly ThemeOption[] | undefined;

ThemeToggleProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
childrenchildren?: unknown;
darkIcondarkIcon?: unknown;
lightIconlightIcon?: unknown;
onPressonPress?: ((event: PressEvent) => void) | undefined;
systemIconsystemIcon?: unknown;
themesthemes?: readonly ThemeName[] | undefined;

ToolbarProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
actionsactions?: unknown;
directiondirection?: undefined;
rowFromrowFrom?: undefined;
titletitle: unknown;

VirtualListAsChildProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
apiRefapiRef?: Ref<VirtualListApi<Item> | null>;
asChildasChild: true;
childrenchildren: JSXElement;
followBottomfollowBottom?: boolean | { threshold?: number; } | undefined;
getKeygetKey: (item: Item, index: number) => string | number;
itemsitems: readonly Item[];
onScrollonScroll?: ((event: Event) => void) | undefined;
overscanoverscan?: VirtualOverscan | undefined;
refref?: Ref<HTMLElement>;
rowComponentrowComponent: VirtualListRowComponent<Item>;
rowHeightrowHeight: number;
viewportviewport?: "lg" | undefined;

VirtualListProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
apiRefapiRef?: Ref<VirtualListApi<Item> | null>;
asChildasChild?: false | undefined;
followBottomfollowBottom?: boolean | { threshold?: number; } | undefined;
getKeygetKey: (item: Item, index: number) => string | number;
itemsitems: readonly Item[];
onScrollonScroll?: ((event: Event) => void) | undefined;
overscanoverscan?: VirtualOverscan | undefined;
refref?: Ref<HTMLElement>;
rowComponentrowComponent: VirtualListRowComponent<Item>;
rowHeightrowHeight: number;
viewportviewport?: "lg" | undefined;

VirtualListRowComponentProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
indexindex: number;
isVisibleisVisible: boolean;
itemitem: Item;
rowKeyrowKey: string;

VirtualTableAsChildProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
apiRefapiRef?: Ref<VirtualTableApi<Row> | null>;
asChildasChild: true;
childrenchildren: JSXElement;
columnscolumns: readonly VirtualTableColumn<Row>[];
defaultSelectedRowKeydefaultSelectedRowKey?: string | null | undefined;
getKeygetKey: (row: Row, index: number) => string | number;
headerHeightheaderHeight: number;
onRowClickonRowClick?: ((row: Row, rowIndex: number, rowKey: string, event: MouseEvent) => void) | undefined;
onScrollonScroll?: ((event: Event) => void) | undefined;
onSelectedRowKeyChangeonSelectedRowKeyChange?: ((next: string | null) => void) | undefined;
overscanoverscan?: VirtualOverscan | undefined;
refref?: Ref<HTMLElement>;
rowHeightrowHeight: number;
rowsrows: readonly Row[];
selectedRowKeyselectedRowKey?: string | null | undefined;
tableWidthtableWidth?: "compact" | undefined;
viewportviewport?: "lg" | undefined;

VirtualTableCellComponentProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
columncolumn: VirtualTableColumn<Row>;
rowrow: Row;
rowIndexrowIndex: number;
rowKeyrowKey: string;
selectedselected: boolean;

VirtualTableProps

Import from @askrjs/themes/components.

PropTypeDefaultDescription
apiRefapiRef?: Ref<VirtualTableApi<Row> | null>;
asChildasChild?: false | undefined;
columnscolumns: readonly VirtualTableColumn<Row>[];
defaultSelectedRowKeydefaultSelectedRowKey?: string | null | undefined;
getKeygetKey: (row: Row, index: number) => string | number;
headerHeightheaderHeight: number;
onRowClickonRowClick?: ((row: Row, rowIndex: number, rowKey: string, event: MouseEvent) => void) | undefined;
onScrollonScroll?: ((event: Event) => void) | undefined;
onSelectedRowKeyChangeonSelectedRowKeyChange?: ((next: string | null) => void) | undefined;
overscanoverscan?: VirtualOverscan | undefined;
refref?: Ref<HTMLElement>;
rowHeightrowHeight: number;
rowsrows: readonly Row[];
selectedRowKeyselectedRowKey?: string | null | undefined;
tableWidthtableWidth?: "compact" | undefined;
viewportviewport?: "lg" | undefined;

Purpose

None of Alert, Badge, Empty, Skeleton, Spinner, or Stat ships a headless counterpart in `@askrjs/ui` — each lives only in the themes package, since their behavior amounts to static markup and styling rather than anything complex enough to justify a separate logic layer. Stat is the odd one out in a different way: it has no dedicated `@askrjs/themes/stat` subpath, so you reach it through the shared `@askrjs/themes/components` barrel instead of importing it on its own.

Install and import

Alert, Badge, Empty, Skeleton, and Spinner each have their own themes subpath — `@askrjs/themes/alert`, `@askrjs/themes/badge`, `@askrjs/themes/empty`, `@askrjs/themes/skeleton`, `@askrjs/themes/spinner`. Stat has no subpath of its own: import `Stat`, `StatLabel`, `StatValue`, and `StatDescription` from the full `@askrjs/themes/components` barrel instead — or pull all six components from that same barrel if you'd rather have one import for the whole group.

Live examples

The example branches across the states these components exist to cover — pending, failed, empty, and loaded — so you can see which one belongs in each branch rather than reaching for whichever is nearest. Stat comes from the `@askrjs/themes/components` barrel rather than its own subpath, and is otherwise a normal `Stat` / `StatLabel` / `StatValue` composition.

Anatomy

Alert is a single component with `icon`, `title`, `description`, and `actions` slots plus a `titleAs` heading tag; Badge and Skeleton are similarly flat, single components with no compound parts. This group actually ships two different empty-state components, not one — don't conflate them: `Empty` is the compound one, with `EmptyHeader`, `EmptyMedia`, `EmptyTitle`, `EmptyDescription`, and `EmptyContent` slotting into an `Empty` wrapper (closer in shape to Card than to Alert or Badge), while `EmptyState` is a separate, single all-in-one component (`icon`/`title`/`titleAs`/`description`/`action` props, no compound parts of its own) for the common case where you don't need to hand-assemble the pieces. Spinner has no compound structure either; it's a themed wrapper around ProgressCircle's indeterminate presentation. Stat is compound too: a `Stat` wrapper composes with `StatLabel`, `StatValue`, and `StatDescription` children.

State model

None of these six own any state — every one of them is presentational, driven entirely by the props you pass on each render, and that includes Stat. Alert accepts an `onDismiss` callback for a caller-owned dismiss button, but the decision to mount or unmount the alert is still yours; Alert doesn't track its own visibility internally.

Keyboard and accessibility

Alert accepts a `dismissLabel` for the accessible name of its optional dismiss control, since that's the only interactive part across this group. Badge, Skeleton, Empty, Stat, and Spinner are non-interactive and have no keyboard behavior to test; because Spinner is effectively ProgressCircle's indeterminate look, give it a `label` so assistive tech gets something better than silence while it spins.

Styling and tokens

Alert and Badge both take a `variant` prop that maps to theme tokens instead of requiring custom color CSS — Alert's set is `'default' | 'info' | 'success' | 'warning' | 'danger'`, Badge's is a bit wider with `'secondary'` and `'outline'` added. Skeleton takes explicit `width`/`height` so its placeholder shape matches the real content it's standing in for, and Spinner takes a `size` of `'sm' | 'md' | 'lg'`.

API

Badge supports `asChild` to render as something other than a `span`, and Skeleton supports the same pattern for its wrapping `div`. Alert's props are `title`, `description`, `icon`, `actions`, `titleAs`, `dismissLabel`, `onDismiss`, and `variant`. `EmptyState` (the single all-in-one component, not the compound `Empty`/`EmptyHeader`/`EmptyMedia`/`EmptyTitle`/`EmptyDescription`/`EmptyContent` family) takes `icon`, `title`, `titleAs`, `description`, and `action`.

Edge cases

Stat has no dedicated subpath, so a `@askrjs/themes/stat` import will fail — reach for `@askrjs/themes/components` instead, which is easy to miss if you're used to every other component here having its own subpath. Skeleton has no built-in timeout, so pair it with the real loading/error state next to it instead of letting it sit on screen indefinitely if a request stalls.

See Progress for a determinate alternative to Spinner's indeterminate look, and Toast and Sonner for time-boxed feedback instead of a persistent inline Alert.