{"version":3,"file":"Button.cjs","sources":["../../../../src/components/button/Button.tsx"],"sourcesContent":["import cn from \"clsx\";\nimport React, { type ButtonHTMLAttributes } from \"react\";\nimport { useAriaLiveRegion } from \"../../hooks/useAriaLiveRegion/useAriaLiveRegion.js\";\nimport type { PolymorphicRef } from \"../../utilities/polymorphism/polymorphism.js\";\nimport { Loader } from \"../loader/Loader.js\";\nimport type { ButtonComponent, ButtonProps } from \"./types.js\";\n\nexport const Button = React.forwardRef(function Button<\n    ElementType extends React.ElementType = \"button\",\n>(props: ButtonProps<ElementType>, ref?: PolymorphicRef<ElementType>) {\n    const {\n        as = \"button\",\n        children,\n        className,\n        onTouchStart,\n        onAnimationEnd,\n        loader,\n        icon,\n        iconPosition = \"left\",\n        iconLeft,\n        iconRight,\n        variant = \"secondary\",\n        ...rest\n    } = props;\n\n    const Component = as;\n\n    if (\n        process.env.NODE_ENV !== \"production\" &&\n        React.Children.count(children) === 0 &&\n        !props[\"aria-label\"] &&\n        !props[\"aria-labelledby\"] &&\n        !props.title\n    ) {\n        console.warn(\n            \"Når du lager en Button uten synlig tekst må du huske å gi den et navn med enten aria-label, aria-labelledby eller title\",\n        );\n    }\n\n    const ariaLive = useAriaLiveRegion(loader?.showLoader);\n    const showLoader = Boolean(children) && Boolean(loader?.showLoader);\n\n    return (\n        <Component\n            {...ariaLive}\n            data-loading={showLoader}\n            className={cn(\"jkl-button\", `jkl-button--${variant}`, className)}\n            disabled={as === \"button\" ? loader?.showLoader : undefined}\n            {...rest}\n            ref={ref}\n        >\n            <div className=\"jkl-button__label\">\n                {iconLeft && iconLeft}\n                {icon && iconPosition === \"left\" && icon}\n                {children && (\n                    <span className=\"jkl-button__text\">{children}</span>\n                )}\n                {iconRight && iconRight}\n                {icon && iconPosition === \"right\" && icon}\n            </div>\n\n            {children && (\n                <Loader\n                    className=\"jkl-button__loader\"\n                    variant=\"medium\"\n                    textDescription={\n                        loader?.textDescription || \"Vennligst vent\"\n                    }\n                    aria-hidden={!loader?.showLoader}\n                />\n            )}\n        </Component>\n    );\n}) as ButtonComponent;\n\n/**\n * @deprecated bruk heller {@link Button} med ghost-varianten\n */\nexport function PrimaryButton<ElementType extends React.ElementType = \"button\">(\n    props: Omit<ButtonProps<ElementType>, \"variant\" | \"onClick\" | \"as\"> &\n        Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\">,\n) {\n    const buttonProps = {\n        ...props,\n        variant: \"primary\",\n    } as ButtonProps<ElementType>;\n    return <Button {...buttonProps} />;\n}\n\n/**\n * @deprecated bruk heller {@link Button} med ghost-varianten\n */\nexport function SecondaryButton<\n    ElementType extends React.ElementType = \"button\",\n>(\n    props: Omit<ButtonProps<ElementType>, \"variant\" | \"onClick\" | \"as\"> &\n        Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\">,\n) {\n    const buttonProps = {\n        ...props,\n        variant: \"secondary\",\n    } as ButtonProps<ElementType>;\n    return <Button {...buttonProps} />;\n}\n\n/**\n * @deprecated bruk heller {@link Button} med ghost-varianten\n */\nexport function TertiaryButton<\n    ElementType extends React.ElementType = \"button\",\n>(\n    props: Omit<ButtonProps<ElementType>, \"variant\" | \"onClick\" | \"as\"> &\n        Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\">,\n) {\n    const buttonProps = {\n        ...props,\n        variant: \"tertiary\",\n    } as ButtonProps<ElementType>;\n    return <Button {...buttonProps} />;\n}\n\n/**\n * @deprecated bruk heller {@link Button} med ghost-varianten\n */\nexport function GhostButton<ElementType extends React.ElementType = \"button\">(\n    props: Omit<ButtonProps<ElementType>, \"variant\" | \"loader\">,\n) {\n    const buttonProps = {\n        ...props,\n        variant: \"ghost\",\n    } as ButtonProps<ElementType>;\n    return <Button {...buttonProps} />;\n}\n"],"names":["Button","React","forwardRef","props","ref","as","children","className","onTouchStart","onAnimationEnd","loader","icon","iconPosition","iconLeft","iconRight","variant","rest","Component","process","env","NODE_ENV","Children","count","title","console","warn","ariaLive","useAriaLiveRegion","showLoader","jsxs","cn","disabled","jsx","Loader","textDescription","buttonProps"],"mappings":"mRAOaA,EAASC,EAAMC,WAAW,SAErCC,EAAiCC,GAC/B,MACIC,GAAAA,EAAK,SACLC,SAAAA,EACAC,UAAAA,EACAC,aAAAA,EACAC,eAAAA,EACAC,OAAAA,EACAC,KAAAA,EACAC,aAAAA,EAAe,OACfC,SAAAA,EACAC,UAAAA,EACAC,QAAAA,EAAU,eACPC,GACHb,EAEEc,EAAYZ,EAGW,eAAzBa,QAAQC,IAAIC,UACuB,IAAnCnB,EAAMoB,SAASC,MAAMhB,KACpBH,EAAM,gBACNA,EAAM,qBACNA,EAAMoB,OAEPC,QAAQC,KACJ,2HAIR,MAAMC,EAAWC,EAAAA,kBAAkBjB,GAAQkB,YACrCA,IAAqBtB,KAAqBI,GAAQkB,WAExD,OACIC,EAAAA,KAACZ,EAAA,IACOS,EACJ,eAAcE,EACdrB,UAAWuB,EAAAA,KAAG,aAAc,eAAef,IAAWR,GACtDwB,SAAiB,WAAP1B,EAAkBK,GAAQkB,gBAAa,KAC7CZ,EACJZ,IAAAA,EAEAE,SAAA,CAAAuB,EAAAA,KAAC,MAAA,CAAItB,UAAU,oBACVD,SAAA,CAAAO,GAAYA,EACZF,GAAyB,SAAjBC,GAA2BD,EACnCL,GACG0B,EAAAA,IAAC,OAAA,CAAKzB,UAAU,mBAAoBD,SAAAA,IAEvCQ,GAAaA,EACbH,GAAyB,UAAjBC,GAA4BD,KAGxCL,GACG0B,EAAAA,IAACC,EAAAA,OAAA,CACG1B,UAAU,qBACVQ,QAAQ,SACRmB,gBACIxB,GAAQwB,iBAAmB,iBAE/B,eAAcxB,GAAQkB,eAK1C,wCAmDO,SACHzB,GAEA,MAAMgC,EAAc,IACbhC,EACHY,QAAS,SAEb,OAAOiB,MAAChC,EAAA,IAAWmC,GACvB,wBAtDO,SACHhC,GAGA,MAAMgC,EAAc,IACbhC,EACHY,QAAS,WAEb,OAAOiB,MAAChC,EAAA,IAAWmC,GACvB,0BAKO,SAGHhC,GAGA,MAAMgC,EAAc,IACbhC,EACHY,QAAS,aAEb,OAAOiB,MAAChC,EAAA,IAAWmC,GACvB,yBAKO,SAGHhC,GAGA,MAAMgC,EAAc,IACbhC,EACHY,QAAS,YAEb,OAAOiB,MAAChC,EAAA,IAAWmC,GACvB"}