@kaizen/components 0.0.0-canary-tsx-codemod-20241029235345 → 0.0.0-canary-fix-icon-size-20241107223933

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 (67) hide show
  1. package/bin/codemod.sh +1 -1
  2. package/codemods/README.md +1 -1
  3. package/dist/cjs/ButtonGroup/ButtonGroup.cjs +1 -1
  4. package/dist/cjs/Filter/Filter/Filter.cjs +4 -1
  5. package/dist/cjs/Filter/Filter/Filter.module.css.cjs +6 -0
  6. package/dist/cjs/Filter/FilterBar/FilterBar.cjs +4 -2
  7. package/dist/cjs/Filter/FilterBar/FilterBar.module.css.cjs +8 -0
  8. package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.cjs +9 -3
  9. package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.module.css.cjs +6 -0
  10. package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.cjs +7 -2
  11. package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.module.css.cjs +6 -0
  12. package/dist/cjs/Filter/FilterButton/FilterButton/FilterButton.cjs +1 -1
  13. package/dist/cjs/Filter/FilterButton/FilterButton/FilterButton.module.css.cjs +9 -0
  14. package/dist/cjs/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.cjs +5 -1
  15. package/dist/cjs/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.module.css.cjs +6 -0
  16. package/dist/cjs/Filter/FilterMultiSelect/FilterMultiSelect.cjs +5 -2
  17. package/dist/cjs/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.cjs +4 -1
  18. package/dist/cjs/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.module.css.cjs +6 -0
  19. package/dist/cjs/__future__/Icon/Icon.cjs +1 -1
  20. package/dist/cjs/__future__/Icon/Icon.module.css.cjs +1 -0
  21. package/dist/esm/ButtonGroup/ButtonGroup.mjs +1 -1
  22. package/dist/esm/Filter/Filter/Filter.mjs +3 -1
  23. package/dist/esm/Filter/Filter/Filter.module.css.mjs +4 -0
  24. package/dist/esm/Filter/FilterBar/FilterBar.mjs +4 -2
  25. package/dist/esm/Filter/FilterBar/FilterBar.module.css.mjs +6 -0
  26. package/dist/esm/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.mjs +8 -3
  27. package/dist/esm/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.module.css.mjs +4 -0
  28. package/dist/esm/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.mjs +7 -2
  29. package/dist/esm/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.module.css.mjs +4 -0
  30. package/dist/esm/Filter/FilterButton/FilterButton/FilterButton.mjs +1 -1
  31. package/dist/esm/Filter/FilterButton/FilterButton/FilterButton.module.css.mjs +7 -0
  32. package/dist/esm/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.mjs +4 -1
  33. package/dist/esm/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.module.css.mjs +4 -0
  34. package/dist/esm/Filter/FilterMultiSelect/FilterMultiSelect.mjs +5 -2
  35. package/dist/esm/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.mjs +3 -1
  36. package/dist/esm/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.module.css.mjs +4 -0
  37. package/dist/esm/__future__/Icon/Icon.mjs +1 -1
  38. package/dist/esm/__future__/Icon/Icon.module.css.mjs +1 -0
  39. package/dist/styles.css +72 -26
  40. package/dist/types/Filter/FilterMultiSelect/FilterMultiSelect.d.ts +2 -1
  41. package/package.json +11 -9
  42. package/src/ButtonGroup/ButtonGroup.tsx +4 -1
  43. package/src/Filter/Filter/Filter.module.css +5 -0
  44. package/src/Filter/Filter/Filter.tsx +6 -1
  45. package/src/Filter/FilterBar/FilterBar.module.css +23 -0
  46. package/src/Filter/FilterBar/FilterBar.tsx +15 -13
  47. package/src/Filter/FilterBar/_docs/FilterBar.stories.tsx +5 -0
  48. package/src/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.module.css +3 -0
  49. package/src/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.tsx +36 -18
  50. package/src/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.module.css +5 -0
  51. package/src/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.tsx +7 -1
  52. package/src/Filter/FilterButton/FilterButton/FilterButton.module.css +23 -0
  53. package/src/Filter/FilterButton/FilterButton/FilterButton.tsx +1 -1
  54. package/src/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.module.css +3 -0
  55. package/src/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.tsx +10 -1
  56. package/src/Filter/FilterButton/subcomponents/FilterButtonBase/FilterButtonBase.module.scss +2 -2
  57. package/src/Filter/FilterMultiSelect/FilterMultiSelect.tsx +3 -1
  58. package/src/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.module.css +3 -0
  59. package/src/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.tsx +6 -1
  60. package/src/__future__/Icon/Icon.module.css +12 -0
  61. package/src/__future__/Icon/Icon.tsx +1 -0
  62. package/dist/cjs/Filter/FilterBar/FilterBar.module.scss.cjs +0 -7
  63. package/dist/cjs/Filter/FilterButton/FilterButton/FilterButton.module.scss.cjs +0 -9
  64. package/dist/esm/Filter/FilterBar/FilterBar.module.scss.mjs +0 -5
  65. package/dist/esm/Filter/FilterButton/FilterButton/FilterButton.module.scss.mjs +0 -7
  66. package/src/Filter/FilterBar/FilterBar.module.scss +0 -19
  67. package/src/Filter/FilterButton/FilterButton/FilterButton.module.scss +0 -22
