@algolia/satellite 1.0.0-beta.157 → 1.0.0-beta.158

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/cjs/Badge/Badge.d.ts +2 -2
  2. package/cjs/Badge/Badge.js +7 -6
  3. package/cjs/Banners/Alert/Alert.js +1 -1
  4. package/cjs/Button/Button.d.ts +3 -5
  5. package/cjs/Button/Button.js +8 -51
  6. package/cjs/Button/IconButton.d.ts +3 -18
  7. package/cjs/Button/IconButton.js +8 -64
  8. package/cjs/Button/PolymorphicButton.d.ts +11 -0
  9. package/cjs/Button/PolymorphicButton.js +76 -0
  10. package/cjs/Button/PolymorphicIconButton.d.ts +24 -0
  11. package/cjs/Button/PolymorphicIconButton.js +84 -0
  12. package/cjs/Button/index.d.ts +1 -1
  13. package/cjs/Button/index.js +16 -12
  14. package/cjs/Button/types.d.ts +11 -6
  15. package/cjs/Button/types.js +3 -1
  16. package/cjs/Dropdown/DropdownButton.d.ts +3 -3
  17. package/cjs/Dropdown/DropdownButton.js +5 -2
  18. package/cjs/Link/ButtonLink.d.ts +5 -3
  19. package/cjs/Link/ButtonLink.js +9 -6
  20. package/cjs/Link/IconButtonLink.d.ts +5 -4
  21. package/cjs/Link/IconButtonLink.js +8 -5
  22. package/cjs/Medallion/Medallion.js +1 -1
  23. package/cjs/Modal/Modal.d.ts +35 -11
  24. package/cjs/Modal/Modal.js +131 -95
  25. package/cjs/Modal/Modal.tailwind.js +7 -0
  26. package/cjs/Satellite/Satellite.d.ts +2 -1
  27. package/cjs/Satellite/Satellite.js +26 -2
  28. package/cjs/Tag/Tag.d.ts +26 -6
  29. package/cjs/Tag/Tag.js +51 -19
  30. package/cjs/Tag/Tag.tailwind.js +17 -1
  31. package/cjs/styles/colors.d.ts +18 -0
  32. package/cjs/styles/colors.js +33 -15
  33. package/cjs/types.d.ts +9 -0
  34. package/esm/Badge/Badge.d.ts +2 -2
  35. package/esm/Badge/Badge.js +7 -6
  36. package/esm/Banners/Alert/Alert.js +1 -1
  37. package/esm/Button/Button.d.ts +3 -5
  38. package/esm/Button/Button.js +8 -52
  39. package/esm/Button/IconButton.d.ts +3 -18
  40. package/esm/Button/IconButton.js +8 -66
  41. package/esm/Button/PolymorphicButton.d.ts +11 -0
  42. package/esm/Button/PolymorphicButton.js +66 -0
  43. package/esm/Button/PolymorphicIconButton.d.ts +24 -0
  44. package/esm/Button/PolymorphicIconButton.js +78 -0
  45. package/esm/Button/index.d.ts +1 -1
  46. package/esm/Button/index.js +1 -1
  47. package/esm/Button/types.d.ts +11 -6
  48. package/esm/Button/types.js +3 -1
  49. package/esm/Dropdown/DropdownButton.d.ts +3 -3
  50. package/esm/Dropdown/DropdownButton.js +5 -2
  51. package/esm/Link/ButtonLink.d.ts +5 -3
  52. package/esm/Link/ButtonLink.js +9 -6
  53. package/esm/Link/IconButtonLink.d.ts +5 -4
  54. package/esm/Link/IconButtonLink.js +8 -5
  55. package/esm/Medallion/Medallion.js +1 -1
  56. package/esm/Modal/Modal.d.ts +35 -11
  57. package/esm/Modal/Modal.js +129 -96
  58. package/esm/Modal/Modal.tailwind.js +7 -0
  59. package/esm/Satellite/Satellite.d.ts +2 -1
  60. package/esm/Satellite/Satellite.js +24 -1
  61. package/esm/Tag/Tag.d.ts +26 -6
  62. package/esm/Tag/Tag.js +52 -20
  63. package/esm/Tag/Tag.tailwind.js +17 -1
  64. package/esm/styles/colors.d.ts +18 -0
  65. package/esm/styles/colors.js +33 -15
  66. package/esm/types.d.ts +9 -0
  67. package/package.json +7 -4
  68. package/satellite.min.css +1 -1
  69. package/scss/colors.scss +27 -10
