@instruments/materia-ui 0.4.6 → 0.4.8
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.
- package/dist/components/accordion/accordion-variants.js +1 -0
- package/dist/components/alert/alert-root.js +1 -0
- package/dist/components/anchor/anchor-root.js +1 -0
- package/dist/components/avatar/avatar-badge.d.ts +1 -1
- package/dist/components/avatar/avatar-fallback.d.ts +1 -1
- package/dist/components/avatar/avatar-root.d.ts +1 -1
- package/dist/components/avatar/avatar-status.d.ts +2 -1
- package/dist/components/badge/badge-button.d.ts +1 -0
- package/dist/components/badge/badge-button.js +1 -0
- package/dist/components/badge/badge-root.d.ts +4 -1
- package/dist/components/breadcrumb/breadcrumb-root.d.ts +1 -0
- package/dist/components/button/button-variants.js +7 -0
- package/dist/components/button-group/button-group-root.js +4 -0
- package/dist/components/card/card-root.d.ts +1 -0
- package/dist/components/card/card-root.js +1 -0
- package/dist/components/checkbox-card/checkbox-card-root.d.ts +1 -1
- package/dist/components/checkbox-field/checkbox-field-root.d.ts +4 -1
- package/dist/components/context-menu/context-menu-checkbox-item.d.ts +1 -1
- package/dist/components/context-menu/context-menu-content.d.ts +1 -1
- package/dist/components/context-menu/context-menu-item.d.ts +1 -1
- package/dist/components/context-menu/context-menu-radio-item.d.ts +1 -1
- package/dist/components/context-menu/context-menu-separator.d.ts +2 -2
- package/dist/components/context-menu/context-menu-separator.js +1 -1
- package/dist/components/context-menu/context-menu-sub-trigger.d.ts +1 -1
- package/dist/components/country-combobox/country-combobox-root.d.ts +1 -1
- package/dist/components/dot/dot-root.js +1 -0
- package/dist/components/drawer/drawer-root.d.ts +1 -0
- package/dist/components/dropdown-menu/dropdown-menu-checkbox-item.d.ts +1 -1
- package/dist/components/dropdown-menu/dropdown-menu-content.d.ts +1 -1
- package/dist/components/dropdown-menu/dropdown-menu-item.d.ts +1 -1
- package/dist/components/dropdown-menu/dropdown-menu-radio-item.d.ts +1 -1
- package/dist/components/dropdown-menu/dropdown-menu-separator.d.ts +2 -2
- package/dist/components/dropdown-menu/dropdown-menu-separator.js +1 -1
- package/dist/components/dropdown-menu/dropdown-menu-sub-trigger.d.ts +1 -1
- package/dist/components/empty/empty-root.js +1 -0
- package/dist/components/expand-button/expand-button-root.js +1 -0
- package/dist/components/field/field-error.d.ts +1 -0
- package/dist/components/field/field-variants.js +1 -0
- package/dist/components/icon-box/icon-box-root.js +4 -0
- package/dist/components/identified-surface.d.ts +5 -0
- package/dist/components/input/input-variants.js +1 -0
- package/dist/components/input-card/input-card-root.d.ts +3 -0
- package/dist/components/input-group/input-group-button.d.ts +9 -5
- package/dist/components/item/item-group.js +1 -0
- package/dist/components/item/item-media.d.ts +8 -0
- package/dist/components/item/item-media.js +1 -0
- package/dist/components/item/item-root.d.ts +1 -0
- package/dist/components/item/item-root.js +1 -0
- package/dist/components/kbd/kbd-root.js +2 -0
- package/dist/components/menu-item/menu-item-variants.js +5 -0
- package/dist/components/menu-parts-types.d.ts +82 -0
- package/dist/components/menu-parts-types.js +1 -0
- package/dist/components/menu-parts.d.ts +3 -66
- package/dist/components/menubar/menubar-checkbox-item.d.ts +1 -1
- package/dist/components/menubar/menubar-content.d.ts +1 -1
- package/dist/components/menubar/menubar-item.d.ts +1 -1
- package/dist/components/menubar/menubar-radio-item.d.ts +1 -1
- package/dist/components/menubar/menubar-separator.d.ts +2 -2
- package/dist/components/menubar/menubar-separator.js +1 -1
- package/dist/components/menubar/menubar-sub-trigger.d.ts +1 -1
- package/dist/components/phone-input/phone-input-root.js +2 -0
- package/dist/components/pill/pill-root.d.ts +1 -0
- package/dist/components/pill/pill-variants.js +3 -0
- package/dist/components/popover/popover-root.d.ts +2 -0
- package/dist/components/progress/progress-root.d.ts +2 -0
- package/dist/components/scroll-frame/scroll-frame-root.d.ts +8 -2
- package/dist/components/segmented-control/segmented-control-root.d.ts +8 -2
- package/dist/components/select/select-content.d.ts +1 -0
- package/dist/components/select/select-trigger.d.ts +10 -2
- package/dist/components/select/select-trigger.js +1 -1
- package/dist/components/sidepanel/sidepanel-header.d.ts +4 -0
- package/dist/components/sub-navigation/sub-navigation-link.d.ts +1 -0
- package/dist/components/swatch/swatch-tile.d.ts +2 -1
- package/dist/components/swatch/swatch-tile.js +1 -1
- package/dist/components/swatch-group/swatch-group-item.d.ts +1 -1
- package/dist/components/swatch-selector/swatch-selector-item.d.ts +1 -1
- package/dist/components/tab-navigation/tab-navigation-link.d.ts +1 -0
- package/dist/components/tabs/tabs-panel.d.ts +4 -0
- package/dist/components/tabs/tabs-variants.js +4 -0
- package/dist/components/thinking-loader/thinking-loader-counter.d.ts +2 -0
- package/dist/components/thinking-loader/thinking-loader-icon.d.ts +2 -0
- package/dist/components/thinking-loader/thinking-loader-step.d.ts +2 -0
- package/dist/components/toggle/toggle-root.js +2 -0
- package/dist/components/voice/voice-error-popover.d.ts +2 -0
- package/dist/components/voice/voice-pill.d.ts +2 -0
- package/dist/compositions/attribute-card.d.ts +1 -0
- package/dist/compositions/card-grid/card-grid-rows.d.ts +13 -0
- package/dist/compositions/data-grid/data-grid-checkbox.d.ts +8 -0
- package/dist/compositions/data-grid/data-grid-expand.d.ts +1 -0
- package/dist/compositions/data-grid/data-grid-filterable-header.d.ts +1 -0
- package/dist/compositions/data-grid/data-grid-types.d.ts +6 -0
- package/dist/compositions/data-grid-column-header/data-grid-column-header-root.d.ts +5 -0
- package/dist/compositions/data-grid-table/data-grid-table-body.d.ts +13 -1
- package/dist/compositions/data-grid-table/data-grid-table-body.js +1 -1
- package/dist/compositions/data-grid-table/data-grid-table-header.d.ts +5 -0
- package/dist/compositions/document-list/document-list-icon.d.ts +1 -0
- package/dist/compositions/document-list/document-list-root.js +4 -0
- package/dist/compositions/editorial-card/editorial-card-content.d.ts +2 -0
- package/dist/compositions/file-upload/file-upload-dropzone.d.ts +3 -0
- package/dist/compositions/folder-tile/folder-tile-types.d.ts +2 -0
- package/dist/compositions/mobile-navigation/mobile-navigation-header.d.ts +5 -2
- package/dist/compositions/mobile-navigation/mobile-navigation-header.js +0 -1
- package/dist/compositions/mobile-navigation/mobile-navigation-item.d.ts +2 -0
- package/dist/compositions/mobile-navigation/mobile-navigation-profile.d.ts +1 -0
- package/dist/compositions/mobile-navigation/mobile-navigation-root.d.ts +1 -0
- package/dist/compositions/page-toolbar/page-toolbar-applied.d.ts +4 -1
- package/dist/compositions/page-toolbar/page-toolbar-sort.d.ts +3 -0
- package/dist/compositions/product-card/product-card-content.d.ts +1 -0
- package/dist/compositions/product-card/product-card-image-types.d.ts +8 -2
- package/dist/compositions/product-card/product-card-provider-types.d.ts +47 -2
- package/dist/compositions/product-card/product-card-root.d.ts +1 -0
- package/dist/compositions/product-card/product-card-swatch.d.ts +2 -0
- package/dist/compositions/product-card/product-card-tools-types.d.ts +6 -0
- package/dist/compositions/product-specifications-selector/product-specifications-selector.d.ts +14 -0
- package/dist/compositions/quick-view/quick-view-body.d.ts +1 -1
- package/dist/compositions/sidebar/sidebar-group.d.ts +5 -1
- package/dist/compositions/sidebar/sidebar-menu-button.d.ts +11 -0
- package/dist/compositions/sidebar/sidebar-menu-sub.d.ts +5 -1
- package/dist/compositions/sidebar/sidebar-trigger.d.ts +3 -1
- package/dist/compositions/variant-selector/variant-selector-item.d.ts +1 -0
- package/dist/data/docs-manifest.js +727 -203
- package/dist/utils/with-test-id.d.ts +1 -0
- package/package.json +1 -1
|
@@ -128,10 +128,12 @@ const menuItemVariants = cva(`duration-quick hover:duration-instant focus:durati
|
|
|
128
128
|
variant: "default",
|
|
129
129
|
},
|
|
130
130
|
variants: {
|
|
131
|
+
/** Row height, padding and text size, on the shared component scale. Match the surrounding menu's `size`. @default "sm" */
|
|
131
132
|
size: MENU_ITEM_SIZE_CLASSES,
|
|
132
133
|
// Surface axis (background/hover treatment). The former `destructive`
|
|
133
134
|
// member split off onto the orthogonal `tone` axis below, so a
|
|
134
135
|
// destructive item of any surface is now expressible.
|
|
136
|
+
/** Surface treatment: `default` tints on hover, `input` uses the input fill, `outline` adds a ring. @default "default" */
|
|
135
137
|
variant: {
|
|
136
138
|
default: "hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground data-[active=true]:bg-accent data-[active=true]:text-accent-foreground data-[active=true]:font-medium",
|
|
137
139
|
input: "hover:bg-input hover:text-foreground focus:bg-input focus:text-foreground focus-visible:bg-input focus-visible:text-foreground data-[active=true]:bg-input data-[active=true]:text-foreground data-[active=true]:font-medium",
|
|
@@ -143,11 +145,14 @@ const menuItemVariants = cva(`duration-quick hover:duration-instant focus:durati
|
|
|
143
145
|
// look. Active keeps the danger signal - destructive foreground on a
|
|
144
146
|
// destructive tint one step stronger than hover (/20 vs /10) - instead
|
|
145
147
|
// of falling through to the surface's neutral `bg-accent` active state.
|
|
148
|
+
/** `danger` marks a destructive action with red text and a red hover and active tint. @default "neutral" */
|
|
146
149
|
tone: {
|
|
147
150
|
neutral: "",
|
|
148
151
|
danger: "text-destructive hover:bg-destructive/10 hover:text-destructive focus:bg-destructive/10 focus:text-destructive focus-visible:bg-destructive/10 focus-visible:text-destructive data-[active=true]:bg-destructive/20 data-[active=true]:text-destructive [&_svg:not([class*='text-'])]:text-destructive data-[active=true]:font-medium",
|
|
149
152
|
},
|
|
153
|
+
/** Corner shape: `full` is a pill, `rounded` a soft rectangle, `square` has sharp corners. @default "full" */
|
|
150
154
|
radius: RADIUS_CLASSES,
|
|
155
|
+
/** Pads the start so a row with no leading glyph lines up with rows that have an icon, dot or avatar. Switched on automatically when `indicator` is set. @default false */
|
|
151
156
|
inset: {
|
|
152
157
|
true: "",
|
|
153
158
|
false: "",
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { Menu as MenuPrimitive } from "@base-ui/react/menu";
|
|
2
|
+
import type { LucideIcon } from "lucide-react";
|
|
3
|
+
import type * as React from "react";
|
|
4
|
+
import type { MenuContentWidth, MenuOverflow, MenuSurface } from "../tokens/menu-content.js";
|
|
5
|
+
import type { Radius } from "../tokens/radius.js";
|
|
6
|
+
import type { ComponentSize } from "../tokens/size.js";
|
|
7
|
+
import type { Tone } from "../tokens/tone.js";
|
|
8
|
+
import type { MenuItemProps } from "./menu-item/menu-item-root.js";
|
|
9
|
+
/** The props of the shared menu parts built by `menu-parts.ts`, one set for DropdownMenu, ContextMenu and Menubar. */
|
|
10
|
+
/** Positioning props accepted on every menu `*Content` and forwarded to the Base UI Positioner. */
|
|
11
|
+
export type MenuPositionProps = Pick<MenuPrimitive.Positioner.Props, "align" | "alignOffset" | "anchor" | "arrowPadding" | "collisionAvoidance" | "collisionBoundary" | "collisionPadding" | "disableAnchorTracking" | "side" | "sideOffset" | "sticky">;
|
|
12
|
+
/** Base UI Popup props plus the positioning props, with a string `className`. */
|
|
13
|
+
export type MenuPopupProps = Omit<MenuPrimitive.Popup.Props, "className"> & MenuPositionProps & {
|
|
14
|
+
className?: string;
|
|
15
|
+
};
|
|
16
|
+
/** Props for a menu Item. */
|
|
17
|
+
export type MenuItemPartProps = Omit<MenuPrimitive.Item.Props, "children" | "className" | "render"> & {
|
|
18
|
+
className?: string;
|
|
19
|
+
/** Pads the start so a row with no leading glyph lines up with rows that have an icon, dot or avatar. */
|
|
20
|
+
inset?: boolean;
|
|
21
|
+
/** `danger` marks a destructive action with red text and a red highlight. @default "neutral" */
|
|
22
|
+
tone?: Extract<Tone, "neutral" | "danger">;
|
|
23
|
+
/** Custom leading element, such as an `Avatar`. Takes precedence over `dot` and `icon`. */
|
|
24
|
+
avatar?: React.ReactNode;
|
|
25
|
+
/** Dot indicator at the start (takes precedence over icon): `true` for a neutral dot, or a {@link Tone} to tint it. */
|
|
26
|
+
dot?: boolean | Tone;
|
|
27
|
+
/** Leading icon, passed as a component (such as a Lucide icon) rather than an element. Hidden when `avatar` or `dot` is set. */
|
|
28
|
+
icon?: LucideIcon | React.ComponentType<React.SVGProps<SVGSVGElement>>;
|
|
29
|
+
/** Trailing icon, passed as a component. Replaces `kbd` when both are set. */
|
|
30
|
+
suffixIcon?: LucideIcon | React.ComponentType<React.SVGProps<SVGSVGElement>>;
|
|
31
|
+
/** Keyboard shortcut keys shown as keycaps at the end, for example `["⌘", "C"]`. Ignored when `suffixIcon` is set. */
|
|
32
|
+
kbd?: string[];
|
|
33
|
+
/** Custom trailing content, rendered after `suffixIcon` or `kbd`. */
|
|
34
|
+
suffix?: React.ReactNode;
|
|
35
|
+
/** Whether the item is in an active/selected state */
|
|
36
|
+
active?: boolean;
|
|
37
|
+
/** Visual indicator for active state. "dot" shows grey dot normally, green when active. "check" shows green checkmark only when active. */
|
|
38
|
+
activeIndicator?: "dot" | "check" | "none";
|
|
39
|
+
/** Replace the default `<button>` row (e.g. with a link); glyph props render inside it, around `children`. */
|
|
40
|
+
render?: MenuItemProps["render"];
|
|
41
|
+
/** Text label. Use `icon` prop for icons, not children. */
|
|
42
|
+
children?: React.ReactElement | string | number;
|
|
43
|
+
};
|
|
44
|
+
/** Props shared by the CheckboxItem, RadioItem and SubTrigger rows over their Base UI part. */
|
|
45
|
+
type MenuRowProps<P> = Omit<P, "children" | "className" | "render"> & {
|
|
46
|
+
className?: string;
|
|
47
|
+
/** Replace the default `<button>` row; glyph props render inside it, around `children`. */
|
|
48
|
+
render?: MenuItemProps["render"];
|
|
49
|
+
/** Text label. Use `icon` prop for icons, not children. */
|
|
50
|
+
children?: React.ReactElement | string | number;
|
|
51
|
+
};
|
|
52
|
+
/** Props for a menu CheckboxItem. */
|
|
53
|
+
export type MenuCheckboxItemProps = MenuRowProps<MenuPrimitive.CheckboxItem.Props>;
|
|
54
|
+
/** Props for a menu RadioItem. */
|
|
55
|
+
export type MenuRadioItemProps = MenuRowProps<MenuPrimitive.RadioItem.Props>;
|
|
56
|
+
/** Props for a menu SubTrigger. */
|
|
57
|
+
export type MenuSubTriggerProps = MenuRowProps<MenuPrimitive.SubmenuTrigger.Props> & {
|
|
58
|
+
/** Pads the start so a row with no leading icon lines up with rows that have one. */
|
|
59
|
+
inset?: boolean;
|
|
60
|
+
/** Leading icon, passed as a component (such as a Lucide icon) rather than an element. The trailing chevron is added for you. */
|
|
61
|
+
icon?: LucideIcon | React.ComponentType<React.SVGProps<SVGSVGElement>>;
|
|
62
|
+
};
|
|
63
|
+
/** Props for a menu Separator. */
|
|
64
|
+
export type MenuSeparatorProps = Omit<React.ComponentProps<typeof MenuPrimitive.Separator>, "className"> & {
|
|
65
|
+
className?: string;
|
|
66
|
+
/** `default` is a 1px rule with 4px margins. `compact` centres the same rule in a taller transparent band, leaving more room around it. @default "default" */
|
|
67
|
+
spacing?: "default" | "compact";
|
|
68
|
+
};
|
|
69
|
+
/** Props for a menu Content. */
|
|
70
|
+
export type MenuContentProps = MenuPopupProps & {
|
|
71
|
+
/** Size of every item, label and shortcut inside, which read it from context. Submenus inherit it. @default "sm" */
|
|
72
|
+
size?: ComponentSize;
|
|
73
|
+
/** Border radius for menu items. When "full", items become pill-shaped. */
|
|
74
|
+
itemRadius?: Radius;
|
|
75
|
+
/** Surface density. Compact maps to the 16px-radius, 4px-padding menu surface. */
|
|
76
|
+
surface?: MenuSurface;
|
|
77
|
+
/** Named content widths from the design system. */
|
|
78
|
+
contentWidth?: MenuContentWidth;
|
|
79
|
+
/** Outer content overflow behaviour. Use hidden when a child owns scrolling. */
|
|
80
|
+
overflow?: MenuOverflow;
|
|
81
|
+
};
|
|
82
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { Menu as MenuPrimitive } from "@base-ui/react/menu";
|
|
2
|
-
import type { LucideIcon } from "lucide-react";
|
|
3
2
|
import type * as React from "react";
|
|
4
|
-
import type { MenuContentWidth, MenuOverflow, MenuSurface } from "../tokens/menu-content.js";
|
|
5
|
-
import type { Radius } from "../tokens/radius.js";
|
|
6
3
|
import type { ComponentSize } from "../tokens/size.js";
|
|
7
|
-
import type {
|
|
8
|
-
import type { MenuItemProps } from "./menu-item/menu-item-root.js";
|
|
4
|
+
import type { MenuCheckboxItemProps, MenuContentProps, MenuItemPartProps, MenuPopupProps, MenuPositionProps, MenuRadioItemProps, MenuSeparatorProps, MenuSubTriggerProps } from "./menu-parts-types.js";
|
|
9
5
|
/**
|
|
10
6
|
* Internal factory for the menu families (DropdownMenu / ContextMenu /
|
|
11
7
|
* Menubar). The three compose the same Base UI Menu parts (ContextMenu's and
|
|
@@ -18,12 +14,6 @@ import type { MenuItemProps } from "./menu-item/menu-item-root.js";
|
|
|
18
14
|
* menu part files. Unlike that module the parts read React context, so it
|
|
19
15
|
* carries a `"use client"` directive.
|
|
20
16
|
*/
|
|
21
|
-
/** Positioning props accepted on every menu `*Content` and forwarded to the Base UI Positioner. */
|
|
22
|
-
type MenuPositionProps = Pick<MenuPrimitive.Positioner.Props, "align" | "alignOffset" | "anchor" | "arrowPadding" | "collisionAvoidance" | "collisionBoundary" | "collisionPadding" | "disableAnchorTracking" | "side" | "sideOffset" | "sticky">;
|
|
23
|
-
/** Base UI Popup props plus the positioning props, with a string `className`. */
|
|
24
|
-
export type MenuPopupProps = Omit<MenuPrimitive.Popup.Props, "className"> & MenuPositionProps & {
|
|
25
|
-
className?: string;
|
|
26
|
-
};
|
|
27
17
|
/** Default Positioner offsets/alignment a family applies when the caller omits them. */
|
|
28
18
|
interface MenuPositionDefaults {
|
|
29
19
|
align?: MenuPositionProps["align"];
|
|
@@ -37,67 +27,13 @@ interface MenuContextValue {
|
|
|
37
27
|
}
|
|
38
28
|
/** Props for a menu SubContent: the Content's popup props plus a `size` override. */
|
|
39
29
|
export type MenuSubContentProps = MenuPopupProps & {
|
|
30
|
+
/** Item size for this submenu only. Omit to inherit the parent menu's `size`. */
|
|
40
31
|
size?: ComponentSize;
|
|
41
32
|
};
|
|
42
33
|
/** Props for a menu Label: Base UI `GroupLabel` props with a string `className`. */
|
|
43
34
|
export type MenuLabelProps = Omit<MenuPrimitive.GroupLabel.Props, "className"> & {
|
|
44
35
|
className?: string;
|
|
45
36
|
};
|
|
46
|
-
/** Props for a menu Item. */
|
|
47
|
-
export type MenuItemPartProps = Omit<MenuPrimitive.Item.Props, "children" | "className" | "render"> & {
|
|
48
|
-
className?: string;
|
|
49
|
-
inset?: boolean;
|
|
50
|
-
tone?: Extract<Tone, "neutral" | "danger">;
|
|
51
|
-
avatar?: React.ReactNode;
|
|
52
|
-
/** Dot indicator at the start (takes precedence over icon): `true` for a neutral dot, or a {@link Tone} to tint it. */
|
|
53
|
-
dot?: boolean | Tone;
|
|
54
|
-
icon?: LucideIcon | React.ComponentType<React.SVGProps<SVGSVGElement>>;
|
|
55
|
-
suffixIcon?: LucideIcon | React.ComponentType<React.SVGProps<SVGSVGElement>>;
|
|
56
|
-
kbd?: string[];
|
|
57
|
-
suffix?: React.ReactNode;
|
|
58
|
-
/** Whether the item is in an active/selected state */
|
|
59
|
-
active?: boolean;
|
|
60
|
-
/** Visual indicator for active state. "dot" shows grey dot normally, green when active. "check" shows green checkmark only when active. */
|
|
61
|
-
activeIndicator?: "dot" | "check" | "none";
|
|
62
|
-
/** Replace the default `<button>` row (e.g. with a link); glyph props render inside it, around `children`. */
|
|
63
|
-
render?: MenuItemProps["render"];
|
|
64
|
-
/** Text label. Use `icon` prop for icons, not children. */
|
|
65
|
-
children?: React.ReactElement | string | number;
|
|
66
|
-
};
|
|
67
|
-
/** Props shared by the CheckboxItem, RadioItem and SubTrigger rows over their Base UI part. */
|
|
68
|
-
type MenuRowProps<P> = Omit<P, "children" | "className" | "render"> & {
|
|
69
|
-
className?: string;
|
|
70
|
-
/** Replace the default `<button>` row; glyph props render inside it, around `children`. */
|
|
71
|
-
render?: MenuItemProps["render"];
|
|
72
|
-
/** Text label. Use `icon` prop for icons, not children. */
|
|
73
|
-
children?: React.ReactElement | string | number;
|
|
74
|
-
};
|
|
75
|
-
/** Props for a menu CheckboxItem. */
|
|
76
|
-
export type MenuCheckboxItemProps = MenuRowProps<MenuPrimitive.CheckboxItem.Props>;
|
|
77
|
-
/** Props for a menu RadioItem. */
|
|
78
|
-
export type MenuRadioItemProps = MenuRowProps<MenuPrimitive.RadioItem.Props>;
|
|
79
|
-
/** Props for a menu SubTrigger. */
|
|
80
|
-
export type MenuSubTriggerProps = MenuRowProps<MenuPrimitive.SubmenuTrigger.Props> & {
|
|
81
|
-
inset?: boolean;
|
|
82
|
-
icon?: LucideIcon | React.ComponentType<React.SVGProps<SVGSVGElement>>;
|
|
83
|
-
};
|
|
84
|
-
/** Props for a menu Separator. */
|
|
85
|
-
export type MenuSeparatorProps = Omit<React.ComponentProps<typeof MenuPrimitive.Separator>, "className"> & {
|
|
86
|
-
className?: string;
|
|
87
|
-
spacing?: "default" | "compact";
|
|
88
|
-
};
|
|
89
|
-
/** Props for a menu Content. */
|
|
90
|
-
export type MenuContentProps = MenuPopupProps & {
|
|
91
|
-
size?: ComponentSize;
|
|
92
|
-
/** Border radius for menu items. When "full", items become pill-shaped. */
|
|
93
|
-
itemRadius?: Radius;
|
|
94
|
-
/** Surface density. Compact maps to the 16px-radius, 4px-padding menu surface. */
|
|
95
|
-
surface?: MenuSurface;
|
|
96
|
-
/** Named content widths from the design system. */
|
|
97
|
-
contentWidth?: MenuContentWidth;
|
|
98
|
-
/** Outer content overflow behaviour. Use hidden when a child owns scrolling. */
|
|
99
|
-
overflow?: MenuOverflow;
|
|
100
|
-
};
|
|
101
37
|
/** The Content defaults that differ between families. */
|
|
102
38
|
interface MenuContentConfig {
|
|
103
39
|
/** Positioner defaults applied when the caller omits them. */
|
|
@@ -129,6 +65,7 @@ export interface MenuFamilyParts {
|
|
|
129
65
|
Group: MenuPart<React.ComponentProps<typeof MenuPrimitive.Group>>;
|
|
130
66
|
Item: MenuPart<MenuItemPartProps>;
|
|
131
67
|
Label: MenuPart<MenuLabelProps & {
|
|
68
|
+
/** Pads the start so the label lines up with items that have a leading icon. */
|
|
132
69
|
inset?: boolean;
|
|
133
70
|
}>;
|
|
134
71
|
Portal: MenuPart<React.ComponentProps<typeof MenuPrimitive.Portal>>;
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Menu item with a toggleable checkmark. Controlled via `checked`/`onCheckedChange`;
|
|
3
3
|
* the menu stays open on select unless you set `closeOnClick`.
|
|
4
4
|
*/
|
|
5
|
-
declare const MenubarCheckboxItem: (props: import("../menu-parts.js").MenuCheckboxItemProps) => React.JSX.Element;
|
|
5
|
+
declare const MenubarCheckboxItem: (props: import("../menu-parts-types.js").MenuCheckboxItemProps) => React.JSX.Element;
|
|
6
6
|
export { MenubarCheckboxItem };
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* open/close. Provides item size and radius to descendants via context, so
|
|
4
4
|
* `size`/`itemRadius` set here flow to every item, label, and shortcut inside.
|
|
5
5
|
*/
|
|
6
|
-
declare const MenubarContent: (props: import("../menu-parts.js").MenuContentProps) => React.JSX.Element;
|
|
6
|
+
declare const MenubarContent: (props: import("../menu-parts-types.js").MenuContentProps) => React.JSX.Element;
|
|
7
7
|
export { MenubarContent };
|
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
* for a leading icon rather than nesting icon elements in `children`. Handle
|
|
5
5
|
* selection with `onClick`; set `closeOnClick={false}` to keep the menu open.
|
|
6
6
|
*/
|
|
7
|
-
declare const MenubarItem: (props: import("../menu-parts.js").MenuItemPartProps) => React.JSX.Element;
|
|
7
|
+
declare const MenubarItem: (props: import("../menu-parts-types.js").MenuItemPartProps) => React.JSX.Element;
|
|
8
8
|
export { MenubarItem };
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Single-select menu item showing a trailing checkmark when active. Must be
|
|
3
3
|
* rendered inside a MenubarRadioGroup, which supplies its `value`.
|
|
4
4
|
*/
|
|
5
|
-
declare const MenubarRadioItem: (props: import("../menu-parts.js").MenuRadioItemProps) => React.JSX.Element;
|
|
5
|
+
declare const MenubarRadioItem: (props: import("../menu-parts-types.js").MenuRadioItemProps) => React.JSX.Element;
|
|
6
6
|
export { MenubarRadioItem };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/** Horizontal divider between groups of menu items. `spacing="compact"`
|
|
2
|
-
declare const MenubarSeparator: (props: import("../menu-parts.js").MenuSeparatorProps) => React.JSX.Element;
|
|
1
|
+
/** Horizontal divider between groups of menu items. `spacing="compact"` leaves more room around the rule. */
|
|
2
|
+
declare const MenubarSeparator: (props: import("../menu-parts-types.js").MenuSeparatorProps) => React.JSX.Element;
|
|
3
3
|
export { MenubarSeparator };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { menubarParts } from "./menubar-parts.js";
|
|
3
|
-
/** Horizontal divider between groups of menu items. `spacing="compact"`
|
|
3
|
+
/** Horizontal divider between groups of menu items. `spacing="compact"` leaves more room around the rule. */
|
|
4
4
|
const MenubarSeparator = menubarParts.Separator;
|
|
5
5
|
export { MenubarSeparator };
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* arrow key, with a trailing chevron. Pass label text via `children` and a
|
|
4
4
|
* leading icon via `icon`.
|
|
5
5
|
*/
|
|
6
|
-
declare const MenubarSubTrigger: (props: import("../menu-parts.js").MenuSubTriggerProps) => React.JSX.Element;
|
|
6
|
+
declare const MenubarSubTrigger: (props: import("../menu-parts-types.js").MenuSubTriggerProps) => React.JSX.Element;
|
|
7
7
|
export { MenubarSubTrigger };
|
|
@@ -17,6 +17,7 @@ const phoneInputVariants = cva("border-border bg-input relative flex w-full item
|
|
|
17
17
|
},
|
|
18
18
|
variants: {
|
|
19
19
|
// Heights from shared CONTROL_HEIGHT_CLASSES (aligns with Button/Input).
|
|
20
|
+
/** Control height and text size, matching Button and Input at the same size. Also sizes the country selector. @default "xl" */
|
|
20
21
|
size: withControlHeights({
|
|
21
22
|
"2xs": "text-xs",
|
|
22
23
|
xs: "text-xs",
|
|
@@ -27,6 +28,7 @@ const phoneInputVariants = cva("border-border bg-input relative flex w-full item
|
|
|
27
28
|
"2xl": "text-base",
|
|
28
29
|
"3xl": "text-base",
|
|
29
30
|
}),
|
|
31
|
+
/** Corner shape: `rounded` for a soft rectangle, `full` for a capsule. @default "rounded" */
|
|
30
32
|
radius: {
|
|
31
33
|
rounded: "rounded-md",
|
|
32
34
|
full: "rounded-full",
|
|
@@ -6,6 +6,7 @@ import { pillVariants } from "../pill/pill-variants.js";
|
|
|
6
6
|
export interface PillProps extends React.HTMLAttributes<HTMLElement>, Omit<VariantProps<typeof pillVariants>, "size"> {
|
|
7
7
|
/** Host tag rendered when `render` is not given. @default "span" */
|
|
8
8
|
as?: keyof React.JSX.IntrinsicElements;
|
|
9
|
+
/** Dims the pill and blocks pointer events. Styling only: no `disabled` attribute reaches the element. */
|
|
9
10
|
disabled?: boolean;
|
|
10
11
|
/** Replace the rendered element with another element or component. */
|
|
11
12
|
render?: useRender.RenderProp | undefined;
|
|
@@ -233,6 +233,7 @@ export const pillVariants = cva(cn("inline-flex items-center justify-center bord
|
|
|
233
233
|
// `satisfies Record<Tone|Emphasis, string>` fails to compile if a canon
|
|
234
234
|
// member is missing or a stray key creeps in, keeping PillTone=Tone and
|
|
235
235
|
// PillEmphasis=Emphasis (declared below) honest.
|
|
236
|
+
/** Semantic colour: `neutral` for plain labels, `brand` for the house yellow, `success` / `warning` / `info` / `danger` for status. @default "neutral" */
|
|
236
237
|
tone: {
|
|
237
238
|
neutral: "bg-primary text-primary-foreground",
|
|
238
239
|
brand: "bg-brand text-brand-foreground",
|
|
@@ -241,6 +242,7 @@ export const pillVariants = cva(cn("inline-flex items-center justify-center bord
|
|
|
241
242
|
info: "bg-info-accent text-info-foreground",
|
|
242
243
|
danger: "bg-destructive text-destructive-foreground",
|
|
243
244
|
},
|
|
245
|
+
/** Visual weight: `solid` is a filled pill, `soft` a pale tint, `outline` a border, `ghost` text only, `transparent` frosted glass for use over images only. @default "solid" */
|
|
244
246
|
emphasis: {
|
|
245
247
|
solid: "",
|
|
246
248
|
soft: "",
|
|
@@ -252,6 +254,7 @@ export const pillVariants = cva(cn("inline-flex items-center justify-center bord
|
|
|
252
254
|
true: "pointer-events-none opacity-50",
|
|
253
255
|
},
|
|
254
256
|
size: PILL_SIZE_CLASSES,
|
|
257
|
+
/** Corner shape: `full` is a capsule, `rounded` a soft rectangle, `square` has sharp corners. Overrides the size's own corner radius. @default "full" */
|
|
255
258
|
radius: {
|
|
256
259
|
rounded: "rounded-md!",
|
|
257
260
|
square: "rounded-none!",
|
|
@@ -57,7 +57,9 @@ type PopoverPositionerProps = Pick<PopoverPrimitive.Positioner.Props, "align" |
|
|
|
57
57
|
*/
|
|
58
58
|
declare const PopoverContent: ({ className, align, sideOffset, size, side, alignOffset, anchor, arrowPadding, collisionAvoidance, collisionBoundary, collisionPadding, positionMethod, positionerClassName, sticky, ...props }: Omit<PopoverPrimitive.Popup.Props, "className"> & PopoverPositionerProps & {
|
|
59
59
|
className?: string;
|
|
60
|
+
/** Classes for the positioning layer around the content, such as a lower `z-*` for a panel that sits beneath fixed chrome. Defaults to `z-50`. */
|
|
60
61
|
positionerClassName?: string;
|
|
62
|
+
/** Padding and corner radius: `sm` is compact (8px), `base` is 16px, `lg` is roomy (24px). @default "lg" */
|
|
61
63
|
size?: PopoverSize;
|
|
62
64
|
}) => import("react").JSX.Element;
|
|
63
65
|
/**
|
|
@@ -5,6 +5,7 @@ interface ProgressCircleProps {
|
|
|
5
5
|
/** Optional content rendered centred over the ring (e.g. a percentage). */
|
|
6
6
|
children?: React.ReactNode;
|
|
7
7
|
className?: string;
|
|
8
|
+
/** Classes for the filled arc, for example a stroke colour such as `stroke-brand`. Defaults to `stroke-primary`. */
|
|
8
9
|
indicatorClassName?: string;
|
|
9
10
|
/** Accessible label announced by screen readers (required). */
|
|
10
11
|
label: string;
|
|
@@ -14,6 +15,7 @@ interface ProgressCircleProps {
|
|
|
14
15
|
size?: number;
|
|
15
16
|
/** Ring stroke width in pixels. @default 3 */
|
|
16
17
|
strokeWidth?: number;
|
|
18
|
+
/** Classes for the unfilled ring behind the arc, for example a stroke colour such as `stroke-border`. Defaults to `stroke-muted`. */
|
|
17
19
|
trackClassName?: string;
|
|
18
20
|
/** Current progress; clamped to `0..max`. */
|
|
19
21
|
value: number;
|
|
@@ -30,7 +30,10 @@ export interface ScrollFrameProps {
|
|
|
30
30
|
* @default false
|
|
31
31
|
*/
|
|
32
32
|
dragScroll?: boolean | undefined;
|
|
33
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* How the fades are drawn: `color` blends a gradient of `fadeTheme` into a solid surface, `mask` fades the content itself to transparent, for use over images or blurs.
|
|
35
|
+
* @default "color"
|
|
36
|
+
*/
|
|
34
37
|
fadeMode?: ScrollFrameFadeMode | undefined;
|
|
35
38
|
/**
|
|
36
39
|
* Which edges fade. An edge fades only while there is more beyond it.
|
|
@@ -52,7 +55,10 @@ export interface ScrollFrameProps {
|
|
|
52
55
|
* @default false
|
|
53
56
|
*/
|
|
54
57
|
hideScrollbar?: boolean | undefined;
|
|
55
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* Scroll axis: `vertical` scrolls up and down, `horizontal` left and right, as for a row of chips.
|
|
60
|
+
* @default "vertical"
|
|
61
|
+
*/
|
|
56
62
|
orientation?: Orientation | undefined;
|
|
57
63
|
/** Classes for the scrolling element. */
|
|
58
64
|
viewportClassName?: string | undefined;
|
|
@@ -10,9 +10,15 @@ export type SegmentedControlProps<T extends string = string> = Omit<ToggleGroup.
|
|
|
10
10
|
defaultValue?: T;
|
|
11
11
|
/** Fires with the newly selected value - never with "". */
|
|
12
12
|
onValueChange?: (value: T) => void;
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Size of every segment (text and padding), or an object per breakpoint like `{ base: "sm", md: "lg" }`.
|
|
15
|
+
* @default "sm"
|
|
16
|
+
*/
|
|
14
17
|
size?: ResponsiveValue<ComponentSize>;
|
|
15
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Stretches the control to its container's width, with the segments sharing the space equally; otherwise it hugs its content.
|
|
20
|
+
* @default false
|
|
21
|
+
*/
|
|
16
22
|
fullWidth?: boolean;
|
|
17
23
|
};
|
|
18
24
|
/**
|
|
@@ -10,6 +10,7 @@ type SelectPositionerProps = Pick<SelectPrimitive.Positioner.Props, "align" | "a
|
|
|
10
10
|
*/
|
|
11
11
|
declare const SelectContent: ({ className, children, align, alignItemWithTrigger, side, sideOffset, alignOffset, anchor, arrowPadding, collisionAvoidance, collisionBoundary, collisionPadding, positionMethod, sticky, size, testId, ...props }: WithTestId<Omit<SelectPrimitive.Popup.Props, "className"> & SelectPositionerProps & {
|
|
12
12
|
className?: string;
|
|
13
|
+
/** Size of every SelectItem, label and group inside, which read it from context. Match the trigger's `size`. @default "sm" */
|
|
13
14
|
size?: ComponentSize;
|
|
14
15
|
}>) => import("react").JSX.Element;
|
|
15
16
|
export { SelectContent };
|
|
@@ -5,10 +5,18 @@ import type { ButtonProps } from "../button.js";
|
|
|
5
5
|
/**
|
|
6
6
|
* Button that opens the listbox and displays the selected value (or the
|
|
7
7
|
* SelectValue placeholder), with a trailing chevron; forwards Button styling
|
|
8
|
-
* props - defaults to `size="
|
|
8
|
+
* props - defaults to `size="xl"`, `emphasis="outline"`, `radius="rounded"`.
|
|
9
9
|
*/
|
|
10
|
-
declare const SelectTrigger: ({ className, children, testId, tone, size, emphasis, radius, pressed, ...props }: WithTestId<Omit<SelectPrimitive.Trigger.Props, "className" | "render"> &
|
|
10
|
+
declare const SelectTrigger: ({ className, children, testId, tone, size, emphasis, radius, pressed, ...props }: WithTestId<Omit<SelectPrimitive.Trigger.Props, "className" | "render"> & {
|
|
11
11
|
className?: string;
|
|
12
|
+
/** Semantic colour of the trigger, as on Button. @default "neutral" */
|
|
13
|
+
tone?: ButtonProps["tone"];
|
|
14
|
+
/** Visual weight, as on Button; the outline reads as a form field. @default "outline" */
|
|
15
|
+
emphasis?: ButtonProps["emphasis"];
|
|
16
|
+
/** Corner shape, as on Button. @default "rounded" */
|
|
17
|
+
radius?: ButtonProps["radius"];
|
|
18
|
+
/** Shrink while held down, as on Button, but off by default here. @default false */
|
|
19
|
+
pressed?: ButtonProps["pressed"];
|
|
12
20
|
/**
|
|
13
21
|
* Trigger size - a single token or a per-breakpoint object like
|
|
14
22
|
* `{ base: "sm", md: "xl" }`. Forwarded to the underlying Button. @default "xl"
|
|
@@ -8,7 +8,7 @@ import { Icon } from "../icon.js";
|
|
|
8
8
|
/**
|
|
9
9
|
* Button that opens the listbox and displays the selected value (or the
|
|
10
10
|
* SelectValue placeholder), with a trailing chevron; forwards Button styling
|
|
11
|
-
* props - defaults to `size="
|
|
11
|
+
* props - defaults to `size="xl"`, `emphasis="outline"`, `radius="rounded"`.
|
|
12
12
|
*/
|
|
13
13
|
const SelectTrigger = ({ className, children, testId, tone = "neutral", size = "xl", emphasis = "outline", radius = "rounded", pressed = false, ...props }) => (_jsxs(SelectPrimitive.Trigger, { render: _jsx(Button, { emphasis: emphasis, className: cn("bg-input data-placeholder:text-muted-foreground text-paragraph-sm justify-between rounded-md *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2", className), pressed: pressed, radius: radius, size: size, tone: tone }), "data-component": "select-trigger", "data-slot": "select-trigger", "data-testid": testId, ...props, children: [children, _jsx(SelectPrimitive.Icon, { className: "flex", children: _jsx(Icon, { className: "opacity-50", icon: ChevronDown, size: "xs" }) })] }));
|
|
14
14
|
export { SelectTrigger };
|
|
@@ -11,6 +11,10 @@ import type { ComponentProps } from "react";
|
|
|
11
11
|
*/
|
|
12
12
|
type SidepanelHeaderVariant = "bar" | "default";
|
|
13
13
|
type SidepanelHeaderProps = ComponentProps<"div"> & {
|
|
14
|
+
/**
|
|
15
|
+
* `default` is a stacked title and description with a bottom border. `bar` is a transparent toolbar pinned over the top of the panel, for two `SidepanelControls` groups.
|
|
16
|
+
* @default "default"
|
|
17
|
+
*/
|
|
14
18
|
variant?: SidepanelHeaderVariant;
|
|
15
19
|
};
|
|
16
20
|
/**
|
|
@@ -5,6 +5,7 @@ export interface SubNavigationLinkProps extends Omit<React.ComponentProps<"a">,
|
|
|
5
5
|
active?: boolean;
|
|
6
6
|
/** Link label, matching what `MenuItem` renders. */
|
|
7
7
|
children?: React.ReactElement | string | number | undefined;
|
|
8
|
+
/** Destination of the default `<a>`. Not used when `render` supplies its own element. */
|
|
8
9
|
href?: string;
|
|
9
10
|
/** Leading icon shown before the label. */
|
|
10
11
|
icon?: LucideIcon;
|
|
@@ -14,7 +14,8 @@ import type { TileSwatchProps } from "./swatch-tile-types.js";
|
|
|
14
14
|
* </div>
|
|
15
15
|
* ```
|
|
16
16
|
*/
|
|
17
|
-
declare const SwatchFrameRing: ({ radius }: {
|
|
17
|
+
declare const SwatchFrameRing: ({ radius, }: {
|
|
18
|
+
/** Tailwind rounding class (such as `rounded-xl`) matching the framed container's corners, so the ring follows them. */
|
|
18
19
|
radius: string;
|
|
19
20
|
}) => import("react").JSX.Element;
|
|
20
21
|
/**
|
|
@@ -18,7 +18,7 @@ import { buildTileClasses, buildTileStyle, getInnerRingRadius, resolveTileState,
|
|
|
18
18
|
* </div>
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
|
-
const SwatchFrameRing = ({ radius }) => (_jsx("span", { "aria-hidden": "true", className: cn("pointer-events-none absolute inset-0 ring-1 ring-black/5 ring-inset", radius) }));
|
|
21
|
+
const SwatchFrameRing = ({ radius, }) => (_jsx("span", { "aria-hidden": "true", className: cn("pointer-events-none absolute inset-0 ring-1 ring-black/5 ring-inset", radius) }));
|
|
22
22
|
/**
|
|
23
23
|
* Card/bare renderer: the tiered radius/border/ring/shadow tile.
|
|
24
24
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Radio as RadioPrimitive } from "@base-ui/react/radio";
|
|
2
2
|
import type React from "react";
|
|
3
3
|
import type { SwatchSize } from "../../tokens/swatch.js";
|
|
4
|
-
type SwatchGroupItemProps = Omit<RadioPrimitive.Root.Props<string>, "children"> & {
|
|
4
|
+
type SwatchGroupItemProps = Omit<RadioPrimitive.Root.Props<string>, "aria-label" | "children"> & {
|
|
5
5
|
/**
|
|
6
6
|
* CSS colour value (hex, rgb, hsl, etc.).
|
|
7
7
|
* If provided along with children, children render on top.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ComponentProps } from "react";
|
|
2
2
|
import type { SwatchSize } from "../../tokens/swatch.js";
|
|
3
|
-
type SwatchSelectorItemProps = Omit<ComponentProps<"button">, "children" | "defaultValue" | "value"> & {
|
|
3
|
+
type SwatchSelectorItemProps = Omit<ComponentProps<"button">, "aria-label" | "children" | "defaultValue" | "value"> & {
|
|
4
4
|
/** Unique value for this swatch */
|
|
5
5
|
value: string;
|
|
6
6
|
/**
|
|
@@ -8,6 +8,7 @@ export interface TabNavigationLinkProps extends Omit<useRender.ComponentProps<"a
|
|
|
8
8
|
* @default false
|
|
9
9
|
*/
|
|
10
10
|
active?: boolean;
|
|
11
|
+
/** Destination of the link. Also forwarded to the element given in `render`, such as a router `Link`. */
|
|
11
12
|
href: string;
|
|
12
13
|
/** Optional icon rendered alongside the label. */
|
|
13
14
|
icon?: IconComponent;
|
|
@@ -8,5 +8,9 @@
|
|
|
8
8
|
export declare const TabsPanel: ({ children, className, layout, }: {
|
|
9
9
|
children: React.ReactNode;
|
|
10
10
|
className?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Motion `layout` value for the height animation when the active tab's content changes size: `false` switches it off, `"size"` or `"position"` animates only that, `"preserve-aspect"` keeps the aspect ratio.
|
|
13
|
+
* @default true
|
|
14
|
+
*/
|
|
11
15
|
layout?: boolean | "position" | "size" | "preserve-aspect";
|
|
12
16
|
}) => import("react").JSX.Element;
|
|
@@ -30,10 +30,12 @@ export const tabsListVariants = cva("inline-flex h-auto w-fit items-center justi
|
|
|
30
30
|
variant: "pill",
|
|
31
31
|
},
|
|
32
32
|
variants: {
|
|
33
|
+
/** Ignored on its own: the parent `Tabs` or `TabNavigation` sets the style for every part, so set `variant` there. */
|
|
33
34
|
variant: {
|
|
34
35
|
pill: SEGMENTED_SHELL_BASE,
|
|
35
36
|
line: "gap-6",
|
|
36
37
|
},
|
|
38
|
+
/** Ignored on its own: the parent `Tabs` or `TabNavigation` sets the size for every part, so set `size` there. */
|
|
37
39
|
size: {
|
|
38
40
|
"2xs": "",
|
|
39
41
|
xs: "",
|
|
@@ -86,7 +88,9 @@ export const tabsTriggerVariants = cva(`transition-color-shadow-border inline-fl
|
|
|
86
88
|
variant: "pill",
|
|
87
89
|
},
|
|
88
90
|
variants: {
|
|
91
|
+
/** Ignored on its own: the parent `Tabs` or `TabNavigation` sets the size for every part, so set `size` there. */
|
|
89
92
|
size: { ...SEGMENTED_TRIGGER_TEXT },
|
|
93
|
+
/** Ignored on its own: the parent `Tabs` or `TabNavigation` sets the style for every part, so set `variant` there. */
|
|
90
94
|
variant: {
|
|
91
95
|
line: cn("text-muted-foreground hover:text-foreground data-active:text-foreground dark:text-gray-500 dark:hover:text-gray-300 dark:data-active:text-gray-100", focusRing()),
|
|
92
96
|
pill: "text-muted-foreground data-active:text-foreground rounded-full dark:text-gray-500 dark:data-active:text-gray-100",
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { LucideIcon } from "lucide-react";
|
|
2
2
|
interface ThinkingLoaderIconProps {
|
|
3
|
+
/** Icon to show. Renders nothing when `undefined`. */
|
|
3
4
|
icon: LucideIcon | undefined;
|
|
5
|
+
/** Id of the current step. A new id makes the previous icon crossfade into this one. */
|
|
4
6
|
stepId: string;
|
|
5
7
|
}
|
|
6
8
|
/**
|
|
@@ -18,9 +18,11 @@ interface ThinkingLoaderStepProps {
|
|
|
18
18
|
hideIcon?: boolean;
|
|
19
19
|
/** Inherit font size from a containing `ThinkingLoader`. */
|
|
20
20
|
inheritSize?: boolean;
|
|
21
|
+
/** Sweeps a highlight across the label; `false` renders it as plain text. @default true */
|
|
21
22
|
shimmer?: boolean;
|
|
22
23
|
/** Shimmer highlight direction. Defaults to `"dark"`. */
|
|
23
24
|
shimmerVariant?: ShimmerVariant;
|
|
25
|
+
/** The step to show: its `label` is the text, and its `icon` leads it unless `hideIcon` is set. */
|
|
24
26
|
step: ThinkingStep;
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
@@ -45,6 +45,7 @@ const toggleVariants = cva(cn(focusRing(), "border-border text-foreground bg-bac
|
|
|
45
45
|
variant: "default",
|
|
46
46
|
},
|
|
47
47
|
variants: {
|
|
48
|
+
/** How a pressed toggle shows it is on: `default` greys the fill and border, `secondary` darkens the border only. Inside a `ToggleGroup` the group's value wins. @default "default" */
|
|
48
49
|
variant: {
|
|
49
50
|
default: "data-pressed:border-muted-foreground data-pressed:bg-muted",
|
|
50
51
|
secondary: "data-pressed:border-foreground data-pressed:bg-background",
|
|
@@ -53,6 +54,7 @@ const toggleVariants = cva(cn(focusRing(), "border-border text-foreground bg-bac
|
|
|
53
54
|
// Old `shape` values map onto the shared Radius vocabulary by their actual
|
|
54
55
|
// class: old `square` was `rounded-lg` → "rounded"; old `round` was
|
|
55
56
|
// `rounded-full` → "full". Appearance is preserved exactly.
|
|
57
|
+
/** Corner shape: `rounded` for soft corners, `full` for a pill. There is no sharp option. Inside a `ToggleGroup` the group's value wins. @default "rounded" */
|
|
56
58
|
radius: {
|
|
57
59
|
rounded: "rounded-lg",
|
|
58
60
|
full: "rounded-full",
|
|
@@ -6,7 +6,9 @@ export interface VoiceErrorPopoverProps {
|
|
|
6
6
|
message: string;
|
|
7
7
|
/** When set, renders an action button (e.g. `"Retry"`) that calls `onAction`. */
|
|
8
8
|
actionLabel?: string;
|
|
9
|
+
/** Called when the action button is clicked. The button only appears when `actionLabel` is set. */
|
|
9
10
|
onAction?: () => void;
|
|
11
|
+
/** Called when the dismiss button is clicked. The parent should then set `open` to `false`. */
|
|
10
12
|
onDismiss?: () => void;
|
|
11
13
|
/** Accessible label for the dismiss button. @default "Dismiss" */
|
|
12
14
|
dismissLabel?: string;
|
|
@@ -6,7 +6,9 @@ export interface VoicePillProps {
|
|
|
6
6
|
level?: number;
|
|
7
7
|
/** Elapsed capture time in ms, shown as an `mm:ss` timer while recording. @default 0 */
|
|
8
8
|
elapsedMs?: number;
|
|
9
|
+
/** Called when the pill is pressed. The parent decides what the press does in each `state`, such as starting or stopping capture. */
|
|
9
10
|
onClick?: () => void;
|
|
11
|
+
/** Block presses and dim the pill. @default false */
|
|
10
12
|
disabled?: boolean;
|
|
11
13
|
/** Accessible label. The parent chooses copy per state - never hardcoded here. */
|
|
12
14
|
label: string;
|