@kaizen/components 1.4.25 → 1.5.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 (105) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/ButtonGroup/index.d.ts +5 -0
  3. package/dist/ButtonGroup/index.js +7 -0
  4. package/dist/ButtonGroup-b1e541fe.d.ts +14 -0
  5. package/dist/ButtonGroup.module-NQDV3763.scss +73 -0
  6. package/dist/Filter/components/FilterContents/index.d.ts +3 -0
  7. package/dist/Filter/components/FilterContents/index.js +6 -0
  8. package/dist/Filter/components/FilterPopover/index.d.ts +15 -0
  9. package/dist/Filter/components/FilterPopover/index.js +6 -0
  10. package/dist/Filter/index.d.ts +5 -0
  11. package/dist/Filter/index.js +12 -0
  12. package/dist/Filter/types.d.ts +5 -0
  13. package/dist/Filter/types.js +1 -0
  14. package/dist/Filter-15d87e2c.d.ts +21 -0
  15. package/dist/FilterButton/FilterButton/index.d.ts +5 -0
  16. package/dist/FilterButton/FilterButton/index.js +8 -0
  17. package/dist/FilterButton/FilterButtonRemovable/index.d.ts +8 -0
  18. package/dist/FilterButton/FilterButtonRemovable/index.js +10 -0
  19. package/dist/FilterButton/components/FilterButtonBase/index.d.ts +3 -0
  20. package/dist/FilterButton/components/FilterButtonBase/index.js +6 -0
  21. package/dist/FilterButton/index.d.ts +8 -0
  22. package/dist/FilterButton/index.js +13 -0
  23. package/dist/FilterButton-e44e4bf8.d.ts +12 -0
  24. package/dist/FilterButton.module-HA7A5HIZ.scss +22 -0
  25. package/dist/FilterButtonBase-4004361e.d.ts +9 -0
  26. package/dist/FilterButtonBase.module-KNRAMYSJ.scss +65 -0
  27. package/dist/FilterButtonRemovable-d3bc8f61.d.ts +19 -0
  28. package/dist/FilterContents-8d959c14.d.ts +12 -0
  29. package/dist/FilterContents.module-VKPAJKDG.scss +5 -0
  30. package/dist/FilterPopover.module-2NVOPVIT.scss +11 -0
  31. package/dist/KaizenProvider/ThemeProvider/index.d.ts +1 -1
  32. package/dist/KaizenProvider/ThemeProvider/index.js +3 -3
  33. package/dist/KaizenProvider/ThemeProvider/themes/index.js +1 -1
  34. package/dist/KaizenProvider/index.d.ts +2 -2
  35. package/dist/KaizenProvider/index.js +3 -3
  36. package/dist/{KaizenProvider-af031107.d.ts → KaizenProvider-44a90581.d.ts} +2 -2
  37. package/dist/{ThemeProvider-7786826c.d.ts → ThemeProvider-9852214a.d.ts} +2 -2
  38. package/dist/chunk-24HHXM6U.js +29 -0
  39. package/dist/chunk-3VEH3HNR.js +6 -0
  40. package/dist/chunk-DR7ZJ6Z3.js +38 -0
  41. package/dist/chunk-FMXGTI6W.js +1 -0
  42. package/dist/chunk-GTXIOS6D.js +51 -0
  43. package/dist/chunk-J5NCLDC5.js +55 -0
  44. package/dist/chunk-SBUK4XZM.js +18 -0
  45. package/dist/chunk-TGN3Y4NF.js +51 -0
  46. package/dist/chunk-Y6BQRSGB.js +21 -0
  47. package/dist/esm/ButtonGroup/index.js +7 -0
  48. package/dist/esm/ButtonGroup.module-NQDV3763.scss +73 -0
  49. package/dist/esm/Filter/components/FilterContents/index.js +6 -0
  50. package/dist/esm/Filter/components/FilterPopover/index.js +6 -0
  51. package/dist/esm/Filter/index.js +12 -0
  52. package/dist/esm/Filter/types.js +1 -0
  53. package/dist/esm/FilterButton/FilterButton/index.js +8 -0
  54. package/dist/esm/FilterButton/FilterButtonRemovable/index.js +10 -0
  55. package/dist/esm/FilterButton/components/FilterButtonBase/index.js +6 -0
  56. package/dist/esm/FilterButton/index.js +13 -0
  57. package/dist/esm/FilterButton.module-HA7A5HIZ.scss +22 -0
  58. package/dist/esm/FilterButtonBase.module-KNRAMYSJ.scss +65 -0
  59. package/dist/esm/FilterContents.module-VKPAJKDG.scss +5 -0
  60. package/dist/esm/FilterPopover.module-2NVOPVIT.scss +11 -0
  61. package/dist/esm/KaizenProvider/ThemeProvider/index.js +3 -3
  62. package/dist/esm/KaizenProvider/ThemeProvider/themes/index.js +1 -1
  63. package/dist/esm/KaizenProvider/index.js +3 -3
  64. package/dist/esm/chunk-24HHXM6U.js +29 -0
  65. package/dist/esm/chunk-3VEH3HNR.js +6 -0
  66. package/dist/esm/chunk-DR7ZJ6Z3.js +38 -0
  67. package/dist/esm/chunk-FMXGTI6W.js +0 -0
  68. package/dist/esm/chunk-GTXIOS6D.js +51 -0
  69. package/dist/esm/chunk-J5NCLDC5.js +55 -0
  70. package/dist/esm/chunk-SBUK4XZM.js +18 -0
  71. package/dist/esm/chunk-TGN3Y4NF.js +51 -0
  72. package/dist/esm/chunk-Y6BQRSGB.js +21 -0
  73. package/dist/esm/index.js +13 -3
  74. package/dist/esm/types.js +0 -0
  75. package/dist/esm/utils/isRefObject.js +6 -0
  76. package/dist/iife/ButtonGroup/index.js +33555 -0
  77. package/dist/iife/ButtonGroup.module-NQDV3763.scss +73 -0
  78. package/dist/iife/Filter/components/FilterContents/index.js +2317 -0
  79. package/dist/iife/Filter/components/FilterPopover/index.js +33202 -0
  80. package/dist/iife/Filter/index.js +36349 -0
  81. package/dist/iife/Filter/types.js +3 -0
  82. package/dist/iife/FilterButton/FilterButton/index.js +2417 -0
  83. package/dist/iife/FilterButton/FilterButtonRemovable/index.js +33673 -0
  84. package/dist/iife/FilterButton/components/FilterButtonBase/index.js +2314 -0
  85. package/dist/iife/FilterButton/index.js +33671 -0
  86. package/dist/iife/FilterButton.module-HA7A5HIZ.scss +22 -0
  87. package/dist/iife/FilterButtonBase.module-KNRAMYSJ.scss +65 -0
  88. package/dist/iife/FilterContents.module-VKPAJKDG.scss +5 -0
  89. package/dist/iife/FilterPopover.module-2NVOPVIT.scss +11 -0
  90. package/dist/iife/Icon.module-VD7NKLAR.scss +72 -0
  91. package/dist/iife/Tooltip.module-YU7VOTNZ.scss +184 -0
  92. package/dist/iife/chevron-down.icon-COG3GAYR.svg +17 -0
  93. package/dist/iife/chevron-up.icon-O5VRF5BX.svg +17 -0
  94. package/dist/iife/clear.icon-OD6PWTJH.svg +17 -0
  95. package/dist/iife/index.js +34501 -386
  96. package/dist/iife/types.js +3 -0
  97. package/dist/iife/utils/isRefObject.js +5 -0
  98. package/dist/index.d.ts +6 -2
  99. package/dist/index.js +12 -2
  100. package/dist/styles.css +16 -0
  101. package/dist/types.d.ts +8 -0
  102. package/dist/types.js +1 -0
  103. package/dist/utils/isRefObject.d.ts +5 -0
  104. package/dist/utils/isRefObject.js +6 -0
  105. package/package.json +10 -5