@@ -1,6 +1,6 @@
1
1
  import type { FunctionComponent, HTMLAttributes, ReactNode } from "react";
2
2
  import type { AtLeastOne, ColorVariant, IconComponentType } from "../types";
3
- export declare type BadgeSizes = "default" | "small";
3
+ export declare type BadgeSizes = "small" | "medium" | "large";
4
4
  export declare type BadgeVariants = ColorVariant | "pink";
5
5
  interface BaseBadgeProps extends HTMLAttributes<HTMLDivElement> {
6
6
  /** @default "grey" */
@@ -21,7 +21,7 @@ export declare type BadgeProps = BaseBadgeProps & AtLeastOne<BadgeContentProps>;
21
21
  *
22
22
  * - Stay consistent with badge content (text), don't vary your vocabulary
23
23
  * - Bages usually come after a textual information or explanation
24
- * - Don't use badges where traditional error messages (such as form validation) can be used instead
24
+ * - Don't use badges where traditional error messages (such as form validation) can be used instead
25
25
  * - Don't use badges with combination of buttons
26
26
  * - Badges are not interactive
27
27
  *
@@ -13,7 +13,7 @@ var _satellitePrefixer = _interopRequireDefault(require("../styles/helpers/satel
13
13
  var _isRenderedChild = _interopRequireDefault(require("../utils/isRenderedChild"));
14
14
  var _jsxRuntime = require("react/jsx-runtime");
15
15
  var _excluded = ["children", "value", "icon", "variant", "size", "className"];
16
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11;
16
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12;
17
17
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18
18
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
19
19
  var BASE_CLASSNAMES = (0, _satellitePrefixer["default"])(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n inline-flex items-center justify-center\n rounded-full border\n overflow-hidden\n"])));
@@ -27,8 +27,9 @@ var VARIANT_CLASSNAMES = {
27
27
  pink: (0, _satellitePrefixer["default"])(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["bg-pink-100 border-pink-200 text-pink-700"])))
28
28
  };
29
29
  var SIZE_CLASSNAMES = {
30
- "default": (0, _satellitePrefixer["default"])(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["h-6 display-body px-2 space-x-2"]))),
31
- small: (0, _satellitePrefixer["default"])(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["h-4 display-caption px-1 space-x-1"])))
30
+ small: (0, _satellitePrefixer["default"])(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["h-4 display-caption px-1 space-x-1"]))),
31
+ medium: (0, _satellitePrefixer["default"])(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["h-5 display-body px-2 space-x-2"]))),
32
+ large: (0, _satellitePrefixer["default"])(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["h-6 display-body px-2 space-x-2"])))
32
33
  };
33
34
 
34
35
  /**
@@ -36,7 +37,7 @@ var SIZE_CLASSNAMES = {
36
37
  *
37
38
  * - Stay consistent with badge content (text), don't vary your vocabulary
38
39
  * - Bages usually come after a textual information or explanation
39
- * - Don't use badges where traditional error messages (such as form validation) can be used instead
40
+ * - Don't use badges where traditional error messages (such as form validation) can be used instead
40
41
  * - Don't use badges with combination of buttons
41
42
  * - Badges are not interactive
42
43
  *
@@ -53,7 +54,7 @@ var Badge = function Badge(_ref) {
53
54
  _ref$variant = _ref.variant,
54
55
  variant = _ref$variant === void 0 ? "grey" : _ref$variant,
55
56
  _ref$size = _ref.size,
56
- size = _ref$size === void 0 ? "default" : _ref$size,
57
+ size = _ref$size === void 0 ? "large" : _ref$size,
57
58
  className = _ref.className,
58
59
  props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
59
60
  var badgeClassName = (0, _clsx["default"])(BASE_CLASSNAMES, VARIANT_CLASSNAMES[variant], SIZE_CLASSNAMES[size], className);
@@ -64,7 +65,7 @@ var Badge = function Badge(_ref) {
64
65
  size: ".8em"
65
66
  })
66
67
  }), (0, _isRenderedChild["default"])(children) && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
67
- className: (0, _satellitePrefixer["default"])(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["truncate"]))),
68
+ className: (0, _satellitePrefixer["default"])(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2["default"])(["truncate"]))),
68
69
  children: children
69
70
  }), (0, _isRenderedChild["default"])(value) && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
70
71
  children: value
@@ -37,7 +37,7 @@ var ICON_VARIANTS = {
37
37
  var ICON_CLASSNAME_VARIANTS = {
38
38
  grey: (0, _satellitePrefixer["default"])(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2["default"])(["text-grey-600"]))),
39
39
  accent: (0, _satellitePrefixer["default"])(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteral2["default"])(["text-accent-600"]))),
40
- green: (0, _satellitePrefixer["default"])(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteral2["default"])(["text-green-700"]))),
40
+ green: (0, _satellitePrefixer["default"])(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteral2["default"])(["text-green-600"]))),
41
41
  orange: (0, _satellitePrefixer["default"])(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteral2["default"])(["text-orange-600"]))),
42
42
  red: (0, _satellitePrefixer["default"])(_templateObject16 || (_templateObject16 = (0, _taggedTemplateLiteral2["default"])(["text-red-600"])))
43
43
  };
@@ -1,8 +1,6 @@
1
1
  /// <reference types="react" />
2
- import { AcceptableButtonType, ButtonBaseProps, ExtractProps } from "./types";
3
- export declare type ButtonProps<T extends AcceptableButtonType = "button"> = ButtonBaseProps & ExtractProps<T> & {
4
- as?: T;
5
- };
2
+ import { type PolymorphicButtonProps } from "./PolymorphicButton";
3
+ export declare type ButtonProps = Omit<PolymorphicButtonProps<"button">, "as" | "ref">;
6
4
  /**
7
5
  * Buttons are used to trigger user actions (like "Add", "Close" or "Save") or navigate users elsewhere through the links. Buttons can contain a combination of a clear label and an icon while links are always text.
8
6
  *
@@ -17,5 +15,5 @@ export declare type ButtonProps<T extends AcceptableButtonType = "button"> = But
17
15
  * - Use icon-only button for an action that is less critical and doesn't have to drag too much of user attention
18
16
  * - Buttons can take the full width to fill the parent container
19
17
  */
