@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,14 @@
|
|
|
1
|
+
import type { ComponentPropsWithRef } from 'react';
|
|
2
|
+
import type { AsChildProps } from '../types.js';
|
|
3
|
+
export interface CollapsibleTriggerProps extends ComponentPropsWithRef<'summary'>, AsChildProps {
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* A `<summary>`. Not a button with `aria-expanded` and a click handler — the
|
|
7
|
+
* parser binds it to its `<details>` parent, so it opens before hydration and
|
|
8
|
+
* keeps working without JavaScript.
|
|
9
|
+
*/
|
|
10
|
+
export declare function CollapsibleTrigger({ asChild, ...props }: CollapsibleTriggerProps): import("react").JSX.Element;
|
|
11
|
+
export interface CollapsibleContentProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
12
|
+
}
|
|
13
|
+
export declare function CollapsibleContent({ asChild, children, ...props }: CollapsibleContentProps): import("react").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/collapsible/parts.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAe,MAAM,OAAO,CAAA;AAG/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG5C,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB,CAAC,SAAS,CAAC,EAAE,YAAY;CAAG;AAElG;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,uBAAuB,+BAKhF;AAED,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY;CAAG;AAE9F,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,uBAAuB,+BAc1F"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useClientRender } from '../client-render.js';
|
|
3
|
+
import { Slot } from '../slot.js';
|
|
4
|
+
import { useCollapsibleContext } from './shared.js';
|
|
5
|
+
/**
|
|
6
|
+
* A `<summary>`. Not a button with `aria-expanded` and a click handler — the
|
|
7
|
+
* parser binds it to its `<details>` parent, so it opens before hydration and
|
|
8
|
+
* keeps working without JavaScript.
|
|
9
|
+
*/
|
|
10
|
+
export function CollapsibleTrigger({ asChild, ...props }) {
|
|
11
|
+
useCollapsibleContext('Collapsible.Trigger');
|
|
12
|
+
const Part = asChild ? Slot : 'summary';
|
|
13
|
+
return _jsx(Part, { ...props, "data-bedrock-collapsible-trigger": "" });
|
|
14
|
+
}
|
|
15
|
+
export function CollapsibleContent({ asChild, children, ...props }) {
|
|
16
|
+
const { open } = useCollapsibleContext('Collapsible.Content');
|
|
17
|
+
const onClient = useClientRender();
|
|
18
|
+
const Part = asChild ? Slot : 'div';
|
|
19
|
+
// Same rule as Dialog: present in server-rendered markup, mounted on the
|
|
20
|
+
// client only while open, so closing discards whatever it was holding.
|
|
21
|
+
const mounted = open || !onClient;
|
|
22
|
+
return (_jsx(Part, { ...props, "data-bedrock-collapsible-content": "", children: mounted ? children : null }));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/collapsible/parts.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAIhD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAA2B;IAC/E,qBAAqB,CAAC,qBAAqB,CAAC,CAAA;IAC5C,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAEpD,OAAO,KAAC,IAAI,OAAK,KAAK,sCAAmC,EAAE,GAAG,CAAA;AAChE,CAAC;AAID,MAAM,UAAU,kBAAkB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,EAA2B;IACzF,MAAM,EAAE,IAAI,EAAE,GAAG,qBAAqB,CAAC,qBAAqB,CAAC,CAAA;IAC7D,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAA;IAClC,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IAEhD,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAA;IAEjC,OAAO,CACL,KAAC,IAAI,OAAK,KAAK,sCAAmC,EAAE,YACjD,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GACrB,CACR,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ComponentPropsWithRef } from 'react';
|
|
2
|
+
import type { AsChildProps } from '../types.js';
|
|
3
|
+
export interface CollapsibleRootProps extends ComponentPropsWithRef<'details'>, AsChildProps {
|
|
4
|
+
defaultOpen?: boolean;
|
|
5
|
+
/** Reports; cannot refuse. Import from `/controlled` for a veto. */
|
|
6
|
+
onOpenChange?(open: boolean): void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Unlike Dialog, the root *is* the element: `<summary>` only works as a child
|
|
10
|
+
* of `<details>`, so there is nothing to wire by id and no invoker involved.
|
|
11
|
+
*
|
|
12
|
+
* Which means `defaultOpen` is a plain attribute rather than an imperative call
|
|
13
|
+
* on mount — the disclosure is open in the HTML before any script runs.
|
|
14
|
+
*/
|
|
15
|
+
export declare function CollapsibleRoot({ asChild, children, defaultOpen, onOpenChange, ref, ...props }: CollapsibleRootProps): import("react").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/collapsible/root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,qBAAqB,EAE3B,MAAM,OAAO,CAAA;AAId,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG5C,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB,CAAC,SAAS,CAAC,EAAE,YAAY;IAC1F,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,oEAAoE;IACpE,YAAY,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CACnC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,WAAmB,EACnB,YAAY,EACZ,GAAG,EACH,GAAG,KAAK,EACT,EAAE,oBAAoB,+BA2BtB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useId, useMemo, useRef, } from 'react';
|
|
3
|
+
import { useComposedRefs } from '../compose-refs.js';
|
|
4
|
+
import { useOpenState } from '../open-state.js';
|
|
5
|
+
import { Slot } from '../slot.js';
|
|
6
|
+
import { CollapsibleContext } from './shared.js';
|
|
7
|
+
/**
|
|
8
|
+
* Unlike Dialog, the root *is* the element: `<summary>` only works as a child
|
|
9
|
+
* of `<details>`, so there is nothing to wire by id and no invoker involved.
|
|
10
|
+
*
|
|
11
|
+
* Which means `defaultOpen` is a plain attribute rather than an imperative call
|
|
12
|
+
* on mount — the disclosure is open in the HTML before any script runs.
|
|
13
|
+
*/
|
|
14
|
+
export function CollapsibleRoot({ asChild, children, defaultOpen = false, onOpenChange, ref, ...props }) {
|
|
15
|
+
const id = useId();
|
|
16
|
+
const Part = asChild ? Slot : 'details';
|
|
17
|
+
const changeRef = useRef(onOpenChange);
|
|
18
|
+
changeRef.current = onOpenChange;
|
|
19
|
+
const report = useCallback((next) => changeRef.current?.(next), []);
|
|
20
|
+
const { open, observe } = useOpenState(report, defaultOpen);
|
|
21
|
+
const defaultOpenRef = useRef(defaultOpen);
|
|
22
|
+
const context = useMemo(() => ({ id, open, registerContent: observe }), [id, open, observe]);
|
|
23
|
+
return (_jsx(CollapsibleContext.Provider, { value: context, children: _jsx(Part, { ...props,
|
|
24
|
+
// Read once. React only writes a DOM property when the value it renders
|
|
25
|
+
// changes, so the user's own toggling is never undone by a re-render.
|
|
26
|
+
open: defaultOpenRef.current, ref: useComposedRefs(ref, observe), "data-bedrock-collapsible": "", children: children }) }));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/collapsible/root.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,KAAK,EACL,OAAO,EACP,MAAM,GAGP,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAQ7C;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,WAAW,GAAG,KAAK,EACnB,YAAY,EACZ,GAAG,EACH,GAAG,KAAK,EACa;IACrB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IAClB,MAAM,IAAI,GAAgB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAEpD,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,EAAE,WAAW,CAAC,CAAA;IAC3D,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IAE1C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IAE5F,OAAO,CACL,KAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YACzC,KAAC,IAAI,OACC,KAAK;YACT,wEAAwE;YACxE,sEAAsE;YACtE,IAAI,EAAE,cAAc,CAAC,OAAO,EAC5B,GAAG,EAAE,eAAe,CAAc,GAAG,EAAE,OAAO,CAAC,8BACtB,EAAE,YAE1B,QAAQ,GACJ,GACqB,CAC/B,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { OpenStateAdapter, RootContextValue } from '../types.js';
|
|
2
|
+
export declare const CollapsibleContext: import("react").Context<RootContextValue | null>;
|
|
3
|
+
export declare function useCollapsibleContext(part: string): RootContextValue;
|
|
4
|
+
/**
|
|
5
|
+
* `<details>` has no invoker and needs none: `<summary>` is the trigger, wired
|
|
6
|
+
* to its parent by the parser. There is also no cancelable hook — no
|
|
7
|
+
* `beforetoggle`, no `cancel` — so a controlled Collapsible refuses by moving
|
|
8
|
+
* the DOM back, which is one frame of visible movement in the refusal case.
|
|
9
|
+
*/
|
|
10
|
+
export declare const collapsibleAdapter: OpenStateAdapter;
|
|
11
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/collapsible/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAElE,eAAO,MAAM,kBAAkB,kDAA+C,CAAA;AAE9E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAIpE;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,gBAQhC,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createContext, useContext } from 'react';
|
|
2
|
+
export const CollapsibleContext = createContext(null);
|
|
3
|
+
export function useCollapsibleContext(part) {
|
|
4
|
+
const context = useContext(CollapsibleContext);
|
|
5
|
+
if (!context)
|
|
6
|
+
throw new Error(`[bedrock] ${part} must be used inside Collapsible.Root.`);
|
|
7
|
+
return context;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* `<details>` has no invoker and needs none: `<summary>` is the trigger, wired
|
|
11
|
+
* to its parent by the parser. There is also no cancelable hook — no
|
|
12
|
+
* `beforetoggle`, no `cancel` — so a controlled Collapsible refuses by moving
|
|
13
|
+
* the DOM back, which is one frame of visible movement in the refusal case.
|
|
14
|
+
*/
|
|
15
|
+
export const collapsibleAdapter = {
|
|
16
|
+
isOpen: (node) => node.open,
|
|
17
|
+
open: (node) => {
|
|
18
|
+
;
|
|
19
|
+
node.open = true;
|
|
20
|
+
},
|
|
21
|
+
close: (node) => {
|
|
22
|
+
;
|
|
23
|
+
node.open = false;
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/collapsible/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAGjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAA;AAE9E,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,OAAO,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAA;IAC9C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,wCAAwC,CAAC,CAAA;IACxF,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAqB;IAClD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAE,IAA2B,CAAC,IAAI;IACnD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QACb,CAAC;QAAC,IAA2B,CAAC,IAAI,GAAG,IAAI,CAAA;IAC3C,CAAC;IACD,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;QACd,CAAC;QAAC,IAA2B,CAAC,IAAI,GAAG,KAAK,CAAA;IAC5C,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type Ref } from 'react';
|
|
2
|
+
type RefCleanup = () => void;
|
|
3
|
+
/**
|
|
4
|
+
* Merges any number of refs into one callback ref.
|
|
5
|
+
*
|
|
6
|
+
* Slot always needs this: the consumer's ref on the child element has to keep
|
|
7
|
+
* working while we also read the node ourselves for tag validation and, in
|
|
8
|
+
* controlled mode, event wiring.
|
|
9
|
+
*/
|
|
10
|
+
export declare function composeRefs<T>(...refs: Array<Ref<T> | undefined>): (node: T | null) => RefCleanup;
|
|
11
|
+
/**
|
|
12
|
+
* The same thing, with a stable identity, for use inside a component.
|
|
13
|
+
*
|
|
14
|
+
* `composeRefs` returns a new function on every call, and React treats a new
|
|
15
|
+
* ref callback as a different ref: it detaches the old one and attaches the new
|
|
16
|
+
* one on every render. For a ref that only stores a node that is merely
|
|
17
|
+
* wasteful. For one that attaches event listeners it is a bug — an event
|
|
18
|
+
* arriving in the gap between detach and attach is dropped, and nothing
|
|
19
|
+
* re-delivers it. A popover that opens in that window stays open with its
|
|
20
|
+
* content never mounted, because the `toggle` that would have told React went
|
|
21
|
+
* nowhere.
|
|
22
|
+
*
|
|
23
|
+
* The returned callback never changes, so React attaches once and detaches at
|
|
24
|
+
* unmount. The refs are read through a box, so a consumer passing a new ref
|
|
25
|
+
* each render still gets the current one.
|
|
26
|
+
*/
|
|
27
|
+
export declare function useComposedRefs<T>(...refs: Array<Ref<T> | undefined>): (node: T | null) => RefCleanup;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=compose-refs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-refs.d.ts","sourceRoot":"","sources":["../src/compose-refs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AAErD,KAAK,UAAU,GAAG,MAAM,IAAI,CAAA;AAW5B;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IACvD,MAAM,CAAC,GAAG,IAAI,KAAG,UAAU,CAYpC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,UAIzC,CAAC,GAAG,IAAI,KAAG,UAAU,CAYhD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { useCallback, useRef } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Assigns `value` to a single ref, returning React 19's cleanup function when
|
|
4
|
+
* the ref is a callback that provides one.
|
|
5
|
+
*/
|
|
6
|
+
function assign(ref, value) {
|
|
7
|
+
if (typeof ref === 'function')
|
|
8
|
+
return ref(value);
|
|
9
|
+
if (ref)
|
|
10
|
+
ref.current = value;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Merges any number of refs into one callback ref.
|
|
14
|
+
*
|
|
15
|
+
* Slot always needs this: the consumer's ref on the child element has to keep
|
|
16
|
+
* working while we also read the node ourselves for tag validation and, in
|
|
17
|
+
* controlled mode, event wiring.
|
|
18
|
+
*/
|
|
19
|
+
export function composeRefs(...refs) {
|
|
20
|
+
return (node) => {
|
|
21
|
+
const cleanups = refs.map((ref) => assign(ref, node)).filter(Boolean);
|
|
22
|
+
return () => {
|
|
23
|
+
if (cleanups.length > 0) {
|
|
24
|
+
for (const cleanup of cleanups)
|
|
25
|
+
cleanup();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Object refs and cleanup-less callback refs still need unsetting.
|
|
29
|
+
for (const ref of refs)
|
|
30
|
+
assign(ref, null);
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The same thing, with a stable identity, for use inside a component.
|
|
36
|
+
*
|
|
37
|
+
* `composeRefs` returns a new function on every call, and React treats a new
|
|
38
|
+
* ref callback as a different ref: it detaches the old one and attaches the new
|
|
39
|
+
* one on every render. For a ref that only stores a node that is merely
|
|
40
|
+
* wasteful. For one that attaches event listeners it is a bug — an event
|
|
41
|
+
* arriving in the gap between detach and attach is dropped, and nothing
|
|
42
|
+
* re-delivers it. A popover that opens in that window stays open with its
|
|
43
|
+
* content never mounted, because the `toggle` that would have told React went
|
|
44
|
+
* nowhere.
|
|
45
|
+
*
|
|
46
|
+
* The returned callback never changes, so React attaches once and detaches at
|
|
47
|
+
* unmount. The refs are read through a box, so a consumer passing a new ref
|
|
48
|
+
* each render still gets the current one.
|
|
49
|
+
*/
|
|
50
|
+
export function useComposedRefs(...refs) {
|
|
51
|
+
const latest = useRef(refs);
|
|
52
|
+
latest.current = refs;
|
|
53
|
+
return useCallback((node) => {
|
|
54
|
+
const current = latest.current;
|
|
55
|
+
const cleanups = current.map((ref) => assign(ref, node)).filter(Boolean);
|
|
56
|
+
return () => {
|
|
57
|
+
if (cleanups.length > 0) {
|
|
58
|
+
for (const cleanup of cleanups)
|
|
59
|
+
cleanup();
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
for (const ref of current)
|
|
63
|
+
assign(ref, null);
|
|
64
|
+
};
|
|
65
|
+
}, []);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=compose-refs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-refs.js","sourceRoot":"","sources":["../src/compose-refs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAY,MAAM,OAAO,CAAA;AAIrD;;;GAGG;AACH,SAAS,MAAM,CAAI,GAAuB,EAAE,KAAe;IACzD,IAAI,OAAO,GAAG,KAAK,UAAU;QAAE,OAAO,GAAG,CAAC,KAAK,CAAsB,CAAA;IACrE,IAAI,GAAG;QAAG,GAA6B,CAAC,OAAO,GAAG,KAAK,CAAA;AACzD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAI,GAAG,IAA+B;IAC/D,OAAO,CAAC,IAAc,EAAc,EAAE;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAiB,CAAA;QAErF,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,KAAK,MAAM,OAAO,IAAI,QAAQ;oBAAE,OAAO,EAAE,CAAA;gBACzC,OAAM;YACR,CAAC;YACD,mEAAmE;YACnE,KAAK,MAAM,GAAG,IAAI,IAAI;gBAAE,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC3C,CAAC,CAAA;IACH,CAAC,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAAI,GAAG,IAA+B;IACnE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;IAErB,OAAO,WAAW,CAAC,CAAC,IAAc,EAAc,EAAE;QAChD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAiB,CAAA;QAExF,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,KAAK,MAAM,OAAO,IAAI,QAAQ;oBAAE,OAAO,EAAE,CAAA;gBACzC,OAAM;YACR,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,OAAO;gBAAE,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC9C,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;AACR,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ComponentPropsWithRef } from 'react';
|
|
2
|
+
import type { AsChildProps } from '../types.js';
|
|
3
|
+
export interface ContextMenuRootProps extends ComponentPropsWithRef<'div'>, AsChildProps {
|
|
4
|
+
onOpenChange?(open: boolean): void;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Anchor positioning can only target an element, and a context menu opens at a
|
|
8
|
+
* pointer coordinate. So the root renders a zero-size element, moves it to
|
|
9
|
+
* where the pointer was, and anchors the menu to that.
|
|
10
|
+
*
|
|
11
|
+
* It is the one place in this library that positions something in JavaScript,
|
|
12
|
+
* and it is two `style` writes rather than a positioning loop: the menu follows
|
|
13
|
+
* the anchor from then on, including on scroll, because that is anchor
|
|
14
|
+
* positioning's job.
|
|
15
|
+
*/
|
|
16
|
+
export declare function ContextMenuRoot({ asChild, children, onOpenChange, onContextMenu, ref, ...props }: ContextMenuRootProps): import("react").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/context-menu/root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,qBAAqB,EAG3B,MAAM,OAAO,CAAA;AAMd,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB,CAAC,KAAK,CAAC,EAAE,YAAY;IACtF,YAAY,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,GAAG,EACH,GAAG,KAAK,EACT,EAAE,oBAAoB,+BA2DtB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } 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 { useOpenState } from '../open-state.js';
|
|
7
|
+
import { Slot } from '../slot.js';
|
|
8
|
+
/**
|
|
9
|
+
* Anchor positioning can only target an element, and a context menu opens at a
|
|
10
|
+
* pointer coordinate. So the root renders a zero-size element, moves it to
|
|
11
|
+
* where the pointer was, and anchors the menu to that.
|
|
12
|
+
*
|
|
13
|
+
* It is the one place in this library that positions something in JavaScript,
|
|
14
|
+
* and it is two `style` writes rather than a positioning loop: the menu follows
|
|
15
|
+
* the anchor from then on, including on scroll, because that is anchor
|
|
16
|
+
* positioning's job.
|
|
17
|
+
*/
|
|
18
|
+
export function ContextMenuRoot({ asChild, children, onOpenChange, onContextMenu, ref, ...props }) {
|
|
19
|
+
const id = useId();
|
|
20
|
+
const anchor = useMemo(() => anchorName(id), [id]);
|
|
21
|
+
const pointRef = useRef(null);
|
|
22
|
+
const Part = asChild ? Slot : 'div';
|
|
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 handleContextMenu = useCallback((event) => {
|
|
28
|
+
onContextMenu?.(event);
|
|
29
|
+
if (event.defaultPrevented)
|
|
30
|
+
return;
|
|
31
|
+
event.preventDefault();
|
|
32
|
+
const point = pointRef.current;
|
|
33
|
+
const menu = document.getElementById(id);
|
|
34
|
+
if (!point || !menu)
|
|
35
|
+
return;
|
|
36
|
+
point.style.left = `${event.clientX}px`;
|
|
37
|
+
point.style.top = `${event.clientY}px`;
|
|
38
|
+
// Not synchronously. `contextmenu` fires between pointerdown and
|
|
39
|
+
// pointerup, and an auto popover light-dismisses on the pointerup that
|
|
40
|
+
// lands outside it — so showing it here opens and closes it in one
|
|
41
|
+
// gesture. Yielding a task puts the open after the sequence that would
|
|
42
|
+
// have dismissed it.
|
|
43
|
+
setTimeout(() => menu.showPopover(), 0);
|
|
44
|
+
}, [id, onContextMenu]);
|
|
45
|
+
const context = useMemo(() => ({ id, open, anchor, registerContent: observe }), [id, open, anchor, observe]);
|
|
46
|
+
return (_jsx(MenuContext.Provider, { value: context, children: _jsxs(Part, { ...props, onContextMenu: handleContextMenu, ref: useComposedRefs(ref), "data-bedrock-context-menu-trigger": "", children: [children, _jsx("span", { "aria-hidden": "true", ref: (node) => {
|
|
47
|
+
pointRef.current = node;
|
|
48
|
+
}, style: { position: 'fixed', width: 0, height: 0, anchorName: anchor } })] }) }));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/context-menu/root.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Separate module graph from the root entry point. If nothing in an app
|
|
3
|
+
* imports '@apostel/bedrock/controlled', none of this reaches the bundle —
|
|
4
|
+
* a guarantee from the exports map, not from tree shaking.
|
|
5
|
+
*/
|
|
6
|
+
export { useControlledRoot } from './create-controlled-root.js';
|
|
7
|
+
export type { ControlledRootProps } from './create-controlled-root.js';
|
|
8
|
+
import { DialogRoot } from './dialog/controlled-root.js';
|
|
9
|
+
import { DialogClose, DialogContent, DialogDescription, DialogTitle, DialogTrigger } from './dialog/parts.js';
|
|
10
|
+
export declare const Dialog: {
|
|
11
|
+
Root: typeof DialogRoot;
|
|
12
|
+
Trigger: typeof DialogTrigger;
|
|
13
|
+
Content: typeof DialogContent;
|
|
14
|
+
Title: typeof DialogTitle;
|
|
15
|
+
Description: typeof DialogDescription;
|
|
16
|
+
Close: typeof DialogClose;
|
|
17
|
+
};
|
|
18
|
+
import { AccordionRoot } from './accordion/controlled-root.js';
|
|
19
|
+
import { AccordionContent, AccordionHeader, AccordionItem, AccordionTrigger } from './accordion/parts.js';
|
|
20
|
+
import { AlertDialogAction, AlertDialogCancel, AlertDialogContent } from './alert-dialog/parts.js';
|
|
21
|
+
import { CheckboxRoot } from './checkbox/controlled-root.js';
|
|
22
|
+
import { CheckboxIndicator } from './checkbox/parts.js';
|
|
23
|
+
import { CollapsibleRoot } from './collapsible/controlled-root.js';
|
|
24
|
+
import { CollapsibleContent, CollapsibleTrigger } from './collapsible/parts.js';
|
|
25
|
+
import { DropdownMenuRoot } from './dropdown-menu/controlled-root.js';
|
|
26
|
+
import { HoverCardRoot } from './hover-card/controlled-root.js';
|
|
27
|
+
import { MenuCheckboxItem, MenuContent, MenuGroup, MenuItem, MenuLabel, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuSub, MenuSubContent, MenuSubTrigger, MenuTrigger } from './menu/parts.js';
|
|
28
|
+
import { TabsRoot } from './tabs/controlled-root.js';
|
|
29
|
+
import { TabsContent, TabsList, TabsTrigger } from './tabs/parts.js';
|
|
30
|
+
import { PopoverRoot } from './popover/controlled-root.js';
|
|
31
|
+
import { PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger } from './popover/parts.js';
|
|
32
|
+
import { RadioGroupRoot } from './radio-group/controlled-root.js';
|
|
33
|
+
import { TooltipRoot } from './tooltip/controlled-root.js';
|
|
34
|
+
import { TooltipContent, TooltipTrigger } from './tooltip/parts.js';
|
|
35
|
+
import { RadioGroupIndicator, RadioGroupItem } from './radio-group/parts.js';
|
|
36
|
+
import { ToggleRoot } from './toggle/controlled-root.js';
|
|
37
|
+
export declare const Accordion: {
|
|
38
|
+
Root: typeof AccordionRoot;
|
|
39
|
+
Item: typeof AccordionItem;
|
|
40
|
+
Header: typeof AccordionHeader;
|
|
41
|
+
Trigger: typeof AccordionTrigger;
|
|
42
|
+
Content: typeof AccordionContent;
|
|
43
|
+
};
|
|
44
|
+
export declare const Collapsible: {
|
|
45
|
+
Root: typeof CollapsibleRoot;
|
|
46
|
+
Trigger: typeof CollapsibleTrigger;
|
|
47
|
+
Content: typeof CollapsibleContent;
|
|
48
|
+
};
|
|
49
|
+
export declare const AlertDialog: {
|
|
50
|
+
Root: typeof DialogRoot;
|
|
51
|
+
Trigger: typeof DialogTrigger;
|
|
52
|
+
Content: typeof AlertDialogContent;
|
|
53
|
+
Title: typeof DialogTitle;
|
|
54
|
+
Description: typeof DialogDescription;
|
|
55
|
+
Action: typeof AlertDialogAction;
|
|
56
|
+
Cancel: typeof AlertDialogCancel;
|
|
57
|
+
};
|
|
58
|
+
export declare const Checkbox: {
|
|
59
|
+
Root: typeof CheckboxRoot;
|
|
60
|
+
Indicator: typeof CheckboxIndicator;
|
|
61
|
+
};
|
|
62
|
+
export declare const RadioGroup: {
|
|
63
|
+
Root: typeof RadioGroupRoot;
|
|
64
|
+
Item: typeof RadioGroupItem;
|
|
65
|
+
Indicator: typeof RadioGroupIndicator;
|
|
66
|
+
};
|
|
67
|
+
export declare const Toggle: {
|
|
68
|
+
Root: typeof ToggleRoot;
|
|
69
|
+
};
|
|
70
|
+
export declare const HoverCard: {
|
|
71
|
+
Root: typeof HoverCardRoot;
|
|
72
|
+
Trigger: typeof TooltipTrigger;
|
|
73
|
+
Content: typeof TooltipContent;
|
|
74
|
+
};
|
|
75
|
+
export declare const Popover: {
|
|
76
|
+
Root: typeof PopoverRoot;
|
|
77
|
+
Trigger: typeof PopoverTrigger;
|
|
78
|
+
Anchor: typeof PopoverAnchor;
|
|
79
|
+
Content: typeof PopoverContent;
|
|
80
|
+
Close: typeof PopoverClose;
|
|
81
|
+
};
|
|
82
|
+
export declare const Tooltip: {
|
|
83
|
+
Root: typeof TooltipRoot;
|
|
84
|
+
Trigger: typeof TooltipTrigger;
|
|
85
|
+
Content: typeof TooltipContent;
|
|
86
|
+
};
|
|
87
|
+
export declare const DropdownMenu: {
|
|
88
|
+
Root: typeof DropdownMenuRoot;
|
|
89
|
+
Trigger: typeof MenuTrigger;
|
|
90
|
+
Content: typeof MenuContent;
|
|
91
|
+
Item: typeof MenuItem;
|
|
92
|
+
CheckboxItem: typeof MenuCheckboxItem;
|
|
93
|
+
RadioGroup: typeof MenuRadioGroup;
|
|
94
|
+
RadioItem: typeof MenuRadioItem;
|
|
95
|
+
Label: typeof MenuLabel;
|
|
96
|
+
Group: typeof MenuGroup;
|
|
97
|
+
Separator: typeof MenuSeparator;
|
|
98
|
+
Sub: typeof MenuSub;
|
|
99
|
+
SubTrigger: typeof MenuSubTrigger;
|
|
100
|
+
SubContent: typeof MenuSubContent;
|
|
101
|
+
};
|
|
102
|
+
export declare const Tabs: {
|
|
103
|
+
Root: typeof TabsRoot;
|
|
104
|
+
List: typeof TabsList;
|
|
105
|
+
Trigger: typeof TabsTrigger;
|
|
106
|
+
Content: typeof TabsContent;
|
|
107
|
+
};
|
|
108
|
+
export type { ControlledAccordionRootProps } from './accordion/controlled-root.js';
|
|
109
|
+
export type { ControlledCollapsibleRootProps } from './collapsible/controlled-root.js';
|
|
110
|
+
export type { ControlledCheckboxProps } from './checkbox/controlled-root.js';
|
|
111
|
+
export type { ControlledRadioGroupRootProps } from './radio-group/controlled-root.js';
|
|
112
|
+
export type { ControlledToggleProps } from './toggle/controlled-root.js';
|
|
113
|
+
export type { ControlledHoverCardRootProps } from './hover-card/controlled-root.js';
|
|
114
|
+
export type { ControlledPopoverRootProps } from './popover/controlled-root.js';
|
|
115
|
+
export type { ControlledTooltipRootProps } from './tooltip/controlled-root.js';
|
|
116
|
+
export type { ControlledDropdownMenuRootProps } from './dropdown-menu/controlled-root.js';
|
|
117
|
+
export type { ControlledTabsRootProps } from './tabs/controlled-root.js';
|
|
118
|
+
export { useDialogTrigger } from './dialog/shared.js';
|
|
119
|
+
export type { ControlledDialogRootProps } from './dialog/controlled-root.js';
|
|
120
|
+
//# sourceMappingURL=controlled.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controlled.d.ts","sourceRoot":"","sources":["../src/controlled.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
/**
|
|
3
|
+
* Separate module graph from the root entry point. If nothing in an app
|
|
4
|
+
* imports '@apostel/bedrock/controlled', none of this reaches the bundle —
|
|
5
|
+
* a guarantee from the exports map, not from tree shaking.
|
|
6
|
+
*/
|
|
7
|
+
export { useControlledRoot } from './create-controlled-root.js';
|
|
8
|
+
import { DialogRoot } from './dialog/controlled-root.js';
|
|
9
|
+
import { DialogClose, DialogContent, DialogDescription, DialogTitle, DialogTrigger, } from './dialog/parts.js';
|
|
10
|
+
export const Dialog = {
|
|
11
|
+
Root: DialogRoot,
|
|
12
|
+
Trigger: DialogTrigger,
|
|
13
|
+
Content: DialogContent,
|
|
14
|
+
Title: DialogTitle,
|
|
15
|
+
Description: DialogDescription,
|
|
16
|
+
Close: DialogClose,
|
|
17
|
+
};
|
|
18
|
+
import { AccordionRoot } from './accordion/controlled-root.js';
|
|
19
|
+
import { AccordionContent, AccordionHeader, AccordionItem, AccordionTrigger, } from './accordion/parts.js';
|
|
20
|
+
import { AlertDialogAction, AlertDialogCancel, AlertDialogContent } from './alert-dialog/parts.js';
|
|
21
|
+
import { CheckboxRoot } from './checkbox/controlled-root.js';
|
|
22
|
+
import { CheckboxIndicator } from './checkbox/parts.js';
|
|
23
|
+
import { CollapsibleRoot } from './collapsible/controlled-root.js';
|
|
24
|
+
import { CollapsibleContent, CollapsibleTrigger } from './collapsible/parts.js';
|
|
25
|
+
import { DropdownMenuRoot } from './dropdown-menu/controlled-root.js';
|
|
26
|
+
import { HoverCardRoot } from './hover-card/controlled-root.js';
|
|
27
|
+
import { MenuCheckboxItem, MenuContent, MenuGroup, MenuItem, MenuLabel, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuSub, MenuSubContent, MenuSubTrigger, MenuTrigger, } from './menu/parts.js';
|
|
28
|
+
import { TabsRoot } from './tabs/controlled-root.js';
|
|
29
|
+
import { TabsContent, TabsList, TabsTrigger } from './tabs/parts.js';
|
|
30
|
+
import { PopoverRoot } from './popover/controlled-root.js';
|
|
31
|
+
import { PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger } from './popover/parts.js';
|
|
32
|
+
import { RadioGroupRoot } from './radio-group/controlled-root.js';
|
|
33
|
+
import { TooltipRoot } from './tooltip/controlled-root.js';
|
|
34
|
+
import { TooltipContent, TooltipTrigger } from './tooltip/parts.js';
|
|
35
|
+
import { RadioGroupIndicator, RadioGroupItem } from './radio-group/parts.js';
|
|
36
|
+
import { ToggleRoot } from './toggle/controlled-root.js';
|
|
37
|
+
export const Accordion = {
|
|
38
|
+
Root: AccordionRoot,
|
|
39
|
+
Item: AccordionItem,
|
|
40
|
+
Header: AccordionHeader,
|
|
41
|
+
Trigger: AccordionTrigger,
|
|
42
|
+
Content: AccordionContent,
|
|
43
|
+
};
|
|
44
|
+
export const Collapsible = {
|
|
45
|
+
Root: CollapsibleRoot,
|
|
46
|
+
Trigger: CollapsibleTrigger,
|
|
47
|
+
Content: CollapsibleContent,
|
|
48
|
+
};
|
|
49
|
+
export const AlertDialog = {
|
|
50
|
+
Root: DialogRoot,
|
|
51
|
+
Trigger: DialogTrigger,
|
|
52
|
+
Content: AlertDialogContent,
|
|
53
|
+
Title: DialogTitle,
|
|
54
|
+
Description: DialogDescription,
|
|
55
|
+
Action: AlertDialogAction,
|
|
56
|
+
Cancel: AlertDialogCancel,
|
|
57
|
+
};
|
|
58
|
+
export const Checkbox = { Root: CheckboxRoot, Indicator: CheckboxIndicator };
|
|
59
|
+
export const RadioGroup = {
|
|
60
|
+
Root: RadioGroupRoot,
|
|
61
|
+
Item: RadioGroupItem,
|
|
62
|
+
Indicator: RadioGroupIndicator,
|
|
63
|
+
};
|
|
64
|
+
export const Toggle = { Root: ToggleRoot };
|
|
65
|
+
export const HoverCard = { Root: HoverCardRoot, Trigger: TooltipTrigger, Content: TooltipContent };
|
|
66
|
+
export const Popover = {
|
|
67
|
+
Root: PopoverRoot,
|
|
68
|
+
Trigger: PopoverTrigger,
|
|
69
|
+
Anchor: PopoverAnchor,
|
|
70
|
+
Content: PopoverContent,
|
|
71
|
+
Close: PopoverClose,
|
|
72
|
+
};
|
|
73
|
+
export const Tooltip = { Root: TooltipRoot, Trigger: TooltipTrigger, Content: TooltipContent };
|
|
74
|
+
export const DropdownMenu = {
|
|
75
|
+
Root: DropdownMenuRoot,
|
|
76
|
+
Trigger: MenuTrigger,
|
|
77
|
+
Content: MenuContent,
|
|
78
|
+
Item: MenuItem,
|
|
79
|
+
CheckboxItem: MenuCheckboxItem,
|
|
80
|
+
RadioGroup: MenuRadioGroup,
|
|
81
|
+
RadioItem: MenuRadioItem,
|
|
82
|
+
Label: MenuLabel,
|
|
83
|
+
Group: MenuGroup,
|
|
84
|
+
Separator: MenuSeparator,
|
|
85
|
+
Sub: MenuSub,
|
|
86
|
+
SubTrigger: MenuSubTrigger,
|
|
87
|
+
SubContent: MenuSubContent,
|
|
88
|
+
};
|
|
89
|
+
export const Tabs = { Root: TabsRoot, List: TabsList, Trigger: TabsTrigger, Content: TabsContent };
|
|
90
|
+
export { useDialogTrigger } from './dialog/shared.js';
|
|
91
|
+
//# sourceMappingURL=controlled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controlled.js","sourceRoot":"","sources":["../src/controlled.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { OpenStateAdapter, RootContextValue } from './types.js';
|
|
2
|
+
export interface ControlledRootProps {
|
|
3
|
+
open: boolean;
|
|
4
|
+
onOpenChange?: ((open: boolean) => void) | undefined;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Builds the context value for a controlled root.
|
|
8
|
+
*
|
|
9
|
+
* This is the entire cost of controlled mode, and it lives on the root. Every
|
|
10
|
+
* child part — Trigger, Content, Close — is byte-identical under both roots and
|
|
11
|
+
* never branches on which one it's under. If children had to ask "am I
|
|
12
|
+
* controlled?", the branch would ship in both bundles and the split would buy
|
|
13
|
+
* nothing.
|
|
14
|
+
*
|
|
15
|
+
* The model is DOM leads, React vetoes:
|
|
16
|
+
*
|
|
17
|
+
* 1. The user acts. `beforetoggle` fires. Where it's cancelable — popovers —
|
|
18
|
+
* and the `open` prop disagrees, we preventDefault and nothing moved.
|
|
19
|
+
* 2. `onOpenChange` fires regardless, so the consumer can decide.
|
|
20
|
+
* 3. An effect on `open` reconciles the DOM whenever the prop changes without
|
|
21
|
+
* user interaction.
|
|
22
|
+
*
|
|
23
|
+
* Where step 1 isn't available, step 3 is the whole mechanism: the DOM moves,
|
|
24
|
+
* we report, and if the consumer refuses we put it back. That's one frame of
|
|
25
|
+
* visible movement, in the refusal case only. Worth knowing; not worth a
|
|
26
|
+
* synchronous re-render to avoid.
|
|
27
|
+
*/
|
|
28
|
+
export declare function useControlledRoot({ open, onOpenChange }: ControlledRootProps, adapter: OpenStateAdapter): RootContextValue;
|
|
29
|
+
//# sourceMappingURL=create-controlled-root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-controlled-root.d.ts","sourceRoot":"","sources":["../src/create-controlled-root.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAEjE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAA;IAGb,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;CACrD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,mBAAmB,EAC3C,OAAO,EAAE,gBAAgB,GACxB,gBAAgB,CAuElB"}
|