{"version":3,"file":"PrimitiveButton.mjs","sources":["../../../src/primitives/PrimitiveButton/PrimitiveButton.tsx"],"sourcesContent":["/* eslint-disable react/button-has-type */\nimport React, { forwardRef, useCallback } from 'react';\nimport { clsx } from 'clsx';\nimport { useIntl, MessageDescriptor } from 'react-intl';\nimport messages from '../../i18n/commonMessages/Button.messages';\nimport type { PrimitiveButtonProps } from '.';\n\n/**\n * The Primitive `PrimitiveButton` component can be used in various parts the Wise Design\n * System internally. It supports different states such as disabled and loading,\n * and provides event handlers for common interactions like click, focus, blur,\n * mouse enter, mouse leave, and keydown.\n *\n * @see {@link PrimitiveButton} for further information.\n * @see {@link https://storybook.wise.design/?path=/docs/primitive-button--docs|Storybook Wise Design}\n */\nconst PrimitiveButton = forwardRef<HTMLButtonElement, PrimitiveButtonProps>(\n  (\n    {\n      children,\n      className,\n      id,\n      disabled = false,\n      loading = false,\n      testId,\n      type = 'button',\n      onClick,\n      onFocus,\n      onBlur,\n      onMouseEnter,\n      onMouseLeave,\n      onKeyDown,\n      ...props\n    },\n    ref,\n  ) => {\n    const intl = useIntl();\n    const classNames = clsx(className);\n\n    const handleClick = useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        if (disabled || loading) {\n          event.preventDefault();\n        } else {\n          onClick?.(event);\n        }\n      },\n      [disabled, loading, onClick],\n    );\n\n    const handleFocus = useCallback(\n      (event: React.FocusEvent<HTMLButtonElement>) => {\n        onFocus?.(event);\n      },\n      [onFocus],\n    );\n\n    const handleBlur = useCallback(\n      (event: React.FocusEvent<HTMLButtonElement>) => {\n        onBlur?.(event);\n      },\n      [onBlur],\n    );\n\n    const handleMouseEnter = useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onMouseEnter?.(event);\n      },\n      [onMouseEnter],\n    );\n\n    const handleMouseLeave = useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onMouseLeave?.(event);\n      },\n      [onMouseLeave],\n    );\n\n    const handleKeyDown = useCallback(\n      (event: React.KeyboardEvent<HTMLButtonElement>) => {\n        onKeyDown?.(event);\n      },\n      [onKeyDown],\n    );\n\n    /**\n     * The following props are used to manage the `disabled` and `loading`\n     * states for the button:\n     *\n     * - `aria-disabled`: Communicates to assistive technologies that the button\n     *   is disabled when it is either disabled or loading.\n     * - `aria-label`: Provides an accessible label for the button, using a\n     *   localized loading message when the button is in a loading state.\n     * - `aria-live`: Ensures that updates to the button's content are announced\n     *   by assistive technologies, set to 'polite' during loading.\n     */\n    const buttonProps = {\n      'aria-disabled': loading || undefined,\n      'aria-busy': loading || undefined,\n      'aria-label': loading ? intl.formatMessage(messages.loadingAriaLabel) : props['aria-label'],\n      'aria-live': (loading ? 'polite' : 'off') as 'polite' | 'off' | 'assertive' | undefined,\n      className: classNames,\n      'data-testid': testId,\n      disabled,\n      id,\n      ref,\n      type,\n      onBlur: handleBlur,\n      onClick: handleClick,\n      onFocus: handleFocus,\n      onMouseEnter: handleMouseEnter,\n      onMouseLeave: handleMouseLeave,\n      onKeyDown: handleKeyDown,\n      ...props,\n    };\n\n    return <button {...buttonProps}>{children}</button>;\n  },\n);\n\nPrimitiveButton.displayName = 'PrimitiveButton';\n\nexport default PrimitiveButton;\n"],"names":["PrimitiveButton","forwardRef","children","className","id","disabled","loading","testId","type","onClick","onFocus","onBlur","onMouseEnter","onMouseLeave","onKeyDown","props","ref","intl","useIntl","classNames","clsx","handleClick","useCallback","event","preventDefault","handleFocus","handleBlur","handleMouseEnter","handleMouseLeave","handleKeyDown","buttonProps","undefined","formatMessage","messages","loadingAriaLabel","_jsx","displayName"],"mappings":";;;;;;AAAA;AAgBA,MAAMA,eAAe,gBAAGC,UAAU,CAChC,CACE;EACEC,QAAQ;EACRC,SAAS;EACTC,EAAE;AACFC,EAAAA,QAAQ,GAAG,KAAK;AAChBC,EAAAA,OAAO,GAAG,KAAK;EACfC,MAAM;AACNC,EAAAA,IAAI,GAAG,QAAQ;EACfC,OAAO;EACPC,OAAO;EACPC,MAAM;EACNC,YAAY;EACZC,YAAY;EACZC,SAAS;EACT,GAAGC;CACJ,EACDC,GAAG,KACD;AACF,EAAA,MAAMC,IAAI,GAAGC,OAAO,EAAE;AACtB,EAAA,MAAMC,UAAU,GAAGC,IAAI,CAACjB,SAAS,CAAC;AAElC,EAAA,MAAMkB,WAAW,GAAGC,WAAW,CAC5BC,KAA0C,IAAI;IAC7C,IAAIlB,QAAQ,IAAIC,OAAO,EAAE;MACvBiB,KAAK,CAACC,cAAc,EAAE;AACxB,IAAA,CAAC,MAAM;MACLf,OAAO,GAAGc,KAAK,CAAC;AAClB,IAAA;EACF,CAAC,EACD,CAAClB,QAAQ,EAAEC,OAAO,EAAEG,OAAO,CAAC,CAC7B;AAED,EAAA,MAAMgB,WAAW,GAAGH,WAAW,CAC5BC,KAA0C,IAAI;IAC7Cb,OAAO,GAAGa,KAAK,CAAC;AAClB,EAAA,CAAC,EACD,CAACb,OAAO,CAAC,CACV;AAED,EAAA,MAAMgB,UAAU,GAAGJ,WAAW,CAC3BC,KAA0C,IAAI;IAC7CZ,MAAM,GAAGY,KAAK,CAAC;AACjB,EAAA,CAAC,EACD,CAACZ,MAAM,CAAC,CACT;AAED,EAAA,MAAMgB,gBAAgB,GAAGL,WAAW,CACjCC,KAA0C,IAAI;IAC7CX,YAAY,GAAGW,KAAK,CAAC;AACvB,EAAA,CAAC,EACD,CAACX,YAAY,CAAC,CACf;AAED,EAAA,MAAMgB,gBAAgB,GAAGN,WAAW,CACjCC,KAA0C,IAAI;IAC7CV,YAAY,GAAGU,KAAK,CAAC;AACvB,EAAA,CAAC,EACD,CAACV,YAAY,CAAC,CACf;AAED,EAAA,MAAMgB,aAAa,GAAGP,WAAW,CAC9BC,KAA6C,IAAI;IAChDT,SAAS,GAAGS,KAAK,CAAC;AACpB,EAAA,CAAC,EACD,CAACT,SAAS,CAAC,CACZ;AAED;;;;;;;;;;AAUG;AACH,EAAA,MAAMgB,WAAW,GAAG;IAClB,eAAe,EAAExB,OAAO,IAAIyB,SAAS;IACrC,WAAW,EAAEzB,OAAO,IAAIyB,SAAS;AACjC,IAAA,YAAY,EAAEzB,OAAO,GAAGW,IAAI,CAACe,aAAa,CAACC,QAAQ,CAACC,gBAAgB,CAAC,GAAGnB,KAAK,CAAC,YAAY,CAAC;AAC3F,IAAA,WAAW,EAAGT,OAAO,GAAG,QAAQ,GAAG,KAAoD;AACvFH,IAAAA,SAAS,EAAEgB,UAAU;AACrB,IAAA,aAAa,EAAEZ,MAAM;IACrBF,QAAQ;IACRD,EAAE;IACFY,GAAG;IACHR,IAAI;AACJG,IAAAA,MAAM,EAAEe,UAAU;AAClBjB,IAAAA,OAAO,EAAEY,WAAW;AACpBX,IAAAA,OAAO,EAAEe,WAAW;AACpBb,IAAAA,YAAY,EAAEe,gBAAgB;AAC9Bd,IAAAA,YAAY,EAAEe,gBAAgB;AAC9Bd,IAAAA,SAAS,EAAEe,aAAa;IACxB,GAAGd;GACJ;AAED,EAAA,oBAAOoB,GAAA,CAAA,QAAA,EAAA;AAAA,IAAA,GAAYL,WAAW;AAAA5B,IAAAA,QAAA,EAAGA;AAAQ,GAAS,CAAC;AACrD,CAAC;AAGHF,eAAe,CAACoC,WAAW,GAAG,iBAAiB;;;;"}