20
- export declare const Button: <T extends AcceptableButtonType = "button">(props: ButtonProps<T>) => JSX.Element;
18
+ export declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
21
19
  export default Button;
@@ -6,20 +6,11 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports["default"] = exports.Button = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
- var _clsx = _interopRequireDefault(require("clsx"));
12
- var _ProgressSpinner = _interopRequireDefault(require("../ProgressSpinner"));
13
- var _satellitePrefixer = _interopRequireDefault(require("../styles/helpers/satellitePrefixer"));
14
- var _styles = require("./styles");
15
- var _types = require("./types");
9
+ var _react = require("react");
10
+ var _PolymorphicButton = require("./PolymorphicButton");
16
11
  var _jsxRuntime = require("react/jsx-runtime");
17
- var _excluded = ["as", "className", "variant", "size", "startIcon", "endIcon", "loading", "children"];
18
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
19
12
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
20
13
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
21
- var BASE_CLASSNAMES = (0, _satellitePrefixer["default"])(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["btn inline-flex justify-center items-center px-4 typo-display-body"])));
22
-
23
14
  /**
24
15
  * Buttons are used to trigger user actions (like "Add", "Close" or "Save") or navigate users elsewhere through the links. Buttons can contain a combination of a clear label and an icon while links are always text.
25
16
  *
@@ -34,47 +25,13 @@ var BASE_CLASSNAMES = (0, _satellitePrefixer["default"])(_templateObject || (_te
34
25
  * - Use icon-only button for an action that is less critical and doesn't have to drag too much of user attention
35
26
  * - Buttons can take the full width to fill the parent container
36
27
  */
