@launchpad-ui/filter 0.5.25 → 0.5.27
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/AppliedFilter.d.ts +1 -1
- package/dist/AppliedFilter.d.ts.map +1 -1
- package/dist/Filter.d.ts +1 -1
- package/dist/Filter.d.ts.map +1 -1
- package/dist/FilterMenu.d.ts +1 -1
- package/dist/FilterMenu.d.ts.map +1 -1
- package/dist/index.es.js +166 -157
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +167 -158
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/AppliedFilter.d.ts
CHANGED
@@ -20,7 +20,7 @@ type AppliedFilterProps = {
|
|
20
20
|
searchId?: string;
|
21
21
|
'data-test-id'?: string;
|
22
22
|
};
|
23
|
-
declare const AppliedFilter: ({ searchValue, onSearchChange, searchPlaceholder, name, description, options, className, isEmpty, isLoading, onClickFilterButton, onClearFilter, searchAriaLabel, searchId, "data-test-id": testId, ...props }: AppliedFilterProps) => JSX.Element;
|
23
|
+
declare const AppliedFilter: ({ searchValue, onSearchChange, searchPlaceholder, name, description, options, className, isEmpty, isLoading, onClickFilterButton, onClearFilter, searchAriaLabel, searchId, "data-test-id": testId, ...props }: AppliedFilterProps) => import("react/jsx-runtime").JSX.Element;
|
24
24
|
export type { AppliedFilterProps };
|
25
25
|
export { AppliedFilter };
|
26
26
|
//# sourceMappingURL=AppliedFilter.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AppliedFilter.d.ts","sourceRoot":"","sources":["../src/AppliedFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASpD,KAAK,kBAAkB,GAAG;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAC5D,aAAa,CAAC,IAAI,IAAI,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB,CAAC,IAAI,IAAI,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,QAAA,MAAM,aAAa,mNAgBhB,kBAAkB,
|
1
|
+
{"version":3,"file":"AppliedFilter.d.ts","sourceRoot":"","sources":["../src/AppliedFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASpD,KAAK,kBAAkB,GAAG;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAC5D,aAAa,CAAC,IAAI,IAAI,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB,CAAC,IAAI,IAAI,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,QAAA,MAAM,aAAa,mNAgBhB,kBAAkB,4CA0BpB,CAAC;AAEF,YAAY,EAAE,kBAAkB,EAAE,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
package/dist/Filter.d.ts
CHANGED
@@ -28,7 +28,7 @@ type FilterProps = Pick<MenuProps<string>, 'size' | 'enableVirtualization'> & {
|
|
28
28
|
triggerTestId?: string;
|
29
29
|
clearAriaLabel?: string;
|
30
30
|
};
|
31
|
-
declare const Filter: ({ searchValue, onSearchChange, searchPlaceholder, searchAriaLabel, name, hideName, description, options, isClearable, onClear, isSelected, className, isEmpty, searchId, isLoading, onClickFilterButton, disabledOptionTooltip, "data-test-id": testId, size, disabled, enableVirtualization, clearAriaLabel, ...props }: FilterProps) => JSX.Element;
|
31
|
+
declare const Filter: ({ searchValue, onSearchChange, searchPlaceholder, searchAriaLabel, name, hideName, description, options, isClearable, onClear, isSelected, className, isEmpty, searchId, isLoading, onClickFilterButton, disabledOptionTooltip, "data-test-id": testId, size, disabled, enableVirtualization, clearAriaLabel, ...props }: FilterProps) => import("react/jsx-runtime").JSX.Element;
|
32
32
|
export { Filter };
|
33
33
|
export type { FilterProps };
|
34
34
|
//# sourceMappingURL=Filter.d.ts.map
|
package/dist/Filter.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Filter.d.ts","sourceRoot":"","sources":["../src/Filter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAC;AAWpE,KAAK,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAAC,GAAG;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,IAAI,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,IAAI,IAAI,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,QAAA,MAAM,MAAM,6TAwBT,WAAW,
|
1
|
+
{"version":3,"file":"Filter.d.ts","sourceRoot":"","sources":["../src/Filter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAC;AAWpE,KAAK,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAAC,GAAG;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,IAAI,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,IAAI,IAAI,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,QAAA,MAAM,MAAM,6TAwBT,WAAW,4CA6Cb,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,CAAC"}
|
package/dist/FilterMenu.d.ts
CHANGED
@@ -23,7 +23,7 @@ type FilterMenuProps = Pick<MenuProps<string>, 'enableVirtualization' | 'size' |
|
|
23
23
|
isLoading?: boolean;
|
24
24
|
disabledOptionTooltip?: string;
|
25
25
|
};
|
26
|
-
declare const FilterMenu: ({ options, onClearFilter, enableSearch, searchValue, searchPlaceholder, searchAriaLabel, searchId, onSelect, onSearchChange, isLoading, disabledOptionTooltip, enableVirtualization, size, "data-test-id": testId, }: FilterMenuProps) => JSX.Element;
|
26
|
+
declare const FilterMenu: ({ options, onClearFilter, enableSearch, searchValue, searchPlaceholder, searchAriaLabel, searchId, onSelect, onSearchChange, isLoading, disabledOptionTooltip, enableVirtualization, size, "data-test-id": testId, }: FilterMenuProps) => import("react/jsx-runtime").JSX.Element;
|
27
27
|
export { FilterMenu };
|
28
28
|
export type { FilterOption, FilterMenuProps };
|
29
29
|
//# sourceMappingURL=FilterMenu.d.ts.map
|
package/dist/FilterMenu.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"FilterMenu.d.ts","sourceRoot":"","sources":["../src/FilterMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASpD,KAAK,YAAY,CAAC,CAAC,GAAG,GAAG,IAAI;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,KAAK,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,MAAM,GAAG,cAAc,CAAC,GAAG;IACjG,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,aAAa,CAAC,IAAI,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAC5D,QAAQ,CAAC,IAAI,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,QAAA,MAAM,UAAU,yNAeb,eAAe,
|
1
|
+
{"version":3,"file":"FilterMenu.d.ts","sourceRoot":"","sources":["../src/FilterMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASpD,KAAK,YAAY,CAAC,CAAC,GAAG,GAAG,IAAI;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,KAAK,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,MAAM,GAAG,cAAc,CAAC,GAAG;IACjG,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,aAAa,CAAC,IAAI,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAC5D,QAAQ,CAAC,IAAI,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,QAAA,MAAM,UAAU,yNAeb,eAAe,4CA2DjB,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/index.es.js
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
import './style.css';
|
2
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
2
3
|
import { Dropdown } from "@launchpad-ui/dropdown";
|
3
4
|
import { ExpandMore, Check, Close } from "@launchpad-ui/icons";
|
4
5
|
import { cx } from "classix";
|
5
6
|
import { forwardRef, Children, useId } from "react";
|
6
|
-
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
7
7
|
import { Button, IconButton } from "@launchpad-ui/button";
|
8
8
|
import { Menu, MenuSearch, MenuDivider, MenuItem } from "@launchpad-ui/menu";
|
9
9
|
import { Tooltip } from "@launchpad-ui/tooltip";
|
@@ -35,35 +35,25 @@ const styles = {
|
|
35
35
|
filterClearButton
|
36
36
|
};
|
37
37
|
const AppliedFilterButton = forwardRef((props, ref) => {
|
38
|
-
const {
|
39
|
-
name: name2,
|
40
|
-
className,
|
41
|
-
children,
|
42
|
-
onClickFilterButton,
|
43
|
-
"data-test-id": testId
|
44
|
-
} = props;
|
38
|
+
const { name: name2, className, children, onClickFilterButton, "data-test-id": testId } = props;
|
45
39
|
const hasDescription = Children.count(children) !== 0;
|
46
|
-
return /* @__PURE__ */ jsx("div", {
|
47
|
-
"
|
48
|
-
|
40
|
+
return /* @__PURE__ */ jsx("div", { "data-test-id": testId, children: /* @__PURE__ */ jsxs(
|
41
|
+
"button",
|
42
|
+
{
|
49
43
|
"aria-haspopup": true,
|
50
44
|
className: cx(styles.appliedButton, className),
|
51
45
|
ref,
|
52
46
|
onClick: onClickFilterButton,
|
53
|
-
children: [
|
54
|
-
className: styles.appliedName,
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
className: styles.appliedDescription,
|
59
|
-
"data-test-id": `${testId}-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
"data-test-id": `${testId}-expand`
|
64
|
-
})]
|
65
|
-
})
|
66
|
-
});
|
47
|
+
children: [
|
48
|
+
name2 && /* @__PURE__ */ jsxs("span", { className: styles.appliedName, "data-test-id": `${testId}-name`, children: [
|
49
|
+
name2,
|
50
|
+
hasDescription && ":"
|
51
|
+
] }),
|
52
|
+
hasDescription && /* @__PURE__ */ jsx("span", { className: styles.appliedDescription, "data-test-id": `${testId}-description`, children }),
|
53
|
+
/* @__PURE__ */ jsx(ExpandMore, { size: "small", "data-test-id": `${testId}-expand` })
|
54
|
+
]
|
55
|
+
}
|
56
|
+
) });
|
67
57
|
});
|
68
58
|
AppliedFilterButton.displayName = "AppliedFilterButton";
|
69
59
|
const FilterMenu = ({
|
@@ -82,49 +72,62 @@ const FilterMenu = ({
|
|
82
72
|
size,
|
83
73
|
"data-test-id": testId = "filter-menu"
|
84
74
|
}) => {
|
85
|
-
const filterOptions = isLoading ? [{
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
75
|
+
const filterOptions = isLoading ? [{ name: "loading...", value: "loading...", isDisabled: true }] : options;
|
76
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
77
|
+
onClearFilter && /* @__PURE__ */ jsx(
|
78
|
+
Button,
|
79
|
+
{
|
80
|
+
tabIndex: 0,
|
81
|
+
className: styles.filterClearButton,
|
82
|
+
onClick: onClearFilter,
|
83
|
+
kind: "link",
|
84
|
+
"data-test-id": "clear-filter-button",
|
85
|
+
children: "CLEAR FILTER"
|
86
|
+
}
|
87
|
+
),
|
88
|
+
/* @__PURE__ */ jsxs(
|
89
|
+
Menu,
|
90
|
+
{
|
91
|
+
enableVirtualization,
|
92
|
+
size,
|
93
|
+
"data-test-id": testId,
|
94
|
+
onSelect,
|
95
|
+
children: [
|
96
|
+
enableSearch && /* @__PURE__ */ jsx(
|
97
|
+
MenuSearch,
|
98
|
+
{
|
99
|
+
value: searchValue,
|
100
|
+
id: searchId,
|
101
|
+
placeholder: searchPlaceholder,
|
102
|
+
onChange: onSearchChange,
|
103
|
+
ariaLabel: searchAriaLabel
|
104
|
+
}
|
105
|
+
),
|
106
|
+
filterOptions.map((option, index) => {
|
107
|
+
if (option.isDivider) {
|
108
|
+
return /* @__PURE__ */ jsx(MenuDivider, {}, `divider-${index}`);
|
109
|
+
}
|
110
|
+
return /* @__PURE__ */ jsx(
|
111
|
+
MenuItem,
|
112
|
+
{
|
113
|
+
item: option,
|
114
|
+
disabled: option.isDisabled,
|
115
|
+
icon: option.isChecked ? Check : null,
|
116
|
+
role: "menuitemradio",
|
117
|
+
"aria-checked": option.isChecked ? "true" : void 0,
|
118
|
+
nested: option.nested,
|
119
|
+
groupHeader: option.groupHeader,
|
120
|
+
tooltip: option.isDisabled && disabledOptionTooltip ? disabledOptionTooltip : void 0,
|
121
|
+
tooltipPlacement: "right",
|
122
|
+
children: option.name
|
123
|
+
},
|
124
|
+
option.value
|
125
|
+
);
|
126
|
+
})
|
127
|
+
]
|
128
|
+
}
|
129
|
+
)
|
130
|
+
] });
|
128
131
|
};
|
129
132
|
const SEARCH_INPUT_THRESHOLD$1 = 4;
|
130
133
|
const AppliedFilter = ({
|
@@ -145,28 +148,31 @@ const AppliedFilter = ({
|
|
145
148
|
...props
|
146
149
|
}) => {
|
147
150
|
const enableSearch = onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD$1 || !isEmpty);
|
148
|
-
return /* @__PURE__ */ jsxs(Dropdown, {
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
151
|
+
return /* @__PURE__ */ jsxs(Dropdown, { targetClassName: className, placement: "bottom-start", enableArrow: false, ...props, children: [
|
152
|
+
/* @__PURE__ */ jsx(
|
153
|
+
AppliedFilterButton,
|
154
|
+
{
|
155
|
+
"data-test-id": testId,
|
156
|
+
name: name2,
|
157
|
+
onClickFilterButton,
|
158
|
+
children: description2
|
159
|
+
}
|
160
|
+
),
|
161
|
+
/* @__PURE__ */ jsx(
|
162
|
+
FilterMenu,
|
163
|
+
{
|
164
|
+
options,
|
165
|
+
searchValue,
|
166
|
+
searchPlaceholder,
|
167
|
+
enableSearch,
|
168
|
+
searchAriaLabel,
|
169
|
+
searchId,
|
170
|
+
onSearchChange,
|
171
|
+
onClearFilter,
|
172
|
+
isLoading
|
173
|
+
}
|
174
|
+
)
|
175
|
+
] });
|
170
176
|
};
|
171
177
|
const FilterButton = forwardRef((props, ref) => {
|
172
178
|
const {
|
@@ -187,56 +193,47 @@ const FilterButton = forwardRef((props, ref) => {
|
|
187
193
|
const nameId = useId();
|
188
194
|
const descriptionId = useId();
|
189
195
|
const hasDescription = Children.count(children) !== 0;
|
190
|
-
const nameElement = /* @__PURE__ */ jsxs("span", {
|
191
|
-
|
192
|
-
|
193
|
-
});
|
196
|
+
const nameElement = /* @__PURE__ */ jsxs("span", { className: styles.name, children: [
|
197
|
+
name2,
|
198
|
+
hasDescription && ":"
|
199
|
+
] });
|
194
200
|
const isDisabled = disabled;
|
195
201
|
const handleClick = (event) => {
|
196
202
|
if (isDisabled)
|
197
203
|
return event.preventDefault();
|
198
204
|
onClickFilterButton == null ? void 0 : onClickFilterButton();
|
199
205
|
};
|
200
|
-
return /* @__PURE__ */ jsxs("div", {
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
}), !isClearable2 && /* @__PURE__ */ jsx(ExpandMore, {
|
223
|
-
size: "small"
|
224
|
-
})]
|
225
|
-
}), isClearable2 && /* @__PURE__ */ jsx(Tooltip, {
|
226
|
-
targetClassName: styles.clearTooltip,
|
227
|
-
content: clearTooltip2,
|
228
|
-
children: /* @__PURE__ */ jsx(IconButton, {
|
206
|
+
return /* @__PURE__ */ jsxs("div", { className: styles.buttonContainer, "data-test-id": testId, children: [
|
207
|
+
/* @__PURE__ */ jsxs(
|
208
|
+
"button",
|
209
|
+
{
|
210
|
+
...rest,
|
211
|
+
"aria-labelledby": `${nameId} ${hasDescription ? descriptionId : ""}`,
|
212
|
+
"aria-haspopup": true,
|
213
|
+
disabled: isDisabled,
|
214
|
+
"aria-disabled": isDisabled,
|
215
|
+
className: cx(styles.button, className, (isClearable2 || isSelected) && styles.isClearable),
|
216
|
+
ref,
|
217
|
+
onClick: handleClick,
|
218
|
+
children: [
|
219
|
+
hideName ? /* @__PURE__ */ jsx(VisuallyHidden, { id: nameId, children: nameElement }) : /* @__PURE__ */ jsx("span", { id: nameId, children: nameElement }),
|
220
|
+
hasDescription && /* @__PURE__ */ jsx("span", { id: descriptionId, className: styles.description, children }),
|
221
|
+
!isClearable2 && /* @__PURE__ */ jsx(ExpandMore, { size: "small" })
|
222
|
+
]
|
223
|
+
}
|
224
|
+
),
|
225
|
+
isClearable2 && /* @__PURE__ */ jsx(Tooltip, { targetClassName: styles.clearTooltip, content: clearTooltip2, children: /* @__PURE__ */ jsx(
|
226
|
+
IconButton,
|
227
|
+
{
|
229
228
|
"aria-label": ariaLabel,
|
230
229
|
className: styles.clear,
|
231
230
|
"data-test-id": "clear-filter-button",
|
232
|
-
icon: /* @__PURE__ */ jsx(Close, {
|
233
|
-
size: "tiny"
|
234
|
-
}),
|
231
|
+
icon: /* @__PURE__ */ jsx(Close, { size: "tiny" }),
|
235
232
|
size: "small",
|
236
233
|
onClick: onClear
|
237
|
-
}
|
238
|
-
})
|
239
|
-
});
|
234
|
+
}
|
235
|
+
) })
|
236
|
+
] });
|
240
237
|
});
|
241
238
|
FilterButton.defaultProps = {
|
242
239
|
clearTooltip: "Clear filter"
|
@@ -274,35 +271,47 @@ const Filter = ({
|
|
274
271
|
event.preventDefault();
|
275
272
|
onClear == null ? void 0 : onClear();
|
276
273
|
};
|
277
|
-
return /* @__PURE__ */ jsxs(
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
...props,
|
282
|
-
children: [/* @__PURE__ */ jsx(FilterButton, {
|
283
|
-
isClearable: isClearable2,
|
284
|
-
onClear: handleClear,
|
285
|
-
name: name2,
|
286
|
-
hideName,
|
274
|
+
return /* @__PURE__ */ jsxs(
|
275
|
+
Dropdown,
|
276
|
+
{
|
277
|
+
targetTestId: testId,
|
287
278
|
disabled,
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
279
|
+
targetClassName: dropdownClasses,
|
280
|
+
...props,
|
281
|
+
children: [
|
282
|
+
/* @__PURE__ */ jsx(
|
283
|
+
FilterButton,
|
284
|
+
{
|
285
|
+
isClearable: isClearable2,
|
286
|
+
onClear: handleClear,
|
287
|
+
name: name2,
|
288
|
+
hideName,
|
289
|
+
disabled,
|
290
|
+
isSelected,
|
291
|
+
onClickFilterButton,
|
292
|
+
ariaLabel: clearAriaLabel,
|
293
|
+
children: description2
|
294
|
+
}
|
295
|
+
),
|
296
|
+
/* @__PURE__ */ jsx(
|
297
|
+
FilterMenu,
|
298
|
+
{
|
299
|
+
options,
|
300
|
+
searchId,
|
301
|
+
searchValue,
|
302
|
+
searchPlaceholder,
|
303
|
+
searchAriaLabel,
|
304
|
+
enableSearch,
|
305
|
+
onSearchChange,
|
306
|
+
isLoading,
|
307
|
+
disabledOptionTooltip,
|
308
|
+
size,
|
309
|
+
enableVirtualization
|
310
|
+
}
|
311
|
+
)
|
312
|
+
]
|
313
|
+
}
|
314
|
+
);
|
306
315
|
};
|
307
316
|
export {
|
308
317
|
AppliedFilter,
|
package/dist/index.es.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/AppliedFilterButton.tsx","../src/FilterMenu.tsx","../src/AppliedFilter.tsx","../src/FilterButton.tsx","../src/Filter.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { ExpandMore } from '@launchpad-ui/icons';\nimport { cx } from 'classix';\nimport { Children, forwardRef } from 'react';\n\nimport styles from './styles/Filter.module.css';\n\ntype AppliedFilterButtonProps = {\n name?: ReactNode;\n className?: string;\n children: ReactNode;\n onClickFilterButton?(): void;\n 'data-test-id': string;\n};\n\ntype Ref = HTMLButtonElement;\n\nconst AppliedFilterButton = forwardRef<Ref, AppliedFilterButtonProps>((props, ref) => {\n const { name, className, children, onClickFilterButton, 'data-test-id': testId } = props;\n\n const hasDescription = Children.count(children) !== 0;\n\n return (\n <div data-test-id={testId}>\n <button\n aria-haspopup\n className={cx(styles.appliedButton, className)}\n ref={ref}\n onClick={onClickFilterButton}\n >\n {name && (\n <span className={styles.appliedName} data-test-id={`${testId}-name`}>\n {name}\n {hasDescription && ':'}\n </span>\n )}\n {hasDescription && (\n <span className={styles.appliedDescription} data-test-id={`${testId}-description`}>\n {children}\n </span>\n )}\n <ExpandMore size=\"small\" data-test-id={`${testId}-expand`} />\n </button>\n </div>\n );\n});\n\nAppliedFilterButton.displayName = 'AppliedFilterButton';\n\nexport type { AppliedFilterButtonProps };\nexport { AppliedFilterButton };\n","import type { MenuProps } from '@launchpad-ui/menu';\nimport type { ChangeEvent, ReactNode } from 'react';\n\nimport { Button } from '@launchpad-ui/button';\nimport { Check } from '@launchpad-ui/icons';\nimport { Menu, MenuDivider, MenuItem, MenuSearch } from '@launchpad-ui/menu';\n\nimport styles from './styles/Filter.module.css';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype FilterOption<T = any> = {\n name?: ReactNode;\n isDisabled?: boolean;\n isDivider?: boolean;\n isChecked?: boolean;\n value: T | null;\n projKey?: string;\n nested?: boolean;\n groupHeader?: boolean;\n};\n\ntype FilterMenuProps = Pick<MenuProps<string>, 'enableVirtualization' | 'size' | 'data-test-id'> & {\n options: FilterOption[];\n onClearFilter?(): void;\n enableSearch?: boolean;\n searchValue?: string;\n searchId?: string;\n searchPlaceholder?: string;\n searchAriaLabel?: string;\n onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;\n onSelect?(): void;\n isLoading?: boolean;\n disabledOptionTooltip?: string;\n};\n\nconst FilterMenu = ({\n options,\n onClearFilter,\n enableSearch,\n searchValue,\n searchPlaceholder,\n searchAriaLabel,\n searchId,\n onSelect,\n onSearchChange,\n isLoading = false,\n disabledOptionTooltip,\n enableVirtualization,\n size,\n 'data-test-id': testId = 'filter-menu',\n}: FilterMenuProps) => {\n const filterOptions = isLoading\n ? [{ name: 'loading...', value: 'loading...', isDisabled: true }]\n : options;\n\n return (\n <>\n {onClearFilter && (\n <Button\n tabIndex={0}\n className={styles.filterClearButton}\n onClick={onClearFilter}\n kind=\"link\"\n data-test-id=\"clear-filter-button\"\n >\n CLEAR FILTER\n </Button>\n )}\n <Menu\n enableVirtualization={enableVirtualization}\n size={size}\n data-test-id={testId}\n onSelect={onSelect}\n >\n {enableSearch && (\n <MenuSearch\n value={searchValue}\n id={searchId}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n ariaLabel={searchAriaLabel}\n />\n )}\n {filterOptions.map((option, index) => {\n if (option.isDivider) {\n return <MenuDivider key={`divider-${index}`} />;\n }\n return (\n <MenuItem\n item={option}\n disabled={option.isDisabled}\n icon={option.isChecked ? Check : null}\n key={option.value}\n role=\"menuitemradio\"\n aria-checked={option.isChecked ? 'true' : undefined}\n nested={option.nested}\n groupHeader={option.groupHeader}\n tooltip={\n option.isDisabled && disabledOptionTooltip ? disabledOptionTooltip : undefined\n }\n tooltipPlacement=\"right\"\n >\n {option.name}\n </MenuItem>\n );\n })}\n </Menu>\n </>\n );\n};\n\nexport { FilterMenu };\nexport type { FilterOption, FilterMenuProps };\n","import type { FilterOption } from './FilterMenu';\nimport type { ChangeEvent, ReactNode } from 'react';\n\nimport { Dropdown } from '@launchpad-ui/dropdown';\n\nimport { AppliedFilterButton } from './AppliedFilterButton';\nimport { FilterMenu } from './FilterMenu';\n\nconst SEARCH_INPUT_THRESHOLD = 4;\n\ntype AppliedFilterProps = {\n searchValue?: string;\n onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;\n onClearFilter?(): void;\n searchPlaceholder?: string;\n name?: ReactNode;\n description: ReactNode;\n options: FilterOption[];\n className?: string;\n onStateChange?({ isOpen }: { isOpen?: boolean }): void;\n onSelect?(item: FilterOption): void;\n isEmpty?: boolean;\n isLoading?: boolean;\n onClickFilterButton?(): void;\n searchAriaLabel?: string;\n searchId?: string;\n 'data-test-id'?: string;\n};\n\nconst AppliedFilter = ({\n searchValue,\n onSearchChange,\n searchPlaceholder,\n name,\n description,\n options,\n className,\n isEmpty,\n isLoading,\n onClickFilterButton,\n onClearFilter,\n searchAriaLabel,\n searchId,\n 'data-test-id': testId = 'applied-filter',\n ...props\n}: AppliedFilterProps) => {\n const enableSearch =\n onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);\n\n return (\n <Dropdown targetClassName={className} placement=\"bottom-start\" enableArrow={false} {...props}>\n <AppliedFilterButton\n data-test-id={testId}\n name={name}\n onClickFilterButton={onClickFilterButton}\n >\n {description}\n </AppliedFilterButton>\n <FilterMenu\n options={options}\n searchValue={searchValue}\n searchPlaceholder={searchPlaceholder}\n enableSearch={enableSearch}\n searchAriaLabel={searchAriaLabel}\n searchId={searchId}\n onSearchChange={onSearchChange}\n onClearFilter={onClearFilter}\n isLoading={isLoading}\n />\n </Dropdown>\n );\n};\n\nexport type { AppliedFilterProps };\nexport { AppliedFilter };\n","import type { ReactNode, SyntheticEvent, MouseEvent } from 'react';\n\nimport { IconButton } from '@launchpad-ui/button';\nimport { Close, ExpandMore } from '@launchpad-ui/icons';\nimport { Tooltip } from '@launchpad-ui/tooltip';\nimport { VisuallyHidden } from '@react-aria/visually-hidden';\nimport { cx } from 'classix';\nimport { Children, forwardRef, useId } from 'react';\n\nimport styles from './styles/Filter.module.css';\n\ntype FilterButtonProps = {\n name: ReactNode;\n hideName?: boolean;\n isClearable?: boolean;\n onClear?(event: SyntheticEvent): void;\n className?: string;\n isSelected?: boolean;\n clearTooltip?: string | JSX.Element;\n children?: ReactNode;\n disabled?: boolean;\n onClickFilterButton?(): void;\n 'data-test-id'?: string;\n ariaLabel?: string;\n};\n\ntype Ref = HTMLButtonElement;\n\nconst FilterButton = forwardRef<Ref, FilterButtonProps>((props, ref) => {\n const {\n children,\n name,\n hideName,\n isClearable,\n clearTooltip,\n onClear,\n disabled,\n isSelected,\n onClickFilterButton,\n className,\n 'data-test-id': testId = 'filter-button',\n ariaLabel = 'Clear filter',\n ...rest\n } = props;\n const nameId = useId();\n const descriptionId = useId();\n\n const hasDescription = Children.count(children) !== 0;\n\n const nameElement = (\n <span className={styles.name}>\n {name}\n {hasDescription && ':'}\n </span>\n );\n\n const isDisabled = disabled;\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) return event.preventDefault();\n onClickFilterButton?.();\n };\n\n return (\n <div className={styles.buttonContainer} data-test-id={testId}>\n <button\n {...rest}\n aria-labelledby={`${nameId} ${hasDescription ? descriptionId : ''}`}\n aria-haspopup\n disabled={isDisabled}\n aria-disabled={isDisabled}\n className={cx(styles.button, className, (isClearable || isSelected) && styles.isClearable)}\n ref={ref}\n onClick={handleClick}\n >\n {hideName ? (\n <VisuallyHidden id={nameId}>{nameElement}</VisuallyHidden>\n ) : (\n <span id={nameId}>{nameElement}</span>\n )}\n {hasDescription && (\n <span id={descriptionId} className={styles.description}>\n {children}\n </span>\n )}\n {!isClearable && <ExpandMore size=\"small\" />}\n </button>\n {isClearable && (\n <Tooltip targetClassName={styles.clearTooltip} content={clearTooltip}>\n <IconButton\n aria-label={ariaLabel}\n className={styles.clear}\n data-test-id=\"clear-filter-button\"\n icon={<Close size=\"tiny\" />}\n size=\"small\"\n onClick={onClear}\n />\n </Tooltip>\n )}\n </div>\n );\n});\n\nFilterButton.defaultProps = {\n clearTooltip: 'Clear filter',\n};\n\nFilterButton.displayName = 'FilterButton';\n\nexport { FilterButton };\nexport type { FilterButtonProps };\n","import type { FilterOption } from './FilterMenu';\nimport type { MenuProps } from '@launchpad-ui/menu';\nimport type { ChangeEvent, ReactNode, SyntheticEvent } from 'react';\n\nimport { Dropdown } from '@launchpad-ui/dropdown';\nimport { cx } from 'classix';\n\nimport { FilterButton } from './FilterButton';\nimport { FilterMenu } from './FilterMenu';\nimport styles from './styles/Filter.module.css';\n\nconst SEARCH_INPUT_THRESHOLD = 4;\n\ntype FilterProps = Pick<MenuProps<string>, 'size' | 'enableVirtualization'> & {\n searchValue?: string;\n onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;\n searchPlaceholder?: string;\n searchAriaLabel?: string;\n name: ReactNode;\n hideName?: boolean;\n description: ReactNode;\n options: FilterOption[];\n isClearable?: boolean;\n onClear?(): void;\n className?: string;\n onStateChange?({ isOpen }: { isOpen?: boolean }): void;\n isSelected?: boolean;\n searchId?: string;\n onSelect?(item: FilterOption): void;\n isEmpty?: boolean;\n isLoading?: boolean;\n disabled?: boolean;\n onClickFilterButton?(): void;\n disabledOptionTooltip?: string;\n 'data-test-id'?: string;\n triggerTestId?: string;\n clearAriaLabel?: string;\n};\n\nconst Filter = ({\n searchValue,\n onSearchChange,\n searchPlaceholder,\n searchAriaLabel,\n name,\n hideName,\n description,\n options,\n isClearable,\n onClear,\n isSelected,\n className,\n isEmpty,\n searchId,\n isLoading,\n onClickFilterButton,\n disabledOptionTooltip,\n 'data-test-id': testId = 'filter',\n size,\n disabled,\n enableVirtualization,\n clearAriaLabel,\n ...props\n}: FilterProps) => {\n const enableSearch =\n onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);\n\n const dropdownClasses = cx(styles.filter, className);\n\n const handleClear = (event: SyntheticEvent) => {\n event.preventDefault();\n onClear?.();\n };\n\n return (\n <Dropdown\n targetTestId={testId}\n disabled={disabled}\n targetClassName={dropdownClasses}\n {...props}\n >\n <FilterButton\n isClearable={isClearable}\n onClear={handleClear}\n name={name}\n hideName={hideName}\n disabled={disabled}\n isSelected={isSelected}\n onClickFilterButton={onClickFilterButton}\n ariaLabel={clearAriaLabel}\n >\n {description}\n </FilterButton>\n <FilterMenu\n options={options}\n searchId={searchId}\n searchValue={searchValue}\n searchPlaceholder={searchPlaceholder}\n searchAriaLabel={searchAriaLabel}\n enableSearch={enableSearch}\n onSearchChange={onSearchChange}\n isLoading={isLoading}\n disabledOptionTooltip={disabledOptionTooltip}\n size={size}\n enableVirtualization={enableVirtualization}\n />\n </Dropdown>\n );\n};\n\nexport { Filter };\nexport type { FilterProps };\n"],"names":["AppliedFilterButton","forwardRef","props","ref","name","className","children","onClickFilterButton","testId","hasDescription","Children","count","cx","styles","appliedButton","onClick","_jsxs","appliedName","_jsx","appliedDescription","ExpandMore","size","displayName","FilterMenu","options","onClearFilter","enableSearch","searchValue","searchPlaceholder","searchAriaLabel","searchId","onSelect","onSearchChange","isLoading","disabledOptionTooltip","enableVirtualization","filterOptions","value","isDisabled","_Fragment","Button","tabIndex","filterClearButton","kind","Menu","MenuSearch","id","placeholder","onChange","ariaLabel","map","option","index","isDivider","MenuDivider","MenuItem","item","disabled","icon","isChecked","Check","role","undefined","nested","groupHeader","tooltip","tooltipPlacement","SEARCH_INPUT_THRESHOLD","AppliedFilter","description","isEmpty","length","Dropdown","targetClassName","placement","enableArrow","FilterButton","hideName","isClearable","clearTooltip","onClear","isSelected","rest","nameId","useId","descriptionId","nameElement","handleClick","event","preventDefault","buttonContainer","button","VisuallyHidden","Tooltip","content","IconButton","clear","Close","defaultProps","Filter","clearAriaLabel","dropdownClasses","filter","handleClear","targetTestId"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/AppliedFilterButton.tsx","../src/FilterMenu.tsx","../src/AppliedFilter.tsx","../src/FilterButton.tsx","../src/Filter.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { ExpandMore } from '@launchpad-ui/icons';\nimport { cx } from 'classix';\nimport { Children, forwardRef } from 'react';\n\nimport styles from './styles/Filter.module.css';\n\ntype AppliedFilterButtonProps = {\n name?: ReactNode;\n className?: string;\n children: ReactNode;\n onClickFilterButton?(): void;\n 'data-test-id': string;\n};\n\ntype Ref = HTMLButtonElement;\n\nconst AppliedFilterButton = forwardRef<Ref, AppliedFilterButtonProps>((props, ref) => {\n const { name, className, children, onClickFilterButton, 'data-test-id': testId } = props;\n\n const hasDescription = Children.count(children) !== 0;\n\n return (\n <div data-test-id={testId}>\n <button\n aria-haspopup\n className={cx(styles.appliedButton, className)}\n ref={ref}\n onClick={onClickFilterButton}\n >\n {name && (\n <span className={styles.appliedName} data-test-id={`${testId}-name`}>\n {name}\n {hasDescription && ':'}\n </span>\n )}\n {hasDescription && (\n <span className={styles.appliedDescription} data-test-id={`${testId}-description`}>\n {children}\n </span>\n )}\n <ExpandMore size=\"small\" data-test-id={`${testId}-expand`} />\n </button>\n </div>\n );\n});\n\nAppliedFilterButton.displayName = 'AppliedFilterButton';\n\nexport type { AppliedFilterButtonProps };\nexport { AppliedFilterButton };\n","import type { MenuProps } from '@launchpad-ui/menu';\nimport type { ChangeEvent, ReactNode } from 'react';\n\nimport { Button } from '@launchpad-ui/button';\nimport { Check } from '@launchpad-ui/icons';\nimport { Menu, MenuDivider, MenuItem, MenuSearch } from '@launchpad-ui/menu';\n\nimport styles from './styles/Filter.module.css';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype FilterOption<T = any> = {\n name?: ReactNode;\n isDisabled?: boolean;\n isDivider?: boolean;\n isChecked?: boolean;\n value: T | null;\n projKey?: string;\n nested?: boolean;\n groupHeader?: boolean;\n};\n\ntype FilterMenuProps = Pick<MenuProps<string>, 'enableVirtualization' | 'size' | 'data-test-id'> & {\n options: FilterOption[];\n onClearFilter?(): void;\n enableSearch?: boolean;\n searchValue?: string;\n searchId?: string;\n searchPlaceholder?: string;\n searchAriaLabel?: string;\n onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;\n onSelect?(): void;\n isLoading?: boolean;\n disabledOptionTooltip?: string;\n};\n\nconst FilterMenu = ({\n options,\n onClearFilter,\n enableSearch,\n searchValue,\n searchPlaceholder,\n searchAriaLabel,\n searchId,\n onSelect,\n onSearchChange,\n isLoading = false,\n disabledOptionTooltip,\n enableVirtualization,\n size,\n 'data-test-id': testId = 'filter-menu',\n}: FilterMenuProps) => {\n const filterOptions = isLoading\n ? [{ name: 'loading...', value: 'loading...', isDisabled: true }]\n : options;\n\n return (\n <>\n {onClearFilter && (\n <Button\n tabIndex={0}\n className={styles.filterClearButton}\n onClick={onClearFilter}\n kind=\"link\"\n data-test-id=\"clear-filter-button\"\n >\n CLEAR FILTER\n </Button>\n )}\n <Menu\n enableVirtualization={enableVirtualization}\n size={size}\n data-test-id={testId}\n onSelect={onSelect}\n >\n {enableSearch && (\n <MenuSearch\n value={searchValue}\n id={searchId}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n ariaLabel={searchAriaLabel}\n />\n )}\n {filterOptions.map((option, index) => {\n if (option.isDivider) {\n return <MenuDivider key={`divider-${index}`} />;\n }\n return (\n <MenuItem\n item={option}\n disabled={option.isDisabled}\n icon={option.isChecked ? Check : null}\n key={option.value}\n role=\"menuitemradio\"\n aria-checked={option.isChecked ? 'true' : undefined}\n nested={option.nested}\n groupHeader={option.groupHeader}\n tooltip={\n option.isDisabled && disabledOptionTooltip ? disabledOptionTooltip : undefined\n }\n tooltipPlacement=\"right\"\n >\n {option.name}\n </MenuItem>\n );\n })}\n </Menu>\n </>\n );\n};\n\nexport { FilterMenu };\nexport type { FilterOption, FilterMenuProps };\n","import type { FilterOption } from './FilterMenu';\nimport type { ChangeEvent, ReactNode } from 'react';\n\nimport { Dropdown } from '@launchpad-ui/dropdown';\n\nimport { AppliedFilterButton } from './AppliedFilterButton';\nimport { FilterMenu } from './FilterMenu';\n\nconst SEARCH_INPUT_THRESHOLD = 4;\n\ntype AppliedFilterProps = {\n searchValue?: string;\n onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;\n onClearFilter?(): void;\n searchPlaceholder?: string;\n name?: ReactNode;\n description: ReactNode;\n options: FilterOption[];\n className?: string;\n onStateChange?({ isOpen }: { isOpen?: boolean }): void;\n onSelect?(item: FilterOption): void;\n isEmpty?: boolean;\n isLoading?: boolean;\n onClickFilterButton?(): void;\n searchAriaLabel?: string;\n searchId?: string;\n 'data-test-id'?: string;\n};\n\nconst AppliedFilter = ({\n searchValue,\n onSearchChange,\n searchPlaceholder,\n name,\n description,\n options,\n className,\n isEmpty,\n isLoading,\n onClickFilterButton,\n onClearFilter,\n searchAriaLabel,\n searchId,\n 'data-test-id': testId = 'applied-filter',\n ...props\n}: AppliedFilterProps) => {\n const enableSearch =\n onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);\n\n return (\n <Dropdown targetClassName={className} placement=\"bottom-start\" enableArrow={false} {...props}>\n <AppliedFilterButton\n data-test-id={testId}\n name={name}\n onClickFilterButton={onClickFilterButton}\n >\n {description}\n </AppliedFilterButton>\n <FilterMenu\n options={options}\n searchValue={searchValue}\n searchPlaceholder={searchPlaceholder}\n enableSearch={enableSearch}\n searchAriaLabel={searchAriaLabel}\n searchId={searchId}\n onSearchChange={onSearchChange}\n onClearFilter={onClearFilter}\n isLoading={isLoading}\n />\n </Dropdown>\n );\n};\n\nexport type { AppliedFilterProps };\nexport { AppliedFilter };\n","import type { ReactNode, SyntheticEvent, MouseEvent } from 'react';\n\nimport { IconButton } from '@launchpad-ui/button';\nimport { Close, ExpandMore } from '@launchpad-ui/icons';\nimport { Tooltip } from '@launchpad-ui/tooltip';\nimport { VisuallyHidden } from '@react-aria/visually-hidden';\nimport { cx } from 'classix';\nimport { Children, forwardRef, useId } from 'react';\n\nimport styles from './styles/Filter.module.css';\n\ntype FilterButtonProps = {\n name: ReactNode;\n hideName?: boolean;\n isClearable?: boolean;\n onClear?(event: SyntheticEvent): void;\n className?: string;\n isSelected?: boolean;\n clearTooltip?: string | JSX.Element;\n children?: ReactNode;\n disabled?: boolean;\n onClickFilterButton?(): void;\n 'data-test-id'?: string;\n ariaLabel?: string;\n};\n\ntype Ref = HTMLButtonElement;\n\nconst FilterButton = forwardRef<Ref, FilterButtonProps>((props, ref) => {\n const {\n children,\n name,\n hideName,\n isClearable,\n clearTooltip,\n onClear,\n disabled,\n isSelected,\n onClickFilterButton,\n className,\n 'data-test-id': testId = 'filter-button',\n ariaLabel = 'Clear filter',\n ...rest\n } = props;\n const nameId = useId();\n const descriptionId = useId();\n\n const hasDescription = Children.count(children) !== 0;\n\n const nameElement = (\n <span className={styles.name}>\n {name}\n {hasDescription && ':'}\n </span>\n );\n\n const isDisabled = disabled;\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) return event.preventDefault();\n onClickFilterButton?.();\n };\n\n return (\n <div className={styles.buttonContainer} data-test-id={testId}>\n <button\n {...rest}\n aria-labelledby={`${nameId} ${hasDescription ? descriptionId : ''}`}\n aria-haspopup\n disabled={isDisabled}\n aria-disabled={isDisabled}\n className={cx(styles.button, className, (isClearable || isSelected) && styles.isClearable)}\n ref={ref}\n onClick={handleClick}\n >\n {hideName ? (\n <VisuallyHidden id={nameId}>{nameElement}</VisuallyHidden>\n ) : (\n <span id={nameId}>{nameElement}</span>\n )}\n {hasDescription && (\n <span id={descriptionId} className={styles.description}>\n {children}\n </span>\n )}\n {!isClearable && <ExpandMore size=\"small\" />}\n </button>\n {isClearable && (\n <Tooltip targetClassName={styles.clearTooltip} content={clearTooltip}>\n <IconButton\n aria-label={ariaLabel}\n className={styles.clear}\n data-test-id=\"clear-filter-button\"\n icon={<Close size=\"tiny\" />}\n size=\"small\"\n onClick={onClear}\n />\n </Tooltip>\n )}\n </div>\n );\n});\n\nFilterButton.defaultProps = {\n clearTooltip: 'Clear filter',\n};\n\nFilterButton.displayName = 'FilterButton';\n\nexport { FilterButton };\nexport type { FilterButtonProps };\n","import type { FilterOption } from './FilterMenu';\nimport type { MenuProps } from '@launchpad-ui/menu';\nimport type { ChangeEvent, ReactNode, SyntheticEvent } from 'react';\n\nimport { Dropdown } from '@launchpad-ui/dropdown';\nimport { cx } from 'classix';\n\nimport { FilterButton } from './FilterButton';\nimport { FilterMenu } from './FilterMenu';\nimport styles from './styles/Filter.module.css';\n\nconst SEARCH_INPUT_THRESHOLD = 4;\n\ntype FilterProps = Pick<MenuProps<string>, 'size' | 'enableVirtualization'> & {\n searchValue?: string;\n onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;\n searchPlaceholder?: string;\n searchAriaLabel?: string;\n name: ReactNode;\n hideName?: boolean;\n description: ReactNode;\n options: FilterOption[];\n isClearable?: boolean;\n onClear?(): void;\n className?: string;\n onStateChange?({ isOpen }: { isOpen?: boolean }): void;\n isSelected?: boolean;\n searchId?: string;\n onSelect?(item: FilterOption): void;\n isEmpty?: boolean;\n isLoading?: boolean;\n disabled?: boolean;\n onClickFilterButton?(): void;\n disabledOptionTooltip?: string;\n 'data-test-id'?: string;\n triggerTestId?: string;\n clearAriaLabel?: string;\n};\n\nconst Filter = ({\n searchValue,\n onSearchChange,\n searchPlaceholder,\n searchAriaLabel,\n name,\n hideName,\n description,\n options,\n isClearable,\n onClear,\n isSelected,\n className,\n isEmpty,\n searchId,\n isLoading,\n onClickFilterButton,\n disabledOptionTooltip,\n 'data-test-id': testId = 'filter',\n size,\n disabled,\n enableVirtualization,\n clearAriaLabel,\n ...props\n}: FilterProps) => {\n const enableSearch =\n onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);\n\n const dropdownClasses = cx(styles.filter, className);\n\n const handleClear = (event: SyntheticEvent) => {\n event.preventDefault();\n onClear?.();\n };\n\n return (\n <Dropdown\n targetTestId={testId}\n disabled={disabled}\n targetClassName={dropdownClasses}\n {...props}\n >\n <FilterButton\n isClearable={isClearable}\n onClear={handleClear}\n name={name}\n hideName={hideName}\n disabled={disabled}\n isSelected={isSelected}\n onClickFilterButton={onClickFilterButton}\n ariaLabel={clearAriaLabel}\n >\n {description}\n </FilterButton>\n <FilterMenu\n options={options}\n searchId={searchId}\n searchValue={searchValue}\n searchPlaceholder={searchPlaceholder}\n searchAriaLabel={searchAriaLabel}\n enableSearch={enableSearch}\n onSearchChange={onSearchChange}\n isLoading={isLoading}\n disabledOptionTooltip={disabledOptionTooltip}\n size={size}\n enableVirtualization={enableVirtualization}\n />\n </Dropdown>\n );\n};\n\nexport { Filter };\nexport type { FilterProps };\n"],"names":["name","SEARCH_INPUT_THRESHOLD","description","isClearable","clearTooltip"],"mappings":"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"}
|
package/dist/index.js
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require('./style.css');
|
2
2
|
"use strict";
|
3
|
-
Object.
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
4
|
+
const jsxRuntime = require("react/jsx-runtime");
|
4
5
|
const dropdown = require("@launchpad-ui/dropdown");
|
5
6
|
const icons = require("@launchpad-ui/icons");
|
6
7
|
const classix = require("classix");
|
7
8
|
const react = require("react");
|
8
|
-
const jsxRuntime = require("react/jsx-runtime");
|
9
9
|
const button$1 = require("@launchpad-ui/button");
|
10
10
|
const menu = require("@launchpad-ui/menu");
|
11
11
|
const tooltip = require("@launchpad-ui/tooltip");
|
@@ -37,35 +37,25 @@ const styles = {
|
|
37
37
|
filterClearButton
|
38
38
|
};
|
39
39
|
const AppliedFilterButton = react.forwardRef((props, ref) => {
|
40
|
-
const {
|
41
|
-
name: name2,
|
42
|
-
className,
|
43
|
-
children,
|
44
|
-
onClickFilterButton,
|
45
|
-
"data-test-id": testId
|
46
|
-
} = props;
|
40
|
+
const { name: name2, className, children, onClickFilterButton, "data-test-id": testId } = props;
|
47
41
|
const hasDescription = react.Children.count(children) !== 0;
|
48
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", {
|
49
|
-
"
|
50
|
-
|
42
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": testId, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
43
|
+
"button",
|
44
|
+
{
|
51
45
|
"aria-haspopup": true,
|
52
46
|
className: classix.cx(styles.appliedButton, className),
|
53
47
|
ref,
|
54
48
|
onClick: onClickFilterButton,
|
55
|
-
children: [
|
56
|
-
className: styles.appliedName,
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
className: styles.appliedDescription,
|
61
|
-
"data-test-id": `${testId}-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
"data-test-id": `${testId}-expand`
|
66
|
-
})]
|
67
|
-
})
|
68
|
-
});
|
49
|
+
children: [
|
50
|
+
name2 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: styles.appliedName, "data-test-id": `${testId}-name`, children: [
|
51
|
+
name2,
|
52
|
+
hasDescription && ":"
|
53
|
+
] }),
|
54
|
+
hasDescription && /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.appliedDescription, "data-test-id": `${testId}-description`, children }),
|
55
|
+
/* @__PURE__ */ jsxRuntime.jsx(icons.ExpandMore, { size: "small", "data-test-id": `${testId}-expand` })
|
56
|
+
]
|
57
|
+
}
|
58
|
+
) });
|
69
59
|
});
|
70
60
|
AppliedFilterButton.displayName = "AppliedFilterButton";
|
71
61
|
const FilterMenu = ({
|
@@ -84,49 +74,62 @@ const FilterMenu = ({
|
|
84
74
|
size,
|
85
75
|
"data-test-id": testId = "filter-menu"
|
86
76
|
}) => {
|
87
|
-
const filterOptions = isLoading ? [{
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
77
|
+
const filterOptions = isLoading ? [{ name: "loading...", value: "loading...", isDisabled: true }] : options;
|
78
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
79
|
+
onClearFilter && /* @__PURE__ */ jsxRuntime.jsx(
|
80
|
+
button$1.Button,
|
81
|
+
{
|
82
|
+
tabIndex: 0,
|
83
|
+
className: styles.filterClearButton,
|
84
|
+
onClick: onClearFilter,
|
85
|
+
kind: "link",
|
86
|
+
"data-test-id": "clear-filter-button",
|
87
|
+
children: "CLEAR FILTER"
|
88
|
+
}
|
89
|
+
),
|
90
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
91
|
+
menu.Menu,
|
92
|
+
{
|
93
|
+
enableVirtualization,
|
94
|
+
size,
|
95
|
+
"data-test-id": testId,
|
96
|
+
onSelect,
|
97
|
+
children: [
|
98
|
+
enableSearch && /* @__PURE__ */ jsxRuntime.jsx(
|
99
|
+
menu.MenuSearch,
|
100
|
+
{
|
101
|
+
value: searchValue,
|
102
|
+
id: searchId,
|
103
|
+
placeholder: searchPlaceholder,
|
104
|
+
onChange: onSearchChange,
|
105
|
+
ariaLabel: searchAriaLabel
|
106
|
+
}
|
107
|
+
),
|
108
|
+
filterOptions.map((option, index) => {
|
109
|
+
if (option.isDivider) {
|
110
|
+
return /* @__PURE__ */ jsxRuntime.jsx(menu.MenuDivider, {}, `divider-${index}`);
|
111
|
+
}
|
112
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
113
|
+
menu.MenuItem,
|
114
|
+
{
|
115
|
+
item: option,
|
116
|
+
disabled: option.isDisabled,
|
117
|
+
icon: option.isChecked ? icons.Check : null,
|
118
|
+
role: "menuitemradio",
|
119
|
+
"aria-checked": option.isChecked ? "true" : void 0,
|
120
|
+
nested: option.nested,
|
121
|
+
groupHeader: option.groupHeader,
|
122
|
+
tooltip: option.isDisabled && disabledOptionTooltip ? disabledOptionTooltip : void 0,
|
123
|
+
tooltipPlacement: "right",
|
124
|
+
children: option.name
|
125
|
+
},
|
126
|
+
option.value
|
127
|
+
);
|
128
|
+
})
|
129
|
+
]
|
130
|
+
}
|
131
|
+
)
|
132
|
+
] });
|
130
133
|
};
|
131
134
|
const SEARCH_INPUT_THRESHOLD$1 = 4;
|
132
135
|
const AppliedFilter = ({
|
@@ -147,28 +150,31 @@ const AppliedFilter = ({
|
|
147
150
|
...props
|
148
151
|
}) => {
|
149
152
|
const enableSearch = onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD$1 || !isEmpty);
|
150
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(dropdown.Dropdown, {
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
153
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(dropdown.Dropdown, { targetClassName: className, placement: "bottom-start", enableArrow: false, ...props, children: [
|
154
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
155
|
+
AppliedFilterButton,
|
156
|
+
{
|
157
|
+
"data-test-id": testId,
|
158
|
+
name: name2,
|
159
|
+
onClickFilterButton,
|
160
|
+
children: description2
|
161
|
+
}
|
162
|
+
),
|
163
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
164
|
+
FilterMenu,
|
165
|
+
{
|
166
|
+
options,
|
167
|
+
searchValue,
|
168
|
+
searchPlaceholder,
|
169
|
+
enableSearch,
|
170
|
+
searchAriaLabel,
|
171
|
+
searchId,
|
172
|
+
onSearchChange,
|
173
|
+
onClearFilter,
|
174
|
+
isLoading
|
175
|
+
}
|
176
|
+
)
|
177
|
+
] });
|
172
178
|
};
|
173
179
|
const FilterButton = react.forwardRef((props, ref) => {
|
174
180
|
const {
|
@@ -189,56 +195,47 @@ const FilterButton = react.forwardRef((props, ref) => {
|
|
189
195
|
const nameId = react.useId();
|
190
196
|
const descriptionId = react.useId();
|
191
197
|
const hasDescription = react.Children.count(children) !== 0;
|
192
|
-
const nameElement = /* @__PURE__ */ jsxRuntime.jsxs("span", {
|
193
|
-
|
194
|
-
|
195
|
-
});
|
198
|
+
const nameElement = /* @__PURE__ */ jsxRuntime.jsxs("span", { className: styles.name, children: [
|
199
|
+
name2,
|
200
|
+
hasDescription && ":"
|
201
|
+
] });
|
196
202
|
const isDisabled = disabled;
|
197
203
|
const handleClick = (event) => {
|
198
204
|
if (isDisabled)
|
199
205
|
return event.preventDefault();
|
200
206
|
onClickFilterButton == null ? void 0 : onClickFilterButton();
|
201
207
|
};
|
202
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
}), !isClearable2 && /* @__PURE__ */ jsxRuntime.jsx(icons.ExpandMore, {
|
225
|
-
size: "small"
|
226
|
-
})]
|
227
|
-
}), isClearable2 && /* @__PURE__ */ jsxRuntime.jsx(tooltip.Tooltip, {
|
228
|
-
targetClassName: styles.clearTooltip,
|
229
|
-
content: clearTooltip2,
|
230
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(button$1.IconButton, {
|
208
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.buttonContainer, "data-test-id": testId, children: [
|
209
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
210
|
+
"button",
|
211
|
+
{
|
212
|
+
...rest,
|
213
|
+
"aria-labelledby": `${nameId} ${hasDescription ? descriptionId : ""}`,
|
214
|
+
"aria-haspopup": true,
|
215
|
+
disabled: isDisabled,
|
216
|
+
"aria-disabled": isDisabled,
|
217
|
+
className: classix.cx(styles.button, className, (isClearable2 || isSelected) && styles.isClearable),
|
218
|
+
ref,
|
219
|
+
onClick: handleClick,
|
220
|
+
children: [
|
221
|
+
hideName ? /* @__PURE__ */ jsxRuntime.jsx(visuallyHidden.VisuallyHidden, { id: nameId, children: nameElement }) : /* @__PURE__ */ jsxRuntime.jsx("span", { id: nameId, children: nameElement }),
|
222
|
+
hasDescription && /* @__PURE__ */ jsxRuntime.jsx("span", { id: descriptionId, className: styles.description, children }),
|
223
|
+
!isClearable2 && /* @__PURE__ */ jsxRuntime.jsx(icons.ExpandMore, { size: "small" })
|
224
|
+
]
|
225
|
+
}
|
226
|
+
),
|
227
|
+
isClearable2 && /* @__PURE__ */ jsxRuntime.jsx(tooltip.Tooltip, { targetClassName: styles.clearTooltip, content: clearTooltip2, children: /* @__PURE__ */ jsxRuntime.jsx(
|
228
|
+
button$1.IconButton,
|
229
|
+
{
|
231
230
|
"aria-label": ariaLabel,
|
232
231
|
className: styles.clear,
|
233
232
|
"data-test-id": "clear-filter-button",
|
234
|
-
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Close, {
|
235
|
-
size: "tiny"
|
236
|
-
}),
|
233
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Close, { size: "tiny" }),
|
237
234
|
size: "small",
|
238
235
|
onClick: onClear
|
239
|
-
}
|
240
|
-
})
|
241
|
-
});
|
236
|
+
}
|
237
|
+
) })
|
238
|
+
] });
|
242
239
|
});
|
243
240
|
FilterButton.defaultProps = {
|
244
241
|
clearTooltip: "Clear filter"
|
@@ -276,35 +273,47 @@ const Filter = ({
|
|
276
273
|
event.preventDefault();
|
277
274
|
onClear == null ? void 0 : onClear();
|
278
275
|
};
|
279
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
...props,
|
284
|
-
children: [/* @__PURE__ */ jsxRuntime.jsx(FilterButton, {
|
285
|
-
isClearable: isClearable2,
|
286
|
-
onClear: handleClear,
|
287
|
-
name: name2,
|
288
|
-
hideName,
|
276
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
277
|
+
dropdown.Dropdown,
|
278
|
+
{
|
279
|
+
targetTestId: testId,
|
289
280
|
disabled,
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
281
|
+
targetClassName: dropdownClasses,
|
282
|
+
...props,
|
283
|
+
children: [
|
284
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
285
|
+
FilterButton,
|
286
|
+
{
|
287
|
+
isClearable: isClearable2,
|
288
|
+
onClear: handleClear,
|
289
|
+
name: name2,
|
290
|
+
hideName,
|
291
|
+
disabled,
|
292
|
+
isSelected,
|
293
|
+
onClickFilterButton,
|
294
|
+
ariaLabel: clearAriaLabel,
|
295
|
+
children: description2
|
296
|
+
}
|
297
|
+
),
|
298
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
299
|
+
FilterMenu,
|
300
|
+
{
|
301
|
+
options,
|
302
|
+
searchId,
|
303
|
+
searchValue,
|
304
|
+
searchPlaceholder,
|
305
|
+
searchAriaLabel,
|
306
|
+
enableSearch,
|
307
|
+
onSearchChange,
|
308
|
+
isLoading,
|
309
|
+
disabledOptionTooltip,
|
310
|
+
size,
|
311
|
+
enableVirtualization
|
312
|
+
}
|
313
|
+
)
|
314
|
+
]
|
315
|
+
}
|
316
|
+
);
|
308
317
|
};
|
309
318
|
exports.AppliedFilter = AppliedFilter;
|
310
319
|
exports.Filter = Filter;
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/AppliedFilterButton.tsx","../src/FilterMenu.tsx","../src/AppliedFilter.tsx","../src/FilterButton.tsx","../src/Filter.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { ExpandMore } from '@launchpad-ui/icons';\nimport { cx } from 'classix';\nimport { Children, forwardRef } from 'react';\n\nimport styles from './styles/Filter.module.css';\n\ntype AppliedFilterButtonProps = {\n name?: ReactNode;\n className?: string;\n children: ReactNode;\n onClickFilterButton?(): void;\n 'data-test-id': string;\n};\n\ntype Ref = HTMLButtonElement;\n\nconst AppliedFilterButton = forwardRef<Ref, AppliedFilterButtonProps>((props, ref) => {\n const { name, className, children, onClickFilterButton, 'data-test-id': testId } = props;\n\n const hasDescription = Children.count(children) !== 0;\n\n return (\n <div data-test-id={testId}>\n <button\n aria-haspopup\n className={cx(styles.appliedButton, className)}\n ref={ref}\n onClick={onClickFilterButton}\n >\n {name && (\n <span className={styles.appliedName} data-test-id={`${testId}-name`}>\n {name}\n {hasDescription && ':'}\n </span>\n )}\n {hasDescription && (\n <span className={styles.appliedDescription} data-test-id={`${testId}-description`}>\n {children}\n </span>\n )}\n <ExpandMore size=\"small\" data-test-id={`${testId}-expand`} />\n </button>\n </div>\n );\n});\n\nAppliedFilterButton.displayName = 'AppliedFilterButton';\n\nexport type { AppliedFilterButtonProps };\nexport { AppliedFilterButton };\n","import type { MenuProps } from '@launchpad-ui/menu';\nimport type { ChangeEvent, ReactNode } from 'react';\n\nimport { Button } from '@launchpad-ui/button';\nimport { Check } from '@launchpad-ui/icons';\nimport { Menu, MenuDivider, MenuItem, MenuSearch } from '@launchpad-ui/menu';\n\nimport styles from './styles/Filter.module.css';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype FilterOption<T = any> = {\n name?: ReactNode;\n isDisabled?: boolean;\n isDivider?: boolean;\n isChecked?: boolean;\n value: T | null;\n projKey?: string;\n nested?: boolean;\n groupHeader?: boolean;\n};\n\ntype FilterMenuProps = Pick<MenuProps<string>, 'enableVirtualization' | 'size' | 'data-test-id'> & {\n options: FilterOption[];\n onClearFilter?(): void;\n enableSearch?: boolean;\n searchValue?: string;\n searchId?: string;\n searchPlaceholder?: string;\n searchAriaLabel?: string;\n onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;\n onSelect?(): void;\n isLoading?: boolean;\n disabledOptionTooltip?: string;\n};\n\nconst FilterMenu = ({\n options,\n onClearFilter,\n enableSearch,\n searchValue,\n searchPlaceholder,\n searchAriaLabel,\n searchId,\n onSelect,\n onSearchChange,\n isLoading = false,\n disabledOptionTooltip,\n enableVirtualization,\n size,\n 'data-test-id': testId = 'filter-menu',\n}: FilterMenuProps) => {\n const filterOptions = isLoading\n ? [{ name: 'loading...', value: 'loading...', isDisabled: true }]\n : options;\n\n return (\n <>\n {onClearFilter && (\n <Button\n tabIndex={0}\n className={styles.filterClearButton}\n onClick={onClearFilter}\n kind=\"link\"\n data-test-id=\"clear-filter-button\"\n >\n CLEAR FILTER\n </Button>\n )}\n <Menu\n enableVirtualization={enableVirtualization}\n size={size}\n data-test-id={testId}\n onSelect={onSelect}\n >\n {enableSearch && (\n <MenuSearch\n value={searchValue}\n id={searchId}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n ariaLabel={searchAriaLabel}\n />\n )}\n {filterOptions.map((option, index) => {\n if (option.isDivider) {\n return <MenuDivider key={`divider-${index}`} />;\n }\n return (\n <MenuItem\n item={option}\n disabled={option.isDisabled}\n icon={option.isChecked ? Check : null}\n key={option.value}\n role=\"menuitemradio\"\n aria-checked={option.isChecked ? 'true' : undefined}\n nested={option.nested}\n groupHeader={option.groupHeader}\n tooltip={\n option.isDisabled && disabledOptionTooltip ? disabledOptionTooltip : undefined\n }\n tooltipPlacement=\"right\"\n >\n {option.name}\n </MenuItem>\n );\n })}\n </Menu>\n </>\n );\n};\n\nexport { FilterMenu };\nexport type { FilterOption, FilterMenuProps };\n","import type { FilterOption } from './FilterMenu';\nimport type { ChangeEvent, ReactNode } from 'react';\n\nimport { Dropdown } from '@launchpad-ui/dropdown';\n\nimport { AppliedFilterButton } from './AppliedFilterButton';\nimport { FilterMenu } from './FilterMenu';\n\nconst SEARCH_INPUT_THRESHOLD = 4;\n\ntype AppliedFilterProps = {\n searchValue?: string;\n onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;\n onClearFilter?(): void;\n searchPlaceholder?: string;\n name?: ReactNode;\n description: ReactNode;\n options: FilterOption[];\n className?: string;\n onStateChange?({ isOpen }: { isOpen?: boolean }): void;\n onSelect?(item: FilterOption): void;\n isEmpty?: boolean;\n isLoading?: boolean;\n onClickFilterButton?(): void;\n searchAriaLabel?: string;\n searchId?: string;\n 'data-test-id'?: string;\n};\n\nconst AppliedFilter = ({\n searchValue,\n onSearchChange,\n searchPlaceholder,\n name,\n description,\n options,\n className,\n isEmpty,\n isLoading,\n onClickFilterButton,\n onClearFilter,\n searchAriaLabel,\n searchId,\n 'data-test-id': testId = 'applied-filter',\n ...props\n}: AppliedFilterProps) => {\n const enableSearch =\n onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);\n\n return (\n <Dropdown targetClassName={className} placement=\"bottom-start\" enableArrow={false} {...props}>\n <AppliedFilterButton\n data-test-id={testId}\n name={name}\n onClickFilterButton={onClickFilterButton}\n >\n {description}\n </AppliedFilterButton>\n <FilterMenu\n options={options}\n searchValue={searchValue}\n searchPlaceholder={searchPlaceholder}\n enableSearch={enableSearch}\n searchAriaLabel={searchAriaLabel}\n searchId={searchId}\n onSearchChange={onSearchChange}\n onClearFilter={onClearFilter}\n isLoading={isLoading}\n />\n </Dropdown>\n );\n};\n\nexport type { AppliedFilterProps };\nexport { AppliedFilter };\n","import type { ReactNode, SyntheticEvent, MouseEvent } from 'react';\n\nimport { IconButton } from '@launchpad-ui/button';\nimport { Close, ExpandMore } from '@launchpad-ui/icons';\nimport { Tooltip } from '@launchpad-ui/tooltip';\nimport { VisuallyHidden } from '@react-aria/visually-hidden';\nimport { cx } from 'classix';\nimport { Children, forwardRef, useId } from 'react';\n\nimport styles from './styles/Filter.module.css';\n\ntype FilterButtonProps = {\n name: ReactNode;\n hideName?: boolean;\n isClearable?: boolean;\n onClear?(event: SyntheticEvent): void;\n className?: string;\n isSelected?: boolean;\n clearTooltip?: string | JSX.Element;\n children?: ReactNode;\n disabled?: boolean;\n onClickFilterButton?(): void;\n 'data-test-id'?: string;\n ariaLabel?: string;\n};\n\ntype Ref = HTMLButtonElement;\n\nconst FilterButton = forwardRef<Ref, FilterButtonProps>((props, ref) => {\n const {\n children,\n name,\n hideName,\n isClearable,\n clearTooltip,\n onClear,\n disabled,\n isSelected,\n onClickFilterButton,\n className,\n 'data-test-id': testId = 'filter-button',\n ariaLabel = 'Clear filter',\n ...rest\n } = props;\n const nameId = useId();\n const descriptionId = useId();\n\n const hasDescription = Children.count(children) !== 0;\n\n const nameElement = (\n <span className={styles.name}>\n {name}\n {hasDescription && ':'}\n </span>\n );\n\n const isDisabled = disabled;\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) return event.preventDefault();\n onClickFilterButton?.();\n };\n\n return (\n <div className={styles.buttonContainer} data-test-id={testId}>\n <button\n {...rest}\n aria-labelledby={`${nameId} ${hasDescription ? descriptionId : ''}`}\n aria-haspopup\n disabled={isDisabled}\n aria-disabled={isDisabled}\n className={cx(styles.button, className, (isClearable || isSelected) && styles.isClearable)}\n ref={ref}\n onClick={handleClick}\n >\n {hideName ? (\n <VisuallyHidden id={nameId}>{nameElement}</VisuallyHidden>\n ) : (\n <span id={nameId}>{nameElement}</span>\n )}\n {hasDescription && (\n <span id={descriptionId} className={styles.description}>\n {children}\n </span>\n )}\n {!isClearable && <ExpandMore size=\"small\" />}\n </button>\n {isClearable && (\n <Tooltip targetClassName={styles.clearTooltip} content={clearTooltip}>\n <IconButton\n aria-label={ariaLabel}\n className={styles.clear}\n data-test-id=\"clear-filter-button\"\n icon={<Close size=\"tiny\" />}\n size=\"small\"\n onClick={onClear}\n />\n </Tooltip>\n )}\n </div>\n );\n});\n\nFilterButton.defaultProps = {\n clearTooltip: 'Clear filter',\n};\n\nFilterButton.displayName = 'FilterButton';\n\nexport { FilterButton };\nexport type { FilterButtonProps };\n","import type { FilterOption } from './FilterMenu';\nimport type { MenuProps } from '@launchpad-ui/menu';\nimport type { ChangeEvent, ReactNode, SyntheticEvent } from 'react';\n\nimport { Dropdown } from '@launchpad-ui/dropdown';\nimport { cx } from 'classix';\n\nimport { FilterButton } from './FilterButton';\nimport { FilterMenu } from './FilterMenu';\nimport styles from './styles/Filter.module.css';\n\nconst SEARCH_INPUT_THRESHOLD = 4;\n\ntype FilterProps = Pick<MenuProps<string>, 'size' | 'enableVirtualization'> & {\n searchValue?: string;\n onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;\n searchPlaceholder?: string;\n searchAriaLabel?: string;\n name: ReactNode;\n hideName?: boolean;\n description: ReactNode;\n options: FilterOption[];\n isClearable?: boolean;\n onClear?(): void;\n className?: string;\n onStateChange?({ isOpen }: { isOpen?: boolean }): void;\n isSelected?: boolean;\n searchId?: string;\n onSelect?(item: FilterOption): void;\n isEmpty?: boolean;\n isLoading?: boolean;\n disabled?: boolean;\n onClickFilterButton?(): void;\n disabledOptionTooltip?: string;\n 'data-test-id'?: string;\n triggerTestId?: string;\n clearAriaLabel?: string;\n};\n\nconst Filter = ({\n searchValue,\n onSearchChange,\n searchPlaceholder,\n searchAriaLabel,\n name,\n hideName,\n description,\n options,\n isClearable,\n onClear,\n isSelected,\n className,\n isEmpty,\n searchId,\n isLoading,\n onClickFilterButton,\n disabledOptionTooltip,\n 'data-test-id': testId = 'filter',\n size,\n disabled,\n enableVirtualization,\n clearAriaLabel,\n ...props\n}: FilterProps) => {\n const enableSearch =\n onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);\n\n const dropdownClasses = cx(styles.filter, className);\n\n const handleClear = (event: SyntheticEvent) => {\n event.preventDefault();\n onClear?.();\n };\n\n return (\n <Dropdown\n targetTestId={testId}\n disabled={disabled}\n targetClassName={dropdownClasses}\n {...props}\n >\n <FilterButton\n isClearable={isClearable}\n onClear={handleClear}\n name={name}\n hideName={hideName}\n disabled={disabled}\n isSelected={isSelected}\n onClickFilterButton={onClickFilterButton}\n ariaLabel={clearAriaLabel}\n >\n {description}\n </FilterButton>\n <FilterMenu\n options={options}\n searchId={searchId}\n searchValue={searchValue}\n searchPlaceholder={searchPlaceholder}\n searchAriaLabel={searchAriaLabel}\n enableSearch={enableSearch}\n onSearchChange={onSearchChange}\n isLoading={isLoading}\n disabledOptionTooltip={disabledOptionTooltip}\n size={size}\n enableVirtualization={enableVirtualization}\n />\n </Dropdown>\n );\n};\n\nexport { Filter };\nexport type { FilterProps };\n"],"names":["AppliedFilterButton","forwardRef","props","ref","name","className","children","onClickFilterButton","testId","hasDescription","Children","count","cx","styles","appliedButton","onClick","_jsxs","appliedName","_jsx","appliedDescription","ExpandMore","size","displayName","FilterMenu","options","onClearFilter","enableSearch","searchValue","searchPlaceholder","searchAriaLabel","searchId","onSelect","onSearchChange","isLoading","disabledOptionTooltip","enableVirtualization","filterOptions","value","isDisabled","_Fragment","Button","tabIndex","filterClearButton","kind","Menu","MenuSearch","id","placeholder","onChange","ariaLabel","map","option","index","isDivider","MenuDivider","MenuItem","item","disabled","icon","isChecked","Check","role","undefined","nested","groupHeader","tooltip","tooltipPlacement","SEARCH_INPUT_THRESHOLD","AppliedFilter","description","isEmpty","length","Dropdown","targetClassName","placement","enableArrow","FilterButton","hideName","isClearable","clearTooltip","onClear","isSelected","rest","nameId","useId","descriptionId","nameElement","handleClick","event","preventDefault","buttonContainer","button","VisuallyHidden","Tooltip","content","IconButton","clear","Close","defaultProps","Filter","clearAriaLabel","dropdownClasses","filter","handleClear","targetTestId"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/AppliedFilterButton.tsx","../src/FilterMenu.tsx","../src/AppliedFilter.tsx","../src/FilterButton.tsx","../src/Filter.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { ExpandMore } from '@launchpad-ui/icons';\nimport { cx } from 'classix';\nimport { Children, forwardRef } from 'react';\n\nimport styles from './styles/Filter.module.css';\n\ntype AppliedFilterButtonProps = {\n name?: ReactNode;\n className?: string;\n children: ReactNode;\n onClickFilterButton?(): void;\n 'data-test-id': string;\n};\n\ntype Ref = HTMLButtonElement;\n\nconst AppliedFilterButton = forwardRef<Ref, AppliedFilterButtonProps>((props, ref) => {\n const { name, className, children, onClickFilterButton, 'data-test-id': testId } = props;\n\n const hasDescription = Children.count(children) !== 0;\n\n return (\n <div data-test-id={testId}>\n <button\n aria-haspopup\n className={cx(styles.appliedButton, className)}\n ref={ref}\n onClick={onClickFilterButton}\n >\n {name && (\n <span className={styles.appliedName} data-test-id={`${testId}-name`}>\n {name}\n {hasDescription && ':'}\n </span>\n )}\n {hasDescription && (\n <span className={styles.appliedDescription} data-test-id={`${testId}-description`}>\n {children}\n </span>\n )}\n <ExpandMore size=\"small\" data-test-id={`${testId}-expand`} />\n </button>\n </div>\n );\n});\n\nAppliedFilterButton.displayName = 'AppliedFilterButton';\n\nexport type { AppliedFilterButtonProps };\nexport { AppliedFilterButton };\n","import type { MenuProps } from '@launchpad-ui/menu';\nimport type { ChangeEvent, ReactNode } from 'react';\n\nimport { Button } from '@launchpad-ui/button';\nimport { Check } from '@launchpad-ui/icons';\nimport { Menu, MenuDivider, MenuItem, MenuSearch } from '@launchpad-ui/menu';\n\nimport styles from './styles/Filter.module.css';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype FilterOption<T = any> = {\n name?: ReactNode;\n isDisabled?: boolean;\n isDivider?: boolean;\n isChecked?: boolean;\n value: T | null;\n projKey?: string;\n nested?: boolean;\n groupHeader?: boolean;\n};\n\ntype FilterMenuProps = Pick<MenuProps<string>, 'enableVirtualization' | 'size' | 'data-test-id'> & {\n options: FilterOption[];\n onClearFilter?(): void;\n enableSearch?: boolean;\n searchValue?: string;\n searchId?: string;\n searchPlaceholder?: string;\n searchAriaLabel?: string;\n onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;\n onSelect?(): void;\n isLoading?: boolean;\n disabledOptionTooltip?: string;\n};\n\nconst FilterMenu = ({\n options,\n onClearFilter,\n enableSearch,\n searchValue,\n searchPlaceholder,\n searchAriaLabel,\n searchId,\n onSelect,\n onSearchChange,\n isLoading = false,\n disabledOptionTooltip,\n enableVirtualization,\n size,\n 'data-test-id': testId = 'filter-menu',\n}: FilterMenuProps) => {\n const filterOptions = isLoading\n ? [{ name: 'loading...', value: 'loading...', isDisabled: true }]\n : options;\n\n return (\n <>\n {onClearFilter && (\n <Button\n tabIndex={0}\n className={styles.filterClearButton}\n onClick={onClearFilter}\n kind=\"link\"\n data-test-id=\"clear-filter-button\"\n >\n CLEAR FILTER\n </Button>\n )}\n <Menu\n enableVirtualization={enableVirtualization}\n size={size}\n data-test-id={testId}\n onSelect={onSelect}\n >\n {enableSearch && (\n <MenuSearch\n value={searchValue}\n id={searchId}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n ariaLabel={searchAriaLabel}\n />\n )}\n {filterOptions.map((option, index) => {\n if (option.isDivider) {\n return <MenuDivider key={`divider-${index}`} />;\n }\n return (\n <MenuItem\n item={option}\n disabled={option.isDisabled}\n icon={option.isChecked ? Check : null}\n key={option.value}\n role=\"menuitemradio\"\n aria-checked={option.isChecked ? 'true' : undefined}\n nested={option.nested}\n groupHeader={option.groupHeader}\n tooltip={\n option.isDisabled && disabledOptionTooltip ? disabledOptionTooltip : undefined\n }\n tooltipPlacement=\"right\"\n >\n {option.name}\n </MenuItem>\n );\n })}\n </Menu>\n </>\n );\n};\n\nexport { FilterMenu };\nexport type { FilterOption, FilterMenuProps };\n","import type { FilterOption } from './FilterMenu';\nimport type { ChangeEvent, ReactNode } from 'react';\n\nimport { Dropdown } from '@launchpad-ui/dropdown';\n\nimport { AppliedFilterButton } from './AppliedFilterButton';\nimport { FilterMenu } from './FilterMenu';\n\nconst SEARCH_INPUT_THRESHOLD = 4;\n\ntype AppliedFilterProps = {\n searchValue?: string;\n onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;\n onClearFilter?(): void;\n searchPlaceholder?: string;\n name?: ReactNode;\n description: ReactNode;\n options: FilterOption[];\n className?: string;\n onStateChange?({ isOpen }: { isOpen?: boolean }): void;\n onSelect?(item: FilterOption): void;\n isEmpty?: boolean;\n isLoading?: boolean;\n onClickFilterButton?(): void;\n searchAriaLabel?: string;\n searchId?: string;\n 'data-test-id'?: string;\n};\n\nconst AppliedFilter = ({\n searchValue,\n onSearchChange,\n searchPlaceholder,\n name,\n description,\n options,\n className,\n isEmpty,\n isLoading,\n onClickFilterButton,\n onClearFilter,\n searchAriaLabel,\n searchId,\n 'data-test-id': testId = 'applied-filter',\n ...props\n}: AppliedFilterProps) => {\n const enableSearch =\n onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);\n\n return (\n <Dropdown targetClassName={className} placement=\"bottom-start\" enableArrow={false} {...props}>\n <AppliedFilterButton\n data-test-id={testId}\n name={name}\n onClickFilterButton={onClickFilterButton}\n >\n {description}\n </AppliedFilterButton>\n <FilterMenu\n options={options}\n searchValue={searchValue}\n searchPlaceholder={searchPlaceholder}\n enableSearch={enableSearch}\n searchAriaLabel={searchAriaLabel}\n searchId={searchId}\n onSearchChange={onSearchChange}\n onClearFilter={onClearFilter}\n isLoading={isLoading}\n />\n </Dropdown>\n );\n};\n\nexport type { AppliedFilterProps };\nexport { AppliedFilter };\n","import type { ReactNode, SyntheticEvent, MouseEvent } from 'react';\n\nimport { IconButton } from '@launchpad-ui/button';\nimport { Close, ExpandMore } from '@launchpad-ui/icons';\nimport { Tooltip } from '@launchpad-ui/tooltip';\nimport { VisuallyHidden } from '@react-aria/visually-hidden';\nimport { cx } from 'classix';\nimport { Children, forwardRef, useId } from 'react';\n\nimport styles from './styles/Filter.module.css';\n\ntype FilterButtonProps = {\n name: ReactNode;\n hideName?: boolean;\n isClearable?: boolean;\n onClear?(event: SyntheticEvent): void;\n className?: string;\n isSelected?: boolean;\n clearTooltip?: string | JSX.Element;\n children?: ReactNode;\n disabled?: boolean;\n onClickFilterButton?(): void;\n 'data-test-id'?: string;\n ariaLabel?: string;\n};\n\ntype Ref = HTMLButtonElement;\n\nconst FilterButton = forwardRef<Ref, FilterButtonProps>((props, ref) => {\n const {\n children,\n name,\n hideName,\n isClearable,\n clearTooltip,\n onClear,\n disabled,\n isSelected,\n onClickFilterButton,\n className,\n 'data-test-id': testId = 'filter-button',\n ariaLabel = 'Clear filter',\n ...rest\n } = props;\n const nameId = useId();\n const descriptionId = useId();\n\n const hasDescription = Children.count(children) !== 0;\n\n const nameElement = (\n <span className={styles.name}>\n {name}\n {hasDescription && ':'}\n </span>\n );\n\n const isDisabled = disabled;\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) return event.preventDefault();\n onClickFilterButton?.();\n };\n\n return (\n <div className={styles.buttonContainer} data-test-id={testId}>\n <button\n {...rest}\n aria-labelledby={`${nameId} ${hasDescription ? descriptionId : ''}`}\n aria-haspopup\n disabled={isDisabled}\n aria-disabled={isDisabled}\n className={cx(styles.button, className, (isClearable || isSelected) && styles.isClearable)}\n ref={ref}\n onClick={handleClick}\n >\n {hideName ? (\n <VisuallyHidden id={nameId}>{nameElement}</VisuallyHidden>\n ) : (\n <span id={nameId}>{nameElement}</span>\n )}\n {hasDescription && (\n <span id={descriptionId} className={styles.description}>\n {children}\n </span>\n )}\n {!isClearable && <ExpandMore size=\"small\" />}\n </button>\n {isClearable && (\n <Tooltip targetClassName={styles.clearTooltip} content={clearTooltip}>\n <IconButton\n aria-label={ariaLabel}\n className={styles.clear}\n data-test-id=\"clear-filter-button\"\n icon={<Close size=\"tiny\" />}\n size=\"small\"\n onClick={onClear}\n />\n </Tooltip>\n )}\n </div>\n );\n});\n\nFilterButton.defaultProps = {\n clearTooltip: 'Clear filter',\n};\n\nFilterButton.displayName = 'FilterButton';\n\nexport { FilterButton };\nexport type { FilterButtonProps };\n","import type { FilterOption } from './FilterMenu';\nimport type { MenuProps } from '@launchpad-ui/menu';\nimport type { ChangeEvent, ReactNode, SyntheticEvent } from 'react';\n\nimport { Dropdown } from '@launchpad-ui/dropdown';\nimport { cx } from 'classix';\n\nimport { FilterButton } from './FilterButton';\nimport { FilterMenu } from './FilterMenu';\nimport styles from './styles/Filter.module.css';\n\nconst SEARCH_INPUT_THRESHOLD = 4;\n\ntype FilterProps = Pick<MenuProps<string>, 'size' | 'enableVirtualization'> & {\n searchValue?: string;\n onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;\n searchPlaceholder?: string;\n searchAriaLabel?: string;\n name: ReactNode;\n hideName?: boolean;\n description: ReactNode;\n options: FilterOption[];\n isClearable?: boolean;\n onClear?(): void;\n className?: string;\n onStateChange?({ isOpen }: { isOpen?: boolean }): void;\n isSelected?: boolean;\n searchId?: string;\n onSelect?(item: FilterOption): void;\n isEmpty?: boolean;\n isLoading?: boolean;\n disabled?: boolean;\n onClickFilterButton?(): void;\n disabledOptionTooltip?: string;\n 'data-test-id'?: string;\n triggerTestId?: string;\n clearAriaLabel?: string;\n};\n\nconst Filter = ({\n searchValue,\n onSearchChange,\n searchPlaceholder,\n searchAriaLabel,\n name,\n hideName,\n description,\n options,\n isClearable,\n onClear,\n isSelected,\n className,\n isEmpty,\n searchId,\n isLoading,\n onClickFilterButton,\n disabledOptionTooltip,\n 'data-test-id': testId = 'filter',\n size,\n disabled,\n enableVirtualization,\n clearAriaLabel,\n ...props\n}: FilterProps) => {\n const enableSearch =\n onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);\n\n const dropdownClasses = cx(styles.filter, className);\n\n const handleClear = (event: SyntheticEvent) => {\n event.preventDefault();\n onClear?.();\n };\n\n return (\n <Dropdown\n targetTestId={testId}\n disabled={disabled}\n targetClassName={dropdownClasses}\n {...props}\n >\n <FilterButton\n isClearable={isClearable}\n onClear={handleClear}\n name={name}\n hideName={hideName}\n disabled={disabled}\n isSelected={isSelected}\n onClickFilterButton={onClickFilterButton}\n ariaLabel={clearAriaLabel}\n >\n {description}\n </FilterButton>\n <FilterMenu\n options={options}\n searchId={searchId}\n searchValue={searchValue}\n searchPlaceholder={searchPlaceholder}\n searchAriaLabel={searchAriaLabel}\n enableSearch={enableSearch}\n onSearchChange={onSearchChange}\n isLoading={isLoading}\n disabledOptionTooltip={disabledOptionTooltip}\n size={size}\n enableVirtualization={enableVirtualization}\n />\n </Dropdown>\n );\n};\n\nexport { Filter };\nexport type { FilterProps };\n"],"names":["forwardRef","name","Children","jsx","jsxs","cx","ExpandMore","Fragment","Button","Menu","MenuSearch","MenuDivider","MenuItem","Check","SEARCH_INPUT_THRESHOLD","description","Dropdown","isClearable","clearTooltip","useId","VisuallyHidden","Tooltip","IconButton","Close"],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@launchpad-ui/filter",
|
3
|
-
"version": "0.5.
|
3
|
+
"version": "0.5.27",
|
4
4
|
"status": "beta",
|
5
5
|
"publishConfig": {
|
6
6
|
"access": "public"
|
@@ -28,12 +28,12 @@
|
|
28
28
|
"dependencies": {
|
29
29
|
"@react-aria/visually-hidden": "3.6.1",
|
30
30
|
"classix": "2.1.17",
|
31
|
-
"@launchpad-ui/button": "~0.8.
|
32
|
-
"@launchpad-ui/dropdown": "~0.6.
|
31
|
+
"@launchpad-ui/button": "~0.8.13",
|
32
|
+
"@launchpad-ui/dropdown": "~0.6.48",
|
33
33
|
"@launchpad-ui/icons": "~0.8.6",
|
34
|
-
"@launchpad-ui/menu": "~0.10.
|
34
|
+
"@launchpad-ui/menu": "~0.10.2",
|
35
35
|
"@launchpad-ui/tokens": "~0.5.6",
|
36
|
-
"@launchpad-ui/tooltip": "~0.7.
|
36
|
+
"@launchpad-ui/tooltip": "~0.7.12"
|
37
37
|
},
|
38
38
|
"peerDependencies": {
|
39
39
|
"react": "18.2.0",
|