@kaizen/components 1.67.7 → 1.67.8

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 (59) hide show
  1. package/dist/cjs/ButtonGroup/ButtonGroup.cjs +1 -1
  2. package/dist/cjs/Filter/Filter/Filter.cjs +4 -1
  3. package/dist/cjs/Filter/Filter/Filter.module.css.cjs +6 -0
  4. package/dist/cjs/Filter/FilterBar/FilterBar.cjs +4 -2
  5. package/dist/cjs/Filter/FilterBar/FilterBar.module.css.cjs +8 -0
  6. package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.cjs +9 -3
  7. package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.module.css.cjs +6 -0
  8. package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.cjs +7 -2
  9. package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.module.css.cjs +6 -0
  10. package/dist/cjs/Filter/FilterButton/FilterButton/FilterButton.cjs +1 -1
  11. package/dist/cjs/Filter/FilterButton/FilterButton/FilterButton.module.css.cjs +9 -0
  12. package/dist/cjs/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.cjs +5 -1
  13. package/dist/cjs/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.module.css.cjs +6 -0
  14. package/dist/cjs/Filter/FilterMultiSelect/FilterMultiSelect.cjs +5 -2
  15. package/dist/cjs/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.cjs +4 -1
  16. package/dist/cjs/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.module.css.cjs +6 -0
  17. package/dist/esm/ButtonGroup/ButtonGroup.mjs +1 -1
  18. package/dist/esm/Filter/Filter/Filter.mjs +3 -1
  19. package/dist/esm/Filter/Filter/Filter.module.css.mjs +4 -0
  20. package/dist/esm/Filter/FilterBar/FilterBar.mjs +4 -2
  21. package/dist/esm/Filter/FilterBar/FilterBar.module.css.mjs +6 -0
  22. package/dist/esm/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.mjs +8 -3
  23. package/dist/esm/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.module.css.mjs +4 -0
  24. package/dist/esm/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.mjs +7 -2
  25. package/dist/esm/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.module.css.mjs +4 -0
  26. package/dist/esm/Filter/FilterButton/FilterButton/FilterButton.mjs +1 -1
  27. package/dist/esm/Filter/FilterButton/FilterButton/FilterButton.module.css.mjs +7 -0
  28. package/dist/esm/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.mjs +4 -1
  29. package/dist/esm/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.module.css.mjs +4 -0
  30. package/dist/esm/Filter/FilterMultiSelect/FilterMultiSelect.mjs +5 -2
  31. package/dist/esm/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.mjs +3 -1
  32. package/dist/esm/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.module.css.mjs +4 -0
  33. package/dist/styles.css +95 -57
  34. package/dist/types/Filter/FilterMultiSelect/FilterMultiSelect.d.ts +2 -1
  35. package/package.json +5 -4
  36. package/src/ButtonGroup/ButtonGroup.tsx +4 -1
  37. package/src/Filter/Filter/Filter.module.css +6 -0
  38. package/src/Filter/Filter/Filter.tsx +6 -1
  39. package/src/Filter/FilterBar/FilterBar.module.css +24 -0
  40. package/src/Filter/FilterBar/FilterBar.tsx +15 -13
  41. package/src/Filter/FilterBar/_docs/FilterBar.stories.tsx +5 -0
  42. package/src/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.module.css +3 -0
  43. package/src/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.tsx +36 -18
  44. package/src/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.module.css +6 -0
  45. package/src/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.tsx +7 -1
  46. package/src/Filter/FilterButton/FilterButton/FilterButton.module.css +24 -0
  47. package/src/Filter/FilterButton/FilterButton/FilterButton.tsx +1 -1
  48. package/src/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.module.css +3 -0
  49. package/src/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.tsx +10 -1
  50. package/src/Filter/FilterButton/subcomponents/FilterButtonBase/FilterButtonBase.module.scss +2 -2
  51. package/src/Filter/FilterMultiSelect/FilterMultiSelect.tsx +3 -1
  52. package/src/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.module.css +3 -0
  53. package/src/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.tsx +6 -1
  54. package/dist/cjs/Filter/FilterBar/FilterBar.module.scss.cjs +0 -7
  55. package/dist/cjs/Filter/FilterButton/FilterButton/FilterButton.module.scss.cjs +0 -9
  56. package/dist/esm/Filter/FilterBar/FilterBar.module.scss.mjs +0 -5
  57. package/dist/esm/Filter/FilterButton/FilterButton/FilterButton.module.scss.mjs +0 -7
  58. package/src/Filter/FilterBar/FilterBar.module.scss +0 -19
  59. package/src/Filter/FilterButton/FilterButton/FilterButton.module.scss +0 -22
