@inui/design-system 0.0.0-stage → 1.22.0
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/README.md +360 -2
- package/dist/components/ui/accordion.d.ts +44 -0
- package/dist/components/ui/accordion.d.ts.map +1 -0
- package/dist/components/ui/accordion.js +86 -0
- package/dist/components/ui/accordion.js.map +1 -0
- package/dist/components/ui/ai-avatar.d.ts +46 -0
- package/dist/components/ui/ai-avatar.d.ts.map +1 -0
- package/dist/components/ui/ai-avatar.js +43 -0
- package/dist/components/ui/ai-avatar.js.map +1 -0
- package/dist/components/ui/ai-label.d.ts +118 -0
- package/dist/components/ui/ai-label.d.ts.map +1 -0
- package/dist/components/ui/ai-label.js +184 -0
- package/dist/components/ui/ai-label.js.map +1 -0
- package/dist/components/ui/ai-sparkle.d.ts +91 -0
- package/dist/components/ui/ai-sparkle.d.ts.map +1 -0
- package/dist/components/ui/ai-sparkle.js +200 -0
- package/dist/components/ui/ai-sparkle.js.map +1 -0
- package/dist/components/ui/alert-dialog.d.ts +79 -0
- package/dist/components/ui/alert-dialog.d.ts.map +1 -0
- package/dist/components/ui/alert-dialog.js +147 -0
- package/dist/components/ui/alert-dialog.js.map +1 -0
- package/dist/components/ui/alert.d.ts +71 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/alert.js +108 -0
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/aspect-ratio.d.ts +30 -0
- package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
- package/dist/components/ui/aspect-ratio.js +40 -0
- package/dist/components/ui/aspect-ratio.js.map +1 -0
- package/dist/components/ui/attachment.d.ts +74 -0
- package/dist/components/ui/attachment.d.ts.map +1 -0
- package/dist/components/ui/attachment.js +142 -0
- package/dist/components/ui/attachment.js.map +1 -0
- package/dist/components/ui/avatar.d.ts +82 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/avatar.js +123 -0
- package/dist/components/ui/avatar.js.map +1 -0
- package/dist/components/ui/badge.d.ts +130 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +226 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/breadcrumb.d.ts +43 -0
- package/dist/components/ui/breadcrumb.d.ts.map +1 -0
- package/dist/components/ui/breadcrumb.js +98 -0
- package/dist/components/ui/breadcrumb.js.map +1 -0
- package/dist/components/ui/browser-tabs.d.ts +218 -0
- package/dist/components/ui/browser-tabs.d.ts.map +1 -0
- package/dist/components/ui/browser-tabs.js +528 -0
- package/dist/components/ui/browser-tabs.js.map +1 -0
- package/dist/components/ui/bubble.d.ts +80 -0
- package/dist/components/ui/bubble.d.ts.map +1 -0
- package/dist/components/ui/bubble.js +235 -0
- package/dist/components/ui/bubble.js.map +1 -0
- package/dist/components/ui/button-group.d.ts +60 -0
- package/dist/components/ui/button-group.d.ts.map +1 -0
- package/dist/components/ui/button-group.js +89 -0
- package/dist/components/ui/button-group.js.map +1 -0
- package/dist/components/ui/button.d.ts +157 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +144 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/calendar.d.ts +57 -0
- package/dist/components/ui/calendar.d.ts.map +1 -0
- package/dist/components/ui/calendar.js +163 -0
- package/dist/components/ui/calendar.js.map +1 -0
- package/dist/components/ui/card.d.ts +96 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.js +131 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/carousel.d.ts +86 -0
- package/dist/components/ui/carousel.d.ts.map +1 -0
- package/dist/components/ui/carousel.js +207 -0
- package/dist/components/ui/carousel.js.map +1 -0
- package/dist/components/ui/checkbox.d.ts +54 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/checkbox.js +78 -0
- package/dist/components/ui/checkbox.js.map +1 -0
- package/dist/components/ui/collapsible.d.ts +45 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +65 -0
- package/dist/components/ui/collapsible.js.map +1 -0
- package/dist/components/ui/combobox.d.ts +111 -0
- package/dist/components/ui/combobox.d.ts.map +1 -0
- package/dist/components/ui/combobox.js +264 -0
- package/dist/components/ui/combobox.js.map +1 -0
- package/dist/components/ui/command.d.ts +71 -0
- package/dist/components/ui/command.d.ts.map +1 -0
- package/dist/components/ui/command.js +133 -0
- package/dist/components/ui/command.js.map +1 -0
- package/dist/components/ui/context-menu.d.ts +70 -0
- package/dist/components/ui/context-menu.d.ts.map +1 -0
- package/dist/components/ui/context-menu.js +163 -0
- package/dist/components/ui/context-menu.js.map +1 -0
- package/dist/components/ui/count-badge.d.ts +40 -0
- package/dist/components/ui/count-badge.d.ts.map +1 -0
- package/dist/components/ui/count-badge.js +43 -0
- package/dist/components/ui/count-badge.js.map +1 -0
- package/dist/components/ui/data-table.d.ts +1026 -0
- package/dist/components/ui/data-table.d.ts.map +1 -0
- package/dist/components/ui/data-table.js +3423 -0
- package/dist/components/ui/data-table.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +73 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +145 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/direction.d.ts +35 -0
- package/dist/components/ui/direction.d.ts.map +1 -0
- package/dist/components/ui/direction.js +35 -0
- package/dist/components/ui/direction.js.map +1 -0
- package/dist/components/ui/drawer.d.ts +53 -0
- package/dist/components/ui/drawer.d.ts.map +1 -0
- package/dist/components/ui/drawer.js +115 -0
- package/dist/components/ui/drawer.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +75 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +173 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/dropzone.d.ts +141 -0
- package/dist/components/ui/dropzone.d.ts.map +1 -0
- package/dist/components/ui/dropzone.js +257 -0
- package/dist/components/ui/dropzone.js.map +1 -0
- package/dist/components/ui/empty.d.ts +94 -0
- package/dist/components/ui/empty.d.ts.map +1 -0
- package/dist/components/ui/empty.js +149 -0
- package/dist/components/ui/empty.js.map +1 -0
- package/dist/components/ui/field.d.ts +122 -0
- package/dist/components/ui/field.d.ts.map +1 -0
- package/dist/components/ui/field.js +254 -0
- package/dist/components/ui/field.js.map +1 -0
- package/dist/components/ui/hover-card.d.ts +51 -0
- package/dist/components/ui/hover-card.d.ts.map +1 -0
- package/dist/components/ui/hover-card.js +101 -0
- package/dist/components/ui/hover-card.js.map +1 -0
- package/dist/components/ui/input-group.d.ts +62 -0
- package/dist/components/ui/input-group.d.ts.map +1 -0
- package/dist/components/ui/input-group.js +115 -0
- package/dist/components/ui/input-group.js.map +1 -0
- package/dist/components/ui/input-otp.d.ts +52 -0
- package/dist/components/ui/input-otp.d.ts.map +1 -0
- package/dist/components/ui/input-otp.js +89 -0
- package/dist/components/ui/input-otp.js.map +1 -0
- package/dist/components/ui/input.d.ts +47 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +47 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/item.d.ts +74 -0
- package/dist/components/ui/item.d.ts.map +1 -0
- package/dist/components/ui/item.js +176 -0
- package/dist/components/ui/item.js.map +1 -0
- package/dist/components/ui/kbd.d.ts +41 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/kbd.js +58 -0
- package/dist/components/ui/kbd.js.map +1 -0
- package/dist/components/ui/key-value-pair.d.ts +56 -0
- package/dist/components/ui/key-value-pair.d.ts.map +1 -0
- package/dist/components/ui/key-value-pair.js +110 -0
- package/dist/components/ui/key-value-pair.js.map +1 -0
- package/dist/components/ui/label.d.ts +83 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.js +85 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/marker.d.ts +54 -0
- package/dist/components/ui/marker.d.ts.map +1 -0
- package/dist/components/ui/marker.js +79 -0
- package/dist/components/ui/marker.js.map +1 -0
- package/dist/components/ui/menubar.d.ts +72 -0
- package/dist/components/ui/menubar.d.ts.map +1 -0
- package/dist/components/ui/menubar.js +174 -0
- package/dist/components/ui/menubar.js.map +1 -0
- package/dist/components/ui/message-scroller.d.ts +53 -0
- package/dist/components/ui/message-scroller.d.ts.map +1 -0
- package/dist/components/ui/message-scroller.js +95 -0
- package/dist/components/ui/message-scroller.js.map +1 -0
- package/dist/components/ui/message.d.ts +63 -0
- package/dist/components/ui/message.d.ts.map +1 -0
- package/dist/components/ui/message.js +92 -0
- package/dist/components/ui/message.js.map +1 -0
- package/dist/components/ui/meta-list.d.ts +55 -0
- package/dist/components/ui/meta-list.d.ts.map +1 -0
- package/dist/components/ui/meta-list.js +75 -0
- package/dist/components/ui/meta-list.js.map +1 -0
- package/dist/components/ui/native-select.d.ts +51 -0
- package/dist/components/ui/native-select.d.ts.map +1 -0
- package/dist/components/ui/native-select.js +75 -0
- package/dist/components/ui/native-select.js.map +1 -0
- package/dist/components/ui/navigation-menu.d.ts +56 -0
- package/dist/components/ui/navigation-menu.d.ts.map +1 -0
- package/dist/components/ui/navigation-menu.js +116 -0
- package/dist/components/ui/navigation-menu.js.map +1 -0
- package/dist/components/ui/page-header.d.ts +223 -0
- package/dist/components/ui/page-header.d.ts.map +1 -0
- package/dist/components/ui/page-header.js +233 -0
- package/dist/components/ui/page-header.js.map +1 -0
- package/dist/components/ui/pagination.d.ts +68 -0
- package/dist/components/ui/pagination.d.ts.map +1 -0
- package/dist/components/ui/pagination.js +145 -0
- package/dist/components/ui/pagination.js.map +1 -0
- package/dist/components/ui/popover.d.ts +61 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/popover.js +144 -0
- package/dist/components/ui/popover.js.map +1 -0
- package/dist/components/ui/progress.d.ts +35 -0
- package/dist/components/ui/progress.d.ts.map +1 -0
- package/dist/components/ui/progress.js +46 -0
- package/dist/components/ui/progress.js.map +1 -0
- package/dist/components/ui/questionnaire.d.ts +92 -0
- package/dist/components/ui/questionnaire.d.ts.map +1 -0
- package/dist/components/ui/questionnaire.js +277 -0
- package/dist/components/ui/questionnaire.js.map +1 -0
- package/dist/components/ui/radio-group.d.ts +50 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -0
- package/dist/components/ui/radio-group.js +65 -0
- package/dist/components/ui/radio-group.js.map +1 -0
- package/dist/components/ui/resizable.d.ts +44 -0
- package/dist/components/ui/resizable.d.ts.map +1 -0
- package/dist/components/ui/resizable.js +73 -0
- package/dist/components/ui/resizable.js.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +55 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.js +72 -0
- package/dist/components/ui/scroll-area.js.map +1 -0
- package/dist/components/ui/select.d.ts +274 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/select.js +609 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/separator.d.ts +31 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/separator.js +38 -0
- package/dist/components/ui/separator.js.map +1 -0
- package/dist/components/ui/sheet.d.ts +59 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sheet.js +128 -0
- package/dist/components/ui/sheet.js.map +1 -0
- package/dist/components/ui/sidebar.d.ts +166 -0
- package/dist/components/ui/sidebar.d.ts.map +1 -0
- package/dist/components/ui/sidebar.js +512 -0
- package/dist/components/ui/sidebar.js.map +1 -0
- package/dist/components/ui/skeleton.d.ts +35 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +46 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/slider.d.ts +39 -0
- package/dist/components/ui/slider.d.ts.map +1 -0
- package/dist/components/ui/slider.js +75 -0
- package/dist/components/ui/slider.js.map +1 -0
- package/dist/components/ui/sonner.d.ts +56 -0
- package/dist/components/ui/sonner.d.ts.map +1 -0
- package/dist/components/ui/sonner.js +96 -0
- package/dist/components/ui/sonner.js.map +1 -0
- package/dist/components/ui/spinner.d.ts +37 -0
- package/dist/components/ui/spinner.d.ts.map +1 -0
- package/dist/components/ui/spinner.js +51 -0
- package/dist/components/ui/spinner.js.map +1 -0
- package/dist/components/ui/stepper.d.ts +84 -0
- package/dist/components/ui/stepper.d.ts.map +1 -0
- package/dist/components/ui/stepper.js +145 -0
- package/dist/components/ui/stepper.js.map +1 -0
- package/dist/components/ui/switch.d.ts +36 -0
- package/dist/components/ui/switch.d.ts.map +1 -0
- package/dist/components/ui/switch.js +44 -0
- package/dist/components/ui/switch.js.map +1 -0
- package/dist/components/ui/table.d.ts +80 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/table.js +130 -0
- package/dist/components/ui/table.js.map +1 -0
- package/dist/components/ui/tabs.d.ts +87 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.js +128 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +35 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +38 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/time-picker.d.ts +58 -0
- package/dist/components/ui/time-picker.d.ts.map +1 -0
- package/dist/components/ui/time-picker.js +188 -0
- package/dist/components/ui/time-picker.js.map +1 -0
- package/dist/components/ui/toggle-group.d.ts +52 -0
- package/dist/components/ui/toggle-group.d.ts.map +1 -0
- package/dist/components/ui/toggle-group.js +94 -0
- package/dist/components/ui/toggle-group.js.map +1 -0
- package/dist/components/ui/toggle.d.ts +50 -0
- package/dist/components/ui/toggle.d.ts.map +1 -0
- package/dist/components/ui/toggle.js +70 -0
- package/dist/components/ui/toggle.js.map +1 -0
- package/dist/components/ui/tooltip.d.ts +51 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +78 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/hooks/use-dark-mode.d.ts +2 -0
- package/dist/hooks/use-dark-mode.d.ts.map +1 -0
- package/dist/hooks/use-dark-mode.js +36 -0
- package/dist/hooks/use-dark-mode.js.map +1 -0
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/hooks/use-mobile.js +20 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/index.d.ts +88 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -0
- package/dist/lib/scope.d.ts +64 -0
- package/dist/lib/scope.d.ts.map +1 -0
- package/dist/lib/scope.js +74 -0
- package/dist/lib/scope.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +11 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/styles.css +2 -0
- package/dist/theme-tokens.css +537 -0
- package/dist/theme.css +417 -0
- package/package.json +103 -3
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Select — single-value dropdown over a fixed, bounded option list.
|
|
3
|
+
*
|
|
4
|
+
* Built on the Radix Select primitive with MMDS token-based styling. Size
|
|
5
|
+
* variants (default/sm/xs) are layered on via a `data-size` attribute.
|
|
6
|
+
*/
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
import { Select as SelectPrimitive, Popover as PopoverPrimitive } from "radix-ui";
|
|
9
|
+
declare function Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>): React.JSX.Element;
|
|
10
|
+
declare function SelectGroup({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Group>): React.JSX.Element;
|
|
11
|
+
declare function SelectValue({ inlineLabel, children, ...props }: React.ComponentProps<typeof SelectPrimitive.Value> & {
|
|
12
|
+
/**
|
|
13
|
+
* Prefixes the value with "{inlineLabel}: " once `children` is given — e.g.
|
|
14
|
+
* inlineLabel="Assignee" + children="James" renders "Assignee: James".
|
|
15
|
+
* Only takes effect together with an explicit `children`: Select.Value
|
|
16
|
+
* otherwise auto-fills from the selected Item's own text, which this
|
|
17
|
+
* prefix can't attach to without replacing that auto-fill (Radix disables
|
|
18
|
+
* it the moment `children` is passed at all, regardless of value) — so
|
|
19
|
+
* pass the current value's own display text as `children` yourself, and
|
|
20
|
+
* leave both unset (not `children={undefined}`, which still counts as
|
|
21
|
+
* "no children" for that auto-fill) when nothing is selected.
|
|
22
|
+
*/
|
|
23
|
+
inlineLabel?: string;
|
|
24
|
+
}): React.JSX.Element;
|
|
25
|
+
declare function SelectTrigger({ className, size, children, ...props }: React.ComponentProps<typeof SelectPrimitive.Trigger> & {
|
|
26
|
+
size?: "sm" | "default" | "xs";
|
|
27
|
+
}): React.JSX.Element;
|
|
28
|
+
declare function SelectContent({ className, children, position, align, ...props }: React.ComponentProps<typeof SelectPrimitive.Content>): React.JSX.Element;
|
|
29
|
+
declare function SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>): React.JSX.Element;
|
|
30
|
+
declare function SelectItem({ className, children, ...props }: React.ComponentProps<typeof SelectPrimitive.Item>): React.JSX.Element;
|
|
31
|
+
declare function SelectSeparator({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Separator>): React.JSX.Element;
|
|
32
|
+
declare function SelectScrollUpButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>): React.JSX.Element;
|
|
33
|
+
declare function SelectScrollDownButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>): React.JSX.Element;
|
|
34
|
+
declare function SelectMultiple({ value, onValueChange, size, children, open: openProp, onOpenChange, closeOnSelect, ...props }: React.ComponentProps<typeof PopoverPrimitive.Root> & {
|
|
35
|
+
value: string[];
|
|
36
|
+
onValueChange: (value: string[]) => void;
|
|
37
|
+
size?: "sm" | "default" | "xs";
|
|
38
|
+
/** Closes the popover immediately after any pick, instead of staying open for more — for a single-effective-choice usage (cap `value` at one entry yourself) that still wants Popover's non-modal behavior (label stays visible, rest of the page stays interactive/scrollable) instead of Select's modal one. Default `false` — a real multi-select should stay open across picks, which is the whole reason this component exists over Select. */
|
|
39
|
+
closeOnSelect?: boolean;
|
|
40
|
+
}): React.JSX.Element;
|
|
41
|
+
declare function SelectMultipleTrigger({ className, placeholder, disabled, maxLabelChars, inlineLabel, ...props }: Omit<React.ComponentProps<typeof PopoverPrimitive.Trigger>, "children"> & {
|
|
42
|
+
placeholder?: React.ReactNode;
|
|
43
|
+
/** Character cap on the one label the trigger ever shows (only the first selected value — every additional selection folds into a trailing "+N", never listed by name). Applies even with a single value selected, since a lone long value can blow out the trigger just as badly as a long list would. Unset (default): that first label in full, however long. */
|
|
44
|
+
maxLabelChars?: number;
|
|
45
|
+
/** Prefixes the value with "{inlineLabel}: " once something's selected — e.g. inlineLabel="Assignee" + one pick renders "Assignee: James" instead of just "James". `placeholder` still shows alone (no prefix) while nothing is. */
|
|
46
|
+
inlineLabel?: string;
|
|
47
|
+
}): React.JSX.Element;
|
|
48
|
+
declare function SelectMultipleContent({ className, align, sideOffset, children, style, ...props }: React.ComponentProps<typeof PopoverPrimitive.Content>): React.JSX.Element;
|
|
49
|
+
/**
|
|
50
|
+
* Optional Cancel/Apply footer for `SelectMultipleContent` — pass a
|
|
51
|
+
* controlled `open` to `SelectMultiple` itself (see its own comment) and
|
|
52
|
+
* feed it a local pending draft instead of the real `value`/`onValueChange`
|
|
53
|
+
* while open, so picks only land for real once Apply commits that draft;
|
|
54
|
+
* Cancel just closes, discarding it. Renders as a sibling of the listbox,
|
|
55
|
+
* never inside it — see `SelectMultipleContent`'s own comment for why.
|
|
56
|
+
*/
|
|
57
|
+
declare function SelectMultipleFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
58
|
+
declare function SelectMultipleGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
59
|
+
declare function SelectMultipleLabel({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
60
|
+
declare function SelectMultipleItem({ className, children, value: itemValue, textValue, disabled, onClick, onKeyDown, ...props }: Omit<React.ComponentProps<"div">, "onSelect"> & {
|
|
61
|
+
value: string;
|
|
62
|
+
textValue?: string;
|
|
63
|
+
disabled?: boolean;
|
|
64
|
+
}): React.JSX.Element;
|
|
65
|
+
declare function SelectMultipleSeparator({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
66
|
+
export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SelectMultiple, SelectMultipleContent, SelectMultipleFooter, SelectMultipleGroup, SelectMultipleItem, SelectMultipleLabel, SelectMultipleSeparator, SelectMultipleTrigger, };
|
|
67
|
+
/**
|
|
68
|
+
* WHEN TO USE
|
|
69
|
+
* - Picking one value from a short, known, bounded list (settings, filters, form fields).
|
|
70
|
+
* - Options need grouping (SelectGroup + SelectLabel) or per-item disabling.
|
|
71
|
+
*
|
|
72
|
+
* NOT WHEN
|
|
73
|
+
* - The list is long enough to need type-to-filter — use Combobox instead.
|
|
74
|
+
* - Multiple values from a list that also needs search/filter — use Combobox's multi-select mode.
|
|
75
|
+
* - Native OS picker behavior (better on mobile, zero extra JS) is preferable — use NativeSelect instead.
|
|
76
|
+
*
|
|
77
|
+
* KEY RULES
|
|
78
|
+
* - SelectTrigger's `size` is "default" | "sm" | "xs" (default "default"); controls trigger
|
|
79
|
+
* height (h-8/h-7/h-6) and text size — same default/sm/xs vocabulary as Button/Item/
|
|
80
|
+
* Attachment/Tabs, not Select-specific naming.
|
|
81
|
+
* - SelectContent portals its content; `position="item-aligned"` (default) aligns to the trigger like a native select, `position="popper"` behaves like a standard popover.
|
|
82
|
+
* - Every SelectItem needs a `value`; the check indicator renders automatically for the selected item.
|
|
83
|
+
* - Put SelectSeparator between SelectGroups, not inside one.
|
|
84
|
+
* - SelectValue with no `children` auto-fills from the selected Item's own text — that's the
|
|
85
|
+
* normal, no-`inlineLabel` usage below. For "Label: Value" (e.g. "Assignee: James"), give
|
|
86
|
+
* SelectValue both `inlineLabel` and the current value's display text as `children` yourself —
|
|
87
|
+
* the auto-fill only runs with zero children, so a label prefix can't attach to it in place.
|
|
88
|
+
* - An AI-filled value is a plain composition, not a dedicated prop, and the same shape as
|
|
89
|
+
* Input's and Textarea's: put `AILabel` in the label row as a sibling of FieldLabel — never
|
|
90
|
+
* beside or inside SelectTrigger, which is itself a `<button>` (a button inside a button is
|
|
91
|
+
* invalid HTML, and would also open the listbox on every click of the marker) — while the
|
|
92
|
+
* value still matches what AI picked. Pass AILabel `edited={value !== aiValue}` and an
|
|
93
|
+
* `onRevert` that restores it, so picking a different value turns the marker into a ghost undo
|
|
94
|
+
* button (AILabel's own override/undo morph, same as Input/Textarea/Checkbox/RadioGroup). See
|
|
95
|
+
* Forms/Select.
|
|
96
|
+
*
|
|
97
|
+
* USAGE
|
|
98
|
+
* <Select>
|
|
99
|
+
* <SelectTrigger className="w-56">
|
|
100
|
+
* <SelectValue placeholder="Select a spice" />
|
|
101
|
+
* </SelectTrigger>
|
|
102
|
+
* <SelectContent>
|
|
103
|
+
* <SelectItem value="turmeric">Turmeric</SelectItem>
|
|
104
|
+
* <SelectItem value="cardamom">Cardamom</SelectItem>
|
|
105
|
+
* </SelectContent>
|
|
106
|
+
* </Select>
|
|
107
|
+
*
|
|
108
|
+
* // Inline-labeled trigger — "Spice: Turmeric" once a value is picked, plain
|
|
109
|
+
* // placeholder ("Select a spice") while nothing is
|
|
110
|
+
* <Select value={value} onValueChange={setValue}>
|
|
111
|
+
* <SelectTrigger className="w-56">
|
|
112
|
+
* <SelectValue placeholder="Select a spice" inlineLabel="Spice">
|
|
113
|
+
* {value || undefined}
|
|
114
|
+
* </SelectValue>
|
|
115
|
+
* </SelectTrigger>
|
|
116
|
+
* <SelectContent>
|
|
117
|
+
* <SelectItem value="turmeric">Turmeric</SelectItem>
|
|
118
|
+
* <SelectItem value="cardamom">Cardamom</SelectItem>
|
|
119
|
+
* </SelectContent>
|
|
120
|
+
* </Select>
|
|
121
|
+
*
|
|
122
|
+
* // Grouped, with a disabled item
|
|
123
|
+
* <Select defaultValue="cumin">
|
|
124
|
+
* <SelectTrigger className="w-56"><SelectValue placeholder="Select a spice" /></SelectTrigger>
|
|
125
|
+
* <SelectContent>
|
|
126
|
+
* <SelectGroup>
|
|
127
|
+
* <SelectLabel>Whole</SelectLabel>
|
|
128
|
+
* <SelectItem value="cardamom">Cardamom pod</SelectItem>
|
|
129
|
+
* </SelectGroup>
|
|
130
|
+
* <SelectSeparator />
|
|
131
|
+
* <SelectGroup>
|
|
132
|
+
* <SelectLabel>Ground</SelectLabel>
|
|
133
|
+
* <SelectItem value="turmeric">Turmeric</SelectItem>
|
|
134
|
+
* <SelectItem value="saffron" disabled>Saffron (out of stock)</SelectItem>
|
|
135
|
+
* </SelectGroup>
|
|
136
|
+
* </SelectContent>
|
|
137
|
+
* </Select>
|
|
138
|
+
*
|
|
139
|
+
* ---
|
|
140
|
+
*
|
|
141
|
+
* SelectMultiple — checkbox-list multi-select, no search/filter (see the
|
|
142
|
+
* doc block above SelectMultiple's definition for why this is a separate
|
|
143
|
+
* component tree rather than a `multiple` prop on Select).
|
|
144
|
+
*
|
|
145
|
+
* WHEN TO USE (SelectMultiple)
|
|
146
|
+
* - Picking several values from a short, known, bounded list where a search box
|
|
147
|
+
* would be overkill — settings toggles, tag pickers, filter panels.
|
|
148
|
+
*
|
|
149
|
+
* NOT WHEN (SelectMultiple)
|
|
150
|
+
* - The list is long enough to need type-to-filter — use Combobox's `multiple` mode instead.
|
|
151
|
+
*
|
|
152
|
+
* KEY RULES (SelectMultiple)
|
|
153
|
+
* - `value`/`onValueChange` are required and always an array — there is no uncontrolled mode.
|
|
154
|
+
* - `size` ("default" | "sm" | "xs", default "default") is set ONCE on SelectMultiple itself,
|
|
155
|
+
* not on Trigger or Content — it flows to both via context (Content is portaled, so it's
|
|
156
|
+
* never a CSS descendant of Trigger; a `group-data-[size]` selector couldn't reach it, which
|
|
157
|
+
* is why this is context-driven instead of the group/data-attribute trick Select/Tabs use).
|
|
158
|
+
* Trigger height/text and Content/Item padding/text/gap all scale together from this one prop.
|
|
159
|
+
* - The trigger shows only the first selected item's label (auto-collected from mounted
|
|
160
|
+
* SelectMultipleItems; pass `textValue` on an item if its children aren't plain text — e.g.
|
|
161
|
+
* an item with a leading icon or a secondary description line) plus "+N" once more than one
|
|
162
|
+
* is selected — never every label listed by name. Falls back to `placeholder` when empty,
|
|
163
|
+
* plus a clear-all "x" once non-empty. Pass `maxLabelChars` on SelectMultipleTrigger to
|
|
164
|
+
* ellipsis-truncate that one label past a character cap — applies even with a single value
|
|
165
|
+
* selected, since one long label can blow out a `w-fit` trigger same as a long list would
|
|
166
|
+
* (e.g. a narrow toolbar filter trigger). Pass
|
|
167
|
+
* `inlineLabel` to prefix the non-empty value with "{inlineLabel}: " (e.g. "Assignee: James") —
|
|
168
|
+
* `placeholder` alone still covers the empty state, no prefix there.
|
|
169
|
+
* - Clicking a SelectMultipleItem toggles it and leaves the popover open — this is the whole
|
|
170
|
+
* point of the variant; it never auto-closes on select the way Select/Combobox do. Pass
|
|
171
|
+
* `closeOnSelect` on SelectMultiple to close after any pick instead — for a single-effective-
|
|
172
|
+
* choice usage (cap `value` at one entry yourself) that still wants this component's non-modal
|
|
173
|
+
* Popover behavior (label stays visible while open, rest of the page stays interactive/
|
|
174
|
+
* scrollable) instead of Select's modal one. Don't reach for this as a general Select
|
|
175
|
+
* replacement — Select's native form participation, typeahead, and modality are worth keeping
|
|
176
|
+
* for ordinary form fields; this is for the specific case where a filter/action control needs
|
|
177
|
+
* to coexist non-modally with other controls the user is actively using (see DataTable's
|
|
178
|
+
* `singleSelect` inline filter for a real example). Also swaps every SelectMultipleItem's
|
|
179
|
+
* decorative indicator from a checkbox square to a radio dot — a checkbox otherwise visually
|
|
180
|
+
* promises "pick as many as you want", which is exactly wrong once picking one closes it.
|
|
181
|
+
* - SelectMultipleGroup/SelectMultipleLabel/SelectMultipleSeparator mirror Select's grouping API.
|
|
182
|
+
* - SelectMultiple forwards Radix Popover.Root's own props (`open`/`onOpenChange`/`defaultOpen`
|
|
183
|
+
* etc.) — useful for the Apply/Cancel pattern below, where something other than a plain click
|
|
184
|
+
* needs to control when the popover closes.
|
|
185
|
+
* - SelectMultipleContent/Portal use `forceMount` and hide via `data-[state=closed]:hidden` (a plain
|
|
186
|
+
* `display:none`) instead of letting Radix unmount on close — items must stay mounted while
|
|
187
|
+
* closed so their labels are already registered for the trigger's very first render, before
|
|
188
|
+
* the popover has ever been opened. `hidden` (not `invisible`) matters here specifically:
|
|
189
|
+
* `visibility:hidden` on the inner Content still lets Radix's outer popper-position wrapper
|
|
190
|
+
* div keep its layout box, which then silently intercepts clicks meant for elements behind
|
|
191
|
+
* it; `display:none` collapses that wrapper to nothing.
|
|
192
|
+
*
|
|
193
|
+
* USAGE
|
|
194
|
+
* const [value, setValue] = React.useState<string[]>(["cardamom"])
|
|
195
|
+
* <SelectMultiple value={value} onValueChange={setValue}>
|
|
196
|
+
* <SelectMultipleTrigger className="w-56" placeholder="Select spices" />
|
|
197
|
+
* <SelectMultipleContent>
|
|
198
|
+
* <SelectMultipleItem value="turmeric">Turmeric</SelectMultipleItem>
|
|
199
|
+
* <SelectMultipleItem value="cardamom">Cardamom</SelectMultipleItem>
|
|
200
|
+
* <SelectMultipleItem value="chili">Chili</SelectMultipleItem>
|
|
201
|
+
* </SelectMultipleContent>
|
|
202
|
+
* </SelectMultiple>
|
|
203
|
+
*
|
|
204
|
+
* // Dense popover — one prop scales trigger height AND item padding/text together
|
|
205
|
+
* <SelectMultiple value={value} onValueChange={setValue} size="xs">
|
|
206
|
+
* <SelectMultipleTrigger className="w-48" placeholder="Select spices" />
|
|
207
|
+
* <SelectMultipleContent>...</SelectMultipleContent>
|
|
208
|
+
* </SelectMultiple>
|
|
209
|
+
*
|
|
210
|
+
* // With an icon or a secondary description line — SelectMultipleItem's children is any
|
|
211
|
+
* // ReactNode; pass `textValue` so the trigger's comma-list still shows plain text
|
|
212
|
+
* <SelectMultipleItem value="cardamom" textValue="Cardamom">
|
|
213
|
+
* <LeafIcon />
|
|
214
|
+
* <span className="flex flex-col">
|
|
215
|
+
* Cardamom
|
|
216
|
+
* <span className="text-xs text-muted-foreground">Whole pods</span>
|
|
217
|
+
* </span>
|
|
218
|
+
* </SelectMultipleItem>
|
|
219
|
+
*
|
|
220
|
+
* // With search — filter by hiding non-matches, NOT by unmounting them: an unmounted
|
|
221
|
+
* // SelectMultipleItem unregisters its label, so a selected-but-filtered-out item would
|
|
222
|
+
* // fall back to showing its raw value in the trigger instead of its real label.
|
|
223
|
+
* const [query, setQuery] = React.useState("")
|
|
224
|
+
* <SelectMultipleContent>
|
|
225
|
+
* <Input value={query} onChange={(e) => setQuery(e.target.value)} placeholder="Search..." className="mb-1" />
|
|
226
|
+
* {spices.map((spice) => (
|
|
227
|
+
* <SelectMultipleItem
|
|
228
|
+
* key={spice}
|
|
229
|
+
* value={spice}
|
|
230
|
+
* className={cn(!spice.toLowerCase().includes(query.toLowerCase()) && "hidden")}
|
|
231
|
+
* >
|
|
232
|
+
* {spice}
|
|
233
|
+
* </SelectMultipleItem>
|
|
234
|
+
* ))}
|
|
235
|
+
* </SelectMultipleContent>
|
|
236
|
+
*
|
|
237
|
+
* // "Add option" (creatable) — the consumer already owns the list of items being mapped
|
|
238
|
+
* // over, so a no-results affordance is just appending to that list, same as any
|
|
239
|
+
* // Combobox-style creatable pattern; SelectMultiple needs no API for this.
|
|
240
|
+
* {query && !spices.some((s) => s.toLowerCase() === query.toLowerCase()) && (
|
|
241
|
+
* <button onClick={() => { setSpices((prev) => [...prev, query]); setValue((prev) => [...prev, query]) }}>
|
|
242
|
+
* Add "{query}"
|
|
243
|
+
* </button>
|
|
244
|
+
* )}
|
|
245
|
+
*
|
|
246
|
+
* // With a footer (Cancel | Apply) — stage picks in a local draft, only commit on Apply;
|
|
247
|
+
* // Cancel just closes without touching the real value. Uses the forwarded `open` prop.
|
|
248
|
+
* const [open, setOpen] = React.useState(false)
|
|
249
|
+
* const [applied, setApplied] = React.useState<string[]>([])
|
|
250
|
+
* const [draft, setDraft] = React.useState<string[]>(applied)
|
|
251
|
+
* <SelectMultiple
|
|
252
|
+
* value={draft}
|
|
253
|
+
* onValueChange={setDraft}
|
|
254
|
+
* open={open}
|
|
255
|
+
* onOpenChange={(next) => { if (next) setDraft(applied); setOpen(next) }}
|
|
256
|
+
* >
|
|
257
|
+
* <SelectMultipleTrigger className="w-56" placeholder="Select spices" />
|
|
258
|
+
* <SelectMultipleContent>
|
|
259
|
+
* {spices.map((spice) => <SelectMultipleItem key={spice} value={spice}>{spice}</SelectMultipleItem>)}
|
|
260
|
+
* <SelectMultipleSeparator />
|
|
261
|
+
* <div className="flex justify-end gap-1 p-1">
|
|
262
|
+
* <Button size="sm" variant="ghost" onClick={() => { setDraft(applied); setOpen(false) }}>Cancel</Button>
|
|
263
|
+
* <Button size="sm" onClick={() => { setApplied(draft); setOpen(false) }}>Apply</Button>
|
|
264
|
+
* </div>
|
|
265
|
+
* </SelectMultipleContent>
|
|
266
|
+
* </SelectMultiple>
|
|
267
|
+
*
|
|
268
|
+
* // "Select all" — a plain composition using the same Checkbox, no dedicated API:
|
|
269
|
+
* <Checkbox
|
|
270
|
+
* checked={value.length === 0 ? false : value.length === allValues.length ? true : "indeterminate"}
|
|
271
|
+
* onCheckedChange={(c) => setValue(c ? allValues : [])}
|
|
272
|
+
* />
|
|
273
|
+
*/
|
|
274
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/components/ui/select.tsx"],"names":[],"mappings":"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"}
|