@brijbyte/agentic-ui 0.0.1-beta → 0.0.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.
- package/README.md +808 -0
- package/dist/accordion/accordion.css +85 -0
- package/dist/accordion/accordion.d.ts +28 -0
- package/dist/accordion/accordion.d.ts.map +1 -0
- package/dist/accordion/accordion.js +51 -0
- package/dist/accordion/accordion.js.map +1 -0
- package/dist/accordion/accordion.module.css.d.ts +2 -0
- package/dist/accordion/accordion.module.js +14 -0
- package/dist/accordion/accordion.module.js.map +1 -0
- package/dist/accordion/index.d.ts +3 -0
- package/dist/accordion/index.js +4 -0
- package/dist/accordion/parts.d.ts +28 -0
- package/dist/accordion/parts.d.ts.map +1 -0
- package/dist/accordion/parts.js +55 -0
- package/dist/accordion/parts.js.map +1 -0
- package/dist/alert-dialog/alert-dialog.css +84 -0
- package/dist/alert-dialog/alert-dialog.d.ts +44 -0
- package/dist/alert-dialog/alert-dialog.d.ts.map +1 -0
- package/dist/alert-dialog/alert-dialog.js +46 -0
- package/dist/alert-dialog/alert-dialog.js.map +1 -0
- package/dist/alert-dialog/alert-dialog.module.css.d.ts +2 -0
- package/dist/alert-dialog/alert-dialog.module.js +14 -0
- package/dist/alert-dialog/alert-dialog.module.js.map +1 -0
- package/dist/alert-dialog/index.d.ts +3 -0
- package/dist/alert-dialog/index.js +4 -0
- package/dist/alert-dialog/parts.d.ts +28 -0
- package/dist/alert-dialog/parts.d.ts.map +1 -0
- package/dist/alert-dialog/parts.js +62 -0
- package/dist/alert-dialog/parts.js.map +1 -0
- package/dist/badge/badge.css +66 -0
- package/dist/badge/badge.d.ts +20 -0
- package/dist/badge/badge.d.ts.map +1 -0
- package/dist/badge/badge.js +21 -0
- package/dist/badge/badge.js.map +1 -0
- package/dist/badge/badge.module.css.d.ts +2 -0
- package/dist/badge/badge.module.js +16 -0
- package/dist/badge/badge.module.js.map +1 -0
- package/dist/badge/index.d.ts +2 -0
- package/dist/badge/index.js +3 -0
- package/dist/button/button.css +242 -0
- package/dist/button/button.d.ts +28 -0
- package/dist/button/button.d.ts.map +1 -0
- package/dist/button/button.js +34 -0
- package/dist/button/button.js.map +1 -0
- package/dist/button/button.module.css.d.ts +2 -0
- package/dist/button/button.module.js +27 -0
- package/dist/button/button.module.js.map +1 -0
- package/dist/button/index.d.ts +2 -0
- package/dist/button/index.js +3 -0
- package/dist/card/card.css +64 -0
- package/dist/card/card.d.ts +41 -0
- package/dist/card/card.d.ts.map +1 -0
- package/dist/card/card.js +50 -0
- package/dist/card/card.js.map +1 -0
- package/dist/card/card.module.css.d.ts +2 -0
- package/dist/card/card.module.js +15 -0
- package/dist/card/card.module.js.map +1 -0
- package/dist/card/index.d.ts +2 -0
- package/dist/card/index.js +3 -0
- package/dist/checkbox/checkbox.css +72 -0
- package/dist/checkbox/checkbox.d.ts +29 -0
- package/dist/checkbox/checkbox.d.ts.map +1 -0
- package/dist/checkbox/checkbox.js +40 -0
- package/dist/checkbox/checkbox.js.map +1 -0
- package/dist/checkbox/checkbox.module.css.d.ts +2 -0
- package/dist/checkbox/checkbox.module.js +11 -0
- package/dist/checkbox/checkbox.module.js.map +1 -0
- package/dist/checkbox/index.d.ts +3 -0
- package/dist/checkbox/index.js +4 -0
- package/dist/checkbox/parts.d.ts +20 -0
- package/dist/checkbox/parts.d.ts.map +1 -0
- package/dist/checkbox/parts.js +51 -0
- package/dist/checkbox/parts.js.map +1 -0
- package/dist/collapsible/collapsible.css +88 -0
- package/dist/collapsible/collapsible.d.ts +24 -0
- package/dist/collapsible/collapsible.d.ts.map +1 -0
- package/dist/collapsible/collapsible.js +44 -0
- package/dist/collapsible/collapsible.js.map +1 -0
- package/dist/collapsible/collapsible.module.css.d.ts +2 -0
- package/dist/collapsible/collapsible.module.js +12 -0
- package/dist/collapsible/collapsible.module.js.map +1 -0
- package/dist/collapsible/index.d.ts +3 -0
- package/dist/collapsible/index.js +4 -0
- package/dist/collapsible/parts.d.ts +23 -0
- package/dist/collapsible/parts.d.ts.map +1 -0
- package/dist/collapsible/parts.js +44 -0
- package/dist/collapsible/parts.js.map +1 -0
- package/dist/context-menu/context-menu.css +151 -0
- package/dist/context-menu/context-menu.d.ts +36 -0
- package/dist/context-menu/context-menu.d.ts.map +1 -0
- package/dist/context-menu/context-menu.js +54 -0
- package/dist/context-menu/context-menu.js.map +1 -0
- package/dist/context-menu/context-menu.module.css.d.ts +2 -0
- package/dist/context-menu/context-menu.module.js +18 -0
- package/dist/context-menu/context-menu.module.js.map +1 -0
- package/dist/context-menu/index.d.ts +3 -0
- package/dist/context-menu/index.js +4 -0
- package/dist/context-menu/parts.d.ts +38 -0
- package/dist/context-menu/parts.d.ts.map +1 -0
- package/dist/context-menu/parts.js +91 -0
- package/dist/context-menu/parts.js.map +1 -0
- package/dist/dialog/dialog.css +125 -0
- package/dist/dialog/dialog.d.ts +40 -0
- package/dist/dialog/dialog.d.ts.map +1 -0
- package/dist/dialog/dialog.js +57 -0
- package/dist/dialog/dialog.js.map +1 -0
- package/dist/dialog/dialog.module.css.d.ts +2 -0
- package/dist/dialog/dialog.module.js +17 -0
- package/dist/dialog/dialog.module.js.map +1 -0
- package/dist/dialog/index.d.ts +3 -0
- package/dist/dialog/index.js +4 -0
- package/dist/dialog/parts.d.ts +38 -0
- package/dist/dialog/parts.d.ts.map +1 -0
- package/dist/dialog/parts.js +75 -0
- package/dist/dialog/parts.js.map +1 -0
- package/dist/drawer/drawer.css +253 -0
- package/dist/drawer/drawer.d.ts +38 -0
- package/dist/drawer/drawer.d.ts.map +1 -0
- package/dist/drawer/drawer.js +87 -0
- package/dist/drawer/drawer.js.map +1 -0
- package/dist/drawer/drawer.module.css.d.ts +2 -0
- package/dist/drawer/drawer.module.js +20 -0
- package/dist/drawer/drawer.module.js.map +1 -0
- package/dist/drawer/index.d.ts +3 -0
- package/dist/drawer/index.js +4 -0
- package/dist/drawer/parts.d.ts +58 -0
- package/dist/drawer/parts.d.ts.map +1 -0
- package/dist/drawer/parts.js +107 -0
- package/dist/drawer/parts.js.map +1 -0
- package/dist/index.css +2701 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.js +62 -0
- package/dist/input/index.d.ts +2 -0
- package/dist/input/index.js +3 -0
- package/dist/input/input.css +103 -0
- package/dist/input/input.d.ts +17 -0
- package/dist/input/input.d.ts.map +1 -0
- package/dist/input/input.js +37 -0
- package/dist/input/input.js.map +1 -0
- package/dist/input/input.module.css.d.ts +2 -0
- package/dist/input/input.module.js +18 -0
- package/dist/input/input.module.js.map +1 -0
- package/dist/layer-order.css +22 -0
- package/dist/menu/index.d.ts +4 -0
- package/dist/menu/index.js +5 -0
- package/dist/menu/menu.css +154 -0
- package/dist/menu/menu.d.ts +50 -0
- package/dist/menu/menu.d.ts.map +1 -0
- package/dist/menu/menu.js +69 -0
- package/dist/menu/menu.js.map +1 -0
- package/dist/menu/menu.module.css.d.ts +2 -0
- package/dist/menu/menu.module.js +19 -0
- package/dist/menu/menu.module.js.map +1 -0
- package/dist/menu/menuitemshortcut.d.ts +9 -0
- package/dist/menu/menuitemshortcut.d.ts.map +1 -0
- package/dist/menu/menuitemshortcut.js +15 -0
- package/dist/menu/menuitemshortcut.js.map +1 -0
- package/dist/menu/parts.d.ts +39 -0
- package/dist/menu/parts.d.ts.map +1 -0
- package/dist/menu/parts.js +76 -0
- package/dist/menu/parts.js.map +1 -0
- package/dist/number-field/index.d.ts +3 -0
- package/dist/number-field/index.js +4 -0
- package/dist/number-field/number-field.css +111 -0
- package/dist/number-field/number-field.d.ts +31 -0
- package/dist/number-field/number-field.d.ts.map +1 -0
- package/dist/number-field/number-field.js +78 -0
- package/dist/number-field/number-field.js.map +1 -0
- package/dist/number-field/number-field.module.css.d.ts +2 -0
- package/dist/number-field/number-field.module.js +16 -0
- package/dist/number-field/number-field.module.js.map +1 -0
- package/dist/number-field/parts.d.ts +38 -0
- package/dist/number-field/parts.d.ts.map +1 -0
- package/dist/number-field/parts.js +74 -0
- package/dist/number-field/parts.js.map +1 -0
- package/dist/progress/index.d.ts +3 -0
- package/dist/progress/index.js +4 -0
- package/dist/progress/parts.d.ts +20 -0
- package/dist/progress/parts.d.ts.map +1 -0
- package/dist/progress/parts.js +42 -0
- package/dist/progress/parts.js.map +1 -0
- package/dist/progress/progress.css +71 -0
- package/dist/progress/progress.d.ts +27 -0
- package/dist/progress/progress.d.ts.map +1 -0
- package/dist/progress/progress.js +27 -0
- package/dist/progress/progress.js.map +1 -0
- package/dist/progress/progress.module.css.d.ts +2 -0
- package/dist/progress/progress.module.js +19 -0
- package/dist/progress/progress.module.js.map +1 -0
- package/dist/reset.css +91 -0
- package/dist/select/index.d.ts +3 -0
- package/dist/select/index.js +4 -0
- package/dist/select/parts.d.ts +65 -0
- package/dist/select/parts.d.ts.map +1 -0
- package/dist/select/parts.js +134 -0
- package/dist/select/parts.js.map +1 -0
- package/dist/select/select.css +157 -0
- package/dist/select/select.d.ts +41 -0
- package/dist/select/select.d.ts.map +1 -0
- package/dist/select/select.js +89 -0
- package/dist/select/select.js.map +1 -0
- package/dist/select/select.module.css.d.ts +2 -0
- package/dist/select/select.module.js +17 -0
- package/dist/select/select.module.js.map +1 -0
- package/dist/separator/index.d.ts +2 -0
- package/dist/separator/index.js +3 -0
- package/dist/separator/separator.css +16 -0
- package/dist/separator/separator.d.ts +16 -0
- package/dist/separator/separator.d.ts.map +1 -0
- package/dist/separator/separator.js +17 -0
- package/dist/separator/separator.js.map +1 -0
- package/dist/separator/separator.module.css.d.ts +2 -0
- package/dist/separator/separator.module.js +6 -0
- package/dist/separator/separator.module.js.map +1 -0
- package/dist/slider/index.d.ts +3 -0
- package/dist/slider/index.js +4 -0
- package/dist/slider/parts.d.ts +38 -0
- package/dist/slider/parts.d.ts.map +1 -0
- package/dist/slider/parts.js +69 -0
- package/dist/slider/parts.js.map +1 -0
- package/dist/slider/slider.css +97 -0
- package/dist/slider/slider.d.ts +38 -0
- package/dist/slider/slider.d.ts.map +1 -0
- package/dist/slider/slider.js +41 -0
- package/dist/slider/slider.js.map +1 -0
- package/dist/slider/slider.module.css.d.ts +2 -0
- package/dist/slider/slider.module.js +15 -0
- package/dist/slider/slider.module.js.map +1 -0
- package/dist/styles/reset.css +69 -0
- package/dist/styles/tokens.css +276 -0
- package/dist/switch/index.d.ts +3 -0
- package/dist/switch/index.js +4 -0
- package/dist/switch/parts.d.ts +18 -0
- package/dist/switch/parts.d.ts.map +1 -0
- package/dist/switch/parts.js +39 -0
- package/dist/switch/parts.js.map +1 -0
- package/dist/switch/switch.css +64 -0
- package/dist/switch/switch.d.ts +28 -0
- package/dist/switch/switch.d.ts.map +1 -0
- package/dist/switch/switch.js +26 -0
- package/dist/switch/switch.js.map +1 -0
- package/dist/switch/switch.module.css.d.ts +2 -0
- package/dist/switch/switch.module.js +11 -0
- package/dist/switch/switch.module.js.map +1 -0
- package/dist/tabs/index.d.ts +3 -0
- package/dist/tabs/index.js +4 -0
- package/dist/tabs/parts.d.ts +23 -0
- package/dist/tabs/parts.d.ts.map +1 -0
- package/dist/tabs/parts.js +48 -0
- package/dist/tabs/parts.js.map +1 -0
- package/dist/tabs/tabs.css +86 -0
- package/dist/tabs/tabs.d.ts +28 -0
- package/dist/tabs/tabs.d.ts.map +1 -0
- package/dist/tabs/tabs.js +30 -0
- package/dist/tabs/tabs.js.map +1 -0
- package/dist/tabs/tabs.module.css.d.ts +2 -0
- package/dist/tabs/tabs.module.js +11 -0
- package/dist/tabs/tabs.module.js.map +1 -0
- package/dist/tailwind-theme.css +142 -0
- package/dist/toast/index.d.ts +3 -0
- package/dist/toast/index.js +4 -0
- package/dist/toast/parts.d.ts +33 -0
- package/dist/toast/parts.d.ts.map +1 -0
- package/dist/toast/parts.js +62 -0
- package/dist/toast/parts.js.map +1 -0
- package/dist/toast/toast.css +207 -0
- package/dist/toast/toast.d.ts +43 -0
- package/dist/toast/toast.d.ts.map +1 -0
- package/dist/toast/toast.js +156 -0
- package/dist/toast/toast.js.map +1 -0
- package/dist/toast/toast.module.css.d.ts +2 -0
- package/dist/toast/toast.module.js +25 -0
- package/dist/toast/toast.module.js.map +1 -0
- package/dist/tokens.css +404 -0
- package/dist/tooltip/index.d.ts +3 -0
- package/dist/tooltip/index.js +4 -0
- package/dist/tooltip/parts.d.ts +23 -0
- package/dist/tooltip/parts.d.ts.map +1 -0
- package/dist/tooltip/parts.js +53 -0
- package/dist/tooltip/parts.js.map +1 -0
- package/dist/tooltip/tooltip.css +60 -0
- package/dist/tooltip/tooltip.d.ts +22 -0
- package/dist/tooltip/tooltip.d.ts.map +1 -0
- package/dist/tooltip/tooltip.js +23 -0
- package/dist/tooltip/tooltip.js.map +1 -0
- package/dist/tooltip/tooltip.module.css.d.ts +2 -0
- package/dist/tooltip/tooltip.module.js +10 -0
- package/dist/tooltip/tooltip.module.js.map +1 -0
- package/package.json +153 -4
- package/src/accordion/accordion.module.css +75 -0
- package/src/accordion/accordion.tsx +50 -0
- package/src/accordion/index.ts +6 -0
- package/src/accordion/parts.tsx +68 -0
- package/src/alert-dialog/alert-dialog.module.css +91 -0
- package/src/alert-dialog/alert-dialog.tsx +69 -0
- package/src/alert-dialog/index.ts +7 -0
- package/src/alert-dialog/parts.tsx +73 -0
- package/src/badge/badge.module.css +60 -0
- package/src/badge/badge.tsx +19 -0
- package/src/badge/index.ts +3 -0
- package/src/button/button.module.css +229 -0
- package/src/button/button.tsx +67 -0
- package/src/button/index.ts +3 -0
- package/src/card/card.module.css +56 -0
- package/src/card/card.tsx +54 -0
- package/src/card/index.ts +3 -0
- package/src/checkbox/checkbox.module.css +69 -0
- package/src/checkbox/checkbox.tsx +38 -0
- package/src/checkbox/index.ts +6 -0
- package/src/checkbox/parts.tsx +54 -0
- package/src/collapsible/collapsible.module.css +81 -0
- package/src/collapsible/collapsible.tsx +38 -0
- package/src/collapsible/index.ts +6 -0
- package/src/collapsible/parts.tsx +52 -0
- package/src/context-menu/context-menu.module.css +168 -0
- package/src/context-menu/context-menu.tsx +75 -0
- package/src/context-menu/index.ts +21 -0
- package/src/context-menu/parts.tsx +99 -0
- package/src/css.d.ts +8 -0
- package/src/dialog/dialog.module.css +116 -0
- package/src/dialog/dialog.tsx +73 -0
- package/src/dialog/index.ts +13 -0
- package/src/dialog/parts.tsx +96 -0
- package/src/drawer/drawer.module.css +240 -0
- package/src/drawer/drawer.tsx +96 -0
- package/src/drawer/index.ts +24 -0
- package/src/drawer/parts.tsx +122 -0
- package/src/index.ts +237 -0
- package/src/input/index.ts +3 -0
- package/src/input/input.module.css +93 -0
- package/src/input/input.tsx +39 -0
- package/src/menu/index.ts +7 -0
- package/src/menu/menu.module.css +142 -0
- package/src/menu/menu.tsx +108 -0
- package/src/menu/menuitemshortcut.tsx +9 -0
- package/src/menu/parts.tsx +90 -0
- package/src/number-field/index.ts +20 -0
- package/src/number-field/number-field.module.css +98 -0
- package/src/number-field/number-field.tsx +75 -0
- package/src/number-field/parts.tsx +91 -0
- package/src/progress/index.ts +6 -0
- package/src/progress/parts.tsx +51 -0
- package/src/progress/progress.module.css +61 -0
- package/src/progress/progress.tsx +42 -0
- package/src/select/index.ts +30 -0
- package/src/select/parts.tsx +171 -0
- package/src/select/select.module.css +146 -0
- package/src/select/select.tsx +98 -0
- package/src/separator/index.ts +3 -0
- package/src/separator/separator.module.css +14 -0
- package/src/separator/separator.tsx +20 -0
- package/src/slider/index.ts +14 -0
- package/src/slider/parts.tsx +90 -0
- package/src/slider/slider.module.css +110 -0
- package/src/slider/slider.tsx +68 -0
- package/src/styles/layer-order.css +22 -0
- package/src/styles/reset.css +91 -0
- package/src/styles/tailwind-theme.css +142 -0
- package/src/styles/tokens.css +404 -0
- package/src/switch/index.ts +6 -0
- package/src/switch/parts.tsx +44 -0
- package/src/switch/switch.module.css +57 -0
- package/src/switch/switch.tsx +33 -0
- package/src/tabs/index.ts +6 -0
- package/src/tabs/parts.tsx +48 -0
- package/src/tabs/tabs.module.css +79 -0
- package/src/tabs/tabs.tsx +48 -0
- package/src/toast/index.ts +6 -0
- package/src/toast/parts.tsx +76 -0
- package/src/toast/toast.module.css +212 -0
- package/src/toast/toast.tsx +129 -0
- package/src/tooltip/index.ts +6 -0
- package/src/tooltip/parts.tsx +62 -0
- package/src/tooltip/tooltip.module.css +56 -0
- package/src/tooltip/tooltip.tsx +30 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Styled primitives for Select.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```tsx
|
|
6
|
+
* import { Select } from '@base-ui/react/select';
|
|
7
|
+
* import {
|
|
8
|
+
* SelectTrigger, SelectValue, SelectPositioner,
|
|
9
|
+
* SelectPopup, SelectList, SelectItem, SelectItemText,
|
|
10
|
+
* SelectItemIndicator, SelectGroupLabel, SelectSeparator,
|
|
11
|
+
* } from '@brijbyte/agentic-ui/select';
|
|
12
|
+
*
|
|
13
|
+
* <Select.Root>
|
|
14
|
+
* <SelectTrigger>
|
|
15
|
+
* <SelectValue placeholder="Pick one…" />
|
|
16
|
+
* </SelectTrigger>
|
|
17
|
+
* <Select.Portal>
|
|
18
|
+
* <SelectPositioner>
|
|
19
|
+
* <SelectPopup>
|
|
20
|
+
* <SelectList>
|
|
21
|
+
* <SelectItem value="a">
|
|
22
|
+
* <SelectItemText>Option A</SelectItemText>
|
|
23
|
+
* <SelectItemIndicator />
|
|
24
|
+
* </SelectItem>
|
|
25
|
+
* </SelectList>
|
|
26
|
+
* </SelectPopup>
|
|
27
|
+
* </SelectPositioner>
|
|
28
|
+
* </Select.Portal>
|
|
29
|
+
* </Select.Root>
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
import { forwardRef } from "react";
|
|
33
|
+
import type { ComponentRef, ComponentPropsWithoutRef, ReactNode } from "react";
|
|
34
|
+
import { Select as BaseSelect } from "@base-ui/react/select";
|
|
35
|
+
import styles from "./select.module.css";
|
|
36
|
+
|
|
37
|
+
type BaseTriggerProps = ComponentPropsWithoutRef<typeof BaseSelect.Trigger>;
|
|
38
|
+
type BaseValueProps = ComponentPropsWithoutRef<typeof BaseSelect.Value>;
|
|
39
|
+
type BasePositionerProps = ComponentPropsWithoutRef<typeof BaseSelect.Positioner>;
|
|
40
|
+
type BasePopupProps = ComponentPropsWithoutRef<typeof BaseSelect.Popup>;
|
|
41
|
+
type BaseListProps = ComponentPropsWithoutRef<typeof BaseSelect.List>;
|
|
42
|
+
type BaseItemProps = ComponentPropsWithoutRef<typeof BaseSelect.Item>;
|
|
43
|
+
type BaseItemTextProps = ComponentPropsWithoutRef<typeof BaseSelect.ItemText>;
|
|
44
|
+
type BaseItemIndicatorProps = ComponentPropsWithoutRef<typeof BaseSelect.ItemIndicator>;
|
|
45
|
+
type BaseGroupProps = ComponentPropsWithoutRef<typeof BaseSelect.Group>;
|
|
46
|
+
type BaseGroupLabelProps = ComponentPropsWithoutRef<typeof BaseSelect.GroupLabel>;
|
|
47
|
+
type BaseSeparatorProps = ComponentPropsWithoutRef<typeof BaseSelect.Separator>;
|
|
48
|
+
|
|
49
|
+
export interface SelectTriggerProps extends Omit<BaseTriggerProps, "className"> {
|
|
50
|
+
className?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface SelectValueProps extends Omit<BaseValueProps, "className"> {
|
|
53
|
+
className?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface SelectPositionerProps extends Omit<BasePositionerProps, "className"> {
|
|
56
|
+
className?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface SelectPopupProps extends Omit<BasePopupProps, "className"> {
|
|
59
|
+
className?: string;
|
|
60
|
+
}
|
|
61
|
+
export interface SelectListProps extends Omit<BaseListProps, "className"> {
|
|
62
|
+
className?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface SelectItemProps extends Omit<BaseItemProps, "className"> {
|
|
65
|
+
className?: string;
|
|
66
|
+
}
|
|
67
|
+
export interface SelectItemTextProps extends Omit<BaseItemTextProps, "className"> {
|
|
68
|
+
className?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface SelectItemIndicatorProps extends Omit<BaseItemIndicatorProps, "className"> {
|
|
71
|
+
className?: string;
|
|
72
|
+
/** Custom icon. Defaults to a checkmark SVG. */
|
|
73
|
+
children?: ReactNode;
|
|
74
|
+
}
|
|
75
|
+
export interface SelectGroupProps extends Omit<BaseGroupProps, "className"> {
|
|
76
|
+
className?: string;
|
|
77
|
+
}
|
|
78
|
+
export interface SelectGroupLabelProps extends Omit<BaseGroupLabelProps, "className"> {
|
|
79
|
+
className?: string;
|
|
80
|
+
}
|
|
81
|
+
export interface SelectSeparatorProps extends Omit<BaseSeparatorProps, "className"> {
|
|
82
|
+
className?: string;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function DefaultCheckIcon() {
|
|
86
|
+
return (
|
|
87
|
+
<svg width="12" height="12" viewBox="0 0 12 12" fill="none">
|
|
88
|
+
<path d="M2 6L4.5 8.5L10 3" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
|
|
89
|
+
</svg>
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export const SelectTrigger = forwardRef<ComponentRef<typeof BaseSelect.Trigger>, SelectTriggerProps>(function SelectTrigger(
|
|
94
|
+
{ className, ...props },
|
|
95
|
+
ref,
|
|
96
|
+
) {
|
|
97
|
+
return <BaseSelect.Trigger ref={ref} className={`${styles.trigger} ${className ?? ""}`} {...props} />;
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
export const SelectValue = forwardRef<ComponentRef<typeof BaseSelect.Value>, SelectValueProps>(function SelectValue(
|
|
101
|
+
{ className, ...props },
|
|
102
|
+
ref,
|
|
103
|
+
) {
|
|
104
|
+
return <BaseSelect.Value ref={ref} className={`${styles["trigger-value"]} ${className ?? ""}`} {...props} />;
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
export const SelectPositioner = forwardRef<ComponentRef<typeof BaseSelect.Positioner>, SelectPositionerProps>(function SelectPositioner(
|
|
108
|
+
{ className, sideOffset = 4, ...props },
|
|
109
|
+
ref,
|
|
110
|
+
) {
|
|
111
|
+
return <BaseSelect.Positioner ref={ref} className={`${styles.positioner} ${className ?? ""}`} sideOffset={sideOffset} {...props} />;
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
export const SelectPopup = forwardRef<ComponentRef<typeof BaseSelect.Popup>, SelectPopupProps>(function SelectPopup(
|
|
115
|
+
{ className, ...props },
|
|
116
|
+
ref,
|
|
117
|
+
) {
|
|
118
|
+
return <BaseSelect.Popup ref={ref} className={`${styles.popup} ${className ?? ""}`} {...props} />;
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
export const SelectList = forwardRef<ComponentRef<typeof BaseSelect.List>, SelectListProps>(function SelectList(
|
|
122
|
+
{ className, ...props },
|
|
123
|
+
ref,
|
|
124
|
+
) {
|
|
125
|
+
return <BaseSelect.List ref={ref} className={`${styles.list ?? ""} ${className ?? ""}`} {...props} />;
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
export const SelectItem = forwardRef<ComponentRef<typeof BaseSelect.Item>, SelectItemProps>(function SelectItem(
|
|
129
|
+
{ className, ...props },
|
|
130
|
+
ref,
|
|
131
|
+
) {
|
|
132
|
+
return <BaseSelect.Item ref={ref} className={`${styles.item} ${className ?? ""}`} {...props} />;
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
export const SelectItemText = forwardRef<ComponentRef<typeof BaseSelect.ItemText>, SelectItemTextProps>(function SelectItemText(
|
|
136
|
+
{ className, ...props },
|
|
137
|
+
ref,
|
|
138
|
+
) {
|
|
139
|
+
return <BaseSelect.ItemText ref={ref} className={className} {...props} />;
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
export const SelectItemIndicator = forwardRef<ComponentRef<typeof BaseSelect.ItemIndicator>, SelectItemIndicatorProps>(
|
|
143
|
+
function SelectItemIndicator({ className, children, ...props }, ref) {
|
|
144
|
+
return (
|
|
145
|
+
<BaseSelect.ItemIndicator ref={ref} className={`${styles["item-indicator"]} ${className ?? ""}`} {...props}>
|
|
146
|
+
{children ?? <DefaultCheckIcon />}
|
|
147
|
+
</BaseSelect.ItemIndicator>
|
|
148
|
+
);
|
|
149
|
+
},
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
export const SelectGroup = forwardRef<ComponentRef<typeof BaseSelect.Group>, SelectGroupProps>(function SelectGroup(
|
|
153
|
+
{ className, ...props },
|
|
154
|
+
ref,
|
|
155
|
+
) {
|
|
156
|
+
return <BaseSelect.Group ref={ref} className={className} {...props} />;
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
export const SelectGroupLabel = forwardRef<ComponentRef<typeof BaseSelect.GroupLabel>, SelectGroupLabelProps>(function SelectGroupLabel(
|
|
160
|
+
{ className, ...props },
|
|
161
|
+
ref,
|
|
162
|
+
) {
|
|
163
|
+
return <BaseSelect.GroupLabel ref={ref} className={`${styles["group-label"]} ${className ?? ""}`} {...props} />;
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
export const SelectSeparator = forwardRef<ComponentRef<typeof BaseSelect.Separator>, SelectSeparatorProps>(function SelectSeparator(
|
|
167
|
+
{ className, ...props },
|
|
168
|
+
ref,
|
|
169
|
+
) {
|
|
170
|
+
return <BaseSelect.Separator ref={ref} className={`${styles.separator} ${className ?? ""}`} {...props} />;
|
|
171
|
+
});
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.trigger {
|
|
3
|
+
display: inline-flex;
|
|
4
|
+
align-items: center;
|
|
5
|
+
justify-content: space-between;
|
|
6
|
+
gap: var(--space-2);
|
|
7
|
+
width: 100%;
|
|
8
|
+
font-family: var(--font-mono);
|
|
9
|
+
font-size: var(--font-size-sm);
|
|
10
|
+
color: var(--color-primary);
|
|
11
|
+
background-color: var(--color-surface-1);
|
|
12
|
+
border: var(--border-width-base) solid var(--color-line);
|
|
13
|
+
border-radius: var(--radius-md);
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
outline: none;
|
|
16
|
+
transition:
|
|
17
|
+
border-color var(--duration-fast) var(--easing-standard),
|
|
18
|
+
box-shadow var(--duration-fast) var(--easing-standard);
|
|
19
|
+
appearance: none;
|
|
20
|
+
-webkit-appearance: none;
|
|
21
|
+
height: 30px;
|
|
22
|
+
padding-inline: var(--space-2-5);
|
|
23
|
+
text-align: left;
|
|
24
|
+
white-space: nowrap;
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
text-overflow: ellipsis;
|
|
27
|
+
}
|
|
28
|
+
.trigger:hover:not([data-disabled]) {
|
|
29
|
+
border-color: var(--color-line-strong);
|
|
30
|
+
}
|
|
31
|
+
.trigger:focus-visible {
|
|
32
|
+
border-color: var(--color-accent);
|
|
33
|
+
box-shadow: var(--shadow-focus);
|
|
34
|
+
}
|
|
35
|
+
.trigger[data-disabled] {
|
|
36
|
+
opacity: 0.44;
|
|
37
|
+
cursor: not-allowed;
|
|
38
|
+
}
|
|
39
|
+
.trigger-value {
|
|
40
|
+
flex: 1;
|
|
41
|
+
overflow: hidden;
|
|
42
|
+
text-overflow: ellipsis;
|
|
43
|
+
}
|
|
44
|
+
.trigger-icon {
|
|
45
|
+
flex-shrink: 0;
|
|
46
|
+
color: var(--color-tertiary);
|
|
47
|
+
transition: transform var(--duration-normal) var(--easing-standard);
|
|
48
|
+
}
|
|
49
|
+
.trigger[data-popup-open] .trigger-icon {
|
|
50
|
+
transform: rotate(180deg);
|
|
51
|
+
}
|
|
52
|
+
/* ─── Popup / Listbox ───────────────────────────────── */
|
|
53
|
+
.positioner {
|
|
54
|
+
z-index: var(--z-dropdown);
|
|
55
|
+
}
|
|
56
|
+
.popup {
|
|
57
|
+
background-color: var(--color-overlay);
|
|
58
|
+
border: var(--border-width-base) solid var(--color-line);
|
|
59
|
+
border-radius: var(--radius-lg);
|
|
60
|
+
box-shadow: var(--shadow-popover);
|
|
61
|
+
padding: var(--space-1);
|
|
62
|
+
min-width: var(--anchor-width);
|
|
63
|
+
max-width: var(--available-width);
|
|
64
|
+
width: fit-content;
|
|
65
|
+
max-height: 280px;
|
|
66
|
+
overflow-y: auto;
|
|
67
|
+
outline: none;
|
|
68
|
+
transform-origin: var(--transform-origin);
|
|
69
|
+
transition:
|
|
70
|
+
opacity 150ms var(--easing-ease-out),
|
|
71
|
+
transform 150ms var(--easing-ease-out);
|
|
72
|
+
}
|
|
73
|
+
.popup[data-starting-style] {
|
|
74
|
+
opacity: 0;
|
|
75
|
+
transform: scale(0.95);
|
|
76
|
+
}
|
|
77
|
+
.popup[data-ending-style] {
|
|
78
|
+
opacity: 0;
|
|
79
|
+
transform: scale(0.98);
|
|
80
|
+
transition:
|
|
81
|
+
opacity 75ms var(--easing-ease-in),
|
|
82
|
+
transform 75ms var(--easing-ease-in);
|
|
83
|
+
}
|
|
84
|
+
/* Backdrop blur for macOS feel */
|
|
85
|
+
@supports (backdrop-filter: blur(12px)) {
|
|
86
|
+
.popup {
|
|
87
|
+
backdrop-filter: blur(12px) saturate(1.5);
|
|
88
|
+
-webkit-backdrop-filter: blur(12px) saturate(1.5);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
.item {
|
|
92
|
+
display: flex;
|
|
93
|
+
align-items: center;
|
|
94
|
+
gap: var(--space-2);
|
|
95
|
+
padding: var(--space-1-5) var(--space-2-5);
|
|
96
|
+
font-family: var(--font-mono);
|
|
97
|
+
font-size: var(--font-size-sm);
|
|
98
|
+
color: var(--color-primary);
|
|
99
|
+
border-radius: var(--radius-sm);
|
|
100
|
+
cursor: default;
|
|
101
|
+
outline: none;
|
|
102
|
+
transition: background-color var(--duration-fast) var(--easing-standard);
|
|
103
|
+
user-select: none;
|
|
104
|
+
}
|
|
105
|
+
.item:hover,
|
|
106
|
+
.item[data-highlighted] {
|
|
107
|
+
background-color: var(--color-accent);
|
|
108
|
+
color: var(--color-on-accent);
|
|
109
|
+
}
|
|
110
|
+
.item[data-selected] {
|
|
111
|
+
font-weight: var(--font-weight-medium);
|
|
112
|
+
}
|
|
113
|
+
.item[data-disabled] {
|
|
114
|
+
opacity: 0.44;
|
|
115
|
+
cursor: not-allowed;
|
|
116
|
+
}
|
|
117
|
+
.item-indicator {
|
|
118
|
+
margin-left: auto;
|
|
119
|
+
color: var(--color-accent);
|
|
120
|
+
display: flex;
|
|
121
|
+
align-items: center;
|
|
122
|
+
}
|
|
123
|
+
.item:hover .item-indicator,
|
|
124
|
+
.item[data-highlighted] .item-indicator {
|
|
125
|
+
color: var(--color-on-accent);
|
|
126
|
+
}
|
|
127
|
+
.group-label {
|
|
128
|
+
padding: var(--space-1) var(--space-2-5);
|
|
129
|
+
font-size: var(--font-size-xs);
|
|
130
|
+
font-weight: var(--font-weight-semibold);
|
|
131
|
+
color: var(--color-tertiary);
|
|
132
|
+
letter-spacing: var(--letter-spacing-wider);
|
|
133
|
+
text-transform: uppercase;
|
|
134
|
+
}
|
|
135
|
+
.separator {
|
|
136
|
+
height: var(--border-width-base);
|
|
137
|
+
background-color: var(--color-line-subtle);
|
|
138
|
+
margin: var(--space-1) 0;
|
|
139
|
+
}
|
|
140
|
+
/* List container — wraps items inside the popup */
|
|
141
|
+
.list {
|
|
142
|
+
display: flex;
|
|
143
|
+
flex-direction: column;
|
|
144
|
+
gap: 0;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { useMemo, type ReactNode } from "react";
|
|
2
|
+
import { Select as BaseSelect } from "@base-ui/react/select";
|
|
3
|
+
import styles from "./select.module.css";
|
|
4
|
+
|
|
5
|
+
export interface SelectOption {
|
|
6
|
+
value: string;
|
|
7
|
+
label: ReactNode;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface SelectGroup {
|
|
12
|
+
label?: ReactNode;
|
|
13
|
+
options: SelectOption[];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface SelectProps {
|
|
17
|
+
value?: string;
|
|
18
|
+
defaultValue?: string;
|
|
19
|
+
/** `eventDetails` is the base-ui event details object. Value may be null when cleared. */
|
|
20
|
+
onValueChange?: (value: string | null, eventDetails: unknown) => void;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
required?: boolean;
|
|
23
|
+
name?: string;
|
|
24
|
+
placeholder?: string;
|
|
25
|
+
options?: SelectOption[];
|
|
26
|
+
groups?: SelectGroup[];
|
|
27
|
+
className?: string;
|
|
28
|
+
id?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function ChevronIcon() {
|
|
32
|
+
return (
|
|
33
|
+
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
34
|
+
<path d="M2.5 4.5L6 8L9.5 4.5" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
|
|
35
|
+
</svg>
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function CheckIcon() {
|
|
40
|
+
return (
|
|
41
|
+
<svg width="12" height="12" viewBox="0 0 12 12" fill="none">
|
|
42
|
+
<path d="M2 6L4.5 8.5L10 3" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
|
|
43
|
+
</svg>
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function SelectItem({ option }: { option: SelectOption }) {
|
|
48
|
+
return (
|
|
49
|
+
<BaseSelect.Item className={styles.item} value={option.value} disabled={option.disabled}>
|
|
50
|
+
<BaseSelect.ItemText>{option.label}</BaseSelect.ItemText>
|
|
51
|
+
<BaseSelect.ItemIndicator className={styles["item-indicator"]}>
|
|
52
|
+
<CheckIcon />
|
|
53
|
+
</BaseSelect.ItemIndicator>
|
|
54
|
+
</BaseSelect.Item>
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function Select({ placeholder = "Select…", options, groups, className, onValueChange, value, defaultValue, ...props }: SelectProps) {
|
|
59
|
+
const allOptions = useMemo(() => [...(options ?? []), ...(groups?.flatMap((g) => g.options) ?? [])], [options, groups]);
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<BaseSelect.Root onValueChange={onValueChange as never} value={value} defaultValue={defaultValue} {...props}>
|
|
63
|
+
<BaseSelect.Trigger className={`${styles.trigger} ${className ?? ""}`}>
|
|
64
|
+
<BaseSelect.Value className={styles["trigger-value"]} placeholder={placeholder}>
|
|
65
|
+
{(currentValue: string | null) => {
|
|
66
|
+
if (!currentValue) return placeholder;
|
|
67
|
+
const match = allOptions.find((o) => o.value === currentValue);
|
|
68
|
+
return match ? match.label : currentValue;
|
|
69
|
+
}}
|
|
70
|
+
</BaseSelect.Value>
|
|
71
|
+
<span className={styles["trigger-icon"]}>
|
|
72
|
+
<ChevronIcon />
|
|
73
|
+
</span>
|
|
74
|
+
</BaseSelect.Trigger>
|
|
75
|
+
<BaseSelect.Portal>
|
|
76
|
+
<BaseSelect.Positioner className={styles.positioner} sideOffset={4}>
|
|
77
|
+
<BaseSelect.Popup className={styles.popup}>
|
|
78
|
+
<BaseSelect.List>
|
|
79
|
+
{options?.map((opt) => (
|
|
80
|
+
<SelectItem key={opt.value} option={opt} />
|
|
81
|
+
))}
|
|
82
|
+
{groups?.map((group, i) => (
|
|
83
|
+
<BaseSelect.Group key={i}>
|
|
84
|
+
{group.label && <BaseSelect.GroupLabel className={styles["group-label"]}>{group.label}</BaseSelect.GroupLabel>}
|
|
85
|
+
{group.options.map((opt) => (
|
|
86
|
+
<SelectItem key={opt.value} option={opt} />
|
|
87
|
+
))}
|
|
88
|
+
{i < (groups?.length ?? 0) - 1 && <BaseSelect.Separator className={styles.separator} />}
|
|
89
|
+
</BaseSelect.Group>
|
|
90
|
+
))}
|
|
91
|
+
</BaseSelect.List>
|
|
92
|
+
</BaseSelect.Popup>
|
|
93
|
+
</BaseSelect.Positioner>
|
|
94
|
+
</BaseSelect.Portal>
|
|
95
|
+
</BaseSelect.Root>
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
export { styles as SelectStyles };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.separator {
|
|
3
|
+
background-color: var(--color-line);
|
|
4
|
+
flex-shrink: 0;
|
|
5
|
+
}
|
|
6
|
+
.separator[data-orientation="horizontal"] {
|
|
7
|
+
width: 100%;
|
|
8
|
+
height: var(--border-width-base, 1px);
|
|
9
|
+
}
|
|
10
|
+
.separator[data-orientation="vertical"] {
|
|
11
|
+
width: var(--border-width-base, 1px);
|
|
12
|
+
align-self: stretch;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { forwardRef } from "react";
|
|
2
|
+
import type { ComponentPropsWithoutRef, ComponentRef } from "react";
|
|
3
|
+
import { Separator as BaseSeparator } from "@base-ui/react/separator";
|
|
4
|
+
import styles from "./separator.module.css";
|
|
5
|
+
|
|
6
|
+
type BaseSeparatorProps = ComponentPropsWithoutRef<typeof BaseSeparator>;
|
|
7
|
+
|
|
8
|
+
export interface SeparatorProps extends Omit<BaseSeparatorProps, "className"> {
|
|
9
|
+
/** @default "horizontal" */
|
|
10
|
+
orientation?: "horizontal" | "vertical";
|
|
11
|
+
className?: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const Separator = forwardRef<ComponentRef<typeof BaseSeparator>, SeparatorProps>(function Separator(
|
|
15
|
+
{ className, orientation = "horizontal", ...props },
|
|
16
|
+
ref,
|
|
17
|
+
) {
|
|
18
|
+
return <BaseSeparator ref={ref} orientation={orientation} className={`${styles.separator} ${className ?? ""}`} {...props} />;
|
|
19
|
+
});
|
|
20
|
+
export { styles as SeparatorStyles };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { Slider } from "./slider";
|
|
2
|
+
export type { SliderProps } from "./slider";
|
|
3
|
+
|
|
4
|
+
export { SliderControl, SliderTrack, SliderIndicator, SliderThumb, SliderLabel, SliderValue } from "./parts";
|
|
5
|
+
export type {
|
|
6
|
+
SliderControlProps,
|
|
7
|
+
SliderTrackProps,
|
|
8
|
+
SliderIndicatorProps,
|
|
9
|
+
SliderThumbProps,
|
|
10
|
+
SliderLabelProps,
|
|
11
|
+
SliderValueProps,
|
|
12
|
+
} from "./parts";
|
|
13
|
+
|
|
14
|
+
export { SliderStyles } from "./slider";
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Styled primitives for Slider.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```tsx
|
|
6
|
+
* import { Slider as BaseSlider } from '@base-ui/react/slider';
|
|
7
|
+
* import { SliderControl, SliderTrack, SliderIndicator, SliderThumb } from '@brijbyte/agentic-ui/slider';
|
|
8
|
+
*
|
|
9
|
+
* <BaseSlider.Root defaultValue={50}>
|
|
10
|
+
* <SliderControl>
|
|
11
|
+
* <SliderTrack>
|
|
12
|
+
* <SliderIndicator />
|
|
13
|
+
* <SliderThumb aria-label="Volume" />
|
|
14
|
+
* </SliderTrack>
|
|
15
|
+
* </SliderControl>
|
|
16
|
+
* </BaseSlider.Root>
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
import { forwardRef } from "react";
|
|
20
|
+
import type { ComponentRef, ComponentPropsWithoutRef } from "react";
|
|
21
|
+
import { Slider as BaseSlider } from "@base-ui/react/slider";
|
|
22
|
+
import styles from "./slider.module.css";
|
|
23
|
+
|
|
24
|
+
type BaseControlProps = ComponentPropsWithoutRef<typeof BaseSlider.Control>;
|
|
25
|
+
type BaseTrackProps = ComponentPropsWithoutRef<typeof BaseSlider.Track>;
|
|
26
|
+
type BaseIndicatorProps = ComponentPropsWithoutRef<typeof BaseSlider.Indicator>;
|
|
27
|
+
type BaseThumbProps = ComponentPropsWithoutRef<typeof BaseSlider.Thumb>;
|
|
28
|
+
type BaseLabelProps = ComponentPropsWithoutRef<typeof BaseSlider.Label>;
|
|
29
|
+
type BaseValueProps = ComponentPropsWithoutRef<typeof BaseSlider.Value>;
|
|
30
|
+
|
|
31
|
+
export interface SliderControlProps extends Omit<BaseControlProps, "className"> {
|
|
32
|
+
className?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface SliderTrackProps extends Omit<BaseTrackProps, "className"> {
|
|
35
|
+
className?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface SliderIndicatorProps extends Omit<BaseIndicatorProps, "className"> {
|
|
38
|
+
className?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface SliderThumbProps extends Omit<BaseThumbProps, "className"> {
|
|
41
|
+
className?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface SliderLabelProps extends Omit<BaseLabelProps, "className"> {
|
|
44
|
+
className?: string;
|
|
45
|
+
}
|
|
46
|
+
export interface SliderValueProps extends Omit<BaseValueProps, "className"> {
|
|
47
|
+
className?: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export const SliderControl = forwardRef<ComponentRef<typeof BaseSlider.Control>, SliderControlProps>(function SliderControl(
|
|
51
|
+
{ className, ...props },
|
|
52
|
+
ref,
|
|
53
|
+
) {
|
|
54
|
+
return <BaseSlider.Control ref={ref} className={`${styles.control} ${className ?? ""}`} {...props} />;
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
export const SliderTrack = forwardRef<ComponentRef<typeof BaseSlider.Track>, SliderTrackProps>(function SliderTrack(
|
|
58
|
+
{ className, ...props },
|
|
59
|
+
ref,
|
|
60
|
+
) {
|
|
61
|
+
return <BaseSlider.Track ref={ref} className={`${styles.track} ${className ?? ""}`} {...props} />;
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
export const SliderIndicator = forwardRef<ComponentRef<typeof BaseSlider.Indicator>, SliderIndicatorProps>(function SliderIndicator(
|
|
65
|
+
{ className, ...props },
|
|
66
|
+
ref,
|
|
67
|
+
) {
|
|
68
|
+
return <BaseSlider.Indicator ref={ref} className={`${styles.indicator} ${className ?? ""}`} {...props} />;
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
export const SliderThumb = forwardRef<ComponentRef<typeof BaseSlider.Thumb>, SliderThumbProps>(function SliderThumb(
|
|
72
|
+
{ className, ...props },
|
|
73
|
+
ref,
|
|
74
|
+
) {
|
|
75
|
+
return <BaseSlider.Thumb ref={ref} className={`${styles.thumb} ${className ?? ""}`} {...props} />;
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
export const SliderLabel = forwardRef<ComponentRef<typeof BaseSlider.Label>, SliderLabelProps>(function SliderLabel(
|
|
79
|
+
{ className, ...props },
|
|
80
|
+
ref,
|
|
81
|
+
) {
|
|
82
|
+
return <BaseSlider.Label ref={ref} className={`${styles.label} ${className ?? ""}`} {...props} />;
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
export const SliderValue = forwardRef<ComponentRef<typeof BaseSlider.Value>, SliderValueProps>(function SliderValue(
|
|
86
|
+
{ className, ...props },
|
|
87
|
+
ref,
|
|
88
|
+
) {
|
|
89
|
+
return <BaseSlider.Value ref={ref} className={`${styles.value} ${className ?? ""}`} {...props} />;
|
|
90
|
+
});
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.root {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
gap: var(--space-2);
|
|
6
|
+
width: 100%;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/* ─── Label + Value row ──────────────────────────────────────── */
|
|
10
|
+
|
|
11
|
+
.header {
|
|
12
|
+
display: flex;
|
|
13
|
+
align-items: center;
|
|
14
|
+
justify-content: space-between;
|
|
15
|
+
gap: var(--space-2);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.label {
|
|
19
|
+
font-family: var(--font-mono);
|
|
20
|
+
font-size: var(--font-size-xs);
|
|
21
|
+
font-weight: var(--font-weight-medium);
|
|
22
|
+
color: var(--color-secondary);
|
|
23
|
+
letter-spacing: var(--letter-spacing-wide);
|
|
24
|
+
text-transform: uppercase;
|
|
25
|
+
user-select: none;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.value {
|
|
29
|
+
font-family: var(--font-mono);
|
|
30
|
+
font-size: var(--font-size-xs);
|
|
31
|
+
color: var(--color-tertiary);
|
|
32
|
+
font-variant-numeric: tabular-nums;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* ─── Control (hit area) ─────────────────────────────────────── */
|
|
36
|
+
|
|
37
|
+
.control {
|
|
38
|
+
display: flex;
|
|
39
|
+
align-items: center;
|
|
40
|
+
width: 100%;
|
|
41
|
+
padding-block: var(--space-2);
|
|
42
|
+
touch-action: none;
|
|
43
|
+
user-select: none;
|
|
44
|
+
cursor: pointer;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.control[data-disabled] {
|
|
48
|
+
opacity: 0.44;
|
|
49
|
+
cursor: not-allowed;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* ─── Track ──────────────────────────────────────────────────── */
|
|
53
|
+
|
|
54
|
+
.track {
|
|
55
|
+
position: relative;
|
|
56
|
+
width: 100%;
|
|
57
|
+
height: 4px;
|
|
58
|
+
border-radius: var(--radius-full);
|
|
59
|
+
background-color: var(--color-surface-3);
|
|
60
|
+
border: var(--border-width-base) solid var(--color-line-subtle);
|
|
61
|
+
user-select: none;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* ─── Indicator (filled portion) ────────────────────────────── */
|
|
65
|
+
|
|
66
|
+
.indicator {
|
|
67
|
+
border-radius: var(--radius-full);
|
|
68
|
+
background-color: var(--color-accent);
|
|
69
|
+
user-select: none;
|
|
70
|
+
transition: background-color var(--duration-fast) var(--easing-standard);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.root[data-disabled] .indicator {
|
|
74
|
+
background-color: var(--color-tertiary);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* ─── Thumb ──────────────────────────────────────────────────── */
|
|
78
|
+
|
|
79
|
+
.thumb {
|
|
80
|
+
width: 16px;
|
|
81
|
+
height: 16px;
|
|
82
|
+
border-radius: var(--radius-full);
|
|
83
|
+
background-color: var(--color-elevated);
|
|
84
|
+
border: var(--border-width-base) solid var(--color-line);
|
|
85
|
+
box-shadow: var(--shadow-sm);
|
|
86
|
+
user-select: none;
|
|
87
|
+
transition:
|
|
88
|
+
transform var(--duration-fast) var(--easing-spring),
|
|
89
|
+
box-shadow var(--duration-fast) var(--easing-standard),
|
|
90
|
+
border-color var(--duration-fast) var(--easing-standard);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/* Grow on drag — gives tactile feedback */
|
|
94
|
+
.thumb[data-dragging] {
|
|
95
|
+
transform: scale(1.2);
|
|
96
|
+
border-color: var(--color-accent);
|
|
97
|
+
box-shadow: var(--shadow-md);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* Focus ring via the nested <input> */
|
|
101
|
+
.thumb:has(:focus-visible) {
|
|
102
|
+
border-color: var(--color-accent);
|
|
103
|
+
box-shadow: var(--shadow-focus);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.thumb[data-disabled] {
|
|
107
|
+
cursor: not-allowed;
|
|
108
|
+
background-color: var(--color-surface-3);
|
|
109
|
+
}
|
|
110
|
+
}
|