37
- var Button = function Button(props) {
38
- var _props$as = props.as,
39
- Component = _props$as === void 0 ? "button" : _props$as,
40
- className = props.className,
41
- _props$variant = props.variant,
42
- variant = _props$variant === void 0 ? "neutral" : _props$variant,
43
- _props$size = props.size,
44
- size = _props$size === void 0 ? "medium" : _props$size,
45
- StartIcon = props.startIcon,
46
- EndIcon = props.endIcon,
47
- _props$loading = props.loading,
48
- loading = _props$loading === void 0 ? false : _props$loading,
49
- children = props.children,
50
- cleanedProps = (0, _objectWithoutProperties2["default"])(props, _excluded);
51
- if (loading) {
52
- cleanedProps.disabled = true;
53
- }
54
- var buttonClassName = (0, _clsx["default"])(BASE_CLASSNAMES, _styles.BUTTON_SIZE_CLASSNAMES[size], _styles.BUTTON_VARIANT_CLASSNAMES[variant], cleanedProps.disabled && (0, _satellitePrefixer["default"])(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["btn-disabled"]))), className);
55
- var loaderClassNames = (0, _satellitePrefixer["default"])(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["absolute ", ""])), (variant === "destructive" || variant === "primary") && "text-white");
56
- var iconClassNames = (0, _clsx["default"])((0, _styles.getIconColorClassName)(props), loading && (0, _satellitePrefixer["default"])(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["invisible"]))));
57
- var textClassNames = (0, _clsx["default"])(loading && (0, _satellitePrefixer["default"])(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["invisible"]))));
58
- if ((0, _types.isButtonType)(props) && !Object.prototype.hasOwnProperty.call(cleanedProps, "type")) {
59
- // @ts-ignore
60
- cleanedProps.type = "button";
61
- }
62
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Component, _objectSpread(_objectSpread({}, cleanedProps), {}, {
63
- className: buttonClassName,
64
- children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ProgressSpinner["default"], {
65
- className: loaderClassNames,
66
- size: _styles.BUTTON_LOADER_ICON_SIZES[size],
67
- thickness: 1
68
- }), StartIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(StartIcon, {
69
- className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["shrink-0 pr-2"]))), iconClassNames)
70
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
71
- className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["truncate text-center"]))), textClassNames),
72
- children: children
73
- }), EndIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(EndIcon, {
74
- className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["shrink-0 pl-2"]))), iconClassNames)
75
- })]
28
+ var Button = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
29
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PolymorphicButton.PolymorphicButton, _objectSpread(_objectSpread({}, props), {}, {
30
+ as: "button",
31
+ ref: ref
76
32
  }));
77
- };
33
+ });
78
34
  exports.Button = Button;
35
+ Button.displayName = "Button";
79
36
  var _default = Button;
80
37
  exports["default"] = _default;
@@ -1,20 +1,5 @@
1
1
  /// <reference types="react" />
2
- import type { TooltipWrapperBaseProps } from "../Tooltip/types";
3
- import type { IconComponentType } from "../types";
4
- import { AcceptableButtonType, ButtonSize, ButtonVariant, ExtractProps } from "./types";
5
- export interface IconButtonBaseProps {
6
- variant?: ButtonVariant;
7
- size?: ButtonSize;
8
- disabled?: boolean;
9
- icon: IconComponentType;
10
- title: string;
11
- showTooltip?: boolean;
12
- /** @default "top" */
13
- tooltipPlacement?: TooltipWrapperBaseProps["placement"];
14
- loading?: boolean;
15
- }
16
- export declare type IconButtonProps<T extends AcceptableButtonType> = IconButtonBaseProps & ExtractProps<T> & {
17
- as?: T;
18
- };
19
- export declare const IconButton: <T extends AcceptableButtonType = "button">(props: IconButtonProps<T>) => JSX.Element;
2
+ import { type PolymorphicIconButtonProps } from "./PolymorphicIconButton";
3
+ export declare type IconButtonProps = Omit<PolymorphicIconButtonProps<"button">, "as" | "ref">;
4
+ export declare const IconButton: import("react").ForwardRefExoticComponent<IconButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
20
5
  export default IconButton;
@@ -5,75 +5,19 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports["default"] = exports.IconButton = void 0;
8
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
9
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
- var _clsx = _interopRequireDefault(require("clsx"));
12
- var _ProgressSpinner = _interopRequireDefault(require("../ProgressSpinner"));
13
- var _satellitePrefixer = _interopRequireDefault(require("../styles/helpers/satellitePrefixer"));
14
- var _Tooltip = require("../Tooltip");
15
- var _styles = require("./styles");
16
- var _types = require("./types");
9
+ var _react = require("react");
10
+ var _PolymorphicIconButton = require("./PolymorphicIconButton");
17
11
  var _jsxRuntime = require("react/jsx-runtime");
18
- var _excluded = ["as", "className", "variant", "size", "icon", "title", "showTooltip", "tooltipPlacement", "loading"];
19
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
20
12
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
21
13
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
22
- var BASE_CLASSNAMES = (0, _satellitePrefixer["default"])(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["btn inline-flex items-center justify-center"])));
23
- var SIZE_CLASSNAMES = {
24
- small: (0, _satellitePrefixer["default"])(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["h-6 w-6 text-mobile md:text-sm"]))),
25
- medium: (0, _satellitePrefixer["default"])(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["h-8 w-8 text-md"]))),
26
- large: (0, _satellitePrefixer["default"])(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["h-10 w-10 text-lg"])))
27
- };
28
- var VARIANT_CLASSNAMES = _objectSpread(_objectSpread({}, _styles.BUTTON_VARIANT_CLASSNAMES), {}, {
29
- neutral: (0, _satellitePrefixer["default"])(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["btn-neutral text-grey-600"])))
14
+ var IconButton = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
15
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PolymorphicIconButton.PolymorphicIconButton, _objectSpread(_objectSpread({}, props), {}, {
16
+ as: "button",
17
+ ref: ref
18
+ }));
30
19
  });
