@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,45 @@
1
+ import { Radio } from "@base-ui/react/radio";
2
+ import { type ComponentProps, type ReactNode } from "react";
3
+ import { type ClassNames } from "../../utils/kb";
4
+ export type RadioGroupProps = Omit<ComponentProps<"div">, "onChange" | "defaultValue"> & {
5
+ /** Visible group label. */
6
+ label: string;
7
+ /** Controlled choice; null means none selected. */
8
+ value: string | null;
9
+ /** Receives the selected item's value. */
10
+ onValueChange: (value: string) => void;
11
+ /** Disable all items. */
12
+ disabled?: boolean;
13
+ /** Segmented visual treatment; native single-choice behavior stays shared. */
14
+ appearance?: "standard" | "segmented";
15
+ /** Segmented background movement; reduced motion always wins. */
16
+ selectionMotion?: "slide" | "none";
17
+ /** Segmented selection color. */
18
+ selectionTone?: "primary" | "neutral";
19
+ /** Native form field name. */
20
+ name?: string;
21
+ /** Helper text for group. */
22
+ description?: string;
23
+ /** Group error message. */
24
+ error?: string;
25
+ /** Keep group label accessible but visually hidden. */
26
+ visuallyHidden?: boolean;
27
+ /** Classes for inner parts, keyed by part. */
28
+ classNames?: ClassNames<"label" | "options" | "description" | "error">;
29
+ };
30
+ export type RadioGroupItemProps = Omit<Radio.Root.Props<string>, "className" | "children" | "render"> & {
31
+ /** Plain class on item label. */
32
+ className?: string;
33
+ /** Caller content supplies meaningful item label. */
34
+ children: ReactNode;
35
+ /** Class on focusable radio slot. */
36
+ controlClassName?: string;
37
+ /** Classes for inner parts, keyed by part. */
38
+ classNames?: ClassNames<"item" | "control" | "indicator" | "content">;
39
+ };
40
+ declare function RadioGroupRoot({ classNames, label, value, onValueChange, disabled, appearance, selectionMotion, selectionTone, name, description, error, visuallyHidden, className, children, onFocusCapture, onBlurCapture, "aria-invalid": callerAriaInvalid, ...props }: RadioGroupProps): import("react").JSX.Element;
41
+ declare function RadioGroupItem({ classNames, className, children, controlClassName, ...props }: RadioGroupItemProps): import("react").JSX.Element;
42
+ export declare const RadioGroup: typeof RadioGroupRoot & {
43
+ Item: typeof RadioGroupItem;
44
+ };
45
+ export {};
@@ -0,0 +1,17 @@
1
+ import { ScrollArea as Base } from "@base-ui/react/scroll-area";
2
+ import type { ReactNode } from "react";
3
+ import { type ClassNames } from "../../utils/kb";
4
+ /** Scrolling region that keyboard users can reach: the viewport is a named, focusable region. */
5
+ export type ScrollAreaProps = Omit<Base.Root.Props, "className" | "children"> & {
6
+ /** Plain class string; Base UI's function form is not supported. */
7
+ className?: string;
8
+ /** Accessible name of the region. */
9
+ label: string;
10
+ /** Height cap, any CSS length; content scrolls past it. */
11
+ maxHeight?: string;
12
+ /** Scrolled content. */
13
+ children: ReactNode;
14
+ /** Classes for inner parts, keyed by part. */
15
+ classNames?: ClassNames<"viewport" | "scrollbar" | "thumb">;
16
+ };
17
+ export declare function ScrollArea({ classNames, label, maxHeight, className, style, children, ...props }: ScrollAreaProps): import("react").JSX.Element;
@@ -0,0 +1,39 @@
1
+ import { Select as Base } from "@base-ui/react/select";
2
+ import { type ComponentProps } from "react";
3
+ import { type ClassNames } from "../../utils/kb";
4
+ export type SelectOption = {
5
+ value: string;
6
+ label: string;
7
+ disabled?: boolean;
8
+ };
9
+ export type SelectProps = Omit<ComponentProps<"div">, "onChange" | "children" | "defaultValue"> & {
10
+ /** Visible label for the trigger. */
11
+ label: string;
12
+ /** Controlled selection; null displays the placeholder. */
13
+ value: string | null;
14
+ /** Receives selected value; consumers own domain transitions. */
15
+ onValueChange: (value: string | null) => void;
16
+ /** Unique string-valued options; an empty collection is supported. */
17
+ options: readonly SelectOption[];
18
+ /** Text when value is null. */
19
+ placeholder?: string;
20
+ /** Field helper text. */
21
+ description?: string;
22
+ /** Visible invalid-state message. */
23
+ error?: string;
24
+ /** Disable interaction and form submission. */
25
+ disabled?: boolean;
26
+ /** Preserve value while preventing changes. */
27
+ readOnly?: boolean;
28
+ /** Native form field name. */
29
+ name?: string;
30
+ /** Class on trigger slot. */
31
+ controlClassName?: string;
32
+ /** Class on popup slot. */
33
+ popupClassName?: string;
34
+ /** Portal host; defaults to field root to retain theme. */
35
+ container?: Base.Portal.Props["container"];
36
+ /** Classes for inner parts, keyed by part. */
37
+ classNames?: ClassNames<"control" | "popup" | "label" | "icon" | "portal" | "positioner" | "list" | "item" | "indicator" | "empty" | "description" | "error">;
38
+ };
39
+ export declare function Select({ classNames, label, value, onValueChange, options, placeholder, description, error, disabled, readOnly, name, className, controlClassName, popupClassName, container, ref, "aria-describedby": callerDescription, "aria-invalid": callerAriaInvalid, ...props }: SelectProps): import("react").JSX.Element;
@@ -0,0 +1,9 @@
1
+ import type { ComponentProps } from "react";
2
+ export type SeparatorOrientation = "horizontal" | "vertical";
3
+ export type SeparatorProps = Omit<ComponentProps<"hr">, "children" | "role" | "aria-hidden" | "aria-orientation"> & {
4
+ /** Direction of the visible rule and announced separator. */
5
+ orientation?: SeparatorOrientation;
6
+ /** Hide a visual-only divider from assistive technology. */
7
+ decorative?: boolean;
8
+ };
9
+ export declare function Separator({ orientation, decorative, className, ...props }: SeparatorProps): import("react").JSX.Element;
@@ -0,0 +1,20 @@
1
+ import { type ClassNames } from "../../utils/kb";
2
+ import type { LayoutAlign, LayoutElementProps, LayoutGap } from "../../utils/layout";
3
+ export type SplitElement = "div" | "section" | "article";
4
+ export type SplitRatio = "equal" | "wide-start" | "wide-end";
5
+ export type SplitCollapse = "sm" | "md" | "lg";
6
+ export type SplitProps<T extends SplitElement = "div"> = LayoutElementProps<T> & {
7
+ /** Classes for each layout-owned column track. */
8
+ classNames?: ClassNames<"track">;
9
+ /** Column proportions: 1:1, 2:1 or 1:2 in source order. */
10
+ ratio?: SplitRatio;
11
+ /** Available-width threshold below which columns stack. */
12
+ collapse?: SplitCollapse;
13
+ /** Space between columns or stacked rows. */
14
+ gap?: LayoutGap;
15
+ /** Cross-axis alignment while columns share a row. */
16
+ align?: LayoutAlign;
17
+ };
18
+ export declare function Split<T extends SplitElement = "div">({ as, ratio, collapse, gap, align, className, classNames, children, ...props }: SplitProps<T>): import("react").DetailedReactHTMLElement<Omit<SplitProps<T>, "align" | "as" | "children" | "className" | "classNames" | "collapse" | "gap" | "ratio"> & {
19
+ className: string;
20
+ } & Record<`data-${string}`, string>, HTMLElement>;
@@ -0,0 +1,15 @@
1
+ import type { ComponentProps, ReactNode } from "react";
2
+ import { type ClassNames } from "../../utils/kb";
3
+ export type StatSize = "md" | "display";
4
+ /** A labelled value; the label renders first so it is read first. */
5
+ export type StatProps = Omit<ComponentProps<"div">, "children"> & {
6
+ /** What the value measures. */
7
+ label: ReactNode;
8
+ /** The number or short text; figures are tabular. */
9
+ value: ReactNode;
10
+ /** Value size; display is for one headline number. */
11
+ size?: StatSize;
12
+ /** Classes for inner parts, keyed by part. */
13
+ classNames?: ClassNames<"label" | "value">;
14
+ };
15
+ export declare function Stat({ classNames, label, value, size, className, ...props }: StatProps): import("react").JSX.Element;
@@ -0,0 +1,22 @@
1
+ import type { ComponentProps, ReactNode } from "react";
2
+ import { type ClassNames } from "../../utils/kb";
3
+ export type StatusTone = "neutral" | "info" | "running" | "success" | "warning" | "blocked";
4
+ export type StatusAppearance = "plain" | "chip";
5
+ /** Text is mandatory: tone is never conveyed by color alone. */
6
+ export type StatusProps = Omit<ComponentProps<"span">, "children"> & {
7
+ /** Visible label. */
8
+ children: ReactNode;
9
+ /** Meaning of the state; drives color and the icon slot's color. */
10
+ tone?: StatusTone;
11
+ /** Caller-provided decorative icon; kbui ships no icons. */
12
+ icon?: ReactNode;
13
+ /** Announce changes: adds role="status" and nothing else. */
14
+ live?: boolean;
15
+ /** Plain text and icon, or a chip tinted from the tone. */
16
+ appearance?: StatusAppearance;
17
+ /** Tighter spacing and smaller text; the text stays visible. */
18
+ compact?: boolean;
19
+ /** Classes for inner parts, keyed by part. */
20
+ classNames?: ClassNames<"icon" | "text">;
21
+ };
22
+ export declare function Status({ classNames, tone, appearance, icon, live, compact, className, children, ...props }: StatusProps): import("react").JSX.Element;
@@ -0,0 +1,41 @@
1
+ import { type ComponentProps, type CSSProperties, type ReactNode } from "react";
2
+ import { type ClassNames } from "../../utils/kb";
3
+ export type SwitchSize = "sm" | "md" | "lg";
4
+ export type SwitchTone = "neutral" | "accent" | "info" | "success" | "warning" | "danger";
5
+ export type SwitchProps = Omit<ComponentProps<"input">, "type" | "role" | "checked" | "defaultChecked" | "onChange" | "size" | "children" | "style"> & {
6
+ /** Visible, associated label. */
7
+ label: string;
8
+ /** Owner controls checked state. */
9
+ checked: boolean;
10
+ /** Requests next checked state. */
11
+ onCheckedChange: (checked: boolean) => void;
12
+ /** Track size; defaults to sm inside Fieldset and md elsewhere. */
13
+ size?: SwitchSize | undefined;
14
+ /** Shorthand tone for the on side when onTone is omitted. */
15
+ tone?: SwitchTone | undefined;
16
+ /** Semantic tone for the off side. */
17
+ offTone?: SwitchTone | undefined;
18
+ /** Semantic tone for the on side; defaults to accent. */
19
+ onTone?: SwitchTone | undefined;
20
+ /** Custom CSS color or token for the off side. */
21
+ offColor?: string | undefined;
22
+ /** Custom CSS color or token for the on side. */
23
+ onColor?: string | undefined;
24
+ /** Associated helper text. */
25
+ description?: string | undefined;
26
+ /** Associated error; marks native control invalid for assistive technology. */
27
+ error?: string | undefined;
28
+ /** Hide label visually; keep its accessible name. */
29
+ visuallyHidden?: boolean | undefined;
30
+ /** Decorative content in off position. */
31
+ offIcon?: ReactNode;
32
+ /** Decorative content in on position. */
33
+ onIcon?: ReactNode;
34
+ /** Added to native input; className belongs to root. */
35
+ controlClassName?: string | undefined;
36
+ /** Native styles; custom properties also feed visible planes. */
37
+ style?: CSSProperties | (CSSProperties & Record<`--${string}`, string | number | undefined>);
38
+ /** Classes for inner parts, keyed by part. */
39
+ classNames?: ClassNames<"control" | "label" | "field" | "target" | "track" | "thumb" | "off" | "on" | "description" | "error"> | undefined;
40
+ };
41
+ export declare function Switch({ classNames, label, checked, onCheckedChange, size, tone, offTone, onTone, offColor, onColor, description, error, visuallyHidden, offIcon, onIcon, controlClassName, className, style, id, disabled, readOnly, "aria-describedby": describedBy, "aria-invalid": callerAriaInvalid, ...props }: SwitchProps): import("react").JSX.Element;
@@ -0,0 +1,15 @@
1
+ import { type ComponentProps } from "react";
2
+ export type TextElement = "p" | "span" | "div";
3
+ export type TextSize = "sm" | "md" | "lg";
4
+ export type TextTone = "default" | "muted";
5
+ export type TextProps<T extends TextElement = "p"> = ComponentProps<T> & {
6
+ /** Native element; use span inside paragraphs and div for block children. */
7
+ as?: T;
8
+ /** Body size; inline links and code inherit surrounding size. */
9
+ size?: TextSize;
10
+ /** Default ink or secondary text with readable contrast. */
11
+ tone?: TextTone;
12
+ };
13
+ export declare function Text<T extends TextElement = "p">({ as, size, tone, className, ...props }: TextProps<T>): import("react").DetailedReactHTMLElement<Omit<TextProps<T>, "as" | "className" | "size" | "tone"> & {
14
+ className: string;
15
+ } & Record<`data-${string}`, string>, HTMLSpanElement>;
@@ -0,0 +1,24 @@
1
+ import { type ComponentProps } from "react";
2
+ import { type ClassNames } from "../../utils/kb";
3
+ export type TextareaResize = "vertical" | "none" | "both";
4
+ export type TextareaPart = "label" | "control" | "description" | "error";
5
+ export interface TextareaProps extends Omit<ComponentProps<"textarea">, "children"> {
6
+ /** Visible field label and accessible name. */
7
+ label: string;
8
+ /** Hide the label visually while keeping its accessible name. */
9
+ visuallyHidden?: boolean | undefined;
10
+ /** Supporting helper text below the textarea. */
11
+ description?: string | undefined;
12
+ /** Validation error message; marks the textarea invalid. */
13
+ error?: string | undefined;
14
+ /** Drag-resize axis for the native textarea. */
15
+ resize?: TextareaResize | undefined;
16
+ /** Callback fired with the next string value on change. */
17
+ onValueChange?: ((value: string) => void) | undefined;
18
+ /** Root wrapper class name. */
19
+ className?: string | undefined;
20
+ /** Classes for the label, control, description and error slots. */
21
+ classNames?: ClassNames<TextareaPart> | undefined;
22
+ }
23
+ /** Labelled multiline text control with associated helper and error messages. */
24
+ export declare const Textarea: ({ ref, id, label, visuallyHidden, description, error, resize, rows, disabled, readOnly, onChange, onValueChange, className, classNames, "aria-describedby": ariaDescribedBy, "aria-invalid": callerAriaInvalid, ...props }: TextareaProps) => import("react").JSX.Element;
@@ -0,0 +1,31 @@
1
+ import { Toolbar as Base } from "@base-ui/react/toolbar";
2
+ import { type ButtonVariant } from "../Button/Button";
3
+ /** One tab stop for a row of actions; arrow keys move between them. Name it with aria-label. */
4
+ export type ToolbarProps = Omit<Base.Root.Props, "className"> & {
5
+ /** Plain class string; Base UI's function form is not supported. */
6
+ className?: string;
7
+ };
8
+ export type ToolbarGroupProps = Omit<Base.Group.Props, "className"> & {
9
+ /** Plain class string; Base UI's function form is not supported. */
10
+ className?: string;
11
+ };
12
+ export type ToolbarButtonProps = Omit<Base.Button.Props, "className" | "render"> & {
13
+ /** Plain class string; Base UI's function form is not supported. */
14
+ className?: string;
15
+ /** Button weight; toolbars default to ghost. */
16
+ variant?: ButtonVariant;
17
+ };
18
+ export type ToolbarSeparatorProps = Omit<Base.Separator.Props, "className"> & {
19
+ /** Plain class string; Base UI's function form is not supported. */
20
+ className?: string;
21
+ };
22
+ declare function ToolbarRoot({ className, ...props }: ToolbarProps): import("react").JSX.Element;
23
+ declare function ToolbarGroup({ className, ...props }: ToolbarGroupProps): import("react").JSX.Element;
24
+ declare function ToolbarButton({ variant, className, ...props }: ToolbarButtonProps): import("react").JSX.Element;
25
+ declare function ToolbarSeparator({ className, ...props }: ToolbarSeparatorProps): import("react").JSX.Element;
26
+ export declare const Toolbar: typeof ToolbarRoot & {
27
+ Group: typeof ToolbarGroup;
28
+ Button: typeof ToolbarButton;
29
+ Separator: typeof ToolbarSeparator;
30
+ };
31
+ export {};
@@ -0,0 +1,20 @@
1
+ import { Tooltip as Base } from "@base-ui/react/tooltip";
2
+ import type { ReactElement, ReactNode, Ref } from "react";
3
+ /** A visual hint only; the trigger still needs its own accessible name. */
4
+ export type TooltipProps = {
5
+ /** Text shown in the popup. */
6
+ content: ReactNode;
7
+ /** The element that shows the tooltip on hover and focus. */
8
+ children: ReactElement;
9
+ /** Portal target for nested consumer themes. */
10
+ container?: Base.Portal.Props["container"];
11
+ /** Plain class on popup slot. */
12
+ className?: string;
13
+ /** Side of the trigger the popup prefers. */
14
+ side?: Base.Positioner.Props["side"];
15
+ /** Hover delay in ms before opening. */
16
+ delay?: number;
17
+ /** Ref forwarded to the popup element. */
18
+ ref?: Ref<HTMLDivElement>;
19
+ };
20
+ export declare function Tooltip({ content, children, side, delay, container, className, ref, }: TooltipProps): import("react").JSX.Element;
@@ -0,0 +1,37 @@
1
+ export { Badge, type BadgeAppearance, type BadgeProps, type BadgeTone, } from "./components/Badge/Badge";
2
+ export { Button, type ButtonProps, type ButtonSize, type ButtonVariant, } from "./components/Button/Button";
3
+ export { Callout, type CalloutProps, type CalloutTone } from "./components/Callout/Callout";
4
+ export { Card, type CardProps } from "./components/Card/Card";
5
+ export { Checkbox, type CheckboxProps } from "./components/Checkbox/Checkbox";
6
+ export { Code, type CodeProps } from "./components/Code/Code";
7
+ export { Combobox, type ComboboxOption, type ComboboxProps, type ComboboxSlot, } from "./components/Combobox/Combobox";
8
+ export { Container, type ContainerElement, type ContainerProps, type ContainerSize, } from "./components/Container/Container";
9
+ export { Dialog, type DialogActionsProps, type DialogCloseProps, type DialogContentProps, type DialogDescriptionProps, type DialogProps, type DialogSectionProps, type DialogTitleProps, type DialogTriggerProps, } from "./components/Dialog/Dialog";
10
+ export { ErrorSummary, type ErrorSummaryHeadingLevel, type ErrorSummaryItem, type ErrorSummaryPart, type ErrorSummaryProps, } from "./components/ErrorSummary/ErrorSummary";
11
+ export { Fieldset, type FieldsetPart, type FieldsetProps, } from "./components/Fieldset/Fieldset";
12
+ export { FileInput, type FileInputItem, type FileInputProps, } from "./components/FileInput/FileInput";
13
+ export { FormActions, type FormActionsAlign, type FormActionsProps, } from "./components/FormActions/FormActions";
14
+ export { Grid, type GridProps } from "./components/Grid/Grid";
15
+ export { Heading, type HeadingLevel, type HeadingProps, type HeadingSize, } from "./components/Heading/Heading";
16
+ export { Inline, type InlineElement, type InlineJustify, type InlineProps, } from "./components/Inline/Inline";
17
+ export { Input, type InputProps, type InputSize } from "./components/Input/Input";
18
+ export { Link, type LinkProps } from "./components/Link/Link";
19
+ export { Menu, type MenuContentProps, type MenuItemProps, type MenuProps, type MenuSeparatorProps, type MenuTriggerProps, } from "./components/Menu/Menu";
20
+ export { MultiSelect, type MultiSelectOption, type MultiSelectProps, type MultiSelectSlot, } from "./components/MultiSelect/MultiSelect";
21
+ export { NumberField, type NumberFieldProps, type NumberFieldSize, } from "./components/NumberField/NumberField";
22
+ export { Panel, type PanelBodyProps, type PanelDensity, type PanelFooterProps, type PanelGroupDirection, type PanelGroupProps, type PanelHandleProps, type PanelHeaderProps, type PanelProps, type PanelRail, type PanelToggleProps, type PanelTone, type PanelToolbarProps, type PanelWellProps, } from "./components/Panel/Panel";
23
+ export { Progress, type ProgressProps } from "./components/Progress/Progress";
24
+ export { RadioGroup, type RadioGroupItemProps, type RadioGroupProps, } from "./components/RadioGroup/RadioGroup";
25
+ export { ScrollArea, type ScrollAreaProps } from "./components/ScrollArea/ScrollArea";
26
+ export { Select, type SelectOption, type SelectProps } from "./components/Select/Select";
27
+ export { Separator, type SeparatorOrientation, type SeparatorProps, } from "./components/Separator/Separator";
28
+ export { Split, type SplitCollapse, type SplitElement, type SplitProps, type SplitRatio, } from "./components/Split/Split";
29
+ export { Stat, type StatProps, type StatSize } from "./components/Stat/Stat";
30
+ export { Status, type StatusAppearance, type StatusProps, type StatusTone, } from "./components/Status/Status";
31
+ export { Switch, type SwitchProps, type SwitchSize, type SwitchTone, } from "./components/Switch/Switch";
32
+ export { Text, type TextElement, type TextProps, type TextSize, type TextTone, } from "./components/Text/Text";
33
+ export { Textarea, type TextareaPart, type TextareaProps, type TextareaResize, } from "./components/Textarea/Textarea";
34
+ export { Toolbar, type ToolbarButtonProps, type ToolbarGroupProps, type ToolbarProps, type ToolbarSeparatorProps, } from "./components/Toolbar/Toolbar";
35
+ export { Tooltip, type TooltipProps } from "./components/Tooltip/Tooltip";
36
+ export { type ClassNames, kb } from "./utils/kb";
37
+ export type { LayoutAlign, LayoutGap } from "./utils/layout";