@kb.ui/react 0.0.0-stage → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +767 -2
  2. package/dist/check-versions.js +34 -0
  3. package/dist/components/Badge/Badge.d.ts +15 -0
  4. package/dist/components/Button/Button.d.ts +19 -0
  5. package/dist/components/Callout/Callout.d.ts +19 -0
  6. package/dist/components/Card/Card.d.ts +12 -0
  7. package/dist/components/Checkbox/Checkbox.d.ts +23 -0
  8. package/dist/components/Code/Code.d.ts +3 -0
  9. package/dist/components/Combobox/Combobox.d.ts +65 -0
  10. package/dist/components/Container/Container.d.ts +14 -0
  11. package/dist/components/Dialog/Dialog.d.ts +50 -0
  12. package/dist/components/ErrorSummary/ErrorSummary.d.ts +28 -0
  13. package/dist/components/Fieldset/Fieldset.d.ts +17 -0
  14. package/dist/components/FileInput/FileInput.d.ts +59 -0
  15. package/dist/components/FormActions/FormActions.d.ts +10 -0
  16. package/dist/components/Grid/Grid.d.ts +12 -0
  17. package/dist/components/Heading/Heading.d.ts +293 -0
  18. package/dist/components/Inline/Inline.d.ts +14 -0
  19. package/dist/components/Input/Input.d.ts +25 -0
  20. package/dist/components/Link/Link.d.ts +6 -0
  21. package/dist/components/Menu/Menu.d.ts +34 -0
  22. package/dist/components/MultiSelect/MultiSelect.d.ts +67 -0
  23. package/dist/components/NumberField/NumberField.d.ts +53 -0
  24. package/dist/components/Panel/Panel.d.ts +75 -0
  25. package/dist/components/Progress/Progress.d.ts +17 -0
  26. package/dist/components/RadioGroup/RadioGroup.d.ts +45 -0
  27. package/dist/components/ScrollArea/ScrollArea.d.ts +17 -0
  28. package/dist/components/Select/Select.d.ts +39 -0
  29. package/dist/components/Separator/Separator.d.ts +9 -0
  30. package/dist/components/Split/Split.d.ts +20 -0
  31. package/dist/components/Stat/Stat.d.ts +15 -0
  32. package/dist/components/Status/Status.d.ts +22 -0
  33. package/dist/components/Switch/Switch.d.ts +41 -0
  34. package/dist/components/Text/Text.d.ts +15 -0
  35. package/dist/components/Textarea/Textarea.d.ts +24 -0
  36. package/dist/components/Toolbar/Toolbar.d.ts +31 -0
  37. package/dist/components/Tooltip/Tooltip.d.ts +20 -0
  38. package/dist/index.d.ts +37 -0
  39. package/dist/index.js +1770 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/styles.css +1 -0
  42. package/dist/utils/kb.d.ts +11 -0
  43. package/dist/utils/layout.d.ts +10 -0
  44. package/package.json +53 -4