31
- var IconButton = function IconButton(props) {
32
- var _props$as = props.as,
33
- Tag = _props$as === void 0 ? "button" : _props$as,
34
- className = props.className,
35
- _props$variant = props.variant,
36
- variant = _props$variant === void 0 ? "neutral" : _props$variant,
37
- _props$size = props.size,
38
- size = _props$size === void 0 ? "medium" : _props$size,
39
- Icon = props.icon,
40
- title = props.title,
41
- showTooltip = props.showTooltip,
42
- _props$tooltipPlaceme = props.tooltipPlacement,
43
- tooltipPlacement = _props$tooltipPlaceme === void 0 ? "top" : _props$tooltipPlaceme,
44
- _props$loading = props.loading,
45
- loading = _props$loading === void 0 ? false : _props$loading,
46
- cleanedProps = (0, _objectWithoutProperties2["default"])(props, _excluded);
47
- if (loading) {
48
- cleanedProps.disabled = true;
49
- }
50
- var iconButtonClassName = (0, _clsx["default"])(BASE_CLASSNAMES, SIZE_CLASSNAMES[size], VARIANT_CLASSNAMES[variant], cleanedProps.disabled && (0, _satellitePrefixer["default"])(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["btn-disabled"]))), className);
51
- var loaderClassNames = (0, _satellitePrefixer["default"])(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["absolute ", ""])), (variant === "destructive" || variant === "primary") && "text-white");
52
- if ((0, _types.isButtonType)(props) && !Object.prototype.hasOwnProperty.call(cleanedProps, "type")) {
53
- // @ts-ignore
54
- cleanedProps.type = "button";
55
- }
56
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.TooltipWrapper, {
57
- delay: 500,
58
- show: showTooltip,
59
- placement: tooltipPlacement,
60
- content: title,
61
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Tag, _objectSpread(_objectSpread({}, cleanedProps), {}, {
62
- className: iconButtonClassName,
63
- "aria-label": title,
64
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
65
- children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ProgressSpinner["default"], {
66
- className: loaderClassNames,
67
- size: _styles.BUTTON_LOADER_ICON_SIZES[size],
68
- thickness: 1
69
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Icon, {
70
- className: (0, _clsx["default"])(loading && (0, _satellitePrefixer["default"])(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["invisible"])))),
71
- size: "1em"
72
- })]
73
- })
74
- }))
75
- });
76
- };
77
20
  exports.IconButton = IconButton;
21
+ IconButton.displayName = "IconButton";
78
22
  var _default = IconButton;
