@brijbyte/agentic-ui 0.0.2 → 0.0.4
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 +132 -35
- package/dist/accordion/accordion.d.ts +15 -1
- package/dist/accordion/accordion.d.ts.map +1 -1
- package/dist/accordion/accordion.js +6 -1
- package/dist/accordion/accordion.js.map +1 -1
- package/dist/accordion/parts.d.ts +1 -1
- package/dist/accordion/parts.js +2 -2
- package/dist/alert-dialog/alert-dialog.d.ts +12 -1
- package/dist/alert-dialog/alert-dialog.d.ts.map +1 -1
- package/dist/alert-dialog/alert-dialog.js +6 -1
- package/dist/alert-dialog/alert-dialog.js.map +1 -1
- package/dist/alert-dialog/parts.d.ts +1 -1
- package/dist/alert-dialog/parts.js +2 -2
- package/dist/badge/badge.d.ts +7 -1
- package/dist/badge/badge.d.ts.map +1 -1
- package/dist/badge/badge.js +4 -0
- package/dist/badge/badge.js.map +1 -1
- package/dist/button/button.css +22 -8
- package/dist/button/button.d.ts +19 -8
- package/dist/button/button.d.ts.map +1 -1
- package/dist/button/button.js +6 -1
- package/dist/button/button.js.map +1 -1
- package/dist/button/button.module.js.map +1 -1
- package/dist/card/card.d.ts +11 -1
- package/dist/card/card.d.ts.map +1 -1
- package/dist/card/card.js +7 -0
- package/dist/card/card.js.map +1 -1
- package/dist/checkbox/checkbox.d.ts +14 -1
- package/dist/checkbox/checkbox.d.ts.map +1 -1
- package/dist/checkbox/checkbox.js +5 -1
- package/dist/checkbox/checkbox.js.map +1 -1
- package/dist/checkbox/parts.js +1 -1
- package/dist/collapsible/collapsible.d.ts +12 -1
- package/dist/collapsible/collapsible.d.ts.map +1 -1
- package/dist/collapsible/collapsible.js +5 -0
- package/dist/collapsible/collapsible.js.map +1 -1
- package/dist/collapsible/parts.js +1 -1
- package/dist/context-menu/context-menu.d.ts +6 -1
- package/dist/context-menu/context-menu.d.ts.map +1 -1
- package/dist/context-menu/context-menu.js +4 -0
- package/dist/context-menu/context-menu.js.map +1 -1
- package/dist/context-menu/parts.js +1 -1
- package/dist/dialog/dialog.d.ts +14 -2
- package/dist/dialog/dialog.d.ts.map +1 -1
- package/dist/dialog/dialog.js +6 -0
- package/dist/dialog/dialog.js.map +1 -1
- package/dist/dialog/parts.js +1 -1
- package/dist/drawer/drawer.d.ts +12 -1
- package/dist/drawer/drawer.d.ts.map +1 -1
- package/dist/drawer/drawer.js +5 -0
- package/dist/drawer/drawer.js.map +1 -1
- package/dist/drawer/parts.d.ts +1 -1
- package/dist/drawer/parts.js +1 -1
- package/dist/index.css +1773 -1316
- package/dist/index.d.ts +29 -20
- package/dist/index.js +50 -37
- package/dist/input/input.d.ts +8 -0
- package/dist/input/input.d.ts.map +1 -1
- package/dist/input/input.js +6 -1
- package/dist/input/input.js.map +1 -1
- package/dist/menu/menu.css +3 -8
- package/dist/menu/menu.d.ts +12 -5
- package/dist/menu/menu.d.ts.map +1 -1
- package/dist/menu/menu.js +10 -24
- package/dist/menu/menu.js.map +1 -1
- package/dist/menu/menu.module.js +1 -1
- package/dist/menu/menu.module.js.map +1 -1
- package/dist/menu/menuitemshortcut.js +1 -1
- package/dist/menu/parts.js +1 -1
- package/dist/meter/circular-meter.d.ts +48 -0
- package/dist/meter/circular-meter.d.ts.map +1 -0
- package/dist/meter/circular-meter.js +86 -0
- package/dist/meter/circular-meter.js.map +1 -0
- package/dist/meter/index.d.ts +4 -0
- package/dist/meter/index.js +5 -0
- package/dist/meter/meter.css +152 -0
- package/dist/meter/meter.d.ts +58 -0
- package/dist/meter/meter.d.ts.map +1 -0
- package/dist/meter/meter.js +50 -0
- package/dist/meter/meter.js.map +1 -0
- package/dist/meter/meter.module.css.d.ts +2 -0
- package/dist/meter/meter.module.js +27 -0
- package/dist/meter/meter.module.js.map +1 -0
- package/dist/meter/meterState.js +18 -0
- package/dist/meter/meterState.js.map +1 -0
- package/dist/meter/parts.d.ts +31 -0
- package/dist/meter/parts.d.ts.map +1 -0
- package/dist/meter/parts.js +56 -0
- package/dist/meter/parts.js.map +1 -0
- package/dist/number-field/number-field.d.ts +17 -1
- package/dist/number-field/number-field.d.ts.map +1 -1
- package/dist/number-field/number-field.js +5 -1
- package/dist/number-field/number-field.js.map +1 -1
- package/dist/number-field/parts.js +1 -1
- package/dist/popover/index.d.ts +3 -0
- package/dist/popover/index.js +4 -0
- package/dist/popover/parts.d.ts +43 -0
- package/dist/popover/parts.d.ts.map +1 -0
- package/dist/popover/parts.js +96 -0
- package/dist/popover/parts.js.map +1 -0
- package/dist/popover/popover.css +173 -0
- package/dist/popover/popover.d.ts +49 -0
- package/dist/popover/popover.d.ts.map +1 -0
- package/dist/popover/popover.js +68 -0
- package/dist/popover/popover.js.map +1 -0
- package/dist/popover/popover.module.css.d.ts +2 -0
- package/dist/popover/popover.module.js +16 -0
- package/dist/popover/popover.module.js.map +1 -0
- package/dist/progress/parts.js +1 -1
- package/dist/progress/progress.d.ts +11 -0
- package/dist/progress/progress.d.ts.map +1 -1
- package/dist/progress/progress.js +5 -0
- package/dist/progress/progress.js.map +1 -1
- package/dist/radio/index.d.ts +3 -0
- package/dist/radio/index.js +4 -0
- package/dist/radio/parts.d.ts +18 -0
- package/dist/radio/parts.d.ts.map +1 -0
- package/dist/radio/parts.js +42 -0
- package/dist/radio/parts.js.map +1 -0
- package/dist/radio/radio.css +84 -0
- package/dist/radio/radio.d.ts +31 -0
- package/dist/radio/radio.d.ts.map +1 -0
- package/dist/radio/radio.js +33 -0
- package/dist/radio/radio.js.map +1 -0
- package/dist/radio/radio.module.css.d.ts +2 -0
- package/dist/radio/radio.module.js +11 -0
- package/dist/radio/radio.module.js.map +1 -0
- package/dist/radio-group/index.d.ts +3 -0
- package/dist/radio-group/index.js +4 -0
- package/dist/radio-group/parts.d.ts +13 -0
- package/dist/radio-group/parts.d.ts.map +1 -0
- package/dist/radio-group/parts.js +31 -0
- package/dist/radio-group/parts.js.map +1 -0
- package/dist/radio-group/radio-group.css +17 -0
- package/dist/radio-group/radio-group.d.ts +37 -0
- package/dist/radio-group/radio-group.d.ts.map +1 -0
- package/dist/radio-group/radio-group.js +28 -0
- package/dist/radio-group/radio-group.js.map +1 -0
- package/dist/radio-group/radio-group.module.css.d.ts +2 -0
- package/dist/radio-group/radio-group.module.js +9 -0
- package/dist/radio-group/radio-group.module.js.map +1 -0
- package/dist/select/parts.js +1 -1
- package/dist/select/select.d.ts +15 -2
- package/dist/select/select.d.ts.map +1 -1
- package/dist/select/select.js +5 -1
- package/dist/select/select.js.map +1 -1
- package/dist/separator/separator.d.ts +4 -0
- package/dist/separator/separator.d.ts.map +1 -1
- package/dist/separator/separator.js +5 -1
- package/dist/separator/separator.js.map +1 -1
- package/dist/shared/PopupArrow.js +22 -0
- package/dist/shared/PopupArrow.js.map +1 -0
- package/dist/slider/parts.js +1 -1
- package/dist/slider/slider.d.ts +19 -1
- package/dist/slider/slider.d.ts.map +1 -1
- package/dist/slider/slider.js +6 -0
- package/dist/slider/slider.js.map +1 -1
- package/dist/styles/tokens.css +21 -8
- package/dist/switch/parts.js +1 -1
- package/dist/switch/switch.css +11 -2
- package/dist/switch/switch.d.ts +13 -1
- package/dist/switch/switch.d.ts.map +1 -1
- package/dist/switch/switch.js +5 -1
- package/dist/switch/switch.js.map +1 -1
- package/dist/switch/switch.module.js.map +1 -1
- package/dist/tabs/parts.js +1 -1
- package/dist/tabs/tabs.d.ts +9 -2
- package/dist/tabs/tabs.d.ts.map +1 -1
- package/dist/tabs/tabs.js +4 -0
- package/dist/tabs/tabs.js.map +1 -1
- package/dist/toast/parts.js +1 -1
- package/dist/toast/toast.d.ts +12 -1
- package/dist/toast/toast.d.ts.map +1 -1
- package/dist/toast/toast.js +8 -0
- package/dist/toast/toast.js.map +1 -1
- package/dist/tokens.css +23 -11
- package/dist/tooltip/parts.js +1 -1
- package/dist/tooltip/tooltip.d.ts +10 -1
- package/dist/tooltip/tooltip.d.ts.map +1 -1
- package/dist/tooltip/tooltip.js +4 -0
- package/dist/tooltip/tooltip.js.map +1 -1
- package/package.json +23 -2
- package/src/accordion/accordion.tsx +14 -0
- package/src/alert-dialog/alert-dialog.tsx +11 -0
- package/src/badge/badge.tsx +6 -0
- package/src/button/button.module.css +29 -13
- package/src/button/button.tsx +19 -8
- package/src/card/card.tsx +10 -0
- package/src/checkbox/checkbox.tsx +13 -0
- package/src/collapsible/collapsible.tsx +11 -0
- package/src/context-menu/context-menu.tsx +5 -0
- package/src/dialog/dialog.tsx +13 -1
- package/src/drawer/drawer.tsx +11 -0
- package/src/index.ts +25 -233
- package/src/input/input.tsx +8 -0
- package/src/menu/menu.module.css +3 -10
- package/src/menu/menu.tsx +13 -26
- package/src/meter/circular-meter.tsx +114 -0
- package/src/meter/index.ts +9 -0
- package/src/meter/meter.module.css +162 -0
- package/src/meter/meter.tsx +86 -0
- package/src/meter/meterState.ts +29 -0
- package/src/meter/parts.tsx +72 -0
- package/src/number-field/number-field.tsx +16 -0
- package/src/popover/index.ts +14 -0
- package/src/popover/parts.tsx +120 -0
- package/src/popover/popover.module.css +189 -0
- package/src/popover/popover.tsx +80 -0
- package/src/progress/progress.tsx +11 -0
- package/src/radio/index.ts +6 -0
- package/src/radio/parts.tsx +43 -0
- package/src/radio/radio.module.css +96 -0
- package/src/radio/radio.tsx +37 -0
- package/src/radio-group/index.ts +5 -0
- package/src/radio-group/parts.tsx +32 -0
- package/src/radio-group/radio-group.module.css +17 -0
- package/src/radio-group/radio-group.tsx +63 -0
- package/src/select/select.tsx +14 -1
- package/src/separator/separator.tsx +4 -0
- package/src/shared/PopupArrow.tsx +41 -0
- package/src/slider/slider.tsx +18 -0
- package/src/styles/tokens.css +23 -11
- package/src/switch/switch.module.css +11 -2
- package/src/switch/switch.tsx +12 -0
- package/src/tabs/tabs.tsx +8 -1
- package/src/toast/toast.tsx +11 -0
- package/src/tooltip/tooltip.tsx +9 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as react from "react";
|
|
2
|
+
import { ComponentPropsWithoutRef } from "react";
|
|
3
|
+
import { Radio } from "@base-ui/react/radio";
|
|
4
|
+
|
|
5
|
+
//#region src/radio/parts.d.ts
|
|
6
|
+
type BaseRootProps = ComponentPropsWithoutRef<typeof Radio.Root>;
|
|
7
|
+
type BaseIndicatorProps = ComponentPropsWithoutRef<typeof Radio.Indicator>;
|
|
8
|
+
interface RadioRootProps extends Omit<BaseRootProps, "className"> {
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
interface RadioIndicatorProps extends Omit<BaseIndicatorProps, "className"> {
|
|
12
|
+
className?: string;
|
|
13
|
+
}
|
|
14
|
+
declare const RadioRoot: react.ForwardRefExoticComponent<RadioRootProps & react.RefAttributes<HTMLSpanElement>>;
|
|
15
|
+
declare const RadioIndicator: react.ForwardRefExoticComponent<RadioIndicatorProps & react.RefAttributes<HTMLSpanElement>>;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { RadioIndicator, RadioIndicatorProps, RadioRoot, RadioRootProps };
|
|
18
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","names":[],"sources":["../../src/radio/parts.tsx"],"mappings":";;;;;KAuBK,aAAA,GAAgB,wBAAA,QAAgC,KAAA,CAAU,IAAA;AAAA,KAC1D,kBAAA,GAAqB,wBAAA,QAAgC,KAAA,CAAU,SAAA;AAAA,UAEnD,cAAA,SAAuB,IAAA,CAAK,aAAA;EAC3C,SAAA;AAAA;AAAA,UAEe,mBAAA,SAA4B,IAAA,CAAK,kBAAA;EAChD,SAAA;AAAA;AAAA,cAGW,SAAA,EAAS,KAAA,CAAA,yBAAA,CAAA,cAAA,GAAA,KAAA,CAAA,aAAA,CAAA,eAAA;AAAA,cAIT,cAAA,EAAc,KAAA,CAAA,yBAAA,CAAA,mBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,eAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import radio_module_default from "./radio.module.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from "react";
|
|
4
|
+
import { Radio } from "@base-ui/react/radio";
|
|
5
|
+
//#region src/radio/parts.tsx
|
|
6
|
+
/**
|
|
7
|
+
* Styled primitives for Radio (single item).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* import { RadioGroup } from '@base-ui/react/radio-group';
|
|
12
|
+
* import { RadioRoot, RadioIndicator } from '@brijbyte/agentic-ui/radio';
|
|
13
|
+
*
|
|
14
|
+
* <RadioGroup defaultValue="a">
|
|
15
|
+
* <label htmlFor="opt-a">
|
|
16
|
+
* <RadioRoot id="opt-a" value="a">
|
|
17
|
+
* <RadioIndicator />
|
|
18
|
+
* </RadioRoot>
|
|
19
|
+
* Option A
|
|
20
|
+
* </label>
|
|
21
|
+
* </RadioGroup>
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
const RadioRoot = forwardRef(function RadioRoot({ className, ...props }, ref) {
|
|
25
|
+
return /* @__PURE__ */ jsx(Radio.Root, {
|
|
26
|
+
ref,
|
|
27
|
+
className: `${radio_module_default.radio} ${className ?? ""}`,
|
|
28
|
+
...props
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
const RadioIndicator = forwardRef(function RadioIndicator({ className, ...props }, ref) {
|
|
32
|
+
return /* @__PURE__ */ jsx(Radio.Indicator, {
|
|
33
|
+
ref,
|
|
34
|
+
keepMounted: true,
|
|
35
|
+
className: `${radio_module_default.indicator} ${className ?? ""}`,
|
|
36
|
+
...props
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
//#endregion
|
|
40
|
+
export { RadioIndicator, RadioRoot };
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","names":["BaseRadio","styles"],"sources":["../../src/radio/parts.tsx"],"sourcesContent":["/**\n * Styled primitives for Radio (single item).\n *\n * @example\n * ```tsx\n * import { RadioGroup } from '@base-ui/react/radio-group';\n * import { RadioRoot, RadioIndicator } from '@brijbyte/agentic-ui/radio';\n *\n * <RadioGroup defaultValue=\"a\">\n * <label htmlFor=\"opt-a\">\n * <RadioRoot id=\"opt-a\" value=\"a\">\n * <RadioIndicator />\n * </RadioRoot>\n * Option A\n * </label>\n * </RadioGroup>\n * ```\n */\nimport { forwardRef } from \"react\";\nimport type { ComponentRef, ComponentPropsWithoutRef } from \"react\";\nimport { Radio as BaseRadio } from \"@base-ui/react/radio\";\nimport styles from \"./radio.module.css\";\n\ntype BaseRootProps = ComponentPropsWithoutRef<typeof BaseRadio.Root>;\ntype BaseIndicatorProps = ComponentPropsWithoutRef<typeof BaseRadio.Indicator>;\n\nexport interface RadioRootProps extends Omit<BaseRootProps, \"className\"> {\n className?: string;\n}\nexport interface RadioIndicatorProps extends Omit<BaseIndicatorProps, \"className\"> {\n className?: string;\n}\n\nexport const RadioRoot = forwardRef<ComponentRef<typeof BaseRadio.Root>, RadioRootProps>(function RadioRoot({ className, ...props }, ref) {\n return <BaseRadio.Root ref={ref} className={`${styles.radio} ${className ?? \"\"}`} {...props} />;\n});\n\nexport const RadioIndicator = forwardRef<ComponentRef<typeof BaseRadio.Indicator>, RadioIndicatorProps>(function RadioIndicator(\n { className, ...props },\n ref,\n) {\n return <BaseRadio.Indicator ref={ref} keepMounted className={`${styles.indicator} ${className ?? \"\"}`} {...props} />;\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAiCA,MAAa,YAAY,WAAgE,SAAS,UAAU,EAAE,WAAW,GAAG,SAAS,KAAK;AACxI,QAAO,oBAACA,MAAU,MAAX;EAAqB;EAAK,WAAW,GAAGC,qBAAO,MAAM,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EAC/F;AAEF,MAAa,iBAAiB,WAA0E,SAAS,eAC/G,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACD,MAAU,WAAX;EAA0B;EAAK,aAAA;EAAY,WAAW,GAAGC,qBAAO,UAAU,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EACpH"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.item_hqwDuG {
|
|
3
|
+
align-items: center;
|
|
4
|
+
gap: var(--space-2);
|
|
5
|
+
cursor: pointer;
|
|
6
|
+
user-select: none;
|
|
7
|
+
display: flex;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.item_hqwDuG:has([data-disabled]) {
|
|
11
|
+
cursor: not-allowed;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.item_hqwDuG:has([data-disabled]) .label_hqwDuG {
|
|
15
|
+
opacity: .44;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.radio_hqwDuG {
|
|
19
|
+
border-radius: var(--radius-full);
|
|
20
|
+
border: var(--border-width-base) solid var(--color-line-strong);
|
|
21
|
+
background-color: var(--color-surface-1);
|
|
22
|
+
width: 16px;
|
|
23
|
+
height: 16px;
|
|
24
|
+
transition: background-color var(--duration-fast) var(--easing-standard),
|
|
25
|
+
border-color var(--duration-fast) var(--easing-standard),
|
|
26
|
+
box-shadow var(--duration-fast) var(--easing-standard);
|
|
27
|
+
outline: none;
|
|
28
|
+
flex-shrink: 0;
|
|
29
|
+
justify-content: center;
|
|
30
|
+
align-items: center;
|
|
31
|
+
margin: 0;
|
|
32
|
+
padding: 0;
|
|
33
|
+
display: flex;
|
|
34
|
+
position: relative;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.radio_hqwDuG:focus-visible {
|
|
38
|
+
box-shadow: var(--shadow-focus);
|
|
39
|
+
border-color: var(--color-accent);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.radio_hqwDuG:hover:not([data-disabled]) {
|
|
43
|
+
border-color: var(--color-accent);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.radio_hqwDuG[data-checked] {
|
|
47
|
+
background-color: var(--color-accent);
|
|
48
|
+
border-color: var(--color-accent);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.radio_hqwDuG[data-checked]:hover:not([data-disabled]) {
|
|
52
|
+
background-color: var(--color-accent-hover);
|
|
53
|
+
border-color: var(--color-accent-hover);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.radio_hqwDuG[data-disabled] {
|
|
57
|
+
opacity: .44;
|
|
58
|
+
cursor: not-allowed;
|
|
59
|
+
pointer-events: none;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.indicator_hqwDuG {
|
|
63
|
+
border-radius: var(--radius-full);
|
|
64
|
+
background-color: var(--color-on-accent);
|
|
65
|
+
width: 6px;
|
|
66
|
+
height: 6px;
|
|
67
|
+
transition: transform var(--duration-fast) var(--easing-spring),
|
|
68
|
+
opacity var(--duration-fast) var(--easing-standard);
|
|
69
|
+
opacity: 0;
|
|
70
|
+
transform: scale(0);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.radio_hqwDuG[data-checked] .indicator_hqwDuG {
|
|
74
|
+
opacity: 1;
|
|
75
|
+
transform: scale(1);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.label_hqwDuG {
|
|
79
|
+
font-family: var(--font-mono);
|
|
80
|
+
font-size: var(--font-size-sm);
|
|
81
|
+
color: var(--color-primary);
|
|
82
|
+
line-height: var(--line-height-normal);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
import styles from "./radio.module.css";
|
|
4
|
+
|
|
5
|
+
//#region src/radio/radio.d.ts
|
|
6
|
+
interface RadioProps {
|
|
7
|
+
/** Value submitted with the form and matched against the group's value. */
|
|
8
|
+
value: string;
|
|
9
|
+
/** Label rendered next to the button. */
|
|
10
|
+
children?: ReactNode;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
readOnly?: boolean;
|
|
13
|
+
required?: boolean;
|
|
14
|
+
/** Override the auto-generated element id. */
|
|
15
|
+
id?: string;
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A single radio button with an optional label.
|
|
20
|
+
* Must be placed inside `<RadioGroup>` or a raw base-ui RadioGroup.
|
|
21
|
+
*/
|
|
22
|
+
declare function Radio({
|
|
23
|
+
value,
|
|
24
|
+
children,
|
|
25
|
+
id,
|
|
26
|
+
className,
|
|
27
|
+
...props
|
|
28
|
+
}: RadioProps): react_jsx_runtime0.JSX.Element;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { Radio, RadioProps, styles };
|
|
31
|
+
//# sourceMappingURL=radio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio.d.ts","names":[],"sources":["../../src/radio/radio.tsx"],"mappings":";;;;;UAKiB,UAAA;;EAEf,KAAA;EAFe;EAIf,QAAA,GAAW,SAAA;EACX,QAAA;EACA,QAAA;EACA,QAAA;EAHA;EAKA,EAAA;EACA,SAAA;AAAA;;;;;iBAOc,KAAA,CAAA;EAAQ,KAAA;EAAO,QAAA;EAAU,EAAA;EAAI,SAAA;EAAA,GAAc;AAAA,GAAS,UAAA,GAAU,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import radio_module_default from "./radio.module.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useId } from "react";
|
|
4
|
+
import { Radio } from "@base-ui/react/radio";
|
|
5
|
+
//#region src/radio/radio.tsx
|
|
6
|
+
/**
|
|
7
|
+
* A single radio button with an optional label.
|
|
8
|
+
* Must be placed inside `<RadioGroup>` or a raw base-ui RadioGroup.
|
|
9
|
+
*/
|
|
10
|
+
function Radio$1({ value, children, id, className, ...props }) {
|
|
11
|
+
const radioId = id ?? useId();
|
|
12
|
+
return /* @__PURE__ */ jsxs("label", {
|
|
13
|
+
className: `${radio_module_default.item} ${className ?? ""}`,
|
|
14
|
+
htmlFor: radioId,
|
|
15
|
+
children: [/* @__PURE__ */ jsx(Radio.Root, {
|
|
16
|
+
id: radioId,
|
|
17
|
+
value,
|
|
18
|
+
className: radio_module_default.radio,
|
|
19
|
+
...props,
|
|
20
|
+
children: /* @__PURE__ */ jsx(Radio.Indicator, {
|
|
21
|
+
keepMounted: true,
|
|
22
|
+
className: radio_module_default.indicator
|
|
23
|
+
})
|
|
24
|
+
}), children && /* @__PURE__ */ jsx("span", {
|
|
25
|
+
className: radio_module_default.label,
|
|
26
|
+
children
|
|
27
|
+
})]
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { Radio$1 as Radio };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=radio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio.js","names":["Radio","styles","BaseRadio"],"sources":["../../src/radio/radio.tsx"],"sourcesContent":["import { useId } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { Radio as BaseRadio } from \"@base-ui/react/radio\";\nimport styles from \"./radio.module.css\";\n\nexport interface RadioProps {\n /** Value submitted with the form and matched against the group's value. */\n value: string;\n /** Label rendered next to the button. */\n children?: ReactNode;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n /** Override the auto-generated element id. */\n id?: string;\n className?: string;\n}\n\n/**\n * A single radio button with an optional label.\n * Must be placed inside `<RadioGroup>` or a raw base-ui RadioGroup.\n */\nexport function Radio({ value, children, id, className, ...props }: RadioProps) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const radioId = id ?? useId();\n\n return (\n <label className={`${styles.item} ${className ?? \"\"}`} htmlFor={radioId}>\n <BaseRadio.Root id={radioId} value={value} className={styles.radio} {...props}>\n <BaseRadio.Indicator keepMounted className={styles.indicator} />\n </BaseRadio.Root>\n {children && <span className={styles.label}>{children}</span>}\n </label>\n );\n}\n\nexport { styles as RadioStyles };\n"],"mappings":";;;;;;;;;AAsBA,SAAgBA,QAAM,EAAE,OAAO,UAAU,IAAI,WAAW,GAAG,SAAqB;CAE9E,MAAM,UAAU,MAAM,OAAO;AAE7B,QACE,qBAAC,SAAD;EAAO,WAAW,GAAGC,qBAAO,KAAK,GAAG,aAAa;EAAM,SAAS;YAAhE,CACE,oBAACC,MAAU,MAAX;GAAgB,IAAI;GAAgB;GAAO,WAAWD,qBAAO;GAAO,GAAI;aACtE,oBAACC,MAAU,WAAX;IAAqB,aAAA;IAAY,WAAWD,qBAAO;IAAa,CAAA;GACjD,CAAA,EAChB,YAAY,oBAAC,QAAD;GAAM,WAAWA,qBAAO;GAAQ;GAAgB,CAAA,CACvD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region src/radio/radio.module.css
|
|
2
|
+
var radio_module_default = {
|
|
3
|
+
"indicator": "indicator_hqwDuG",
|
|
4
|
+
"item": "item_hqwDuG",
|
|
5
|
+
"label": "label_hqwDuG",
|
|
6
|
+
"radio": "radio_hqwDuG"
|
|
7
|
+
};
|
|
8
|
+
//#endregion
|
|
9
|
+
export { radio_module_default as default };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=radio.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio.module.js","names":[],"sources":["../../src/radio/radio.module.css"],"sourcesContent":["@layer components {\n /* ── Single radio item layout ───────────────────────────────────── */\n\n .item {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n cursor: pointer;\n user-select: none;\n }\n\n .item:has([data-disabled]) {\n cursor: not-allowed;\n }\n\n .item:has([data-disabled]) .label {\n opacity: 0.44;\n }\n\n /* ── Radio button (the circle) ──────────────────────────────────── */\n\n .radio {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n border-radius: var(--radius-full);\n border: var(--border-width-base) solid var(--color-line-strong);\n background-color: var(--color-surface-1);\n display: flex;\n align-items: center;\n justify-content: center;\n transition:\n background-color var(--duration-fast) var(--easing-standard),\n border-color var(--duration-fast) var(--easing-standard),\n box-shadow var(--duration-fast) var(--easing-standard);\n outline: none;\n position: relative;\n /* Reset button/span defaults */\n padding: 0;\n margin: 0;\n }\n\n .radio:focus-visible {\n box-shadow: var(--shadow-focus);\n border-color: var(--color-accent);\n }\n\n .radio:hover:not([data-disabled]) {\n border-color: var(--color-accent);\n }\n\n .radio[data-checked] {\n background-color: var(--color-accent);\n border-color: var(--color-accent);\n }\n\n .radio[data-checked]:hover:not([data-disabled]) {\n background-color: var(--color-accent-hover);\n border-color: var(--color-accent-hover);\n }\n\n .radio[data-disabled] {\n opacity: 0.44;\n cursor: not-allowed;\n pointer-events: none;\n }\n\n /* ── Indicator (inner dot) ──────────────────────────────────────── */\n\n .indicator {\n width: 6px;\n height: 6px;\n border-radius: var(--radius-full);\n background-color: var(--color-on-accent);\n transform: scale(0);\n transition:\n transform var(--duration-fast) var(--easing-spring),\n opacity var(--duration-fast) var(--easing-standard);\n opacity: 0;\n }\n\n /* data-checked is on the Root; the Indicator inherits it */\n .radio[data-checked] .indicator {\n transform: scale(1);\n opacity: 1;\n }\n\n /* ── Label text ─────────────────────────────────────────────────── */\n\n .label {\n font-family: var(--font-mono);\n font-size: var(--font-size-sm);\n color: var(--color-primary);\n line-height: var(--line-height-normal);\n }\n}\n"],"mappings":";AAQA,IAAA,uBAAe;CAAC,aAAK;CAAA,QAAA;CAAA,SAAA;CAAA,SAAA;CAAA"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { RadioGroup, RadioGroupProps, RadioOption, styles } from "./radio-group.js";
|
|
2
|
+
import { RadioGroupRoot, RadioGroupRootProps } from "./parts.js";
|
|
3
|
+
export { RadioGroup, type RadioGroupProps, RadioGroupRoot, type RadioGroupRootProps, styles as RadioGroupStyles, type RadioOption };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as react from "react";
|
|
2
|
+
import { ComponentPropsWithoutRef } from "react";
|
|
3
|
+
import { RadioGroup } from "@base-ui/react/radio-group";
|
|
4
|
+
|
|
5
|
+
//#region src/radio-group/parts.d.ts
|
|
6
|
+
type BaseGroupProps = ComponentPropsWithoutRef<typeof RadioGroup>;
|
|
7
|
+
interface RadioGroupRootProps extends Omit<BaseGroupProps, "className"> {
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
declare const RadioGroupRoot: react.ForwardRefExoticComponent<RadioGroupRootProps & react.RefAttributes<HTMLDivElement>>;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { RadioGroupRoot, RadioGroupRootProps };
|
|
13
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","names":[],"sources":["../../src/radio-group/parts.tsx"],"mappings":";;;;;KAoBK,cAAA,GAAiB,wBAAA,QAAgC,UAAA;AAAA,UAErC,mBAAA,SAA4B,IAAA,CAAK,cAAA;EAChD,SAAA;AAAA;AAAA,cAGW,cAAA,EAAc,KAAA,CAAA,yBAAA,CAAA,mBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import radio_group_module_default from "./radio-group.module.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from "react";
|
|
4
|
+
import { RadioGroup } from "@base-ui/react/radio-group";
|
|
5
|
+
//#region src/radio-group/parts.tsx
|
|
6
|
+
/**
|
|
7
|
+
* Styled primitive for RadioGroup.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* import { Radio } from '@brijbyte/agentic-ui/radio';
|
|
12
|
+
* import { RadioGroupRoot } from '@brijbyte/agentic-ui/radio-group';
|
|
13
|
+
*
|
|
14
|
+
* <RadioGroupRoot defaultValue="b" name="plan">
|
|
15
|
+
* <Radio value="a">Hobby</Radio>
|
|
16
|
+
* <Radio value="b">Pro</Radio>
|
|
17
|
+
* <Radio value="c">Enterprise</Radio>
|
|
18
|
+
* </RadioGroupRoot>
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
const RadioGroupRoot = forwardRef(function RadioGroupRoot({ className, ...props }, ref) {
|
|
22
|
+
return /* @__PURE__ */ jsx(RadioGroup, {
|
|
23
|
+
ref,
|
|
24
|
+
className: `${radio_group_module_default.group} ${className ?? ""}`,
|
|
25
|
+
...props
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
//#endregion
|
|
29
|
+
export { RadioGroupRoot };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","names":["BaseRadioGroup","styles"],"sources":["../../src/radio-group/parts.tsx"],"sourcesContent":["/**\n * Styled primitive for RadioGroup.\n *\n * @example\n * ```tsx\n * import { Radio } from '@brijbyte/agentic-ui/radio';\n * import { RadioGroupRoot } from '@brijbyte/agentic-ui/radio-group';\n *\n * <RadioGroupRoot defaultValue=\"b\" name=\"plan\">\n * <Radio value=\"a\">Hobby</Radio>\n * <Radio value=\"b\">Pro</Radio>\n * <Radio value=\"c\">Enterprise</Radio>\n * </RadioGroupRoot>\n * ```\n */\nimport { forwardRef } from \"react\";\nimport type { ComponentRef, ComponentPropsWithoutRef } from \"react\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport styles from \"./radio-group.module.css\";\n\ntype BaseGroupProps = ComponentPropsWithoutRef<typeof BaseRadioGroup>;\n\nexport interface RadioGroupRootProps extends Omit<BaseGroupProps, \"className\"> {\n className?: string;\n}\n\nexport const RadioGroupRoot = forwardRef<ComponentRef<typeof BaseRadioGroup>, RadioGroupRootProps>(function RadioGroupRoot(\n { className, ...props },\n ref,\n) {\n return <BaseRadioGroup ref={ref} className={`${styles.group} ${className ?? \"\"}`} {...props} />;\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA0BA,MAAa,iBAAiB,WAAqE,SAAS,eAC1G,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACA,YAAD;EAAqB;EAAK,WAAW,GAAGC,2BAAO,MAAM,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EAC/F"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.group_Ps7OCW {
|
|
3
|
+
gap: var(--space-2);
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
display: flex;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.group-label_Ps7OCW {
|
|
9
|
+
font-family: var(--font-mono);
|
|
10
|
+
font-size: var(--font-size-xs);
|
|
11
|
+
font-weight: var(--font-weight-semibold);
|
|
12
|
+
color: var(--color-tertiary);
|
|
13
|
+
text-transform: uppercase;
|
|
14
|
+
letter-spacing: var(--letter-spacing-wide);
|
|
15
|
+
margin-bottom: var(--space-1);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
import styles from "./radio-group.module.css";
|
|
4
|
+
|
|
5
|
+
//#region src/radio-group/radio-group.d.ts
|
|
6
|
+
interface RadioOption {
|
|
7
|
+
value: string;
|
|
8
|
+
label: ReactNode;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface RadioGroupProps {
|
|
12
|
+
/** The options to render. Each becomes one `<Radio>` item. */
|
|
13
|
+
options: RadioOption[];
|
|
14
|
+
/** Accessible group label rendered above the options. */
|
|
15
|
+
label?: ReactNode;
|
|
16
|
+
/** Controlled selected value. */
|
|
17
|
+
value?: string;
|
|
18
|
+
/** Initial selected value (uncontrolled). */
|
|
19
|
+
defaultValue?: string;
|
|
20
|
+
onValueChange?: (value: string, eventDetails: unknown) => void;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
readOnly?: boolean;
|
|
23
|
+
required?: boolean;
|
|
24
|
+
/** HTML name for form submission. */
|
|
25
|
+
name?: string;
|
|
26
|
+
className?: string;
|
|
27
|
+
}
|
|
28
|
+
declare function RadioGroup({
|
|
29
|
+
options,
|
|
30
|
+
label,
|
|
31
|
+
className,
|
|
32
|
+
onValueChange,
|
|
33
|
+
...props
|
|
34
|
+
}: RadioGroupProps): react_jsx_runtime0.JSX.Element;
|
|
35
|
+
//#endregion
|
|
36
|
+
export { RadioGroup, RadioGroupProps, RadioOption, styles };
|
|
37
|
+
//# sourceMappingURL=radio-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-group.d.ts","names":[],"sources":["../../src/radio-group/radio-group.tsx"],"mappings":";;;;;UAMiB,WAAA;EACf,KAAA;EACA,KAAA,EAAO,SAAA;EACP,QAAA;AAAA;AAAA,UAGe,eAAA;EAJC;EAMhB,OAAA,EAAS,WAAA;EANT;EAQA,KAAA,GAAQ,SAAA;EAPR;EASA,KAAA;EATQ;EAWR,YAAA;EACA,aAAA,IAAiB,KAAA,UAAe,YAAA;EAChC,QAAA;EACA,QAAA;EACA,QAAA;EAVS;EAYT,IAAA;EACA,SAAA;AAAA;AAAA,iBAYc,UAAA,CAAA;EAAa,OAAA;EAAS,KAAA;EAAO,SAAA;EAAW,aAAA;EAAA,GAAkB;AAAA,GAAS,eAAA,GAAe,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Radio } from "../radio/radio.js";
|
|
2
|
+
import radio_group_module_default from "./radio-group.module.js";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { useId } from "react";
|
|
5
|
+
import { RadioGroup } from "@base-ui/react/radio-group";
|
|
6
|
+
//#region src/radio-group/radio-group.tsx
|
|
7
|
+
function RadioGroup$1({ options, label, className, onValueChange, ...props }) {
|
|
8
|
+
const labelId = useId();
|
|
9
|
+
return /* @__PURE__ */ jsxs(RadioGroup, {
|
|
10
|
+
"aria-labelledby": label ? labelId : void 0,
|
|
11
|
+
className: `${radio_group_module_default.group} ${className ?? ""}`,
|
|
12
|
+
onValueChange,
|
|
13
|
+
...props,
|
|
14
|
+
children: [label && /* @__PURE__ */ jsx("div", {
|
|
15
|
+
id: labelId,
|
|
16
|
+
className: radio_group_module_default["group-label"],
|
|
17
|
+
children: label
|
|
18
|
+
}), options.map((opt) => /* @__PURE__ */ jsx(Radio, {
|
|
19
|
+
value: opt.value,
|
|
20
|
+
...opt.disabled !== void 0 && { disabled: opt.disabled },
|
|
21
|
+
children: opt.label
|
|
22
|
+
}, opt.value))]
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { RadioGroup$1 as RadioGroup };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=radio-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-group.js","names":["RadioGroup","BaseRadioGroup","styles"],"sources":["../../src/radio-group/radio-group.tsx"],"sourcesContent":["import { useId } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport { Radio } from \"../radio/radio\";\nimport styles from \"./radio-group.module.css\";\n\nexport interface RadioOption {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps {\n /** The options to render. Each becomes one `<Radio>` item. */\n options: RadioOption[];\n /** Accessible group label rendered above the options. */\n label?: ReactNode;\n /** Controlled selected value. */\n value?: string;\n /** Initial selected value (uncontrolled). */\n defaultValue?: string;\n onValueChange?: (value: string, eventDetails: unknown) => void;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n /** HTML name for form submission. */\n name?: string;\n className?: string;\n}\n\n/**\n * A labelled group of radio buttons. Renders a base-ui RadioGroup with one\n * `<Radio>` per option.\n *\n * For full control over layout or behaviour use `RadioGroupRoot` with\n * individual `<Radio>` or `<RadioRoot>` elements.\n */\nexport { styles as RadioGroupStyles };\n\nexport function RadioGroup({ options, label, className, onValueChange, ...props }: RadioGroupProps) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const labelId = useId();\n\n return (\n <BaseRadioGroup\n aria-labelledby={label ? labelId : undefined}\n className={`${styles.group} ${className ?? \"\"}`}\n onValueChange={onValueChange as never}\n {...props}\n >\n {label && (\n <div id={labelId} className={styles[\"group-label\"]}>\n {label}\n </div>\n )}\n {options.map((opt) => (\n <Radio key={opt.value} value={opt.value} {...(opt.disabled !== undefined && { disabled: opt.disabled })}>\n {opt.label}\n </Radio>\n ))}\n </BaseRadioGroup>\n );\n}\n"],"mappings":";;;;;;AAuCA,SAAgBA,aAAW,EAAE,SAAS,OAAO,WAAW,eAAe,GAAG,SAA0B;CAElG,MAAM,UAAU,OAAO;AAEvB,QACE,qBAACC,YAAD;EACE,mBAAiB,QAAQ,UAAU,KAAA;EACnC,WAAW,GAAGC,2BAAO,MAAM,GAAG,aAAa;EAC5B;EACf,GAAI;YAJN,CAMG,SACC,oBAAC,OAAD;GAAK,IAAI;GAAS,WAAWA,2BAAO;aACjC;GACG,CAAA,EAEP,QAAQ,KAAK,QACZ,oBAAC,OAAD;GAAuB,OAAO,IAAI;GAAO,GAAK,IAAI,aAAa,KAAA,KAAa,EAAE,UAAU,IAAI,UAAU;aACnG,IAAI;GACC,EAFI,IAAI,MAER,CACR,CACa"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/radio-group/radio-group.module.css
|
|
2
|
+
var radio_group_module_default = {
|
|
3
|
+
"group": "group_Ps7OCW",
|
|
4
|
+
"group-label": "group-label_Ps7OCW"
|
|
5
|
+
};
|
|
6
|
+
//#endregion
|
|
7
|
+
export { radio_group_module_default as default };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=radio-group.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-group.module.js","names":[],"sources":["../../src/radio-group/radio-group.module.css"],"sourcesContent":["@layer components {\n .group {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n }\n\n .group-label {\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n font-weight: var(--font-weight-semibold);\n color: var(--color-tertiary);\n text-transform: uppercase;\n letter-spacing: var(--letter-spacing-wide);\n margin-bottom: var(--space-1);\n }\n}\n"],"mappings":";AAIA,IAAA,6BAAe;CAAA,SAAQ;CAAA,eAAA;CAAA"}
|
package/dist/select/parts.js
CHANGED
package/dist/select/select.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ReactNode } from "react";
|
|
2
1
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
3
|
import styles from "./select.module.css";
|
|
4
4
|
|
|
5
5
|
//#region src/select/select.d.ts
|
|
@@ -13,19 +13,32 @@ interface SelectGroup {
|
|
|
13
13
|
options: SelectOption[];
|
|
14
14
|
}
|
|
15
15
|
interface SelectProps {
|
|
16
|
+
/** Currently selected value (controlled). */
|
|
16
17
|
value?: string;
|
|
18
|
+
/** Initially selected value (uncontrolled). */
|
|
17
19
|
defaultValue?: string;
|
|
18
|
-
/** `eventDetails` is the base-ui event details object. Value may be null when cleared. */
|
|
20
|
+
/** Called when the selection changes. `eventDetails` is the base-ui event details object. Value may be null when cleared. */
|
|
19
21
|
onValueChange?: (value: string | null, eventDetails: unknown) => void;
|
|
22
|
+
/** Prevent interaction. */
|
|
20
23
|
disabled?: boolean;
|
|
24
|
+
/** Mark the field as required for form validation. */
|
|
21
25
|
required?: boolean;
|
|
26
|
+
/** HTML name attribute for form submission. */
|
|
22
27
|
name?: string;
|
|
28
|
+
/** Text shown when no value is selected. */
|
|
23
29
|
placeholder?: string;
|
|
30
|
+
/** Flat list of options (use `groups` for grouped options). */
|
|
24
31
|
options?: SelectOption[];
|
|
32
|
+
/** Grouped options with optional section labels. */
|
|
25
33
|
groups?: SelectGroup[];
|
|
26
34
|
className?: string;
|
|
35
|
+
/** Override the auto-generated element id. */
|
|
27
36
|
id?: string;
|
|
28
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Dropdown select with keyboard navigation, grouping, and search. Pass
|
|
40
|
+
* `options` for a flat list or `groups` for sections with optional labels.
|
|
41
|
+
*/
|
|
29
42
|
declare function Select({
|
|
30
43
|
placeholder,
|
|
31
44
|
options,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","names":[],"sources":["../../src/select/select.tsx"],"mappings":";;;;;UAIiB,YAAA;EACf,KAAA;EACA,KAAA,EAAO,SAAA;EACP,QAAA;AAAA;AAAA,UAGe,WAAA;EACf,KAAA,GAAQ,SAAA;EACR,OAAA,EAAS,YAAA;AAAA;AAAA,UAGM,WAAA;
|
|
1
|
+
{"version":3,"file":"select.d.ts","names":[],"sources":["../../src/select/select.tsx"],"mappings":";;;;;UAIiB,YAAA;EACf,KAAA;EACA,KAAA,EAAO,SAAA;EACP,QAAA;AAAA;AAAA,UAGe,WAAA;EACf,KAAA,GAAQ,SAAA;EACR,OAAA,EAAS,YAAA;AAAA;AAAA,UAGM,WAAA;EARf;EAUA,KAAA;EAVQ;EAYR,YAAA;EAT0B;EAW1B,aAAA,IAAiB,KAAA,iBAAsB,YAAA;EATlB;EAWrB,QAAA;EAZQ;EAcR,QAAA;EAbS;EAeT,IAAA;EAfqB;EAiBrB,WAAA;EAd0B;EAgB1B,OAAA,GAAU,YAAA;EAEU;EAApB,MAAA,GAAS,WAAA;EACT,SAAA;EAbA;EAeA,EAAA;AAAA;;;;;iBAkCc,MAAA,CAAA;EAAS,WAAA;EAAyB,OAAA;EAAS,MAAA;EAAQ,SAAA;EAAW,aAAA;EAAe,KAAA;EAAO,YAAA;EAAA,GAAiB;AAAA,GAAS,WAAA,GAAW,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
package/dist/select/select.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import select_module_default from "./select.module.js";
|
|
2
|
-
import { useMemo } from "react";
|
|
3
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo } from "react";
|
|
4
4
|
import { Select } from "@base-ui/react/select";
|
|
5
5
|
//#region src/select/select.tsx
|
|
6
6
|
function ChevronIcon() {
|
|
@@ -45,6 +45,10 @@ function SelectItem({ option }) {
|
|
|
45
45
|
})]
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Dropdown select with keyboard navigation, grouping, and search. Pass
|
|
50
|
+
* `options` for a flat list or `groups` for sections with optional labels.
|
|
51
|
+
*/
|
|
48
52
|
function Select$1({ placeholder = "Select…", options, groups, className, onValueChange, value, defaultValue, ...props }) {
|
|
49
53
|
const allOptions = useMemo(() => [...options ?? [], ...groups?.flatMap((g) => g.options) ?? []], [options, groups]);
|
|
50
54
|
return /* @__PURE__ */ jsxs(Select.Root, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.js","names":["BaseSelect","styles","Select"],"sources":["../../src/select/select.tsx"],"sourcesContent":["import { useMemo, type ReactNode } from \"react\";\nimport { Select as BaseSelect } from \"@base-ui/react/select\";\nimport styles from \"./select.module.css\";\n\nexport interface SelectOption {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SelectGroup {\n label?: ReactNode;\n options: SelectOption[];\n}\n\nexport interface SelectProps {\n value?: string;\n defaultValue?: string;\n /** `eventDetails` is the base-ui event details object. Value may be null when cleared. */\n onValueChange?: (value: string | null, eventDetails: unknown) => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n placeholder?: string;\n options?: SelectOption[];\n groups?: SelectGroup[];\n className?: string;\n id?: string;\n}\n\nfunction ChevronIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.5 4.5L6 8L9.5 4.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M2 6L4.5 8.5L10 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nfunction SelectItem({ option }: { option: SelectOption }) {\n return (\n <BaseSelect.Item className={styles.item} value={option.value} disabled={option.disabled}>\n <BaseSelect.ItemText>{option.label}</BaseSelect.ItemText>\n <BaseSelect.ItemIndicator className={styles[\"item-indicator\"]}>\n <CheckIcon />\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n}\n\nexport function Select({ placeholder = \"Select…\", options, groups, className, onValueChange, value, defaultValue, ...props }: SelectProps) {\n const allOptions = useMemo(() => [...(options ?? []), ...(groups?.flatMap((g) => g.options) ?? [])], [options, groups]);\n\n return (\n <BaseSelect.Root onValueChange={onValueChange as never} value={value} defaultValue={defaultValue} {...props}>\n <BaseSelect.Trigger className={`${styles.trigger} ${className ?? \"\"}`}>\n <BaseSelect.Value className={styles[\"trigger-value\"]} placeholder={placeholder}>\n {(currentValue: string | null) => {\n if (!currentValue) return placeholder;\n const match = allOptions.find((o) => o.value === currentValue);\n return match ? match.label : currentValue;\n }}\n </BaseSelect.Value>\n <span className={styles[\"trigger-icon\"]}>\n <ChevronIcon />\n </span>\n </BaseSelect.Trigger>\n <BaseSelect.Portal>\n <BaseSelect.Positioner className={styles.positioner} sideOffset={4}>\n <BaseSelect.Popup className={styles.popup}>\n <BaseSelect.List>\n {options?.map((opt) => (\n <SelectItem key={opt.value} option={opt} />\n ))}\n {groups?.map((group, i) => (\n <BaseSelect.Group key={i}>\n {group.label && <BaseSelect.GroupLabel className={styles[\"group-label\"]}>{group.label}</BaseSelect.GroupLabel>}\n {group.options.map((opt) => (\n <SelectItem key={opt.value} option={opt} />\n ))}\n {i < (groups?.length ?? 0) - 1 && <BaseSelect.Separator className={styles.separator} />}\n </BaseSelect.Group>\n ))}\n </BaseSelect.List>\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n </BaseSelect.Root>\n );\n}\nexport { styles as SelectStyles };\n"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"select.js","names":["BaseSelect","styles","Select"],"sources":["../../src/select/select.tsx"],"sourcesContent":["import { useMemo, type ReactNode } from \"react\";\nimport { Select as BaseSelect } from \"@base-ui/react/select\";\nimport styles from \"./select.module.css\";\n\nexport interface SelectOption {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SelectGroup {\n label?: ReactNode;\n options: SelectOption[];\n}\n\nexport interface SelectProps {\n /** Currently selected value (controlled). */\n value?: string;\n /** Initially selected value (uncontrolled). */\n defaultValue?: string;\n /** Called when the selection changes. `eventDetails` is the base-ui event details object. Value may be null when cleared. */\n onValueChange?: (value: string | null, eventDetails: unknown) => void;\n /** Prevent interaction. */\n disabled?: boolean;\n /** Mark the field as required for form validation. */\n required?: boolean;\n /** HTML name attribute for form submission. */\n name?: string;\n /** Text shown when no value is selected. */\n placeholder?: string;\n /** Flat list of options (use `groups` for grouped options). */\n options?: SelectOption[];\n /** Grouped options with optional section labels. */\n groups?: SelectGroup[];\n className?: string;\n /** Override the auto-generated element id. */\n id?: string;\n}\n\nfunction ChevronIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.5 4.5L6 8L9.5 4.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M2 6L4.5 8.5L10 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nfunction SelectItem({ option }: { option: SelectOption }) {\n return (\n <BaseSelect.Item className={styles.item} value={option.value} disabled={option.disabled}>\n <BaseSelect.ItemText>{option.label}</BaseSelect.ItemText>\n <BaseSelect.ItemIndicator className={styles[\"item-indicator\"]}>\n <CheckIcon />\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n}\n\n/**\n * Dropdown select with keyboard navigation, grouping, and search. Pass\n * `options` for a flat list or `groups` for sections with optional labels.\n */\nexport function Select({ placeholder = \"Select…\", options, groups, className, onValueChange, value, defaultValue, ...props }: SelectProps) {\n const allOptions = useMemo(() => [...(options ?? []), ...(groups?.flatMap((g) => g.options) ?? [])], [options, groups]);\n\n return (\n <BaseSelect.Root onValueChange={onValueChange as never} value={value} defaultValue={defaultValue} {...props}>\n <BaseSelect.Trigger className={`${styles.trigger} ${className ?? \"\"}`}>\n <BaseSelect.Value className={styles[\"trigger-value\"]} placeholder={placeholder}>\n {(currentValue: string | null) => {\n if (!currentValue) return placeholder;\n const match = allOptions.find((o) => o.value === currentValue);\n return match ? match.label : currentValue;\n }}\n </BaseSelect.Value>\n <span className={styles[\"trigger-icon\"]}>\n <ChevronIcon />\n </span>\n </BaseSelect.Trigger>\n <BaseSelect.Portal>\n <BaseSelect.Positioner className={styles.positioner} sideOffset={4}>\n <BaseSelect.Popup className={styles.popup}>\n <BaseSelect.List>\n {options?.map((opt) => (\n <SelectItem key={opt.value} option={opt} />\n ))}\n {groups?.map((group, i) => (\n <BaseSelect.Group key={i}>\n {group.label && <BaseSelect.GroupLabel className={styles[\"group-label\"]}>{group.label}</BaseSelect.GroupLabel>}\n {group.options.map((opt) => (\n <SelectItem key={opt.value} option={opt} />\n ))}\n {i < (groups?.length ?? 0) - 1 && <BaseSelect.Separator className={styles.separator} />}\n </BaseSelect.Group>\n ))}\n </BaseSelect.List>\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n </BaseSelect.Root>\n );\n}\nexport { styles as SelectStyles };\n"],"mappings":";;;;;AAuCA,SAAS,cAAc;AACrB,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,OAAM;YAChE,oBAAC,QAAD;GAAM,GAAE;GAAuB,QAAO;GAAe,aAAY;GAAM,eAAc;GAAQ,gBAAe;GAAU,CAAA;EAClH,CAAA;;AAIV,SAAS,YAAY;AACnB,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;YACnD,oBAAC,QAAD;GAAM,GAAE;GAAoB,QAAO;GAAe,aAAY;GAAM,eAAc;GAAQ,gBAAe;GAAU,CAAA;EAC/G,CAAA;;AAIV,SAAS,WAAW,EAAE,UAAoC;AACxD,QACE,qBAACA,OAAW,MAAZ;EAAiB,WAAWC,sBAAO;EAAM,OAAO,OAAO;EAAO,UAAU,OAAO;YAA/E,CACE,oBAACD,OAAW,UAAZ,EAAA,UAAsB,OAAO,OAA4B,CAAA,EACzD,oBAACA,OAAW,eAAZ;GAA0B,WAAWC,sBAAO;aAC1C,oBAAC,WAAD,EAAa,CAAA;GACY,CAAA,CACX;;;;;;;AAQtB,SAAgBC,SAAO,EAAE,cAAc,WAAW,SAAS,QAAQ,WAAW,eAAe,OAAO,cAAc,GAAG,SAAsB;CACzI,MAAM,aAAa,cAAc,CAAC,GAAI,WAAW,EAAE,EAAG,GAAI,QAAQ,SAAS,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAE,EAAE,CAAC,SAAS,OAAO,CAAC;AAEvH,QACE,qBAACF,OAAW,MAAZ;EAAgC;EAA+B;EAAqB;EAAc,GAAI;YAAtG,CACE,qBAACA,OAAW,SAAZ;GAAoB,WAAW,GAAGC,sBAAO,QAAQ,GAAG,aAAa;aAAjE,CACE,oBAACD,OAAW,OAAZ;IAAkB,WAAWC,sBAAO;IAA+B;eAC/D,iBAAgC;AAChC,SAAI,CAAC,aAAc,QAAO;KAC1B,MAAM,QAAQ,WAAW,MAAM,MAAM,EAAE,UAAU,aAAa;AAC9D,YAAO,QAAQ,MAAM,QAAQ;;IAEd,CAAA,EACnB,oBAAC,QAAD;IAAM,WAAWA,sBAAO;cACtB,oBAAC,aAAD,EAAe,CAAA;IACV,CAAA,CACY;MACrB,oBAACD,OAAW,QAAZ,EAAA,UACE,oBAACA,OAAW,YAAZ;GAAuB,WAAWC,sBAAO;GAAY,YAAY;aAC/D,oBAACD,OAAW,OAAZ;IAAkB,WAAWC,sBAAO;cAClC,qBAACD,OAAW,MAAZ,EAAA,UAAA,CACG,SAAS,KAAK,QACb,oBAAC,YAAD,EAA4B,QAAQ,KAAO,EAA1B,IAAI,MAAsB,CAC3C,EACD,QAAQ,KAAK,OAAO,MACnB,qBAACA,OAAW,OAAZ,EAAA,UAAA;KACG,MAAM,SAAS,oBAACA,OAAW,YAAZ;MAAuB,WAAWC,sBAAO;gBAAiB,MAAM;MAA8B,CAAA;KAC7G,MAAM,QAAQ,KAAK,QAClB,oBAAC,YAAD,EAA4B,QAAQ,KAAO,EAA1B,IAAI,MAAsB,CAC3C;KACD,KAAK,QAAQ,UAAU,KAAK,KAAK,oBAACD,OAAW,WAAZ,EAAsB,WAAWC,sBAAO,WAAa,CAAA;KACtE,EAAA,EANI,EAMJ,CACnB,CACc,EAAA,CAAA;IACD,CAAA;GACG,CAAA,EACN,CAAA,CACJ"}
|
|
@@ -10,6 +10,10 @@ interface SeparatorProps extends Omit<BaseSeparatorProps, "className"> {
|
|
|
10
10
|
orientation?: "horizontal" | "vertical";
|
|
11
11
|
className?: string;
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* A semantic divider accessible to screen readers. Renders a horizontal
|
|
15
|
+
* line by default; switch to vertical for inline layouts.
|
|
16
|
+
*/
|
|
13
17
|
declare const Separator$1: react.ForwardRefExoticComponent<SeparatorProps & react.RefAttributes<HTMLDivElement>>;
|
|
14
18
|
//#endregion
|
|
15
19
|
export { Separator$1 as Separator, SeparatorProps, styles };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"separator.d.ts","names":[],"sources":["../../src/separator/separator.tsx"],"mappings":";;;;;;KAKK,kBAAA,GAAqB,wBAAA,QAAgC,SAAA;AAAA,UAEzC,cAAA,SAAuB,IAAA,CAAK,kBAAA;;EAE3C,WAAA;EACA,SAAA;AAAA
|
|
1
|
+
{"version":3,"file":"separator.d.ts","names":[],"sources":["../../src/separator/separator.tsx"],"mappings":";;;;;;KAKK,kBAAA,GAAqB,wBAAA,QAAgC,SAAA;AAAA,UAEzC,cAAA,SAAuB,IAAA,CAAK,kBAAA;;EAE3C,WAAA;EACA,SAAA;AAAA;;;AAHF;;cAUa,WAAA,EAAS,KAAA,CAAA,yBAAA,CAAA,cAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import separator_module_default from "./separator.module.js";
|
|
2
|
-
import { forwardRef } from "react";
|
|
3
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from "react";
|
|
4
4
|
import { Separator } from "@base-ui/react/separator";
|
|
5
5
|
//#region src/separator/separator.tsx
|
|
6
|
+
/**
|
|
7
|
+
* A semantic divider accessible to screen readers. Renders a horizontal
|
|
8
|
+
* line by default; switch to vertical for inline layouts.
|
|
9
|
+
*/
|
|
6
10
|
const Separator$1 = forwardRef(function Separator$2({ className, orientation = "horizontal", ...props }, ref) {
|
|
7
11
|
return /* @__PURE__ */ jsx(Separator, {
|
|
8
12
|
ref,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"separator.js","names":["Separator","BaseSeparator","styles"],"sources":["../../src/separator/separator.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ComponentRef } from \"react\";\nimport { Separator as BaseSeparator } from \"@base-ui/react/separator\";\nimport styles from \"./separator.module.css\";\n\ntype BaseSeparatorProps = ComponentPropsWithoutRef<typeof BaseSeparator>;\n\nexport interface SeparatorProps extends Omit<BaseSeparatorProps, \"className\"> {\n /** @default \"horizontal\" */\n orientation?: \"horizontal\" | \"vertical\";\n className?: string;\n}\n\nexport const Separator = forwardRef<ComponentRef<typeof BaseSeparator>, SeparatorProps>(function Separator(\n { className, orientation = \"horizontal\", ...props },\n ref,\n) {\n return <BaseSeparator ref={ref} orientation={orientation} className={`${styles.separator} ${className ?? \"\"}`} {...props} />;\n});\nexport { styles as SeparatorStyles };\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"separator.js","names":["Separator","BaseSeparator","styles"],"sources":["../../src/separator/separator.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ComponentRef } from \"react\";\nimport { Separator as BaseSeparator } from \"@base-ui/react/separator\";\nimport styles from \"./separator.module.css\";\n\ntype BaseSeparatorProps = ComponentPropsWithoutRef<typeof BaseSeparator>;\n\nexport interface SeparatorProps extends Omit<BaseSeparatorProps, \"className\"> {\n /** @default \"horizontal\" */\n orientation?: \"horizontal\" | \"vertical\";\n className?: string;\n}\n\n/**\n * A semantic divider accessible to screen readers. Renders a horizontal\n * line by default; switch to vertical for inline layouts.\n */\nexport const Separator = forwardRef<ComponentRef<typeof BaseSeparator>, SeparatorProps>(function Separator(\n { className, orientation = \"horizontal\", ...props },\n ref,\n) {\n return <BaseSeparator ref={ref} orientation={orientation} className={`${styles.separator} ${className ?? \"\"}`} {...props} />;\n});\nexport { styles as SeparatorStyles };\n"],"mappings":";;;;;;;;;AAiBA,MAAaA,cAAY,WAA+D,SAASA,YAC/F,EAAE,WAAW,cAAc,cAAc,GAAG,SAC5C,KACA;AACA,QAAO,oBAACC,WAAD;EAAoB;EAAkB;EAAa,WAAW,GAAGC,yBAAO,UAAU,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EAC5H"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
//#region src/shared/PopupArrow.tsx
|
|
3
|
+
function PopupArrow({ fillClass, seamClass }) {
|
|
4
|
+
return /* @__PURE__ */ jsxs("svg", {
|
|
5
|
+
width: "20",
|
|
6
|
+
height: "10",
|
|
7
|
+
viewBox: "0 0 20 10",
|
|
8
|
+
fill: "none",
|
|
9
|
+
"aria-hidden": true,
|
|
10
|
+
children: [/* @__PURE__ */ jsx("path", {
|
|
11
|
+
d: "M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z",
|
|
12
|
+
className: fillClass
|
|
13
|
+
}), /* @__PURE__ */ jsx("path", {
|
|
14
|
+
d: "M10.3333 3.34539L5.47654 7.71648C4.55842 8.54279 3.36693 9 2.13172 9H0V8H2.13172C3.11989 8 4.07308 7.63423 4.80758 6.97318L9.66437 2.60207C10.0447 2.25979 10.622 2.2598 11.0023 2.60207L15.8591 6.97318C16.5936 7.63423 17.5468 8 18.5349 8H20V9H18.5349C17.2998 9 16.1083 8.54278 15.1901 7.71648L10.3333 3.34539Z",
|
|
15
|
+
className: seamClass
|
|
16
|
+
})]
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { PopupArrow };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=PopupArrow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PopupArrow.js","names":[],"sources":["../../src/shared/PopupArrow.tsx"],"sourcesContent":["/**\n * Shared arrow SVG used by Menu and Popover.\n *\n * Two paths:\n * 1. Fill — the arrow body, matches the popup surface colour.\n * 2. Seam — a thin strip in the border colour at the base, covering\n * the popup border at the junction so it doesn't bleed through.\n *\n * All CSS classes come from the importing component's own CSS module\n * so the rules are bundled into the component's CSS file, not a\n * separate shared chunk that consumers would need to import separately.\n *\n * @example\n * ```tsx\n * <BaseMenu.Arrow className={styles.arrow}>\n * <PopupArrow fillClass={styles[\"arrow-fill\"]!} seamClass={styles[\"arrow-seam\"]!} />\n * </BaseMenu.Arrow>\n * ```\n */\n\ninterface PopupArrowProps {\n fillClass: string;\n seamClass: string;\n}\n\nexport function PopupArrow({ fillClass, seamClass }: PopupArrowProps) {\n return (\n <svg width=\"20\" height=\"10\" viewBox=\"0 0 20 10\" fill=\"none\" aria-hidden>\n {/* Body — surface colour */}\n <path\n d=\"M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z\"\n className={fillClass}\n />\n {/* Seam — border colour strip at the base, covers the popup border at the junction */}\n <path\n d=\"M10.3333 3.34539L5.47654 7.71648C4.55842 8.54279 3.36693 9 2.13172 9H0V8H2.13172C3.11989 8 4.07308 7.63423 4.80758 6.97318L9.66437 2.60207C10.0447 2.25979 10.622 2.2598 11.0023 2.60207L15.8591 6.97318C16.5936 7.63423 17.5468 8 18.5349 8H20V9H18.5349C17.2998 9 16.1083 8.54278 15.1901 7.71648L10.3333 3.34539Z\"\n className={seamClass}\n />\n </svg>\n );\n}\n"],"mappings":";;AAyBA,SAAgB,WAAW,EAAE,WAAW,aAA8B;AACpE,QACE,qBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,eAAA;YAA5D,CAEE,oBAAC,QAAD;GACE,GAAE;GACF,WAAW;GACX,CAAA,EAEF,oBAAC,QAAD;GACE,GAAE;GACF,WAAW;GACX,CAAA,CACE"}
|