{"version":3,"file":"NavTab.cjs","sources":["../../../../src/components/tabs/NavTab.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { forwardRef, useCallback } from \"react\";\nimport type { PolymorphicRef } from \"../../utilities/index.js\";\nimport type { NavTabProps } from \"./types.js\";\n\ntype NavTabComponent = <ElementType extends React.ElementType = \"a\">(\n    props: NavTabProps<ElementType>,\n) => React.ReactElement | null;\n\nexport const NavTab = forwardRef(function NavTab<\n    ElementType extends React.ElementType = \"a\",\n>(props: NavTabProps<ElementType>, ref?: PolymorphicRef<ElementType>) {\n    const {\n        as = \"a\",\n        \"aria-selected\": selected,\n        className,\n        onBeforeKeyboardNavigation: onBeforeNavigate,\n        ...rest\n    } = props;\n\n    const Component = as;\n\n    const navigate = useCallback(\n        (from: HTMLAnchorElement, to: HTMLAnchorElement) => {\n            if (onBeforeNavigate) {\n                // Åpne for å stoppe selve navigeringen hvis det skulle være behov for å gjøre noe custom med fokus og navigasjon\n                const doNavigate = onBeforeNavigate(from, to);\n                if (doNavigate === false) {\n                    return;\n                }\n            }\n\n            to.focus();\n            // Click brukes for å være router-agnostisk\n            to.click();\n        },\n        [onBeforeNavigate],\n    );\n\n    const handleOnKeyDown = useCallback(\n        (event: React.KeyboardEvent<HTMLAnchorElement>) => {\n            if (event.key === \"ArrowLeft\") {\n                const current = event.currentTarget;\n                const prev = event.currentTarget.previousSibling;\n\n                if (prev) {\n                    navigate(current, prev as HTMLAnchorElement);\n                } else {\n                    navigate(\n                        current,\n                        current.parentElement?.lastChild\n                            ?.previousSibling as HTMLAnchorElement,\n                    );\n                }\n            }\n\n            if (event.key === \"ArrowRight\") {\n                const current = event.currentTarget;\n                const next = event.currentTarget.nextSibling;\n\n                // skip the focus indicator element\n                if (next && next.nodeName === \"A\") {\n                    navigate(current, next as HTMLAnchorElement);\n                } else {\n                    navigate(\n                        current,\n                        current.parentElement?.firstChild as HTMLAnchorElement,\n                    );\n                }\n            }\n        },\n        [navigate],\n    );\n\n    return (\n        <Component\n            ref={ref}\n            {...rest}\n            role=\"tab\"\n            aria-selected={selected}\n            className={clsx(\"jkl-tab\", className)}\n            onKeyDown={handleOnKeyDown}\n            // En faneliste skal være én fokuserbar gruppe.\n            // Piltaster brukes for å veksle mellom faner.\n            // Bare den aktive fanen skal være fokuserbar med tastatur.\n            tabIndex={selected ? 0 : -1}\n        />\n    );\n}) as NavTabComponent;\n"],"names":["NavTab","forwardRef","props","ref","as","selected","className","onBeforeKeyboardNavigation","onBeforeNavigate","rest","Component","navigate","useCallback","from","to","focus","click","handleOnKeyDown","event","key","current","currentTarget","prev","previousSibling","parentElement","lastChild","next","nextSibling","nodeName","firstChild","jsx","role","clsx","onKeyDown","tabIndex"],"mappings":"gLASaA,EAASC,EAAAA,WAAW,SAE/BC,EAAiCC,GAC/B,MACIC,GAAAA,EAAK,IACL,gBAAiBC,EACjBC,UAAAA,EACAC,2BAA4BC,KACzBC,GACHP,EAEEQ,EAAYN,EAEZO,EAAWC,EAAAA,YACb,CAACC,EAAyBC,KAClBN,IAGmB,IADAA,EAAiBK,EAAMC,KAM9CA,EAAGC,QAEHD,EAAGE,UAEP,CAACR,IAGCS,EAAkBL,EAAAA,YACnBM,IACG,GAAkB,cAAdA,EAAMC,IAAqB,CAC3B,MAAMC,EAAUF,EAAMG,cAChBC,EAAOJ,EAAMG,cAAcE,gBAG7BZ,EAASS,EADTE,GAKIF,EAAQI,eAAeC,WACjBF,gBAGlB,CAEA,GAAkB,eAAdL,EAAMC,IAAsB,CAC5B,MAAMC,EAAUF,EAAMG,cAChBK,EAAOR,EAAMG,cAAcM,YAG7BD,GAA0B,MAAlBA,EAAKE,SACbjB,EAASS,EAASM,GAElBf,EACIS,EACAA,EAAQI,eAAeK,WAGnC,GAEJ,CAAClB,IAGL,OACImB,EAAAA,IAACpB,EAAA,CACGP,IAAAA,KACIM,EACJsB,KAAK,MACL,gBAAe1B,EACfC,UAAW0B,EAAAA,KAAK,UAAW1B,GAC3B2B,UAAWhB,EAIXiB,SAAU7B,EAAW,GAAI,GAGrC"}