{"version":3,"file":"ToggleSwitch.cjs","sources":["../../../../src/components/toggle-switch/ToggleSwitch.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { type MouseEventHandler, forwardRef } from \"react\";\nimport { useId } from \"../../hooks/useId/useId.js\";\nimport { useSwipeGesture } from \"../../hooks/useSwipeGesture/useSwipeGesture.js\";\nimport { CheckIcon } from \"../icon/icons/CheckIcon.js\";\nimport type { ToggleChangeHandler, ToggleSwitchProps } from \"./types.js\";\n\nexport const ToggleSwitch = forwardRef<HTMLButtonElement, ToggleSwitchProps>(\n    (\n        {\n            \"aria-pressed\": ariaPressed = false,\n            children,\n            className,\n            id,\n            onChange,\n            ...rest\n        },\n        ref,\n    ) => {\n        const uid = useId(id || \"jkl-toggle-switch\", { generateSuffix: !id });\n        const [pressed, setPressed] = React.useState(ariaPressed);\n        React.useEffect(() => {\n            setPressed(ariaPressed);\n        }, [ariaPressed]);\n\n        const {\n            onClick,\n            onPointerCancel,\n            onPointerDown,\n            onPointerMove,\n            onPointerUp,\n            ...buttonProps\n        } = rest;\n\n        const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n            setPressed(!pressed);\n            onChange?.(event, !pressed);\n            onClick?.(event);\n        };\n\n        const handleChange: ToggleChangeHandler<HTMLButtonElement> = (\n            event,\n            toggleTo,\n        ) => {\n            if (toggleTo !== pressed) {\n                setPressed(toggleTo);\n                onChange?.(event, toggleTo);\n            }\n        };\n\n        const { gestureHandlers } = useSwipeGesture({\n            onClick: handleClick,\n            onChange: handleChange,\n            onPointerCancel,\n            onPointerDown,\n            onPointerMove,\n            onPointerUp,\n        });\n\n        return (\n            <button\n                className={clsx(\"jkl-toggle-switch\", className)}\n                id={uid}\n                ref={ref}\n                aria-pressed={pressed}\n                {...buttonProps}\n                {...(buttonProps.disabled ? {} : gestureHandlers)}\n            >\n                {children}\n                <div aria-hidden className=\"jkl-toggle-switch-widget\">\n                    <div className=\"jkl-toggle-switch-widget__slider\">\n                        <div className=\"jkl-toggle-switch-widget__knob\" />\n                        <CheckIcon\n                            bold\n                            className=\"jkl-toggle-switch-widget__indicator\"\n                        />\n                    </div>\n                </div>\n            </button>\n        );\n    },\n);\nToggleSwitch.displayName = \"ToggleSwitch\";\n"],"names":["ToggleSwitch","forwardRef","ariaPressed","children","className","id","onChange","rest","ref","uid","useId","generateSuffix","pressed","setPressed","React","useState","useEffect","onClick","onPointerCancel","onPointerDown","onPointerMove","onPointerUp","buttonProps","gestureHandlers","useSwipeGesture","event","toggleTo","jsxs","clsx","disabled","jsx","CheckIcon","bold","displayName"],"mappings":"+TAOaA,EAAeC,EAAAA,WACxB,EAEQ,eAAgBC,GAAc,EAC9BC,SAAAA,EACAC,UAAAA,EACAC,GAAAA,EACAC,SAAAA,KACGC,GAEPC,KAEA,MAAMC,EAAMC,EAAAA,MAAML,GAAM,oBAAqB,CAAEM,gBAAiBN,KACzDO,EAASC,GAAcC,EAAMC,SAASb,GAC7CY,EAAME,UAAU,KACZH,EAAWX,IACZ,CAACA,IAEJ,MACIe,QAAAA,EACAC,gBAAAA,EACAC,cAAAA,EACAC,cAAAA,EACAC,YAAAA,KACGC,GACHf,GAkBIgB,gBAAAA,GAAoBC,kBAAgB,CACxCP,QAjBuDQ,IACvDZ,GAAYD,GACZN,IAAWmB,GAAQb,GACnBK,IAAUQ,IAeVnB,SAZyD,CACzDmB,EACAC,KAEIA,IAAad,IACbC,EAAWa,GACXpB,IAAWmB,EAAOC,KAOtBR,gBAAAA,EACAC,cAAAA,EACAC,cAAAA,EACAC,YAAAA,IAGJ,OACIM,EAAAA,KAAC,SAAA,CACGvB,UAAWwB,EAAAA,KAAK,oBAAqBxB,GACrCC,GAAII,EACJD,IAAAA,EACA,eAAcI,KACVU,KACCA,EAAYO,SAAW,CAAA,EAAKN,EAEhCpB,SAAA,CAAAA,EACD2B,EAAAA,IAAC,OAAI,eAAW,EAAC1B,UAAU,2BACvBD,SAAAwB,EAAAA,KAAC,MAAA,CAAIvB,UAAU,mCACXD,SAAA,CAAA2B,EAAAA,IAAC,MAAA,CAAI1B,UAAU,mCACf0B,EAAAA,IAACC,EAAAA,UAAA,CACGC,MAAI,EACJ5B,UAAU,kDAQtCJ,EAAaiC,YAAc"}