@@ -0,0 +1,51 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+ var _chunkSBUK4XZMjs = require('./chunk-SBUK4XZM.js');
4
+
5
+ // src/ButtonGroup/ButtonGroup.tsx
6
+ var _react = require('react'); var _react2 = _interopRequireDefault(_react);
7
+ var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames);
8
+ var _drafttooltip = require('@kaizen/draft-tooltip');
9
+ var _ButtonGroupmoduleNQDV3763scss = require('./ButtonGroup.module-NQDV3763.scss'); var _ButtonGroupmoduleNQDV3763scss2 = _interopRequireDefault(_ButtonGroupmoduleNQDV3763scss);
10
+ var isFilterButton = (node) => _react2.default.isValidElement(node) && node.type === _chunkSBUK4XZMjs.FilterButtonBase;
11
+ var ButtonGroup = ({
12
+ children,
13
+ classNameOverride,
14
+ ...restProps
15
+ }) => {
16
+ const childCount = _react2.default.Children.count(children);
17
+ const containerProps = {
18
+ role: "group",
19
+ className: _classnames2.default.call(void 0, _ButtonGroupmoduleNQDV3763scss2.default.buttonGroup, classNameOverride),
20
+ ...restProps
21
+ };
22
+ if (childCount === 1)
23
+ return /* @__PURE__ */ _react2.default.createElement("div", { ...containerProps }, children);
24
+ return /* @__PURE__ */ _react2.default.createElement("div", { ...containerProps }, _react2.default.Children.map(children, (child, index) => {
25
+ const buttonClassNames = _classnames2.default.call(void 0,
26
+ _ButtonGroupmoduleNQDV3763scss2.default.child,
27
+ index === 0 && _ButtonGroupmoduleNQDV3763scss2.default.firstChild,
28
+ index === childCount - 1 && _ButtonGroupmoduleNQDV3763scss2.default.lastChild,
29
+ child.props.classNameOverride
30
+ );
31
+ if (child.type === _drafttooltip.Tooltip) {
32
+ const button = child.props.children;
33
+ if (isFilterButton(button)) {
34
+ return _react2.default.cloneElement(child, {
35
+ children: _react2.default.cloneElement(button, {
36
+ classNameOverride: buttonClassNames
37
+ })
38
+ });
39
+ }
40
+ return child;
41
+ }
42
+ return _react2.default.cloneElement(child, {
43
+ classNameOverride: buttonClassNames
44
+ });
45
+ }));
46
+ };
47
+ ButtonGroup.displayName = "ButtonGroup";
48
+
49
+
50
+
51
+ exports.ButtonGroup = ButtonGroup;
@@ -0,0 +1,55 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
+
3
+ var _chunkTGN3Y4NFjs = require('./chunk-TGN3Y4NF.js');
4
+
5
+ // src/Filter/Filter.tsx
6
+ var _react = require('react'); var _react2 = _interopRequireDefault(_react);
7
+ var _reactfocuson = require('react-focus-on');
8
+ var Filter = ({
9
+ children,
10
+ isOpen,
11
+ setIsOpen,
12
+ renderTrigger,
13
+ classNameOverride,
14
+ ...restProps
15
+ }) => {
16
+ var _a, _b, _c, _d;
17
+ const [isRefLoaded, setIsRefLoaded] = _react.useState.call(void 0, false);
18
+ const trigger = renderTrigger({
19
+ onClick: () => setIsOpen(!isOpen),
20
+ isOpen
21
+ });
22
+ const inbuiltButtonRef = _react.useRef.call(void 0, null);
23
+ const inbuiltRef = _react.useRef.call(void 0, {
24
+ triggerRef: inbuiltButtonRef
25
+ });
26
+ const filterButtonRef = _nullishCoalesce(trigger.ref, () => ( inbuiltRef));
27
+ _react.useEffect.call(void 0, () => {
28
+ var _a2, _b2;
29
+ if ((_b2 = (_a2 = filterButtonRef.current) == null ? void 0 : _a2.triggerRef) == null ? void 0 : _b2.current) {
30
+ setIsRefLoaded(true);
31
+ }
32
+ }, [(_b = (_a = filterButtonRef.current) == null ? void 0 : _a.triggerRef) == null ? void 0 : _b.current]);
33
+ return /* @__PURE__ */ _react2.default.createElement("div", { className: classNameOverride, ...restProps }, _react2.default.cloneElement(trigger, {
34
+ ref: filterButtonRef
35
+ }), isRefLoaded && isOpen && /* @__PURE__ */ _react2.default.createElement(
36
+ _reactfocuson.FocusOn,
37
+ {
38
+ scrollLock: false,
39
+ onClickOutside: () => setIsOpen(false),
40
+ onEscapeKey: () => setIsOpen(false)
41
+ },
42
+ /* @__PURE__ */ _react2.default.createElement(
43
+ _chunkTGN3Y4NFjs.FilterPopover,
44
+ {
45
+ referenceElement: ((_d = (_c = filterButtonRef.current) == null ? void 0 : _c.triggerRef) == null ? void 0 : _d.current) || null
46
+ },
47
+ children
48
+ )
49
+ ));
50
+ };
51
+ Filter.displayName = "Filter";
52
+
53
+
54
+
55
+ exports.Filter = Filter;
@@ -0,0 +1,18 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/FilterButton/components/FilterButtonBase/FilterButtonBase.tsx
2
+ var _react = require('react'); var _react2 = _interopRequireDefault(_react);
3
+ var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames);
4
+ var _FilterButtonBasemoduleKNRAMYSJscss = require('./FilterButtonBase.module-KNRAMYSJ.scss'); var _FilterButtonBasemoduleKNRAMYSJscss2 = _interopRequireDefault(_FilterButtonBasemoduleKNRAMYSJscss);
5
+ var FilterButtonBase = _react.forwardRef.call(void 0, ({ children, classNameOverride, ...restProps }, ref) => /* @__PURE__ */ _react2.default.createElement(
6
+ "button",
7
+ {
8
+ ref,
9
+ className: _classnames2.default.call(void 0, _FilterButtonBasemoduleKNRAMYSJscss2.default.filterButtonBase, classNameOverride),
10
+ ...restProps
11
+ },
12
+ children
13
+ ));
14
+ FilterButtonBase.displayName = "FilterButtonBase";
15
+
16
+
17
+
18
+ exports.FilterButtonBase = FilterButtonBase;
@@ -0,0 +1,51 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/Filter/components/FilterPopover/FilterPopover.tsx
2
+ var _react = require('react'); var _react2 = _interopRequireDefault(_react);
3
+ var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames);
4
+ var _reactpopper = require('react-popper');
5
+ var _FilterPopovermodule2NVOPVITscss = require('./FilterPopover.module-2NVOPVIT.scss'); var _FilterPopovermodule2NVOPVITscss2 = _interopRequireDefault(_FilterPopovermodule2NVOPVITscss);
6
+ var FilterPopover = ({
7
+ children,
8
+ referenceElement,
9
+ popperOptions,
10
+ classNameOverride,
11
+ ...restProps
12
+ }) => {
13
+ const [popperElement, setPopperElement] = _react.useState.call(void 0,
14
+ null
15
+ );
16
+ const { styles: popperStyles, attributes: popperAttributes } = _reactpopper.usePopper.call(void 0,
17
+ referenceElement,
18
+ popperElement,
19
+ {
20
+ modifiers: [
21
+ {
22
+ name: "offset",
23
+ options: {
24
+ offset: [0, 15]
25
+ }
26
+ }
27
+ ],
28
+ placement: "bottom-start",
29
+ strategy: "fixed",
30
+ ...popperOptions
31
+ }
32
+ );
33
+ return /* @__PURE__ */ _react2.default.createElement(
34
+ "div",
35
+ {
36
+ ref: setPopperElement,
37
+ style: popperStyles == null ? void 0 : popperStyles.popper,
38
+ ...popperAttributes == null ? void 0 : popperAttributes.popper,
39
+ className: _classnames2.default.call(void 0, _FilterPopovermodule2NVOPVITscss2.default.filterPopover, classNameOverride),
40
+ role: "dialog",
41
+ "aria-modal": "true",
42
+ ...restProps
43
+ },
44
+ children
45
+ );
46
+ };
47
+ FilterPopover.displayName = "FilterPopover";
48
+
49
+
50
+
51
+ exports.FilterPopover = FilterPopover;
@@ -0,0 +1,21 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/Filter/components/FilterContents/FilterContents.tsx
2
+ var _react = require('react'); var _react2 = _interopRequireDefault(_react);
3
+ var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames);
4
+ var _FilterContentsmoduleVKPAJKDGscss = require('./FilterContents.module-VKPAJKDG.scss'); var _FilterContentsmoduleVKPAJKDGscss2 = _interopRequireDefault(_FilterContentsmoduleVKPAJKDGscss);
5
+ var FilterContents = ({
6
+ children,
7
+ classNameOverride,
8
+ ...restProps
9
+ }) => /* @__PURE__ */ _react2.default.createElement(
10
+ "div",
11
+ {
12
+ className: _classnames2.default.call(void 0, _FilterContentsmoduleVKPAJKDGscss2.default.filterContents, classNameOverride),
13
+ ...restProps
14
+ },
15
+ children
16
+ );
17
+ FilterContents.displayName = "FilterContents";
18
+
19
+
20
+
21
+ exports.FilterContents = FilterContents;
@@ -0,0 +1,7 @@
1
+ import {
2
+ ButtonGroup
3
+ } from "../chunk-GTXIOS6D.js";
4
+ import "../chunk-SBUK4XZM.js";
5
+ export {
6
+ ButtonGroup
7
+ };
@@ -0,0 +1,73 @@
1
+ @import "~@kaizen/design-tokens/sass/border";
2
+ @import "~@kaizen/design-tokens/sass/color";
3
+
4
+ $focus-ring-offset: 1px;
5
+ $focus-ring-offset-inner: calc(-1 * #{$focus-ring-offset});
6
+
7
+ // Polyfill
8
+ $polyfill--focus-visible: ":global(.js-focus-visible) &:global(.focus-visible)";
9
+
10
+ // Classnames to simulate pseudo states in storybook
11
+ $story-className--button-group--focus: ":global(.story__button-group--focus)";
12
+
13
+ // Combined pseudo state classes
14
+ $selectors--button-group--focus: "&:focus-visible, #{$polyfill--focus-visible}, &#{$story-className--button-group--focus}";
15
+
16
+ %firstChildBorders {
17
+ border-start-start-radius: $border-focus-ring-border-radius;
18
+ border-end-start-radius: $border-focus-ring-border-radius;
19
+ }
20
+
21
+ %lastChildBorders {
22
+ border-start-end-radius: $border-focus-ring-border-radius;
23
+ border-end-end-radius: $border-focus-ring-border-radius;
24
+ }
25
+
26
+ .buttonGroup {
27
+ display: inline-flex;
28
+
29
+ .child {
30
+ border-radius: 0;
31
+
32
+ #{$selectors--button-group--focus} {
33
+ &::after {
34
+ border-radius: 0;
35
+ }
36
+ }
37
+
38
+ &.firstChild {
39
+ @extend %firstChildBorders;
40
+
41
+ #{$selectors--button-group--focus} {
42
+ &::after {
43
+ @extend %firstChildBorders;
44
+ inset-inline-end: $focus-ring-offset-inner;
45
+ }
46
+ }
47
+ }
48
+
49
+ &:not(.firstChild) {
50
+ border-inline-start: 1px solid $color-blue-300;
51
+ }
52
+
53
+ &:not(.firstChild):not(.lastChild) {
54
+ #{$selectors--button-group--focus} {
55
+ &::after {
56
+ inset-inline-start: $focus-ring-offset-inner;
57
+ inset-inline-end: $focus-ring-offset-inner;
58
+ }
59
+ }
60
+ }
61
+
62
+ &.lastChild {
63
+ @extend %lastChildBorders;
64
+
65
+ #{$selectors--button-group--focus} {
66
+ &::after {
67
+ @extend %lastChildBorders;
68
+ inset-inline-start: $focus-ring-offset-inner;
69
+ }
70
+ }
71
+ }
72
+ }
73
+ }
@@ -0,0 +1,6 @@
1
+ import {
2
+ FilterContents
3
+ } from "../../../chunk-Y6BQRSGB.js";
4
+ export {
5
+ FilterContents
6
+ };
@@ -0,0 +1,6 @@
1
+ import {
2
+ FilterPopover
3
+ } from "../../../chunk-TGN3Y4NF.js";
4
+ export {
5
+ FilterPopover
6
+ };
@@ -0,0 +1,12 @@
1
+ import {
2
+ Filter
3
+ } from "../chunk-J5NCLDC5.js";
4
+ import "../chunk-TGN3Y4NF.js";
5
+ import {
6
+ FilterContents
7
+ } from "../chunk-Y6BQRSGB.js";
8
+ import "../chunk-FMXGTI6W.js";
9
+ export {
10
+ Filter,
11
+ FilterContents
12
+ };
@@ -0,0 +1 @@
1
+ import "../chunk-FMXGTI6W.js";
@@ -0,0 +1,8 @@
1
+ import {
2
+ FilterButton
3
+ } from "../../chunk-DR7ZJ6Z3.js";
4
+ import "../../chunk-3VEH3HNR.js";
5
+ import "../../chunk-SBUK4XZM.js";
6
+ export {
7
+ FilterButton
8
+ };
@@ -0,0 +1,10 @@
1
+ import {
2
+ FilterButtonRemovable
3
+ } from "../../chunk-24HHXM6U.js";
4
+ import "../../chunk-DR7ZJ6Z3.js";
5
+ import "../../chunk-3VEH3HNR.js";
6
+ import "../../chunk-GTXIOS6D.js";
7
+ import "../../chunk-SBUK4XZM.js";
8
+ export {
9
+ FilterButtonRemovable
10
+ };
@@ -0,0 +1,6 @@
1
+ import {
2
+ FilterButtonBase
3
+ } from "../../../chunk-SBUK4XZM.js";
4
+ export {
5
+ FilterButtonBase
6
+ };
@@ -0,0 +1,13 @@
1
+ import {
2
+ FilterButtonRemovable
3
+ } from "../chunk-24HHXM6U.js";
4
+ import {
5
+ FilterButton
6
+ } from "../chunk-DR7ZJ6Z3.js";
7
+ import "../chunk-3VEH3HNR.js";
8
+ import "../chunk-GTXIOS6D.js";
9
+ import "../chunk-SBUK4XZM.js";
10
+ export {
11
+ FilterButton,
12
+ FilterButtonRemovable
13
+ };
@@ -0,0 +1,22 @@
1
+ @import "~@kaizen/design-tokens/sass/spacing";
2
+ @import "~@kaizen/design-tokens/sass/typography";
3
+
4
+ .filterButton {
5
+ gap: $spacing-xs;
6
+ }
7
+
8
+ .labelContainer {
9
+ display: inline-flex;
10
+ }
11
+
12
+ .hasSelectedValues {
13
+ font-weight: $typography-button-primary-font-weight;
14
+ }
15
+
16
+ .labelSeparator {
17
+ margin-inline-end: $spacing-xs;
18
+
19
+ [dir="ltr"] [dir="rtl"] & {
20
+ margin-right: 0;
21
+ }
22
+ }
@@ -0,0 +1,65 @@
1
+ @import "~@kaizen/design-tokens/sass/border";
2
+ @import "~@kaizen/design-tokens/sass/color";
3
+ @import "~@kaizen/design-tokens/sass/typography";
4
+ @import "~@kaizen/design-tokens/sass/spacing";
5
+ @import "../../../_mixins/button-reset";
6
+ @import "./variables";
7
+
8
+ .filterButtonBase {
9
+ @include button-reset;
10
+
11
+ -webkit-font-smoothing: antialiased;
12
+ -moz-osx-font-smoothing: grayscale;
13
+
14
+ position: relative;
15
+ display: inline-flex;
16
+ align-items: center;
17
+
18
+ height: 3rem; // 48px
19
+ padding: $spacing-sm;
20
+
21
+ border-width: 0;
22
+ border-radius: $border-solid-border-radius;
23
+
24
+ background-color: $color-blue-100;
25
+
26
+ font-family: $typography-button-secondary-font-family;
27
+ font-weight: $typography-button-secondary-font-weight;
28
+ font-size: $typography-button-secondary-font-size;
29
+ line-height: $typography-button-secondary-line-height;
30
+ letter-spacing: $typography-button-secondary-letter-spacing;
31
+ color: $color-blue-500;
32
+ white-space: nowrap;
33
+
34
+ #{$selectors--filter-button-base--hover},
35
+ #{$selectors--filter-button-base--active} {
36
+ z-index: 2;
37
+ }
38
+
39
+ #{$selectors--filter-button-base--hover},
40
+ #{$selectors--filter-button-base--active},
41
+ #{$selectors--filter-button-base--focus} {
42
+ background-color: $color-blue-200;
43
+ }
44
+
45
+ &:focus {
46
+ outline: none;
47
+ }
48
+
49
+ #{$selectors--filter-button-base--focus} {
50
+ outline: none;
51
+
52
+ &::after {
53
+ content: "";
54
+ z-index: 3;
55
+ position: absolute;
56
+ top: $focus-ring-offset-outer;
57
+ bottom: $focus-ring-offset-outer;
58
+ left: $focus-ring-offset-outer;
59
+ right: $focus-ring-offset-outer;
60
+ border-radius: $border-focus-ring-border-radius;
61
+ border: $border-focus-ring-border-width $border-focus-ring-border-style
62
+ $color-blue-500;
63
+ }
64
+ }
65
+ }
@@ -0,0 +1,5 @@
1
+ @import "~@kaizen/design-tokens/sass/spacing";
2
+
3
+ .filterContents {
4
+ padding: $spacing-md;
5
+ }
@@ -0,0 +1,11 @@
1
+ @import "~@kaizen/design-tokens/sass/border";
2
+ @import "~@kaizen/design-tokens/sass/color";
3
+ @import "~@kaizen/design-tokens/sass/shadow";
4
+
5
+ .filterPopover {
6
+ background-color: $color-white;
7
+ z-index: 1010;
8
+ box-shadow: $shadow-large-box-shadow;
9
+ border-radius: $border-borderless-border-radius;
10
+ display: inline-flex;
11
+ }
@@ -6,13 +6,13 @@ import {
6
6
  import {
7
7
  defaultTheme
8
8
  } from "../../chunk-WDAFEOSV.js";
9
+ import {
10
+ heartTheme
11
+ } from "../../chunk-7T4E5A7M.js";
9
12
  import "../../chunk-FBL47PXS.js";
10
13
  import {
11
14
  ThemeManager
12
15
  } from "../../chunk-J42JQYBY.js";
13
- import {
14
- heartTheme
15
- } from "../../chunk-7T4E5A7M.js";
16
16
  export {
17
17
  ThemeContext,
18
18
  ThemeManager,
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  defaultTheme
3
3
  } from "../../../chunk-WDAFEOSV.js";
4
- import "../../../chunk-FBL47PXS.js";
5
4
  import {
6
5
  heartTheme
7
6
  } from "../../../chunk-7T4E5A7M.js";
7
+ import "../../../chunk-FBL47PXS.js";
8
8
  export {
9
9
  defaultTheme,
10
10
  heartTheme
@@ -9,13 +9,13 @@ import {
9
9
  import {
10
10
  defaultTheme
11
11
  } from "../chunk-WDAFEOSV.js";
12
+ import {
13
+ heartTheme
14
+ } from "../chunk-7T4E5A7M.js";
12
15
  import "../chunk-FBL47PXS.js";
13
16
  import {
14
17
  ThemeManager
15
18
  } from "../chunk-J42JQYBY.js";
16
- import {
17
- heartTheme
18
- } from "../chunk-7T4E5A7M.js";
19
19
  export {
20
20
  KaizenProvider,
21
21
  ThemeContext,
@@ -0,0 +1,29 @@
1
+ import {
2
+ FilterButton
3
+ } from "./chunk-DR7ZJ6Z3.js";
4
+ import {
5
+ isRefObject
6
+ } from "./chunk-3VEH3HNR.js";
7
+ import {
8
+ ButtonGroup
9
+ } from "./chunk-GTXIOS6D.js";
10
+ import {
11
+ FilterButtonBase
12
+ } from "./chunk-SBUK4XZM.js";
13
+
14
+ // src/FilterButton/FilterButtonRemovable/FilterButtonRemovable.tsx
15
+ import React, { forwardRef } from "react";
16
+ import { Icon } from "@kaizen/component-library";
17
+ import iconClear from "@kaizen/component-library/icons/clear.icon.svg";
18
+ import { Tooltip } from "@kaizen/draft-tooltip";
19
+ var FilterButtonRemovable = forwardRef(({ triggerButtonProps, removeButtonProps, ...restProps }, ref) => {
20
+ const customRefObject = isRefObject(ref) ? ref.current : null;
21
+ const removeButtonRef = customRefObject == null ? void 0 : customRefObject.removeButtonRef;
22
+ const removeButtonLabel = (removeButtonProps == null ? void 0 : removeButtonProps.tooltipText) ?? `Remove filter - ${triggerButtonProps == null ? void 0 : triggerButtonProps.label}`;
23
+ return /* @__PURE__ */ React.createElement(ButtonGroup, { ...restProps }, /* @__PURE__ */ React.createElement(FilterButton, { ref, ...triggerButtonProps }), /* @__PURE__ */ React.createElement(Tooltip, { text: removeButtonLabel, display: "inline-block", position: "below" }, /* @__PURE__ */ React.createElement(FilterButtonBase, { ref: removeButtonRef, ...removeButtonProps }, /* @__PURE__ */ React.createElement(Icon, { icon: iconClear, title: removeButtonLabel }))));
24
+ });
25
+ FilterButtonRemovable.displayName = "FilterButtonRemovable";
26
+
27
+ export {
28
+ FilterButtonRemovable
29
+ };
@@ -0,0 +1,6 @@
1
+ // src/utils/isRefObject.ts
2
+ var isRefObject = (ref) => ref !== null && "current" in ref;
3
+
4
+ export {
5
+ isRefObject
6
+ };
@@ -0,0 +1,38 @@
1
+ import {
2
+ isRefObject
3
+ } from "./chunk-3VEH3HNR.js";
4
+ import {
5
+ FilterButtonBase
6
+ } from "./chunk-SBUK4XZM.js";
7
+
8
+ // src/FilterButton/FilterButton/FilterButton.tsx
9
+ import React, { forwardRef } from "react";
10
+ import classnames from "classnames";
11
+ import { Icon } from "@kaizen/component-library";
12
+ import chevronDown from "@kaizen/component-library/icons/chevron-down.icon.svg";
13
+ import chevronUp from "@kaizen/component-library/icons/chevron-up.icon.svg";
14
+ import styles from "./FilterButton.module-HA7A5HIZ.scss";
15
+ var FilterButton = forwardRef(
16
+ ({ label, selectedValue, isOpen = false, classNameOverride, ...restProps }, ref) => {
17
+ const customRefObject = isRefObject(ref) ? ref.current : null;
18
+ const triggerRef = customRefObject == null ? void 0 : customRefObject.triggerRef;
19
+ const selectedValuesLabel = selectedValue;
20
+ return /* @__PURE__ */ React.createElement(
21
+ FilterButtonBase,
22
+ {
23
+ ref: triggerRef,
24
+ classNameOverride: classnames(styles.filterButton, classNameOverride),
25
+ "aria-haspopup": "true",
26
+ "aria-expanded": isOpen,
27
+ ...restProps
28
+ },
29
+ /* @__PURE__ */ React.createElement("span", { className: styles.labelContainer }, selectedValuesLabel ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", { className: styles.hasSelectedValues }, /* @__PURE__ */ React.createElement("span", null, label), /* @__PURE__ */ React.createElement("span", { className: styles.labelSeparator }, ":")), /* @__PURE__ */ React.createElement("span", null, selectedValuesLabel)) : label),
30
+ /* @__PURE__ */ React.createElement(Icon, { icon: isOpen ? chevronUp : chevronDown, role: "presentation" })
31
+ );
32
+ }
33
+ );
34
+ FilterButton.displayName = "FilterButton";
35
+
36
+ export {
37
+ FilterButton
38
+ };
File without changes
@@ -0,0 +1,51 @@
1
+ import {
2
+ FilterButtonBase
3
+ } from "./chunk-SBUK4XZM.js";
4
+
5
+ // src/ButtonGroup/ButtonGroup.tsx
6
+ import React from "react";
7
+ import classnames from "classnames";
8
+ import { Tooltip } from "@kaizen/draft-tooltip";
9
+ import styles from "./ButtonGroup.module-NQDV3763.scss";
10
+ var isFilterButton = (node) => React.isValidElement(node) && node.type === FilterButtonBase;
11
+ var ButtonGroup = ({
12
+ children,
13
+ classNameOverride,
14
+ ...restProps
15
+ }) => {
16
+ const childCount = React.Children.count(children);
17
+ const containerProps = {
18
+ role: "group",
19
+ className: classnames(styles.buttonGroup, classNameOverride),
20
+ ...restProps
21
+ };
22
+ if (childCount === 1)
23
+ return /* @__PURE__ */ React.createElement("div", { ...containerProps }, children);
24
+ return /* @__PURE__ */ React.createElement("div", { ...containerProps }, React.Children.map(children, (child, index) => {
25
+ const buttonClassNames = classnames(
26
+ styles.child,
27
+ index === 0 && styles.firstChild,
28
+ index === childCount - 1 && styles.lastChild,
29
+ child.props.classNameOverride
30
+ );
31
+ if (child.type === Tooltip) {
32
+ const button = child.props.children;
33
+ if (isFilterButton(button)) {
34
+ return React.cloneElement(child, {
35
+ children: React.cloneElement(button, {
36
+ classNameOverride: buttonClassNames
37
+ })
38
+ });
39
+ }
40
+ return child;
41
+ }
42
+ return React.cloneElement(child, {
43
+ classNameOverride: buttonClassNames
44
+ });
45
+ }));
46
+ };
47
+ ButtonGroup.displayName = "ButtonGroup";
48
+
49
+ export {
50
+ ButtonGroup
51
+ };