package/dist/styles.css CHANGED
@@ -29,40 +29,6 @@
29
29
  display: block;
30
30
  margin-block: var(--spacing-6);
31
31
  }
32
- .MenuItem-module_item__DPerF {
33
- font-family: var(--typography-paragraph-body-font-family);
34
- font-size: var(--typography-paragraph-body-font-size);
35
- letter-spacing: var(--typography-paragraph-body-letter-spacing);
36
- font-weight: var(--typography-paragraph-body-font-weight);
37
- line-height: var(--typography-paragraph-body-line-height);
38
- color: rgba(var(--color-purple-800-rgb), 0.7);
39
- padding: var(--spacing-6) var(--spacing-8);
40
- border: var(--border-focus-ring-border-width) var(--border-focus-ring-border-style) transparent;
41
- border-radius: 4px;
42
- display: flex;
43
- gap: 0 var(--spacing-8);
44
- align-items: center;
45
- margin-inline: var(--spacing-6);
46
- text-decoration: none;
47
- cursor: pointer;
48
- }
49
-
50
- .MenuItem-module_iconWrapper__bRdQN {
51
- flex-shrink: 0;
52
- display: flex;
53
- align-items: center;
54
- }
55
-
56
- .MenuItem-module_item__DPerF[data-focused] {
57
- background-color: var(--color-blue-100);
58
- color: var(--color-blue-500);
59
- outline: none;
60
- border-color: var(--color-blue-500);
61
- }
62
-
63
- .MenuItem-module_item__DPerF[data-disabled] {
64
- opacity: 0.3;
65
- }
66
32
  .Button-module_button__QOSYH {
67
33
  --button-min-height-width: var(--spacing-48);
68
34
  --button-padding-x: calc(
@@ -151,6 +117,40 @@
151
117
  --button-icon-size: var(--spacing-16);
152
118
  gap: var(--spacing-8);
153
119
  }
120
+ .MenuItem-module_item__DPerF {
121
+ font-family: var(--typography-paragraph-body-font-family);
122
+ font-size: var(--typography-paragraph-body-font-size);
123
+ letter-spacing: var(--typography-paragraph-body-letter-spacing);
124
+ font-weight: var(--typography-paragraph-body-font-weight);
125
+ line-height: var(--typography-paragraph-body-line-height);
126
+ color: rgba(var(--color-purple-800-rgb), 0.7);
127
+ padding: var(--spacing-6) var(--spacing-8);
128
+ border: var(--border-focus-ring-border-width) var(--border-focus-ring-border-style) transparent;
129
+ border-radius: 4px;
130
+ display: flex;
131
+ gap: 0 var(--spacing-8);
132
+ align-items: center;
133
+ margin-inline: var(--spacing-6);
134
+ text-decoration: none;
135
+ cursor: pointer;
136
+ }
137
+
138
+ .MenuItem-module_iconWrapper__bRdQN {
139
+ flex-shrink: 0;
140
+ display: flex;
141
+ align-items: center;
142
+ }
143
+
144
+ .MenuItem-module_item__DPerF[data-focused] {
145
+ background-color: var(--color-blue-100);
146
+ color: var(--color-blue-500);
147
+ outline: none;
148
+ border-color: var(--color-blue-500);
149
+ }
150
+
151
+ .MenuItem-module_item__DPerF[data-disabled] {
152
+ opacity: 0.3;
153
+ }
154
154
  .Focusable-module_focusableWrapper__NfuIi {
155
155
  display: inline-flex;
156
156
  }
@@ -1765,7 +1765,7 @@
1765
1765
  position: relative;
1766
1766
  display: inline-flex;
1767
1767
  align-items: center;
1768
- height: 3rem;
1768
+ min-height: 3rem;
1769
1769
  padding: var(--spacing-sm, 0.75rem);
1770
1770
  border-width: 0;
1771
1771
  border-radius: var(--border-solid-border-radius, 7px);
@@ -1776,7 +1776,7 @@
1776
1776
  line-height: var(--typography-button-secondary-line-height, 1.5rem);
1777
1777
  letter-spacing: var(--typography-button-secondary-letter-spacing, normal);
1778
1778
  color: var(--color-blue-500, #0168b3);
1779
- white-space: nowrap;
1779
+ text-align: start;
1780
1780
  }
1781
1781
  .FilterButtonBase-module_filterButtonBase__ImByM:hover, .FilterButtonBase-module_filterButtonBase__ImByM:active {
1782
1782
  z-index: 2;
@@ -4052,6 +4052,13 @@ input[type=range].InputRange-module_ratingScaleRange__gI-rs::-ms-thumb:not(:disa
4052
4052
  border-radius: var(--border-borderless-border-radius, 7px);
4053
4053
  display: inline-flex;
4054
4054
  }
4055
+ /* keep max-width value in sync with other places using this container */
4056
+ @container filter-bar-wrapper (max-width: 767px) {
4057
+ .Filter-module_filter__u3IkC {
4058
+ flex-basis: 100%;
4059
+ }
4060
+ }
4061
+
4055
4062
  /** THIS IS AN AUTOGENERATED FILE **/
4056
4063
  .FilterContents-module_filterContents__tQWu8 {
4057
4064
  padding: var(--spacing-md, 1.5rem);
@@ -4065,26 +4072,39 @@ input[type=range].InputRange-module_ratingScaleRange__gI-rs::-ms-thumb:not(:disa
4065
4072
  display: grid;
4066
4073
  gap: var(--spacing-16, 1rem);
4067
4074
  }
4068
- /** THIS IS AN AUTOGENERATED FILE **/
4069
- /** THIS IS AN AUTOGENERATED FILE **/
4070
- .FilterButton-module_filterButton__PEcAs {
4071
- gap: var(--spacing-xs, 0.375rem);
4075
+ .FilterButton-module_filterButton__Fn1OD {
4076
+ gap: var(--spacing-6);
4077
+ justify-content: space-between;
4078
+ }
4079
+
4080
+ /* keep max-width value in sync with other places using this container */
4081
+ @container filter-bar-wrapper (max-width: 767px) {
4082
+ .FilterButton-module_filterButton__Fn1OD {
4083
+ flex-grow: 1;
4084
+ }
4072
4085
  }
4073
4086
 
4074
- .FilterButton-module_labelContainer__kJlE8 {
4087
+ .FilterButton-module_labelContainer__sPAcx {
4075
4088
  display: inline-flex;
4089
+ flex-wrap: wrap;
4076
4090
  }
4077
4091
 
4078
- .FilterButton-module_hasSelectedValues__tc-XE {
4092
+ .FilterButton-module_hasSelectedValues__bHR5g {
4079
4093
  font-weight: bold;
4080
4094
  }
4081
4095
 
4082
- .FilterButton-module_labelSeparator__CmSqS {
4083
- margin-inline-end: var(--spacing-xs, 0.375rem);
4096
+ .FilterButton-module_labelSeparator__KimZO {
4097
+ margin-inline-end: var(--spacing-6);
4084
4098
  }
4085
- [dir=ltr] [dir=rtl] .FilterButton-module_labelSeparator__CmSqS {
4086
- margin-right: 0;
4099
+
4100
+ .FilterButtonRemovable-module_filterButtonBase__V4xk8 {
4101
+ height: 100%;
4102
+ }
4103
+
4104
+ .FilterBarButton-module_filterBarButton__3IF-- {
4105
+ width: 100%;
4087
4106
  }
4107
+
4088
4108
  /** THIS IS AN AUTOGENERATED FILE **/
4089
4109
  .DateRangeDisplayLabel-module_dateRangeDisplayLabel__g7nVd {
4090
4110
  display: inline-flex;
@@ -4374,6 +4394,17 @@ input[type=range].InputRange-module_ratingScaleRange__gI-rs::-ms-thumb:not(:disa
4374
4394
  .SelectionControlButton-module_button__u-ysH.SelectionControlButton-module_isDisabled__0axMR:focus-visible::after {
4375
4395
  border-color: var(--color-gray-400, #cdcdd0);
4376
4396
  }
4397
+ .RemovableFilterTrigger-module_filterButtonRemovable__-M4wV {
4398
+ width: 100%;
4399
+ }
4400
+
4401
+ /* keep max-width value in sync with other places using this container */
4402
+ @container filter-bar-wrapper (max-width: 767px) {
4403
+ .FilterBarMultiSelect-module_filterMultiSelect__a4enz {
4404
+ flex-basis: 100%;
4405
+ }
4406
+ }
4407
+
4377
4408
  .ListBox-module_listBox__Uf6Mc {
4378
4409
  list-style: none;
4379
4410
  margin-top: 0;
@@ -4623,24 +4654,31 @@ input[type=range].InputRange-module_ratingScaleRange__gI-rs::-ms-thumb:not(:disa
4623
4654
  .ClearAllButton-module_clearAllButton__XNkm2 {
4624
4655
  white-space: nowrap;
4625
4656
  }
4626
- /** THIS IS AN AUTOGENERATED FILE **/
4627
- /** THIS IS AN AUTOGENERATED FILE **/
4628
- /** THIS IS AN AUTOGENERATED FILE **/
4629
- /** THIS IS AN AUTOGENERATED FILE **/
4630
- .FilterBar-module_filterBar__ZhQLn {
4657
+ .FilterBar-module_wrapper__D8GXq {
4658
+ container: filter-bar-wrapper / inline-size;
4659
+ }
4660
+
4661
+ .FilterBar-module_filterBar__JEVKL {
4631
4662
  display: flex;
4632
- padding: var(--spacing-8, 0.5rem);
4633
- box-shadow: var(--shadow-small-box-shadow, 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 3px 16px 0 rgba(0, 0, 0, 0.06));
4634
- border-radius: var(--border-solid-border-radius, 7px);
4635
- background-color: var(--color-white, #ffffff);
4663
+ padding: var(--spacing-8);
4664
+ border-radius: var(--border-solid-border-radius);
4665
+ background-color: var(--color-white);
4636
4666
  }
4637
4667
 
4638
- .FilterBar-module_filtersContainer__v6OJn {
4668
+ /* keep max-width value in sync with other places using this container */
4669
+ @container filter-bar-wrapper (max-width: 767px) {
4670
+ .FilterBar-module_filterBar__JEVKL {
4671
+ flex-direction: column;
4672
+ }
4673
+ }
4674
+
4675
+ .FilterBar-module_filtersContainer__Xl-DO {
4639
4676
  display: flex;
4640
4677
  flex-grow: 1;
4641
4678
  flex-wrap: wrap;
4642
- gap: var(--spacing-8, 0.5rem);
4679
+ gap: var(--spacing-8);
4643
4680
  }
4681
+
4644
4682
  /** THIS IS AN AUTOGENERATED FILE **/
4645
4683
  /** THIS IS AN AUTOGENERATED FILE **/
4646
4684
  /** THIS IS AN AUTOGENERATED FILE **/
@@ -16,9 +16,10 @@ export type FilterMultiSelectProps = {
16
16
  trigger: (value?: MenuTriggerProviderContextType) => React.ReactNode;
17
17
  children: (value?: SelectionProviderContextType) => React.ReactNode;
18
18
  triggerRef?: React.RefObject<HTMLButtonElement>;
19
+ className?: string;
19
20
  } & Omit<MenuPopupProps, "children"> & Omit<MenuTriggerProviderProps, "children"> & SelectionProps;
20
21
  export declare const FilterMultiSelect: {
21
- ({ trigger, children, isOpen, defaultOpen, onOpenChange, isLoading, loadingSkeleton, label, items, selectedKeys, defaultSelectedKeys, onSelectionChange, selectionMode, onSearchInputChange, triggerRef, }: FilterMultiSelectProps): JSX.Element;
22
+ ({ trigger, children, isOpen, defaultOpen, onOpenChange, isLoading, loadingSkeleton, label, items, selectedKeys, defaultSelectedKeys, onSelectionChange, selectionMode, onSearchInputChange, triggerRef, className, }: FilterMultiSelectProps): JSX.Element;
22
23
  displayName: string;
23
24
  TriggerButton: {
24
25
  ({ selectedOptionLabels, label, classNameOverride, labelCharacterLimitBeforeTruncate, }: import("./subcomponents/Trigger").FilterTriggerButtonProps): JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaizen/components",
3
- "version": "1.67.7",
3
+ "version": "1.67.8",
4
4
  "description": "Kaizen component library",
5
5
  "author": "Geoffrey Chong <geoff.chong@cultureamp.com>",
6
6
  "homepage": "https://cultureamp.design",
@@ -113,15 +113,16 @@
113
113
  "react-highlight": "^0.15.0",
114
114
  "react-intl": "^6.8.4",
115
115
  "rollup": "^4.24.2",
116
- "sass": "^1.77.8",
116
+ "sass": "1.79.6",
117
117
  "serialize-query-params": "^2.0.2",
118
118
  "svgo": "^3.3.2",
119
119
  "tslib": "^2.8.0",
120
120
  "tsx": "^4.19.2",
121
- "@kaizen/package-bundler": "1.1.9",
122
- "@kaizen/design-tokens": "10.8.1"
121
+ "@kaizen/design-tokens": "10.8.1",
122
+ "@kaizen/package-bundler": "1.1.9"
123
123
  },
124
124
  "devDependenciesComments": {
125
+ "sass": "Prevent deprecation warnings introduced in 1.80 as we plan to move away from sass",
125
126
  "typescript": "Installed in root"
126
127
  },
127
128
  "peerDependencies": {
@@ -50,7 +50,10 @@ export const ButtonGroup = ({
50
50
  if (isFilterButton(button)) {
51
51
  return React.cloneElement(child, {
52
52
  children: React.cloneElement(button, {
53
- classNameOverride: buttonClassNames,
53
+ classNameOverride: classnames(
54
+ button.props.classNameOverride,
55
+ buttonClassNames
56
+ ),
54
57
  }),
55
58
  })
56
59
  }
@@ -0,0 +1,6 @@
1
+ /* keep max-width value in sync with other places using this container */
2
+ @container filter-bar-wrapper (max-width: 767px) {
3
+ .filter {
4
+ flex-basis: 100%;
5
+ }
6
+ }
@@ -5,10 +5,12 @@ import React, {
5
5
  useRef,
6
6
  useState,
7
7
  } from "react"
8
+ import classnames from "classnames"
8
9
  import { FocusOn } from "react-focus-on"
9
10
  import { OverrideClassName } from "~components/types/OverrideClassName"
10
11
  import { FilterPopover } from "./subcomponents/FilterPopover"
11
12
  import { FilterTriggerRef } from "./types"
13
+ import styles from "./Filter.module.css"
12
14
 
13
15
  export type FilterProps = {
14
16
  children: React.ReactNode
@@ -54,7 +56,10 @@ export const Filter = ({
54
56
  }, [filterButtonRef.current?.triggerRef?.current, onMount])
55
57
 
56
58
  return (
57
- <div className={classNameOverride} {...restProps}>
59
+ <div
60
+ className={classnames(styles.filter, classNameOverride)}
61
+ {...restProps}
62
+ >
58
63
  {React.cloneElement(trigger, {
59
64
  ref: filterButtonRef,
60
65
  })}
@@ -0,0 +1,24 @@
1
+ .wrapper {
2
+ container: filter-bar-wrapper / inline-size;
3
+ }
4
+
5
+ .filterBar {
6
+ display: flex;
7
+ padding: var(--spacing-8);
8
+ border-radius: var(--border-solid-border-radius);
9
+ background-color: var(--color-white);
10
+ }
11
+
12
+ /* keep max-width value in sync with other places using this container */
13
+ @container filter-bar-wrapper (max-width: 767px) {
14
+ .filterBar {
15
+ flex-direction: column;
16
+ }
17
+ }
18
+
19
+ .filtersContainer {
20
+ display: flex;
21
+ flex-grow: 1;
22
+ flex-wrap: wrap;
23
+ gap: var(--spacing-8);
24
+ }
@@ -14,7 +14,7 @@ import {
14
14
  import { AddFiltersMenu } from "./subcomponents/AddFiltersMenu"
15
15
  import { ClearAllButton } from "./subcomponents/ClearAllButton"
16
16
  import { FiltersValues } from "./types"
17
- import styles from "./FilterBar.module.scss"
17
+ import styles from "./FilterBar.module.css"
18
18
 
19
19
  export type FilterBarProps<ValuesMap extends FiltersValues> = OverrideClassName<
20
20
  Omit<FilterBarProviderProps<ValuesMap>, "children">
@@ -27,19 +27,21 @@ export const FilterBar = <ValuesMap extends FiltersValues>({
27
27
  }: FilterBarProps<ValuesMap>): JSX.Element => (
28
28
  <FilterBarProvider<ValuesMap> filters={filters} {...providerProps}>
29
29
  {(activeFilters): JSX.Element => (
30
- <div className={classnames(styles.filterBar, classNameOverride)}>
31
- <div className={styles.filtersContainer}>
32
- {Object.values(activeFilters).map(({ id, Component }) => (
33
- // `id` will always be `string`, but keyof ValuesMap transformed it
34
- <React.Fragment key={id as string}>
35
- {React.cloneElement(Component, { id })}
36
- </React.Fragment>
37
- ))}
38
- <AddFiltersMenu />
39
- </div>
30
+ <div className={styles.wrapper}>
31
+ <div className={classnames(styles.filterBar, classNameOverride)}>
32
+ <div className={styles.filtersContainer}>
33
+ {Object.values(activeFilters).map(({ id, Component }) => (
34
+ // `id` will always be `string`, but keyof ValuesMap transformed it
35
+ <React.Fragment key={id as string}>
36
+ {React.cloneElement(Component, { id })}
37
+ </React.Fragment>
38
+ ))}
39
+ <AddFiltersMenu />
40
+ </div>
40
41
 
41
- <div>
42
- <ClearAllButton />
42
+ <div>
43
+ <ClearAllButton />
44
+ </div>
43
45
  </div>
44
46
  </div>
45
47
  )}
@@ -152,6 +152,11 @@ const filters = [
152
152
  { value: "none", label: "None" },
153
153
  { value: "pearls", label: "Pearls" },
154
154
  { value: "fruit-jelly", label: "Fruit Jelly" },
155
+ { value: "peanuts", label: "Peanuts" },
156
+ { value: "coconut", label: "Coconut" },
157
+ { value: "aloe", label: "Aloe Vera" },
158
+ { value: "mochi", label: "Mini Mochi" },
159
+ { value: "popping-pearls", label: "Popping Pearls" },
155
160
  ]}
156
161
  >
157
162
  {(): JSX.Element => (
@@ -0,0 +1,3 @@
1
+ .filterBarButton {
2
+ width: 100%;
3
+ }
@@ -1,4 +1,5 @@
1
1
  import React, { forwardRef, useEffect } from "react"
2
+ import classnames from "classnames"
2
3
  import { FilterTriggerRef } from "~components/Filter/Filter"
3
4
  import { useFilterBarContext } from "~components/Filter/FilterBar/context/FilterBarContext"
4
5
  import {
@@ -7,6 +8,7 @@ import {
7
8
  FilterButtonRemovable,
8
9
  } from "~components/Filter/FilterButton"
9
10
  import { isRefObject } from "~components/utils/isRefObject"
11
+ import styles from "./FilterBarButton.module.css"
10
12
 
11
13
  export type FilterBarButtonProps = FilterButtonProps & {
12
14
  filterId: string
@@ -16,25 +18,41 @@ export type FilterBarButtonProps = FilterButtonProps & {
16
18
  export const FilterBarButton = forwardRef<
17
19
  FilterTriggerRef,
18
20
  FilterBarButtonProps
19
- >(({ filterId, isRemovable = false, ...props }, ref): JSX.Element => {
20
- const { hideFilter, focusId, setFocus } = useFilterBarContext()
21
+ >(
22
+ (
23
+ { filterId, isRemovable = false, classNameOverride, ...props },
24
+ ref
25
+ ): JSX.Element => {
26
+ const { hideFilter, focusId, setFocus } = useFilterBarContext()
21
27
 
22
- useEffect(() => {
23
- if (focusId === filterId && isRefObject(ref)) {
24
- ref?.current?.triggerRef?.current?.focus()
25
- setFocus(undefined)
26
- }
27
- }, [focusId])
28
+ useEffect(() => {
29
+ if (focusId === filterId && isRefObject(ref)) {
30
+ ref?.current?.triggerRef?.current?.focus()
31
+ setFocus(undefined)
32
+ }
33
+ }, [focusId])
28
34
 
29
- return isRemovable ? (
30
- <FilterButtonRemovable
31
- ref={ref}
32
- triggerButtonProps={props}
33
- removeButtonProps={{ onClick: () => hideFilter(filterId) }}
34
- />
35
- ) : (
36
- <FilterButton ref={ref} {...props} />
37
- )
38
- })
35
+ return isRemovable ? (
36
+ <FilterButtonRemovable
37
+ ref={ref}
38
+ triggerButtonProps={props}
39
+ removeButtonProps={{ onClick: () => hideFilter(filterId) }}
40
+ classNameOverride={classnames(
41
+ classNameOverride,
42
+ styles.filterBarButton
43
+ )}
44
+ />
45
+ ) : (
46
+ <FilterButton
47
+ ref={ref}
48
+ classNameOverride={classnames(
49
+ classNameOverride,
50
+ styles.filterBarButton
51
+ )}
52
+ {...props}
53
+ />
54
+ )
55
+ }
56
+ )
39
57
 
40
58
  FilterBarButton.displayName = "FilterBar.Button"
@@ -0,0 +1,6 @@
1
+ /* keep max-width value in sync with other places using this container */
2
+ @container filter-bar-wrapper (max-width: 767px) {
3
+ .filterMultiSelect {
4
+ flex-basis: 100%;
5
+ }
6
+ }
@@ -8,6 +8,7 @@ import {
8
8
  } from "~components/Filter/FilterMultiSelect"
9
9
  import { useFilterBarContext } from "../../context/FilterBarContext"
10
10
  import { checkArraysMatch } from "../../utils/checkArraysMatch"
11
+ import styles from "./FilterBarMultiSelect.module.css"
11
12
 
12
13
  export type FilterBarMultiSelectProps = Omit<
13
14
  FilterMultiSelectProps,
@@ -97,6 +98,7 @@ export const FilterBarMultiSelect = ({
97
98
  items={items}
98
99
  isOpen={filterState.isOpen}
99
100
  onOpenChange={(open): void => setFilterOpenState(id, open)}
101
+ className={styles.filterMultiSelect}
100
102
  trigger={(): JSX.Element => {
101
103
  const triggerProps = {
102
104
  selectedOptionLabels: filterState.value
@@ -112,9 +114,13 @@ export const FilterBarMultiSelect = ({
112
114
  <FilterMultiSelect.RemovableTrigger
113
115
  {...triggerProps}
114
116
  onRemove={() => hideFilter(id)}
117
+ classNameOverride={styles.triggerButton}
115
118
  />
116
119
  ) : (
117
- <FilterMultiSelect.TriggerButton {...triggerProps} />
120
+ <FilterMultiSelect.TriggerButton
121
+ classNameOverride={styles.triggerButton}
122
+ {...triggerProps}
123
+ />
118
124
  )
119
125
  }}
120
126
  triggerRef={buttonRef}
@@ -0,0 +1,24 @@
1
+ .filterButton {
2
+ gap: var(--spacing-6);
3
+ justify-content: space-between;
4
+ }
5
+
6
+ /* keep max-width value in sync with other places using this container */
7
+ @container filter-bar-wrapper (max-width: 767px) {
8
+ .filterButton {
9
+ flex-grow: 1;
10
+ }
11
+ }
12
+
13
+ .labelContainer {
14
+ display: inline-flex;
15
+ flex-wrap: wrap;
16
+ }
17
+
18
+ .hasSelectedValues {
19
+ font-weight: bold;
20
+ }
21
+
22
+ .labelSeparator {
23
+ margin-inline-end: var(--spacing-6);
24
+ }
@@ -7,7 +7,7 @@ import {
7
7
  FilterButtonBase,
8
8
  FilterButtonBaseProps,
9
9
  } from "../subcomponents/FilterButtonBase"
10
- import styles from "./FilterButton.module.scss"
10
+ import styles from "./FilterButton.module.css"
11
11
 
12
12
  export type FilterButtonProps = {
13
13
  label: string
@@ -0,0 +1,3 @@
1
+ .filterButtonBase {
2
+ height: 100%;
3
+ }
@@ -1,5 +1,6 @@
1
1
  import React, { forwardRef } from "react"
2
2
  import { useIntl } from "@cultureamp/i18n-react-intl"
3
+ import classnames from "classnames"
3
4
  import { ButtonGroup, ButtonGroupProps } from "~components/ButtonGroup"
4
5
  import { FilterTriggerRef } from "~components/Filter/Filter"
5
6
  import { Icon } from "~components/__future__/Icon"
@@ -11,6 +12,7 @@ import {
11
12
  FilterButtonBase,
12
13
  FilterButtonBaseProps,
13
14
  } from "../subcomponents/FilterButtonBase"
15
+ import styles from "./FilterButtonRemovable.module.css"
14
16
 
15
17
  export type FilterButtonRemovableProps = {
16
18
  triggerButtonProps: FilterButtonProps & DataAttributes
@@ -49,7 +51,14 @@ export const FilterButtonRemovable = forwardRef<
49
51
  <ButtonGroup {...restProps}>
50
52
  <FilterButton ref={ref} {...triggerButtonProps} />
51
53
  <Tooltip text={removeButtonLabel} display="inline-block" position="below">
52
- <FilterButtonBase ref={removeButtonRef} {...removeButtonProps}>
54
+ <FilterButtonBase
55
+ ref={removeButtonRef}
56
+ classNameOverride={classnames(
57
+ styles.filterButtonBase,
58
+ restProps.classNameOverride
59
+ )}
60
+ {...removeButtonProps}
61
+ >
53
62
  <Icon name="cancel" alt={removeButtonLabel} isFilled />
54
63
  </FilterButtonBase>
55
64
  </Tooltip>
@@ -13,7 +13,7 @@
13
13
  position: relative;
14
14
  display: inline-flex;
15
15
  align-items: center;
16
- height: 3rem; // 48px
16
+ min-height: 3rem; // 48px
17
17
  padding: $spacing-sm;
18
18
  border-width: 0;
19
19
  border-radius: $border-solid-border-radius;
@@ -24,7 +24,7 @@
24
24
  line-height: $typography-button-secondary-line-height;
25
25
  letter-spacing: $typography-button-secondary-letter-spacing;
26
26
  color: $color-blue-500;
27
- white-space: nowrap;
27
+ text-align: start;
28
28
 
29
29
  &:hover,
30
30
  &:active {
@@ -42,6 +42,7 @@ export type FilterMultiSelectProps = {
42
42
  trigger: (value?: MenuTriggerProviderContextType) => React.ReactNode
43
43
  children: (value?: SelectionProviderContextType) => React.ReactNode // the content of the menu
44
44
  triggerRef?: React.RefObject<HTMLButtonElement>
45
+ className?: string
45
46
  } & Omit<MenuPopupProps, "children"> &
46
47
  Omit<MenuTriggerProviderProps, "children"> &
47
48
  SelectionProps
@@ -62,6 +63,7 @@ export const FilterMultiSelect = ({
62
63
  selectionMode = "multiple",
63
64
  onSearchInputChange,
64
65
  triggerRef,
66
+ className,
65
67
  }: FilterMultiSelectProps): JSX.Element => {
66
68
  const menuTriggerProps = { isOpen, defaultOpen, onOpenChange, triggerRef }
67
69
  const menuPopupProps = { isLoading, loadingSkeleton }
@@ -83,7 +85,7 @@ export const FilterMultiSelect = ({
83
85
 
84
86
  return (
85
87
  <MenuTriggerProvider {...menuTriggerProps}>
86
- <div>
88
+ <div className={className}>
87
89
  <MenuTriggerConsumer>{trigger}</MenuTriggerConsumer>
88
90
  <MenuPopup {...menuPopupProps}>
89
91
  <SelectionProvider {...selectionProps}>
@@ -1,9 +1,11 @@
1
1
  import React, { useRef } from "react"
2
+ import classnames from "classnames"
2
3
  import { FilterTriggerRef } from "~components/Filter/Filter"
3
4
  import { FilterButtonRemovable } from "~components/Filter/FilterButton"
4
5
  import { useMenuTriggerContext } from "../../../context"
5
6
  import { getTruncatedLabels } from "../../../utils"
6
7
  import { FilterTriggerButtonProps } from "../FilterTriggerButton"
8
+ import styles from "./RemovableFilterTrigger.module.css"
7
9
 
8
10
  export type RemovableFilterTriggerProps = FilterTriggerButtonProps & {
9
11
  onRemove: () => void
@@ -22,7 +24,10 @@ export const RemovableFilterTrigger = ({
22
24
  return (
23
25
  <FilterButtonRemovable
24
26
  ref={ref}
25
- classNameOverride={classNameOverride}
27
+ classNameOverride={classnames(
28
+ styles.filterButtonRemovable,
29
+ classNameOverride
30
+ )}
26
31
  triggerButtonProps={{
27
32
  ...buttonProps,
28
33
  label,
@@ -1,7 +0,0 @@
1
- 'use strict';
2
-
3
- var styles = {
4
- "filterBar": "FilterBar-module_filterBar__ZhQLn",
5
- "filtersContainer": "FilterBar-module_filtersContainer__v6OJn"
6
- };
7
- module.exports = styles;