@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 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/label/parts.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAA2B,MAAM,OAAO,CAAA;AAE3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,MAAM,WAAW,UAAW,SAAQ,qBAAqB,CAAC,OAAO,CAAC,EAAE,YAAY;CAAG;AAEnF;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,+BAevE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Slot } from '../slot.js';
|
|
3
|
+
/**
|
|
4
|
+
* A `<label>`, plus the one thing the platform gets wrong: double-clicking a
|
|
5
|
+
* label selects its text instead of activating the control twice, which looks
|
|
6
|
+
* like a bug in every form on earth.
|
|
7
|
+
*
|
|
8
|
+
* `user-select: none` would fix it in CSS, but this library does not require its
|
|
9
|
+
* stylesheet, so the fix has to survive an unstyled consumer.
|
|
10
|
+
*/
|
|
11
|
+
export function LabelRoot({ asChild, onMouseDown, ...props }) {
|
|
12
|
+
const Part = asChild ? Slot : 'label';
|
|
13
|
+
return (_jsx(Part, { ...props, onMouseDown: (event) => {
|
|
14
|
+
onMouseDown?.(event);
|
|
15
|
+
// Only the second click of a double-click, and only when the consumer
|
|
16
|
+
// has not already handled it.
|
|
17
|
+
if (!event.defaultPrevented && event.detail > 1)
|
|
18
|
+
event.preventDefault();
|
|
19
|
+
}, "data-bedrock-label": "" }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/label/parts.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAK9B;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,EAAc;IACtE,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAA;IAElD,OAAO,CACL,KAAC,IAAI,OACC,KAAK,EACT,WAAW,EAAE,CAAC,KAAmC,EAAE,EAAE;YACnD,WAAW,EAAE,CAAC,KAAK,CAAC,CAAA;YACpB,sEAAsE;YACtE,8BAA8B;YAC9B,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,cAAc,EAAE,CAAA;QACzE,CAAC,wBACkB,EAAE,GACrB,CACH,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type ComponentPropsWithRef } from 'react';
|
|
2
|
+
import { type Align, type Side } from '../anchor.js';
|
|
3
|
+
import type { AsChildProps } from '../types.js';
|
|
4
|
+
export interface MenuTriggerProps extends ComponentPropsWithRef<'button'>, AsChildProps {
|
|
5
|
+
}
|
|
6
|
+
export declare function MenuTrigger({ asChild, ref, style, ...props }: MenuTriggerProps): import("react").JSX.Element;
|
|
7
|
+
export interface MenuContentProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
8
|
+
side?: Side;
|
|
9
|
+
align?: Align;
|
|
10
|
+
sideOffset?: number;
|
|
11
|
+
avoidCollisions?: boolean;
|
|
12
|
+
loop?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The menu itself: a popover for the layering and the dismissal, and the roving
|
|
16
|
+
* module for everything the platform does not do — arrow keys, Home and End,
|
|
17
|
+
* and typeahead.
|
|
18
|
+
*
|
|
19
|
+
* Focus is moved to the first item when it opens, which a popover does not do
|
|
20
|
+
* on its own. That is the one imperative line, and it is what the APG requires.
|
|
21
|
+
*/
|
|
22
|
+
export declare function MenuContent({ asChild, children, side, align, sideOffset, avoidCollisions, loop, style, ref, ...props }: MenuContentProps): import("react").JSX.Element;
|
|
23
|
+
export interface MenuItemProps extends ComponentPropsWithRef<'button'>, AsChildProps {
|
|
24
|
+
/** Close the menu when this is chosen. Off for checkbox and radio items. */
|
|
25
|
+
closeOnSelect?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare function MenuItem({ asChild, closeOnSelect, onClick, ...props }: MenuItemProps): import("react").JSX.Element;
|
|
28
|
+
export interface MenuCheckboxItemProps extends Omit<MenuItemProps, 'closeOnSelect'> {
|
|
29
|
+
checked?: boolean;
|
|
30
|
+
onCheckedChange?(checked: boolean): void;
|
|
31
|
+
}
|
|
32
|
+
export declare function MenuCheckboxItem({ asChild, checked, onCheckedChange, onClick, ...props }: MenuCheckboxItemProps): import("react").JSX.Element;
|
|
33
|
+
export interface MenuRadioGroupProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
34
|
+
value?: string;
|
|
35
|
+
onValueChange?(value: string): void;
|
|
36
|
+
}
|
|
37
|
+
export declare function MenuRadioGroup({ asChild, value, onValueChange, children, ...props }: MenuRadioGroupProps): import("react").JSX.Element;
|
|
38
|
+
export interface MenuRadioItemProps extends ComponentPropsWithRef<'button'>, AsChildProps {
|
|
39
|
+
value: string;
|
|
40
|
+
}
|
|
41
|
+
export declare function MenuRadioItem({ asChild, value, onClick, ...props }: MenuRadioItemProps): import("react").JSX.Element;
|
|
42
|
+
export interface MenuLabelProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
43
|
+
}
|
|
44
|
+
export declare function MenuLabel({ asChild, ...props }: MenuLabelProps): import("react").JSX.Element;
|
|
45
|
+
export interface MenuGroupProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
46
|
+
}
|
|
47
|
+
export declare function MenuGroup({ asChild, ...props }: MenuGroupProps): import("react").JSX.Element;
|
|
48
|
+
export interface MenuSeparatorProps extends ComponentPropsWithRef<'hr'>, AsChildProps {
|
|
49
|
+
}
|
|
50
|
+
export declare function MenuSeparator({ asChild, ...props }: MenuSeparatorProps): import("react").JSX.Element;
|
|
51
|
+
export interface MenuSubProps {
|
|
52
|
+
children?: React.ReactNode;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* A nested popover. Because the invoker lives inside the parent popover, the
|
|
56
|
+
* browser keeps that parent open — nesting is the popover stack's own rule, so
|
|
57
|
+
* there is no "which layer is topmost" bookkeeping here.
|
|
58
|
+
*/
|
|
59
|
+
export declare function MenuSub({ children }: MenuSubProps): import("react").JSX.Element;
|
|
60
|
+
export interface MenuSubTriggerProps extends ComponentPropsWithRef<'button'>, AsChildProps {
|
|
61
|
+
}
|
|
62
|
+
export declare function MenuSubTrigger({ asChild, ref, style, onKeyDown, ...props }: MenuSubTriggerProps): import("react").JSX.Element;
|
|
63
|
+
export declare function MenuSubContent(props: MenuContentProps): import("react").JSX.Element;
|
|
64
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/menu/parts.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useCallback, useContext, useEffect, useId, useMemo, useRef, useState, } from 'react';
|
|
3
|
+
import { anchorName, placementStyles } from '../anchor.js';
|
|
4
|
+
import { useClientRender } from '../client-render.js';
|
|
5
|
+
import { useComposedRefs } from '../compose-refs.js';
|
|
6
|
+
import { useRoving } from '../roving.js';
|
|
7
|
+
import { Slot } from '../slot.js';
|
|
8
|
+
import { validateTrigger } from '../validate-trigger.js';
|
|
9
|
+
import { MenuContext, useMenuContext } from './shared.js';
|
|
10
|
+
export function MenuTrigger({ asChild, ref, style, ...props }) {
|
|
11
|
+
const { id, anchor } = useMenuContext('Menu.Trigger');
|
|
12
|
+
const Part = asChild ? Slot : 'button';
|
|
13
|
+
return (_jsx(Part, { ...props, type: "button", commandfor: id, command: "toggle-popover", "aria-haspopup": "menu", style: { anchorName: anchor, ...style }, ref: useComposedRefs(ref, (node) => validateTrigger(node, 'command', 'Menu.Trigger')), "data-bedrock-menu-trigger": "" }));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The menu itself: a popover for the layering and the dismissal, and the roving
|
|
17
|
+
* module for everything the platform does not do — arrow keys, Home and End,
|
|
18
|
+
* and typeahead.
|
|
19
|
+
*
|
|
20
|
+
* Focus is moved to the first item when it opens, which a popover does not do
|
|
21
|
+
* on its own. That is the one imperative line, and it is what the APG requires.
|
|
22
|
+
*/
|
|
23
|
+
export function MenuContent({ asChild, children, side = 'bottom', align = 'start', sideOffset = 4, avoidCollisions = true, loop = true, style, ref, ...props }) {
|
|
24
|
+
const { id, open, anchor, registerContent } = useMenuContext('Menu.Content');
|
|
25
|
+
const { registerContainer } = useRoving({ orientation: 'vertical', loop, typeahead: true });
|
|
26
|
+
const onClient = useClientRender();
|
|
27
|
+
const nodeRef = useRef(null);
|
|
28
|
+
const Part = asChild ? Slot : 'div';
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (!open)
|
|
31
|
+
return;
|
|
32
|
+
// The popover opens synchronously on the invoker's click; this effect runs
|
|
33
|
+
// a frame or two later. Anything the user did in between — a key that
|
|
34
|
+
// already moved focus into the menu — wins, because re-focusing the first
|
|
35
|
+
// item here would silently undo it.
|
|
36
|
+
const menu = nodeRef.current;
|
|
37
|
+
if (!menu || menu.contains(document.activeElement))
|
|
38
|
+
return;
|
|
39
|
+
menu.querySelector('[data-bedrock-roving-item]')?.focus();
|
|
40
|
+
}, [open]);
|
|
41
|
+
return (_jsx(Part, { ...props, id: id, popover: "auto", role: "menu", style: { ...placementStyles(anchor, { side, align, sideOffset, avoidCollisions }), ...style }, "data-side": side, "data-align": align, ref: useComposedRefs(ref, registerContent, registerContainer, (node) => {
|
|
42
|
+
nodeRef.current = node;
|
|
43
|
+
}), "data-bedrock-menu": "", children: open || !onClient ? children : null }));
|
|
44
|
+
}
|
|
45
|
+
export function MenuItem({ asChild, closeOnSelect = true, onClick, ...props }) {
|
|
46
|
+
const Part = asChild ? Slot : 'button';
|
|
47
|
+
const handleClick = useCallback((event) => {
|
|
48
|
+
onClick?.(event);
|
|
49
|
+
if (event.defaultPrevented || !closeOnSelect)
|
|
50
|
+
return;
|
|
51
|
+
event.currentTarget.closest('[popover]')?.hidePopover();
|
|
52
|
+
}, [closeOnSelect, onClick]);
|
|
53
|
+
return (_jsx(Part, { ...props, type: "button", role: "menuitem", onClick: handleClick, "data-bedrock-roving-item": "", "data-bedrock-menu-item": "" }));
|
|
54
|
+
}
|
|
55
|
+
export function MenuCheckboxItem({ asChild, checked = false, onCheckedChange, onClick, ...props }) {
|
|
56
|
+
const Part = asChild ? Slot : 'button';
|
|
57
|
+
return (_jsx(Part, { ...props, type: "button", role: "menuitemcheckbox", "aria-checked": checked, onClick: (event) => {
|
|
58
|
+
onClick?.(event);
|
|
59
|
+
if (!event.defaultPrevented)
|
|
60
|
+
onCheckedChange?.(!checked);
|
|
61
|
+
}, "data-bedrock-roving-item": "", "data-bedrock-menu-item": "" }));
|
|
62
|
+
}
|
|
63
|
+
const MenuRadioContext = createContext(null);
|
|
64
|
+
export function MenuRadioGroup({ asChild, value, onValueChange, children, ...props }) {
|
|
65
|
+
const Part = asChild ? Slot : 'div';
|
|
66
|
+
const changeRef = useRef(onValueChange);
|
|
67
|
+
changeRef.current = onValueChange;
|
|
68
|
+
const select = useCallback((next) => changeRef.current?.(next), []);
|
|
69
|
+
const context = useMemo(() => ({ value, select }), [value, select]);
|
|
70
|
+
return (_jsx(MenuRadioContext.Provider, { value: context, children: _jsx(Part, { ...props, role: "group", "data-bedrock-menu-radio-group": "", children: children }) }));
|
|
71
|
+
}
|
|
72
|
+
export function MenuRadioItem({ asChild, value, onClick, ...props }) {
|
|
73
|
+
const context = useContext(MenuRadioContext);
|
|
74
|
+
if (!context)
|
|
75
|
+
throw new Error('[bedrock] Menu.RadioItem must be used inside Menu.RadioGroup.');
|
|
76
|
+
const Part = asChild ? Slot : 'button';
|
|
77
|
+
return (_jsx(Part, { ...props, type: "button", role: "menuitemradio", "aria-checked": context.value === value, onClick: (event) => {
|
|
78
|
+
onClick?.(event);
|
|
79
|
+
if (!event.defaultPrevented)
|
|
80
|
+
context.select(value);
|
|
81
|
+
}, "data-bedrock-roving-item": "", "data-bedrock-menu-item": "" }));
|
|
82
|
+
}
|
|
83
|
+
export function MenuLabel({ asChild, ...props }) {
|
|
84
|
+
const Part = asChild ? Slot : 'div';
|
|
85
|
+
return _jsx(Part, { ...props, "data-bedrock-menu-label": "" });
|
|
86
|
+
}
|
|
87
|
+
export function MenuGroup({ asChild, ...props }) {
|
|
88
|
+
const Part = asChild ? Slot : 'div';
|
|
89
|
+
return _jsx(Part, { ...props, role: "group", "data-bedrock-menu-group": "" });
|
|
90
|
+
}
|
|
91
|
+
export function MenuSeparator({ asChild, ...props }) {
|
|
92
|
+
const Part = asChild ? Slot : 'hr';
|
|
93
|
+
return _jsx(Part, { ...props, role: "separator", "data-bedrock-menu-separator": "" });
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* A nested popover. Because the invoker lives inside the parent popover, the
|
|
97
|
+
* browser keeps that parent open — nesting is the popover stack's own rule, so
|
|
98
|
+
* there is no "which layer is topmost" bookkeeping here.
|
|
99
|
+
*/
|
|
100
|
+
export function MenuSub({ children }) {
|
|
101
|
+
const id = useId();
|
|
102
|
+
const anchor = useMemo(() => anchorName(id), [id]);
|
|
103
|
+
const [open, setOpen] = useState(false);
|
|
104
|
+
const registerContent = useCallback((node) => {
|
|
105
|
+
if (!node)
|
|
106
|
+
return;
|
|
107
|
+
node.addEventListener('toggle', (event) => {
|
|
108
|
+
setOpen(event.newState === 'open');
|
|
109
|
+
});
|
|
110
|
+
}, []);
|
|
111
|
+
const context = useMemo(() => ({ id, open, anchor, registerContent }), [id, open, anchor, registerContent]);
|
|
112
|
+
return _jsx(MenuContext.Provider, { value: context, children: children });
|
|
113
|
+
}
|
|
114
|
+
export function MenuSubTrigger({ asChild, ref, style, onKeyDown, ...props }) {
|
|
115
|
+
const { id, anchor } = useMenuContext('Menu.SubTrigger');
|
|
116
|
+
const Part = asChild ? Slot : 'button';
|
|
117
|
+
const handleKeyDown = useCallback((event) => {
|
|
118
|
+
onKeyDown?.(event);
|
|
119
|
+
if (event.defaultPrevented || event.key !== 'ArrowRight')
|
|
120
|
+
return;
|
|
121
|
+
event.preventDefault();
|
|
122
|
+
const submenu = document.getElementById(id);
|
|
123
|
+
submenu?.showPopover();
|
|
124
|
+
submenu?.querySelector('[data-bedrock-roving-item]')?.focus();
|
|
125
|
+
}, [id, onKeyDown]);
|
|
126
|
+
return (_jsx(Part, { ...props, type: "button", role: "menuitem", commandfor: id, command: "toggle-popover", "aria-haspopup": "menu", onKeyDown: handleKeyDown, style: { anchorName: anchor, ...style }, ref: useComposedRefs(ref, (node) => validateTrigger(node, 'command', 'Menu.SubTrigger')), "data-bedrock-roving-item": "", "data-bedrock-menu-item": "" }));
|
|
127
|
+
}
|
|
128
|
+
export function MenuSubContent(props) {
|
|
129
|
+
return _jsx(MenuContent, { side: "right", align: "start", ...props });
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/menu/parts.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RootContextValue } from '../types.js';
|
|
2
|
+
export interface MenuContextValue extends RootContextValue {
|
|
3
|
+
anchor: string;
|
|
4
|
+
}
|
|
5
|
+
export declare const MenuContext: import("react").Context<MenuContextValue | null>;
|
|
6
|
+
export declare function useMenuContext(part: string): MenuContextValue;
|
|
7
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/menu/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,MAAM,EAAE,MAAM,CAAA;CACf;AAED,eAAO,MAAM,WAAW,kDAA+C,CAAA;AAEvE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAI7D"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createContext, useContext } from 'react';
|
|
2
|
+
export const MenuContext = createContext(null);
|
|
3
|
+
export function useMenuContext(part) {
|
|
4
|
+
const context = useContext(MenuContext);
|
|
5
|
+
if (!context)
|
|
6
|
+
throw new Error(`[bedrock] ${part} must be used inside a menu root.`);
|
|
7
|
+
return context;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/menu/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAOjD,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAA;AAEvE,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA;IACvC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,mCAAmC,CAAC,CAAA;IACnF,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ComponentPropsWithRef, type ReactNode } from 'react';
|
|
2
|
+
import { type MenuTriggerProps } from '../menu/parts.js';
|
|
3
|
+
import type { AsChildProps } from '../types.js';
|
|
4
|
+
export interface MenubarRootProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
5
|
+
loop?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A row of menu triggers sharing one tab stop. Each menu is an ordinary
|
|
9
|
+
* popover, so opening one closes the last — the popover stack does that, not a
|
|
10
|
+
* "which menu is open" reducer.
|
|
11
|
+
*/
|
|
12
|
+
export declare function MenubarRoot({ asChild, loop, ref, ...props }: MenubarRootProps): import("react").JSX.Element;
|
|
13
|
+
export interface MenubarMenuProps {
|
|
14
|
+
children?: ReactNode;
|
|
15
|
+
onOpenChange?(open: boolean): void;
|
|
16
|
+
}
|
|
17
|
+
export declare function MenubarMenu({ children, onOpenChange }: MenubarMenuProps): import("react").JSX.Element;
|
|
18
|
+
/** A menu trigger that is also a roving item in the bar above it. */
|
|
19
|
+
export declare function MenubarTrigger(props: MenuTriggerProps): import("react").JSX.Element;
|
|
20
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/menubar/parts.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,qBAAqB,EAE1B,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAId,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAIlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY;IAClF,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,IAAW,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BAYpF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,YAAY,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CACnC;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,gBAAgB,+BAgBvE;AAED,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,+BAErD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useId, useMemo, useRef, } from 'react';
|
|
3
|
+
import { anchorName } from '../anchor.js';
|
|
4
|
+
import { useComposedRefs } from '../compose-refs.js';
|
|
5
|
+
import { MenuContext } from '../menu/shared.js';
|
|
6
|
+
import { MenuTrigger } from '../menu/parts.js';
|
|
7
|
+
import { useOpenState } from '../open-state.js';
|
|
8
|
+
import { useRoving } from '../roving.js';
|
|
9
|
+
import { Slot } from '../slot.js';
|
|
10
|
+
/**
|
|
11
|
+
* A row of menu triggers sharing one tab stop. Each menu is an ordinary
|
|
12
|
+
* popover, so opening one closes the last — the popover stack does that, not a
|
|
13
|
+
* "which menu is open" reducer.
|
|
14
|
+
*/
|
|
15
|
+
export function MenubarRoot({ asChild, loop = true, ref, ...props }) {
|
|
16
|
+
const { registerContainer } = useRoving({ orientation: 'horizontal', loop, typeahead: true });
|
|
17
|
+
const Part = asChild ? Slot : 'div';
|
|
18
|
+
return (_jsx(Part, { ...props, role: "menubar", ref: useComposedRefs(ref, registerContainer), "data-bedrock-menubar": "" }));
|
|
19
|
+
}
|
|
20
|
+
export function MenubarMenu({ children, onOpenChange }) {
|
|
21
|
+
const id = useId();
|
|
22
|
+
const anchor = useMemo(() => anchorName(id), [id]);
|
|
23
|
+
const changeRef = useRef(onOpenChange);
|
|
24
|
+
changeRef.current = onOpenChange;
|
|
25
|
+
const report = useCallback((next) => changeRef.current?.(next), []);
|
|
26
|
+
const { open, observe } = useOpenState(report);
|
|
27
|
+
const context = useMemo(() => ({ id, open, anchor, registerContent: observe }), [id, open, anchor, observe]);
|
|
28
|
+
return _jsx(MenuContext.Provider, { value: context, children: children });
|
|
29
|
+
}
|
|
30
|
+
/** A menu trigger that is also a roving item in the bar above it. */
|
|
31
|
+
export function MenubarTrigger(props) {
|
|
32
|
+
return _jsx(MenuTrigger, { ...props, "data-bedrock-roving-item": "" });
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/menubar/parts.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,KAAK,EACL,OAAO,EACP,MAAM,GAIP,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAyB,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAO9B;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,EAAoB;IACnF,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7F,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IAEhD,OAAO,CACL,KAAC,IAAI,OACC,KAAK,EACT,IAAI,EAAC,SAAS,EACd,GAAG,EAAE,eAAe,CAAc,GAAG,EAAE,iBAAiB,CAAC,0BACpC,EAAE,GACvB,CACH,CAAA;AACH,CAAC;AAOD,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAoB;IACtE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IAClB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAElD,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;IACtC,SAAS,CAAC,OAAO,GAAG,YAAY,CAAA;IAEhC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IAC5E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;IAE9C,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EACtD,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAC5B,CAAA;IAED,OAAO,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAAwB,CAAA;AAChF,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAAC,KAAuB;IACpD,OAAO,KAAC,WAAW,OAAK,KAAK,8BAA2B,EAAE,GAAG,CAAA;AAC/D,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type ComponentPropsWithRef, type ReactNode } from 'react';
|
|
2
|
+
import type { AsChildProps } from '../types.js';
|
|
3
|
+
export interface NavigationMenuRootProps extends ComponentPropsWithRef<'nav'>, AsChildProps {
|
|
4
|
+
}
|
|
5
|
+
export declare function NavigationMenuRoot({ asChild, ...props }: NavigationMenuRootProps): import("react").JSX.Element;
|
|
6
|
+
export interface NavigationMenuListProps extends ComponentPropsWithRef<'ul'>, AsChildProps {
|
|
7
|
+
loop?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function NavigationMenuList({ asChild, loop, ref, ...props }: NavigationMenuListProps): import("react").JSX.Element;
|
|
10
|
+
export interface NavigationMenuItemProps extends ComponentPropsWithRef<'li'>, AsChildProps {
|
|
11
|
+
children?: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
/** Each item owns a popover, anchored to itself. */
|
|
14
|
+
export declare function NavigationMenuItem({ asChild, children, ref, style, ...props }: NavigationMenuItemProps): import("react").JSX.Element;
|
|
15
|
+
export interface NavigationMenuLinkProps extends ComponentPropsWithRef<'a'>, AsChildProps {
|
|
16
|
+
active?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function NavigationMenuLink({ asChild, active, ...props }: NavigationMenuLinkProps): import("react").JSX.Element;
|
|
19
|
+
export interface NavigationMenuViewportProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Renders nothing. Radix's viewport exists to give every menu one shared,
|
|
23
|
+
* animatable box outside the list; anchor positioning and the top layer make
|
|
24
|
+
* that unnecessary, since each content is already positioned against its own
|
|
25
|
+
* item and painted above everything.
|
|
26
|
+
*/
|
|
27
|
+
export declare function NavigationMenuViewport({ className }: NavigationMenuViewportProps): null;
|
|
28
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/navigation-menu/parts.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,qBAAqB,EAAoB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAOpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY;CAAG;AAE9F,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,uBAAuB,+BAIhF;AAED,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB,CAAC,IAAI,CAAC,EAAE,YAAY;IACxF,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,IAAY,EACZ,GAAG,EACH,GAAG,KAAK,EACT,EAAE,uBAAuB,+BAWzB;AAED,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB,CAAC,IAAI,CAAC,EAAE,YAAY;IACxF,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED,oDAAoD;AACpD,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,QAAQ,EACR,GAAG,EACH,KAAK,EACL,GAAG,KAAK,EACT,EAAE,uBAAuB,+BAuBzB;AAED,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB,CAAC,GAAG,CAAC,EAAE,YAAY;IACvF,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,uBAAuB,+BAWxF;AAID,MAAM,WAAW,2BAA4B,SAAQ,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY;CAAG;AAElG;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,SAAS,EAAE,EAAE,2BAA2B,QAUhF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useId, useMemo } from 'react';
|
|
3
|
+
import { anchorName } from '../anchor.js';
|
|
4
|
+
import { useComposedRefs } from '../compose-refs.js';
|
|
5
|
+
import { MenuContext } from '../menu/shared.js';
|
|
6
|
+
import { useOpenState } from '../open-state.js';
|
|
7
|
+
import { useRoving } from '../roving.js';
|
|
8
|
+
import { Slot } from '../slot.js';
|
|
9
|
+
export function NavigationMenuRoot({ asChild, ...props }) {
|
|
10
|
+
const Part = asChild ? Slot : 'nav';
|
|
11
|
+
return _jsx(Part, { ...props, "data-bedrock-navigation-menu": "" });
|
|
12
|
+
}
|
|
13
|
+
export function NavigationMenuList({ asChild, loop = false, ref, ...props }) {
|
|
14
|
+
const { registerContainer } = useRoving({ orientation: 'horizontal', loop, typeahead: false });
|
|
15
|
+
const Part = asChild ? Slot : 'ul';
|
|
16
|
+
return (_jsx(Part, { ...props, ref: useComposedRefs(ref, registerContainer), "data-bedrock-navigation-menu-list": "" }));
|
|
17
|
+
}
|
|
18
|
+
/** Each item owns a popover, anchored to itself. */
|
|
19
|
+
export function NavigationMenuItem({ asChild, children, ref, style, ...props }) {
|
|
20
|
+
const id = useId();
|
|
21
|
+
const anchor = useMemo(() => anchorName(id), [id]);
|
|
22
|
+
const { open, observe } = useOpenState();
|
|
23
|
+
const Part = asChild ? Slot : 'li';
|
|
24
|
+
const context = useMemo(() => ({ id, open, anchor, registerContent: observe }), [id, open, anchor, observe]);
|
|
25
|
+
return (_jsx(MenuContext.Provider, { value: context, children: _jsx(Part, { ...props, style: { anchorName: anchor, ...style }, ref: useComposedRefs(ref), "data-bedrock-navigation-menu-item": "", children: children }) }));
|
|
26
|
+
}
|
|
27
|
+
export function NavigationMenuLink({ asChild, active, ...props }) {
|
|
28
|
+
const Part = asChild ? Slot : 'a';
|
|
29
|
+
return (_jsx(Part, { ...props, "aria-current": active ? 'page' : undefined, "data-bedrock-roving-item": "", "data-bedrock-navigation-menu-link": "" }));
|
|
30
|
+
}
|
|
31
|
+
let warned = false;
|
|
32
|
+
/**
|
|
33
|
+
* Renders nothing. Radix's viewport exists to give every menu one shared,
|
|
34
|
+
* animatable box outside the list; anchor positioning and the top layer make
|
|
35
|
+
* that unnecessary, since each content is already positioned against its own
|
|
36
|
+
* item and painted above everything.
|
|
37
|
+
*/
|
|
38
|
+
export function NavigationMenuViewport({ className }) {
|
|
39
|
+
if (process.env.NODE_ENV !== 'production' && className && !warned) {
|
|
40
|
+
warned = true;
|
|
41
|
+
console.warn('[bedrock] NavigationMenu.Viewport renders nothing — each content is anchored to its ' +
|
|
42
|
+
'own item and already in the top layer. Style NavigationMenu.Content instead.');
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/navigation-menu/parts.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks what the DOM is actually doing, so parts can render children only
|
|
3
|
+
* while there is something to see.
|
|
4
|
+
*
|
|
5
|
+
* Three timing details, each of which is a bug if you get it wrong:
|
|
6
|
+
*
|
|
7
|
+
* 1. Children mount on `beforetoggle`, not `toggle`, so an opening element is
|
|
8
|
+
* never briefly empty. `beforetoggle` fires before the frame that shows it.
|
|
9
|
+
* 2. A refused open fires `beforetoggle` and then nothing at all, so a check
|
|
10
|
+
* after the dispatch puts the flag back.
|
|
11
|
+
* 3. Children stay mounted until the exit animation finishes. `allow-discrete`
|
|
12
|
+
* keeps the element displayed while it plays; unmounting at `toggle` would
|
|
13
|
+
* empty it halfway through the fade.
|
|
14
|
+
*
|
|
15
|
+
* Shared by both roots, and identical under each — a part must never be able to
|
|
16
|
+
* tell which one it is under.
|
|
17
|
+
*/
|
|
18
|
+
export declare function useOpenState(onToggle?: (open: boolean) => void, initialOpen?: boolean): {
|
|
19
|
+
open: boolean;
|
|
20
|
+
observe: (node: HTMLElement | null) => void;
|
|
21
|
+
nodeRef: import("react").RefObject<HTMLElement | null>;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=open-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-state.d.ts","sourceRoot":"","sources":["../src/open-state.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,EAAE,WAAW,UAAQ;;oBA2DzE,WAAW,GAAG,IAAI;;EA+B5B"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { useCallback, useRef, useState } from 'react';
|
|
2
|
+
/** `:open` covers dialog, popover, details and select alike. */
|
|
3
|
+
function isOpen(node) {
|
|
4
|
+
try {
|
|
5
|
+
return node.matches(':open');
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Tracks what the DOM is actually doing, so parts can render children only
|
|
13
|
+
* while there is something to see.
|
|
14
|
+
*
|
|
15
|
+
* Three timing details, each of which is a bug if you get it wrong:
|
|
16
|
+
*
|
|
17
|
+
* 1. Children mount on `beforetoggle`, not `toggle`, so an opening element is
|
|
18
|
+
* never briefly empty. `beforetoggle` fires before the frame that shows it.
|
|
19
|
+
* 2. A refused open fires `beforetoggle` and then nothing at all, so a check
|
|
20
|
+
* after the dispatch puts the flag back.
|
|
21
|
+
* 3. Children stay mounted until the exit animation finishes. `allow-discrete`
|
|
22
|
+
* keeps the element displayed while it plays; unmounting at `toggle` would
|
|
23
|
+
* empty it halfway through the fade.
|
|
24
|
+
*
|
|
25
|
+
* Shared by both roots, and identical under each — a part must never be able to
|
|
26
|
+
* tell which one it is under.
|
|
27
|
+
*/
|
|
28
|
+
export function useOpenState(onToggle, initialOpen = false) {
|
|
29
|
+
// `defaultOpen` seeds this so the children are already in the DOM when the
|
|
30
|
+
// root calls showModal(). Open an empty dialog and the browser focuses the
|
|
31
|
+
// dialog itself; open a populated one and it focuses the first control, which
|
|
32
|
+
// is the behaviour everyone expects and Radix implements by hand.
|
|
33
|
+
const [open, setOpen] = useState(initialOpen);
|
|
34
|
+
const nodeRef = useRef(null);
|
|
35
|
+
const callbackRef = useRef(onToggle);
|
|
36
|
+
callbackRef.current = onToggle;
|
|
37
|
+
// The last state the consumer has been told about, seeded with the initial
|
|
38
|
+
// one: an element born open declaratively has nothing to report, because
|
|
39
|
+
// nobody opened it. Only the recovery path reads this — a toggle event fires
|
|
40
|
+
// solely on a real change, so it always reports.
|
|
41
|
+
const reportedRef = useRef(initialOpen);
|
|
42
|
+
const report = useCallback((next) => {
|
|
43
|
+
reportedRef.current = next;
|
|
44
|
+
callbackRef.current?.(next);
|
|
45
|
+
}, []);
|
|
46
|
+
const settle = useCallback((node) => {
|
|
47
|
+
// A frame, so transitions started by the state change exist to be found.
|
|
48
|
+
requestAnimationFrame(() => {
|
|
49
|
+
if (isOpen(node))
|
|
50
|
+
return setOpen(true);
|
|
51
|
+
const running = node.getAnimations({ subtree: true });
|
|
52
|
+
if (running.length === 0)
|
|
53
|
+
return setOpen(false);
|
|
54
|
+
void Promise.allSettled(running.map((animation) => animation.finished)).then(() => {
|
|
55
|
+
if (!isOpen(node))
|
|
56
|
+
setOpen(false);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}, []);
|
|
60
|
+
const handleBeforeToggle = useCallback((event) => {
|
|
61
|
+
const node = nodeRef.current;
|
|
62
|
+
if (!node)
|
|
63
|
+
return;
|
|
64
|
+
if (event.newState === 'open')
|
|
65
|
+
setOpen(true);
|
|
66
|
+
settle(node);
|
|
67
|
+
}, [settle]);
|
|
68
|
+
const handleToggle = useCallback((event) => {
|
|
69
|
+
const next = event.newState === 'open';
|
|
70
|
+
report(next);
|
|
71
|
+
const node = nodeRef.current;
|
|
72
|
+
if (!node)
|
|
73
|
+
return setOpen(next);
|
|
74
|
+
if (next)
|
|
75
|
+
return setOpen(true);
|
|
76
|
+
settle(node);
|
|
77
|
+
}, [report, settle]);
|
|
78
|
+
const observe = useCallback((node) => {
|
|
79
|
+
const previous = nodeRef.current;
|
|
80
|
+
if (previous) {
|
|
81
|
+
previous.removeEventListener('beforetoggle', handleBeforeToggle);
|
|
82
|
+
previous.removeEventListener('toggle', handleToggle);
|
|
83
|
+
}
|
|
84
|
+
nodeRef.current = node;
|
|
85
|
+
if (!node)
|
|
86
|
+
return;
|
|
87
|
+
node.addEventListener('beforetoggle', handleBeforeToggle);
|
|
88
|
+
node.addEventListener('toggle', handleToggle);
|
|
89
|
+
// An invoker works with no JavaScript at all, so the element can already
|
|
90
|
+
// be open by the time this listener attaches — a click landing before
|
|
91
|
+
// hydration finishes is enough. Recover both halves: the state, so the
|
|
92
|
+
// children mount, and the report, so a consumer watching `onOpenChange`
|
|
93
|
+
// is not left believing it is still closed.
|
|
94
|
+
//
|
|
95
|
+
// `reportedRef` is what separates that from `defaultOpen`, where the
|
|
96
|
+
// element is open because we asked for it and there is nothing to report.
|
|
97
|
+
// It also keeps a ref that reattaches while open from reporting twice.
|
|
98
|
+
if (isOpen(node)) {
|
|
99
|
+
setOpen(true);
|
|
100
|
+
if (!reportedRef.current)
|
|
101
|
+
report(true);
|
|
102
|
+
}
|
|
103
|
+
}, [handleBeforeToggle, handleToggle, report]);
|
|
104
|
+
return { open, observe, nodeRef };
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=open-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-state.js","sourceRoot":"","sources":["../src/open-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type ControlledRootProps } from '../create-controlled-root.js';
|
|
3
|
+
import { type PopoverKind } from './shared.js';
|
|
4
|
+
export interface ControlledPopoverRootProps extends ControlledRootProps {
|
|
5
|
+
children?: ReactNode;
|
|
6
|
+
kind?: PopoverKind;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The best case for the veto model. A popover's `beforetoggle` is cancelable in
|
|
10
|
+
* both directions, so refusing an open or a close moves nothing at all — no
|
|
11
|
+
* revert, no frame of visible movement, no `flushSync`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function PopoverRoot({ children, kind, ...props }: ControlledPopoverRootProps): import("react").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=controlled-root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controlled-root.d.ts","sourceRoot":"","sources":["../../src/popover/controlled-root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE/C,OAAO,EAAqB,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACvF,OAAO,EAAkC,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3E,MAAM,WAAW,0BAA2B,SAAQ,mBAAmB;IACrE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAa,EAAE,GAAG,KAAK,EAAE,EAAE,0BAA0B,+BAO5F"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { anchorName } from '../anchor.js';
|
|
4
|
+
import { useControlledRoot } from '../create-controlled-root.js';
|
|
5
|
+
import { PopoverContext, popoverAdapter } from './shared.js';
|
|
6
|
+
/**
|
|
7
|
+
* The best case for the veto model. A popover's `beforetoggle` is cancelable in
|
|
8
|
+
* both directions, so refusing an open or a close moves nothing at all — no
|
|
9
|
+
* revert, no frame of visible movement, no `flushSync`.
|
|
10
|
+
*/
|
|
11
|
+
export function PopoverRoot({ children, kind = 'auto', ...props }) {
|
|
12
|
+
const context = useControlledRoot(props, popoverAdapter);
|
|
13
|
+
const anchor = useMemo(() => anchorName(context.id), [context.id]);
|
|
14
|
+
const value = useMemo(() => ({ ...context, anchor, kind }), [context, anchor, kind]);
|
|
15
|
+
return _jsx(PopoverContext.Provider, { value: value, children: children });
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=controlled-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controlled-root.js","sourceRoot":"","sources":["../../src/popover/controlled-root.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAA4B,MAAM,2BAA2B,CAAA;AACvF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAoB,MAAM,UAAU,CAAA;AAO3E;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,KAAK,EAA8B;IAC3F,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IAElE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;IAEpF,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA2B,CAAA;AACpF,CAAC"}
|