@launchpad-ui/filter 0.4.43 → 0.4.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import './style.css';
2
- import { jsx, jsxs, Fragment } from "react/jsx-runtime";
3
2
  import { Dropdown } from "@launchpad-ui/dropdown";
4
3
  import { ExpandMore, Check, Close } from "@launchpad-ui/icons";
5
4
  import { cx } from "classix";
6
5
  import { forwardRef, Children, useId } from "react";
6
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
7
7
  import { Button, IconButton } from "@launchpad-ui/button";
8
8
  import { Menu, MenuSearch, MenuDivider, MenuItem } from "@launchpad-ui/menu";
9
9
  import { Tooltip } from "@launchpad-ui/tooltip";
@@ -36,25 +36,35 @@ const styles = {
36
36
  filterClearButton
37
37
  };
38
38
  const AppliedFilterButton = forwardRef((props, ref) => {
39
- const { name: name2, className, children, onClickFilterButton, "data-test-id": testId } = props;
39
+ const {
40
+ name: name2,
41
+ className,
42
+ children,
43
+ onClickFilterButton,
44
+ "data-test-id": testId
45
+ } = props;
40
46
  const hasDescription = Children.count(children) !== 0;
41
- return /* @__PURE__ */ jsx("div", { "data-test-id": testId, children: /* @__PURE__ */ jsxs(
42
- "button",
43
- {
47
+ return /* @__PURE__ */ jsx("div", {
48
+ "data-test-id": testId,
49
+ children: /* @__PURE__ */ jsxs("button", {
44
50
  "aria-haspopup": true,
45
51
  className: cx(styles.appliedButton, className),
46
52
  ref,
47
53
  onClick: onClickFilterButton,
48
- children: [
49
- name2 && /* @__PURE__ */ jsxs("span", { className: styles.appliedName, "data-test-id": `${testId}-name`, children: [
50
- name2,
51
- hasDescription && ":"
52
- ] }),
53
- hasDescription && /* @__PURE__ */ jsx("span", { className: styles.appliedDescription, "data-test-id": `${testId}-description`, children }),
54
- /* @__PURE__ */ jsx(ExpandMore, { size: "small", "data-test-id": `${testId}-expand` })
55
- ]
56
- }
57
- ) });
54
+ children: [name2 && /* @__PURE__ */ jsxs("span", {
55
+ className: styles.appliedName,
56
+ "data-test-id": `${testId}-name`,
57
+ children: [name2, hasDescription && ":"]
58
+ }), hasDescription && /* @__PURE__ */ jsx("span", {
59
+ className: styles.appliedDescription,
60
+ "data-test-id": `${testId}-description`,
61
+ children
62
+ }), /* @__PURE__ */ jsx(ExpandMore, {
63
+ size: "small",
64
+ "data-test-id": `${testId}-expand`
65
+ })]
66
+ })
67
+ });
58
68
  });
59
69
  AppliedFilterButton.displayName = "AppliedFilterButton";
