@launchpad-ui/filter 0.4.10 → 0.4.12

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.
@@ -12,7 +12,6 @@ declare type AppliedFilterProps = {
12
12
  onStateChange?({ isOpen }: {
13
13
  isOpen?: boolean;
14
14
  }): void;
15
- isSelected?: boolean;
16
15
  onSelect?(item: FilterOption): void;
17
16
  isEmpty?: boolean;
18
17
  isLoading?: boolean;
@@ -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;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;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,QAAA,MAAM,aAAa,yMAehB,kBAAkB,gBA6BpB,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;AASpD,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,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,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,QAAA,MAAM,aAAa,yMAehB,kBAAkB,gBA0BpB,CAAC;AAEF,YAAY,EAAE,kBAAkB,EAAE,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1,11 +1,10 @@
1
1
  import type { ReactNode } from 'react';
2
- import './styles/Filter.css';
3
2
  declare type AppliedFilterButtonProps = {
4
3
  name?: ReactNode;
5
4
  className?: string;
6
- isSelected?: boolean;
7
5
  children: ReactNode;
8
6
  onClickFilterButton?(): void;
7
+ 'data-test-id': string;
9
8
  };
10
9
  declare const AppliedFilterButton: import("react").ForwardRefExoticComponent<AppliedFilterButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
11
10
  export type { AppliedFilterButtonProps };
@@ -1 +1 @@
1
- {"version":3,"file":"AppliedFilterButton.d.ts","sourceRoot":"","sources":["../src/AppliedFilterButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,qBAAqB,CAAC;AAE7B,aAAK,wBAAwB,GAAG;IAC9B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,mBAAmB,CAAC,IAAI,IAAI,CAAC;CAC9B,CAAC;AAIF,QAAA,MAAM,mBAAmB,wHAwBvB,CAAC;AAIH,YAAY,EAAE,wBAAwB,EAAE,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"AppliedFilterButton.d.ts","sourceRoot":"","sources":["../src/AppliedFilterButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,aAAK,wBAAwB,GAAG;IAC9B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,mBAAmB,CAAC,IAAI,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAIF,QAAA,MAAM,mBAAmB,wHAwBvB,CAAC;AAIH,YAAY,EAAE,wBAAwB,EAAE,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -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;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,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,MAAM,yRAqBT,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;AAWpE,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,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,MAAM,yRAqBT,WAAW,gBAqCb,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import type { ReactNode, SyntheticEvent } from 'react';
2
- import './styles/Filter.css';
3
2
  declare type FilterButtonProps = {
4
3
  name: ReactNode;
5
4
  hideName?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"FilterButton.d.ts","sourceRoot":"","sources":["../src/FilterButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AASvD,OAAO,qBAAqB,CAAC;AAE7B,aAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,mBAAmB,CAAC,IAAI,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAIF,QAAA,MAAM,YAAY,iHA4DhB,CAAC;AAQH,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"FilterButton.d.ts","sourceRoot":"","sources":["../src/FilterButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAWvD,aAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,mBAAmB,CAAC,IAAI,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAIF,QAAA,MAAM,YAAY,iHA6DhB,CAAC;AAQH,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
@@ -10,7 +10,7 @@ declare type FilterOption<T = any> = {
10
10
  nested?: boolean;
11
11
  groupHeader?: boolean;
12
12
  };
13
- declare type FilterMenuProps = Pick<MenuProps<string>, 'enableVirtualization' | 'size'> & {
13
+ declare type FilterMenuProps = Pick<MenuProps<string>, 'enableVirtualization' | 'size' | 'data-test-id'> & {
14
14
  options: FilterOption[];
15
15
  onClearFilter?(): void;
16
16
  enableSearch?: boolean;
@@ -22,7 +22,7 @@ declare type FilterMenuProps = Pick<MenuProps<string>, 'enableVirtualization' |
22
22
  isLoading?: boolean;
23
23
  disabledOptionTooltip?: string;
24
24
  };
25
- declare const FilterMenu: ({ options, onClearFilter, enableSearch, searchValue, searchPlaceholder, searchAriaLabel, onSelect, onSearchChange, isLoading, disabledOptionTooltip, enableVirtualization, size, }: FilterMenuProps) => JSX.Element;
25
+ declare const FilterMenu: ({ options, onClearFilter, enableSearch, searchValue, searchPlaceholder, searchAriaLabel, onSelect, onSearchChange, isLoading, disabledOptionTooltip, enableVirtualization, size, "data-test-id": testId, }: FilterMenuProps) => JSX.Element;
26
26
  export { FilterMenu };
27
27
  export type { FilterOption, FilterMenuProps };
28
28
  //# sourceMappingURL=FilterMenu.d.ts.map
@@ -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;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"}
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,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,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,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,+MAcb,eAAe,gBA0DjB,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC"}
package/dist/index.es.js CHANGED
@@ -1,35 +1,61 @@
1
1
  import './style.css';
2
2
  import { Dropdown } from "@launchpad-ui/dropdown";
3
- import { cx } from "classix";
4
3
  import { ExpandMore, Check, Close } from "@launchpad-ui/icons";
4
+ import { cx } from "classix";
5
5
  import { forwardRef, Children, useId } from "react";
6
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";
10
10
  import { VisuallyHidden } from "@react-aria/visually-hidden";
11
- const Filter$1 = "";
11
+ const filter = "_filter_1vdxa_1";
12
+ const buttonContainer = "_buttonContainer_1vdxa_5";
13
+ const button = "_button_1vdxa_5";
14
+ const appliedButton = "_appliedButton_1vdxa_24";
15
+ const name = "_name_1vdxa_59";
16
+ const appliedName = "_appliedName_1vdxa_64";
17
+ const description = "_description_1vdxa_68";
18
+ const appliedDescription = "_appliedDescription_1vdxa_74";
19
+ const clear = "_clear_1vdxa_82";
20
+ const isClearable = "_isClearable_1vdxa_91";
21
+ const clearTooltip = "_clearTooltip_1vdxa_123";
22
+ const filterClearButton = "_filterClearButton_1vdxa_129";
23
+ const styles = {
24
+ filter,
25
+ buttonContainer,
26
+ button,
27
+ appliedButton,
28
+ "focus-visible": "_focus-visible_1vdxa_1",
29
+ name,
30
+ appliedName,
31
+ description,
32
+ appliedDescription,
33
+ clear,
34
+ isClearable,
35
+ clearTooltip,
36
+ filterClearButton
37
+ };
12
38
  const AppliedFilterButton = forwardRef((props, ref) => {
13
39
  const {
14
- name,
40
+ name: name2,
15
41
  className,
16
- isSelected,
17
42
  children,
18
- onClickFilterButton
43
+ onClickFilterButton,
44
+ "data-test-id": testId
19
45
  } = props;
20
46
  const hasDescription = Children.count(children) !== 0;
21
47
  return /* @__PURE__ */ jsx("div", {
22
- className: "AppliedFilter-buttonContainer",
48
+ "data-test-id": testId,
23
49
  children: /* @__PURE__ */ jsxs("button", {
24
50
  "aria-haspopup": true,
25
- className: cx("AppliedFilter-button", isSelected && "isSelected", className),
51
+ className: cx(styles.appliedButton, className),
26
52
  ref,
27
53
  onClick: onClickFilterButton,
28
- children: [name && /* @__PURE__ */ jsxs("span", {
29
- className: "AppliedFilter-name",
30
- children: [name, hasDescription && ":"]
54
+ children: [name2 && /* @__PURE__ */ jsxs("span", {
55
+ className: styles.appliedName,
56
+ children: [name2, hasDescription && ":"]
31
57
  }), hasDescription && /* @__PURE__ */ jsx("span", {
32
- className: "AppliedFilter-description",
58
+ className: styles.appliedDescription,
33
59
  children
34
60
  }), /* @__PURE__ */ jsx(ExpandMore, {
35
61
  size: "small"
@@ -50,7 +76,8 @@ const FilterMenu = ({
50
76
  isLoading = false,
51
77
  disabledOptionTooltip,
52
78
  enableVirtualization,
53
- size
79
+ size,
80
+ "data-test-id": testId = "filter-menu"
54
81
  }) => {
55
82
  const filterOptions = isLoading ? [{
56
83
  name: "loading...",
@@ -60,13 +87,15 @@ const FilterMenu = ({
60
87
  return /* @__PURE__ */ jsxs(Fragment, {
61
88
  children: [onClearFilter && /* @__PURE__ */ jsx(Button, {
62
89
  tabIndex: 0,
63
- className: "Menu-clear",
90
+ className: styles.filterClearButton,
64
91
  onClick: onClearFilter,
65
92
  kind: "link",
93
+ "data-test-id": "clear-filter-button",
66
94
  children: "CLEAR FILTER"
67
95
  }), /* @__PURE__ */ jsxs(Menu, {
68
96
  enableVirtualization,
69
97
  size,
98
+ "data-test-id": testId,
70
99
  onSelect,
71
100
  children: [enableSearch && /* @__PURE__ */ jsx(MenuSearch, {
72
101
  value: searchValue,
@@ -98,8 +127,8 @@ const AppliedFilter = ({
98
127
  searchValue,
99
128
  onSearchChange,
100
129
  searchPlaceholder,
101
- name,
102
- description,
130
+ name: name2,
131
+ description: description2,
103
132
  options,
104
133
  className,
105
134
  isEmpty,
@@ -111,17 +140,16 @@ const AppliedFilter = ({
111
140
  ...props
112
141
  }) => {
113
142
  const enableSearch = onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD$1 || !isEmpty);
114
- const dropdownClasses = cx("Filter-target", className);
115
143
  return /* @__PURE__ */ jsxs(Dropdown, {
116
- targetClassName: dropdownClasses,
144
+ targetClassName: className,
117
145
  placement: "bottom-start",
118
146
  enableArrow: false,
119
- "data-test-id": testId,
120
147
  ...props,
121
148
  children: [/* @__PURE__ */ jsx(AppliedFilterButton, {
122
- name,
149
+ "data-test-id": testId,
150
+ name: name2,
123
151
  onClickFilterButton,
124
- children: description
152
+ children: description2
125
153
  }), /* @__PURE__ */ jsx(FilterMenu, {
126
154
  options,
127
155
  searchValue,
@@ -137,10 +165,10 @@ const AppliedFilter = ({
137
165
  const FilterButton = forwardRef((props, ref) => {
138
166
  const {
139
167
  children,
140
- name,
168
+ name: name2,
141
169
  hideName,
142
- isClearable,
143
- clearTooltip,
170
+ isClearable: isClearable2,
171
+ clearTooltip: clearTooltip2,
144
172
  onClear,
145
173
  isSelected,
146
174
  onClickFilterButton,
@@ -152,17 +180,17 @@ const FilterButton = forwardRef((props, ref) => {
152
180
  const descriptionId = useId();
153
181
  const hasDescription = Children.count(children) !== 0;
154
182
  const nameElement = /* @__PURE__ */ jsxs("span", {
155
- className: "Filter-name",
156
- children: [name, hasDescription && ":"]
183
+ className: styles.name,
184
+ children: [name2, hasDescription && ":"]
157
185
  });
158
186
  return /* @__PURE__ */ jsxs("div", {
159
- className: "Filter-buttonContainer",
187
+ className: styles.buttonContainer,
160
188
  "data-test-id": testId,
161
189
  children: [/* @__PURE__ */ jsxs("button", {
162
190
  ...rest,
163
191
  "aria-labelledby": `${nameId} ${hasDescription ? descriptionId : ""}`,
164
192
  "aria-haspopup": true,
165
- className: cx("Filter-button", className, (isClearable || isSelected) && "is-clearable"),
193
+ className: cx(styles.button, className, (isClearable2 || isSelected) && styles.isClearable),
166
194
  ref,
167
195
  onClick: onClickFilterButton,
168
196
  children: [hideName ? /* @__PURE__ */ jsx(VisuallyHidden, {
@@ -173,17 +201,18 @@ const FilterButton = forwardRef((props, ref) => {
173
201
  children: nameElement
174
202
  }), hasDescription && /* @__PURE__ */ jsx("span", {
175
203
  id: descriptionId,
176
- className: "Filter-description",
204
+ className: styles.description,
177
205
  children
178
- }), !isClearable && /* @__PURE__ */ jsx(ExpandMore, {
206
+ }), !isClearable2 && /* @__PURE__ */ jsx(ExpandMore, {
179
207
  size: "small"
180
208
  })]
181
- }), isClearable && /* @__PURE__ */ jsx(Tooltip, {
182
- targetClassName: "Filter-clearTooltip",
183
- content: clearTooltip,
209
+ }), isClearable2 && /* @__PURE__ */ jsx(Tooltip, {
210
+ targetClassName: styles.clearTooltip,
211
+ content: clearTooltip2,
184
212
  children: /* @__PURE__ */ jsx(IconButton, {
185
213
  "aria-label": "Clear filter",
186
- className: "Filter-clear",
214
+ className: styles.clear,
215
+ "data-test-id": "clear-filter-button",
187
216
  icon: /* @__PURE__ */ jsx(Close, {
188
217
  size: "tiny"
189
218
  }),
@@ -202,11 +231,11 @@ const Filter = ({
202
231
  onSearchChange,
203
232
  searchPlaceholder,
204
233
  searchAriaLabel,
205
- name,
234
+ name: name2,
206
235
  hideName,
207
- description,
236
+ description: description2,
208
237
  options,
209
- isClearable,
238
+ isClearable: isClearable2,
210
239
  onClear,
211
240
  isSelected,
212
241
  className,
@@ -220,23 +249,23 @@ const Filter = ({
220
249
  ...props
221
250
  }) => {
222
251
  const enableSearch = onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);
223
- const dropdownClasses = cx("Filter", "Filter-target", className);
252
+ const dropdownClasses = cx(styles.filter, className);
224
253
  const handleClear = (event) => {
225
254
  event.preventDefault();
226
255
  onClear == null ? void 0 : onClear();
227
256
  };
228
257
  return /* @__PURE__ */ jsxs(Dropdown, {
258
+ targetTestId: testId,
229
259
  targetClassName: dropdownClasses,
230
260
  ...props,
231
261
  children: [/* @__PURE__ */ jsx(FilterButton, {
232
- isClearable,
262
+ isClearable: isClearable2,
233
263
  onClear: handleClear,
234
- name,
264
+ name: name2,
235
265
  hideName,
236
266
  isSelected,
237
267
  onClickFilterButton,
238
- "data-test-id": testId,
239
- children: description
268
+ children: description2
240
269
  }), /* @__PURE__ */ jsx(FilterMenu, {
241
270
  options,
242
271
  searchValue,
@@ -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/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=\"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 } 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=\"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 '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 'data-test-id': testId = 'applied-filter',\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 data-test-id={testId}\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 } 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 'data-test-id'?: 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 'data-test-id': testId = 'filter-button',\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=\"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=\"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 'data-test-id'?: string;\n triggerTestId?: 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 'data-test-id': testId = 'filter',\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 data-test-id={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","displayName","FilterMenu","options","onClearFilter","enableSearch","searchValue","searchPlaceholder","searchAriaLabel","onSelect","onSearchChange","isLoading","disabledOptionTooltip","enableVirtualization","size","filterOptions","value","isDisabled","_Fragment","map","option","index","isDivider","isChecked","Check","undefined","nested","groupHeader","SEARCH_INPUT_THRESHOLD","AppliedFilter","description","isEmpty","testId","length","dropdownClasses","FilterButton","hideName","isClearable","clearTooltip","onClear","rest","nameId","useId","descriptionId","nameElement","defaultProps","Filter","handleClear","event","preventDefault"],"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}>\n {name}\n {hasDescription && ':'}\n </span>\n )}\n {hasDescription && <span className={styles.appliedDescription}>{children}</span>}\n <ExpandMore size=\"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 } 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 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 '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 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 '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 '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\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 } 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 onClickFilterButton?(): void;\n 'data-test-id'?: 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 'data-test-id': testId = 'filter-button',\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 return (\n <div className={styles.buttonContainer} data-test-id={testId}>\n <button\n {...rest}\n aria-labelledby={`${nameId} ${hasDescription ? descriptionId : ''}`}\n aria-haspopup\n className={cx(styles.button, className, (isClearable || isSelected) && styles.isClearable)}\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={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=\"Clear filter\"\n className={styles.clear}\n data-test-id=\"clear-filter-button\"\n icon={<Close size=\"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';\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 onSelect?(item: FilterOption): void;\n isEmpty?: boolean;\n isLoading?: boolean;\n onClickFilterButton?(): void;\n disabledOptionTooltip?: string;\n 'data-test-id'?: string;\n triggerTestId?: 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 'data-test-id': testId = 'filter',\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(styles.filter, className);\n\n const handleClear = (event: SyntheticEvent) => {\n event.preventDefault();\n onClear?.();\n };\n\n return (\n <Dropdown targetTestId={testId} targetClassName={dropdownClasses} {...props}>\n <FilterButton\n isClearable={isClearable}\n onClear={handleClear}\n name={name}\n hideName={hideName}\n isSelected={isSelected}\n onClickFilterButton={onClickFilterButton}\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","children","onClickFilterButton","testId","hasDescription","Children","count","cx","styles","appliedButton","_jsxs","appliedName","_jsx","appliedDescription","displayName","FilterMenu","options","onClearFilter","enableSearch","searchValue","searchPlaceholder","searchAriaLabel","onSelect","onSearchChange","isLoading","disabledOptionTooltip","enableVirtualization","size","filterOptions","value","isDisabled","_Fragment","filterClearButton","map","option","index","isDivider","isChecked","Check","undefined","nested","groupHeader","SEARCH_INPUT_THRESHOLD","AppliedFilter","description","isEmpty","length","FilterButton","hideName","isClearable","clearTooltip","onClear","isSelected","rest","nameId","useId","descriptionId","nameElement","buttonContainer","button","clear","defaultProps","Filter","dropdownClasses","filter","handleClear","event","preventDefault"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,MAAMA,sBAAsBC,WAA0C,CAACC,OAAOC,QAAQ;AAC9E,QAAA;AAAA,IAAEC,MAAAA;AAAAA,IAAMC;AAAAA,IAAWC;AAAAA,IAAUC;AAAAA,IAAqB,gBAAgBC;AAAAA,EAAWN,IAAAA;AAEnF,QAAMO,iBAAiBC,SAASC,MAAML,QAAf,MAA6B;AAEpD,6BACE,OAAA;AAAA,IAAK,gBAAcE;AAAAA,IAAnB,+BACE,UAAA;AAAA,MACE,iBADF;AAAA,MAEE,WAAWI,GAAGC,OAAOC,eAAeT,SAAvB;AAAA,MACb;AAAA,MACA,SAASE;AAAAA,MAJX,UAAA,CAMGH,SACCW,qBAAA,QAAA;AAAA,QAAM,WAAWF,OAAOG;AAAAA,QAAxB,UAAA,CACGZ,OACAK,kBAAkB,GAFrB;AAAA,MAAA,CAPJ,GAYGA,kBAAkBQ,oBAAA,QAAA;AAAA,QAAM,WAAWJ,OAAOK;AAAAA,QAAxB;AAAA,MAAA,CAZrB,GAaED,oBAAC,YAAD;AAAA,QAAY,MAAK;AAAA,MAAA,CAbnB,CAAA;AAAA,IAAA,CAAA;AAAA,EAAA,CAFJ;AAmBD,CAxBqC;AA0BtCjB,oBAAoBmB,cAAc;ACVlC,MAAMC,aAAa,CAAC;AAAA,EAClBC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC,YAAY;AAAA,EACZC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACA,gBAAgBxB,SAAS;AAbP,MAcG;AACfyB,QAAAA,gBAAgBJ,YAClB,CAAC;AAAA,IAAEzB,MAAM;AAAA,IAAc8B,OAAO;AAAA,IAAcC,YAAY;AAAA,EAAxD,CAAA,IACAd;AAEJ,8BACEe,UAAA;AAAA,IAAA,UACGd,CAAAA,iBACCL,oBAAC,QAAD;AAAA,MACE,UAAU;AAAA,MACV,WAAWJ,OAAOwB;AAAAA,MAClB,SAASf;AAAAA,MACT,MAAK;AAAA,MACL,gBAAa;AAAA,MALf,UAAA;AAAA,IAAA,CAFJ,GAYEP,qBAAC,MAAD;AAAA,MACE;AAAA,MACA;AAAA,MACA,gBAAcP;AAAAA,MACd;AAAA,MAJF,UAMGe,CAAAA,gBACCN,oBAAC,YAAD;AAAA,QACE,OAAOO;AAAAA,QACP,aAAaC;AAAAA,QACb,UAAUG;AAAAA,QACV,WAAWF;AAAAA,MAXjB,CAAA,GAcGO,cAAcK,IAAI,CAACC,QAAQC,UAAU;AACpC,YAAID,OAAOE,WAAW;AACpB,iBAAQxB,oBAAA,aAAD,CAAA,GAAmB,WAAUuB,OAA7B;AAAA,QACR;AACD,mCACG,UAAD;AAAA,UACE,MAAMD;AAAAA,UACN,UAAUA,OAAOJ;AAAAA,UACjB,MAAMI,OAAOG,YAAYC,QAAQ;AAAA,UAEjC,MAAK;AAAA,UACL,gBAAcJ,OAAOG,YAAY,SAASE;AAAAA,UAC1C,QAAQL,OAAOM;AAAAA,UACf,aAAaN,OAAOO;AAAAA,UACpB,SACEP,OAAOJ,cAAcL,wBAAwBA,wBAAwBc;AAAAA,UAEvE,kBAAiB;AAAA,UAZnB,UAcGL,OAAOnC;AAAAA,QAAAA,GAVHmC,OAAOL,KAJd;AAAA,MAAA,CALH,CAdH;AAAA,IAAA,CAZF,CAAA;AAAA,EAAA,CADF;AAqDD;AClGD,MAAMa,2BAAyB;AAoB/B,MAAMC,gBAAgB,CAAC;AAAA,EACrBxB;AAAAA,EACAI;AAAAA,EACAH;AAAAA,EACArB,MAAAA;AAAAA,EACA6C,aAAAA;AAAAA,EACA5B;AAAAA,EACAhB;AAAAA,EACA6C;AAAAA,EACArB;AAAAA,EACAtB;AAAAA,EACAe;AAAAA,EACAI;AAAAA,EACA,gBAAgBlB,SAAS;AAAA,KACtBN;AAdkB,MAeG;AAClBqB,QAAAA,eACJK,mBAAmB,CAAC,CAACJ,eAAeH,QAAQ8B,SAASJ,4BAA0B,CAACG;AAElF,8BACG,UAAD;AAAA,IAAU,iBAAiB7C;AAAAA,IAAW,WAAU;AAAA,IAAe,aAAa;AAAA,IAA5E,GAAuFH;AAAAA,IAAvF,UAAA,CACEe,oBAAC,qBAAD;AAAA,MACE,gBAAcT;AAAAA,MACd,MAAAJ;AAAA,MACA;AAAA,MAHF,UAKG6C;AAAAA,IAAAA,CANL,GASEhC,oBAAC,YAAD;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CAjBJ,CAAA;AAAA,EAAA,CADF;AAsBD;AC3CD,MAAMmC,eAAenD,WAAmC,CAACC,OAAOC,QAAQ;AAChE,QAAA;AAAA,IACJG;AAAAA,IACAF,MAAAA;AAAAA,IACAiD;AAAAA,IACAC,aAAAA;AAAAA,IACAC,cAAAA;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAlD;AAAAA,IACAF;AAAAA,IACA,gBAAgBG,SAAS;AAAA,OACtBkD;AAAAA,EACDxD,IAAAA;AACJ,QAAMyD,SAASC;AACf,QAAMC,gBAAgBD;AAEtB,QAAMnD,iBAAiBC,SAASC,MAAML,QAAf,MAA6B;AAE9CwD,QAAAA,mCACJ,QAAA;AAAA,IAAM,WAAWjD,OAAOT;AAAAA,IAAxB,UAAA,CACGA,OACAK,kBAAkB,GAFrB;AAAA,EAAA,CADF;AAOA,8BACE,OAAA;AAAA,IAAK,WAAWI,OAAOkD;AAAAA,IAAiB,gBAAcvD;AAAAA,IAAtD,UAAA,CACEO;SACM2C;AAAAA,MACJ,mBAAkB,GAAEC,UAAUlD,iBAAiBoD,gBAAgB;AAAA,MAC/D,iBAHF;AAAA,MAIE,WAAWjD,GAAGC,OAAOmD,QAAQ3D,YAAYiD,gBAAeG,eAAe5C,OAAOyC,WAAjE;AAAA,MACb;AAAA,MACA,SAAS/C;AAAAA,MANX,UAQG8C,CAAAA,WACCpC,oBAAC,gBAAD;AAAA,QAAgB,IAAI0C;AAAAA,QAApB,UAA6BG;AAAAA,MAAAA,CAA7B,IAEA7C,oBAAA,QAAA;AAAA,QAAM,IAAI0C;AAAAA,QAAV,UAAmBG;AAAAA,MAAAA,CAXvB,GAaGrD,kBACCQ,oBAAA,QAAA;AAAA,QAAM,IAAI4C;AAAAA,QAAe,WAAWhD,OAAOoC;AAAAA,QAA3C;AAAA,MAAA,CAAA,GAID,CAACK,oCAAgB,YAAD;AAAA,QAAY,MAAK;AAAA,MAAA,CAlBpC,CAAA;AAAA,IAAA,CAAA,GAoBCA,gBACCrC,oBAAC,SAAD;AAAA,MAAS,iBAAiBJ,OAAO0C;AAAAA,MAAc,SAASA;AAAAA,MAAxD,8BACG,YAAD;AAAA,QACE,cAAW;AAAA,QACX,WAAW1C,OAAOoD;AAAAA,QAClB,gBAAa;AAAA,QACb,0BAAO,OAAD;AAAA,UAAO,MAAK;AAAA,QAAA,CAJpB;AAAA,QAKE,SAAST;AAAAA,MAAAA,CALX;AAAA,IAAA,CAvBN,CAAA;AAAA,EAAA,CADF;AAmCD,CA7D8B;AA+D/BJ,aAAac,eAAe;AAAA,EAC1BX,cAAc;AADY;AAI5BH,aAAajC,cAAc;AClF3B,MAAM4B,yBAAyB;AAyB/B,MAAMoB,SAAS,CAAC;AAAA,EACd3C;AAAAA,EACAI;AAAAA,EACAH;AAAAA,EACAC;AAAAA,EACAtB,MAAAA;AAAAA,EACAiD;AAAAA,EACAJ,aAAAA;AAAAA,EACA5B;AAAAA,EACAiC,aAAAA;AAAAA,EACAE;AAAAA,EACAC;AAAAA,EACApD;AAAAA,EACA6C;AAAAA,EACArB;AAAAA,EACAtB;AAAAA,EACAuB;AAAAA,EACA,gBAAgBtB,SAAS;AAAA,EACzBwB;AAAAA,EACAD;AAAAA,KACG7B;AApBW,MAqBG;AACXqB,QAAAA,eACJK,mBAAmB,CAAC,CAACJ,eAAeH,QAAQ8B,SAASJ,0BAA0B,CAACG;AAElF,QAAMkB,kBAAkBxD,GAAGC,OAAOwD,QAAQhE,SAAhB;AAEpBiE,QAAAA,cAAc,CAACC,UAA0B;AAC7CA,UAAMC,eAAN;AACO;AAAA,EAAA;AAGT,8BACG,UAAD;AAAA,IAAU,cAAchE;AAAAA,IAAQ,iBAAiB4D;AAAAA,IAAjD,GAAsElE;AAAAA,IAAtE,UAAA,CACEe,oBAAC,cAAD;AAAA,MACE,aAAAqC;AAAA,MACA,SAASgB;AAAAA,MACT,MAAAlE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MANF,UAQG6C;AAAAA,IAAAA,CATL,GAWEhC,oBAAC,YAAD;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CArBJ,CAAA;AAAA,EAAA,CADF;AA0BD;"}
package/dist/index.js CHANGED
@@ -2,36 +2,62 @@ require('./style.css');
2
2
  "use strict";
3
3
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
4
4
  const dropdown = require("@launchpad-ui/dropdown");
5
- const classix = require("classix");
6
5
  const icons = require("@launchpad-ui/icons");
6
+ const classix = require("classix");
7
7
  const react = require("react");
8
8
  const jsxRuntime = require("react/jsx-runtime");
9
- const button = require("@launchpad-ui/button");
9
+ const button$1 = require("@launchpad-ui/button");
10
10
  const menu = require("@launchpad-ui/menu");
11
11
  const tooltip = require("@launchpad-ui/tooltip");
12
12
  const visuallyHidden = require("@react-aria/visually-hidden");
13
- const Filter$1 = "";
13
+ const filter = "_filter_1vdxa_1";
14
+ const buttonContainer = "_buttonContainer_1vdxa_5";
15
+ const button = "_button_1vdxa_5";
16
+ const appliedButton = "_appliedButton_1vdxa_24";
17
+ const name = "_name_1vdxa_59";
18
+ const appliedName = "_appliedName_1vdxa_64";
19
+ const description = "_description_1vdxa_68";
20
+ const appliedDescription = "_appliedDescription_1vdxa_74";
21
+ const clear = "_clear_1vdxa_82";
22
+ const isClearable = "_isClearable_1vdxa_91";
23
+ const clearTooltip = "_clearTooltip_1vdxa_123";
24
+ const filterClearButton = "_filterClearButton_1vdxa_129";
25
+ const styles = {
26
+ filter,
27
+ buttonContainer,
28
+ button,
29
+ appliedButton,
30
+ "focus-visible": "_focus-visible_1vdxa_1",
31
+ name,
32
+ appliedName,
33
+ description,
34
+ appliedDescription,
35
+ clear,
36
+ isClearable,
37
+ clearTooltip,
38
+ filterClearButton
39
+ };
14
40
  const AppliedFilterButton = react.forwardRef((props, ref) => {
15
41
  const {
16
- name,
42
+ name: name2,
17
43
  className,
18
- isSelected,
19
44
  children,
20
- onClickFilterButton
45
+ onClickFilterButton,
46
+ "data-test-id": testId
21
47
  } = props;
22
48
  const hasDescription = react.Children.count(children) !== 0;
23
49
  return /* @__PURE__ */ jsxRuntime.jsx("div", {
24
- className: "AppliedFilter-buttonContainer",
50
+ "data-test-id": testId,
25
51
  children: /* @__PURE__ */ jsxRuntime.jsxs("button", {
26
52
  "aria-haspopup": true,
27
- className: classix.cx("AppliedFilter-button", isSelected && "isSelected", className),
53
+ className: classix.cx(styles.appliedButton, className),
28
54
  ref,
29
55
  onClick: onClickFilterButton,
30
- children: [name && /* @__PURE__ */ jsxRuntime.jsxs("span", {
31
- className: "AppliedFilter-name",
32
- children: [name, hasDescription && ":"]
56
+ children: [name2 && /* @__PURE__ */ jsxRuntime.jsxs("span", {
57
+ className: styles.appliedName,
58
+ children: [name2, hasDescription && ":"]
33
59
  }), hasDescription && /* @__PURE__ */ jsxRuntime.jsx("span", {
34
- className: "AppliedFilter-description",
60
+ className: styles.appliedDescription,
35
61
  children
36
62
  }), /* @__PURE__ */ jsxRuntime.jsx(icons.ExpandMore, {
37
63
  size: "small"
@@ -52,7 +78,8 @@ const FilterMenu = ({
52
78
  isLoading = false,
53
79
  disabledOptionTooltip,
54
80
  enableVirtualization,
55
- size
81
+ size,
82
+ "data-test-id": testId = "filter-menu"
56
83
  }) => {
57
84
  const filterOptions = isLoading ? [{
58
85
  name: "loading...",
@@ -60,15 +87,17 @@ const FilterMenu = ({
60
87
  isDisabled: true
61
88
  }] : options;
62
89
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
63
- children: [onClearFilter && /* @__PURE__ */ jsxRuntime.jsx(button.Button, {
90
+ children: [onClearFilter && /* @__PURE__ */ jsxRuntime.jsx(button$1.Button, {
64
91
  tabIndex: 0,
65
- className: "Menu-clear",
92
+ className: styles.filterClearButton,
66
93
  onClick: onClearFilter,
67
94
  kind: "link",
95
+ "data-test-id": "clear-filter-button",
68
96
  children: "CLEAR FILTER"
69
97
  }), /* @__PURE__ */ jsxRuntime.jsxs(menu.Menu, {
70
98
  enableVirtualization,
71
99
  size,
100
+ "data-test-id": testId,
72
101
  onSelect,
73
102
  children: [enableSearch && /* @__PURE__ */ jsxRuntime.jsx(menu.MenuSearch, {
74
103
  value: searchValue,
@@ -100,8 +129,8 @@ const AppliedFilter = ({
100
129
  searchValue,
101
130
  onSearchChange,
102
131
  searchPlaceholder,
103
- name,
104
- description,
132
+ name: name2,
133
+ description: description2,
105
134
  options,
106
135
  className,
107
136
  isEmpty,
@@ -113,17 +142,16 @@ const AppliedFilter = ({
113
142
  ...props
114
143
  }) => {
115
144
  const enableSearch = onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD$1 || !isEmpty);
116
- const dropdownClasses = classix.cx("Filter-target", className);
117
145
  return /* @__PURE__ */ jsxRuntime.jsxs(dropdown.Dropdown, {
118
- targetClassName: dropdownClasses,
146
+ targetClassName: className,
119
147
  placement: "bottom-start",
120
148
  enableArrow: false,
121
- "data-test-id": testId,
122
149
  ...props,
123
150
  children: [/* @__PURE__ */ jsxRuntime.jsx(AppliedFilterButton, {
124
- name,
151
+ "data-test-id": testId,
152
+ name: name2,
125
153
  onClickFilterButton,
126
- children: description
154
+ children: description2
127
155
  }), /* @__PURE__ */ jsxRuntime.jsx(FilterMenu, {
128
156
  options,
129
157
  searchValue,
@@ -139,10 +167,10 @@ const AppliedFilter = ({
139
167
  const FilterButton = react.forwardRef((props, ref) => {
140
168
  const {
141
169
  children,
142
- name,
170
+ name: name2,
143
171
  hideName,
144
- isClearable,
145
- clearTooltip,
172
+ isClearable: isClearable2,
173
+ clearTooltip: clearTooltip2,
146
174
  onClear,
147
175
  isSelected,
148
176
  onClickFilterButton,
@@ -154,17 +182,17 @@ const FilterButton = react.forwardRef((props, ref) => {
154
182
  const descriptionId = react.useId();
155
183
  const hasDescription = react.Children.count(children) !== 0;
156
184
  const nameElement = /* @__PURE__ */ jsxRuntime.jsxs("span", {
157
- className: "Filter-name",
158
- children: [name, hasDescription && ":"]
185
+ className: styles.name,
186
+ children: [name2, hasDescription && ":"]
159
187
  });
160
188
  return /* @__PURE__ */ jsxRuntime.jsxs("div", {
161
- className: "Filter-buttonContainer",
189
+ className: styles.buttonContainer,
162
190
  "data-test-id": testId,
163
191
  children: [/* @__PURE__ */ jsxRuntime.jsxs("button", {
164
192
  ...rest,
165
193
  "aria-labelledby": `${nameId} ${hasDescription ? descriptionId : ""}`,
166
194
  "aria-haspopup": true,
167
- className: classix.cx("Filter-button", className, (isClearable || isSelected) && "is-clearable"),
195
+ className: classix.cx(styles.button, className, (isClearable2 || isSelected) && styles.isClearable),
168
196
  ref,
169
197
  onClick: onClickFilterButton,
170
198
  children: [hideName ? /* @__PURE__ */ jsxRuntime.jsx(visuallyHidden.VisuallyHidden, {
@@ -175,17 +203,18 @@ const FilterButton = react.forwardRef((props, ref) => {
175
203
  children: nameElement
176
204
  }), hasDescription && /* @__PURE__ */ jsxRuntime.jsx("span", {
177
205
  id: descriptionId,
178
- className: "Filter-description",
206
+ className: styles.description,
179
207
  children
180
- }), !isClearable && /* @__PURE__ */ jsxRuntime.jsx(icons.ExpandMore, {
208
+ }), !isClearable2 && /* @__PURE__ */ jsxRuntime.jsx(icons.ExpandMore, {
181
209
  size: "small"
182
210
  })]
183
- }), isClearable && /* @__PURE__ */ jsxRuntime.jsx(tooltip.Tooltip, {
184
- targetClassName: "Filter-clearTooltip",
185
- content: clearTooltip,
186
- children: /* @__PURE__ */ jsxRuntime.jsx(button.IconButton, {
211
+ }), isClearable2 && /* @__PURE__ */ jsxRuntime.jsx(tooltip.Tooltip, {
212
+ targetClassName: styles.clearTooltip,
213
+ content: clearTooltip2,
214
+ children: /* @__PURE__ */ jsxRuntime.jsx(button$1.IconButton, {
187
215
  "aria-label": "Clear filter",
188
- className: "Filter-clear",
216
+ className: styles.clear,
217
+ "data-test-id": "clear-filter-button",
189
218
  icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Close, {
190
219
  size: "tiny"
191
220
  }),
@@ -204,11 +233,11 @@ const Filter = ({
204
233
  onSearchChange,
205
234
  searchPlaceholder,
206
235
  searchAriaLabel,
207
- name,
236
+ name: name2,
208
237
  hideName,
209
- description,
238
+ description: description2,
210
239
  options,
211
- isClearable,
240
+ isClearable: isClearable2,
212
241
  onClear,
213
242
  isSelected,
214
243
  className,
@@ -222,23 +251,23 @@ const Filter = ({
222
251
  ...props
223
252
  }) => {
224
253
  const enableSearch = onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD || !isEmpty);
225
- const dropdownClasses = classix.cx("Filter", "Filter-target", className);
254
+ const dropdownClasses = classix.cx(styles.filter, className);
226
255
  const handleClear = (event) => {
227
256
  event.preventDefault();
228
257
  onClear == null ? void 0 : onClear();
229
258
  };
230
259
  return /* @__PURE__ */ jsxRuntime.jsxs(dropdown.Dropdown, {
260
+ targetTestId: testId,
231
261
  targetClassName: dropdownClasses,
232
262
  ...props,
233
263
  children: [/* @__PURE__ */ jsxRuntime.jsx(FilterButton, {
234
- isClearable,
264
+ isClearable: isClearable2,
235
265
  onClear: handleClear,
236
- name,
266
+ name: name2,
237
267
  hideName,
238
268
  isSelected,
239
269
  onClickFilterButton,
240
- "data-test-id": testId,
241
- children: description
270
+ children: description2
242
271
  }), /* @__PURE__ */ jsxRuntime.jsx(FilterMenu, {
243
272
  options,
244
273
  searchValue,
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/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=\"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 } 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=\"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 '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 'data-test-id': testId = 'applied-filter',\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 data-test-id={testId}\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 } 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 'data-test-id'?: 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 'data-test-id': testId = 'filter-button',\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=\"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=\"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 'data-test-id'?: string;\n triggerTestId?: 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 'data-test-id': testId = 'filter',\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 data-test-id={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","ExpandMore","displayName","FilterMenu","options","onClearFilter","enableSearch","searchValue","searchPlaceholder","searchAriaLabel","onSelect","onSearchChange","isLoading","disabledOptionTooltip","enableVirtualization","size","filterOptions","value","isDisabled","_Fragment","Button","Menu","MenuSearch","map","option","index","isDivider","MenuDivider","MenuItem","isChecked","Check","undefined","nested","groupHeader","SEARCH_INPUT_THRESHOLD","AppliedFilter","description","isEmpty","testId","length","dropdownClasses","Dropdown","FilterButton","hideName","isClearable","clearTooltip","onClear","rest","nameId","useId","descriptionId","nameElement","VisuallyHidden","Tooltip","IconButton","Close","defaultProps","Filter","handleClear","event","preventDefault"],"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}>\n {name}\n {hasDescription && ':'}\n </span>\n )}\n {hasDescription && <span className={styles.appliedDescription}>{children}</span>}\n <ExpandMore size=\"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 } 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 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 '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 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 '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 '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\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 } 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 onClickFilterButton?(): void;\n 'data-test-id'?: 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 'data-test-id': testId = 'filter-button',\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 return (\n <div className={styles.buttonContainer} data-test-id={testId}>\n <button\n {...rest}\n aria-labelledby={`${nameId} ${hasDescription ? descriptionId : ''}`}\n aria-haspopup\n className={cx(styles.button, className, (isClearable || isSelected) && styles.isClearable)}\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={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=\"Clear filter\"\n className={styles.clear}\n data-test-id=\"clear-filter-button\"\n icon={<Close size=\"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';\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 onSelect?(item: FilterOption): void;\n isEmpty?: boolean;\n isLoading?: boolean;\n onClickFilterButton?(): void;\n disabledOptionTooltip?: string;\n 'data-test-id'?: string;\n triggerTestId?: 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 'data-test-id': testId = 'filter',\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(styles.filter, className);\n\n const handleClear = (event: SyntheticEvent) => {\n event.preventDefault();\n onClear?.();\n };\n\n return (\n <Dropdown targetTestId={testId} targetClassName={dropdownClasses} {...props}>\n <FilterButton\n isClearable={isClearable}\n onClear={handleClear}\n name={name}\n hideName={hideName}\n isSelected={isSelected}\n onClickFilterButton={onClickFilterButton}\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","children","onClickFilterButton","testId","hasDescription","Children","count","cx","styles","appliedButton","_jsxs","appliedName","_jsx","appliedDescription","ExpandMore","displayName","FilterMenu","options","onClearFilter","enableSearch","searchValue","searchPlaceholder","searchAriaLabel","onSelect","onSearchChange","isLoading","disabledOptionTooltip","enableVirtualization","size","filterOptions","value","isDisabled","_Fragment","Button","filterClearButton","Menu","MenuSearch","map","option","index","isDivider","MenuDivider","MenuItem","isChecked","Check","undefined","nested","groupHeader","SEARCH_INPUT_THRESHOLD","AppliedFilter","description","isEmpty","length","Dropdown","FilterButton","hideName","isClearable","clearTooltip","onClear","isSelected","rest","nameId","useId","descriptionId","nameElement","buttonContainer","button","VisuallyHidden","Tooltip","IconButton","clear","Close","defaultProps","Filter","dropdownClasses","filter","handleClear","event","preventDefault"],"mappings":"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"}
package/dist/style.css CHANGED
@@ -1,16 +1,15 @@
1
- .Filter {
1
+ ._filter_1vdxa_1 {
2
2
  font-family: var(--font-family-base);
3
3
  }
4
4
 
5
- .Filter-buttonContainer {
5
+ ._buttonContainer_1vdxa_5 {
6
6
  cursor: pointer;
7
7
  display: inline-flex;
8
8
  align-items: center;
9
9
  position: relative;
10
10
  }
11
11
 
12
- .Filter-button {
13
- cursor: pointer;
12
+ ._button_1vdxa_5 {
14
13
  border-radius: var(--border-radius);
15
14
  padding-top: 0;
16
15
  padding-bottom: 0;
@@ -22,7 +21,7 @@
22
21
  background-color: var(--color-white);
23
22
  }
24
23
 
25
- .AppliedFilter-button {
24
+ ._appliedButton_1vdxa_24 {
26
25
  color: var(--color-text);
27
26
  height: 2rem;
28
27
  background-color: var(--color-gray-100);
@@ -31,8 +30,8 @@
31
30
  display: flex;
32
31
  }
33
32
 
34
- .Filter-button,
35
- .AppliedFilter-button {
33
+ ._button_1vdxa_5,
34
+ ._appliedButton_1vdxa_24 {
36
35
  font-family: inherit;
37
36
  font-size: 1.3rem;
38
37
  cursor: pointer;
@@ -41,62 +40,57 @@
41
40
  border-color: var(--color-white);
42
41
  }
43
42
 
44
- .Filter-button:hover, .AppliedFilter-button:hover {
43
+ ._button_1vdxa_5:hover, ._appliedButton_1vdxa_24:hover {
45
44
  background-color: var(--color-background-hover);
46
45
  border-color: var(--color-border);
47
46
  }
48
47
 
49
- .Filter-button:focus, .AppliedFilter-button:focus {
48
+ ._button_1vdxa_5:focus, ._appliedButton_1vdxa_24:focus {
50
49
  box-shadow: 0 0 0 2px var(--color-white), 0 0 0 4px var(--color-focus);
51
50
  border-color: var(--color-border);
52
51
  outline: none;
53
52
  }
54
53
 
55
- .Filter-button:focus:not(.focus-visible), .AppliedFilter-button:focus:not(.focus-visible) {
54
+ ._button_1vdxa_5:focus:not(._focus-visible_1vdxa_1), ._appliedButton_1vdxa_24:focus:not(._focus-visible_1vdxa_1) {
56
55
  box-shadow: none;
57
56
  box-shadow: initial;
58
57
  border-color: var(--color-white);
59
58
  }
60
59
 
61
- .Filter-button:focus:not(.focus-visible), .AppliedFilter-button:focus:not(.focus-visible) {
60
+ ._button_1vdxa_5:focus:not(._focus-visible_1vdxa_1), ._appliedButton_1vdxa_24:focus:not(._focus-visible_1vdxa_1) {
62
61
  box-shadow: none;
63
62
  box-shadow: initial;
64
63
  border-color: var(--color-white);
65
64
  }
66
65
 
67
- .Filter-button:focus:not(.focus-visible), .AppliedFilter-button:focus:not(.focus-visible) {
66
+ ._button_1vdxa_5:focus:not(._focus-visible_1vdxa_1), ._appliedButton_1vdxa_24:focus:not(._focus-visible_1vdxa_1) {
68
67
  box-shadow: none;
69
68
  box-shadow: initial;
70
69
  border-color: var(--color-white);
71
70
  }
72
71
 
73
- .Filter-button:focus:not(:focus-visible), .AppliedFilter-button:focus:not(:focus-visible) {
72
+ ._button_1vdxa_5:focus:not(:focus-visible), ._appliedButton_1vdxa_24:focus:not(:focus-visible) {
74
73
  box-shadow: none;
75
74
  box-shadow: initial;
76
75
  border-color: var(--color-white);
77
76
  }
78
77
 
79
- .is-clearable {
80
- background-color: var(--color-blue-200);
81
- padding-right: 3.1rem;
82
- }
83
-
84
- .Filter-name {
78
+ ._name_1vdxa_59 {
85
79
  margin-right: 0.5rem;
86
80
  font-weight: var(--font-weight-medium);
87
81
  }
88
82
 
89
- .AppliedFilter-name {
83
+ ._appliedName_1vdxa_64 {
90
84
  margin-right: 0.3rem;
91
85
  }
92
86
 
93
- .Filter-description {
87
+ ._description_1vdxa_68 {
94
88
  color: var(--color-text);
95
89
  font-weight: var(--font-weight-medium);
96
90
  }
97
91
 
98
- .Filter-button .Filter-description,
99
- .AppliedFilter-button .AppliedFilter-description {
92
+ ._description_1vdxa_68,
93
+ ._appliedDescription_1vdxa_74 {
100
94
  margin-right: 0.5rem;
101
95
  max-width: 16rem;
102
96
  overflow: hidden;
@@ -104,11 +98,7 @@
104
98
  white-space: nowrap;
105
99
  }
106
100
 
107
- .Filter-description .Gravatar:first-child {
108
- margin-right: 0.5rem;
109
- }
110
-
111
- .Filter-clear {
101
+ ._clear_1vdxa_82 {
112
102
  cursor: pointer;
113
103
  padding: 0.3rem;
114
104
  }
@@ -117,62 +107,83 @@
117
107
  border: 1px solid var(--color-text-subtle-secondary);
118
108
  }
119
109
 
120
- .Filter-button.is-clearable {
110
+ ._button_1vdxa_5._isClearable_1vdxa_91 {
121
111
  background-color: var(--color-blue-200);
122
112
  padding-right: 3.1rem;
123
113
  }
124
114
 
125
- .Filter-button.is-clearable:focus,
126
- .Filter-button.is-clearable:hover,
127
- .Filter-button.is-clearable:active {
115
+ ._button_1vdxa_5._isClearable_1vdxa_91:focus,
116
+ ._button_1vdxa_5._isClearable_1vdxa_91:hover,
117
+ ._button_1vdxa_5._isClearable_1vdxa_91:active {
128
118
  background-color: var(--color-blue-300);
129
119
  }
130
120
 
131
- .Filter-button.is-clearable:focus:not(.focus-visible) {
121
+ ._button_1vdxa_5._isClearable_1vdxa_91:focus:not(._focus-visible_1vdxa_1) {
132
122
  background-color: transparent;
133
123
  background-color: initial;
134
124
  }
135
125
 
136
- .Filter-button.is-clearable:focus:not(.focus-visible) {
126
+ ._button_1vdxa_5._isClearable_1vdxa_91:focus:not(._focus-visible_1vdxa_1) {
137
127
  background-color: transparent;
138
128
  background-color: initial;
139
129
  }
140
130
 
141
- .Filter-button.is-clearable:focus:not(.focus-visible) {
131
+ ._button_1vdxa_5._isClearable_1vdxa_91:focus:not(._focus-visible_1vdxa_1) {
142
132
  background-color: transparent;
143
133
  background-color: initial;
144
134
  }
145
135
 
146
- .Filter-button.is-clearable:focus:not(:focus-visible) {
136
+ ._button_1vdxa_5._isClearable_1vdxa_91:focus:not(:focus-visible) {
147
137
  background-color: transparent;
148
138
  background-color: initial;
149
139
  }
150
140
 
151
- .Filter-button.is-clearable:focus:not(.focus-visible):hover {
141
+ ._button_1vdxa_5._isClearable_1vdxa_91:focus:not(._focus-visible_1vdxa_1):hover {
152
142
  background-color: var(--color-blue-300);
153
143
  }
154
144
 
155
- .Filter-button.is-clearable:focus:not(:focus-visible):hover {
145
+ ._button_1vdxa_5._isClearable_1vdxa_91:focus:not(:focus-visible):hover {
156
146
  background-color: var(--color-blue-300);
157
147
  }
158
148
 
159
- .Filter-button:hover:not(.is-clearable),
160
- .Filter-button:focus:not(.is-clearable),
161
- [data-state='open'] .Filter-button:not(.is-clearable) {
149
+ ._button_1vdxa_5:hover:not(._isClearable_1vdxa_91),
150
+ ._button_1vdxa_5:focus:not(._isClearable_1vdxa_91),
151
+ [data-state='open'] ._button_1vdxa_5:not(._isClearable_1vdxa_91) {
162
152
  background-color: var(--color-background-hover);
163
153
  border-color: var(--color-text-subtle-secondary);
164
154
  }
165
155
 
166
- .Filter-button:focus:not(.focus-visible):not(.is-clearable):hover {
156
+ ._button_1vdxa_5:focus:not(._focus-visible_1vdxa_1):not(._isClearable_1vdxa_91):hover {
167
157
  background-color: var(--color-background-hover);
168
158
  }
169
159
 
170
- .Filter-button:focus:not(:focus-visible):not(.is-clearable):hover {
160
+ ._button_1vdxa_5:focus:not(:focus-visible):not(._isClearable_1vdxa_91):hover {
171
161
  background-color: var(--color-background-hover);
172
162
  }
173
163
 
174
- .Filter-clearTooltip {
164
+ ._clearTooltip_1vdxa_123 {
175
165
  line-height: 1;
176
166
  position: absolute;
177
167
  right: 0.7rem;
178
168
  }
169
+
170
+ ._filterClearButton_1vdxa_129 {
171
+ text-decoration: none;
172
+ color: var(--color-system-red-600);
173
+ font-size: 1.3rem;
174
+ font-weight: var(--font-weight-medium);
175
+ padding: 1rem;
176
+ width: 100%;
177
+ border-bottom: 1px solid var(--color-border);
178
+ }
179
+
180
+ ._filterClearButton_1vdxa_129:active,
181
+ ._filterClearButton_1vdxa_129:focus,
182
+ ._filterClearButton_1vdxa_129:hover {
183
+ outline: none;
184
+ box-shadow: none;
185
+ box-shadow: initial;
186
+ color: var(--color-system-red-600);
187
+ border-bottom-color: var(--color-border);
188
+ background-color: var(--color-background-hover);
189
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@launchpad-ui/filter",
3
- "version": "0.4.10",
3
+ "version": "0.4.12",
4
4
  "status": "beta",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -27,11 +27,11 @@
27
27
  "source": "src/index.ts",
28
28
  "dependencies": {
29
29
  "@launchpad-ui/button": "~0.7.2",
30
- "@launchpad-ui/dropdown": "~0.5.7",
30
+ "@launchpad-ui/dropdown": "~0.5.8",
31
31
  "@launchpad-ui/icons": "~0.5.5",
32
- "@launchpad-ui/menu": "~0.6.10",
32
+ "@launchpad-ui/menu": "~0.6.12",
33
33
  "@launchpad-ui/tokens": "~0.1.5",
34
- "@launchpad-ui/tooltip": "~0.6.8",
34
+ "@launchpad-ui/tooltip": "~0.6.9",
35
35
  "@react-aria/visually-hidden": "^3.4.0",
36
36
  "classix": "^2.1.13"
37
37
  },