{"version":3,"file":"PrimitiveAnchor.mjs","sources":["../../../src/primitives/PrimitiveAnchor/PrimitiveAnchor.tsx"],"sourcesContent":["import React, { forwardRef, useCallback } from 'react';\nimport { clsx } from 'clsx';\nimport type { PrimitiveAnchorProps } from '.';\n\n/**\n * The Primitive `PrimitiveAnchor` component is customisable link element that can be\n * used in various parts of the Wise Design System internally. It supports\n * different states such as disabled and provides event handlers for common\n * interactions like click, focus, blur, mouse enter, mouse leave, and key down.\n *\n * @see {@link PrimitiveAnchor} for further information.\n * @see {@link https://storybook.wise.design/?path=/docs/primitive-anchor--docs|Storybook Wise Design}\n */\nconst PrimitiveAnchor = forwardRef<HTMLAnchorElement, PrimitiveAnchorProps>(\n  (\n    {\n      children,\n      className,\n      href,\n      id,\n      disabled = false,\n      testId,\n      onClick,\n      onFocus,\n      onBlur,\n      onMouseEnter,\n      onMouseLeave,\n      onKeyDown,\n      ...props\n    },\n    ref,\n  ) => {\n    const anchorClasses = clsx(className);\n\n    const handleClick = useCallback(\n      (event: React.MouseEvent<HTMLAnchorElement>) => {\n        if (disabled) {\n          event.preventDefault();\n        } else {\n          onClick?.(event);\n        }\n      },\n      [disabled, onClick],\n    );\n\n    const handleFocus = useCallback(\n      (event: React.FocusEvent<HTMLAnchorElement>) => {\n        onFocus?.(event);\n      },\n      [onFocus],\n    );\n\n    const handleBlur = useCallback(\n      (event: React.FocusEvent<HTMLAnchorElement>) => {\n        onBlur?.(event);\n      },\n      [onBlur],\n    );\n\n    const handleMouseEnter = useCallback(\n      (event: React.MouseEvent<HTMLAnchorElement>) => {\n        onMouseEnter?.(event);\n      },\n      [onMouseEnter],\n    );\n\n    const handleMouseLeave = useCallback(\n      (event: React.MouseEvent<HTMLAnchorElement>) => {\n        onMouseLeave?.(event);\n      },\n      [onMouseLeave],\n    );\n\n    const handleKeyDown = useCallback(\n      (event: React.KeyboardEvent<HTMLAnchorElement>) => {\n        onKeyDown?.(event);\n      },\n      [onKeyDown],\n    );\n\n    /**\n     * The following props are set to handle the `disabled` state for the link:\n     *\n     * - `aria-disabled`: Exposes the link as disabled to assistive technologies.\n     * - `href`: Removed when `disabled` is true to prevent navigation.\n     * - `role`: Set to 'link' when `disabled` is true to ensure the element\n     *    is still exposed as a link.\n     *\n     * For more details, refer to Scott O'Hara's article on disabling links:\n     * https://www.scottohara.me/blog/2021/05/28/disabled-links.html\n     */\n    const anchorProps = {\n      'aria-disabled': disabled || undefined,\n      className: anchorClasses,\n      'data-testid': testId,\n      href: disabled ? undefined : href,\n      id,\n      ref,\n      role: disabled ? 'link' : undefined,\n      rel: props.target === '_blank' ? 'noopener noreferrer' : undefined,\n      onClick: handleClick,\n      onFocus: handleFocus,\n      onBlur: handleBlur,\n      onMouseEnter: handleMouseEnter,\n      onMouseLeave: handleMouseLeave,\n      onKeyDown: handleKeyDown,\n      ...props,\n    };\n\n    return <a {...anchorProps}>{children}</a>;\n  },\n);\n\nPrimitiveAnchor.displayName = 'PrimitiveAnchor';\n\nexport default PrimitiveAnchor;\n"],"names":["PrimitiveAnchor","forwardRef","children","className","href","id","disabled","testId","onClick","onFocus","onBlur","onMouseEnter","onMouseLeave","onKeyDown","props","ref","anchorClasses","clsx","handleClick","useCallback","event","preventDefault","handleFocus","handleBlur","handleMouseEnter","handleMouseLeave","handleKeyDown","anchorProps","undefined","role","rel","target","_jsx","displayName"],"mappings":";;;;AAaA,MAAMA,eAAe,gBAAGC,UAAU,CAChC,CACE;EACEC,QAAQ;EACRC,SAAS;EACTC,IAAI;EACJC,EAAE;AACFC,EAAAA,QAAQ,GAAG,KAAK;EAChBC,MAAM;EACNC,OAAO;EACPC,OAAO;EACPC,MAAM;EACNC,YAAY;EACZC,YAAY;EACZC,SAAS;EACT,GAAGC;CACJ,EACDC,GAAG,KACD;AACF,EAAA,MAAMC,aAAa,GAAGC,IAAI,CAACd,SAAS,CAAC;AAErC,EAAA,MAAMe,WAAW,GAAGC,WAAW,CAC5BC,KAA0C,IAAI;AAC7C,IAAA,IAAId,QAAQ,EAAE;MACZc,KAAK,CAACC,cAAc,EAAE;AACxB,IAAA,CAAC,MAAM;MACLb,OAAO,GAAGY,KAAK,CAAC;AAClB,IAAA;AACF,EAAA,CAAC,EACD,CAACd,QAAQ,EAAEE,OAAO,CAAC,CACpB;AAED,EAAA,MAAMc,WAAW,GAAGH,WAAW,CAC5BC,KAA0C,IAAI;IAC7CX,OAAO,GAAGW,KAAK,CAAC;AAClB,EAAA,CAAC,EACD,CAACX,OAAO,CAAC,CACV;AAED,EAAA,MAAMc,UAAU,GAAGJ,WAAW,CAC3BC,KAA0C,IAAI;IAC7CV,MAAM,GAAGU,KAAK,CAAC;AACjB,EAAA,CAAC,EACD,CAACV,MAAM,CAAC,CACT;AAED,EAAA,MAAMc,gBAAgB,GAAGL,WAAW,CACjCC,KAA0C,IAAI;IAC7CT,YAAY,GAAGS,KAAK,CAAC;AACvB,EAAA,CAAC,EACD,CAACT,YAAY,CAAC,CACf;AAED,EAAA,MAAMc,gBAAgB,GAAGN,WAAW,CACjCC,KAA0C,IAAI;IAC7CR,YAAY,GAAGQ,KAAK,CAAC;AACvB,EAAA,CAAC,EACD,CAACR,YAAY,CAAC,CACf;AAED,EAAA,MAAMc,aAAa,GAAGP,WAAW,CAC9BC,KAA6C,IAAI;IAChDP,SAAS,GAAGO,KAAK,CAAC;AACpB,EAAA,CAAC,EACD,CAACP,SAAS,CAAC,CACZ;AAED;;;;;;;;;;AAUG;AACH,EAAA,MAAMc,WAAW,GAAG;IAClB,eAAe,EAAErB,QAAQ,IAAIsB,SAAS;AACtCzB,IAAAA,SAAS,EAAEa,aAAa;AACxB,IAAA,aAAa,EAAET,MAAM;AACrBH,IAAAA,IAAI,EAAEE,QAAQ,GAAGsB,SAAS,GAAGxB,IAAI;IACjCC,EAAE;IACFU,GAAG;AACHc,IAAAA,IAAI,EAAEvB,QAAQ,GAAG,MAAM,GAAGsB,SAAS;IACnCE,GAAG,EAAEhB,KAAK,CAACiB,MAAM,KAAK,QAAQ,GAAG,qBAAqB,GAAGH,SAAS;AAClEpB,IAAAA,OAAO,EAAEU,WAAW;AACpBT,IAAAA,OAAO,EAAEa,WAAW;AACpBZ,IAAAA,MAAM,EAAEa,UAAU;AAClBZ,IAAAA,YAAY,EAAEa,gBAAgB;AAC9BZ,IAAAA,YAAY,EAAEa,gBAAgB;AAC9BZ,IAAAA,SAAS,EAAEa,aAAa;IACxB,GAAGZ;GACJ;AAED,EAAA,oBAAOkB,GAAA,CAAA,GAAA,EAAA;AAAA,IAAA,GAAOL,WAAW;AAAAzB,IAAAA,QAAA,EAAGA;AAAQ,GAAI,CAAC;AAC3C,CAAC;AAGHF,eAAe,CAACiC,WAAW,GAAG,iBAAiB;;;;"}