package/dist/styles.css CHANGED
@@ -173,9 +173,6 @@
173
173
  --button-icon-size: var(--spacing-16);
174
174
  gap: var(--spacing-8);
175
175
  }
176
- .Focusable-module_focusableWrapper__NfuIi {
177
- display: inline-flex;
178
- }
179
176
  .MenuItem-module_item__DPerF {
180
177
  font-family: var(--typography-paragraph-body-font-family);
181
178
  font-size: var(--typography-paragraph-body-font-size);
@@ -210,6 +207,9 @@
210
207
  .MenuItem-module_item__DPerF[data-disabled] {
211
208
  opacity: 0.3;
212
209
  }
210
+ .Focusable-module_focusableWrapper__NfuIi {
211
+ display: inline-flex;
212
+ }
213
213
  /** THIS IS AN AUTOGENERATED FILE **/
214
214
  /** THIS IS AN AUTOGENERATED FILE **/
215
215
  .OverlayArrow-module_overlayArrow__hoDyK {
@@ -250,6 +250,18 @@
250
250
  "opsz" var(--icon-optical-size, var(--icon-size, 20));
251
251
  }
252
252
 
253
+ .Icon-module_icon__CkmHY.Icon-module_IconOverride__5s4BE {
254
+ font-size: calc(1px * var(--icon-size, 20));
255
+ font-weight: var(--icon-font-weight, 400);
256
+ vertical-align: var(--icon-vertical-align);
257
+
258
+ /* Must use vars otherwise whole attribute must be set again */
259
+ font-variation-settings:
260
+ "FILL" var(--icon-fill, 0),
261
+ "GRAD" var(--icon-grade, 0),
262
+ "opsz" var(--icon-optical-size, var(--icon-size, 20));
263
+ }
264
+
253
265
  .Icon-module_filled__-VArQ {
254
266
  --icon-fill: 1;
255
267
  }
@@ -1765,7 +1777,7 @@
1765
1777
  position: relative;
1766
1778
  display: inline-flex;
1767
1779
  align-items: center;
1768
- height: 3rem;
1780
+ min-height: 3rem;
1769
1781
  padding: var(--spacing-sm, 0.75rem);
1770
1782
  border-width: 0;
1771
1783
  border-radius: var(--border-solid-border-radius, 7px);
@@ -1776,7 +1788,7 @@
1776
1788
  line-height: var(--typography-button-secondary-line-height, 1.5rem);
1777
1789
  letter-spacing: var(--typography-button-secondary-letter-spacing, normal);
1778
1790
  color: var(--color-blue-500, #0168b3);
1779
- white-space: nowrap;
1791
+ text-align: start;
1780
1792
  }
1781
1793
  .FilterButtonBase-module_filterButtonBase__ImByM:hover, .FilterButtonBase-module_filterButtonBase__ImByM:active {
1782
1794
  z-index: 2;
@@ -4052,6 +4064,12 @@ input[type=range].InputRange-module_ratingScaleRange__gI-rs::-ms-thumb:not(:disa
4052
4064
  border-radius: var(--border-borderless-border-radius, 7px);
4053
4065
  display: inline-flex;
4054
4066
  }
4067
+ @media (width < 768px) {
4068
+ .Filter-module_filter__u3IkC {
4069
+ flex-basis: 100%;
4070
+ }
4071
+ }
4072
+
4055
4073
  /** THIS IS AN AUTOGENERATED FILE **/
4056
4074
  .FilterContents-module_filterContents__tQWu8 {
4057
4075
  padding: var(--spacing-md, 1.5rem);
@@ -4065,26 +4083,38 @@ input[type=range].InputRange-module_ratingScaleRange__gI-rs::-ms-thumb:not(:disa
4065
4083
  display: grid;
4066
4084
  gap: var(--spacing-16, 1rem);
4067
4085
  }
4068
- /** THIS IS AN AUTOGENERATED FILE **/
4069
- /** THIS IS AN AUTOGENERATED FILE **/
4070
- .FilterButton-module_filterButton__PEcAs {
4071
- gap: var(--spacing-xs, 0.375rem);
4086
+ .FilterButton-module_filterButton__Fn1OD {
4087
+ gap: var(--spacing-6);
4088
+ justify-content: space-between;
4089
+ }
4090
+
4091
+ @media (width < 768px) {
4092
+ .FilterButton-module_filterButton__Fn1OD {
4093
+ flex-grow: 1;
4094
+ }
4072
4095
  }
4073
4096
 
4074
- .FilterButton-module_labelContainer__kJlE8 {
4097
+ .FilterButton-module_labelContainer__sPAcx {
4075
4098
  display: inline-flex;
4099
+ flex-wrap: wrap;
4076
4100
  }
4077
4101
 
4078
- .FilterButton-module_hasSelectedValues__tc-XE {
4102
+ .FilterButton-module_hasSelectedValues__bHR5g {
4079
4103
  font-weight: bold;
4080
4104
  }
4081
4105
 
4082
- .FilterButton-module_labelSeparator__CmSqS {
4083
- margin-inline-end: var(--spacing-xs, 0.375rem);
4106
+ .FilterButton-module_labelSeparator__KimZO {
4107
+ margin-inline-end: var(--spacing-6);
4084
4108
  }
4085
- [dir=ltr] [dir=rtl] .FilterButton-module_labelSeparator__CmSqS {
4086
- margin-right: 0;
4109
+
4110
+ .FilterButtonRemovable-module_filterButtonBase__V4xk8 {
4111
+ height: 100%;
4112
+ }
4113
+
4114
+ .FilterBarButton-module_filterBarButton__3IF-- {
4115
+ width: 100%;
4087
4116
  }
4117
+
4088
4118
  /** THIS IS AN AUTOGENERATED FILE **/
4089
4119
  .DateRangeDisplayLabel-module_dateRangeDisplayLabel__g7nVd {
4090
4120
  display: inline-flex;
@@ -4374,6 +4404,16 @@ input[type=range].InputRange-module_ratingScaleRange__gI-rs::-ms-thumb:not(:disa
4374
4404
  .SelectionControlButton-module_button__u-ysH.SelectionControlButton-module_isDisabled__0axMR:focus-visible::after {
4375
4405
  border-color: var(--color-gray-400, #cdcdd0);
4376
4406
  }
4407
+ .RemovableFilterTrigger-module_filterButtonRemovable__-M4wV {
4408
+ width: 100%;
4409
+ }
4410
+
4411
+ @media (width < 768px) {
4412
+ .FilterBarMultiSelect-module_filterMultiSelect__a4enz {
4413
+ flex-basis: 100%;
4414
+ }
4415
+ }
4416
+
4377
4417
  .ListBox-module_listBox__Uf6Mc {
4378
4418
  list-style: none;
4379
4419
  margin-top: 0;
@@ -4623,24 +4663,30 @@ input[type=range].InputRange-module_ratingScaleRange__gI-rs::-ms-thumb:not(:disa
4623
4663
  .ClearAllButton-module_clearAllButton__XNkm2 {
4624
4664
  white-space: nowrap;
4625
4665
  }
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 {
4666
+ .FilterBar-module_wrapper__D8GXq {
4667
+ container: filter-bar-wrapper / inline-size;
4668
+ }
4669
+
4670
+ .FilterBar-module_filterBar__JEVKL {
4631
4671
  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);
4672
+ padding: var(--spacing-8);
4673
+ border-radius: var(--border-solid-border-radius);
4674
+ background-color: var(--color-white);
4675
+ }
4676
+
4677
+ @media (width < 768px) {
4678
+ .FilterBar-module_filterBar__JEVKL {
4679
+ flex-direction: column;
4680
+ }
4636
4681
  }
4637
4682
 
4638
- .FilterBar-module_filtersContainer__v6OJn {
4683
+ .FilterBar-module_filtersContainer__Xl-DO {
4639
4684
  display: flex;
4640
4685
  flex-grow: 1;
4641
4686
  flex-wrap: wrap;
4642
- gap: var(--spacing-8, 0.5rem);
4687
+ gap: var(--spacing-8);
4643
4688
  }
4689
+
4644
4690
  /** THIS IS AN AUTOGENERATED FILE **/
4645
4691
  /** THIS IS AN AUTOGENERATED FILE **/
4646
4692
  /** 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": "0.0.0-canary-tsx-codemod-20241029235345",
3
+ "version": "0.0.0-canary-fix-icon-size-20241107223933",
4
4
  "description": "Kaizen component library",
5
5
  "author": "Geoffrey Chong <geoff.chong@cultureamp.com>",
6
6
  "homepage": "https://cultureamp.design",
@@ -113,27 +113,29 @@
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/design-tokens": "0.0.0-canary-tsx-codemod-20241029235345",
122
- "@kaizen/package-bundler": "1.1.8"
121
+ "@kaizen/design-tokens": "10.8.1",
122
+ "@kaizen/package-bundler": "1.1.9"
123
+ },
124
+ "devDependenciesComments": {
125
+ "sass": "Prevent deprecation warnings introduced in 1.80 as we plan to move away from sass",
126
+ "typescript": "Installed in root"
123
127
  },
124
128
  "peerDependencies": {
125
129
  "@cultureamp/i18n-react-intl": "^2.5.9",
126
130
  "react": "^18.3.1",
127
131
  "react-dom": "^18.3.1",
128
132
  "react-intl": "^6.6.8",
129
- "typescript": "^5.5.4"
130
- },
131
- "peerDependenciesComments": {
132
- "typescript": "Used for codemods"
133
+ "typescript": "5.x"
133
134
  },
134
135
  "peerDependenciesMeta": {
135
136
  "typescript": {
136
- "optional": true
137
+ "optional": true,
138
+ "comments": "Used for codemods"
137
139
  }
138
140
  },
139
141
  "scripts": {
@@ -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,5 @@
1
+ @media (width < 768px) {
2
+ .filter {
3
+ flex-basis: 100%;
4
+ }
5
+ }
@@ -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,23 @@
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
+ @media (width < 768px) {
13
+ .filterBar {
14
+ flex-direction: column;
15
+ }
16
+ }
17
+
18
+ .filtersContainer {
19
+ display: flex;
20
+ flex-grow: 1;
21
+ flex-wrap: wrap;
22
+ gap: var(--spacing-8);
23
+ }
@@ -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,5 @@
1
+ @media (width < 768px) {
2
+ .filterMultiSelect {
3
+ flex-basis: 100%;
4
+ }
5
+ }
@@ -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,23 @@
1
+ .filterButton {
2
+ gap: var(--spacing-6);
3
+ justify-content: space-between;
4
+ }
5
+
6
+ @media (width < 768px) {
7
+ .filterButton {
8
+ flex-grow: 1;
9
+ }
10
+ }
11
+
12
+ .labelContainer {
13
+ display: inline-flex;
14
+ flex-wrap: wrap;
15
+ }
16
+
17
+ .hasSelectedValues {
18
+ font-weight: bold;
19
+ }
20
+
21
+ .labelSeparator {
22
+ margin-inline-end: var(--spacing-6);
23
+ }
@@ -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,
@@ -10,6 +10,18 @@
10
10
  "opsz" var(--icon-optical-size, var(--icon-size, 20));
11
11
  }
12
12
 
13
+ .icon.IconOverride {
14
+ font-size: calc(1px * var(--icon-size, 20));
15
+ font-weight: var(--icon-font-weight, 400);
16
+ vertical-align: var(--icon-vertical-align);
17
+
18
+ /* Must use vars otherwise whole attribute must be set again */
19
+ font-variation-settings:
20
+ "FILL" var(--icon-fill, 0),
21
+ "GRAD" var(--icon-grade, 0),
22
+ "opsz" var(--icon-optical-size, var(--icon-size, 20));
23
+ }
24
+
13
25
  .filled {
14
26
  --icon-fill: 1;
15
27
  }
@@ -36,6 +36,7 @@ const MaterialIcon = ({
36
36
  className={classNames(
37
37
  "material-symbols-outlined",
38
38
  styles.icon,
39
+ "IconOverride",
39
40
  isFilled && styles.filled,
40
41
  className
41
42
  )}
@@ -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;