60
70
  const FilterMenu = ({
@@ -72,61 +82,48 @@ const FilterMenu = ({
72
82
  size,
73
83
  "data-test-id": testId = "filter-menu"
74
84
  }) => {
75
- const filterOptions = isLoading ? [{ name: "loading...", value: "loading...", isDisabled: true }] : options;
76
- return /* @__PURE__ */ jsxs(Fragment, { children: [
77
- onClearFilter && /* @__PURE__ */ jsx(
78
- Button,
79
- {
80
- tabIndex: 0,
81
- className: styles.filterClearButton,
82
- onClick: onClearFilter,
83
- kind: "link",
84
- "data-test-id": "clear-filter-button",
85
- children: "CLEAR FILTER"
86
- }
87
- ),
88
- /* @__PURE__ */ jsxs(
89
- Menu,
90
- {
91
- enableVirtualization,
92
- size,
93
- "data-test-id": testId,
94
- onSelect,
95
- children: [
96
- enableSearch && /* @__PURE__ */ jsx(
97
- MenuSearch,
98
- {
99
- value: searchValue,
100
- placeholder: searchPlaceholder,
101
- onChange: onSearchChange,
102
- ariaLabel: searchAriaLabel
103
- }
104
- ),
105
- filterOptions.map((option, index) => {
106
- if (option.isDivider) {
107
- return /* @__PURE__ */ jsx(MenuDivider, {}, `divider-${index}`);
108
- }
109
- return /* @__PURE__ */ jsx(
110
- MenuItem,
111
- {
112
- item: option,
113
- disabled: option.isDisabled,
114
- icon: option.isChecked ? Check : null,
115
- role: "menuitemradio",
116
- "aria-checked": option.isChecked ? "true" : void 0,
117
- nested: option.nested,
118
- groupHeader: option.groupHeader,
119
- tooltip: option.isDisabled && disabledOptionTooltip ? disabledOptionTooltip : void 0,
120
- tooltipPlacement: "right",
121
- children: option.name
122
- },
123
- option.value
124
- );
125
- })
126
- ]
127
- }
128
- )
129
- ] });
85
+ const filterOptions = isLoading ? [{
86
+ name: "loading...",
87
+ value: "loading...",
88
+ isDisabled: true
89
+ }] : options;
90
+ return /* @__PURE__ */ jsxs(Fragment, {
91
+ children: [onClearFilter && /* @__PURE__ */ jsx(Button, {
92
+ tabIndex: 0,
93
+ className: styles.filterClearButton,
94
+ onClick: onClearFilter,
95
+ kind: "link",
96
+ "data-test-id": "clear-filter-button",
97
+ children: "CLEAR FILTER"
98
+ }), /* @__PURE__ */ jsxs(Menu, {
99
+ enableVirtualization,
100
+ size,
101
+ "data-test-id": testId,
102
+ onSelect,
103
+ children: [enableSearch && /* @__PURE__ */ jsx(MenuSearch, {
104
+ value: searchValue,
105
+ placeholder: searchPlaceholder,
106
+ onChange: onSearchChange,
107
+ ariaLabel: searchAriaLabel
108
+ }), filterOptions.map((option, index) => {
109
+ if (option.isDivider) {
110
+ return /* @__PURE__ */ jsx(MenuDivider, {}, `divider-${index}`);
111
+ }
112
+ return /* @__PURE__ */ jsx(MenuItem, {
113
+ item: option,
114
+ disabled: option.isDisabled,
115
+ icon: option.isChecked ? Check : null,
116
+ role: "menuitemradio",
117
+ "aria-checked": option.isChecked ? "true" : void 0,
118
+ nested: option.nested,
119
+ groupHeader: option.groupHeader,
120
+ tooltip: option.isDisabled && disabledOptionTooltip ? disabledOptionTooltip : void 0,
121
+ tooltipPlacement: "right",
122
+ children: option.name
123
+ }, option.value);
124
+ })]
125
+ })]
126
+ });
130
127
  };
131
128
  const SEARCH_INPUT_THRESHOLD$1 = 4;
132
129
  const AppliedFilter = ({
@@ -146,30 +143,27 @@ const AppliedFilter = ({
146
143
  ...props
147
144
  }) => {
148
145
  const enableSearch = onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD$1 || !isEmpty);
149
- return /* @__PURE__ */ jsxs(Dropdown, { targetClassName: className, placement: "bottom-start", enableArrow: false, ...props, children: [
150
- /* @__PURE__ */ jsx(
151
- AppliedFilterButton,
152
- {
153
- "data-test-id": testId,
154
- name: name2,
155
- onClickFilterButton,
156
- children: description2
157
- }
158
- ),
159
- /* @__PURE__ */ jsx(
160
- FilterMenu,
161
- {
162
- options,
163
- searchValue,
164
- searchPlaceholder,
165
- enableSearch,
166
- searchAriaLabel,
167
- onSearchChange,
168
- onClearFilter,
169
- isLoading
170
- }
171
- )
172
- ] });
146
+ return /* @__PURE__ */ jsxs(Dropdown, {
147
+ targetClassName: className,
148
+ placement: "bottom-start",
149
+ enableArrow: false,
150
+ ...props,
151
+ children: [/* @__PURE__ */ jsx(AppliedFilterButton, {
152
+ "data-test-id": testId,
153
+ name: name2,
154
+ onClickFilterButton,
155
+ children: description2
156
+ }), /* @__PURE__ */ jsx(FilterMenu, {
157
+ options,
158
+ searchValue,
159
+ searchPlaceholder,
160
+ enableSearch,
161
+ searchAriaLabel,
162
+ onSearchChange,
163
+ onClearFilter,
164
+ isLoading
165
+ })]
166
+ });
173
167
  };
174
168
  const FilterButton = forwardRef((props, ref) => {
175
169
  const {
@@ -188,38 +182,47 @@ const FilterButton = forwardRef((props, ref) => {
188
182
  const nameId = useId();
189
183
  const descriptionId = useId();
190
184
  const hasDescription = Children.count(children) !== 0;
191
- const nameElement = /* @__PURE__ */ jsxs("span", { className: styles.name, children: [
192
- name2,
193
- hasDescription && ":"
194
- ] });
195
- return /* @__PURE__ */ jsxs("div", { className: styles.buttonContainer, "data-test-id": testId, children: [
196
- /* @__PURE__ */ jsxs(
197
- "button",
198
- {
199
- ...rest,
200
- "aria-labelledby": `${nameId} ${hasDescription ? descriptionId : ""}`,
201
- "aria-haspopup": true,
202
- className: cx(styles.button, className, (isClearable2 || isSelected) && styles.isClearable),
203
- ref,
204
- onClick: onClickFilterButton,
205
- children: [
206
- hideName ? /* @__PURE__ */ jsx(VisuallyHidden, { id: nameId, children: nameElement }) : /* @__PURE__ */ jsx("span", { id: nameId, children: nameElement }),
207
- hasDescription && /* @__PURE__ */ jsx("span", { id: descriptionId, className: styles.description, children }),
208
- !isClearable2 && /* @__PURE__ */ jsx(ExpandMore, { size: "small" })
209
- ]
210
- }
211
- ),
212
- isClearable2 && /* @__PURE__ */ jsx(Tooltip, { targetClassName: styles.clearTooltip, content: clearTooltip2, children: /* @__PURE__ */ jsx(
213
- IconButton,
214
- {
185
+ const nameElement = /* @__PURE__ */ jsxs("span", {
186
+ className: styles.name,
187
+ children: [name2, hasDescription && ":"]
188
+ });
189
+ return /* @__PURE__ */ jsxs("div", {
190
+ className: styles.buttonContainer,
191
+ "data-test-id": testId,
192
+ children: [/* @__PURE__ */ jsxs("button", {
193
+ ...rest,
194
+ "aria-labelledby": `${nameId} ${hasDescription ? descriptionId : ""}`,
195
+ "aria-haspopup": true,
196
+ className: cx(styles.button, className, (isClearable2 || isSelected) && styles.isClearable),
197
+ ref,
198
+ onClick: onClickFilterButton,
199
+ children: [hideName ? /* @__PURE__ */ jsx(VisuallyHidden, {
200
+ id: nameId,
201
+ children: nameElement
202
+ }) : /* @__PURE__ */ jsx("span", {
203
+ id: nameId,
204
+ children: nameElement
205
+ }), hasDescription && /* @__PURE__ */ jsx("span", {
206
+ id: descriptionId,
207
+ className: styles.description,
208
+ children
209
+ }), !isClearable2 && /* @__PURE__ */ jsx(ExpandMore, {
210
+ size: "small"
211
+ })]
212
+ }), isClearable2 && /* @__PURE__ */ jsx(Tooltip, {
213
+ targetClassName: styles.clearTooltip,
214
+ content: clearTooltip2,
215
+ children: /* @__PURE__ */ jsx(IconButton, {
215
216
  "aria-label": "Clear filter",
216
217
  className: styles.clear,
217
218
  "data-test-id": "clear-filter-button",
218
- icon: /* @__PURE__ */ jsx(Close, { size: "tiny" }),
219
+ icon: /* @__PURE__ */ jsx(Close, {
220
+ size: "tiny"
221
+ }),
219
222
  onClick: onClear
220
- }
221
- ) })
222
- ] });
223
+ })
224
+ })]
225
+ });
223
226
  });
224
227
  FilterButton.defaultProps = {
225
228
  clearTooltip: "Clear filter"
@@ -254,35 +257,31 @@ const Filter = ({
254
257
  event.preventDefault();
255
258
  onClear == null ? void 0 : onClear();
256
259
  };
257
- return /* @__PURE__ */ jsxs(Dropdown, { targetTestId: testId, targetClassName: dropdownClasses, ...props, children: [
258
- /* @__PURE__ */ jsx(
259
- FilterButton,
260
- {
261
- isClearable: isClearable2,
262
- onClear: handleClear,
263
- name: name2,
264
- hideName,
265
- isSelected,
266
- onClickFilterButton,
267
- children: description2
268
- }
269
- ),
270
- /* @__PURE__ */ jsx(
271
- FilterMenu,
272
- {
273
- options,
274
- searchValue,
275
- searchPlaceholder,
276
- searchAriaLabel,
277
- enableSearch,
278
- onSearchChange,
279
- isLoading,
280
- disabledOptionTooltip,
281
- size,
282
- enableVirtualization
283
- }
284
- )
285
- ] });
260
+ return /* @__PURE__ */ jsxs(Dropdown, {
261
+ targetTestId: testId,
262
+ targetClassName: dropdownClasses,
263
+ ...props,
264
+ children: [/* @__PURE__ */ jsx(FilterButton, {
265
+ isClearable: isClearable2,
266
+ onClear: handleClear,
267
+ name: name2,
268
+ hideName,
269
+ isSelected,
270
+ onClickFilterButton,
271
+ children: description2
272
+ }), /* @__PURE__ */ jsx(FilterMenu, {
273
+ options,
274
+ searchValue,
275
+ searchPlaceholder,
276
+ searchAriaLabel,
277
+ enableSearch,
278
+ onSearchChange,
279
+ isLoading,
280
+ disabledOptionTooltip,
281
+ size,
282
+ enableVirtualization
283
+ })]
284
+ });
286
285
  };
287
286
  export {
288
287
  AppliedFilter,
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/AppliedFilterButton.tsx","../src/FilterMenu.tsx","../src/AppliedFilter.tsx","../src/FilterButton.tsx","../src/Filter.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { ExpandMore } from '@launchpad-ui/icons';\nimport { cx } from 'classix';\nimport { Children, forwardRef } from 'react';\n\nimport styles from './styles/Filter.module.css';\n\ntype AppliedFilterButtonProps = {\n name?: ReactNode;\n className?: string;\n children: ReactNode;\n onClickFilterButton?(): void;\n 'data-test-id': string;\n};\n\ntype Ref = HTMLButtonElement;\n\nconst AppliedFilterButton = forwardRef<Ref, AppliedFilterButtonProps>((props, ref) => {\n const { name, className, children, onClickFilterButton, 'data-test-id': testId } = props;\n\n const hasDescription = Children.count(children) !== 0;\n\n return (\n <div data-test-id={testId}>\n <button\n aria-haspopup\n className={cx(styles.appliedButton, className)}\n ref={ref}\n onClick={onClickFilterButton}\n >\n {name && (\n <span className={styles.appliedName} data-test-id={`${testId}-name`}>\n {name}\n {hasDescription && ':'}\n </span>\n )}\n {hasDescription && (\n <span className={styles.appliedDescription} data-test-id={`${testId}-description`}>\n {children}\n </span>\n )}\n <ExpandMore size=\"small\" data-test-id={`${testId}-expand`} />\n </button>\n </div>\n );\n});\n\nAppliedFilterButton.displayName = 'AppliedFilterButton';\n\nexport type { AppliedFilterButtonProps };\nexport { AppliedFilterButton };\n","import type { MenuProps } from '@launchpad-ui/menu';\nimport type { ChangeEvent, ReactNode } from 'react';\n\nimport { Button } from '@launchpad-ui/button';\nimport { Check } from '@launchpad-ui/icons';\nimport { Menu, MenuDivider, MenuItem, MenuSearch } from '@launchpad-ui/menu';\n\nimport styles from './styles/Filter.module.css';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype FilterOption<T = any> = {\n name?: ReactNode;\n isDisabled?: boolean;\n isDivider?: boolean;\n isChecked?: boolean;\n value: T | null;\n projKey?: string;\n nested?: boolean;\n groupHeader?: boolean;\n};\n\ntype FilterMenuProps = Pick<MenuProps<string>, 'enableVirtualization' | 'size' | 'data-test-id'> & {\n options: FilterOption[];\n onClearFilter?(): void;\n enableSearch?: boolean;\n searchValue?: string;\n 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":["name","SEARCH_INPUT_THRESHOLD","description","isClearable","clearTooltip"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/AppliedFilterButton.tsx","../src/FilterMenu.tsx","../src/AppliedFilter.tsx","../src/FilterButton.tsx","../src/Filter.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { ExpandMore } from '@launchpad-ui/icons';\nimport { cx } from 'classix';\nimport { Children, forwardRef } from 'react';\n\nimport styles from './styles/Filter.module.css';\n\ntype AppliedFilterButtonProps = {\n name?: ReactNode;\n className?: string;\n children: ReactNode;\n onClickFilterButton?(): void;\n 'data-test-id': string;\n};\n\ntype Ref = HTMLButtonElement;\n\nconst AppliedFilterButton = forwardRef<Ref, AppliedFilterButtonProps>((props, ref) => {\n const { name, className, children, onClickFilterButton, 'data-test-id': testId } = props;\n\n const hasDescription = Children.count(children) !== 0;\n\n return (\n <div data-test-id={testId}>\n <button\n aria-haspopup\n className={cx(styles.appliedButton, className)}\n ref={ref}\n onClick={onClickFilterButton}\n >\n {name && (\n <span className={styles.appliedName} data-test-id={`${testId}-name`}>\n {name}\n {hasDescription && ':'}\n </span>\n )}\n {hasDescription && (\n <span className={styles.appliedDescription} data-test-id={`${testId}-description`}>\n {children}\n </span>\n )}\n <ExpandMore size=\"small\" data-test-id={`${testId}-expand`} />\n </button>\n </div>\n );\n});\n\nAppliedFilterButton.displayName = 'AppliedFilterButton';\n\nexport type { AppliedFilterButtonProps };\nexport { AppliedFilterButton };\n","import type { MenuProps } from '@launchpad-ui/menu';\nimport type { ChangeEvent, ReactNode } from 'react';\n\nimport { Button } from '@launchpad-ui/button';\nimport { Check } from '@launchpad-ui/icons';\nimport { Menu, MenuDivider, MenuItem, MenuSearch } from '@launchpad-ui/menu';\n\nimport styles from './styles/Filter.module.css';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype FilterOption<T = any> = {\n name?: ReactNode;\n isDisabled?: boolean;\n isDivider?: boolean;\n isChecked?: boolean;\n value: T | null;\n projKey?: string;\n nested?: boolean;\n groupHeader?: boolean;\n};\n\ntype FilterMenuProps = Pick<MenuProps<string>, 'enableVirtualization' | 'size' | 'data-test-id'> & {\n options: FilterOption[];\n onClearFilter?(): void;\n enableSearch?: boolean;\n searchValue?: string;\n 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":"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"}
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  require('./style.css');
2
2
  "use strict";
3
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
- const jsxRuntime = require("react/jsx-runtime");
3
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
5
4
  const dropdown = require("@launchpad-ui/dropdown");
6
5
  const icons = require("@launchpad-ui/icons");
7
6
  const classix = require("classix");
8
7
  const react = require("react");
8
+ const jsxRuntime = require("react/jsx-runtime");
9
9
  const button$1 = require("@launchpad-ui/button");
10
10
  const menu = require("@launchpad-ui/menu");
11
11
  const tooltip = require("@launchpad-ui/tooltip");
@@ -38,25 +38,35 @@ const styles = {
38
38
  filterClearButton
39
39
  };
40
40
  const AppliedFilterButton = react.forwardRef((props, ref) => {
41
- const { name: name2, className, children, onClickFilterButton, "data-test-id": testId } = props;
41
+ const {
42
+ name: name2,
43
+ className,
44
+ children,
45
+ onClickFilterButton,
46
+ "data-test-id": testId
47
+ } = props;
42
48
  const hasDescription = react.Children.count(children) !== 0;
43
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": testId, children: /* @__PURE__ */ jsxRuntime.jsxs(
44
- "button",
45
- {
49
+ return /* @__PURE__ */ jsxRuntime.jsx("div", {
50
+ "data-test-id": testId,
51
+ children: /* @__PURE__ */ jsxRuntime.jsxs("button", {
46
52
  "aria-haspopup": true,
47
53
  className: classix.cx(styles.appliedButton, className),
48
54
  ref,
49
55
  onClick: onClickFilterButton,
50
- children: [
51
- name2 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: styles.appliedName, "data-test-id": `${testId}-name`, children: [
52
- name2,
53
- hasDescription && ":"
54
- ] }),
55
- hasDescription && /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.appliedDescription, "data-test-id": `${testId}-description`, children }),
56
- /* @__PURE__ */ jsxRuntime.jsx(icons.ExpandMore, { size: "small", "data-test-id": `${testId}-expand` })
57
- ]
58
- }
59
- ) });
56
+ children: [name2 && /* @__PURE__ */ jsxRuntime.jsxs("span", {
57
+ className: styles.appliedName,
58
+ "data-test-id": `${testId}-name`,
59
+ children: [name2, hasDescription && ":"]
60
+ }), hasDescription && /* @__PURE__ */ jsxRuntime.jsx("span", {
61
+ className: styles.appliedDescription,
62
+ "data-test-id": `${testId}-description`,
63
+ children
64
+ }), /* @__PURE__ */ jsxRuntime.jsx(icons.ExpandMore, {
65
+ size: "small",
66
+ "data-test-id": `${testId}-expand`
67
+ })]
68
+ })
69
+ });
60
70
  });
61
71
  AppliedFilterButton.displayName = "AppliedFilterButton";
62
72
  const FilterMenu = ({
@@ -74,61 +84,48 @@ const FilterMenu = ({
74
84
  size,
75
85
  "data-test-id": testId = "filter-menu"
76
86
  }) => {
77
- const filterOptions = isLoading ? [{ name: "loading...", value: "loading...", isDisabled: true }] : options;
78
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
79
- onClearFilter && /* @__PURE__ */ jsxRuntime.jsx(
80
- button$1.Button,
81
- {
82
- tabIndex: 0,
83
- className: styles.filterClearButton,
84
- onClick: onClearFilter,
85
- kind: "link",
86
- "data-test-id": "clear-filter-button",
87
- children: "CLEAR FILTER"
88
- }
89
- ),
90
- /* @__PURE__ */ jsxRuntime.jsxs(
91
- menu.Menu,
92
- {
93
- enableVirtualization,
94
- size,
95
- "data-test-id": testId,
96
- onSelect,
97
- children: [
98
- enableSearch && /* @__PURE__ */ jsxRuntime.jsx(
99
- menu.MenuSearch,
100
- {
101
- value: searchValue,
102
- placeholder: searchPlaceholder,
103
- onChange: onSearchChange,
104
- ariaLabel: searchAriaLabel
105
- }
106
- ),
107
- filterOptions.map((option, index) => {
108
- if (option.isDivider) {
109
- return /* @__PURE__ */ jsxRuntime.jsx(menu.MenuDivider, {}, `divider-${index}`);
110
- }
111
- return /* @__PURE__ */ jsxRuntime.jsx(
112
- menu.MenuItem,
113
- {
114
- item: option,
115
- disabled: option.isDisabled,
116
- icon: option.isChecked ? icons.Check : null,
117
- role: "menuitemradio",
118
- "aria-checked": option.isChecked ? "true" : void 0,
119
- nested: option.nested,
120
- groupHeader: option.groupHeader,
121
- tooltip: option.isDisabled && disabledOptionTooltip ? disabledOptionTooltip : void 0,
122
- tooltipPlacement: "right",
123
- children: option.name
124
- },
125
- option.value
126
- );
127
- })
128
- ]
129
- }
130
- )
131
- ] });
87
+ const filterOptions = isLoading ? [{
88
+ name: "loading...",
89
+ value: "loading...",
90
+ isDisabled: true
91
+ }] : options;
92
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
93
+ children: [onClearFilter && /* @__PURE__ */ jsxRuntime.jsx(button$1.Button, {
94
+ tabIndex: 0,
95
+ className: styles.filterClearButton,
96
+ onClick: onClearFilter,
97
+ kind: "link",
98
+ "data-test-id": "clear-filter-button",
99
+ children: "CLEAR FILTER"
100
+ }), /* @__PURE__ */ jsxRuntime.jsxs(menu.Menu, {
101
+ enableVirtualization,
102
+ size,
103
+ "data-test-id": testId,
104
+ onSelect,
105
+ children: [enableSearch && /* @__PURE__ */ jsxRuntime.jsx(menu.MenuSearch, {
106
+ value: searchValue,
107
+ placeholder: searchPlaceholder,
108
+ onChange: onSearchChange,
109
+ ariaLabel: searchAriaLabel
110
+ }), filterOptions.map((option, index) => {
111
+ if (option.isDivider) {
112
+ return /* @__PURE__ */ jsxRuntime.jsx(menu.MenuDivider, {}, `divider-${index}`);
113
+ }
114
+ return /* @__PURE__ */ jsxRuntime.jsx(menu.MenuItem, {
115
+ item: option,
116
+ disabled: option.isDisabled,
117
+ icon: option.isChecked ? icons.Check : null,
118
+ role: "menuitemradio",
119
+ "aria-checked": option.isChecked ? "true" : void 0,
120
+ nested: option.nested,
121
+ groupHeader: option.groupHeader,
122
+ tooltip: option.isDisabled && disabledOptionTooltip ? disabledOptionTooltip : void 0,
123
+ tooltipPlacement: "right",
124
+ children: option.name
125
+ }, option.value);
126
+ })]
127
+ })]
128
+ });
132
129
  };
133
130
  const SEARCH_INPUT_THRESHOLD$1 = 4;
134
131
  const AppliedFilter = ({
@@ -148,30 +145,27 @@ const AppliedFilter = ({
148
145
  ...props
149
146
  }) => {
150
147
  const enableSearch = onSearchChange && (!!searchValue || options.length > SEARCH_INPUT_THRESHOLD$1 || !isEmpty);
151
- return /* @__PURE__ */ jsxRuntime.jsxs(dropdown.Dropdown, { targetClassName: className, placement: "bottom-start", enableArrow: false, ...props, children: [
152
- /* @__PURE__ */ jsxRuntime.jsx(
153
- AppliedFilterButton,
154
- {
155
- "data-test-id": testId,
156
- name: name2,
157
- onClickFilterButton,
158
- children: description2
159
- }
160
- ),
161
- /* @__PURE__ */ jsxRuntime.jsx(
162
- FilterMenu,
163
- {
164
- options,
165
- searchValue,
166
- searchPlaceholder,
167
- enableSearch,
168
- searchAriaLabel,
169
- onSearchChange,
170
- onClearFilter,
171
- isLoading
172
- }
173
- )
174
- ] });
148
+ return /* @__PURE__ */ jsxRuntime.jsxs(dropdown.Dropdown, {
149
+ targetClassName: className,
150
+ placement: "bottom-start",
151
+ enableArrow: false,
152
+ ...props,
153
+ children: [/* @__PURE__ */ jsxRuntime.jsx(AppliedFilterButton, {
154
+ "data-test-id": testId,
155
+ name: name2,
156
+ onClickFilterButton,
157
+ children: description2
158
+ }), /* @__PURE__ */ jsxRuntime.jsx(FilterMenu, {
159
+ options,
160
+ searchValue,
161
+ searchPlaceholder,
162
+ enableSearch,
163
+ searchAriaLabel,
164
+ onSearchChange,
165
+ onClearFilter,
166
+ isLoading
167
+ })]
168
+ });
175
169
  };
176
170
  const FilterButton = react.forwardRef((props, ref) => {
177
171
  const {
@@ -190,38 +184,47 @@ const FilterButton = react.forwardRef((props, ref) => {
190
184
  const nameId = react.useId();
191
185
  const descriptionId = react.useId();
192
186
  const hasDescription = react.Children.count(children) !== 0;
193
- const nameElement = /* @__PURE__ */ jsxRuntime.jsxs("span", { className: styles.name, children: [
194
- name2,
195
- hasDescription && ":"
196
- ] });
197
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.buttonContainer, "data-test-id": testId, children: [
198
- /* @__PURE__ */ jsxRuntime.jsxs(
199
- "button",
200
- {
201
- ...rest,
202
- "aria-labelledby": `${nameId} ${hasDescription ? descriptionId : ""}`,
203
- "aria-haspopup": true,
204
- className: classix.cx(styles.button, className, (isClearable2 || isSelected) && styles.isClearable),
205
- ref,
206
- onClick: onClickFilterButton,
207
- children: [
208
- hideName ? /* @__PURE__ */ jsxRuntime.jsx(visuallyHidden.VisuallyHidden, { id: nameId, children: nameElement }) : /* @__PURE__ */ jsxRuntime.jsx("span", { id: nameId, children: nameElement }),
209
- hasDescription && /* @__PURE__ */ jsxRuntime.jsx("span", { id: descriptionId, className: styles.description, children }),
210
- !isClearable2 && /* @__PURE__ */ jsxRuntime.jsx(icons.ExpandMore, { size: "small" })
211
- ]
212
- }
213
- ),
214
- isClearable2 && /* @__PURE__ */ jsxRuntime.jsx(tooltip.Tooltip, { targetClassName: styles.clearTooltip, content: clearTooltip2, children: /* @__PURE__ */ jsxRuntime.jsx(
215
- button$1.IconButton,
216
- {
187
+ const nameElement = /* @__PURE__ */ jsxRuntime.jsxs("span", {
188
+ className: styles.name,
189
+ children: [name2, hasDescription && ":"]
190
+ });
191
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", {
192
+ className: styles.buttonContainer,
193
+ "data-test-id": testId,
194
+ children: [/* @__PURE__ */ jsxRuntime.jsxs("button", {
195
+ ...rest,
196
+ "aria-labelledby": `${nameId} ${hasDescription ? descriptionId : ""}`,
197
+ "aria-haspopup": true,
198
+ className: classix.cx(styles.button, className, (isClearable2 || isSelected) && styles.isClearable),
199
+ ref,
200
+ onClick: onClickFilterButton,
201
+ children: [hideName ? /* @__PURE__ */ jsxRuntime.jsx(visuallyHidden.VisuallyHidden, {
202
+ id: nameId,
203
+ children: nameElement
204
+ }) : /* @__PURE__ */ jsxRuntime.jsx("span", {
205
+ id: nameId,
206
+ children: nameElement
207
+ }), hasDescription && /* @__PURE__ */ jsxRuntime.jsx("span", {
208
+ id: descriptionId,
209
+ className: styles.description,
210
+ children
211
+ }), !isClearable2 && /* @__PURE__ */ jsxRuntime.jsx(icons.ExpandMore, {
212
+ size: "small"
213
+ })]
214
+ }), isClearable2 && /* @__PURE__ */ jsxRuntime.jsx(tooltip.Tooltip, {
215
+ targetClassName: styles.clearTooltip,
216
+ content: clearTooltip2,
217
+ children: /* @__PURE__ */ jsxRuntime.jsx(button$1.IconButton, {
217
218
  "aria-label": "Clear filter",
218
219
  className: styles.clear,
219
220
  "data-test-id": "clear-filter-button",
220
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Close, { size: "tiny" }),
221
+ icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Close, {
222
+ size: "tiny"
223
+ }),
221
224
  onClick: onClear
222
- }
223
- ) })
224
- ] });
225
+ })
226
+ })]
227
+ });
225
228
  });
226
229
  FilterButton.defaultProps = {
227
230
  clearTooltip: "Clear filter"
@@ -256,35 +259,31 @@ const Filter = ({
256
259
  event.preventDefault();
257
260
  onClear == null ? void 0 : onClear();
258
261
  };
259
- return /* @__PURE__ */ jsxRuntime.jsxs(dropdown.Dropdown, { targetTestId: testId, targetClassName: dropdownClasses, ...props, children: [
260
- /* @__PURE__ */ jsxRuntime.jsx(
261
- FilterButton,
262
- {
263
- isClearable: isClearable2,
264
- onClear: handleClear,
265
- name: name2,
266
- hideName,
267
- isSelected,
268
- onClickFilterButton,
269
- children: description2
270
- }
271
- ),
272
- /* @__PURE__ */ jsxRuntime.jsx(
273
- FilterMenu,
274
- {
275
- options,
276
- searchValue,
277
- searchPlaceholder,
278
- searchAriaLabel,
279
- enableSearch,
280
- onSearchChange,
281
- isLoading,
282
- disabledOptionTooltip,
283
- size,
284
- enableVirtualization
285
- }
286
- )
287
- ] });
262
+ return /* @__PURE__ */ jsxRuntime.jsxs(dropdown.Dropdown, {
263
+ targetTestId: testId,
264
+ targetClassName: dropdownClasses,
265
+ ...props,
266
+ children: [/* @__PURE__ */ jsxRuntime.jsx(FilterButton, {
267
+ isClearable: isClearable2,
268
+ onClear: handleClear,
269
+ name: name2,
270
+ hideName,
271
+ isSelected,
272
+ onClickFilterButton,
273
+ children: description2
274
+ }), /* @__PURE__ */ jsxRuntime.jsx(FilterMenu, {
275
+ options,
276
+ searchValue,
277
+ searchPlaceholder,
278
+ searchAriaLabel,
279
+ enableSearch,
280
+ onSearchChange,
281
+ isLoading,
282
+ disabledOptionTooltip,
283
+ size,
284
+ enableVirtualization
285
+ })]
286
+ });
288
287
  };
289
288
  exports.AppliedFilter = AppliedFilter;
290
289
  exports.Filter = Filter;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/AppliedFilterButton.tsx","../src/FilterMenu.tsx","../src/AppliedFilter.tsx","../src/FilterButton.tsx","../src/Filter.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { ExpandMore } from '@launchpad-ui/icons';\nimport { cx } from 'classix';\nimport { Children, forwardRef } from 'react';\n\nimport styles from './styles/Filter.module.css';\n\ntype AppliedFilterButtonProps = {\n name?: ReactNode;\n className?: string;\n children: ReactNode;\n onClickFilterButton?(): void;\n 'data-test-id': string;\n};\n\ntype Ref = HTMLButtonElement;\n\nconst AppliedFilterButton = forwardRef<Ref, AppliedFilterButtonProps>((props, ref) => {\n const { name, className, children, onClickFilterButton, 'data-test-id': testId } = props;\n\n const hasDescription = Children.count(children) !== 0;\n\n return (\n <div data-test-id={testId}>\n <button\n aria-haspopup\n className={cx(styles.appliedButton, className)}\n ref={ref}\n onClick={onClickFilterButton}\n >\n {name && (\n <span className={styles.appliedName} data-test-id={`${testId}-name`}>\n {name}\n {hasDescription && ':'}\n </span>\n )}\n {hasDescription && (\n <span className={styles.appliedDescription} data-test-id={`${testId}-description`}>\n {children}\n </span>\n )}\n <ExpandMore size=\"small\" data-test-id={`${testId}-expand`} />\n </button>\n </div>\n );\n});\n\nAppliedFilterButton.displayName = 'AppliedFilterButton';\n\nexport type { AppliedFilterButtonProps };\nexport { AppliedFilterButton };\n","import type { MenuProps } from '@launchpad-ui/menu';\nimport type { ChangeEvent, ReactNode } from 'react';\n\nimport { Button } from '@launchpad-ui/button';\nimport { Check } from '@launchpad-ui/icons';\nimport { Menu, MenuDivider, MenuItem, MenuSearch } from '@launchpad-ui/menu';\n\nimport styles from './styles/Filter.module.css';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype FilterOption<T = any> = {\n name?: ReactNode;\n isDisabled?: boolean;\n isDivider?: boolean;\n isChecked?: boolean;\n value: T | null;\n projKey?: string;\n nested?: boolean;\n groupHeader?: boolean;\n};\n\ntype FilterMenuProps = Pick<MenuProps<string>, 'enableVirtualization' | 'size' | 'data-test-id'> & {\n options: FilterOption[];\n onClearFilter?(): void;\n enableSearch?: boolean;\n searchValue?: string;\n 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":["forwardRef","name","Children","jsx","jsxs","cx","ExpandMore","Fragment","Button","Menu","MenuSearch","MenuDivider","MenuItem","Check","SEARCH_INPUT_THRESHOLD","description","Dropdown","isClearable","clearTooltip","useId","VisuallyHidden","Tooltip","IconButton","Close"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/AppliedFilterButton.tsx","../src/FilterMenu.tsx","../src/AppliedFilter.tsx","../src/FilterButton.tsx","../src/Filter.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { ExpandMore } from '@launchpad-ui/icons';\nimport { cx } from 'classix';\nimport { Children, forwardRef } from 'react';\n\nimport styles from './styles/Filter.module.css';\n\ntype AppliedFilterButtonProps = {\n name?: ReactNode;\n className?: string;\n children: ReactNode;\n onClickFilterButton?(): void;\n 'data-test-id': string;\n};\n\ntype Ref = HTMLButtonElement;\n\nconst AppliedFilterButton = forwardRef<Ref, AppliedFilterButtonProps>((props, ref) => {\n const { name, className, children, onClickFilterButton, 'data-test-id': testId } = props;\n\n const hasDescription = Children.count(children) !== 0;\n\n return (\n <div data-test-id={testId}>\n <button\n aria-haspopup\n className={cx(styles.appliedButton, className)}\n ref={ref}\n onClick={onClickFilterButton}\n >\n {name && (\n <span className={styles.appliedName} data-test-id={`${testId}-name`}>\n {name}\n {hasDescription && ':'}\n </span>\n )}\n {hasDescription && (\n <span className={styles.appliedDescription} data-test-id={`${testId}-description`}>\n {children}\n </span>\n )}\n <ExpandMore size=\"small\" data-test-id={`${testId}-expand`} />\n </button>\n </div>\n );\n});\n\nAppliedFilterButton.displayName = 'AppliedFilterButton';\n\nexport type { AppliedFilterButtonProps };\nexport { AppliedFilterButton };\n","import type { MenuProps } from '@launchpad-ui/menu';\nimport type { ChangeEvent, ReactNode } from 'react';\n\nimport { Button } from '@launchpad-ui/button';\nimport { Check } from '@launchpad-ui/icons';\nimport { Menu, MenuDivider, MenuItem, MenuSearch } from '@launchpad-ui/menu';\n\nimport styles from './styles/Filter.module.css';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype FilterOption<T = any> = {\n name?: ReactNode;\n isDisabled?: boolean;\n isDivider?: boolean;\n isChecked?: boolean;\n value: T | null;\n projKey?: string;\n nested?: boolean;\n groupHeader?: boolean;\n};\n\ntype FilterMenuProps = Pick<MenuProps<string>, 'enableVirtualization' | 'size' | 'data-test-id'> & {\n options: FilterOption[];\n onClearFilter?(): void;\n enableSearch?: boolean;\n searchValue?: string;\n 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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@launchpad-ui/filter",
3
- "version": "0.4.43",
3
+ "version": "0.4.44",
4
4
  "status": "beta",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -26,22 +26,22 @@
26
26
  },
27
27
  "source": "src/index.ts",
28
28
  "dependencies": {
29
- "@react-aria/visually-hidden": "^3.6.0",
30
- "classix": "^2.1.13",
31
- "@launchpad-ui/button": "~0.7.21",
32
- "@launchpad-ui/dropdown": "~0.6.17",
33
- "@launchpad-ui/icons": "~0.6.13",
34
- "@launchpad-ui/menu": "~0.6.40",
29
+ "@react-aria/visually-hidden": "3.6.0",
30
+ "classix": "2.1.17",
31
+ "@launchpad-ui/button": "~0.7.22",
32
+ "@launchpad-ui/dropdown": "~0.6.18",
33
+ "@launchpad-ui/icons": "~0.6.14",
34
+ "@launchpad-ui/menu": "~0.6.41",
35
35
  "@launchpad-ui/tokens": "~0.4.7",
36
- "@launchpad-ui/tooltip": "~0.6.32"
36
+ "@launchpad-ui/tooltip": "~0.6.33"
37
37
  },
38
38
  "peerDependencies": {
39
- "react": "^18.0.0",
40
- "react-dom": "^18.0.0"
39
+ "react": "18.2.0",
40
+ "react-dom": "18.2.0"
41
41
  },
42
42
  "devDependencies": {
43
- "react": "^18.2.0",
44
- "react-dom": "^18.2.0"
43
+ "react": "18.2.0",
44
+ "react-dom": "18.2.0"
45
45
  },
46
46
  "scripts": {
47
47
  "build": "vite build -c ../../vite.config.ts && tsc --project tsconfig.build.json",