79
23
  exports["default"] = _default;
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ import { ButtonBaseProps, PolymorphicComponentPropWithRef } from "./types";
3
+ export declare type PolymorphicButtonProps<C extends React.ElementType> = PolymorphicComponentPropWithRef<C, ButtonBaseProps>;
4
+ declare type PolymorphicButtonComponent = (<C extends React.ElementType = "button">(props: PolymorphicButtonProps<C>) => React.ReactElement | null) & {
5
+ displayName?: string;
6
+ };
7
+ /**
8
+ * `PolymorphicButton` is intended for internal use
9
+ */
10
+ export declare const PolymorphicButton: PolymorphicButtonComponent;
11
+ export {};
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.PolymorphicButton = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
12
+ var _clsx = _interopRequireDefault(require("clsx"));
13
+ var _react = _interopRequireWildcard(require("react"));
14
+ var _ProgressSpinner = _interopRequireDefault(require("../ProgressSpinner"));
15
+ var _satellitePrefixer = _interopRequireDefault(require("../styles/helpers/satellitePrefixer"));
16
+ var _styles = require("./styles");
17
+ var _types = require("./types");
18
+ var _jsxRuntime = require("react/jsx-runtime");
19
+ var _excluded = ["as", "className", "variant", "size", "startIcon", "endIcon", "loading", "children"];
20
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
21
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
22
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
24
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
25
+ var BASE_CLASSNAMES = (0, _satellitePrefixer["default"])(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["btn inline-flex justify-center items-center px-3 typo-display-body"])));
26
+ var ICON_SIZE = 16;
27
+ /**
28
+ * `PolymorphicButton` is intended for internal use
29
+ */
30
+ var PolymorphicButton = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
31
+ var _props$as = props.as,
32
+ Component = _props$as === void 0 ? "button" : _props$as,
33
+ className = props.className,
34
+ _props$variant = props.variant,
35
+ variant = _props$variant === void 0 ? "neutral" : _props$variant,
36
+ _props$size = props.size,
37
+ size = _props$size === void 0 ? "medium" : _props$size,
38
+ StartIcon = props.startIcon,
39
+ EndIcon = props.endIcon,
40
+ _props$loading = props.loading,
41
+ loading = _props$loading === void 0 ? false : _props$loading,
42
+ children = props.children,
43
+ cleanedProps = (0, _objectWithoutProperties2["default"])(props, _excluded);
44
+ if (loading) {
45
+ // @ts-expect-error
46
+ cleanedProps.disabled = true;
47
+ }
48
+ var buttonClassName = (0, _clsx["default"])(BASE_CLASSNAMES, _styles.BUTTON_SIZE_CLASSNAMES[size], _styles.BUTTON_VARIANT_CLASSNAMES[variant], cleanedProps.disabled && (0, _satellitePrefixer["default"])(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["btn-disabled"]))), className);
49
+ var loaderClassNames = (0, _satellitePrefixer["default"])(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["absolute ", ""])), (variant === "destructive" || variant === "primary") && "text-white");
50
+ var iconClassNames = (0, _clsx["default"])((0, _styles.getIconColorClassName)(props), loading && (0, _satellitePrefixer["default"])(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["invisible"]))));
51
+ var textClassNames = (0, _clsx["default"])(loading && (0, _satellitePrefixer["default"])(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["invisible"]))));
52
+ if ((0, _types.isButtonType)(props) && !Object.prototype.hasOwnProperty.call(cleanedProps, "type")) {
53
+ // @ts-expect-error
54
+ cleanedProps.type = "button";
55
+ }
56
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Component, _objectSpread(_objectSpread({}, cleanedProps), {}, {
57
+ className: buttonClassName,
58
+ ref: ref,
59
+ children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ProgressSpinner["default"], {
60
+ className: loaderClassNames,
61
+ size: _styles.BUTTON_LOADER_ICON_SIZES[size],
62
+ thickness: 1
63
+ }), StartIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(StartIcon, {
64
+ size: ICON_SIZE,
65
+ className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["shrink-0"]))), iconClassNames)
66
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
67
+ className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["truncate text-center px-1"]))), textClassNames),
68
+ children: children
69
+ }), EndIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(EndIcon, {
70
+ size: ICON_SIZE,
71
+ className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["shrink-0"]))), iconClassNames)
72
+ })]
73
+ }));
74
+ });
75
+ exports.PolymorphicButton = PolymorphicButton;
76
+ PolymorphicButton.displayName = "PolymorphicButton";
@@ -0,0 +1,24 @@
1
+ /// <reference types="react" />
2
+ import type { TooltipWrapperBaseProps } from "../Tooltip/types";
3
+ import type { IconComponentType } from "../types";
4
+ import { ButtonSize, ButtonVariant, PolymorphicComponentPropWithRef } from "./types";
5
+ export interface IconButtonBaseProps {
6
+ variant?: ButtonVariant;
7
+ size?: ButtonSize;
8
+ disabled?: boolean;
9
+ icon: IconComponentType;
10
+ title: string;
11
+ showTooltip?: boolean;
12
+ /** @default "top" */
13
+ tooltipPlacement?: TooltipWrapperBaseProps["placement"];
14
+ loading?: boolean;
15
+ }
16
+ export declare type PolymorphicIconButtonProps<C extends React.ElementType> = PolymorphicComponentPropWithRef<C, IconButtonBaseProps>;
17
+ declare type PolymorphicIconButtonComponent = (<C extends React.ElementType = "button">(props: PolymorphicIconButtonProps<C>) => React.ReactElement | null) & {
18
+ displayName?: string;
19
+ };
20
+ /**
21
+ * `PolymorphicIconButton` is intended for internal use
22
+ */
23
+ export declare const PolymorphicIconButton: PolymorphicIconButtonComponent;
24
+ export {};
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.PolymorphicIconButton = void 0;
8
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
+ var _clsx = _interopRequireDefault(require("clsx"));
12
+ var _react = require("react");
13
+ var _ProgressSpinner = _interopRequireDefault(require("../ProgressSpinner"));
14
+ var _satellitePrefixer = _interopRequireDefault(require("../styles/helpers/satellitePrefixer"));
15
+ var _Tooltip = require("../Tooltip");
16
+ var _styles = require("./styles");
17
+ var _types = require("./types");
18
+ var _jsxRuntime = require("react/jsx-runtime");
19
+ var _excluded = ["as", "className", "variant", "size", "icon", "title", "showTooltip", "tooltipPlacement", "loading"];
20
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
21
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
22
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
23
+ var BASE_CLASSNAMES = (0, _satellitePrefixer["default"])(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["btn inline-flex items-center justify-center"])));
24
+ var SIZE_CLASSNAMES = {
25
+ small: (0, _satellitePrefixer["default"])(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["h-6 w-6 text-mobile md:text-sm"]))),
26
+ medium: (0, _satellitePrefixer["default"])(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["h-8 w-8 text-md"]))),
27
+ large: (0, _satellitePrefixer["default"])(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["h-10 w-10 text-lg"])))
28
+ };
29
+ var VARIANT_CLASSNAMES = _objectSpread(_objectSpread({}, _styles.BUTTON_VARIANT_CLASSNAMES), {}, {
30
+ neutral: (0, _satellitePrefixer["default"])(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["btn-neutral text-grey-600"])))
31
+ });
32
+ /**
33
+ * `PolymorphicIconButton` is intended for internal use
34
+ */
35
+ var PolymorphicIconButton = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
36
+ var _props$as = props.as,
37
+ Tag = _props$as === void 0 ? "button" : _props$as,
38
+ className = props.className,
39
+ _props$variant = props.variant,
40
+ variant = _props$variant === void 0 ? "neutral" : _props$variant,
41
+ _props$size = props.size,
42
+ size = _props$size === void 0 ? "medium" : _props$size,
43
+ Icon = props.icon,
44
+ title = props.title,
45
+ showTooltip = props.showTooltip,
46
+ _props$tooltipPlaceme = props.tooltipPlacement,
47
+ tooltipPlacement = _props$tooltipPlaceme === void 0 ? "top" : _props$tooltipPlaceme,
48
+ _props$loading = props.loading,
49
+ loading = _props$loading === void 0 ? false : _props$loading,
50
+ cleanedProps = (0, _objectWithoutProperties2["default"])(props, _excluded);
51
+ if (loading) {
52
+ // @ts-expect-error
53
+ cleanedProps.disabled = true;
54
+ }
55
+ var iconButtonClassName = (0, _clsx["default"])(BASE_CLASSNAMES, SIZE_CLASSNAMES[size], VARIANT_CLASSNAMES[variant], cleanedProps.disabled && (0, _satellitePrefixer["default"])(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["btn-disabled"]))), className);
56
+ var loaderClassNames = (0, _satellitePrefixer["default"])(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["absolute ", ""])), (variant === "destructive" || variant === "primary") && "text-white");
57
+ if ((0, _types.isButtonType)(props) && !Object.prototype.hasOwnProperty.call(cleanedProps, "type")) {
58
+ // @ts-ignore
59
+ cleanedProps.type = "button";
60
+ }
61
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.TooltipWrapper, {
62
+ delay: 500,
63
+ show: showTooltip,
64
+ placement: tooltipPlacement,
65
+ content: title,
66
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Tag, _objectSpread(_objectSpread({}, cleanedProps), {}, {
67
+ className: iconButtonClassName,
68
+ "aria-label": title,
69
+ ref: ref,
70
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
71
+ children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ProgressSpinner["default"], {
72
+ className: loaderClassNames,
73
+ size: _styles.BUTTON_LOADER_ICON_SIZES[size],
74
+ thickness: 1
75
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Icon, {
76
+ className: (0, _clsx["default"])(loading && (0, _satellitePrefixer["default"])(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["invisible"])))),
77
+ size: "1em"
78
+ })]
79
+ })
80
+ }))
81
+ });
82
+ });
83
+ exports.PolymorphicIconButton = PolymorphicIconButton;
84
+ PolymorphicIconButton.displayName = "PolymorphicIconButton";
@@ -1,5 +1,5 @@
1
1
  export * from "./Button";
