@apostel/bedrock 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +216 -0
- package/dist/accessible-icon/parts.d.ts +16 -0
- package/dist/accessible-icon/parts.d.ts.map +1 -0
- package/dist/accessible-icon/parts.js +24 -0
- package/dist/accessible-icon/parts.js.map +1 -0
- package/dist/accordion/controlled-root.d.ts +19 -0
- package/dist/accordion/controlled-root.d.ts.map +1 -0
- package/dist/accordion/controlled-root.js +53 -0
- package/dist/accordion/controlled-root.js.map +1 -0
- package/dist/accordion/parts.d.ts +35 -0
- package/dist/accordion/parts.d.ts.map +1 -0
- package/dist/accordion/parts.js +52 -0
- package/dist/accordion/parts.js.map +1 -0
- package/dist/accordion/root.d.ts +24 -0
- package/dist/accordion/root.d.ts.map +1 -0
- package/dist/accordion/root.js +45 -0
- package/dist/accordion/root.js.map +1 -0
- package/dist/accordion/shared.d.ts +23 -0
- package/dist/accordion/shared.d.ts.map +1 -0
- package/dist/accordion/shared.js +16 -0
- package/dist/accordion/shared.js.map +1 -0
- package/dist/alert-dialog/parts.d.ts +16 -0
- package/dist/alert-dialog/parts.d.ts.map +1 -0
- package/dist/alert-dialog/parts.js +20 -0
- package/dist/alert-dialog/parts.js.map +1 -0
- package/dist/anchor.d.ts +27 -0
- package/dist/anchor.d.ts.map +1 -0
- package/dist/anchor.js +70 -0
- package/dist/anchor.js.map +1 -0
- package/dist/aspect-ratio/parts.d.ts +16 -0
- package/dist/aspect-ratio/parts.d.ts.map +1 -0
- package/dist/aspect-ratio/parts.js +15 -0
- package/dist/aspect-ratio/parts.js.map +1 -0
- package/dist/avatar/parts.d.ts +23 -0
- package/dist/avatar/parts.d.ts.map +1 -0
- package/dist/avatar/parts.js +51 -0
- package/dist/avatar/parts.js.map +1 -0
- package/dist/bedrock.css +64 -0
- package/dist/capabilities.d.ts +25 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +40 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/checkbox/controlled-root.d.ts +18 -0
- package/dist/checkbox/controlled-root.d.ts.map +1 -0
- package/dist/checkbox/controlled-root.js +28 -0
- package/dist/checkbox/controlled-root.js.map +1 -0
- package/dist/checkbox/parts.d.ts +29 -0
- package/dist/checkbox/parts.d.ts.map +1 -0
- package/dist/checkbox/parts.js +42 -0
- package/dist/checkbox/parts.js.map +1 -0
- package/dist/client-render.d.ts +10 -0
- package/dist/client-render.d.ts.map +1 -0
- package/dist/client-render.js +14 -0
- package/dist/client-render.js.map +1 -0
- package/dist/collapsible/controlled-root.d.ts +17 -0
- package/dist/collapsible/controlled-root.d.ts.map +1 -0
- package/dist/collapsible/controlled-root.js +21 -0
- package/dist/collapsible/controlled-root.js.map +1 -0
- package/dist/collapsible/parts.d.ts +14 -0
- package/dist/collapsible/parts.d.ts.map +1 -0
- package/dist/collapsible/parts.js +24 -0
- package/dist/collapsible/parts.js.map +1 -0
- package/dist/collapsible/root.d.ts +16 -0
- package/dist/collapsible/root.d.ts.map +1 -0
- package/dist/collapsible/root.js +28 -0
- package/dist/collapsible/root.js.map +1 -0
- package/dist/collapsible/shared.d.ts +11 -0
- package/dist/collapsible/shared.d.ts.map +1 -0
- package/dist/collapsible/shared.js +26 -0
- package/dist/collapsible/shared.js.map +1 -0
- package/dist/compose-refs.d.ts +29 -0
- package/dist/compose-refs.d.ts.map +1 -0
- package/dist/compose-refs.js +67 -0
- package/dist/compose-refs.js.map +1 -0
- package/dist/context-menu/root.d.ts +17 -0
- package/dist/context-menu/root.d.ts.map +1 -0
- package/dist/context-menu/root.js +50 -0
- package/dist/context-menu/root.js.map +1 -0
- package/dist/controlled.d.ts +120 -0
- package/dist/controlled.d.ts.map +1 -0
- package/dist/controlled.js +91 -0
- package/dist/controlled.js.map +1 -0
- package/dist/create-controlled-root.d.ts +29 -0
- package/dist/create-controlled-root.d.ts.map +1 -0
- package/dist/create-controlled-root.js +92 -0
- package/dist/create-controlled-root.js.map +1 -0
- package/dist/dialog/controlled-root.d.ts +15 -0
- package/dist/dialog/controlled-root.d.ts.map +1 -0
- package/dist/dialog/controlled-root.js +21 -0
- package/dist/dialog/controlled-root.js.map +1 -0
- package/dist/dialog/parts.d.ts +18 -0
- package/dist/dialog/parts.d.ts.map +1 -0
- package/dist/dialog/parts.js +80 -0
- package/dist/dialog/parts.js.map +1 -0
- package/dist/dialog/root.d.ts +22 -0
- package/dist/dialog/root.d.ts.map +1 -0
- package/dist/dialog/root.js +39 -0
- package/dist/dialog/root.js.map +1 -0
- package/dist/dialog/shared.d.ts +32 -0
- package/dist/dialog/shared.d.ts.map +1 -0
- package/dist/dialog/shared.js +53 -0
- package/dist/dialog/shared.js.map +1 -0
- package/dist/dropdown-menu/controlled-root.d.ts +7 -0
- package/dist/dropdown-menu/controlled-root.d.ts.map +1 -0
- package/dist/dropdown-menu/controlled-root.js +13 -0
- package/dist/dropdown-menu/controlled-root.js.map +1 -0
- package/dist/dropdown-menu/root.d.ts +13 -0
- package/dist/dropdown-menu/root.d.ts.map +1 -0
- package/dist/dropdown-menu/root.js +22 -0
- package/dist/dropdown-menu/root.js.map +1 -0
- package/dist/hover-card/controlled-root.d.ts +9 -0
- package/dist/hover-card/controlled-root.d.ts.map +1 -0
- package/dist/hover-card/controlled-root.js +15 -0
- package/dist/hover-card/controlled-root.js.map +1 -0
- package/dist/hover-card/root.d.ts +13 -0
- package/dist/hover-card/root.d.ts.map +1 -0
- package/dist/hover-card/root.js +19 -0
- package/dist/hover-card/root.js.map +1 -0
- package/dist/index.d.ts +274 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +211 -0
- package/dist/index.js.map +1 -0
- package/dist/interest.d.ts +30 -0
- package/dist/interest.d.ts.map +1 -0
- package/dist/interest.js +94 -0
- package/dist/interest.js.map +1 -0
- package/dist/label/parts.d.ts +14 -0
- package/dist/label/parts.d.ts.map +1 -0
- package/dist/label/parts.js +21 -0
- package/dist/label/parts.js.map +1 -0
- package/dist/menu/parts.d.ts +64 -0
- package/dist/menu/parts.d.ts.map +1 -0
- package/dist/menu/parts.js +131 -0
- package/dist/menu/parts.js.map +1 -0
- package/dist/menu/shared.d.ts +7 -0
- package/dist/menu/shared.d.ts.map +1 -0
- package/dist/menu/shared.js +9 -0
- package/dist/menu/shared.js.map +1 -0
- package/dist/menubar/parts.d.ts +20 -0
- package/dist/menubar/parts.d.ts.map +1 -0
- package/dist/menubar/parts.js +34 -0
- package/dist/menubar/parts.js.map +1 -0
- package/dist/navigation-menu/parts.d.ts +28 -0
- package/dist/navigation-menu/parts.d.ts.map +1 -0
- package/dist/navigation-menu/parts.js +46 -0
- package/dist/navigation-menu/parts.js.map +1 -0
- package/dist/open-state.d.ts +23 -0
- package/dist/open-state.d.ts.map +1 -0
- package/dist/open-state.js +106 -0
- package/dist/open-state.js.map +1 -0
- package/dist/popover/controlled-root.d.ts +14 -0
- package/dist/popover/controlled-root.d.ts.map +1 -0
- package/dist/popover/controlled-root.js +17 -0
- package/dist/popover/controlled-root.js.map +1 -0
- package/dist/popover/parts.d.ts +27 -0
- package/dist/popover/parts.d.ts.map +1 -0
- package/dist/popover/parts.js +39 -0
- package/dist/popover/parts.js.map +1 -0
- package/dist/popover/root.d.ts +24 -0
- package/dist/popover/root.d.ts.map +1 -0
- package/dist/popover/root.js +24 -0
- package/dist/popover/root.js.map +1 -0
- package/dist/popover/shared.d.ts +22 -0
- package/dist/popover/shared.d.ts.map +1 -0
- package/dist/popover/shared.js +25 -0
- package/dist/popover/shared.js.map +1 -0
- package/dist/progress/parts.d.ts +25 -0
- package/dist/progress/parts.d.ts.map +1 -0
- package/dist/progress/parts.js +32 -0
- package/dist/progress/parts.js.map +1 -0
- package/dist/radio-group/controlled-root.d.ts +19 -0
- package/dist/radio-group/controlled-root.d.ts.map +1 -0
- package/dist/radio-group/controlled-root.js +29 -0
- package/dist/radio-group/controlled-root.js.map +1 -0
- package/dist/radio-group/parts.d.ts +36 -0
- package/dist/radio-group/parts.d.ts.map +1 -0
- package/dist/radio-group/parts.js +62 -0
- package/dist/radio-group/parts.js.map +1 -0
- package/dist/roving.d.ts +26 -0
- package/dist/roving.d.ts.map +1 -0
- package/dist/roving.js +124 -0
- package/dist/roving.js.map +1 -0
- package/dist/scroll-area/parts.d.ts +29 -0
- package/dist/scroll-area/parts.d.ts.map +1 -0
- package/dist/scroll-area/parts.js +44 -0
- package/dist/scroll-area/parts.js.map +1 -0
- package/dist/select/parts.d.ts +57 -0
- package/dist/select/parts.d.ts.map +1 -0
- package/dist/select/parts.js +76 -0
- package/dist/select/parts.js.map +1 -0
- package/dist/separator/parts.d.ts +14 -0
- package/dist/separator/parts.d.ts.map +1 -0
- package/dist/separator/parts.js +15 -0
- package/dist/separator/parts.js.map +1 -0
- package/dist/slider/parts.d.ts +32 -0
- package/dist/slider/parts.d.ts.map +1 -0
- package/dist/slider/parts.js +52 -0
- package/dist/slider/parts.js.map +1 -0
- package/dist/slot.d.ts +3 -0
- package/dist/slot.d.ts.map +1 -0
- package/dist/slot.js +49 -0
- package/dist/slot.js.map +1 -0
- package/dist/switch/parts.d.ts +21 -0
- package/dist/switch/parts.d.ts.map +1 -0
- package/dist/switch/parts.js +31 -0
- package/dist/switch/parts.js.map +1 -0
- package/dist/tabs/controlled-root.d.ts +11 -0
- package/dist/tabs/controlled-root.d.ts.map +1 -0
- package/dist/tabs/controlled-root.js +15 -0
- package/dist/tabs/controlled-root.js.map +1 -0
- package/dist/tabs/parts.d.ts +20 -0
- package/dist/tabs/parts.d.ts.map +1 -0
- package/dist/tabs/parts.js +42 -0
- package/dist/tabs/parts.js.map +1 -0
- package/dist/tabs/root.d.ts +15 -0
- package/dist/tabs/root.d.ts.map +1 -0
- package/dist/tabs/root.js +26 -0
- package/dist/tabs/root.js.map +1 -0
- package/dist/tabs/shared.d.ts +12 -0
- package/dist/tabs/shared.d.ts.map +1 -0
- package/dist/tabs/shared.js +11 -0
- package/dist/tabs/shared.js.map +1 -0
- package/dist/toast/parts.d.ts +40 -0
- package/dist/toast/parts.d.ts.map +1 -0
- package/dist/toast/parts.js +102 -0
- package/dist/toast/parts.js.map +1 -0
- package/dist/toggle/controlled-root.d.ts +9 -0
- package/dist/toggle/controlled-root.d.ts.map +1 -0
- package/dist/toggle/controlled-root.js +14 -0
- package/dist/toggle/controlled-root.js.map +1 -0
- package/dist/toggle/parts.d.ts +20 -0
- package/dist/toggle/parts.d.ts.map +1 -0
- package/dist/toggle/parts.js +29 -0
- package/dist/toggle/parts.js.map +1 -0
- package/dist/toggle-group/parts.d.ts +28 -0
- package/dist/toggle-group/parts.d.ts.map +1 -0
- package/dist/toggle-group/parts.js +57 -0
- package/dist/toggle-group/parts.js.map +1 -0
- package/dist/toolbar/parts.d.ts +22 -0
- package/dist/toolbar/parts.d.ts.map +1 -0
- package/dist/toolbar/parts.js +27 -0
- package/dist/toolbar/parts.js.map +1 -0
- package/dist/tooltip/controlled-root.d.ts +9 -0
- package/dist/tooltip/controlled-root.d.ts.map +1 -0
- package/dist/tooltip/controlled-root.js +15 -0
- package/dist/tooltip/controlled-root.js.map +1 -0
- package/dist/tooltip/parts.d.ts +23 -0
- package/dist/tooltip/parts.d.ts.map +1 -0
- package/dist/tooltip/parts.js +28 -0
- package/dist/tooltip/parts.js.map +1 -0
- package/dist/tooltip/root.d.ts +13 -0
- package/dist/tooltip/root.d.ts.map +1 -0
- package/dist/tooltip/root.js +17 -0
- package/dist/tooltip/root.js.map +1 -0
- package/dist/tooltip/shared.d.ts +13 -0
- package/dist/tooltip/shared.d.ts.map +1 -0
- package/dist/tooltip/shared.js +9 -0
- package/dist/tooltip/shared.js.map +1 -0
- package/dist/tooltip/use-controlled-interest-root.d.ts +19 -0
- package/dist/tooltip/use-controlled-interest-root.d.ts.map +1 -0
- package/dist/tooltip/use-controlled-interest-root.js +31 -0
- package/dist/tooltip/use-controlled-interest-root.js.map +1 -0
- package/dist/tooltip/use-interest-root.d.ts +16 -0
- package/dist/tooltip/use-interest-root.d.ts.map +1 -0
- package/dist/tooltip/use-interest-root.js +39 -0
- package/dist/tooltip/use-interest-root.js.map +1 -0
- package/dist/types.d.ts +55 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validate-element.d.ts +12 -0
- package/dist/validate-element.d.ts.map +1 -0
- package/dist/validate-element.js +21 -0
- package/dist/validate-element.js.map +1 -0
- package/dist/validate-trigger.d.ts +14 -0
- package/dist/validate-trigger.d.ts.map +1 -0
- package/dist/validate-trigger.js +59 -0
- package/dist/validate-trigger.js.map +1 -0
- package/dist/visually-hidden/parts.d.ts +12 -0
- package/dist/visually-hidden/parts.d.ts.map +1 -0
- package/dist/visually-hidden/parts.js +25 -0
- package/dist/visually-hidden/parts.js.map +1 -0
- package/package.json +81 -0
- package/skills/migrate-to-bedrock/SKILL.md +188 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ComponentPropsWithRef } from 'react';
|
|
2
|
+
import type { AsChildProps } from '../types.js';
|
|
3
|
+
export interface ScrollAreaProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
4
|
+
/** `auto` shows scrollbars only when there is something to scroll. */
|
|
5
|
+
type?: 'auto' | 'always' | 'hover';
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A scroll container. Radix rebuilds scrollbars out of divs because browsers
|
|
9
|
+
* used to disagree about styling them; `scrollbar-width` and `scrollbar-color`
|
|
10
|
+
* are now the standard way, and `::-webkit-scrollbar` remains for the parts they
|
|
11
|
+
* do not cover.
|
|
12
|
+
*
|
|
13
|
+
* What that costs: no custom scrollbar *elements*, so a design with a scrollbar
|
|
14
|
+
* that has its own hover animation or sits outside the box is a redesign. What
|
|
15
|
+
* it buys: momentum scrolling, overscroll behaviour, the scroll anchoring the
|
|
16
|
+
* browser does, and no wheel listeners.
|
|
17
|
+
*/
|
|
18
|
+
export declare function ScrollAreaRoot({ asChild, type, style, ...props }: ScrollAreaProps): import("react").JSX.Element;
|
|
19
|
+
export interface ScrollAreaViewportProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
20
|
+
}
|
|
21
|
+
/** Kept so Radix-shaped markup compiles; the root is already the viewport. */
|
|
22
|
+
export declare function ScrollAreaViewport({ asChild, ...props }: ScrollAreaViewportProps): import("react").JSX.Element;
|
|
23
|
+
export interface ScrollAreaScrollbarProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
24
|
+
}
|
|
25
|
+
/** Renders nothing — the scrollbar is the browser's. */
|
|
26
|
+
export declare function ScrollAreaScrollbar({ className }: ScrollAreaScrollbarProps): null;
|
|
27
|
+
export declare function ScrollAreaThumb(): null;
|
|
28
|
+
export declare function ScrollAreaCorner(): null;
|
|
29
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/scroll-area/parts.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAA8B,MAAM,OAAO,CAAA;AAE9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,MAAM,WAAW,eAAgB,SAAQ,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY;IACjF,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;CACnC;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,IAAa,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,+BAU1F;AAED,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY;CAAG;AAE9F,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,uBAAuB,+BAIhF;AAID,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY;CAAG;AAE/F,wDAAwD;AACxD,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,EAAE,wBAAwB,QAU1E;AAED,wBAAgB,eAAe,SAE9B;AAED,wBAAgB,gBAAgB,SAE/B"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Slot } from '../slot.js';
|
|
3
|
+
const SCROLLBAR = {
|
|
4
|
+
auto: 'auto',
|
|
5
|
+
always: 'scroll',
|
|
6
|
+
hover: 'auto',
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* A scroll container. Radix rebuilds scrollbars out of divs because browsers
|
|
10
|
+
* used to disagree about styling them; `scrollbar-width` and `scrollbar-color`
|
|
11
|
+
* are now the standard way, and `::-webkit-scrollbar` remains for the parts they
|
|
12
|
+
* do not cover.
|
|
13
|
+
*
|
|
14
|
+
* What that costs: no custom scrollbar *elements*, so a design with a scrollbar
|
|
15
|
+
* that has its own hover animation or sits outside the box is a redesign. What
|
|
16
|
+
* it buys: momentum scrolling, overscroll behaviour, the scroll anchoring the
|
|
17
|
+
* browser does, and no wheel listeners.
|
|
18
|
+
*/
|
|
19
|
+
export function ScrollAreaRoot({ asChild, type = 'auto', style, ...props }) {
|
|
20
|
+
const Part = asChild ? Slot : 'div';
|
|
21
|
+
return (_jsx(Part, { ...props, style: { overflow: SCROLLBAR[type] ?? 'auto', ...style }, "data-bedrock-scroll-area": "" }));
|
|
22
|
+
}
|
|
23
|
+
/** Kept so Radix-shaped markup compiles; the root is already the viewport. */
|
|
24
|
+
export function ScrollAreaViewport({ asChild, ...props }) {
|
|
25
|
+
const Part = asChild ? Slot : 'div';
|
|
26
|
+
return _jsx(Part, { ...props, "data-bedrock-scroll-area-viewport": "" });
|
|
27
|
+
}
|
|
28
|
+
let warned = false;
|
|
29
|
+
/** Renders nothing — the scrollbar is the browser's. */
|
|
30
|
+
export function ScrollAreaScrollbar({ className }) {
|
|
31
|
+
if (process.env.NODE_ENV !== 'production' && className && !warned) {
|
|
32
|
+
warned = true;
|
|
33
|
+
console.warn('[bedrock] ScrollArea.Scrollbar renders nothing — the scrollbar is the browser’s. ' +
|
|
34
|
+
'Use scrollbar-width / scrollbar-color, or ::-webkit-scrollbar, on ScrollArea.Root.');
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
export function ScrollAreaThumb() {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
export function ScrollAreaCorner() {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/scroll-area/parts.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAQ9B,MAAM,SAAS,GAA2B;IACxC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,MAAM;CACd,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAmB;IACzF,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IAEhD,OAAO,CACL,KAAC,IAAI,OACC,KAAK,EACT,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,GAAG,KAAK,EAAmB,8BAChD,EAAE,GAC3B,CACH,CAAA;AACH,CAAC;AAID,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAA2B;IAC/E,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IAEhD,OAAO,KAAC,IAAI,OAAK,KAAK,uCAAoC,EAAE,GAAG,CAAA;AACjE,CAAC;AAED,IAAI,MAAM,GAAG,KAAK,CAAA;AAIlB,wDAAwD;AACxD,MAAM,UAAU,mBAAmB,CAAC,EAAE,SAAS,EAA4B;IACzE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;QAClE,MAAM,GAAG,IAAI,CAAA;QACb,OAAO,CAAC,IAAI,CACV,mFAAmF;YACjF,oFAAoF,CACvF,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type ComponentPropsWithRef } from 'react';
|
|
2
|
+
import type { AsChildProps } from '../types.js';
|
|
3
|
+
export interface SelectRootProps extends Omit<ComponentPropsWithRef<'select'>, 'value' | 'defaultValue'>, AsChildProps {
|
|
4
|
+
defaultValue?: string;
|
|
5
|
+
value?: string;
|
|
6
|
+
onValueChange?(value: string): void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* A real `<select>`, made stylable by `appearance: base-select`.
|
|
10
|
+
*
|
|
11
|
+
* That is the whole primitive. Listbox semantics, typeahead, the mobile picker,
|
|
12
|
+
* form participation, `:open` — all of it is the element's, including the parts
|
|
13
|
+
* Radix has to rebuild and the parts it cannot (a native picker on a phone).
|
|
14
|
+
*
|
|
15
|
+
* The structure the customizable-select spec expects is the structure Radix
|
|
16
|
+
* already has, which is why the part names line up so well:
|
|
17
|
+
*
|
|
18
|
+
* <select> Select.Root
|
|
19
|
+
* <button> Select.Trigger
|
|
20
|
+
* <selectedcontent> Select.Value
|
|
21
|
+
* <option> Select.Item
|
|
22
|
+
*/
|
|
23
|
+
export declare function SelectRoot({ asChild, onValueChange, onChange, style, ...props }: SelectRootProps): import("react").JSX.Element;
|
|
24
|
+
export interface SelectTriggerProps extends ComponentPropsWithRef<'button'>, AsChildProps {
|
|
25
|
+
}
|
|
26
|
+
/** The in-select button. Only rendered as one under `appearance: base-select`. */
|
|
27
|
+
export declare function SelectTrigger({ asChild, style, ...props }: SelectTriggerProps): import("react").JSX.Element;
|
|
28
|
+
export interface SelectValueProps extends ComponentPropsWithRef<'span'>, AsChildProps {
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* `<selectedcontent>`, which mirrors the chosen option's markup — so an option
|
|
32
|
+
* with an icon and two lines of text shows both in the closed state without
|
|
33
|
+
* anyone duplicating it into a `Value` render prop.
|
|
34
|
+
*/
|
|
35
|
+
export declare function SelectValue({ asChild, ...props }: SelectValueProps): import("react").JSX.Element;
|
|
36
|
+
export interface SelectContentProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
37
|
+
}
|
|
38
|
+
/** The picker's box. It is the select's own popover, so nothing is portalled. */
|
|
39
|
+
export declare function SelectContent({ asChild, style, ...props }: SelectContentProps): import("react").JSX.Element;
|
|
40
|
+
export interface SelectItemProps extends ComponentPropsWithRef<'option'>, AsChildProps {
|
|
41
|
+
value: string;
|
|
42
|
+
}
|
|
43
|
+
export declare function SelectItem({ asChild, ...props }: SelectItemProps): import("react").JSX.Element;
|
|
44
|
+
export interface SelectItemTextProps extends ComponentPropsWithRef<'span'>, AsChildProps {
|
|
45
|
+
}
|
|
46
|
+
export declare function SelectItemText({ asChild, ...props }: SelectItemTextProps): import("react").JSX.Element;
|
|
47
|
+
export interface SelectItemIndicatorProps extends ComponentPropsWithRef<'span'>, AsChildProps {
|
|
48
|
+
}
|
|
49
|
+
/** Renders nothing — the tick is `::checkmark` on the selected option. */
|
|
50
|
+
export declare function SelectItemIndicator({ className }: SelectItemIndicatorProps): null;
|
|
51
|
+
export interface SelectGroupProps extends ComponentPropsWithRef<'optgroup'>, AsChildProps {
|
|
52
|
+
}
|
|
53
|
+
export declare function SelectGroup({ asChild, ...props }: SelectGroupProps): import("react").JSX.Element;
|
|
54
|
+
export interface SelectSeparatorProps extends ComponentPropsWithRef<'hr'>, AsChildProps {
|
|
55
|
+
}
|
|
56
|
+
export declare function SelectSeparator({ asChild, ...props }: SelectSeparatorProps): import("react").JSX.Element;
|
|
57
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/select/parts.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,qBAAqB,EAG3B,MAAM,OAAO,CAAA;AAEd,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAM5C,MAAM,WAAW,eACf,SAAQ,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC,EAAE,YAAY;IACrF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACpC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,+BAqBhG;AAED,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB,CAAC,QAAQ,CAAC,EAAE,YAAY;CAAG;AAE5F,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,kBAAkB,+BAI7E;AAED,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB,CAAC,MAAM,CAAC,EAAE,YAAY;CAAG;AAExF;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BAIlE;AAED,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY;CAAG;AAEzF,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,kBAAkB,+BAI7E;AAED,MAAM,WAAW,eAAgB,SAAQ,qBAAqB,CAAC,QAAQ,CAAC,EAAE,YAAY;IACpF,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,+BAIhE;AAED,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB,CAAC,MAAM,CAAC,EAAE,YAAY;CAAG;AAE3F,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,mBAAmB,+BAIxE;AAID,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB,CAAC,MAAM,CAAC,EAAE,YAAY;CAAG;AAEhG,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,EAAE,wBAAwB,QAS1E;AAED,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB,CAAC,UAAU,CAAC,EAAE,YAAY;CAAG;AAE5F,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BAIlE;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB,CAAC,IAAI,CAAC,EAAE,YAAY;CAAG;AAE1F,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,+BAI1E"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, } from 'react';
|
|
3
|
+
import { Slot } from '../slot.js';
|
|
4
|
+
/** csstype does not know `base-select` yet; the browser does. */
|
|
5
|
+
const BASE_SELECT = (style) => ({ appearance: 'base-select', ...style });
|
|
6
|
+
/**
|
|
7
|
+
* A real `<select>`, made stylable by `appearance: base-select`.
|
|
8
|
+
*
|
|
9
|
+
* That is the whole primitive. Listbox semantics, typeahead, the mobile picker,
|
|
10
|
+
* form participation, `:open` — all of it is the element's, including the parts
|
|
11
|
+
* Radix has to rebuild and the parts it cannot (a native picker on a phone).
|
|
12
|
+
*
|
|
13
|
+
* The structure the customizable-select spec expects is the structure Radix
|
|
14
|
+
* already has, which is why the part names line up so well:
|
|
15
|
+
*
|
|
16
|
+
* <select> Select.Root
|
|
17
|
+
* <button> Select.Trigger
|
|
18
|
+
* <selectedcontent> Select.Value
|
|
19
|
+
* <option> Select.Item
|
|
20
|
+
*/
|
|
21
|
+
export function SelectRoot({ asChild, onValueChange, onChange, style, ...props }) {
|
|
22
|
+
const Part = asChild ? Slot : 'select';
|
|
23
|
+
const handleChange = useCallback((event) => {
|
|
24
|
+
onChange?.(event);
|
|
25
|
+
onValueChange?.(event.currentTarget.value);
|
|
26
|
+
}, [onChange, onValueChange]);
|
|
27
|
+
return (_jsx(Part, { ...props,
|
|
28
|
+
// Opting in to the stylable form. Without support the declaration is
|
|
29
|
+
// dropped and this is an ordinary OS dropdown: accessible, unstylable.
|
|
30
|
+
style: BASE_SELECT(style), onChange: handleChange, "data-bedrock-select": "" }));
|
|
31
|
+
}
|
|
32
|
+
/** The in-select button. Only rendered as one under `appearance: base-select`. */
|
|
33
|
+
export function SelectTrigger({ asChild, style, ...props }) {
|
|
34
|
+
const Part = asChild ? Slot : 'button';
|
|
35
|
+
return _jsx(Part, { ...props, type: "button", style: BASE_SELECT(style), "data-bedrock-select-trigger": "" });
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* `<selectedcontent>`, which mirrors the chosen option's markup — so an option
|
|
39
|
+
* with an icon and two lines of text shows both in the closed state without
|
|
40
|
+
* anyone duplicating it into a `Value` render prop.
|
|
41
|
+
*/
|
|
42
|
+
export function SelectValue({ asChild, ...props }) {
|
|
43
|
+
const Part = asChild ? Slot : 'selectedcontent';
|
|
44
|
+
return _jsx(Part, { ...props, "data-bedrock-select-value": "" });
|
|
45
|
+
}
|
|
46
|
+
/** The picker's box. It is the select's own popover, so nothing is portalled. */
|
|
47
|
+
export function SelectContent({ asChild, style, ...props }) {
|
|
48
|
+
const Part = asChild ? Slot : 'div';
|
|
49
|
+
return _jsx(Part, { ...props, style: BASE_SELECT(style), "data-bedrock-select-content": "" });
|
|
50
|
+
}
|
|
51
|
+
export function SelectItem({ asChild, ...props }) {
|
|
52
|
+
const Part = asChild ? Slot : 'option';
|
|
53
|
+
return _jsx(Part, { ...props, "data-bedrock-select-item": "" });
|
|
54
|
+
}
|
|
55
|
+
export function SelectItemText({ asChild, ...props }) {
|
|
56
|
+
const Part = asChild ? Slot : 'span';
|
|
57
|
+
return _jsx(Part, { ...props, "data-bedrock-select-item-text": "" });
|
|
58
|
+
}
|
|
59
|
+
let warned = false;
|
|
60
|
+
/** Renders nothing — the tick is `::checkmark` on the selected option. */
|
|
61
|
+
export function SelectItemIndicator({ className }) {
|
|
62
|
+
if (process.env.NODE_ENV !== 'production' && className && !warned) {
|
|
63
|
+
warned = true;
|
|
64
|
+
console.warn('[bedrock] Select.ItemIndicator renders nothing — style option::checkmark instead.');
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
export function SelectGroup({ asChild, ...props }) {
|
|
69
|
+
const Part = asChild ? Slot : 'optgroup';
|
|
70
|
+
return _jsx(Part, { ...props, "data-bedrock-select-group": "" });
|
|
71
|
+
}
|
|
72
|
+
export function SelectSeparator({ asChild, ...props }) {
|
|
73
|
+
const Part = asChild ? Slot : 'hr';
|
|
74
|
+
return _jsx(Part, { ...props, "data-bedrock-select-separator": "" });
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/select/parts.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ComponentPropsWithRef } from 'react';
|
|
2
|
+
import type { AsChildProps } from '../types.js';
|
|
3
|
+
export interface SeparatorProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
4
|
+
orientation?: 'horizontal' | 'vertical';
|
|
5
|
+
/** A line that is only visual. Removes it from the accessibility tree. */
|
|
6
|
+
decorative?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* `<hr>` would be the native element, but it cannot be vertical without
|
|
10
|
+
* fighting its own UA styles, and a decorative separator has to leave the
|
|
11
|
+
* accessibility tree entirely — which `role="none"` on a div does cleanly.
|
|
12
|
+
*/
|
|
13
|
+
export declare function SeparatorRoot({ asChild, orientation, decorative, ...props }: SeparatorProps): import("react").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/separator/parts.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAe,MAAM,OAAO,CAAA;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,MAAM,WAAW,cAAe,SAAQ,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY;IAChF,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACvC,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,WAA0B,EAC1B,UAAkB,EAClB,GAAG,KAAK,EACT,EAAE,cAAc,+BAchB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Slot } from '../slot.js';
|
|
3
|
+
/**
|
|
4
|
+
* `<hr>` would be the native element, but it cannot be vertical without
|
|
5
|
+
* fighting its own UA styles, and a decorative separator has to leave the
|
|
6
|
+
* accessibility tree entirely — which `role="none"` on a div does cleanly.
|
|
7
|
+
*/
|
|
8
|
+
export function SeparatorRoot({ asChild, orientation = 'horizontal', decorative = false, ...props }) {
|
|
9
|
+
const Part = asChild ? Slot : 'div';
|
|
10
|
+
return (_jsx(Part, { ...props,
|
|
11
|
+
// `aria-orientation` is only meaningful on a real separator, and only
|
|
12
|
+
// vertical is worth stating: horizontal is the default.
|
|
13
|
+
role: decorative ? 'none' : 'separator', "aria-orientation": !decorative && orientation === 'vertical' ? 'vertical' : undefined, "data-orientation": orientation, "data-bedrock-separator": "" }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/separator/parts.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAS9B;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,EACP,WAAW,GAAG,YAAY,EAC1B,UAAU,GAAG,KAAK,EAClB,GAAG,KAAK,EACO;IACf,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IAEhD,OAAO,CACL,KAAC,IAAI,OACC,KAAK;QACT,sEAAsE;QACtE,wDAAwD;QACxD,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,sBACrB,CAAC,UAAU,IAAI,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,sBAClE,WAAW,4BACN,EAAE,GACzB,CACH,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type ComponentPropsWithRef } from 'react';
|
|
2
|
+
import type { AsChildProps } from '../types.js';
|
|
3
|
+
export interface SliderProps extends Omit<ComponentPropsWithRef<'input'>, 'type' | 'value' | 'defaultValue'>, AsChildProps {
|
|
4
|
+
defaultValue?: number;
|
|
5
|
+
value?: number;
|
|
6
|
+
min?: number;
|
|
7
|
+
max?: number;
|
|
8
|
+
step?: number;
|
|
9
|
+
orientation?: 'horizontal' | 'vertical';
|
|
10
|
+
onValueChange?(value: number): void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* An `<input type="range">`. Keyboard, `aria-valuenow`, page-up and page-down,
|
|
14
|
+
* touch, and the pointer capture that makes dragging work are all the element's.
|
|
15
|
+
*
|
|
16
|
+
* Radix implements every one of those. The cost of not doing so is real and
|
|
17
|
+
* named in the docs: this takes a single value, because a range input has one
|
|
18
|
+
* thumb and a two-thumb range has no native equivalent.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* `children` is accepted and dropped. Radix nests Track, Range and Thumb inside
|
|
22
|
+
* the root, and an `<input>` is a void element that React refuses to give
|
|
23
|
+
* children to — so the markup would not compile at all. Dropping them lets
|
|
24
|
+
* Radix-shaped code keep its shape while the element stays one element.
|
|
25
|
+
*/
|
|
26
|
+
export declare function SliderRoot({ asChild, children: _children, orientation, onValueChange, onChange, style, ...props }: SliderProps): import("react").JSX.Element;
|
|
27
|
+
export interface SliderPartProps extends ComponentPropsWithRef<'span'>, AsChildProps {
|
|
28
|
+
}
|
|
29
|
+
export declare function SliderTrack({ className }: SliderPartProps): null;
|
|
30
|
+
export declare function SliderRange({ className }: SliderPartProps): null;
|
|
31
|
+
export declare function SliderThumb({ className }: SliderPartProps): null;
|
|
32
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/slider/parts.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,qBAAqB,EAAoB,MAAM,OAAO,CAAA;AAEnG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,cAAc,CAAC,EAAE,YAAY;IAC7F,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACvC,aAAa,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACpC;AAED;;;;;;;GAOG;AACH;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,QAAQ,EAAE,SAAS,EACnB,WAA0B,EAC1B,aAAa,EACb,QAAQ,EACR,KAAK,EACL,GAAG,KAAK,EACT,EAAE,WAAW,+BAuBb;AAID,MAAM,WAAW,eAAgB,SAAQ,qBAAqB,CAAC,MAAM,CAAC,EAAE,YAAY;CAAG;AAmBvF,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,eAAe,QAEzD;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,eAAe,QAEzD;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,eAAe,QAEzD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
import { Slot } from '../slot.js';
|
|
4
|
+
/**
|
|
5
|
+
* An `<input type="range">`. Keyboard, `aria-valuenow`, page-up and page-down,
|
|
6
|
+
* touch, and the pointer capture that makes dragging work are all the element's.
|
|
7
|
+
*
|
|
8
|
+
* Radix implements every one of those. The cost of not doing so is real and
|
|
9
|
+
* named in the docs: this takes a single value, because a range input has one
|
|
10
|
+
* thumb and a two-thumb range has no native equivalent.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* `children` is accepted and dropped. Radix nests Track, Range and Thumb inside
|
|
14
|
+
* the root, and an `<input>` is a void element that React refuses to give
|
|
15
|
+
* children to — so the markup would not compile at all. Dropping them lets
|
|
16
|
+
* Radix-shaped code keep its shape while the element stays one element.
|
|
17
|
+
*/
|
|
18
|
+
export function SliderRoot({ asChild, children: _children, orientation = 'horizontal', onValueChange, onChange, style, ...props }) {
|
|
19
|
+
const Part = asChild ? Slot : 'input';
|
|
20
|
+
const handleChange = useCallback((event) => {
|
|
21
|
+
onChange?.(event);
|
|
22
|
+
onValueChange?.(event.currentTarget.valueAsNumber);
|
|
23
|
+
}, [onChange, onValueChange]);
|
|
24
|
+
return (_jsx(Part, { ...props, type: "range",
|
|
25
|
+
// A vertical range input is a writing mode, not a transform: the arrow
|
|
26
|
+
// keys and the drag direction follow it, which a rotation would break.
|
|
27
|
+
style: orientation === 'vertical' ? { writingMode: 'vertical-rl', ...style } : style, "data-orientation": orientation, onChange: handleChange, "data-bedrock-slider": "" }));
|
|
28
|
+
}
|
|
29
|
+
let warned = false;
|
|
30
|
+
/**
|
|
31
|
+
* Track, Range and Thumb all render nothing — an `<input>` has no children.
|
|
32
|
+
* `::-webkit-slider-runnable-track` and `::-webkit-slider-thumb` are the hooks,
|
|
33
|
+
* after `appearance: none`.
|
|
34
|
+
*/
|
|
35
|
+
function nothing(className, part) {
|
|
36
|
+
if (process.env.NODE_ENV !== 'production' && className && !warned) {
|
|
37
|
+
warned = true;
|
|
38
|
+
console.warn(`[bedrock] Slider.${part} renders nothing — an <input> has no children. ` +
|
|
39
|
+
'Style ::-webkit-slider-runnable-track and ::-webkit-slider-thumb on Slider.Root.');
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
export function SliderTrack({ className }) {
|
|
44
|
+
return nothing(className, 'Track');
|
|
45
|
+
}
|
|
46
|
+
export function SliderRange({ className }) {
|
|
47
|
+
return nothing(className, 'Range');
|
|
48
|
+
}
|
|
49
|
+
export function SliderThumb({ className }) {
|
|
50
|
+
return nothing(className, 'Thumb');
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/slider/parts.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAkE,MAAM,OAAO,CAAA;AACnG,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAc9B;;;;;;;GAOG;AACH;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EACP,QAAQ,EAAE,SAAS,EACnB,WAAW,GAAG,YAAY,EAC1B,aAAa,EACb,QAAQ,EACR,KAAK,EACL,GAAG,KAAK,EACI;IACZ,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAA;IAElD,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,KAAoC,EAAE,EAAE;QACvC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAA;QACjB,aAAa,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA;IACpD,CAAC,EACD,CAAC,QAAQ,EAAE,aAAa,CAAC,CAC1B,CAAA;IAED,OAAO,CACL,KAAC,IAAI,OACC,KAAK,EACT,IAAI,EAAC,OAAO;QACZ,uEAAuE;QACvE,uEAAuE;QACvE,KAAK,EAAE,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,sBAClE,WAAW,EAC7B,QAAQ,EAAE,YAAY,yBACF,EAAE,GACtB,CACH,CAAA;AACH,CAAC;AAED,IAAI,MAAM,GAAG,KAAK,CAAA;AAIlB;;;;GAIG;AACH,SAAS,OAAO,CAAC,SAA6B,EAAE,IAAY;IAC1D,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;QAClE,MAAM,GAAG,IAAI,CAAA;QACb,OAAO,CAAC,IAAI,CACV,oBAAoB,IAAI,iDAAiD;YACvE,kFAAkF,CACrF,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAmB;IACxD,OAAO,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAmB;IACxD,OAAO,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAmB;IACxD,OAAO,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AACpC,CAAC"}
|
package/dist/slot.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot.d.ts","sourceRoot":"","sources":["../src/slot.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAY,SAAS,EAAE,MAAM,SAAS,CAAA;AAuClD,wBAAgB,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,EAAE,SAAS,8FAazD"}
|
package/dist/slot.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { cloneElement, isValidElement } from 'react';
|
|
2
|
+
import { useComposedRefs } from './compose-refs.js';
|
|
3
|
+
/**
|
|
4
|
+
* Merges the props a part wanted to render onto the child it was handed.
|
|
5
|
+
*
|
|
6
|
+
* The child wins on plain values, because `asChild` exists so consumers can
|
|
7
|
+
* override what we would have rendered. The exceptions are the three props
|
|
8
|
+
* where losing one side silently breaks something: handlers both run, styles
|
|
9
|
+
* merge, class names concatenate.
|
|
10
|
+
*/
|
|
11
|
+
function mergeProps(slotProps, childProps) {
|
|
12
|
+
const merged = { ...slotProps, ...childProps };
|
|
13
|
+
for (const key of Object.keys(childProps)) {
|
|
14
|
+
const ours = slotProps[key];
|
|
15
|
+
const theirs = childProps[key];
|
|
16
|
+
if (/^on[A-Z]/.test(key)) {
|
|
17
|
+
if (typeof ours === 'function' && typeof theirs === 'function') {
|
|
18
|
+
// Child first, so ours can read `event.defaultPrevented` and stand down.
|
|
19
|
+
merged[key] = (...args) => {
|
|
20
|
+
;
|
|
21
|
+
theirs(...args);
|
|
22
|
+
ours(...args);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
else if (typeof ours === 'function') {
|
|
26
|
+
merged[key] = ours;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else if (key === 'style') {
|
|
30
|
+
merged[key] = { ...ours, ...theirs };
|
|
31
|
+
}
|
|
32
|
+
else if (key === 'className') {
|
|
33
|
+
merged[key] = [ours, theirs].filter(Boolean).join(' ');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return merged;
|
|
37
|
+
}
|
|
38
|
+
export function Slot({ children, ...slotProps }) {
|
|
39
|
+
if (!isValidElement(children)) {
|
|
40
|
+
throw new Error('[bedrock] asChild expects exactly one React element child.');
|
|
41
|
+
}
|
|
42
|
+
const childProps = children.props;
|
|
43
|
+
const merged = mergeProps(slotProps, childProps);
|
|
44
|
+
// Ours reads the node for tag validation and, under the controlled root, for
|
|
45
|
+
// event wiring; theirs must keep working regardless.
|
|
46
|
+
merged.ref = useComposedRefs(slotProps.ref, childProps.ref);
|
|
47
|
+
return cloneElement(children, merged);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=slot.js.map
|
package/dist/slot.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot.js","sourceRoot":"","sources":["../src/slot.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAY,MAAM,OAAO,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAKhD;;;;;;;GAOG;AACH,SAAS,UAAU,CAAC,SAAmB,EAAE,UAAoB;IAC3D,MAAM,MAAM,GAAa,EAAE,GAAG,SAAS,EAAE,GAAG,UAAU,EAAE,CAAA;IAExD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;QAC3B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;QAE9B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC/D,yEAAyE;gBACzE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;oBACnC,CAAC;oBAAC,MAAkB,CAAC,GAAG,IAAI,CAAC,CAC5B;oBAAC,IAAgB,CAAC,GAAG,IAAI,CAAC,CAAA;gBAC7B,CAAC,CAAA;YACH,CAAC;iBAAM,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;gBACtC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;YACpB,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAI,IAAe,EAAE,GAAI,MAAiB,EAAE,CAAA;QAC9D,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAa;IACxD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;IAC/E,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAiB,CAAA;IAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IAEhD,6EAA6E;IAC7E,qDAAqD;IACrD,MAAM,CAAC,GAAG,GAAG,eAAe,CAAC,SAAS,CAAC,GAAmB,EAAE,UAAU,CAAC,GAAmB,CAAC,CAAA;IAE3F,OAAO,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;AACvC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ComponentPropsWithRef } from 'react';
|
|
2
|
+
import type { AsChildProps } from '../types.js';
|
|
3
|
+
export interface SwitchProps extends Omit<ComponentPropsWithRef<'input'>, 'type' | 'checked'>, AsChildProps {
|
|
4
|
+
defaultChecked?: boolean;
|
|
5
|
+
onCheckedChange?(checked: boolean): void;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A checkbox with `role="switch"`, which is exactly what the ARIA pattern says
|
|
9
|
+
* a switch is: the same two-state control, announced as on/off rather than
|
|
10
|
+
* checked/unchecked.
|
|
11
|
+
*
|
|
12
|
+
* Everything else — form participation, the space bar, `:checked` — comes from
|
|
13
|
+
* the input, so the difference between this and Checkbox really is one
|
|
14
|
+
* attribute.
|
|
15
|
+
*/
|
|
16
|
+
export declare function SwitchRoot({ asChild, children: _children, onCheckedChange, onChange, ...props }: SwitchProps): import("react").JSX.Element;
|
|
17
|
+
export interface SwitchThumbProps extends ComponentPropsWithRef<'span'>, AsChildProps {
|
|
18
|
+
}
|
|
19
|
+
/** Renders nothing — the thumb is a pseudo-element on the input. */
|
|
20
|
+
export declare function SwitchThumb({ className }: SwitchThumbProps): null;
|
|
21
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/switch/parts.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,qBAAqB,EAAoB,MAAM,OAAO,CAAA;AAEnG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,YAAY;IAC9E,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;CACzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,QAAQ,EAAE,SAAS,EACnB,eAAe,EACf,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,WAAW,+BAcb;AAID,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB,CAAC,MAAM,CAAC,EAAE,YAAY;CAAG;AAExF,oEAAoE;AACpE,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,gBAAgB,QAU1D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
import { Slot } from '../slot.js';
|
|
4
|
+
/**
|
|
5
|
+
* A checkbox with `role="switch"`, which is exactly what the ARIA pattern says
|
|
6
|
+
* a switch is: the same two-state control, announced as on/off rather than
|
|
7
|
+
* checked/unchecked.
|
|
8
|
+
*
|
|
9
|
+
* Everything else — form participation, the space bar, `:checked` — comes from
|
|
10
|
+
* the input, so the difference between this and Checkbox really is one
|
|
11
|
+
* attribute.
|
|
12
|
+
*/
|
|
13
|
+
export function SwitchRoot({ asChild, children: _children, onCheckedChange, onChange, ...props }) {
|
|
14
|
+
const Part = asChild ? Slot : 'input';
|
|
15
|
+
const handleChange = useCallback((event) => {
|
|
16
|
+
onChange?.(event);
|
|
17
|
+
onCheckedChange?.(event.currentTarget.checked);
|
|
18
|
+
}, [onChange, onCheckedChange]);
|
|
19
|
+
return (_jsx(Part, { ...props, type: "checkbox", role: "switch", onChange: handleChange, "data-bedrock-switch": "" }));
|
|
20
|
+
}
|
|
21
|
+
let warned = false;
|
|
22
|
+
/** Renders nothing — the thumb is a pseudo-element on the input. */
|
|
23
|
+
export function SwitchThumb({ className }) {
|
|
24
|
+
if (process.env.NODE_ENV !== 'production' && className && !warned) {
|
|
25
|
+
warned = true;
|
|
26
|
+
console.warn('[bedrock] Switch.Thumb renders nothing — an <input> has no children. ' +
|
|
27
|
+
'Draw the thumb with ::before on Switch.Root and move it under :checked.');
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/switch/parts.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAkE,MAAM,OAAO,CAAA;AACnG,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAS9B;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EACP,QAAQ,EAAE,SAAS,EACnB,eAAe,EACf,QAAQ,EACR,GAAG,KAAK,EACI;IACZ,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAA;IAElD,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,KAAoC,EAAE,EAAE;QACvC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAA;QACjB,eAAe,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC,EACD,CAAC,QAAQ,EAAE,eAAe,CAAC,CAC5B,CAAA;IAED,OAAO,CACL,KAAC,IAAI,OAAK,KAAK,EAAE,IAAI,EAAC,UAAU,EAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,YAAY,yBAAsB,EAAE,GAAG,CACjG,CAAA;AACH,CAAC;AAED,IAAI,MAAM,GAAG,KAAK,CAAA;AAIlB,oEAAoE;AACpE,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAoB;IACzD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;QAClE,MAAM,GAAG,IAAI,CAAA;QACb,OAAO,CAAC,IAAI,CACV,uEAAuE;YACrE,yEAAyE,CAC5E,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ComponentPropsWithRef } from 'react';
|
|
2
|
+
import type { Orientation } from '../roving.js';
|
|
3
|
+
import type { AsChildProps } from '../types.js';
|
|
4
|
+
export interface ControlledTabsRootProps extends Omit<ComponentPropsWithRef<'div'>, 'defaultValue'>, AsChildProps {
|
|
5
|
+
value: string;
|
|
6
|
+
orientation?: Orientation;
|
|
7
|
+
onValueChange?: ((value: string) => void) | undefined;
|
|
8
|
+
}
|
|
9
|
+
/** `value` decides; selecting a tab asks and changes nothing on its own. */
|
|
10
|
+
export declare function TabsRoot({ asChild, children, value, orientation, onValueChange, ...props }: ControlledTabsRootProps): import("react").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=controlled-root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controlled-root.d.ts","sourceRoot":"","sources":["../../src/tabs/controlled-root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,qBAAqB,EAE3B,MAAM,OAAO,CAAA;AACd,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG5C,MAAM,WAAW,uBACf,SAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,EAAE,YAAY;IACxE,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;CACtD;AAED,4EAA4E;AAC5E,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,QAAQ,EACR,KAAK,EACL,WAA0B,EAC1B,aAAa,EACb,GAAG,KAAK,EACT,EAAE,uBAAuB,+BAqBzB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useId, useMemo, useRef, } from 'react';
|
|
3
|
+
import { Slot } from '../slot.js';
|
|
4
|
+
import { TabsContext } from './shared.js';
|
|
5
|
+
/** `value` decides; selecting a tab asks and changes nothing on its own. */
|
|
6
|
+
export function TabsRoot({ asChild, children, value, orientation = 'horizontal', onValueChange, ...props }) {
|
|
7
|
+
const baseId = useId();
|
|
8
|
+
const Part = asChild ? Slot : 'div';
|
|
9
|
+
const changeRef = useRef(onValueChange);
|
|
10
|
+
changeRef.current = onValueChange;
|
|
11
|
+
const select = useCallback((next) => changeRef.current?.(next), []);
|
|
12
|
+
const context = useMemo(() => ({ baseId, value, select, orientation }), [baseId, value, select, orientation]);
|
|
13
|
+
return (_jsx(TabsContext.Provider, { value: context, children: _jsx(Part, { ...props, "data-orientation": orientation, "data-bedrock-tabs": "", children: children }) }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=controlled-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controlled-root.js","sourceRoot":"","sources":["../../src/tabs/controlled-root.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,KAAK,EACL,OAAO,EACP,MAAM,GAGP,MAAM,OAAO,CAAA;AAEd,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAStC,4EAA4E;AAC5E,MAAM,UAAU,QAAQ,CAAC,EACvB,OAAO,EACP,QAAQ,EACR,KAAK,EACL,WAAW,GAAG,YAAY,EAC1B,aAAa,EACb,GAAG,KAAK,EACgB;IACxB,MAAM,MAAM,GAAG,KAAK,EAAE,CAAA;IACtB,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IAEhD,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;IACvC,SAAS,CAAC,OAAO,GAAG,aAAa,CAAA;IAEjC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IAE3E,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAC9C,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CACrC,CAAA;IAED,OAAO,CACL,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAClC,KAAC,IAAI,OAAK,KAAK,sBAAoB,WAAW,uBAAoB,EAAE,YACjE,QAAQ,GACJ,GACc,CACxB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ComponentPropsWithRef } from 'react';
|
|
2
|
+
import type { AsChildProps } from '../types.js';
|
|
3
|
+
export interface TabsListProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
4
|
+
loop?: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The tab list is one tab stop and the arrow keys move within it — the roving
|
|
8
|
+
* pattern the ARIA APG asks for, and the reason Tabs is in the "still
|
|
9
|
+
* substantially JavaScript" group. There is no native tab list.
|
|
10
|
+
*/
|
|
11
|
+
export declare function TabsList({ asChild, loop, ref, ...props }: TabsListProps): import("react").JSX.Element;
|
|
12
|
+
export interface TabsTriggerProps extends ComponentPropsWithRef<'button'>, AsChildProps {
|
|
13
|
+
value: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function TabsTrigger({ asChild, value, onClick, ...props }: TabsTriggerProps): import("react").JSX.Element;
|
|
16
|
+
export interface TabsContentProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
17
|
+
value: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function TabsContent({ asChild, value, children, ...props }: TabsContentProps): import("react").JSX.Element | null;
|
|
20
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/tabs/parts.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,qBAAqB,EAAqC,MAAM,OAAO,CAAA;AAKlG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG5C,MAAM,WAAW,aAAc,SAAQ,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAW,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,+BAe9E;AAED,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB,CAAC,QAAQ,CAAC,EAAE,YAAY;IACrF,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BA4BlF;AAED,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY;IAClF,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,sCAsBnF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
import { useClientRender } from '../client-render.js';
|
|
4
|
+
import { useComposedRefs } from '../compose-refs.js';
|
|
5
|
+
import { useRoving } from '../roving.js';
|
|
6
|
+
import { Slot } from '../slot.js';
|
|
7
|
+
import { panelId, tabId, useTabsContext } from './shared.js';
|
|
8
|
+
/**
|
|
9
|
+
* The tab list is one tab stop and the arrow keys move within it — the roving
|
|
10
|
+
* pattern the ARIA APG asks for, and the reason Tabs is in the "still
|
|
11
|
+
* substantially JavaScript" group. There is no native tab list.
|
|
12
|
+
*/
|
|
13
|
+
export function TabsList({ asChild, loop = true, ref, ...props }) {
|
|
14
|
+
const { orientation } = useTabsContext('Tabs.List');
|
|
15
|
+
const { registerContainer } = useRoving({ orientation, loop, typeahead: false });
|
|
16
|
+
const Part = asChild ? Slot : 'div';
|
|
17
|
+
return (_jsx(Part, { ...props, role: "tablist", "aria-orientation": orientation === 'both' ? undefined : orientation, "data-orientation": orientation, ref: useComposedRefs(ref, registerContainer), "data-bedrock-tabs-list": "" }));
|
|
18
|
+
}
|
|
19
|
+
export function TabsTrigger({ asChild, value, onClick, ...props }) {
|
|
20
|
+
const { baseId, value: selected, select } = useTabsContext('Tabs.Trigger');
|
|
21
|
+
const Part = asChild ? Slot : 'button';
|
|
22
|
+
const active = selected === value;
|
|
23
|
+
const handleClick = useCallback((event) => {
|
|
24
|
+
onClick?.(event);
|
|
25
|
+
if (!event.defaultPrevented)
|
|
26
|
+
select(value);
|
|
27
|
+
}, [onClick, select, value]);
|
|
28
|
+
return (_jsx(Part, { ...props, type: "button", role: "tab", id: tabId(baseId, value), "aria-selected": active, "aria-controls": panelId(baseId, value),
|
|
29
|
+
// Selection follows focus, which is the APG default for tabs.
|
|
30
|
+
onFocus: () => select(value), onClick: handleClick, "data-bedrock-roving-item": "", "data-bedrock-tabs-trigger": "" }));
|
|
31
|
+
}
|
|
32
|
+
export function TabsContent({ asChild, value, children, ...props }) {
|
|
33
|
+
const { baseId, value: selected } = useTabsContext('Tabs.Content');
|
|
34
|
+
const onClient = useClientRender();
|
|
35
|
+
const Part = asChild ? Slot : 'div';
|
|
36
|
+
const active = selected === value;
|
|
37
|
+
// Unmounted rather than hidden, on the same rule as every other content part.
|
|
38
|
+
if (onClient && !active)
|
|
39
|
+
return null;
|
|
40
|
+
return (_jsx(Part, { ...props, role: "tabpanel", id: panelId(baseId, value), "aria-labelledby": tabId(baseId, value), hidden: !active, tabIndex: 0, "data-bedrock-tabs-content": "", children: children }));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/tabs/parts.tsx"],"names":[],"mappings":"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"}
|