UNPKG

autumn-js

Version:
207 lines (199 loc) 6.61 kB
"use client"; import { useSize } from "./chunk-ATGLJHUN.mjs"; import { Primitive, composeEventHandlers, createContextScope, useControllableState } from "./chunk-4XU63W7I.mjs"; import { useComposedRefs } from "./chunk-DXHYWJOY.mjs"; import { cn } from "./chunk-4J6OC4ZQ.mjs"; // src/libraries/react/components/ui/switch.tsx import * as React3 from "react"; // ../node_modules/.pnpm/@radix-ui+react-switch@1.2.5_@types+react-dom@19.1.9_@types+react@19.1.10__@types+react@19.1._mh2w7rehnd5adfujfuln6l4w5m/node_modules/@radix-ui/react-switch/dist/index.mjs import * as React2 from "react"; // ../node_modules/.pnpm/@radix-ui+react-use-previous@1.1.1_@types+react@19.1.10_react@19.1.1/node_modules/@radix-ui/react-use-previous/dist/index.mjs import * as React from "react"; function usePrevious(value) { const ref = React.useRef({ value, previous: value }); return React.useMemo(() => { if (ref.current.value !== value) { ref.current.previous = ref.current.value; ref.current.value = value; } return ref.current.previous; }, [value]); } // ../node_modules/.pnpm/@radix-ui+react-switch@1.2.5_@types+react-dom@19.1.9_@types+react@19.1.10__@types+react@19.1._mh2w7rehnd5adfujfuln6l4w5m/node_modules/@radix-ui/react-switch/dist/index.mjs import { jsx, jsxs } from "react/jsx-runtime"; var SWITCH_NAME = "Switch"; var [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME); var [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME); var Switch = React2.forwardRef( (props, forwardedRef) => { const { __scopeSwitch, name, checked: checkedProp, defaultChecked, required, disabled, value = "on", onCheckedChange, form, ...switchProps } = props; const [button, setButton] = React2.useState(null); const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node)); const hasConsumerStoppedPropagationRef = React2.useRef(false); const isFormControl = button ? form || !!button.closest("form") : true; const [checked, setChecked] = useControllableState({ prop: checkedProp, defaultProp: defaultChecked ?? false, onChange: onCheckedChange, caller: SWITCH_NAME }); return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [ /* @__PURE__ */ jsx( Primitive.button, { type: "button", role: "switch", "aria-checked": checked, "aria-required": required, "data-state": getState(checked), "data-disabled": disabled ? "" : void 0, disabled, value, ...switchProps, ref: composedRefs, onClick: composeEventHandlers(props.onClick, (event) => { setChecked((prevChecked) => !prevChecked); if (isFormControl) { hasConsumerStoppedPropagationRef.current = event.isPropagationStopped(); if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation(); } }) } ), isFormControl && /* @__PURE__ */ jsx( SwitchBubbleInput, { control: button, bubbles: !hasConsumerStoppedPropagationRef.current, name, value, checked, required, disabled, form, style: { transform: "translateX(-100%)" } } ) ] }); } ); Switch.displayName = SWITCH_NAME; var THUMB_NAME = "SwitchThumb"; var SwitchThumb = React2.forwardRef( (props, forwardedRef) => { const { __scopeSwitch, ...thumbProps } = props; const context = useSwitchContext(THUMB_NAME, __scopeSwitch); return /* @__PURE__ */ jsx( Primitive.span, { "data-state": getState(context.checked), "data-disabled": context.disabled ? "" : void 0, ...thumbProps, ref: forwardedRef } ); } ); SwitchThumb.displayName = THUMB_NAME; var BUBBLE_INPUT_NAME = "SwitchBubbleInput"; var SwitchBubbleInput = React2.forwardRef( ({ __scopeSwitch, control, checked, bubbles = true, ...props }, forwardedRef) => { const ref = React2.useRef(null); const composedRefs = useComposedRefs(ref, forwardedRef); const prevChecked = usePrevious(checked); const controlSize = useSize(control); React2.useEffect(() => { const input = ref.current; if (!input) return; const inputProto = window.HTMLInputElement.prototype; const descriptor = Object.getOwnPropertyDescriptor( inputProto, "checked" ); const setChecked = descriptor.set; if (prevChecked !== checked && setChecked) { const event = new Event("click", { bubbles }); setChecked.call(input, checked); input.dispatchEvent(event); } }, [prevChecked, checked, bubbles]); return /* @__PURE__ */ jsx( "input", { type: "checkbox", "aria-hidden": true, defaultChecked: checked, ...props, tabIndex: -1, ref: composedRefs, style: { ...props.style, ...controlSize, position: "absolute", pointerEvents: "none", opacity: 0, margin: 0 } } ); } ); SwitchBubbleInput.displayName = BUBBLE_INPUT_NAME; function getState(checked) { return checked ? "checked" : "unchecked"; } var Root = Switch; var Thumb = SwitchThumb; // src/libraries/react/components/ui/switch.tsx import { jsx as jsx2 } from "react/jsx-runtime"; var Switch2 = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2( Root, { className: cn( "au-peer au-inline-flex au-h-5 au-w-9 au-shrink-0 au-cursor-pointer au-items-center au-rounded-full au-border-2 au-border-transparent au-shadow-sm au-transition-colors focus-visible:au-outline-none focus-visible:au-ring-2 focus-visible:au-ring-ring focus-visible:au-ring-offset-2 focus-visible:au-ring-offset-background au-disabled:cursor-not-allowed au-disabled:opacity-50 data-[state=checked]:au-bg-primary data-[state=unchecked]:au-bg-input", className ), ...props, ref, children: /* @__PURE__ */ jsx2( Thumb, { className: cn( "au-pointer-events-none au-block au-h-4 au-w-4 au-rounded-full au-bg-background au-shadow-lg au-ring-0 au-transition-transform data-[state=checked]:au-translate-x-4 data-[state=unchecked]:au-translate-x-0" ) } ) } )); Switch2.displayName = Root.displayName; export { Switch2 as Switch };