{"version":3,"file":"Button.mjs","sources":["../../src/button/Button.tsx"],"sourcesContent":["/* eslint-disable react/display-name */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { forwardRef } from 'react';\nimport { ButtonReferenceType, ButtonProps as NewButtonProps } from './Button.types';\nimport { PrimitiveAnchor, PrimitiveButton } from '../primitives';\nimport AvatarLayout from '../avatarLayout';\nimport ProcessIndicator from '../processIndicator';\nimport { clsx } from 'clsx';\nimport { Typography } from '../common';\nimport Body from '../body';\nimport type { CommonProps, LegacyButtonProps, ButtonProps } from './LegacyButton';\n\nconst Button = forwardRef<ButtonReferenceType, NewButtonProps>(\n  (\n    {\n      as,\n      children,\n      className,\n      size = 'lg',\n      href,\n      disabled = false,\n      priority = 'primary',\n      sentiment = 'default',\n      addonStart,\n      addonEnd,\n      // @ts-expect-error NewButtonProps has `type` prop\n      type = 'button',\n      loading = false,\n      block = false,\n      v2,\n      ...props\n    },\n    ref,\n  ) => {\n    const classNames = clsx(\n      'wds-Button',\n      {\n        [`wds-Button--block`]: block,\n        [`wds-Button--disabled`]: disabled,\n        [`wds-Button--loading`]: loading,\n      },\n      `wds-Button--${{ sm: 'small', md: 'medium', lg: 'large' }[size]}`,\n      `wds-Button--${priority}`,\n      `wds-Button--${sentiment}`,\n      className,\n    );\n\n    const contentClassNames = clsx('wds-Button-content', {\n      [`wds-Button-content--loading`]: loading,\n    });\n\n    const content = (\n      <Body\n        as=\"span\"\n        type={size === 'sm' ? Typography.BODY_DEFAULT_BOLD : Typography.BODY_LARGE_BOLD}\n        className={contentClassNames}\n      >\n        {loading && (\n          <ProcessIndicator\n            size={size === 'sm' ? 'xxs' : 'xs'}\n            className=\"wds-Button-loader\"\n            data-testid=\"button-loader-indicator\"\n          />\n        )}\n        <span\n          className=\"wds-Button-label\"\n          id={props.id ? `${props.id}_content` : undefined}\n          aria-hidden={loading}\n        >\n          {size === 'lg' ? (\n            <span className=\"wds-Button-labelText\">{children}</span>\n          ) : (\n            <>\n              {size === 'md' && addonStart?.type === 'avatar' && addonStart.value && (\n                <span className=\"wds-Button-avatars\">\n                  <AvatarLayout orientation=\"horizontal\" avatars={addonStart?.value} size={24} />\n                </span>\n              )}\n\n              {addonStart?.type === 'icon' && addonStart.value && (\n                <span className={`wds-Button-icon wds-Button-icon--${size} wds-Button-icon--start`}>\n                  {addonStart.value}\n                </span>\n              )}\n\n              <span className=\"wds-Button-labelText\">{children}</span>\n\n              {addonEnd?.type === 'icon' && addonEnd?.value && (\n                <span className={`wds-Button-icon wds-Button-icon--${size} wds-Button-icon--end`}>\n                  {addonEnd.value}\n                </span>\n              )}\n            </>\n          )}\n        </span>\n      </Body>\n    );\n\n    if ((href && as !== 'button') || as === 'a') {\n      return (\n        <PrimitiveAnchor\n          ref={ref as React.Ref<HTMLAnchorElement>}\n          {...(props as any)}\n          href={href}\n          className={classNames}\n          disabled={disabled || loading}\n          aria-busy={loading || undefined}\n          type={undefined}\n        >\n          {content}\n        </PrimitiveAnchor>\n      );\n    }\n\n    return (\n      <PrimitiveButton\n        ref={ref as React.Ref<HTMLButtonElement>}\n        {...(props as any)}\n        className={classNames}\n        disabled={disabled}\n        loading={loading}\n        type={type}\n        href={undefined}\n        target={undefined}\n      >\n        {content}\n      </PrimitiveButton>\n    );\n  },\n);\n\nexport default Button;\n\n// re-export APIs for backwards compatibility with legacy Button interface\n// delete this when migration to new Button is done (or aleast no more deep imports, use following query)\n// https://github.com/search?q=org%3Atransferwise+%2Fbuild%5C%2Ftypes%5C%2Fbutton%2F+-is%3Aarchived&type=code\nexport { CommonProps, LegacyButtonProps as Props, ButtonProps };\n"],"names":["Button","forwardRef","as","children","className","size","href","disabled","priority","sentiment","addonStart","addonEnd","type","loading","block","v2","props","ref","classNames","clsx","sm","md","lg","contentClassNames","content","_jsxs","Body","Typography","BODY_DEFAULT_BOLD","BODY_LARGE_BOLD","_jsx","ProcessIndicator","id","undefined","_Fragment","value","AvatarLayout","orientation","avatars","PrimitiveAnchor","PrimitiveButton","target"],"mappings":"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"}