@spark-ui/components
Version:
Spark (Leboncoin design system) components.
97 lines (92 loc) • 3.11 kB
JavaScript
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