{"version":3,"file":"BaseButton.mjs","names":[],"sources":["../../src/BaseButton.tsx"],"sourcesContent":["import {ReactNode, Ref, useCallback} from 'react';\n\nexport interface CustomBaseButtonProps<AsType> {\n  /** Provide a React element or component to render as the underlying button. Note: for accessibility compliance, almost always you should use a `button` element, or a component that renders an underlying button. */\n  as?: AsType;\n  /** Any ReactNode elements. */\n  children: ReactNode;\n  /** Click event handler. Default behaviour triggers unless prevented */\n  onClick?: (\n    event?: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n  ) => void | boolean;\n  /** A default `onClick` behavior */\n  defaultOnClick?: (\n    event?: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n  ) => void | boolean;\n  /** A `ref` to the underlying button */\n  buttonRef?: Ref<HTMLButtonElement>;\n}\n\nexport type BaseButtonProps<AsType extends React.ElementType> =\n  CustomBaseButtonProps<AsType> &\n    (AsType extends keyof React.JSX.IntrinsicElements\n      ? Omit<\n          React.ComponentPropsWithoutRef<AsType>,\n          keyof CustomBaseButtonProps<AsType>\n        >\n      : React.ComponentPropsWithoutRef<AsType>);\n\nexport function BaseButton<AsType extends React.ElementType = 'button'>(\n  props: BaseButtonProps<AsType>,\n): JSX.Element {\n  const {\n    as,\n    onClick,\n    defaultOnClick,\n    children,\n    buttonRef,\n    ...passthroughProps\n  } = props;\n\n  const handleOnClick = useCallback(\n    (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n      if (onClick) {\n        const clickShouldContinue = onClick(event);\n        if (\n          (typeof clickShouldContinue === 'boolean' &&\n            clickShouldContinue === false) ||\n          event?.defaultPrevented\n        )\n          return;\n      }\n\n      defaultOnClick?.(event);\n    },\n    [defaultOnClick, onClick],\n  );\n\n  const Component = as || 'button';\n\n  return (\n    <Component ref={buttonRef} onClick={handleOnClick} {...passthroughProps}>\n      {children}\n    </Component>\n  );\n}\n"],"mappings":";;;AA4BA,SAAgB,WACd,OACa;CACb,MAAM,EACJ,IACA,SACA,gBACA,UACA,WACA,GAAG,qBACD;CAEJ,MAAM,gBAAgB,aACnB,UAA4D;AAC3D,MAAI,SAAS;GACX,MAAM,sBAAsB,QAAQ,MAAM;AAC1C,OACG,OAAO,wBAAwB,aAC9B,wBAAwB,SAC1B,OAAO,iBAEP;;AAGJ,mBAAiB,MAAM;IAEzB,CAAC,gBAAgB,QAAQ,CAC1B;AAID,QACE,oBAHgB,MAAM,UAGtB;EAAW,KAAK;EAAW,SAAS;EAAe,GAAI;EACpD;EACS,CAAA"}