@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.
- package/dist/cjs/ButtonGroup/ButtonGroup.cjs +1 -1
- package/dist/cjs/Filter/Filter/Filter.cjs +4 -1
- package/dist/cjs/Filter/Filter/Filter.module.css.cjs +6 -0
- package/dist/cjs/Filter/FilterBar/FilterBar.cjs +4 -2
- package/dist/cjs/Filter/FilterBar/FilterBar.module.css.cjs +8 -0
- package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.cjs +9 -3
- package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.module.css.cjs +6 -0
- package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.cjs +7 -2
- package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.module.css.cjs +6 -0
- package/dist/cjs/Filter/FilterButton/FilterButton/FilterButton.cjs +1 -1
- package/dist/cjs/Filter/FilterButton/FilterButton/FilterButton.module.css.cjs +9 -0
- package/dist/cjs/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.cjs +5 -1
- package/dist/cjs/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.module.css.cjs +6 -0
- package/dist/cjs/Filter/FilterMultiSelect/FilterMultiSelect.cjs +5 -2
- package/dist/cjs/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.cjs +4 -1
- package/dist/cjs/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.module.css.cjs +6 -0
- package/dist/esm/ButtonGroup/ButtonGroup.mjs +1 -1
- package/dist/esm/Filter/Filter/Filter.mjs +3 -1
- package/dist/esm/Filter/Filter/Filter.module.css.mjs +4 -0
- package/dist/esm/Filter/FilterBar/FilterBar.mjs +4 -2
- package/dist/esm/Filter/FilterBar/FilterBar.module.css.mjs +6 -0
- package/dist/esm/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.mjs +8 -3
- package/dist/esm/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.module.css.mjs +4 -0
- package/dist/esm/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.mjs +7 -2
- package/dist/esm/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.module.css.mjs +4 -0
- package/dist/esm/Filter/FilterButton/FilterButton/FilterButton.mjs +1 -1
- package/dist/esm/Filter/FilterButton/FilterButton/FilterButton.module.css.mjs +7 -0
- package/dist/esm/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.mjs +4 -1
- package/dist/esm/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.module.css.mjs +4 -0
- package/dist/esm/Filter/FilterMultiSelect/FilterMultiSelect.mjs +5 -2
- package/dist/esm/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.mjs +3 -1
- package/dist/esm/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.module.css.mjs +4 -0
- package/dist/styles.css +95 -57
- package/dist/types/Filter/FilterMultiSelect/FilterMultiSelect.d.ts +2 -1
- package/package.json +5 -4
- package/src/ButtonGroup/ButtonGroup.tsx +4 -1
- package/src/Filter/Filter/Filter.module.css +6 -0
- package/src/Filter/Filter/Filter.tsx +6 -1
- package/src/Filter/FilterBar/FilterBar.module.css +24 -0
- package/src/Filter/FilterBar/FilterBar.tsx +15 -13
- package/src/Filter/FilterBar/_docs/FilterBar.stories.tsx +5 -0
- package/src/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.module.css +3 -0
- package/src/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.tsx +36 -18
- package/src/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.module.css +6 -0
- package/src/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.tsx +7 -1
- package/src/Filter/FilterButton/FilterButton/FilterButton.module.css +24 -0
- package/src/Filter/FilterButton/FilterButton/FilterButton.tsx +1 -1
- package/src/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.module.css +3 -0
- package/src/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.tsx +10 -1
- package/src/Filter/FilterButton/subcomponents/FilterButtonBase/FilterButtonBase.module.scss +2 -2
- package/src/Filter/FilterMultiSelect/FilterMultiSelect.tsx +3 -1
- package/src/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.module.css +3 -0
- package/src/Filter/FilterMultiSelect/subcomponents/Trigger/RemovableFilterTrigger/RemovableFilterTrigger.tsx +6 -1
- package/dist/cjs/Filter/FilterBar/FilterBar.module.scss.cjs +0 -7
- package/dist/cjs/Filter/FilterButton/FilterButton/FilterButton.module.scss.cjs +0 -9
- package/dist/esm/Filter/FilterBar/FilterBar.module.scss.mjs +0 -5
- package/dist/esm/Filter/FilterButton/FilterButton/FilterButton.module.scss.mjs +0 -7
- package/src/Filter/FilterBar/FilterBar.module.scss +0 -19
- 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
|
-
|
|
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
|
-
|
|
4069
|
-
|
|
4070
|
-
|
|
4071
|
-
|
|
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-
|
|
4087
|
+
.FilterButton-module_labelContainer__sPAcx {
|
|
4075
4088
|
display: inline-flex;
|
|
4089
|
+
flex-wrap: wrap;
|
|
4076
4090
|
}
|
|
4077
4091
|
|
|
4078
|
-
.FilterButton-
|
|
4092
|
+
.FilterButton-module_hasSelectedValues__bHR5g {
|
|
4079
4093
|
font-weight: bold;
|
|
4080
4094
|
}
|
|
4081
4095
|
|
|
4082
|
-
.FilterButton-
|
|
4083
|
-
margin-inline-end: var(--spacing-
|
|
4096
|
+
.FilterButton-module_labelSeparator__KimZO {
|
|
4097
|
+
margin-inline-end: var(--spacing-6);
|
|
4084
4098
|
}
|
|
4085
|
-
|
|
4086
|
-
|
|
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
|
-
|
|
4627
|
-
|
|
4628
|
-
|
|
4629
|
-
|
|
4630
|
-
.FilterBar-
|
|
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
|
|
4633
|
-
|
|
4634
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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": "
|
|
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/
|
|
122
|
-
"@kaizen/
|
|
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:
|
|
53
|
+
classNameOverride: classnames(
|
|
54
|
+
button.props.classNameOverride,
|
|
55
|
+
buttonClassNames
|
|
56
|
+
),
|
|
54
57
|
}),
|
|
55
58
|
})
|
|
56
59
|
}
|
|
@@ -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
|
|
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.
|
|
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={
|
|
31
|
-
<div className={styles.
|
|
32
|
-
{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
42
|
-
|
|
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 => (
|
|
@@ -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
|
-
>(
|
|
20
|
-
|
|
21
|
+
>(
|
|
22
|
+
(
|
|
23
|
+
{ filterId, isRemovable = false, classNameOverride, ...props },
|
|
24
|
+
ref
|
|
25
|
+
): JSX.Element => {
|
|
26
|
+
const { hideFilter, focusId, setFocus } = useFilterBarContext()
|
|
21
27
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (focusId === filterId && isRefObject(ref)) {
|
|
30
|
+
ref?.current?.triggerRef?.current?.focus()
|
|
31
|
+
setFocus(undefined)
|
|
32
|
+
}
|
|
33
|
+
}, [focusId])
|
|
28
34
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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"
|
|
@@ -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
|
|
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
|
+
}
|
|
@@ -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
|
|
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
|
-
|
|
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={
|
|
27
|
+
classNameOverride={classnames(
|
|
28
|
+
styles.filterButtonRemovable,
|
|
29
|
+
classNameOverride
|
|
30
|
+
)}
|
|
26
31
|
triggerButtonProps={{
|
|
27
32
|
...buttonProps,
|
|
28
33
|
label,
|