@launchpad-ui/filter 0.2.9 → 0.3.2

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.
@@ -1,8 +1,8 @@
1
1
  import type { FilterOption } from './FilterMenu';
2
- import type { ReactNode } from 'react';
2
+ import type { ChangeEvent, ReactNode } from 'react';
3
3
  declare type AppliedFilterProps = {
4
4
  searchValue?: string;
5
- onSearchChange?(event: React.ChangeEvent<HTMLInputElement>): void;
5
+ onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;
6
6
  onClearFilter?(): void;
7
7
  searchPlaceholder?: string;
8
8
  name?: ReactNode;
@@ -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,SAAS,EAAE,MAAM,OAAO,CAAC;AAUvC,aAAK,kBAAkB,GAAG;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAClE,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,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,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;CAC1B,CAAC;AAEF,QAAA,MAAM,aAAa,iLAchB,kBAAkB,gBA4BpB,CAAC;AAEF,YAAY,EAAE,kBAAkB,EAAE,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,CAAC"}
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;AAUpD,aAAK,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,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,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;CAC1B,CAAC;AAEF,QAAA,MAAM,aAAa,iLAchB,kBAAkB,gBA4BpB,CAAC;AAEF,YAAY,EAAE,kBAAkB,EAAE,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,CAAC"}
package/dist/Filter.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import type { FilterOption } from './FilterMenu';
2
2
  import type { MenuProps } from '@launchpad-ui/menu';
3
- import type { ReactNode } from 'react';
3
+ import type { ChangeEvent, ReactNode } from 'react';
4
4
  declare type FilterProps = Pick<MenuProps<string>, 'size' | 'enableVirtualization'> & {
5
5
  searchValue?: string;
6
- onSearchChange?(event: React.ChangeEvent<HTMLInputElement>): void;
6
+ onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;
7
7
  searchPlaceholder?: string;
8
8
  searchAriaLabel?: string;
9
9
  name: ReactNode;
@@ -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,SAAS,EAAkB,MAAM,OAAO,CAAC;AAUvD,aAAK,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,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAClE,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,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,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,QAAA,MAAM,MAAM,yQAqBT,WAAW,gBAsCb,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,CAAC"}
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;AAUpE,aAAK,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,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,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,QAAA,MAAM,MAAM,yQAqBT,WAAW,gBAsCb,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { MenuProps } from '@launchpad-ui/menu';
2
- import type { ReactNode } from 'react';
2
+ import type { ChangeEvent, ReactNode } from 'react';
3
3
  declare type FilterOption<T = any> = {
4
4
  name?: ReactNode;
5
5
  isDisabled?: boolean;
@@ -17,7 +17,7 @@ declare type FilterMenuProps = Pick<MenuProps<string>, 'enableVirtualization' |
17
17
  searchValue?: string;
18
18
  searchPlaceholder?: string;
19
19
  searchAriaLabel?: string;
20
- onSearchChange?(event: React.ChangeEvent<HTMLInputElement>): void;
20
+ onSearchChange?(event: ChangeEvent<HTMLInputElement>): void;
21
21
  onSelect?(): void;
22
22
  isLoading?: boolean;
23
23
  disabledOptionTooltip?: string;
@@ -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,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,aAAK,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,aAAK,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC,GAAG;IAChF,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,aAAa,CAAC,IAAI,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAClE,QAAQ,CAAC,IAAI,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,QAAA,MAAM,UAAU,uLAab,eAAe,gBA+CjB,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC"}
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;AAOpD,aAAK,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,aAAK,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC,GAAG;IAChF,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,aAAa,CAAC,IAAI,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,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,uLAab,eAAe,gBA+CjB,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC"}
package/dist/index.es.js CHANGED
@@ -1,15 +1,22 @@
1
- // src/AppliedFilter.tsx
1
+ import './style.css';
2
2
  import { Dropdown } from "@launchpad-ui/dropdown";
3
- import { cx as cx2 } from "classix";
4
-
5
- // src/AppliedFilterButton.tsx
6
- import { ExpandMore, IconSize } from "@launchpad-ui/icons";
7
3
  import { cx } from "classix";
8
- import { Children, forwardRef } from "react";
9
- import "./styles/Filter.css";
10
- import { jsx, jsxs } from "react/jsx-runtime";
11
- var AppliedFilterButton = forwardRef((props, ref) => {
12
- const { name, className, isSelected, children, onClickFilterButton } = props;
4
+ import { ExpandMore, IconSize, Check, Close } from "@launchpad-ui/icons";
5
+ import { forwardRef, Children, useId } from "react";
6
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
7
+ import { Button, ButtonKind, IconButton } from "@launchpad-ui/button";
8
+ import { Menu, MenuSearch, MenuDivider, MenuItem } from "@launchpad-ui/menu";
9
+ import { Tooltip } from "@launchpad-ui/tooltip";
10
+ import { VisuallyHidden } from "@react-aria/visually-hidden";
11
+ const Filter$1 = "";
12
+ const AppliedFilterButton = forwardRef((props, ref) => {
13
+ const {
14
+ name,
15
+ className,
16
+ isSelected,
17
+ children,
18
+ onClickFilterButton
19
+ } = props;
13
20
  const hasDescription = Children.count(children) !== 0;
14
21
  return /* @__PURE__ */ jsx("div", {
15
22
  className: "AppliedFilter-buttonContainer",
@@ -18,33 +25,20 @@ var AppliedFilterButton = forwardRef((props, ref) => {
18
25
  className: cx("AppliedFilter-button", isSelected && "isSelected", className),
19
26
  ref,
20
27
  onClick: onClickFilterButton,
21
- children: [
22
- name && /* @__PURE__ */ jsxs("span", {
23
- className: "AppliedFilter-name",
24
- children: [
25
- name,
26
- hasDescription && ":"
27
- ]
28
- }),
29
- hasDescription && /* @__PURE__ */ jsx("span", {
30
- className: "AppliedFilter-description",
31
- children
32
- }),
33
- /* @__PURE__ */ jsx(ExpandMore, {
34
- size: IconSize.SMALL
35
- })
36
- ]
28
+ children: [name && /* @__PURE__ */ jsxs("span", {
29
+ className: "AppliedFilter-name",
30
+ children: [name, hasDescription && ":"]
31
+ }), hasDescription && /* @__PURE__ */ jsx("span", {
32
+ className: "AppliedFilter-description",
33
+ children
34
+ }), /* @__PURE__ */ jsx(ExpandMore, {
35
+ size: IconSize.SMALL
36
+ })]
37
37
  })
38
38
  });
39
39
  });
40
40
  AppliedFilterButton.displayName = "AppliedFilterButton";
41
-
42
- // src/FilterMenu.tsx
43
- import { Button, ButtonKind } from "@launchpad-ui/button";
44
- import { Check } from "@launchpad-ui/icons";
45
- import { Menu, MenuDivider, MenuItem, MenuSearch } from "@launchpad-ui/menu";
46
- import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
47
- var FilterMenu = ({
41
+ const FilterMenu = ({
48
42
  options,
49
43
  onClearFilter,
50
44
  enableSearch,
@@ -58,54 +52,49 @@ var FilterMenu = ({
58
52
  enableVirtualization,
59
53
  size
60
54
  }) => {
61
- const filterOptions = isLoading ? [{ name: "loading...", value: "loading...", isDisabled: true }] : options;
62
- return /* @__PURE__ */ jsxs2(Fragment, {
63
- children: [
64
- onClearFilter && /* @__PURE__ */ jsx2(Button, {
65
- tabIndex: 0,
66
- className: "Menu-clear",
67
- onClick: onClearFilter,
68
- kind: ButtonKind.LINK,
69
- children: "CLEAR FILTER"
70
- }),
71
- /* @__PURE__ */ jsxs2(Menu, {
72
- enableVirtualization,
73
- size,
74
- onSelect,
75
- children: [
76
- enableSearch && /* @__PURE__ */ jsx2(MenuSearch, {
77
- value: searchValue,
78
- placeholder: searchPlaceholder,
79
- onChange: onSearchChange,
80
- ariaLabel: searchAriaLabel
81
- }),
82
- filterOptions.map((option, index) => {
83
- if (option.isDivider) {
84
- return /* @__PURE__ */ jsx2(MenuDivider, {}, `divider-${index}`);
85
- }
86
- return /* @__PURE__ */ jsx2(MenuItem, {
87
- item: option,
88
- disabled: option.isDisabled,
89
- icon: option.isChecked ? Check : null,
90
- role: "menuitemradio",
91
- "aria-checked": option.isChecked ? "true" : void 0,
92
- nested: option.nested,
93
- groupHeader: option.groupHeader,
94
- tooltip: option.isDisabled && disabledOptionTooltip ? disabledOptionTooltip : void 0,
95
- tooltipPlacement: "right",
96
- children: option.name
97
- }, option.value);
98
- })
99
- ]
100
- })
101
- ]
55
+ const filterOptions = isLoading ? [{
56
+ name: "loading...",
57
+ value: "loading...",
58
+ isDisabled: true
59
+ }] : options;
60
+ return /* @__PURE__ */ jsxs(Fragment, {
61
+ children: [onClearFilter && /* @__PURE__ */ jsx(Button, {
62
+ tabIndex: 0,
63
+ className: "Menu-clear",
64
+ onClick: onClearFilter,
65
+ kind: ButtonKind.LINK,
66
+ children: "CLEAR FILTER"
67
+ }), /* @__PURE__ */ jsxs(Menu, {
68
+ enableVirtualization,
69
+ size,
70
+ onSelect,
71
+ children: [enableSearch && /* @__PURE__ */ jsx(MenuSearch, {
72
+ value: searchValue,
73
+ placeholder: searchPlaceholder,
74
+ onChange: onSearchChange,
75
+ ariaLabel: searchAriaLabel
76
+ }), filterOptions.map((option, index) => {
77
+ if (option.isDivider) {
78
+ return /* @__PURE__ */ jsx(MenuDivider, {}, `divider-${index}`);
79
+ }
80
+ return /* @__PURE__ */ jsx(MenuItem, {
81
+ item: option,
82
+ disabled: option.isDisabled,
83
+ icon: option.isChecked ? Check : null,
84
+ role: "menuitemradio",
85
+ "aria-checked": option.isChecked ? "true" : void 0,
86
+ nested: option.nested,
87
+ groupHeader: option.groupHeader,
88
+ tooltip: option.isDisabled && disabledOptionTooltip ? disabledOptionTooltip : void 0,
89
+ tooltipPlacement: "right",
90
+ children: option.name
91
+ }, option.value);
92
+ })]
93
+ })]
102
94
  });
103
95
  };
104
-
105
- // src/AppliedFilter.tsx
106
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
107
- var SEARCH_INPUT_THRESHOLD = 4;
108
- var AppliedFilter = ({
96
+ const SEARCH_INPUT_THRESHOLD$1 = 4;
97
+ const AppliedFilter = ({
109
98
  searchValue,
110
99
  onSearchChange,
111
100
  searchPlaceholder,
@@ -120,47 +109,30 @@ var AppliedFilter = ({
120
109
  searchAriaLabel,
121
110
  ...props
122
111
  }) => {
123
- const enableSearch = onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);
124
- const dropdownClasses = cx2("Filter-target", className);
125
- return /* @__PURE__ */ jsxs3(Dropdown, {
112
+ const enableSearch = onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD$1 || !isEmpty);
113
+ const dropdownClasses = cx("Filter-target", className);
114
+ return /* @__PURE__ */ jsxs(Dropdown, {
126
115
  targetClassName: dropdownClasses,
127
116
  placement: "bottom-start",
128
117
  enableArrow: false,
129
118
  ...props,
130
- children: [
131
- /* @__PURE__ */ jsx3(AppliedFilterButton, {
132
- name,
133
- onClickFilterButton,
134
- children: description
135
- }),
136
- /* @__PURE__ */ jsx3(FilterMenu, {
137
- options,
138
- searchValue,
139
- searchPlaceholder,
140
- enableSearch,
141
- searchAriaLabel,
142
- onSearchChange,
143
- onClearFilter,
144
- isLoading
145
- })
146
- ]
119
+ children: [/* @__PURE__ */ jsx(AppliedFilterButton, {
120
+ name,
121
+ onClickFilterButton,
122
+ children: description
123
+ }), /* @__PURE__ */ jsx(FilterMenu, {
124
+ options,
125
+ searchValue,
126
+ searchPlaceholder,
127
+ enableSearch,
128
+ searchAriaLabel,
129
+ onSearchChange,
130
+ onClearFilter,
131
+ isLoading
132
+ })]
147
133
  });
148
134
  };
149
-
150
- // src/Filter.tsx
151
- import { Dropdown as Dropdown2 } from "@launchpad-ui/dropdown";
152
- import { cx as cx4 } from "classix";
153
-
154
- // src/FilterButton.tsx
155
- import { IconButton } from "@launchpad-ui/button";
156
- import { Close, ExpandMore as ExpandMore2, IconSize as IconSize2 } from "@launchpad-ui/icons";
157
- import { Tooltip } from "@launchpad-ui/tooltip";
158
- import { VisuallyHidden } from "@react-aria/visually-hidden";
159
- import { cx as cx3 } from "classix";
160
- import { Children as Children2, forwardRef as forwardRef2, useId } from "react";
161
- import "./styles/Filter.css";
162
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
163
- var FilterButton = forwardRef2((props, ref) => {
135
+ const FilterButton = forwardRef((props, ref) => {
164
136
  const {
165
137
  children,
166
138
  name,
@@ -176,67 +148,54 @@ var FilterButton = forwardRef2((props, ref) => {
176
148
  } = props;
177
149
  const nameId = useId();
178
150
  const descriptionId = useId();
179
- const hasDescription = Children2.count(children) !== 0;
180
- const nameElement = /* @__PURE__ */ jsxs4("span", {
151
+ const hasDescription = Children.count(children) !== 0;
152
+ const nameElement = /* @__PURE__ */ jsxs("span", {
181
153
  className: "Filter-name",
182
- children: [
183
- name,
184
- hasDescription && ":"
185
- ]
154
+ children: [name, hasDescription && ":"]
186
155
  });
187
- return /* @__PURE__ */ jsxs4("div", {
156
+ return /* @__PURE__ */ jsxs("div", {
188
157
  className: "Filter-buttonContainer",
189
158
  "data-test-id": testId,
190
- children: [
191
- /* @__PURE__ */ jsxs4("button", {
192
- ...rest,
193
- "aria-labelledby": `${nameId} ${hasDescription ? descriptionId : ""}`,
194
- "aria-haspopup": true,
195
- className: cx3("Filter-button", className, (isClearable || isSelected) && "is-clearable"),
196
- ref,
197
- onClick: onClickFilterButton,
198
- children: [
199
- hideName ? /* @__PURE__ */ jsx4(VisuallyHidden, {
200
- id: nameId,
201
- children: nameElement
202
- }) : /* @__PURE__ */ jsx4("span", {
203
- id: nameId,
204
- children: nameElement
205
- }),
206
- hasDescription && /* @__PURE__ */ jsx4("span", {
207
- id: descriptionId,
208
- className: "Filter-description",
209
- children
210
- }),
211
- !isClearable && /* @__PURE__ */ jsx4(ExpandMore2, {
212
- size: IconSize2.SMALL
213
- })
214
- ]
215
- }),
216
- isClearable && /* @__PURE__ */ jsx4(Tooltip, {
217
- targetClassName: "Filter-clearTooltip",
218
- content: clearTooltip,
219
- children: /* @__PURE__ */ jsx4(IconButton, {
220
- "aria-label": "Clear filter",
221
- className: "Filter-clear",
222
- icon: /* @__PURE__ */ jsx4(Close, {
223
- size: IconSize2.TINY
224
- }),
225
- onClick: onClear
226
- })
159
+ children: [/* @__PURE__ */ jsxs("button", {
160
+ ...rest,
161
+ "aria-labelledby": `${nameId} ${hasDescription ? descriptionId : ""}`,
162
+ "aria-haspopup": true,
163
+ className: cx("Filter-button", className, (isClearable || isSelected) && "is-clearable"),
164
+ ref,
165
+ onClick: onClickFilterButton,
166
+ children: [hideName ? /* @__PURE__ */ jsx(VisuallyHidden, {
167
+ id: nameId,
168
+ children: nameElement
169
+ }) : /* @__PURE__ */ jsx("span", {
170
+ id: nameId,
171
+ children: nameElement
172
+ }), hasDescription && /* @__PURE__ */ jsx("span", {
173
+ id: descriptionId,
174
+ className: "Filter-description",
175
+ children
176
+ }), !isClearable && /* @__PURE__ */ jsx(ExpandMore, {
177
+ size: IconSize.SMALL
178
+ })]
179
+ }), isClearable && /* @__PURE__ */ jsx(Tooltip, {
180
+ targetClassName: "Filter-clearTooltip",
181
+ content: clearTooltip,
182
+ children: /* @__PURE__ */ jsx(IconButton, {
183
+ "aria-label": "Clear filter",
184
+ className: "Filter-clear",
185
+ icon: /* @__PURE__ */ jsx(Close, {
186
+ size: IconSize.TINY
187
+ }),
188
+ onClick: onClear
227
189
  })
228
- ]
190
+ })]
229
191
  });
230
192
  });
231
193
  FilterButton.defaultProps = {
232
194
  clearTooltip: "Clear filter"
233
195
  };
234
196
  FilterButton.displayName = "FilterButton";
235
-
236
- // src/Filter.tsx
237
- import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
238
- var SEARCH_INPUT_THRESHOLD2 = 4;
239
- var Filter = ({
197
+ const SEARCH_INPUT_THRESHOLD = 4;
198
+ const Filter = ({
240
199
  searchValue,
241
200
  onSearchChange,
242
201
  searchPlaceholder,
@@ -258,39 +217,36 @@ var Filter = ({
258
217
  enableVirtualization,
259
218
  ...props
260
219
  }) => {
261
- const enableSearch = onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD2 || !isEmpty);
262
- const dropdownClasses = cx4("Filter", "Filter-target", className);
220
+ const enableSearch = onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);
221
+ const dropdownClasses = cx("Filter", "Filter-target", className);
263
222
  const handleClear = (event) => {
264
223
  event.preventDefault();
265
- onClear?.();
224
+ onClear == null ? void 0 : onClear();
266
225
  };
267
- return /* @__PURE__ */ jsxs5(Dropdown2, {
226
+ return /* @__PURE__ */ jsxs(Dropdown, {
268
227
  targetClassName: dropdownClasses,
269
228
  ...props,
270
- children: [
271
- /* @__PURE__ */ jsx5(FilterButton, {
272
- isClearable,
273
- onClear: handleClear,
274
- name,
275
- hideName,
276
- isSelected,
277
- onClickFilterButton,
278
- testId,
279
- children: description
280
- }),
281
- /* @__PURE__ */ jsx5(FilterMenu, {
282
- options,
283
- searchValue,
284
- searchPlaceholder,
285
- searchAriaLabel,
286
- enableSearch,
287
- onSearchChange,
288
- isLoading,
289
- disabledOptionTooltip,
290
- size,
291
- enableVirtualization
292
- })
293
- ]
229
+ children: [/* @__PURE__ */ jsx(FilterButton, {
230
+ isClearable,
231
+ onClear: handleClear,
232
+ name,
233
+ hideName,
234
+ isSelected,
235
+ onClickFilterButton,
236
+ testId,
237
+ children: description
238
+ }), /* @__PURE__ */ jsx(FilterMenu, {
239
+ options,
240
+ searchValue,
241
+ searchPlaceholder,
242
+ searchAriaLabel,
243
+ enableSearch,
244
+ onSearchChange,
245
+ isLoading,
246
+ disabledOptionTooltip,
247
+ size,
248
+ enableVirtualization
249
+ })]
294
250
  });
295
251
  };
296
252
  export {
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/AppliedFilter.tsx", "../src/AppliedFilterButton.tsx", "../src/FilterMenu.tsx", "../src/Filter.tsx", "../src/FilterButton.tsx"],
4
- "sourcesContent": ["import type { FilterOption } from './FilterMenu';\nimport type { ReactNode } from 'react';\n\nimport { Dropdown } from '@launchpad-ui/dropdown';\nimport { cx } from 'classix';\n\nimport { AppliedFilterButton } from './AppliedFilterButton';\nimport { FilterMenu } from './FilterMenu';\n\nconst SEARCH_INPUT_THRESHOLD = 4;\n\ntype AppliedFilterProps = {\n searchValue?: string;\n onSearchChange?(event: React.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 isSelected?: boolean;\n onSelect?(item: FilterOption): void;\n isEmpty?: boolean;\n isLoading?: boolean;\n onClickFilterButton?(): void;\n searchAriaLabel?: 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 ...props\n}: AppliedFilterProps) => {\n const enableSearch =\n onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);\n\n const dropdownClasses = cx('Filter-target', className);\n return (\n <Dropdown\n targetClassName={dropdownClasses}\n placement=\"bottom-start\"\n enableArrow={false}\n {...props}\n >\n <AppliedFilterButton name={name} onClickFilterButton={onClickFilterButton}>\n {description}\n </AppliedFilterButton>\n\n <FilterMenu\n options={options}\n searchValue={searchValue}\n searchPlaceholder={searchPlaceholder}\n enableSearch={enableSearch}\n searchAriaLabel={searchAriaLabel}\n onSearchChange={onSearchChange}\n onClearFilter={onClearFilter}\n isLoading={isLoading}\n />\n </Dropdown>\n );\n};\n\nexport type { AppliedFilterProps };\nexport { AppliedFilter };\n", "import type { ReactNode } from 'react';\n\nimport { ExpandMore, IconSize } from '@launchpad-ui/icons';\nimport { cx } from 'classix';\nimport { Children, forwardRef } from 'react';\n\nimport './styles/Filter.css';\n\ntype AppliedFilterButtonProps = {\n name?: ReactNode;\n className?: string;\n isSelected?: boolean;\n children: ReactNode;\n onClickFilterButton?(): void;\n};\n\ntype Ref = HTMLButtonElement;\n\nconst AppliedFilterButton = forwardRef<Ref, AppliedFilterButtonProps>((props, ref) => {\n const { name, className, isSelected, children, onClickFilterButton } = props;\n\n const hasDescription = Children.count(children) !== 0;\n\n return (\n <div className=\"AppliedFilter-buttonContainer\">\n <button\n aria-haspopup\n className={cx('AppliedFilter-button', isSelected && 'isSelected', className)}\n ref={ref}\n onClick={onClickFilterButton}\n >\n {name && (\n <span className=\"AppliedFilter-name\">\n {name}\n {hasDescription && ':'}\n </span>\n )}\n {hasDescription && <span className=\"AppliedFilter-description\">{children}</span>}\n <ExpandMore size={IconSize.SMALL} />\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 { ReactNode } from 'react';\n\nimport { Button, ButtonKind } from '@launchpad-ui/button';\nimport { Check } from '@launchpad-ui/icons';\nimport { Menu, MenuDivider, MenuItem, MenuSearch } from '@launchpad-ui/menu';\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'> & {\n options: FilterOption[];\n onClearFilter?(): void;\n enableSearch?: boolean;\n searchValue?: string;\n searchPlaceholder?: string;\n searchAriaLabel?: string;\n onSearchChange?(event: React.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 onSelect,\n onSearchChange,\n isLoading = false,\n disabledOptionTooltip,\n enableVirtualization,\n size,\n}: FilterMenuProps) => {\n const filterOptions = isLoading\n ? [{ name: 'loading...', value: 'loading...', isDisabled: true }]\n : options;\n\n return (\n <>\n {onClearFilter && (\n <Button tabIndex={0} className=\"Menu-clear\" onClick={onClearFilter} kind={ButtonKind.LINK}>\n CLEAR FILTER\n </Button>\n )}\n <Menu enableVirtualization={enableVirtualization} size={size} onSelect={onSelect}>\n {enableSearch && (\n <MenuSearch\n value={searchValue}\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 { MenuProps } from '@launchpad-ui/menu';\nimport type { ReactNode, SyntheticEvent } from 'react';\n\nimport { Dropdown } from '@launchpad-ui/dropdown';\nimport { cx } from 'classix';\n\nimport { FilterButton } from './FilterButton';\nimport { FilterMenu } from './FilterMenu';\n\nconst SEARCH_INPUT_THRESHOLD = 4;\n\ntype FilterProps = Pick<MenuProps<string>, 'size' | 'enableVirtualization'> & {\n searchValue?: string;\n onSearchChange?(event: React.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 onSelect?(item: FilterOption): void;\n isEmpty?: boolean;\n isLoading?: boolean;\n onClickFilterButton?(): void;\n disabledOptionTooltip?: string;\n testId?: 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 isLoading,\n onClickFilterButton,\n disabledOptionTooltip,\n testId,\n size,\n enableVirtualization,\n ...props\n}: FilterProps) => {\n const enableSearch =\n onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);\n\n const dropdownClasses = cx('Filter', 'Filter-target', className);\n\n const handleClear = (event: SyntheticEvent) => {\n event.preventDefault();\n onClear?.();\n };\n\n return (\n <Dropdown targetClassName={dropdownClasses} {...props}>\n <FilterButton\n isClearable={isClearable}\n onClear={handleClear}\n name={name}\n hideName={hideName}\n isSelected={isSelected}\n onClickFilterButton={onClickFilterButton}\n testId={testId}\n >\n {description}\n </FilterButton>\n <FilterMenu\n options={options}\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", "import type { ReactNode, SyntheticEvent } from 'react';\n\nimport { IconButton } from '@launchpad-ui/button';\nimport { Close, ExpandMore, IconSize } 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/Filter.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 onClickFilterButton?(): void;\n testId?: 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 isSelected,\n onClickFilterButton,\n className,\n testId,\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=\"Filter-name\">\n {name}\n {hasDescription && ':'}\n </span>\n );\n\n return (\n <div className=\"Filter-buttonContainer\" data-test-id={testId}>\n <button\n {...rest}\n aria-labelledby={`${nameId} ${hasDescription ? descriptionId : ''}`}\n aria-haspopup\n className={cx('Filter-button', className, (isClearable || isSelected) && 'is-clearable')}\n ref={ref}\n onClick={onClickFilterButton}\n >\n {hideName ? (\n <VisuallyHidden id={nameId}>{nameElement}</VisuallyHidden>\n ) : (\n <span id={nameId}>{nameElement}</span>\n )}\n {hasDescription && (\n <span id={descriptionId} className=\"Filter-description\">\n {children}\n </span>\n )}\n {!isClearable && <ExpandMore size={IconSize.SMALL} />}\n </button>\n {isClearable && (\n <Tooltip targetClassName=\"Filter-clearTooltip\" content={clearTooltip}>\n <IconButton\n aria-label=\"Clear filter\"\n className=\"Filter-clear\"\n icon={<Close size={IconSize.TINY} />}\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"],
5
- "mappings": "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",
6
- "names": ["cx", "jsx", "jsxs", "jsx", "jsxs", "cx", "Dropdown", "cx", "ExpandMore", "IconSize", "cx", "Children", "forwardRef", "jsx", "jsxs", "jsx", "jsxs", "SEARCH_INPUT_THRESHOLD", "cx", "Dropdown"]
7
- }
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, IconSize } from '@launchpad-ui/icons';\nimport { cx } from 'classix';\nimport { Children, forwardRef } from 'react';\n\nimport './styles/Filter.css';\n\ntype AppliedFilterButtonProps = {\n name?: ReactNode;\n className?: string;\n isSelected?: boolean;\n children: ReactNode;\n onClickFilterButton?(): void;\n};\n\ntype Ref = HTMLButtonElement;\n\nconst AppliedFilterButton = forwardRef<Ref, AppliedFilterButtonProps>((props, ref) => {\n const { name, className, isSelected, children, onClickFilterButton } = props;\n\n const hasDescription = Children.count(children) !== 0;\n\n return (\n <div className=\"AppliedFilter-buttonContainer\">\n <button\n aria-haspopup\n className={cx('AppliedFilter-button', isSelected && 'isSelected', className)}\n ref={ref}\n onClick={onClickFilterButton}\n >\n {name && (\n <span className=\"AppliedFilter-name\">\n {name}\n {hasDescription && ':'}\n </span>\n )}\n {hasDescription && <span className=\"AppliedFilter-description\">{children}</span>}\n <ExpandMore size={IconSize.SMALL} />\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, ButtonKind } from '@launchpad-ui/button';\nimport { Check } from '@launchpad-ui/icons';\nimport { Menu, MenuDivider, MenuItem, MenuSearch } from '@launchpad-ui/menu';\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'> & {\n options: FilterOption[];\n onClearFilter?(): void;\n enableSearch?: boolean;\n searchValue?: 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 onSelect,\n onSearchChange,\n isLoading = false,\n disabledOptionTooltip,\n enableVirtualization,\n size,\n}: FilterMenuProps) => {\n const filterOptions = isLoading\n ? [{ name: 'loading...', value: 'loading...', isDisabled: true }]\n : options;\n\n return (\n <>\n {onClearFilter && (\n <Button tabIndex={0} className=\"Menu-clear\" onClick={onClearFilter} kind={ButtonKind.LINK}>\n CLEAR FILTER\n </Button>\n )}\n <Menu enableVirtualization={enableVirtualization} size={size} onSelect={onSelect}>\n {enableSearch && (\n <MenuSearch\n value={searchValue}\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';\nimport { cx } from 'classix';\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 isSelected?: boolean;\n onSelect?(item: FilterOption): void;\n isEmpty?: boolean;\n isLoading?: boolean;\n onClickFilterButton?(): void;\n searchAriaLabel?: 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 ...props\n}: AppliedFilterProps) => {\n const enableSearch =\n onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);\n\n const dropdownClasses = cx('Filter-target', className);\n return (\n <Dropdown\n targetClassName={dropdownClasses}\n placement=\"bottom-start\"\n enableArrow={false}\n {...props}\n >\n <AppliedFilterButton name={name} onClickFilterButton={onClickFilterButton}>\n {description}\n </AppliedFilterButton>\n\n <FilterMenu\n options={options}\n searchValue={searchValue}\n searchPlaceholder={searchPlaceholder}\n enableSearch={enableSearch}\n searchAriaLabel={searchAriaLabel}\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 } from 'react';\n\nimport { IconButton } from '@launchpad-ui/button';\nimport { Close, ExpandMore, IconSize } 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/Filter.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 onClickFilterButton?(): void;\n testId?: 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 isSelected,\n onClickFilterButton,\n className,\n testId,\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=\"Filter-name\">\n {name}\n {hasDescription && ':'}\n </span>\n );\n\n return (\n <div className=\"Filter-buttonContainer\" data-test-id={testId}>\n <button\n {...rest}\n aria-labelledby={`${nameId} ${hasDescription ? descriptionId : ''}`}\n aria-haspopup\n className={cx('Filter-button', className, (isClearable || isSelected) && 'is-clearable')}\n ref={ref}\n onClick={onClickFilterButton}\n >\n {hideName ? (\n <VisuallyHidden id={nameId}>{nameElement}</VisuallyHidden>\n ) : (\n <span id={nameId}>{nameElement}</span>\n )}\n {hasDescription && (\n <span id={descriptionId} className=\"Filter-description\">\n {children}\n </span>\n )}\n {!isClearable && <ExpandMore size={IconSize.SMALL} />}\n </button>\n {isClearable && (\n <Tooltip targetClassName=\"Filter-clearTooltip\" content={clearTooltip}>\n <IconButton\n aria-label=\"Clear filter\"\n className=\"Filter-clear\"\n icon={<Close size={IconSize.TINY} />}\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';\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 onSelect?(item: FilterOption): void;\n isEmpty?: boolean;\n isLoading?: boolean;\n onClickFilterButton?(): void;\n disabledOptionTooltip?: string;\n testId?: 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 isLoading,\n onClickFilterButton,\n disabledOptionTooltip,\n testId,\n size,\n enableVirtualization,\n ...props\n}: FilterProps) => {\n const enableSearch =\n onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);\n\n const dropdownClasses = cx('Filter', 'Filter-target', className);\n\n const handleClear = (event: SyntheticEvent) => {\n event.preventDefault();\n onClear?.();\n };\n\n return (\n <Dropdown targetClassName={dropdownClasses} {...props}>\n <FilterButton\n isClearable={isClearable}\n onClear={handleClear}\n name={name}\n hideName={hideName}\n isSelected={isSelected}\n onClickFilterButton={onClickFilterButton}\n testId={testId}\n >\n {description}\n </FilterButton>\n <FilterMenu\n options={options}\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","isSelected","children","onClickFilterButton","hasDescription","Children","count","cx","_jsxs","_jsx","IconSize","SMALL","displayName","FilterMenu","options","onClearFilter","enableSearch","searchValue","searchPlaceholder","searchAriaLabel","onSelect","onSearchChange","isLoading","disabledOptionTooltip","enableVirtualization","size","filterOptions","value","isDisabled","_Fragment","ButtonKind","LINK","map","option","index","isDivider","isChecked","Check","undefined","nested","groupHeader","SEARCH_INPUT_THRESHOLD","AppliedFilter","description","isEmpty","length","dropdownClasses","FilterButton","hideName","isClearable","clearTooltip","onClear","testId","rest","nameId","useId","descriptionId","nameElement","TINY","defaultProps","Filter","handleClear","event","preventDefault"],"mappings":"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"}