UNPKG

@spark-ui/components

Version:

Spark (Leboncoin design system) components.

97 lines (92 loc) 3.11 kB
import { Slot } from "./chunk-4F5DOL57.mjs"; // src/collapsible/Collapsible.tsx import * as collapsible from "@zag-js/collapsible"; import { mergeProps, normalizeProps, useMachine } from "@zag-js/react"; import { createContext, useContext, useId } from "react"; import { jsx } from "react/jsx-runtime"; var CollapsibleContext = createContext(null); var Collapsible = ({ asChild = false, children, defaultOpen = false, disabled = false, onOpenChange, open, ids, ref, ...props }) => { const service = useMachine(collapsible.machine, { open, defaultOpen, disabled, id: useId(), ids, onOpenChange(details) { onOpenChange?.(details.open); } }); const api = collapsible.connect(service, normalizeProps); const Component = asChild ? Slot : "div"; const mergedProps = mergeProps(api.getRootProps(), props); return /* @__PURE__ */ jsx(CollapsibleContext.Provider, { value: api, children: /* @__PURE__ */ jsx(Component, { "data-spark-component": "collapsible", ref, ...mergedProps, children }) }); }; Collapsible.displayName = "Collapsible"; var useCollapsibleContext = () => { const context = useContext(CollapsibleContext); if (!context) { throw Error("useCollapsibleContext must be used within a Collapsible provider"); } return context; }; // src/collapsible/CollapsibleContent.tsx import { mergeProps as mergeProps2 } from "@zag-js/react"; import { cx } from "class-variance-authority"; import { jsx as jsx2 } from "react/jsx-runtime"; var Content = ({ asChild = false, className, children, ref, ...props }) => { const { getContentProps } = useCollapsibleContext(); const Component = asChild ? Slot : "div"; const contentProps = getContentProps(); const mergedProps = mergeProps2(contentProps, { className: cx( "overflow-hidden", "motion-reduce:animate-none!", "[&[hidden]]:hidden", "data-[state=open]:animate-standalone-collapse-in data-[state=closed]:animate-standalone-collapse-out", className ), ...props }); return /* @__PURE__ */ jsx2(Component, { ref, "data-spark-component": "collapsible-content", ...mergedProps, children }); }; Content.displayName = "Collapsible.Content"; // src/collapsible/CollapsibleTrigger.tsx import { mergeProps as mergeProps3 } from "@zag-js/react"; import { jsx as jsx3 } from "react/jsx-runtime"; var Trigger = ({ asChild = false, children, ref, ...props }) => { const collapsibleContext = useCollapsibleContext(); const Component = asChild ? Slot : "button"; const mergedProps = mergeProps3(collapsibleContext.getTriggerProps(), props); return /* @__PURE__ */ jsx3(Component, { ref, "data-spark-component": "collapsible-trigger", ...mergedProps, children }); }; Trigger.displayName = "Collapsible.Trigger"; // src/collapsible/index.ts var Collapsible2 = Object.assign(Collapsible, { Trigger, Content }); Collapsible2.displayName = "Collapsible"; Trigger.displayName = "Collapsible.Trigger"; Content.displayName = "Collapsible.Content"; export { Collapsible2 as Collapsible }; //# sourceMappingURL=chunk-FGOZHKBT.mjs.map