@audius/harmony 0.0.34 → 0.1.0

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 (66) hide show
  1. package/dist/components/button/BaseButton/BaseButton.d.ts +2 -2
  2. package/dist/components/button/BaseButton/types.d.ts +2 -2
  3. package/dist/components/button/BaseButton/types.d.ts.map +1 -1
  4. package/dist/components/button/Button/Button.d.ts +1 -1
  5. package/dist/components/button/FilterButton/FilterButton.d.ts.map +1 -1
  6. package/dist/components/button/FilterButton/FilterButton.js +62 -68
  7. package/dist/components/button/FilterButton/FilterButton.js.map +1 -1
  8. package/dist/components/button/FilterButton/types.d.ts +38 -23
  9. package/dist/components/button/FilterButton/types.d.ts.map +1 -1
  10. package/dist/components/button/IconButton/IconButton.d.ts +2 -2
  11. package/dist/components/button/IconButton/IconButton.d.ts.map +1 -1
  12. package/dist/components/button/IconButton/IconButton.js +4 -3
  13. package/dist/components/button/IconButton/IconButton.js.map +1 -1
  14. package/dist/components/button/OptionsFilterButton/OptionsFilterButton.d.ts +18 -0
  15. package/dist/components/button/OptionsFilterButton/OptionsFilterButton.d.ts.map +1 -0
  16. package/dist/components/button/OptionsFilterButton/OptionsFilterButton.js +123 -0
  17. package/dist/components/button/OptionsFilterButton/OptionsFilterButton.js.map +1 -0
  18. package/dist/components/button/{FilterButton/FilterButton.stories.d.ts → OptionsFilterButton/OptionsFilterButton.stories.d.ts} +4 -4
  19. package/dist/components/button/OptionsFilterButton/OptionsFilterButton.stories.d.ts.map +1 -0
  20. package/dist/components/button/OptionsFilterButton/SelectPopupKeyHandler.d.ts +18 -0
  21. package/dist/components/button/OptionsFilterButton/SelectPopupKeyHandler.d.ts.map +1 -0
  22. package/dist/components/button/OptionsFilterButton/SelectPopupKeyHandler.js +82 -0
  23. package/dist/components/button/OptionsFilterButton/SelectPopupKeyHandler.js.map +1 -0
  24. package/dist/components/button/OptionsFilterButton/types.d.ts +62 -0
  25. package/dist/components/button/OptionsFilterButton/types.d.ts.map +1 -0
  26. package/dist/components/button/index.d.ts +2 -0
  27. package/dist/components/button/index.d.ts.map +1 -1
  28. package/dist/components/index.d.ts +2 -0
  29. package/dist/components/index.d.ts.map +1 -1
  30. package/dist/components/input/PasswordInput/PasswordInput.js +1 -0
  31. package/dist/components/input/PasswordInput/PasswordInput.js.map +1 -1
  32. package/dist/components/input/SelectablePill/SelectablePill.js +1 -1
  33. package/dist/components/input/SelectablePill/SelectablePill.js.map +1 -1
  34. package/dist/components/modal/Modal.js +1 -1
  35. package/dist/components/modal/Modal.js.map +1 -1
  36. package/dist/components/modal/ModalHeader.js +1 -0
  37. package/dist/components/modal/ModalHeader.js.map +1 -1
  38. package/dist/components/music-badge/MusicBadge.d.ts +25 -0
  39. package/dist/components/music-badge/MusicBadge.d.ts.map +1 -0
  40. package/dist/components/music-badge/MusicBadge.js +40 -0
  41. package/dist/components/music-badge/MusicBadge.js.map +1 -0
  42. package/dist/components/music-badge/MusicBadge.stories.d.ts +7 -0
  43. package/dist/components/music-badge/MusicBadge.stories.d.ts.map +1 -0
  44. package/dist/components/music-badge/index.d.ts +3 -0
  45. package/dist/components/music-badge/index.d.ts.map +1 -0
  46. package/dist/components/pill/Pill.d.ts +2 -2
  47. package/dist/components/popup/Popup.d.ts.map +1 -1
  48. package/dist/components/popup/Popup.js +3 -0
  49. package/dist/components/popup/Popup.js.map +1 -1
  50. package/dist/components/text/Text.d.ts.map +1 -1
  51. package/dist/components/text/Text.js +6 -5
  52. package/dist/components/text/Text.js.map +1 -1
  53. package/dist/foundations/color/color.d.ts +9 -0
  54. package/dist/foundations/color/color.d.ts.map +1 -1
  55. package/dist/foundations/color/primitive.d.ts +6 -0
  56. package/dist/foundations/color/primitive.d.ts.map +1 -1
  57. package/dist/foundations/color/primitive.js +6 -0
  58. package/dist/foundations/color/primitive.js.map +1 -1
  59. package/dist/foundations/color/semantic.d.ts +3 -0
  60. package/dist/foundations/color/semantic.d.ts.map +1 -1
  61. package/dist/foundations/color/semantic.js +2 -1
  62. package/dist/foundations/color/semantic.js.map +1 -1
  63. package/dist/index.js +3 -0
  64. package/dist/index.js.map +1 -1
  65. package/package.json +3 -1
  66. package/dist/components/button/FilterButton/FilterButton.stories.d.ts.map +0 -1