@@ -0,0 +1,34 @@
1
+ // scripts/check-versions.ts
2
+ import { realpathSync } from "node:fs";
3
+ import { readdir, readFile } from "node:fs/promises";
4
+ import { join, resolve } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ async function checkVersions(root) {
7
+ const scope = join(root, "node_modules", "@kb.ui");
8
+ const names = await readdir(scope);
9
+ if (!names.includes("react"))
10
+ throw new Error("Missing @kb.ui/react");
11
+ const versions = await Promise.all(names.map(async (name) => {
12
+ const pkg = JSON.parse(await readFile(join(scope, name, "package.json"), "utf8"));
13
+ if (typeof pkg !== "object" || pkg === null || !("name" in pkg) || pkg.name !== `@kb.ui/${name}` || !("version" in pkg) || typeof pkg.version !== "string" || !/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/.test(pkg.version)) {
14
+ throw new Error(`Invalid KBUI manifest: @kb.ui/${name}`);
15
+ }
16
+ return { name, version: pkg.version };
17
+ }));
18
+ const version = versions[0]?.version;
19
+ if (!version || versions.some((pkg) => pkg.version !== version)) {
20
+ throw new Error(`Mixed KBUI versions: ${versions.map((pkg) => `@kb.ui/${pkg.name}@${pkg.version}`).join(", ")}`);
21
+ }
22
+ return version;
23
+ }
24
+ if (process.argv[1] && realpathSync(process.argv[1]) === realpathSync(fileURLToPath(import.meta.url))) {
25
+ try {
26
+ console.log(`KBUI ${await checkVersions(resolve(process.argv[2] ?? process.cwd()))}: synchronized`);
27
+ } catch (error) {
28
+ console.error(error instanceof Error ? error.message : String(error));
29
+ process.exitCode = 1;
30
+ }
31
+ }
32
+ export {
33
+ checkVersions
34
+ };
@@ -0,0 +1,15 @@
1
+ import type { ComponentProps } from "react";
2
+ export type BadgeTone = "neutral" | "info" | "success" | "warning" | "danger";
3
+ export type BadgeAppearance = "chip" | "plain";
4
+ /** Static metadata label; use Status for a state that changes. */
5
+ export type BadgeProps = ComponentProps<"span"> & {
6
+ /** Ink and tint. */
7
+ tone?: BadgeTone;
8
+ /** Chip draws a tinted ring; plain is inline text. */
9
+ appearance?: BadgeAppearance;
10
+ /** Small uppercase monospace, for identifiers and roles. */
11
+ mono?: boolean;
12
+ /** Keep the text's case and spacing, for case-sensitive values such as branches and paths. */
13
+ preserveCase?: boolean;
14
+ };
15
+ export declare function Badge({ tone, appearance, mono, preserveCase, className, ...props }: BadgeProps): import("react").JSX.Element;
@@ -0,0 +1,19 @@
1
+ import { Button as Base } from "@base-ui/react/button";
2
+ export type ButtonVariant = "primary" | "secondary" | "ghost" | "danger";
3
+ export type ButtonSize = "sm" | "md" | "lg" | "icon";
4
+ type ButtonBaseProps = Omit<Base.Props, "className"> & {
5
+ /** Plain class string; Base UI's function form is not supported. */
6
+ className?: string;
7
+ /** Action emphasis: primary main, secondary supporting, ghost quiet, danger destructive. */
8
+ variant?: ButtonVariant;
9
+ };
10
+ /** Navigation use: pass render={<a href/>} nativeButton={false} role="link". Icon size needs aria-label. */
11
+ export type ButtonProps = ButtonBaseProps & ({
12
+ /** Height and padding scale; icon is a square for a lone icon. */
13
+ size?: Exclude<ButtonSize, "icon">;
14
+ } | {
15
+ size: "icon";
16
+ "aria-label": string;
17
+ });
18
+ export declare function Button({ variant, size, className, ...props }: ButtonProps): import("react").JSX.Element;
19
+ export {};
@@ -0,0 +1,19 @@
1
+ import type { ComponentProps, ReactNode } from "react";
2
+ import { type ClassNames } from "../../utils/kb";
3
+ export type CalloutTone = "neutral" | "info" | "success" | "warning" | "danger";
4
+ /** Inline message with optional actions; text carries the meaning, tone only reinforces it. */
5
+ export type CalloutProps = Omit<ComponentProps<"div">, "title"> & {
6
+ /** Ink of the edge, tint and icon. */
7
+ tone?: CalloutTone;
8
+ /** Short heading line. */
9
+ title?: ReactNode;
10
+ /** Caller-provided decorative icon. */
11
+ icon?: ReactNode;
12
+ /** Buttons that resolve the message. */
13
+ actions?: ReactNode;
14
+ /** Announce changes: adds role="status" and nothing else. */
15
+ live?: boolean;
16
+ /** Classes for inner parts, keyed by part. */
17
+ classNames?: ClassNames<"icon" | "content" | "title" | "body" | "actions">;
18
+ };
19
+ export declare function Callout({ classNames, tone, title, icon, actions, live, className, children, ...props }: CalloutProps): import("react").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { type ComponentProps } from "react";
2
+ type Container = "article" | "div" | "li";
3
+ export type CardProps<T extends Container = "article"> = ComponentProps<T> & {
4
+ /** Semantic container; links and controls stay caller-owned. */
5
+ as?: T;
6
+ /** Outlined surface or unstyled list content. */
7
+ appearance?: "outlined" | "plain";
8
+ };
9
+ export declare function Card<T extends Container = "article">({ as, appearance, className, ...props }: CardProps<T>): import("react").DetailedReactHTMLElement<Omit<CardProps<T>, "appearance" | "as" | "className"> & {
10
+ className: string;
11
+ } & Record<`data-${string}`, string>, HTMLElement>;
12
+ export {};
@@ -0,0 +1,23 @@
1
+ import { type ComponentProps } from "react";
2
+ import { type ClassNames } from "../../utils/kb";
3
+ export type CheckboxProps = Omit<ComponentProps<"input">, "type" | "checked" | "defaultChecked" | "onChange" | "size"> & {
4
+ /** Visible accessible label. */
5
+ label: string;
6
+ /** Controlled checked state. */
7
+ checked: boolean;
8
+ /** Receives next checked state; mixed resolves to checked. */
9
+ onCheckedChange: (checked: boolean) => void;
10
+ /** Announce a mixed aggregate selection. */
11
+ indeterminate?: boolean;
12
+ /** Hide label text visually. */
13
+ visuallyHidden?: boolean;
14
+ /** Helper text associated with the input. */
15
+ description?: string;
16
+ /** Visible error; marks the input invalid. */
17
+ error?: string;
18
+ /** Class on the native input slot. */
19
+ controlClassName?: string;
20
+ /** Classes for inner parts, keyed by part. */
21
+ classNames?: ClassNames<"control" | "label" | "mark" | "tick" | "mixed" | "description" | "error">;
22
+ };
23
+ export declare function Checkbox({ classNames, label, checked, onCheckedChange, indeterminate, visuallyHidden, description, error, disabled, readOnly, className, controlClassName, id: providedId, ref, style, "aria-invalid": callerAriaInvalid, ...props }: CheckboxProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import type { ComponentProps } from "react";
2
+ export type CodeProps = ComponentProps<"code">;
3
+ export declare function Code({ className, ...props }: CodeProps): import("react").JSX.Element;
@@ -0,0 +1,65 @@
1
+ import { Combobox as Base } from "@base-ui/react/combobox";
2
+ import { type ComponentPropsWithoutRef, type ReactNode } from "react";
3
+ import { type ClassNames } from "../../utils/kb";
4
+ /** Single selectable option in a Combobox list. */
5
+ export interface ComboboxOption {
6
+ /** Option value committed to `onValueChange`. */
7
+ value: string;
8
+ /** Visible option label used for display and filtering. */
9
+ label: string;
10
+ /** Prevent selecting this option while keeping it visible. */
11
+ disabled?: boolean;
12
+ }
13
+ /** Styleable inner anatomy slots of Combobox. */
14
+ export type ComboboxSlot = "label" | "shell" | "input" | "actions" | "clear" | "trigger" | "positioner" | "popup" | "list" | "option" | "optionIndicator" | "optionLabel" | "empty" | "description" | "error";
15
+ /** Props for the searchable single-select Combobox component. */
16
+ export interface ComboboxProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue" | "onChange"> {
17
+ /** Visible label naming the combobox input. */
18
+ label: string;
19
+ /** Selectable options shown and filtered in the popup list. */
20
+ options: readonly ComboboxOption[];
21
+ /** Selected option value, or `null` when nothing is selected. */
22
+ value: string | null;
23
+ /** Called when the user selects or clears an option. */
24
+ onValueChange: (value: string | null) => void;
25
+ /** Placeholder text shown when the input is empty. */
26
+ placeholder?: string;
27
+ /** Message announced and shown when no options match the query. */
28
+ emptyMessage?: ReactNode;
29
+ /** Control height and typography scale. */
30
+ size?: "sm" | "md" | "lg";
31
+ /** Supporting helper text linked through `aria-describedby`. */
32
+ description?: ReactNode;
33
+ /** Validation error message; marks the control invalid when truthy. */
34
+ error?: ReactNode;
35
+ /** Mark the control invalid without an error message. */
36
+ invalid?: boolean;
37
+ /** Disable interaction and form submission. */
38
+ disabled?: boolean;
39
+ /** Allow focus and inspection while preventing value changes. */
40
+ readOnly?: boolean;
41
+ /** Require a selection for form validation. */
42
+ required?: boolean;
43
+ /** Form field name for native form submission. */
44
+ name?: string;
45
+ /** Controlled popup open state. */
46
+ open?: boolean;
47
+ /** Initial popup open state when uncontrolled. */
48
+ defaultOpen?: boolean;
49
+ /** Called when the popup opens or closes. */
50
+ onOpenChange?: (open: boolean) => void;
51
+ /** Controlled search query text inside the input. */
52
+ inputValue?: string;
53
+ /** Called when the search query text changes. */
54
+ onInputValueChange?: (inputValue: string) => void;
55
+ /** Accessible name for the clear button (defaults to `"Clear {label}"`). */
56
+ clearLabel?: string;
57
+ /** Accessible name for the popup toggle button (defaults to `"Toggle {label} options"`). */
58
+ toggleLabel?: string;
59
+ /** Portal host; defaults to field root to retain nested themes. */
60
+ container?: Base.Portal.Props["container"];
61
+ /** Extra classes for inner parts, keyed by slot name. */
62
+ classNames?: ClassNames<ComboboxSlot>;
63
+ }
64
+ /** Searchable single-choice combobox with type-to-filter and removable selection. */
65
+ export declare const Combobox: import("react").ForwardRefExoticComponent<ComboboxProps & import("react").RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,14 @@
1
+ import type { LayoutElementProps } from "../../utils/layout";
2
+ export type ContainerElement = "div" | "main" | "section" | "article" | "aside" | "header" | "footer";
3
+ export type ContainerSize = "sm" | "md" | "lg" | "full";
4
+ export type ContainerProps<T extends ContainerElement = "div"> = LayoutElementProps<T> & {
5
+ /** Maximum outer width, including gutters. */
6
+ size?: ContainerSize;
7
+ /** Shared responsive gutters; disable when the parent owns padding. */
8
+ gutter?: boolean;
9
+ };
10
+ export declare function Container<T extends ContainerElement = "div">({ as, size, gutter, className, ...props }: ContainerProps<T>): import("react").DetailedReactHTMLElement<Omit<ContainerProps<T>, "as" | "className" | "gutter" | "size"> & {
11
+ "data-gutter": undefined;
12
+ } & {
13
+ className: string;
14
+ } & Record<`data-${string}`, string>, HTMLElement>;
@@ -0,0 +1,50 @@
1
+ import { Dialog as Base } from "@base-ui/react/dialog";
2
+ import type { ComponentProps, ReactNode } from "react";
3
+ import type { ClassNames } from "../../utils/kb";
4
+ export type DialogProps = Base.Root.Props;
5
+ export type DialogTriggerProps = Base.Trigger.Props;
6
+ export type DialogCloseProps = Base.Close.Props;
7
+ export type DialogTitleProps = Omit<Base.Title.Props, "className"> & {
8
+ /** Plain class string; Base UI's function form is not supported. */
9
+ className?: string;
10
+ };
11
+ export type DialogDescriptionProps = Omit<Base.Description.Props, "className"> & {
12
+ /** Plain class string; Base UI's function form is not supported. */
13
+ className?: string;
14
+ };
15
+ export type DialogActionsProps = ComponentProps<"div">;
16
+ export type DialogSectionProps = ComponentProps<"div">;
17
+ export type DialogContentProps = Omit<Base.Popup.Props, "className" | "title"> & {
18
+ /** Accessible name; mutually exclusive with a composed Dialog.Title. */
19
+ title?: ReactNode;
20
+ /** Accessible description; mutually exclusive with a composed Dialog.Description. */
21
+ description?: ReactNode;
22
+ /** Plain class string; Base UI's function form is not supported. */
23
+ className?: string;
24
+ /** Portal target; defaults to document.body. */
25
+ container?: Base.Portal.Props["container"];
26
+ /** Classes for inner parts, keyed by part. */
27
+ classNames?: ClassNames<"backdrop">;
28
+ };
29
+ declare function DialogRoot(props: DialogProps): import("react").JSX.Element;
30
+ declare function DialogTrigger(props: DialogTriggerProps): import("react").JSX.Element;
31
+ declare function DialogClose(props: DialogCloseProps): import("react").JSX.Element;
32
+ declare function DialogTitle({ className, ...props }: DialogTitleProps): import("react").JSX.Element;
33
+ declare function DialogDescription({ className, ...props }: DialogDescriptionProps): import("react").JSX.Element;
34
+ declare function DialogActions({ className, ...props }: DialogActionsProps): import("react").JSX.Element;
35
+ declare function DialogHeader({ className, ...props }: DialogSectionProps): import("react").JSX.Element;
36
+ declare function DialogBody({ className, ...props }: DialogSectionProps): import("react").JSX.Element;
37
+ declare function DialogFooter({ className, ...props }: DialogSectionProps): import("react").JSX.Element;
38
+ declare function DialogContent({ classNames, title, description, container, children, className, ...props }: DialogContentProps): import("react").JSX.Element;
39
+ export declare const Dialog: typeof DialogRoot & {
40
+ Trigger: typeof DialogTrigger;
41
+ Content: typeof DialogContent;
42
+ Title: typeof DialogTitle;
43
+ Description: typeof DialogDescription;
44
+ Close: typeof DialogClose;
45
+ Actions: typeof DialogActions;
46
+ Header: typeof DialogHeader;
47
+ Body: typeof DialogBody;
48
+ Footer: typeof DialogFooter;
49
+ };
50
+ export {};
@@ -0,0 +1,28 @@
1
+ import { type ComponentProps, type MouseEvent, type ReactNode } from "react";
2
+ import { type ClassNames } from "../../utils/kb";
3
+ export type ErrorSummaryHeadingLevel = 2 | 3 | 4;
4
+ export type ErrorSummaryPart = "title" | "description" | "list" | "item" | "link";
5
+ export interface ErrorSummaryItem {
6
+ /** Optional key when multiple items point to the same href. */
7
+ id?: string | undefined;
8
+ /** Anchor fragment such as "#email" targeting the invalid field or group. */
9
+ href: string;
10
+ /** Actionable message naming the field and how to fix it. */
11
+ label: ReactNode;
12
+ }
13
+ export interface ErrorSummaryProps extends Omit<ComponentProps<"div">, "title"> {
14
+ /** Summary heading displayed above the error list. */
15
+ title?: ReactNode | undefined;
16
+ /** Optional guidance shown between the heading and list. */
17
+ description?: ReactNode | undefined;
18
+ /** Ordered field errors with fragment links for focus recovery. */
19
+ items: readonly ErrorSummaryItem[];
20
+ /** Document heading rank for the summary title. */
21
+ headingLevel?: ErrorSummaryHeadingLevel | undefined;
22
+ /** Callback fired when a recovery link is activated. */
23
+ onItemSelect?: ((href: string, event: MouseEvent<HTMLAnchorElement>) => void) | undefined;
24
+ /** Classes for the title, description, list, item and link slots. */
25
+ classNames?: ClassNames<ErrorSummaryPart> | undefined;
26
+ }
27
+ /** Focusable form-level validation alert that links each error to its field. */
28
+ export declare const ErrorSummary: ({ ref, title, description, items, headingLevel, onItemSelect, tabIndex, className, classNames, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, ...props }: ErrorSummaryProps) => import("react").JSX.Element | null;
@@ -0,0 +1,17 @@
1
+ import { type ComponentProps, type ReactNode } from "react";
2
+ import { type ClassNames } from "../../utils/kb";
3
+ export type FieldsetPart = "legend" | "description" | "fields" | "error";
4
+ export interface FieldsetProps extends ComponentProps<"fieldset"> {
5
+ /** Group heading rendered inside the native legend element. */
6
+ legend: ReactNode;
7
+ /** Hide the legend visually while keeping the accessible group name. */
8
+ visuallyHidden?: boolean | undefined;
9
+ /** Supporting context explaining the grouped fields. */
10
+ description?: ReactNode | undefined;
11
+ /** Group-level validation error message. */
12
+ error?: ReactNode | undefined;
13
+ /** Classes for the legend, description, fields and error slots. */
14
+ classNames?: ClassNames<FieldsetPart> | undefined;
15
+ }
16
+ /** Semantic fieldset and legend section that groups related form controls. */
17
+ export declare const Fieldset: ({ ref, legend, visuallyHidden, description, error, disabled, className, classNames, children, "aria-describedby": ariaDescribedBy, "aria-invalid": callerAriaInvalid, ...props }: FieldsetProps) => import("react").JSX.Element;
@@ -0,0 +1,59 @@
1
+ import { type ComponentProps, type ReactNode, type Ref } from "react";
2
+ import { type ClassNames } from "../../utils/kb";
3
+ export type FileInputItem = {
4
+ /** Stable unique identity independent of display name. */
5
+ id: string;
6
+ /** Visible filename and default accessible removal name. */
7
+ name: string;
8
+ /** Caller-owned metadata such as size or processing status. */
9
+ description?: ReactNode;
10
+ };
11
+ export type FileInputProps = Omit<ComponentProps<"div">, "onChange" | "children" | "defaultValue"> & {
12
+ /** Accessible field label. */
13
+ label: string;
14
+ /** Retained items; caller owns acceptance and list updates. */
15
+ items: readonly FileInputItem[];
16
+ /** Receives original native File objects without policy filtering. */
17
+ onFiles: (files: File[]) => void;
18
+ /** Requests removal; focus moves only after items change. */
19
+ onRemove: (id: string) => void;
20
+ /** Native picker hint; callers must validate selected files. */
21
+ accept?: string;
22
+ /** Allow multiple selections; defaults to true. */
23
+ multiple?: boolean;
24
+ /** Block selection, removal and mutation callbacks. */
25
+ disabled?: boolean;
26
+ /** Keep retained items readable while blocking changes. */
27
+ readOnly?: boolean;
28
+ /** Helper text associated with picker action. */
29
+ description?: string;
30
+ /** Caller-owned rejection/error text; announced when shown. */
31
+ error?: string;
32
+ /** Hide field label visually while retaining accessible name. */
33
+ visuallyHidden?: boolean;
34
+ /** Localized picker action; defaults to Choose files. */
35
+ chooseLabel?: string;
36
+ /** Localized empty list message. */
37
+ emptyMessage?: string;
38
+ /** Localized accessible remove action for an item. */
39
+ removeLabel?: (item: FileInputItem) => string;
40
+ /** Localized announcement after controlled removal succeeds. */
41
+ removedMessage?: (item: FileInputItem) => string;
42
+ /** Localized native selection announcement; does not imply acceptance. */
43
+ selectionMessage?: (count: number) => string;
44
+ /** Custom item content; retain visible file identity. */
45
+ renderItem?: (item: FileInputItem) => ReactNode;
46
+ /** Class on picker action. */
47
+ triggerClassName?: string;
48
+ /** Class on retained-item list. */
49
+ listClassName?: string;
50
+ /** Class on each retained item. */
51
+ itemClassName?: string;
52
+ /** Ref to native hidden file input. */
53
+ inputRef?: Ref<HTMLInputElement>;
54
+ /** Ref to accessible picker button. */
55
+ triggerRef?: Ref<HTMLButtonElement>;
56
+ /** Classes for inner parts, keyed by part. */
57
+ classNames?: ClassNames<"label" | "trigger" | "list" | "item" | "native" | "description" | "error" | "content" | "name" | "metadata" | "remove" | "empty">;
58
+ };
59
+ export declare function FileInput({ classNames, label, items, onFiles, onRemove, accept, multiple, disabled, readOnly, description, error, visuallyHidden, chooseLabel, emptyMessage, removeLabel, removedMessage, selectionMessage, renderItem, triggerClassName, listClassName, itemClassName, inputRef, triggerRef, className, onBlurCapture, "aria-describedby": callerDescription, "aria-invalid": callerAriaInvalid, ...props }: FileInputProps): import("react").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import type { ComponentProps } from "react";
2
+ export type FormActionsAlign = "end" | "start" | "between";
3
+ export interface FormActionsProps extends ComponentProps<"div"> {
4
+ /** Horizontal alignment for form action buttons. */
5
+ align?: FormActionsAlign | undefined;
6
+ /** Add a top border and spacing above the action row. */
7
+ divider?: boolean | undefined;
8
+ }
9
+ /** Wrapping action footer for form submit, reset and secondary buttons. */
10
+ export declare const FormActions: ({ ref, align, divider, className, children, ...props }: FormActionsProps) => import("react").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { type ComponentProps } from "react";
2
+ type Container = "div" | "ul" | "ol";
3
+ export type GridProps<T extends Container = "div"> = ComponentProps<T> & {
4
+ /** Native container; list children must be list items. */
5
+ as?: T;
6
+ /** Responsive equal columns or a single vertical track. */
7
+ layout?: "auto" | "stack";
8
+ };
9
+ export declare function Grid<T extends Container = "div">({ as, layout, className, ...props }: GridProps<T>): import("react").ReactElement<Omit<GridProps<T>, "as" | "className" | "layout"> & {
10
+ className: string;
11
+ } & Record<`data-${string}`, string>, string | import("react").JSXElementConstructor<any>>;
12
+ export {};