2
2
  export * from "./IconButton";
3
3
  export * from "./ButtonGroup";
4
- export * from "./types";
4
+ export { ButtonSize, ButtonVariant } from "./types";
5
5
  export { default } from "./Button";
@@ -4,7 +4,22 @@ var _typeof = require("@babel/runtime/helpers/typeof");
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- var _exportNames = {};
7
+ var _exportNames = {
8
+ ButtonSize: true,
9
+ ButtonVariant: true
10
+ };
11
+ Object.defineProperty(exports, "ButtonSize", {
12
+ enumerable: true,
13
+ get: function get() {
14
+ return _types.ButtonSize;
15
+ }
16
+ });
17
+ Object.defineProperty(exports, "ButtonVariant", {
18
+ enumerable: true,
19
+ get: function get() {
20
+ return _types.ButtonVariant;
21
+ }
22
+ });
8
23
  Object.defineProperty(exports, "default", {
9
24
  enumerable: true,
10
25
  get: function get() {
@@ -48,16 +63,5 @@ Object.keys(_ButtonGroup).forEach(function (key) {
48
63
  });
49
64
  });
50
65
  var _types = require("./types");
51
- Object.keys(_types).forEach(function (key) {
52
- if (key === "default" || key === "__esModule") return;
53
- if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
54
- if (key in exports && exports[key] === _types[key]) return;
55
- Object.defineProperty(exports, key, {
56
- enumerable: true,
57
- get: function get() {
58
- return _types[key];
59
- }
60
- });
61
- });
62
66
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
63
67
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -1,12 +1,7 @@
1
- import type { ComponentType, ReactNode } from "react";
1
+ import type { ReactNode } from "react";
2
2
  import type { IconComponentType } from "../types";
3
3
  export declare type ButtonVariant = "subtle" | "neutral" | "primary" | "destructive";
4
4
  export declare type ButtonSize = "small" | "medium" | "large";
5
- export declare type MinimalButtonProps = {
6
- className?: string;
7
- };
8
- export declare type AcceptableButtonType = "a" | "button" | ComponentType<MinimalButtonProps>;
9
- export declare type ExtractProps<T> = T extends "a" | "button" ? JSX.IntrinsicElements[T] : T extends ComponentType<infer P> ? P : never;
10
5
  export interface ButtonBaseProps {
11
6
  /** @default "neutral" */
12
7
  variant?: ButtonVariant;
@@ -25,3 +20,13 @@ export interface ButtonBaseProps {
25
20
  className?: string;
26
21
  }
27
22
  export declare function isButtonType(props: any): props is JSX.IntrinsicElements["button"];
23
+ declare type AsProp<C extends React.ElementType> = {
24
+ as?: C;
25
+ };
26
+ declare type PropsToOmit<C extends React.ElementType, P> = keyof (AsProp<C> & P);
27
+ declare type PolymorphicComponentProp<C extends React.ElementType, Props = {}> = React.PropsWithChildren<Props & AsProp<C>> & Omit<React.ComponentPropsWithoutRef<C>, PropsToOmit<C, Props>>;
28
+ export declare type PolymorphicComponentPropWithRef<C extends React.ElementType, Props = {}> = PolymorphicComponentProp<C, Props> & {
29
+ ref?: PolymorphicRef<C>;
30
+ };
31
+ export declare type PolymorphicRef<C extends React.ElementType> = React.ComponentPropsWithRef<C>["ref"];
32
+ export {};
@@ -6,4 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.isButtonType = isButtonType;
7
7
  function isButtonType(props) {
8
8
  return props && (!props.as || props.as === "button");
9
- }
9
+ }
10
+
11
+ // Polymorphic Helpers lifted from https://blog.logrocket.com/build-strongly-typed-polymorphic-components-react-typescript/
@@ -1,11 +1,11 @@
1
- import type { FunctionComponent, ReactNode } from "react";
1
+ import { ReactNode } from "react";
2
2
  import { ButtonProps } from "../Button";
3
3
  import { RenderTargetParams } from "./Dropdown";
4
- export interface DropdownButtonProps extends Omit<ButtonProps<"button">, "title" | "endIcon"> {
4
+ export interface DropdownButtonProps extends Omit<ButtonProps, "title" | "endIcon"> {
5
5
  /** Descriptive title for `Dropdown` */
6
6
  title: ReactNode;
7
7
  renderFooter?: (args: RenderTargetParams) => ReactNode;
8
8
  children: ReactNode;
9
9
  }
10
- export declare const DropdownButton: FunctionComponent<DropdownButtonProps>;
10
+ export declare const DropdownButton: import("react").ForwardRefExoticComponent<DropdownButtonProps & import("react").RefAttributes<HTMLButtonElement & HTMLAnchorElement>>;
11
11
  export default DropdownButton;