@@ -13,8 +13,8 @@ export declare const BaseButton: (props: {
13
13
  minWidth?: number | undefined;
14
14
  fullWidth?: boolean | undefined;
15
15
  styles?: {
16
- button: CSSObject;
17
- icon: CSSObject;
16
+ button?: CSSObject | undefined;
17
+ icon?: CSSObject | undefined;
18
18
  } | undefined;
19
19
  asChild?: boolean | undefined;
20
20
  } & Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & {
@@ -4,8 +4,8 @@ import type { IconComponent } from '../../icon';
4
4
  export type ButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'destructive';
5
5
  export type ButtonSize = 'small' | 'default' | 'large';
6
6
  type BaseButtonStyles = {
7
- button: CSSObject;
8
- icon: CSSObject;
7
+ button?: CSSObject;
8
+ icon?: CSSObject;
9
9
  };
10
10
  export type HTMLButtonProps = ComponentPropsWithoutRef<'button'>;
11
11
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/button/BaseButton/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAA;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,CAAA;AAEhF,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAA;AAEtD,KAAK,gBAAgB,GAAG;IACtB,MAAM,EAAE,SAAS,CAAA;IACjB,IAAI,EAAE,SAAS,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAA;AAEhE;;;KAGK;AACL,KAAK,aAAa,GAAG;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IAE/B;;OAEG;IACH,SAAS,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IAEhC;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAA;IAEzB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GAAG,eAAe,GACjB,aAAa,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/button/BaseButton/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAA;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,CAAA;AAEhF,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAA;AAEtD,KAAK,gBAAgB,GAAG;IACtB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAA;AAEhE;;;KAGK;AACL,KAAK,aAAa,GAAG;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IAE/B;;OAEG;IACH,SAAS,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IAEhC;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAA;IAEzB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GAAG,eAAe,GACjB,aAAa,CAAA"}
@@ -6,7 +6,7 @@
6
6
  * a delete operation.
7
7
  */
8
8
  export declare const Button: (props: {
9
- color?: "white" | "background" | "blue" | "orange" | "red" | "darkRed" | "green" | "lightGreen" | "gradient" | undefined;
9
+ color?: "white" | "background" | "blue" | "orange" | "red" | "darkRed" | "green" | "lightGreen" | "trendingBlue" | "aiGreen" | "gradient" | undefined;
10
10
  hexColor?: `#${string}` | undefined;
11
11
  variant?: import("./types").ButtonVariant | undefined;
12
12
  size?: import("./types").ButtonSize | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"FilterButton.d.ts","sourceRoot":"","sources":["../../../../src/components/button/FilterButton/FilterButton.tsx"],"names":[],"mappings":";AAUA,OAAO,EAAsB,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAE/D,eAAO,MAAM,YAAY,gLAmNxB,CAAA"}
1
+ {"version":3,"file":"FilterButton.d.ts","sourceRoot":"","sources":["../../../../src/components/button/FilterButton/FilterButton.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAE3C,eAAO,MAAM,YAAY,gLAkLxB,CAAA"}
@@ -1,29 +1,28 @@
1
1
  import { __assign } from '../../../_virtual/_tslib.js';
2
- import { jsxs, jsx } from '@emotion/react/jsx-runtime';
3
- import { forwardRef, useState, useCallback, useRef } from 'react';
2
+ import { jsxs } from '@emotion/react/jsx-runtime';
3
+ import { forwardRef, useState, useCallback, useEffect, useRef } from 'react';
4
4
  import { useTheme } from '@emotion/react';
5
5
  import { BaseButton } from '../BaseButton/BaseButton.js';
6
- import { Box } from '../../layout/Box/Box.js';
7
- import { Flex } from '../../layout/Flex/Flex.js';
8
- import { Paper } from '../../layout/Paper/Paper.js';
9
- import { Popup } from '../../popup/Popup.js';
10
6
  import { useControlled } from '../../../hooks/useControlled.js';
11
- import { IconCloseAlt, IconCaretDown } from '../../../icons/utilityIcons.js';
7
+ import { IconCloseAlt } from '../../../icons/utilityIcons.js';
12
8
  import '@emotion/css';
13
9
 
14
10
  var FilterButton = forwardRef(function FilterButton(props, ref) {
15
- var _a, _b;
16
- var selectionProp = props.selection, label = props.label, options = props.options, onSelect = props.onSelect, disabled = props.disabled, _c = props.variant, variant = _c === void 0 ? 'fillContainer' : _c, _d = props.size, size = _d === void 0 ? 'default' : _d, _e = props.iconRight, iconRight = _e === void 0 ? IconCaretDown : _e, popupAnchorOrigin = props.popupAnchorOrigin, popupTransformOrigin = props.popupTransformOrigin, popupPortalLocation = props.popupPortalLocation, popupZIndex = props.popupZIndex;
17
- var _f = useTheme(), color = _f.color, cornerRadius = _f.cornerRadius, spacing = _f.spacing, typography = _f.typography;
18
- var _g = useControlled({
19
- controlledProp: selectionProp,
11
+ var valueProp = props.value, children = props.children, labelProp = props.label, onChange = props.onChange, onClick = props.onClick, onOpen = props.onOpen, onReset = props.onReset, disabled = props.disabled, _a = props.variant, variant = _a === void 0 ? 'fillContainer' : _a, _b = props.size, size = _b === void 0 ? 'default' : _b, iconRight = props.iconRight;
12
+ var _c = useTheme(), color = _c.color, cornerRadius = _c.cornerRadius, spacing = _c.spacing, typography = _c.typography;
13
+ var _d = useControlled({
14
+ controlledProp: valueProp,
20
15
  defaultValue: null,
21
- stateName: 'selection',
16
+ stateName: 'value',
22
17
  componentName: 'FilterButton'
23
- }), selection = _g[0], setSelection = _g[1];
24
- var selectedOption = options.find(function (option) { return option.value === selection; });
25
- var selectedLabel = (_a = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.label) !== null && _a !== void 0 ? _a : selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.value;
26
- var _h = useState(false), isOpen = _h[0], setIsOpen = _h[1];
18
+ }), value = _d[0], setValue = _d[1];
19
+ var _e = useControlled({
20
+ controlledProp: labelProp,
21
+ defaultValue: null,
22
+ stateName: 'label',
23
+ componentName: 'FilterButton'
24
+ }), label = _e[0], setLabel = _e[1];
25
+ var _f = useState(false), isOpen = _f[0], setIsOpen = _f[1];
27
26
  // Size Styles
28
27
  var defaultStyles = {
29
28
  paddingLeft: spacing.m,
@@ -53,76 +52,71 @@ var FilterButton = forwardRef(function FilterButton(props, ref) {
53
52
  transform: 'none'
54
53
  }
55
54
  };
56
- var activeStyle = variant !== 'fillContainer' || selection === null
55
+ var activeStyle = variant !== 'fillContainer' || value === null
57
56
  ? {
58
57
  border: "1px solid ".concat(color.border.strong),
59
58
  background: color.background.surface2
60
59
  }
61
60
  : {};
61
+ var hoverStyle = {
62
+ border: "1px solid ".concat(color.neutral.n800),
63
+ transform: 'none'
64
+ };
62
65
  // Button Styles
63
- var buttonCss = __assign(__assign(__assign({ background: 'transparent', border: "1px solid ".concat(color.border.strong), borderRadius: cornerRadius.s, color: variant === 'fillContainer' && selection !== null
66
+ var buttonCss = __assign(__assign(__assign({ background: 'transparent', border: "1px solid ".concat(color.border.strong), borderRadius: cornerRadius.s, color: variant === 'fillContainer' && value !== null
64
67
  ? color.static.white
65
- : color.text.default, gap: spacing.xs, fontSize: typography.size.s, fontWeight: typography.weight.demiBold, lineHeight: typography.lineHeight.s, opacity: disabled ? 0.6 : 1, '&:hover': {
66
- border: "1px solid ".concat(color.neutral.n800),
67
- transform: 'none'
68
- }, '&:active': __assign(__assign({}, activeStyle), { transform: 'none' }) }, (size === 'small' ? smallStyles : defaultStyles)), (isOpen ? activeStyle : {})), (variant === 'fillContainer' && selection !== null
68
+ : color.text.default, gap: spacing.xs, fontSize: typography.size.s, fontWeight: typography.weight.demiBold, lineHeight: typography.lineHeight.s, opacity: disabled ? 0.6 : 1, '&:hover': hoverStyle, '&:focus': hoverStyle, '&:active': __assign(__assign({}, activeStyle), { transform: 'none' }) }, (size === 'small' ? smallStyles : defaultStyles)), (isOpen ? activeStyle : {})), (variant === 'fillContainer' && value !== null
69
69
  ? fillContainerStyles
70
70
  : {}));
71
71
  var iconCss = size === 'small' ? smallIconStyles : defaultIconStyles;
72
- // Popup Styles
73
- var optionCss = {
74
- background: 'transparent',
75
- border: 'none',
76
- color: color.text.default,
77
- fontWeight: typography.weight.medium,
78
- gap: spacing.s,
79
- paddingLeft: spacing.m,
80
- paddingRight: spacing.m,
81
- paddingTop: spacing.s,
82
- paddingBottom: spacing.s,
83
- width: '100%',
84
- borderRadius: cornerRadius.s,
85
- justifyContent: 'flex-start',
86
- '&:hover': {
87
- transform: 'none',
88
- backgroundColor: color.secondary.s300,
89
- color: color.special.white
90
- },
91
- '&:active': {
92
- transform: 'none'
93
- }
94
- };
95
- var optionIconCss = {
96
- width: spacing.unit4,
97
- height: spacing.unit4
98
- };
99
72
  var handleButtonClick = useCallback(function () {
100
- if (variant === 'fillContainer' && selection !== null) {
101
- setSelection(null);
102
- // @ts-ignore
103
- onSelect === null || onSelect === void 0 ? void 0 : onSelect(null);
73
+ if (onClick) {
74
+ onClick();
104
75
  }
105
76
  else {
106
- setIsOpen(function (isOpen) { return !isOpen; });
77
+ if (variant === 'fillContainer' && value !== null) {
78
+ setValue(null);
79
+ setLabel(null);
80
+ // @ts-ignore
81
+ onChange === null || onChange === void 0 ? void 0 : onChange(null);
82
+ onReset === null || onReset === void 0 ? void 0 : onReset();
83
+ }
84
+ else {
85
+ setIsOpen(function (isOpen) { return !isOpen; });
86
+ }
87
+ }
88
+ }, [
89
+ value,
90
+ variant,
91
+ setIsOpen,
92
+ setValue,
93
+ setLabel,
94
+ onChange,
95
+ onClick,
96
+ onReset
97
+ ]);
98
+ useEffect(function () {
99
+ if (isOpen) {
100
+ onOpen === null || onOpen === void 0 ? void 0 : onOpen();
107
101
  }
108
- }, [selection, variant, setIsOpen, setSelection, onSelect]);
109
- var handleOptionSelect = useCallback(function (option) {
110
- setSelection(option.value);
111
- onSelect === null || onSelect === void 0 ? void 0 : onSelect(option.value);
112
- }, [onSelect, setSelection]);
102
+ }, [isOpen, onOpen]);
103
+ var handleChange = useCallback(function (value, label) {
104
+ setValue(value);
105
+ setLabel(label);
106
+ onChange === null || onChange === void 0 ? void 0 : onChange(value);
107
+ }, [onChange, setValue, setLabel]);
113
108
  var anchorRef = useRef(null);
114
109
  return (jsxs(BaseButton, __assign({ ref: ref || anchorRef, styles: {
115
110
  button: buttonCss,
116
111
  icon: iconCss
117
- }, onClick: handleButtonClick, iconRight: variant === 'fillContainer' && selection !== null
112
+ }, onClick: handleButtonClick, iconRight: variant === 'fillContainer' && value !== null
118
113
  ? IconCloseAlt
119
- : iconRight, disabled: disabled, "aria-haspopup": 'listbox', "aria-expanded": isOpen }, { children: [selectedLabel !== null && selectedLabel !== void 0 ? selectedLabel : label, jsx(Popup, __assign({ anchorRef: ref || anchorRef, isVisible: isOpen, onClose: function () { return setIsOpen(false); }, anchorOrigin: popupAnchorOrigin, transformOrigin: popupTransformOrigin, portalLocation: popupPortalLocation, zIndex: popupZIndex }, { children: jsx(Paper, __assign({ mt: 's', border: 'strong', shadow: 'far' }, { children: jsx(Box, __assign({ p: 's' }, { children: jsx(Flex, __assign({ direction: 'column', alignItems: 'flex-start', justifyContent: 'center', role: 'listbox', "aria-label": (_b = selectedLabel !== null && selectedLabel !== void 0 ? selectedLabel : label) !== null && _b !== void 0 ? _b : props['aria-label'], "aria-activedescendant": selectedLabel }, { children: options.map(function (option) {
120
- var _a, _b;
121
- return (jsx(BaseButton, __assign({ iconLeft: option.icon, styles: {
122
- button: optionCss,
123
- icon: optionIconCss
124
- }, onClick: function () { return handleOptionSelect(option); }, "aria-label": (_a = option.label) !== null && _a !== void 0 ? _a : option.value, role: 'option' }, { children: (_b = option.label) !== null && _b !== void 0 ? _b : option.value }), option.value));
125
- }) })) })) })) }))] })));
114
+ : iconRight, disabled: disabled, "aria-haspopup": 'listbox', "aria-expanded": isOpen }, { children: [label, children === null || children === void 0 ? void 0 : children({
115
+ isOpen: isOpen,
116
+ setIsOpen: setIsOpen,
117
+ handleChange: handleChange,
118
+ anchorRef: anchorRef
119
+ })] })));
126
120
  });
127
121
 
128
122
  export { FilterButton };
@@ -1 +1 @@
1
- {"version":3,"file":"FilterButton.js","sources":["../../../../src/components/button/FilterButton/FilterButton.tsx"],"sourcesContent":["import { forwardRef, RefObject, useRef, useState, useCallback } from 'react'\n\nimport { CSSObject, useTheme } from '@emotion/react'\n\nimport { BaseButton } from 'components/button/BaseButton/BaseButton'\nimport { Box, Flex, Paper } from 'components/layout'\nimport { Popup } from 'components/popup'\nimport { useControlled } from 'hooks/useControlled'\nimport { IconCaretDown, IconCloseAlt } from 'icons'\n\nimport { FilterButtonOption, FilterButtonProps } from './types'\n\nexport const FilterButton = forwardRef<HTMLButtonElement, FilterButtonProps>(\n function FilterButton(props, ref) {\n const {\n selection: selectionProp,\n label,\n options,\n onSelect,\n disabled,\n variant = 'fillContainer',\n size = 'default',\n iconRight = IconCaretDown,\n popupAnchorOrigin,\n popupTransformOrigin,\n popupPortalLocation,\n popupZIndex\n } = props\n const { color, cornerRadius, spacing, typography } = useTheme()\n const [selection, setSelection] = useControlled({\n controlledProp: selectionProp,\n defaultValue: null,\n stateName: 'selection',\n componentName: 'FilterButton'\n })\n const selectedOption = options.find((option) => option.value === selection)\n const selectedLabel = selectedOption?.label ?? selectedOption?.value\n\n const [isOpen, setIsOpen] = useState(false)\n\n // Size Styles\n const defaultStyles: CSSObject = {\n paddingLeft: spacing.m,\n paddingRight: spacing.m,\n paddingTop: spacing.s,\n paddingBottom: spacing.s\n }\n const defaultIconStyles: CSSObject = {\n width: spacing.unit4,\n height: spacing.unit4\n }\n\n const smallStyles: CSSObject = {\n paddingLeft: spacing.m,\n paddingRight: spacing.m,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs\n }\n const smallIconStyles: CSSObject = {\n width: spacing.unit3,\n height: spacing.unit3\n }\n\n const fillContainerStyles: CSSObject = {\n background: color.secondary.s400,\n border: `1px solid ${color.secondary.s400}`,\n '&:hover': {\n border: `1px solid ${color.secondary.s400}`,\n transform: 'none'\n }\n }\n\n const activeStyle =\n variant !== 'fillContainer' || selection === null\n ? {\n border: `1px solid ${color.border.strong}`,\n background: color.background.surface2\n }\n : {}\n\n // Button Styles\n const buttonCss: CSSObject = {\n background: 'transparent',\n border: `1px solid ${color.border.strong}`,\n borderRadius: cornerRadius.s,\n color:\n variant === 'fillContainer' && selection !== null\n ? color.static.white\n : color.text.default,\n gap: spacing.xs,\n fontSize: typography.size.s,\n fontWeight: typography.weight.demiBold,\n lineHeight: typography.lineHeight.s,\n opacity: disabled ? 0.6 : 1,\n\n '&:hover': {\n border: `1px solid ${color.neutral.n800}`,\n transform: 'none'\n },\n\n '&:active': {\n ...activeStyle,\n transform: 'none'\n },\n\n ...(size === 'small' ? smallStyles : defaultStyles),\n ...(isOpen ? activeStyle : {}),\n ...(variant === 'fillContainer' && selection !== null\n ? fillContainerStyles\n : {})\n }\n\n const iconCss = size === 'small' ? smallIconStyles : defaultIconStyles\n\n // Popup Styles\n const optionCss: CSSObject = {\n background: 'transparent',\n border: 'none',\n color: color.text.default,\n fontWeight: typography.weight.medium,\n gap: spacing.s,\n paddingLeft: spacing.m,\n paddingRight: spacing.m,\n paddingTop: spacing.s,\n paddingBottom: spacing.s,\n width: '100%',\n borderRadius: cornerRadius.s,\n justifyContent: 'flex-start',\n\n '&:hover': {\n transform: 'none',\n backgroundColor: color.secondary.s300,\n color: color.special.white\n },\n\n '&:active': {\n transform: 'none'\n }\n }\n const optionIconCss: CSSObject = {\n width: spacing.unit4,\n height: spacing.unit4\n }\n\n const handleButtonClick = useCallback(() => {\n if (variant === 'fillContainer' && selection !== null) {\n setSelection(null)\n // @ts-ignore\n onSelect?.(null)\n } else {\n setIsOpen((isOpen: boolean) => !isOpen)\n }\n }, [selection, variant, setIsOpen, setSelection, onSelect])\n\n const handleOptionSelect = useCallback(\n (option: FilterButtonOption) => {\n setSelection(option.value)\n onSelect?.(option.value)\n },\n [onSelect, setSelection]\n )\n\n const anchorRef = useRef<HTMLButtonElement>(null)\n\n return (\n <BaseButton\n ref={ref || anchorRef}\n styles={{\n button: buttonCss,\n icon: iconCss\n }}\n onClick={handleButtonClick}\n iconRight={\n variant === 'fillContainer' && selection !== null\n ? IconCloseAlt\n : iconRight\n }\n disabled={disabled}\n aria-haspopup='listbox'\n aria-expanded={isOpen}\n >\n {selectedLabel ?? label}\n <Popup\n anchorRef={(ref as RefObject<HTMLElement>) || anchorRef}\n isVisible={isOpen}\n onClose={() => setIsOpen(false)}\n anchorOrigin={popupAnchorOrigin}\n transformOrigin={popupTransformOrigin}\n portalLocation={popupPortalLocation}\n zIndex={popupZIndex}\n >\n <Paper mt='s' border='strong' shadow='far'>\n <Box p='s'>\n <Flex\n direction='column'\n alignItems='flex-start'\n justifyContent='center'\n role='listbox'\n aria-label={selectedLabel ?? label ?? props['aria-label']}\n aria-activedescendant={selectedLabel}\n >\n {options.map((option) => (\n <BaseButton\n key={option.value}\n iconLeft={option.icon}\n styles={{\n button: optionCss,\n icon: optionIconCss\n }}\n onClick={() => handleOptionSelect(option)}\n aria-label={option.label ?? option.value}\n role='option'\n >\n {option.label ?? option.value}\n </BaseButton>\n ))}\n </Flex>\n </Box>\n </Paper>\n </Popup>\n </BaseButton>\n )\n }\n)\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"FilterButton.js","sources":["../../../../src/components/button/FilterButton/FilterButton.tsx"],"sourcesContent":["import { forwardRef, useRef, useState, useCallback, useEffect } from 'react'\n\nimport { CSSObject, useTheme } from '@emotion/react'\n\nimport { BaseButton } from 'components/button/BaseButton/BaseButton'\nimport { useControlled } from 'hooks/useControlled'\nimport { IconCloseAlt } from 'icons'\n\nimport { FilterButtonProps } from './types'\n\nexport const FilterButton = forwardRef<HTMLButtonElement, FilterButtonProps>(\n function FilterButton(props, ref) {\n const {\n value: valueProp,\n children,\n label: labelProp,\n onChange,\n onClick,\n onOpen,\n onReset,\n disabled,\n variant = 'fillContainer',\n size = 'default',\n iconRight\n } = props\n const { color, cornerRadius, spacing, typography } = useTheme()\n const [value, setValue] = useControlled({\n controlledProp: valueProp,\n defaultValue: null,\n stateName: 'value',\n componentName: 'FilterButton'\n })\n\n const [label, setLabel] = useControlled({\n controlledProp: labelProp,\n defaultValue: null,\n stateName: 'label',\n componentName: 'FilterButton'\n })\n\n const [isOpen, setIsOpen] = useState(false)\n\n // Size Styles\n const defaultStyles: CSSObject = {\n paddingLeft: spacing.m,\n paddingRight: spacing.m,\n paddingTop: spacing.s,\n paddingBottom: spacing.s\n }\n const defaultIconStyles: CSSObject = {\n width: spacing.unit4,\n height: spacing.unit4\n }\n\n const smallStyles: CSSObject = {\n paddingLeft: spacing.m,\n paddingRight: spacing.m,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs\n }\n const smallIconStyles: CSSObject = {\n width: spacing.unit3,\n height: spacing.unit3\n }\n\n const fillContainerStyles: CSSObject = {\n background: color.secondary.s400,\n border: `1px solid ${color.secondary.s400}`,\n '&:hover': {\n border: `1px solid ${color.secondary.s400}`,\n transform: 'none'\n }\n }\n\n const activeStyle =\n variant !== 'fillContainer' || value === null\n ? {\n border: `1px solid ${color.border.strong}`,\n background: color.background.surface2\n }\n : {}\n\n const hoverStyle = {\n border: `1px solid ${color.neutral.n800}`,\n transform: 'none'\n }\n\n // Button Styles\n const buttonCss: CSSObject = {\n background: 'transparent',\n border: `1px solid ${color.border.strong}`,\n borderRadius: cornerRadius.s,\n color:\n variant === 'fillContainer' && value !== null\n ? color.static.white\n : color.text.default,\n gap: spacing.xs,\n fontSize: typography.size.s,\n fontWeight: typography.weight.demiBold,\n lineHeight: typography.lineHeight.s,\n opacity: disabled ? 0.6 : 1,\n\n '&:hover': hoverStyle,\n '&:focus': hoverStyle,\n\n '&:active': {\n ...activeStyle,\n transform: 'none'\n },\n\n ...(size === 'small' ? smallStyles : defaultStyles),\n ...(isOpen ? activeStyle : {}),\n ...(variant === 'fillContainer' && value !== null\n ? fillContainerStyles\n : {})\n }\n\n const iconCss = size === 'small' ? smallIconStyles : defaultIconStyles\n\n const handleButtonClick = useCallback(() => {\n if (onClick) {\n onClick()\n } else {\n if (variant === 'fillContainer' && value !== null) {\n setValue(null)\n setLabel(null)\n // @ts-ignore\n onChange?.(null)\n onReset?.()\n } else {\n setIsOpen((isOpen: boolean) => !isOpen)\n }\n }\n }, [\n value,\n variant,\n setIsOpen,\n setValue,\n setLabel,\n onChange,\n onClick,\n onReset\n ])\n\n useEffect(() => {\n if (isOpen) {\n onOpen?.()\n }\n }, [isOpen, onOpen])\n\n const handleChange = useCallback(\n (value: string, label: string) => {\n setValue(value)\n setLabel(label)\n onChange?.(value)\n },\n [onChange, setValue, setLabel]\n )\n\n const anchorRef = useRef<HTMLButtonElement>(null)\n\n return (\n <BaseButton\n ref={ref || anchorRef}\n styles={{\n button: buttonCss,\n icon: iconCss\n }}\n onClick={handleButtonClick}\n iconRight={\n variant === 'fillContainer' && value !== null\n ? IconCloseAlt\n : iconRight\n }\n disabled={disabled}\n aria-haspopup='listbox'\n aria-expanded={isOpen}\n >\n {label}\n {children?.({\n isOpen,\n setIsOpen,\n handleChange,\n anchorRef\n })}\n </BaseButton>\n )\n }\n)\n"],"names":["_jsxs"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
+ import { ReactNode } from 'react';
1
2
  import { IconComponent } from "../../icon";
2
- import { Origin } from "../../popup/types";
3
3
  export type FilterButtonSize = 'default' | 'small';
4
4
  export type FilterButtonVariant = 'fillContainer' | 'replaceLabel';
5
5
  export type FilterButtonOption = {
@@ -10,12 +10,31 @@ export type FilterButtonOption = {
10
10
  label?: string;
11
11
  icon?: IconComponent;
12
12
  };
13
+ type ChildrenProps = {
14
+ /**
15
+ * State representing whether the FilterButton is open.
16
+ * This can be used to implement a popup via `children`
17
+ */
18
+ isOpen: boolean;
19
+ /**
20
+ * Set open state
21
+ */
22
+ setIsOpen: (isOpen: boolean) => void;
23
+ /**
24
+ * A function to handle when the value is changed
25
+ */
26
+ handleChange: (value: string, label: string) => void;
27
+ /**
28
+ * A ref to the anchor element (button)
29
+ */
30
+ anchorRef: React.RefObject<HTMLButtonElement>;
31
+ };
13
32
  export type FilterButtonProps = {
14
33
  /**
15
- * Selection options
16
- * e.g. { label: 'Option A', icon: IconRadar }
34
+ * Children render prop. This can be used to render a dropdown component
35
+ * for example
17
36
  */
18
- options: FilterButtonOption[];
37
+ children?: (props: ChildrenProps) => ReactNode;
19
38
  /**
20
39
  * The text that appears on the button component.
21
40
  * If no label is provided, a different Icon can be specified
@@ -27,9 +46,9 @@ export type FilterButtonProps = {
27
46
  */
28
47
  'aria-label'?: string;
29
48
  /**
30
- * The selected value
49
+ * The value
31
50
  */
32
- selection?: string | null;
51
+ value?: string | null;
33
52
  /**
34
53
  * The button size
35
54
  * @default FilterButtonSize.DEFAULT
@@ -47,32 +66,28 @@ export type FilterButtonProps = {
47
66
  /**
48
67
  * Optional icon element to include on the right side of the button
49
68
  */
50
- iconRight?: IconComponent;
69
+ iconRight?: IconComponent | null;
51
70
  /**
52
- * What to do when an option is selected
71
+ * What to do when the value is changed
53
72
  */
54
- onSelect?: (label: string) => void;
73
+ onChange?: (value: string) => void;
55
74
  /**
56
- * Whether interaction is disabled
75
+ * What to do when the filter button is opened
57
76
  */
58
- disabled?: boolean;
77
+ onOpen?: () => void;
59
78
  /**
60
- * Popup anchor origin
61
- * @default { horizontal: 'center', vertical: 'bottom' }
79
+ * If provided, will be called when the selected value is reset
62
80
  */
63
- popupAnchorOrigin?: Origin;
81
+ onReset?: () => void;
64
82
  /**
65
- * Popup transform origin
66
- * @default { horizontal: 'center', vertical: 'top' }
83
+ * What to do when the button is clicked
84
+ * This will override the default behavior of toggling isOpen
67
85
  */
68
- popupTransformOrigin?: Origin;
86
+ onClick?: () => void;
69
87
  /**
70
- * Popup portal location passed to the inner popup
71
- */
72
- popupPortalLocation?: HTMLElement;
73
- /**
74
- * zIndex applied to the inner Popup component
88
+ * Whether interaction is disabled
75
89
  */
76
- popupZIndex?: number;
90
+ disabled?: boolean;
77
91
  };
92
+ export {};
78
93
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/button/FilterButton/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAuB;AAC/C,OAAO,EAAE,MAAM,EAAE,0BAA8B;AAE/C,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAAA;AAElD,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG,cAAc,CAAA;AAElE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,aAAa,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAE7B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAEzB;;;OAGG;IACH,IAAI,CAAC,EAAE,gBAAgB,CAAA;IAEvB;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAE7B;;OAEG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAA;IAExB;;OAEG;IACH,SAAS,CAAC,EAAE,aAAa,CAAA;IAEzB;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAElC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B;;OAEG;IACH,mBAAmB,CAAC,EAAE,WAAW,CAAA;IAEjC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/button/FilterButton/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,aAAa,EAAE,mBAAuB;AAE/C,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAAA;AAGlD,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG,cAAc,CAAA;AAElE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,aAAa,CAAA;CACrB,CAAA;AAED,KAAK,aAAa,GAAG;IACnB;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAA;IACf;;OAEG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IACpC;;OAEG;IACH,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpD;;OAEG;IACH,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;CAC9C,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,SAAS,CAAA;IAE9C;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAErB;;;OAGG;IACH,IAAI,CAAC,EAAE,gBAAgB,CAAA;IAEvB;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAE7B;;OAEG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAA;IAExB;;OAEG;IACH,SAAS,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IAEhC;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAElC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IAEnB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA"}
@@ -7,7 +7,7 @@ export type IconButtonProps = {
7
7
  ripple?: boolean;
8
8
  'aria-label': string;
9
9
  iconCss?: CSSObject;
10
- } & Pick<IconProps, 'color' | 'size' | 'shadow' | 'height' | 'width'> & Pick<BaseButtonProps, 'onClick' | 'disabled' | 'className' | 'type' | 'children'>;
10
+ } & Pick<IconProps, 'color' | 'size' | 'shadow' | 'height' | 'width'> & Pick<BaseButtonProps, 'onClick' | 'disabled' | 'className' | 'type' | 'children' | 'isLoading'>;
11
11
  /**
12
12
  * The icon component allows you to pass in an icon and
13
13
  * apply color and sizing properties.
@@ -17,5 +17,5 @@ export declare const IconButton: (props: {
17
17
  ripple?: boolean | undefined;
18
18
  'aria-label': string;
19
19
  iconCss?: CSSObject | undefined;
20
- } & Pick<IconProps, "color" | "size" | "shadow" | "height" | "width"> & Pick<BaseButtonProps, "disabled" | "type" | "className" | "children" | "onClick"> & import("react").RefAttributes<HTMLButtonElement>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | null;
20
+ } & Pick<IconProps, "color" | "size" | "shadow" | "height" | "width"> & Pick<BaseButtonProps, "disabled" | "type" | "className" | "children" | "onClick" | "isLoading"> & import("react").RefAttributes<HTMLButtonElement>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | null;
21
21
  //# sourceMappingURL=IconButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../../src/components/button/IconButton/IconButton.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAE1D,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,aAAa,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,SAAS,CAAA;CACpB,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,GACnE,IAAI,CACF,eAAe,EACf,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAC3D,CAAA;AAEH;;;GAGG;AACH,eAAO,MAAM,UAAU;UAdf,aAAa;;kBAEL,MAAM;;8SAwFrB,CAAA"}
1
+ {"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../../src/components/button/IconButton/IconButton.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAE1D,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,aAAa,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,SAAS,CAAA;CACpB,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,GACnE,IAAI,CACF,eAAe,EACf,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CACzE,CAAA;AAEH;;;GAGG;AACH,eAAO,MAAM,UAAU;UAdf,aAAa;;kBAEL,MAAM;;4TAkGrB,CAAA"}
@@ -10,8 +10,8 @@ import { BaseButton } from '../BaseButton/BaseButton.js';
10
10
  */
11
11
  var IconButton = forwardRef(function (props, ref) {
12
12
  var Icon = props.icon, iconColor = props.color, _a = props.size, size = _a === void 0 ? 'l' : _a, shadow = props.shadow, ripple = props.ripple, height = props.height, width = props.width, iconCss = props.iconCss, children = props.children, other = __rest(props, ["icon", "color", "size", "shadow", "ripple", "height", "width", "iconCss", "children"]);
13
- var disabled = other.disabled;
14
- var _b = useTheme(), color = _b.color, cornerRadius = _b.cornerRadius, spacing = _b.spacing, motion = _b.motion;
13
+ var disabled = other.disabled, isLoading = other.isLoading;
14
+ var _b = useTheme(), color = _b.color, cornerRadius = _b.cornerRadius, spacing = _b.spacing, motion = _b.motion, iconSizes = _b.iconSizes;
15
15
  var buttonCss = {
16
16
  background: 'transparent',
17
17
  border: 'none',
@@ -46,7 +46,8 @@ var IconButton = forwardRef(function (props, ref) {
46
46
  borderRadius: cornerRadius.s
47
47
  }
48
48
  };
49
- return (jsxs(BaseButton, __assign({ ref: ref, type: 'button' }, other, { css: [buttonCss, ripple && rippleCss] }, { children: [jsx(Icon, { "aria-hidden": true, color: disabled ? 'disabled' : iconColor, size: size, shadow: shadow, height: height, width: width, css: iconCss }), children] })));
49
+ var loadingIconCss = __assign(__assign({}, iconCss), { height: iconSizes[size], width: iconSizes[size], color: color.icon[iconColor !== null && iconColor !== void 0 ? iconColor : 'default'] });
50
+ return (jsxs(BaseButton, __assign({ ref: ref, type: 'button' }, other, { css: [buttonCss, ripple && rippleCss], styles: { icon: loadingIconCss } }, { children: [isLoading ? null : (jsx(Icon, { "aria-hidden": true, color: disabled ? 'disabled' : iconColor, size: size, shadow: shadow, height: height, width: width, css: iconCss })), children] })));
50
51
  });
51
52
 
52
53
  export { IconButton };
@@ -1 +1 @@
1
- {"version":3,"file":"IconButton.js","sources":["../../../../src/components/button/IconButton/IconButton.tsx"],"sourcesContent":["import { forwardRef } from 'react'\n\nimport { useTheme, type CSSObject } from '@emotion/react'\n\nimport type { IconComponent, IconProps } from '../../icon'\nimport { BaseButton } from '../BaseButton/BaseButton'\nimport type { BaseButtonProps } from '../BaseButton/types'\n\nexport type IconButtonProps = {\n icon: IconComponent\n ripple?: boolean\n 'aria-label': string\n iconCss?: CSSObject\n} & Pick<IconProps, 'color' | 'size' | 'shadow' | 'height' | 'width'> &\n Pick<\n BaseButtonProps,\n 'onClick' | 'disabled' | 'className' | 'type' | 'children'\n >\n\n/**\n * The icon component allows you to pass in an icon and\n * apply color and sizing properties.\n */\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n (props: IconButtonProps, ref) => {\n const {\n icon: Icon,\n color: iconColor,\n size = 'l',\n shadow,\n ripple,\n height,\n width,\n iconCss,\n children,\n ...other\n } = props\n const { disabled } = other\n const { color, cornerRadius, spacing, motion } = useTheme()\n\n const buttonCss: CSSObject = {\n background: 'transparent',\n border: 'none',\n borderRadius: '50%',\n padding: spacing.xs,\n overflow: 'unset',\n svg: {\n transition: `\n transform ${motion.hover},\n color ${motion.hover}\n `\n },\n '&:hover': {\n transform: 'scale(1.0)',\n svg: {\n transform: 'scale(1.1)'\n }\n },\n '&:active': {\n transform: 'scale(1.0)',\n svg: {\n transform: 'scale(0.98)'\n }\n }\n }\n\n const rippleCss: CSSObject = {\n '&:hover': {\n backgroundColor: color.neutral.n100\n },\n '&:active': {\n backgroundColor: color.neutral.n150\n },\n '&:focus-visible': {\n border: `1px solid ${color.secondary.secondary}`,\n borderRadius: cornerRadius.s\n }\n }\n\n return (\n <BaseButton\n ref={ref}\n type='button'\n {...other}\n css={[buttonCss, ripple && rippleCss]}\n >\n <Icon\n aria-hidden\n color={disabled ? 'disabled' : iconColor}\n size={size}\n shadow={shadow}\n height={height}\n width={width}\n css={iconCss}\n />\n {children}\n </BaseButton>\n )\n }\n)\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAmBA;;;AAGG;IACU,UAAU,GAAG,UAAU,CAClC,UAAC,KAAsB,EAAE,GAAG,EAAA;IAExB,IAAM,IAAI,GAUR,KAAK,CAVG,IAAA,EACH,SAAS,GASd,KAAK,CATS,KAAA,EAChB,EAQE,GAAA,KAAK,KARG,EAAV,IAAI,GAAG,EAAA,KAAA,KAAA,CAAA,GAAA,GAAG,GAAA,EAAA,EACV,MAAM,GAOJ,KAAK,CAAA,MAPD,EACN,MAAM,GAMJ,KAAK,OAND,EACN,MAAM,GAKJ,KAAK,CALD,MAAA,EACN,KAAK,GAIH,KAAK,CAAA,KAJF,EACL,OAAO,GAGL,KAAK,QAHA,EACP,QAAQ,GAEN,KAAK,CAFC,QAAA,EACL,KAAK,GAAA,MAAA,CACN,KAAK,EAXH,CAWL,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,CAAA,CADS,CACD;AACD,IAAA,IAAA,QAAQ,GAAK,KAAK,CAAA,QAAV,CAAU;AACpB,IAAA,IAAA,EAA2C,GAAA,QAAQ,EAAE,EAAnD,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,YAAY,GAAA,EAAA,CAAA,YAAA,EAAE,OAAO,GAAA,EAAA,CAAA,OAAA,EAAE,MAAM,YAAe,CAAA;AAE3D,IAAA,IAAM,SAAS,GAAc;AAC3B,QAAA,UAAU,EAAE,aAAa;AACzB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,YAAY,EAAE,KAAK;QACnB,OAAO,EAAE,OAAO,CAAC,EAAE;AACnB,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,GAAG,EAAE;YACH,UAAU,EAAE,8BACA,MAAM,CAAC,KAAK,EAChB,mBAAA,CAAA,CAAA,MAAA,CAAA,MAAM,CAAC,KAAK,EACnB,YAAA,CAAA;AACF,SAAA;AACD,QAAA,SAAS,EAAE;AACT,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,GAAG,EAAE;AACH,gBAAA,SAAS,EAAE,YAAY;AACxB,aAAA;AACF,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,GAAG,EAAE;AACH,gBAAA,SAAS,EAAE,aAAa;AACzB,aAAA;AACF,SAAA;KACF,CAAA;AAED,IAAA,IAAM,SAAS,GAAc;AAC3B,QAAA,SAAS,EAAE;AACT,YAAA,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;AACpC,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;AACpC,SAAA;AACD,QAAA,iBAAiB,EAAE;AACjB,YAAA,MAAM,EAAE,YAAa,CAAA,MAAA,CAAA,KAAK,CAAC,SAAS,CAAC,SAAS,CAAE;YAChD,YAAY,EAAE,YAAY,CAAC,CAAC;AAC7B,SAAA;KACF,CAAA;AAED,IAAA,QACEA,IAAA,CAAC,UAAU,EAAA,QAAA,CAAA,EACT,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,QAAQ,EAAA,EACT,KAAK,EAAA,EACT,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,IAAI,SAAS,CAAC,EAAA,EAAA,EAAA,QAAA,EAAA,CAErCC,GAAC,CAAA,IAAI,EAEH,EAAA,aAAA,EAAA,IAAA,EAAA,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,EACxC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,OAAO,EACZ,CAAA,EACD,QAAQ,CAAA,EAAA,CAAA,CACE,EACd;AACH,CAAC;;;;"}
1
+ {"version":3,"file":"IconButton.js","sources":["../../../../src/components/button/IconButton/IconButton.tsx"],"sourcesContent":["import { forwardRef } from 'react'\n\nimport { useTheme, type CSSObject } from '@emotion/react'\n\nimport type { IconComponent, IconProps } from '../../icon'\nimport { BaseButton } from '../BaseButton/BaseButton'\nimport type { BaseButtonProps } from '../BaseButton/types'\n\nexport type IconButtonProps = {\n icon: IconComponent\n ripple?: boolean\n 'aria-label': string\n iconCss?: CSSObject\n} & Pick<IconProps, 'color' | 'size' | 'shadow' | 'height' | 'width'> &\n Pick<\n BaseButtonProps,\n 'onClick' | 'disabled' | 'className' | 'type' | 'children' | 'isLoading'\n >\n\n/**\n * The icon component allows you to pass in an icon and\n * apply color and sizing properties.\n */\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n (props: IconButtonProps, ref) => {\n const {\n icon: Icon,\n color: iconColor,\n size = 'l',\n shadow,\n ripple,\n height,\n width,\n iconCss,\n children,\n ...other\n } = props\n const { disabled, isLoading } = other\n const { color, cornerRadius, spacing, motion, iconSizes } = useTheme()\n\n const buttonCss: CSSObject = {\n background: 'transparent',\n border: 'none',\n borderRadius: '50%',\n padding: spacing.xs,\n overflow: 'unset',\n svg: {\n transition: `\n transform ${motion.hover},\n color ${motion.hover}\n `\n },\n '&:hover': {\n transform: 'scale(1.0)',\n svg: {\n transform: 'scale(1.1)'\n }\n },\n '&:active': {\n transform: 'scale(1.0)',\n svg: {\n transform: 'scale(0.98)'\n }\n }\n }\n\n const rippleCss: CSSObject = {\n '&:hover': {\n backgroundColor: color.neutral.n100\n },\n '&:active': {\n backgroundColor: color.neutral.n150\n },\n '&:focus-visible': {\n border: `1px solid ${color.secondary.secondary}`,\n borderRadius: cornerRadius.s\n }\n }\n\n const loadingIconCss: CSSObject = {\n ...iconCss,\n height: iconSizes[size],\n width: iconSizes[size],\n color: color.icon[iconColor ?? 'default']\n }\n\n return (\n <BaseButton\n ref={ref}\n type='button'\n {...other}\n css={[buttonCss, ripple && rippleCss]}\n styles={{ icon: loadingIconCss }}\n >\n {isLoading ? null : (\n <Icon\n aria-hidden\n color={disabled ? 'disabled' : iconColor}\n size={size}\n shadow={shadow}\n height={height}\n width={width}\n css={iconCss}\n />\n )}\n {children}\n </BaseButton>\n )\n }\n)\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { RefObject } from 'react';
2
+ import { OptionsFilterButtonOption } from './types';
3
+ type FilterButtonOptionsProps = {
4
+ activeValue?: string | null;
5
+ options: OptionsFilterButtonOption[];
6
+ optionRefs?: RefObject<HTMLButtonElement[]>;
7
+ onChange: (option: OptionsFilterButtonOption) => void;
8
+ };
9
+ export declare const FilterButtonOptions: (props: FilterButtonOptionsProps) => import("@emotion/react/jsx-runtime").JSX.Element;
10
+ export declare const OptionsFilterButton: (props: {
11
+ options: OptionsFilterButtonOption[];
12
+ optionsLabel?: string | undefined;
13
+ selection?: string | null | undefined;
14
+ showFilterInput?: boolean | undefined;
15
+ filterInputPlaceholder?: string | undefined;
16
+ } & import("./types").FilterButtonPopupProps & Omit<import("..").FilterButtonProps, "children" | "value"> & import("react").RefAttributes<HTMLButtonElement>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | null;
17
+ export {};
18
+ //# sourceMappingURL=OptionsFilterButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptionsFilterButton.d.ts","sourceRoot":"","sources":["../../../../src/components/button/OptionsFilterButton/OptionsFilterButton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EAKV,MAAM,OAAO,CAAA;AAed,OAAO,EAA4B,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAM7E,KAAK,wBAAwB,GAAG;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,EAAE,yBAAyB,EAAE,CAAA;IACpC,UAAU,CAAC,EAAE,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAA;IAC3C,QAAQ,EAAE,CAAC,MAAM,EAAE,yBAAyB,KAAK,IAAI,CAAA;CACtD,CAAA;AAED,eAAO,MAAM,mBAAmB,UAAW,wBAAwB,qDAkFlE,CAAA;AAED,eAAO,MAAM,mBAAmB;;;;;;8PAsJ9B,CAAA"}
@@ -0,0 +1,123 @@
1
+ import { __rest, __assign } from '../../../_virtual/_tslib.js';
2
+ import { jsx, jsxs } from '@emotion/react/jsx-runtime';
3
+ import { forwardRef, useState, useRef, useCallback, useMemo } from 'react';
4
+ import { useTheme } from '@emotion/react';
5
+ import { BaseButton } from '../BaseButton/BaseButton.js';
6
+ import '../../common/HiddenInput.js';
7
+ import '../../radio-group/RadioGroupContext.js';
8
+ import { Text } from '../../text/Text.js';
9
+ import { TextInput } from '../../input/TextInput/TextInput.js';
10
+ import { TextInputSize } from '../../input/TextInput/types.js';
11
+ import '../../input/PasswordInput/PasswordInput.js';
12
+ import '../../input/TokenAmountInput/TokenAmountInput.js';
13
+ import { Box } from '../../layout/Box/Box.js';
14
+ import { Flex } from '../../layout/Flex/Flex.js';
15
+ import { Paper } from '../../layout/Paper/Paper.js';
16
+ import { Popup } from '../../popup/Popup.js';
17
+ import { useControlled } from '../../../hooks/useControlled.js';
18
+ import { IconCaretDown, IconSearch } from '../../../icons/utilityIcons.js';
19
+ import '@emotion/css';
20
+ import { FilterButton } from '../FilterButton/FilterButton.js';
21
+ import { SelectPopupKeyHandler } from './SelectPopupKeyHandler.js';
22
+
23
+ var messages = {
24
+ noMatches: 'No matches'
25
+ };
26
+ var FilterButtonOptions = function (props) {
27
+ var activeValue = props.activeValue, options = props.options, onChange = props.onChange, optionRefs = props.optionRefs;
28
+ var _a = useTheme(), color = _a.color, cornerRadius = _a.cornerRadius, spacing = _a.spacing, typography = _a.typography;
29
+ // Popup Styles
30
+ var optionIconCss = {
31
+ width: spacing.unit4,
32
+ height: spacing.unit4
33
+ };
34
+ var activeOptionCss = {
35
+ transform: 'none',
36
+ backgroundColor: color.secondary.s300,
37
+ color: color.special.white
38
+ };
39
+ var optionCss = {
40
+ background: 'transparent',
41
+ border: 'none',
42
+ color: color.text.default,
43
+ fontWeight: typography.weight.medium,
44
+ gap: spacing.s,
45
+ paddingLeft: spacing.m,
46
+ paddingRight: spacing.m,
47
+ paddingTop: spacing.s,
48
+ paddingBottom: spacing.s,
49
+ width: '100%',
50
+ borderRadius: cornerRadius.s,
51
+ justifyContent: 'flex-start',
52
+ '&:hover': activeOptionCss,
53
+ '&:active': {
54
+ transform: 'none'
55
+ }
56
+ };
57
+ if (!options.length) {
58
+ return (jsx(Flex, __assign({ justifyContent: 'center' }, { children: jsx(Text, __assign({ variant: 'body', color: 'subdued', size: 's' }, { children: messages.noMatches })) })));
59
+ }
60
+ return (jsx(Flex, __assign({ direction: 'column' }, { children: options.map(function (option, index) {
61
+ var _a, _b, _c;
62
+ return (jsxs(BaseButton, __assign({ iconLeft: option.icon, styles: {
63
+ button: __assign(__assign({}, optionCss), (option.value === activeValue ? activeOptionCss : {})),
64
+ icon: optionIconCss
65
+ }, onClick: function () { return onChange(option); }, "aria-label": (_a = option.label) !== null && _a !== void 0 ? _a : option.value, role: 'option', ref: function (el) {
66
+ if (optionRefs && optionRefs.current && el) {
67
+ optionRefs.current[index] = el;
68
+ }
69
+ } }, { children: [(_b = option.leadingElement) !== null && _b !== void 0 ? _b : null, jsx(Text, __assign({ variant: 'body', strength: 'strong' }, { children: (_c = option.label) !== null && _c !== void 0 ? _c : option.value })), option.helperText ? (jsx(Text, __assign({ variant: 'body', strength: 'strong', color: 'subdued' }, { children: option.helperText }))) : null] }), option.value));
70
+ }) })));
71
+ };
72
+ var OptionsFilterButton = forwardRef(function OptionsFilterButton(props, ref) {
73
+ var _a;
74
+ var selectionProp = props.selection, options = props.options, optionsLabel = props.optionsLabel, showFilterInput = props.showFilterInput, _b = props.filterInputPlaceholder, filterInputPlaceholder = _b === void 0 ? 'Search' : _b, popupAnchorOrigin = props.popupAnchorOrigin, popupMaxHeight = props.popupMaxHeight, popupTransformOrigin = props.popupTransformOrigin, popupPortalLocation = props.popupPortalLocation, popupZIndex = props.popupZIndex, filterButtonProps = __rest(props, ["selection", "options", "optionsLabel", "showFilterInput", "filterInputPlaceholder", "popupAnchorOrigin", "popupMaxHeight", "popupTransformOrigin", "popupPortalLocation", "popupZIndex"]);
75
+ var _c = useControlled({
76
+ controlledProp: selectionProp,
77
+ defaultValue: null,
78
+ stateName: 'selection',
79
+ componentName: 'FilterButton'
80
+ }), selection = _c[0], setSelection = _c[1];
81
+ var _d = useState(''), filterInputValue = _d[0], setFilterInputValue = _d[1];
82
+ var selectedOption = options.find(function (option) { return option.value === selection; });
83
+ var selectedLabel = (_a = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.label) !== null && _a !== void 0 ? _a : selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.value;
84
+ var inputRef = useRef(null);
85
+ var optionRefs = useRef([]);
86
+ var scrollRef = useRef(null);
87
+ var handleOptionSelect = useCallback(function (handleChange, setIsOpen) {
88
+ return function (option) {
89
+ var _a;
90
+ setSelection(option.value);
91
+ handleChange(option.value, (_a = option.label) !== null && _a !== void 0 ? _a : '');
92
+ setIsOpen(false);
93
+ };
94
+ }, [setSelection]);
95
+ var handleOpen = useCallback(function () {
96
+ // Focus the input after the popup is open
97
+ setTimeout(function () {
98
+ var _a;
99
+ (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus({ preventScroll: true });
100
+ }, 0);
101
+ }, [inputRef]);
102
+ var filteredOptions = useMemo(function () {
103
+ return options.filter(function (_a) {
104
+ var label = _a.label;
105
+ return (!filterInputValue ||
106
+ (label === null || label === void 0 ? void 0 : label.toLowerCase().includes(filterInputValue.toLowerCase())));
107
+ });
108
+ }, [options, filterInputValue]);
109
+ return (jsx(FilterButton, __assign({ iconRight: IconCaretDown }, filterButtonProps, { value: selection, onOpen: handleOpen, onReset: function () { return setFilterInputValue(''); }, label: selectedLabel !== null && selectedLabel !== void 0 ? selectedLabel : filterButtonProps.label }, { children: function (_a) {
110
+ var isOpen = _a.isOpen, setIsOpen = _a.setIsOpen, handleChange = _a.handleChange, anchorRef = _a.anchorRef;
111
+ return (jsx(SelectPopupKeyHandler, __assign({ options: filteredOptions, disabled: !isOpen, onOptionSelect: handleOptionSelect(handleChange, setIsOpen), optionRefs: optionRefs, scrollRef: scrollRef }, { children: function (activeValue) {
112
+ var _a;
113
+ return (jsx(Popup, __assign({ anchorRef: ref || anchorRef, isVisible: isOpen, onClose: function () { return setIsOpen(false); }, anchorOrigin: popupAnchorOrigin, transformOrigin: popupTransformOrigin, portalLocation: popupPortalLocation, zIndex: popupZIndex, onAfterClose: function () { return setFilterInputValue(''); } }, { children: jsx(Paper, __assign({ mt: 's', border: 'strong', shadow: 'far', onClick: function (e) { return e.stopPropagation(); } }, { children: jsx(Flex, __assign({ p: 's', direction: 'column', alignItems: 'flex-start', role: 'listbox', "aria-label": (_a = selectedLabel !== null && selectedLabel !== void 0 ? selectedLabel : filterButtonProps.label) !== null && _a !== void 0 ? _a : props['aria-label'], "aria-activedescendant": selectedLabel, css: { maxHeight: popupMaxHeight, overflowY: 'auto' }, ref: scrollRef }, { children: jsxs(Flex, __assign({ direction: 'column', w: '100%', gap: 's' }, { children: [showFilterInput ? (jsx(TextInput, { ref: inputRef, placeholder: filterInputPlaceholder, label: filterInputPlaceholder, size: TextInputSize.SMALL, startIcon: IconSearch, onClick: function (e) {
114
+ e.stopPropagation();
115
+ }, onChange: function (e) {
116
+ setFilterInputValue(e.target.value);
117
+ }, autoComplete: 'off' })) : null, optionsLabel ? (jsx(Box, __assign({ pt: 's', ph: 'm' }, { children: jsx(Text, __assign({ variant: 'label', size: 'xs' }, { children: optionsLabel })) }))) : null, jsx(FilterButtonOptions, { activeValue: activeValue, options: filteredOptions, optionRefs: optionRefs, onChange: handleOptionSelect(handleChange, setIsOpen) })] })) })) })) })));
118
+ } })));
119
+ } })));
120
+ });
121
+
122
+ export { FilterButtonOptions, OptionsFilterButton };
123
+ //# sourceMappingURL=OptionsFilterButton.js.map