@osdk/react-components 0.2.0-beta.27 → 0.2.0-beta.29
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/CHANGELOG.md +15 -0
- package/README.md +58 -3
- package/build/browser/action-form/FormFieldApi.js.map +1 -1
- package/build/browser/action-form/fields/FormFieldRenderer.js +8 -0
- package/build/browser/action-form/fields/FormFieldRenderer.js.map +1 -1
- package/build/browser/action-form/fields/NumberInputField.js +130 -0
- package/build/browser/action-form/fields/NumberInputField.js.map +1 -0
- package/build/browser/action-form/fields/NumberInputField.module.css +96 -0
- package/build/browser/action-form/fields/NumberInputField.module.css.js +9 -0
- package/build/browser/base-components/checkbox/Checkbox.js +6 -2
- package/build/browser/base-components/checkbox/Checkbox.js.map +1 -1
- package/build/browser/base-components/checkbox/Checkbox.module.css +15 -2
- package/build/browser/base-components/combobox/Combobox.js +14 -1
- package/build/browser/base-components/combobox/Combobox.js.map +1 -1
- package/build/browser/base-components/combobox/Combobox.module.css +16 -6
- package/build/browser/base-components/combobox/Combobox.module.css.js +1 -0
- package/build/browser/base-components/searchable-menu/SearchableMenu.js +86 -0
- package/build/browser/base-components/searchable-menu/SearchableMenu.js.map +1 -0
- package/build/browser/base-components/searchable-menu/SearchableMenu.module.css +80 -0
- package/build/browser/base-components/searchable-menu/SearchableMenu.module.css.js +10 -0
- package/build/browser/filter-list/FilterList.js +3 -1
- package/build/browser/filter-list/FilterList.js.map +1 -1
- package/build/browser/filter-list/FilterListApi.js.map +1 -1
- package/build/browser/filter-list/FilterListItemApi.js.map +1 -1
- package/build/browser/filter-list/base/AddFilterPopover.js +10 -21
- package/build/browser/filter-list/base/AddFilterPopover.js.map +1 -1
- package/build/browser/filter-list/base/AddFilterPopover.module.css +6 -40
- package/build/browser/filter-list/base/AddFilterPopover.module.css.js +1 -4
- package/build/browser/filter-list/base/BaseFilterList.js +4 -2
- package/build/browser/filter-list/base/BaseFilterList.js.map +1 -1
- package/build/browser/filter-list/base/ExcludeDropdown.js +4 -3
- package/build/browser/filter-list/base/ExcludeDropdown.js.map +1 -1
- package/build/browser/filter-list/base/ExcludeDropdown.module.css +7 -5
- package/build/browser/filter-list/base/FilterIcons.js +9 -3
- package/build/browser/filter-list/base/FilterIcons.js.map +1 -1
- package/build/browser/filter-list/base/FilterInputExcludeRow.js +14 -2
- package/build/browser/filter-list/base/FilterInputExcludeRow.js.map +1 -1
- package/build/browser/filter-list/base/FilterList.module.css +19 -6
- package/build/browser/filter-list/base/FilterList.module.css.js +1 -0
- package/build/browser/filter-list/base/FilterListContent.js +38 -17
- package/build/browser/filter-list/base/FilterListContent.js.map +1 -1
- package/build/browser/filter-list/base/FilterListHeader.js +1 -1
- package/build/browser/filter-list/base/FilterListHeader.js.map +1 -1
- package/build/browser/filter-list/base/FilterListHeader.module.css +8 -3
- package/build/browser/filter-list/base/FilterListItem.js +33 -1
- package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
- package/build/browser/filter-list/base/FilterListItem.module.css +15 -6
- package/build/browser/filter-list/base/FilterListItem.module.css.js +1 -0
- package/build/browser/filter-list/base/SortableFilterListItem.js +3 -2
- package/build/browser/filter-list/base/SortableFilterListItem.js.map +1 -1
- package/build/browser/filter-list/base/inputs/ListogramInput.js +26 -11
- package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/ListogramInput.module.css +31 -0
- package/build/browser/filter-list/base/inputs/ListogramInput.module.css.js +2 -0
- package/build/browser/filter-list/base/inputs/MultiSelectInput.js +26 -43
- package/build/browser/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css +7 -8
- package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css.js +1 -2
- package/build/browser/filter-list/base/inputs/NullValueWrapper.js +1 -1
- package/build/browser/filter-list/base/inputs/NullValueWrapper.js.map +1 -1
- package/build/browser/filter-list/base/inputs/RangeInput.js +5 -3
- package/build/browser/filter-list/base/inputs/RangeInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/RangeInput.module.css +7 -7
- package/build/browser/filter-list/base/inputs/SingleSelectInput.js +21 -30
- package/build/browser/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/SingleSelectInput.module.css +13 -23
- package/build/browser/filter-list/base/inputs/SingleSelectInput.module.css.js +3 -1
- package/build/browser/filter-list/base/inputs/index.js +0 -1
- package/build/browser/filter-list/base/inputs/index.js.map +1 -1
- package/build/browser/filter-list/hooks/useFilterListState.js +16 -12
- package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
- package/build/browser/filter-list/hooks/usePropertyAggregation.js +7 -2
- package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -1
- package/build/browser/filter-list/inputs/ContainsTextFilterInput.js +1 -1
- package/build/browser/filter-list/inputs/ContainsTextFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/LinkedPropertyInput.js +0 -35
- package/build/browser/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
- package/build/browser/filter-list/inputs/ListogramFilterInput.js +14 -3
- package/build/browser/filter-list/inputs/ListogramFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/MultiSelectFilterInput.js +9 -1
- package/build/browser/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/PropertyFilterInput.js +1 -14
- package/build/browser/filter-list/inputs/PropertyFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/SingleSelectFilterInput.js +9 -1
- package/build/browser/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/TextTagsFilterInput.js +9 -1
- package/build/browser/filter-list/inputs/TextTagsFilterInput.js.map +1 -1
- package/build/browser/filter-list/utils/filterStateToWhereClause.js +2 -7
- package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -1
- package/build/browser/object-table/ColumnConfigDialog.module.css +1 -2
- package/build/browser/object-table/MultiColumnSortDialog.js +22 -59
- package/build/browser/object-table/MultiColumnSortDialog.js.map +1 -1
- package/build/browser/object-table/MultiColumnSortDialog.module.css +0 -64
- package/build/browser/object-table/MultiColumnSortDialog.module.css.js +0 -5
- package/build/browser/styles.css +324 -272
- package/build/cjs/public/experimental.cjs +1673 -1605
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +501 -462
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +31 -26
- package/build/esm/action-form/FormFieldApi.js.map +1 -1
- package/build/esm/action-form/fields/FormFieldRenderer.js +8 -0
- package/build/esm/action-form/fields/FormFieldRenderer.js.map +1 -1
- package/build/esm/action-form/fields/NumberInputField.js +130 -0
- package/build/esm/action-form/fields/NumberInputField.js.map +1 -0
- package/build/esm/action-form/fields/NumberInputField.module.css +96 -0
- package/build/esm/base-components/checkbox/Checkbox.js +6 -2
- package/build/esm/base-components/checkbox/Checkbox.js.map +1 -1
- package/build/esm/base-components/checkbox/Checkbox.module.css +15 -2
- package/build/esm/base-components/combobox/Combobox.js +14 -1
- package/build/esm/base-components/combobox/Combobox.js.map +1 -1
- package/build/esm/base-components/combobox/Combobox.module.css +16 -6
- package/build/esm/base-components/searchable-menu/SearchableMenu.js +86 -0
- package/build/esm/base-components/searchable-menu/SearchableMenu.js.map +1 -0
- package/build/esm/base-components/searchable-menu/SearchableMenu.module.css +80 -0
- package/build/esm/filter-list/FilterList.js +3 -1
- package/build/esm/filter-list/FilterList.js.map +1 -1
- package/build/esm/filter-list/FilterListApi.js.map +1 -1
- package/build/esm/filter-list/FilterListItemApi.js.map +1 -1
- package/build/esm/filter-list/base/AddFilterPopover.js +10 -21
- package/build/esm/filter-list/base/AddFilterPopover.js.map +1 -1
- package/build/esm/filter-list/base/AddFilterPopover.module.css +6 -40
- package/build/esm/filter-list/base/BaseFilterList.js +4 -2
- package/build/esm/filter-list/base/BaseFilterList.js.map +1 -1
- package/build/esm/filter-list/base/ExcludeDropdown.js +4 -3
- package/build/esm/filter-list/base/ExcludeDropdown.js.map +1 -1
- package/build/esm/filter-list/base/ExcludeDropdown.module.css +7 -5
- package/build/esm/filter-list/base/FilterIcons.js +9 -3
- package/build/esm/filter-list/base/FilterIcons.js.map +1 -1
- package/build/esm/filter-list/base/FilterInputExcludeRow.js +14 -2
- package/build/esm/filter-list/base/FilterInputExcludeRow.js.map +1 -1
- package/build/esm/filter-list/base/FilterList.module.css +19 -6
- package/build/esm/filter-list/base/FilterListContent.js +38 -17
- package/build/esm/filter-list/base/FilterListContent.js.map +1 -1
- package/build/esm/filter-list/base/FilterListHeader.js +1 -1
- package/build/esm/filter-list/base/FilterListHeader.js.map +1 -1
- package/build/esm/filter-list/base/FilterListHeader.module.css +8 -3
- package/build/esm/filter-list/base/FilterListItem.js +33 -1
- package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
- package/build/esm/filter-list/base/FilterListItem.module.css +15 -6
- package/build/esm/filter-list/base/SortableFilterListItem.js +3 -2
- package/build/esm/filter-list/base/SortableFilterListItem.js.map +1 -1
- package/build/esm/filter-list/base/inputs/ListogramInput.js +26 -11
- package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/ListogramInput.module.css +31 -0
- package/build/esm/filter-list/base/inputs/MultiSelectInput.js +26 -43
- package/build/esm/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/MultiSelectInput.module.css +7 -8
- package/build/esm/filter-list/base/inputs/NullValueWrapper.js +1 -1
- package/build/esm/filter-list/base/inputs/NullValueWrapper.js.map +1 -1
- package/build/esm/filter-list/base/inputs/RangeInput.js +5 -3
- package/build/esm/filter-list/base/inputs/RangeInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/RangeInput.module.css +7 -7
- package/build/esm/filter-list/base/inputs/SingleSelectInput.js +21 -30
- package/build/esm/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/SingleSelectInput.module.css +13 -23
- package/build/esm/filter-list/base/inputs/index.js +0 -1
- package/build/esm/filter-list/base/inputs/index.js.map +1 -1
- package/build/esm/filter-list/hooks/useFilterListState.js +16 -12
- package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
- package/build/esm/filter-list/hooks/usePropertyAggregation.js +7 -2
- package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -1
- package/build/esm/filter-list/inputs/ContainsTextFilterInput.js +1 -1
- package/build/esm/filter-list/inputs/ContainsTextFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/LinkedPropertyInput.js +0 -35
- package/build/esm/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
- package/build/esm/filter-list/inputs/ListogramFilterInput.js +14 -3
- package/build/esm/filter-list/inputs/ListogramFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/MultiSelectFilterInput.js +9 -1
- package/build/esm/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/PropertyFilterInput.js +1 -14
- package/build/esm/filter-list/inputs/PropertyFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/SingleSelectFilterInput.js +9 -1
- package/build/esm/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/TextTagsFilterInput.js +9 -1
- package/build/esm/filter-list/inputs/TextTagsFilterInput.js.map +1 -1
- package/build/esm/filter-list/utils/filterStateToWhereClause.js +2 -7
- package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -1
- package/build/esm/object-table/ColumnConfigDialog.module.css +1 -2
- package/build/esm/object-table/MultiColumnSortDialog.js +22 -59
- package/build/esm/object-table/MultiColumnSortDialog.js.map +1 -1
- package/build/esm/object-table/MultiColumnSortDialog.module.css +0 -64
- package/build/types/action-form/FormFieldApi.d.ts +22 -4
- package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
- package/build/types/action-form/fields/FormFieldRenderer.d.ts.map +1 -1
- package/build/types/action-form/fields/NumberInputField.d.ts +3 -0
- package/build/types/action-form/fields/NumberInputField.d.ts.map +1 -0
- package/build/types/base-components/checkbox/Checkbox.d.ts +2 -1
- package/build/types/base-components/checkbox/Checkbox.d.ts.map +1 -1
- package/build/types/base-components/combobox/Combobox.d.ts +6 -1
- package/build/types/base-components/combobox/Combobox.d.ts.map +1 -1
- package/build/types/base-components/searchable-menu/SearchableMenu.d.ts +18 -0
- package/build/types/base-components/searchable-menu/SearchableMenu.d.ts.map +1 -0
- package/build/types/filter-list/FilterListApi.d.ts +0 -7
- package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/FilterListItemApi.d.ts +10 -7
- package/build/types/filter-list/FilterListItemApi.d.ts.map +1 -1
- package/build/types/filter-list/base/AddFilterPopover.d.ts.map +1 -1
- package/build/types/filter-list/base/ExcludeDropdown.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterIcons.d.ts +1 -0
- package/build/types/filter-list/base/FilterIcons.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterInputExcludeRow.d.ts +2 -1
- package/build/types/filter-list/base/FilterInputExcludeRow.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterListContent.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterListItem.d.ts.map +1 -1
- package/build/types/filter-list/base/SortableFilterListItem.d.ts +2 -1
- package/build/types/filter-list/base/SortableFilterListItem.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/ListogramInput.d.ts +2 -1
- package/build/types/filter-list/base/inputs/ListogramInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts +1 -3
- package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/RangeInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/index.d.ts +0 -1
- package/build/types/filter-list/base/inputs/index.d.ts.map +1 -1
- package/build/types/filter-list/hooks/useFilterListState.d.ts +1 -0
- package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -1
- package/build/types/filter-list/hooks/usePropertyAggregation.d.ts +1 -0
- package/build/types/filter-list/hooks/usePropertyAggregation.d.ts.map +1 -1
- package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/ListogramFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/PropertyFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/utils/filterStateToWhereClause.d.ts +1 -1
- package/build/types/filter-list/utils/filterStateToWhereClause.d.ts.map +1 -1
- package/build/types/object-table/MultiColumnSortDialog.d.ts.map +1 -1
- package/package.json +5 -5
- package/build/browser/filter-list/base/inputs/CheckboxListInput.js +0 -83
- package/build/browser/filter-list/base/inputs/CheckboxListInput.js.map +0 -1
- package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css +0 -65
- package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css.js +0 -10
- package/build/browser/filter-list/base/inputs/CheckboxListSkeleton.js +0 -46
- package/build/browser/filter-list/base/inputs/CheckboxListSkeleton.js.map +0 -1
- package/build/browser/filter-list/base/inputs/CheckboxListSkeleton.module.css +0 -32
- package/build/browser/filter-list/base/inputs/CheckboxListSkeleton.module.css.js +0 -8
- package/build/browser/filter-list/inputs/CheckboxListFilterInput.js +0 -66
- package/build/browser/filter-list/inputs/CheckboxListFilterInput.js.map +0 -1
- package/build/esm/filter-list/base/inputs/CheckboxListInput.js +0 -83
- package/build/esm/filter-list/base/inputs/CheckboxListInput.js.map +0 -1
- package/build/esm/filter-list/base/inputs/CheckboxListInput.module.css +0 -65
- package/build/esm/filter-list/base/inputs/CheckboxListSkeleton.js +0 -46
- package/build/esm/filter-list/base/inputs/CheckboxListSkeleton.js.map +0 -1
- package/build/esm/filter-list/base/inputs/CheckboxListSkeleton.module.css +0 -32
- package/build/esm/filter-list/inputs/CheckboxListFilterInput.js +0 -66
- package/build/esm/filter-list/inputs/CheckboxListFilterInput.js.map +0 -1
- package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts +0 -16
- package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts.map +0 -1
- package/build/types/filter-list/base/inputs/CheckboxListSkeleton.d.ts +0 -2
- package/build/types/filter-list/base/inputs/CheckboxListSkeleton.d.ts.map +0 -1
- package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts +0 -17
- package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseFilterList.js","names":["Button","classnames","React","useCallback","ExpandIcon","styles","FilterListContent","FilterListHeader","BaseFilterList","props","title","titleIcon","collapsed","onCollapsedChange","filterDefinitions","filterStates","onFilterStateChanged","renderInput","getFilterKey","getFilterLabel","activeFilterCount","onReset","onFilterAdded","onFilterRemoved","showResetButton","showActiveFilterCount","hasVisibilityChanges","enableSorting","className","renderAddFilterButton","handleExpand","isCollapsed","createElement","filterList","filterListCollapsed","expandButton","onClick","collapsedLabel","expandedContent","hiddenContent","addButtonContainer","type","addButton"],"sources":["BaseFilterList.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport classnames from \"classnames\";\nimport React, { useCallback } from \"react\";\nimport type { BaseFilterListProps } from \"./BaseFilterListApi.js\";\nimport { ExpandIcon } from \"./FilterIcons.js\";\nimport styles from \"./FilterList.module.css\";\nimport { FilterListContent } from \"./FilterListContent.js\";\nimport { FilterListHeader } from \"./FilterListHeader.js\";\n\nexport function BaseFilterList<D>(\n props: BaseFilterListProps<D>,\n): React.ReactElement {\n const {\n title,\n titleIcon,\n collapsed = false,\n onCollapsedChange,\n filterDefinitions,\n filterStates,\n onFilterStateChanged,\n renderInput,\n getFilterKey,\n getFilterLabel,\n activeFilterCount,\n onReset,\n onFilterAdded,\n onFilterRemoved,\n showResetButton = false,\n showActiveFilterCount = false,\n hasVisibilityChanges,\n enableSorting,\n className,\n renderAddFilterButton,\n } = props;\n\n const showHeader = title || titleIcon || showResetButton\n || showActiveFilterCount || onCollapsedChange;\n\n const showAddButton = renderAddFilterButton != null || onFilterAdded != null;\n\n const handleExpand = useCallback(() => {\n onCollapsedChange?.(false);\n }, [onCollapsedChange]);\n\n const isCollapsed = collapsed && onCollapsedChange != null;\n\n return (\n <div className={classnames(styles.filterList, className)}>\n {isCollapsed && (\n <div\n className={styles.filterListCollapsed}\n data-collapsed=\"true\"\n >\n <Button\n className={styles.expandButton}\n onClick={handleExpand}\n aria-label=\"Expand filters\"\n >\n <ExpandIcon />\n </Button>\n <span className={styles.collapsedLabel}>{title ?? \"Filters\"}</span>\n </div>\n )}\n <div\n className={classnames(\n styles.expandedContent,\n isCollapsed && styles.hiddenContent,\n )}\n data-active-count={activeFilterCount}\n >\n {showHeader && (\n <FilterListHeader\n title={title}\n titleIcon={titleIcon}\n collapsed={collapsed}\n onCollapsedChange={onCollapsedChange}\n showResetButton={showResetButton}\n onReset={onReset}\n showActiveFilterCount={showActiveFilterCount}\n activeFilterCount={activeFilterCount}\n hasVisibilityChanges={hasVisibilityChanges}\n />\n )}\n\n <FilterListContent\n
|
|
1
|
+
{"version":3,"file":"BaseFilterList.js","names":["Button","classnames","React","useCallback","ExpandIcon","styles","FilterListContent","FilterListHeader","BaseFilterList","props","title","titleIcon","collapsed","onCollapsedChange","filterDefinitions","filterStates","onFilterStateChanged","renderInput","getFilterKey","getFilterLabel","activeFilterCount","onReset","onFilterAdded","onFilterRemoved","showResetButton","showActiveFilterCount","hasVisibilityChanges","enableSorting","className","renderAddFilterButton","handleExpand","isCollapsed","createElement","filterList","filterListCollapsed","expandButton","onClick","collapsedLabel","expandedContent","hiddenContent","scrollableContent","addButtonContainer","type","addButton"],"sources":["BaseFilterList.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport classnames from \"classnames\";\nimport React, { useCallback } from \"react\";\nimport type { BaseFilterListProps } from \"./BaseFilterListApi.js\";\nimport { ExpandIcon } from \"./FilterIcons.js\";\nimport styles from \"./FilterList.module.css\";\nimport { FilterListContent } from \"./FilterListContent.js\";\nimport { FilterListHeader } from \"./FilterListHeader.js\";\n\nexport function BaseFilterList<D>(\n props: BaseFilterListProps<D>,\n): React.ReactElement {\n const {\n title,\n titleIcon,\n collapsed = false,\n onCollapsedChange,\n filterDefinitions,\n filterStates,\n onFilterStateChanged,\n renderInput,\n getFilterKey,\n getFilterLabel,\n activeFilterCount,\n onReset,\n onFilterAdded,\n onFilterRemoved,\n showResetButton = false,\n showActiveFilterCount = false,\n hasVisibilityChanges,\n enableSorting,\n className,\n renderAddFilterButton,\n } = props;\n\n const showHeader = title || titleIcon || showResetButton\n || showActiveFilterCount || onCollapsedChange;\n\n const showAddButton = renderAddFilterButton != null || onFilterAdded != null;\n\n const handleExpand = useCallback(() => {\n onCollapsedChange?.(false);\n }, [onCollapsedChange]);\n\n const isCollapsed = collapsed && onCollapsedChange != null;\n\n return (\n <div className={classnames(styles.filterList, className)}>\n {isCollapsed && (\n <div\n className={styles.filterListCollapsed}\n data-collapsed=\"true\"\n >\n <Button\n className={styles.expandButton}\n onClick={handleExpand}\n aria-label=\"Expand filters\"\n >\n <ExpandIcon />\n </Button>\n <span className={styles.collapsedLabel}>{title ?? \"Filters\"}</span>\n </div>\n )}\n <div\n className={classnames(\n styles.expandedContent,\n isCollapsed && styles.hiddenContent,\n )}\n data-active-count={activeFilterCount}\n >\n {showHeader && (\n <FilterListHeader\n title={title}\n titleIcon={titleIcon}\n collapsed={collapsed}\n onCollapsedChange={onCollapsedChange}\n showResetButton={showResetButton}\n onReset={onReset}\n showActiveFilterCount={showActiveFilterCount}\n activeFilterCount={activeFilterCount}\n hasVisibilityChanges={hasVisibilityChanges}\n />\n )}\n\n <div className={styles.scrollableContent}>\n <FilterListContent\n filterDefinitions={filterDefinitions}\n filterStates={filterStates}\n onFilterStateChanged={onFilterStateChanged}\n onFilterRemoved={onFilterRemoved}\n renderInput={renderInput}\n getFilterKey={getFilterKey}\n getFilterLabel={getFilterLabel}\n enableSorting={enableSorting}\n />\n </div>\n\n {showAddButton && (\n <div className={styles.addButtonContainer}>\n {renderAddFilterButton\n ? renderAddFilterButton()\n : (\n <Button\n type=\"button\"\n className={styles.addButton}\n onClick={onFilterAdded}\n >\n + Add filter\n </Button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
import { Menu } from "@base-ui/react/menu";
|
|
18
18
|
import React, { memo, useCallback } from "react";
|
|
19
19
|
import styles from "./ExcludeDropdown.module.css";
|
|
20
|
-
import { CheckIcon, ChevronDownIcon } from "./FilterIcons.js";
|
|
20
|
+
import { CheckIcon, ChevronDownIcon, ExcludeIcon } from "./FilterIcons.js";
|
|
21
21
|
function ExcludeDropdownInner({
|
|
22
22
|
isExcluding,
|
|
23
23
|
onToggleExclude
|
|
@@ -37,8 +37,9 @@ function ExcludeDropdownInner({
|
|
|
37
37
|
className: styles.excludeDropdownContainer
|
|
38
38
|
}, /*#__PURE__*/React.createElement(Menu.Root, null, /*#__PURE__*/React.createElement(Menu.Trigger, {
|
|
39
39
|
className: styles.trigger,
|
|
40
|
-
"aria-label": label
|
|
41
|
-
|
|
40
|
+
"aria-label": label,
|
|
41
|
+
"data-excluding": isExcluding || undefined
|
|
42
|
+
}, isExcluding && /*#__PURE__*/React.createElement(ExcludeIcon, null), /*#__PURE__*/React.createElement("span", {
|
|
42
43
|
className: styles.triggerLabel
|
|
43
44
|
}, label), /*#__PURE__*/React.createElement(ChevronDownIcon, null)), /*#__PURE__*/React.createElement(Menu.Portal, null, /*#__PURE__*/React.createElement(Menu.Positioner, {
|
|
44
45
|
className: styles.positioner,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExcludeDropdown.js","names":["Menu","React","memo","useCallback","styles","CheckIcon","ChevronDownIcon","ExcludeDropdownInner","isExcluding","onToggleExclude","label","handleSelectKeeping","handleSelectExcluding","createElement","className","excludeDropdownContainer","Root","Trigger","trigger","triggerLabel","Portal","Positioner","positioner","sideOffset","Popup","popup","Item","menuItem","onClick","menuItemCheck","ExcludeDropdown"],"sources":["ExcludeDropdown.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Menu } from \"@base-ui/react/menu\";\nimport React, { memo, useCallback } from \"react\";\nimport styles from \"./ExcludeDropdown.module.css\";\nimport { CheckIcon, ChevronDownIcon } from \"./FilterIcons.js\";\n\ninterface ExcludeDropdownProps {\n isExcluding: boolean;\n onToggleExclude: () => void;\n}\n\nfunction ExcludeDropdownInner({\n isExcluding,\n onToggleExclude,\n}: ExcludeDropdownProps): React.ReactElement {\n const label = isExcluding ? \"Excluding\" : \"Keeping\";\n\n const handleSelectKeeping = useCallback(() => {\n if (isExcluding) {\n onToggleExclude();\n }\n }, [isExcluding, onToggleExclude]);\n\n const handleSelectExcluding = useCallback(() => {\n if (!isExcluding) {\n onToggleExclude();\n }\n }, [isExcluding, onToggleExclude]);\n\n return (\n <div className={styles.excludeDropdownContainer}>\n <Menu.Root>\n <Menu.Trigger\n className={styles.trigger}\n aria-label={label}\n >\n <span className={styles.triggerLabel}>\n {label}\n </span>\n <ChevronDownIcon />\n </Menu.Trigger>\n <Menu.Portal>\n <Menu.Positioner className={styles.positioner} sideOffset={4}>\n <Menu.Popup className={styles.popup}>\n <Menu.Item\n className={styles.menuItem}\n onClick={handleSelectKeeping}\n >\n <span className={styles.menuItemCheck}>\n {!isExcluding && <CheckIcon />}\n </span>\n Keeping\n </Menu.Item>\n <Menu.Item\n className={styles.menuItem}\n onClick={handleSelectExcluding}\n >\n <span className={styles.menuItemCheck}>\n {isExcluding && <CheckIcon />}\n </span>\n Excluding\n </Menu.Item>\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n </div>\n );\n}\n\nexport const ExcludeDropdown: React.MemoExoticComponent<\n typeof ExcludeDropdownInner\n> = memo(ExcludeDropdownInner);\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,IAAI,QAAQ,qBAAqB;AAC1C,OAAOC,KAAK,IAAIC,IAAI,EAAEC,WAAW,QAAQ,OAAO;AAChD,OAAOC,MAAM,MAAM,8BAA8B;AACjD,SAASC,SAAS,EAAEC,eAAe,QAAQ,kBAAkB;
|
|
1
|
+
{"version":3,"file":"ExcludeDropdown.js","names":["Menu","React","memo","useCallback","styles","CheckIcon","ChevronDownIcon","ExcludeIcon","ExcludeDropdownInner","isExcluding","onToggleExclude","label","handleSelectKeeping","handleSelectExcluding","createElement","className","excludeDropdownContainer","Root","Trigger","trigger","undefined","triggerLabel","Portal","Positioner","positioner","sideOffset","Popup","popup","Item","menuItem","onClick","menuItemCheck","ExcludeDropdown"],"sources":["ExcludeDropdown.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Menu } from \"@base-ui/react/menu\";\nimport React, { memo, useCallback } from \"react\";\nimport styles from \"./ExcludeDropdown.module.css\";\nimport { CheckIcon, ChevronDownIcon, ExcludeIcon } from \"./FilterIcons.js\";\n\ninterface ExcludeDropdownProps {\n isExcluding: boolean;\n onToggleExclude: () => void;\n}\n\nfunction ExcludeDropdownInner({\n isExcluding,\n onToggleExclude,\n}: ExcludeDropdownProps): React.ReactElement {\n const label = isExcluding ? \"Excluding\" : \"Keeping\";\n\n const handleSelectKeeping = useCallback(() => {\n if (isExcluding) {\n onToggleExclude();\n }\n }, [isExcluding, onToggleExclude]);\n\n const handleSelectExcluding = useCallback(() => {\n if (!isExcluding) {\n onToggleExclude();\n }\n }, [isExcluding, onToggleExclude]);\n\n return (\n <div className={styles.excludeDropdownContainer}>\n <Menu.Root>\n <Menu.Trigger\n className={styles.trigger}\n aria-label={label}\n data-excluding={isExcluding || undefined}\n >\n {isExcluding && <ExcludeIcon />}\n <span className={styles.triggerLabel}>\n {label}\n </span>\n <ChevronDownIcon />\n </Menu.Trigger>\n <Menu.Portal>\n <Menu.Positioner className={styles.positioner} sideOffset={4}>\n <Menu.Popup className={styles.popup}>\n <Menu.Item\n className={styles.menuItem}\n onClick={handleSelectKeeping}\n >\n <span className={styles.menuItemCheck}>\n {!isExcluding && <CheckIcon />}\n </span>\n Keeping\n </Menu.Item>\n <Menu.Item\n className={styles.menuItem}\n onClick={handleSelectExcluding}\n >\n <span className={styles.menuItemCheck}>\n {isExcluding && <CheckIcon />}\n </span>\n Excluding\n </Menu.Item>\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n </div>\n );\n}\n\nexport const ExcludeDropdown: React.MemoExoticComponent<\n typeof ExcludeDropdownInner\n> = memo(ExcludeDropdownInner);\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,IAAI,QAAQ,qBAAqB;AAC1C,OAAOC,KAAK,IAAIC,IAAI,EAAEC,WAAW,QAAQ,OAAO;AAChD,OAAOC,MAAM,MAAM,8BAA8B;AACjD,SAASC,SAAS,EAAEC,eAAe,EAAEC,WAAW,QAAQ,kBAAkB;AAO1E,SAASC,oBAAoBA,CAAC;EAC5BC,WAAW;EACXC;AACoB,CAAC,EAAsB;EAC3C,MAAMC,KAAK,GAAGF,WAAW,GAAG,WAAW,GAAG,SAAS;EAEnD,MAAMG,mBAAmB,GAAGT,WAAW,CAAC,MAAM;IAC5C,IAAIM,WAAW,EAAE;MACfC,eAAe,CAAC,CAAC;IACnB;EACF,CAAC,EAAE,CAACD,WAAW,EAAEC,eAAe,CAAC,CAAC;EAElC,MAAMG,qBAAqB,GAAGV,WAAW,CAAC,MAAM;IAC9C,IAAI,CAACM,WAAW,EAAE;MAChBC,eAAe,CAAC,CAAC;IACnB;EACF,CAAC,EAAE,CAACD,WAAW,EAAEC,eAAe,CAAC,CAAC;EAElC,oBACET,KAAA,CAAAa,aAAA;IAAKC,SAAS,EAAEX,MAAM,CAACY;EAAyB,gBAC9Cf,KAAA,CAAAa,aAAA,CAACd,IAAI,CAACiB,IAAI,qBACRhB,KAAA,CAAAa,aAAA,CAACd,IAAI,CAACkB,OAAO;IACXH,SAAS,EAAEX,MAAM,CAACe,OAAQ;IAC1B,cAAYR,KAAM;IAClB,kBAAgBF,WAAW,IAAIW;EAAU,GAExCX,WAAW,iBAAIR,KAAA,CAAAa,aAAA,CAACP,WAAW,MAAE,CAAC,eAC/BN,KAAA,CAAAa,aAAA;IAAMC,SAAS,EAAEX,MAAM,CAACiB;EAAa,GAClCV,KACG,CAAC,eACPV,KAAA,CAAAa,aAAA,CAACR,eAAe,MAAE,CACN,CAAC,eACfL,KAAA,CAAAa,aAAA,CAACd,IAAI,CAACsB,MAAM,qBACVrB,KAAA,CAAAa,aAAA,CAACd,IAAI,CAACuB,UAAU;IAACR,SAAS,EAAEX,MAAM,CAACoB,UAAW;IAACC,UAAU,EAAE;EAAE,gBAC3DxB,KAAA,CAAAa,aAAA,CAACd,IAAI,CAAC0B,KAAK;IAACX,SAAS,EAAEX,MAAM,CAACuB;EAAM,gBAClC1B,KAAA,CAAAa,aAAA,CAACd,IAAI,CAAC4B,IAAI;IACRb,SAAS,EAAEX,MAAM,CAACyB,QAAS;IAC3BC,OAAO,EAAElB;EAAoB,gBAE7BX,KAAA,CAAAa,aAAA;IAAMC,SAAS,EAAEX,MAAM,CAAC2B;EAAc,GACnC,CAACtB,WAAW,iBAAIR,KAAA,CAAAa,aAAA,CAACT,SAAS,MAAE,CACzB,CAAC,WAEE,CAAC,eACZJ,KAAA,CAAAa,aAAA,CAACd,IAAI,CAAC4B,IAAI;IACRb,SAAS,EAAEX,MAAM,CAACyB,QAAS;IAC3BC,OAAO,EAAEjB;EAAsB,gBAE/BZ,KAAA,CAAAa,aAAA;IAAMC,SAAS,EAAEX,MAAM,CAAC2B;EAAc,GACnCtB,WAAW,iBAAIR,KAAA,CAAAa,aAAA,CAACT,SAAS,MAAE,CACxB,CAAC,aAEE,CACD,CACG,CACN,CACJ,CACR,CAAC;AAEV;AAEA,OAAO,MAAM2B,eAEZ,gBAAG9B,IAAI,CAACM,oBAAoB,CAAC","ignoreList":[]}
|
|
@@ -28,17 +28,18 @@
|
|
|
28
28
|
cursor: pointer;
|
|
29
29
|
font-family: var(--osdk-filter-item-exclude-dropdown-font-family);
|
|
30
30
|
font-size: var(--osdk-filter-item-exclude-dropdown-font-size);
|
|
31
|
-
color: var(--osdk-filter-item-exclude-dropdown-color);
|
|
32
|
-
padding: calc(var(--osdk-surface-spacing) *
|
|
31
|
+
color: var(--osdk-filter-item-exclude-dropdown-trigger-color);
|
|
32
|
+
padding: calc(var(--osdk-surface-spacing) * 1)
|
|
33
33
|
calc(var(--osdk-surface-spacing) * 1);
|
|
34
|
-
border-radius: var(--osdk-filter-item-
|
|
34
|
+
border-radius: var(--osdk-filter-item-exclude-dropdown-trigger-border-radius);
|
|
35
35
|
|
|
36
36
|
&:hover {
|
|
37
37
|
background: var(--osdk-filter-item-header-action-bg-hover);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
&:focus-visible {
|
|
41
|
-
outline: var(--osdk-filter-input-focus-outline-width) solid
|
|
41
|
+
outline: var(--osdk-filter-input-focus-outline-width) solid
|
|
42
|
+
var(--osdk-filter-input-focus-outline-color);
|
|
42
43
|
outline-offset: var(--osdk-filter-input-focus-outline-offset);
|
|
43
44
|
}
|
|
44
45
|
}
|
|
@@ -81,7 +82,8 @@
|
|
|
81
82
|
}
|
|
82
83
|
|
|
83
84
|
&:focus-visible {
|
|
84
|
-
outline: var(--osdk-filter-input-focus-outline-width) solid
|
|
85
|
+
outline: var(--osdk-filter-input-focus-outline-width) solid
|
|
86
|
+
var(--osdk-filter-input-focus-outline-color);
|
|
85
87
|
outline-offset: var(--osdk-filter-input-focus-outline-offset);
|
|
86
88
|
}
|
|
87
89
|
}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { ChevronDown, Cross, DoubleChevronLeft, DoubleChevronRight, More, Search, Tick
|
|
17
|
+
import { ChevronDown, Cross, Disable, DoubleChevronLeft, DoubleChevronRight, More, Reset, Search, Tick } from "@blueprintjs/icons";
|
|
18
18
|
import React from "react";
|
|
19
19
|
export function RemoveIcon() {
|
|
20
20
|
return /*#__PURE__*/React.createElement(Cross, {
|
|
@@ -47,8 +47,8 @@ export function ExpandIcon() {
|
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
49
|
export function ResetIcon() {
|
|
50
|
-
return /*#__PURE__*/React.createElement(
|
|
51
|
-
size:
|
|
50
|
+
return /*#__PURE__*/React.createElement(Reset, {
|
|
51
|
+
size: 12
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
export function CheckIcon() {
|
|
@@ -56,4 +56,10 @@ export function CheckIcon() {
|
|
|
56
56
|
size: 12
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
+
export function ExcludeIcon() {
|
|
60
|
+
return /*#__PURE__*/React.createElement(Disable, {
|
|
61
|
+
color: "currentColor",
|
|
62
|
+
size: 12
|
|
63
|
+
});
|
|
64
|
+
}
|
|
59
65
|
//# sourceMappingURL=FilterIcons.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterIcons.js","names":["ChevronDown","Cross","DoubleChevronLeft","DoubleChevronRight","More","
|
|
1
|
+
{"version":3,"file":"FilterIcons.js","names":["ChevronDown","Cross","Disable","DoubleChevronLeft","DoubleChevronRight","More","Reset","Search","Tick","React","RemoveIcon","createElement","size","SearchIcon","OverflowMenuIcon","ChevronDownIcon","CollapseIcon","ExpandIcon","ResetIcon","CheckIcon","ExcludeIcon","color"],"sources":["FilterIcons.tsx"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ChevronDown,\n Cross,\n Disable,\n DoubleChevronLeft,\n DoubleChevronRight,\n More,\n Reset,\n Search,\n Tick,\n} from \"@blueprintjs/icons\";\nimport React from \"react\";\n\nexport function RemoveIcon(): React.ReactElement {\n return <Cross size={14} />;\n}\n\nexport function SearchIcon(): React.ReactElement {\n return <Search size={14} />;\n}\n\nexport function OverflowMenuIcon(): React.ReactElement {\n return <More size={14} />;\n}\n\nexport function ChevronDownIcon(): React.ReactElement {\n return <ChevronDown size={10} />;\n}\n\nexport function CollapseIcon(): React.ReactElement {\n return <DoubleChevronLeft size={14} />;\n}\n\nexport function ExpandIcon(): React.ReactElement {\n return <DoubleChevronRight size={14} />;\n}\n\nexport function ResetIcon(): React.ReactElement {\n return <Reset size={12} />;\n}\n\nexport function CheckIcon(): React.ReactElement {\n return <Tick size={12} />;\n}\n\nexport function ExcludeIcon(): React.ReactElement {\n return <Disable color=\"currentColor\" size={12} />;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SACEA,WAAW,EACXC,KAAK,EACLC,OAAO,EACPC,iBAAiB,EACjBC,kBAAkB,EAClBC,IAAI,EACJC,KAAK,EACLC,MAAM,EACNC,IAAI,QACC,oBAAoB;AAC3B,OAAOC,KAAK,MAAM,OAAO;AAEzB,OAAO,SAASC,UAAUA,CAAA,EAAuB;EAC/C,oBAAOD,KAAA,CAAAE,aAAA,CAACV,KAAK;IAACW,IAAI,EAAE;EAAG,CAAE,CAAC;AAC5B;AAEA,OAAO,SAASC,UAAUA,CAAA,EAAuB;EAC/C,oBAAOJ,KAAA,CAAAE,aAAA,CAACJ,MAAM;IAACK,IAAI,EAAE;EAAG,CAAE,CAAC;AAC7B;AAEA,OAAO,SAASE,gBAAgBA,CAAA,EAAuB;EACrD,oBAAOL,KAAA,CAAAE,aAAA,CAACN,IAAI;IAACO,IAAI,EAAE;EAAG,CAAE,CAAC;AAC3B;AAEA,OAAO,SAASG,eAAeA,CAAA,EAAuB;EACpD,oBAAON,KAAA,CAAAE,aAAA,CAACX,WAAW;IAACY,IAAI,EAAE;EAAG,CAAE,CAAC;AAClC;AAEA,OAAO,SAASI,YAAYA,CAAA,EAAuB;EACjD,oBAAOP,KAAA,CAAAE,aAAA,CAACR,iBAAiB;IAACS,IAAI,EAAE;EAAG,CAAE,CAAC;AACxC;AAEA,OAAO,SAASK,UAAUA,CAAA,EAAuB;EAC/C,oBAAOR,KAAA,CAAAE,aAAA,CAACP,kBAAkB;IAACQ,IAAI,EAAE;EAAG,CAAE,CAAC;AACzC;AAEA,OAAO,SAASM,SAASA,CAAA,EAAuB;EAC9C,oBAAOT,KAAA,CAAAE,aAAA,CAACL,KAAK;IAACM,IAAI,EAAE;EAAG,CAAE,CAAC;AAC5B;AAEA,OAAO,SAASO,SAASA,CAAA,EAAuB;EAC9C,oBAAOV,KAAA,CAAAE,aAAA,CAACH,IAAI;IAACI,IAAI,EAAE;EAAG,CAAE,CAAC;AAC3B;AAEA,OAAO,SAASQ,WAAWA,CAAA,EAAuB;EAChD,oBAAOX,KAAA,CAAAE,aAAA,CAACT,OAAO;IAACmB,KAAK,EAAC,cAAc;IAACT,IAAI,EAAE;EAAG,CAAE,CAAC;AACnD","ignoreList":[]}
|
|
@@ -14,16 +14,24 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
+
import { Button } from "@base-ui/react/button";
|
|
17
18
|
import classnames from "classnames";
|
|
18
|
-
import React, { memo, useCallback } from "react";
|
|
19
|
+
import React, { memo, useCallback, useMemo } from "react";
|
|
19
20
|
import { supportsExcluding } from "../utils/filterValues.js";
|
|
20
21
|
import { ExcludeDropdown } from "./ExcludeDropdown.js";
|
|
21
22
|
import styles from "./FilterListItem.module.css";
|
|
23
|
+
function getSelectedCount(filterState) {
|
|
24
|
+
if (!filterState) return 0;
|
|
25
|
+
if (filterState.type === "EXACT_MATCH") return filterState.values.length;
|
|
26
|
+
if (filterState.type === "SELECT") return filterState.selectedValues.length;
|
|
27
|
+
return 0;
|
|
28
|
+
}
|
|
22
29
|
function FilterInputExcludeRowInner({
|
|
23
30
|
excludeRowOpen,
|
|
24
31
|
filterState,
|
|
25
32
|
onFilterStateChanged,
|
|
26
33
|
totalValueCount,
|
|
34
|
+
onClearAll,
|
|
27
35
|
children
|
|
28
36
|
}) {
|
|
29
37
|
const handleToggleExclude = useCallback(() => {
|
|
@@ -35,6 +43,7 @@ function FilterInputExcludeRowInner({
|
|
|
35
43
|
}
|
|
36
44
|
}, [filterState, onFilterStateChanged]);
|
|
37
45
|
const isExcluding = filterState?.isExcluding ?? false;
|
|
46
|
+
const selectedCount = useMemo(() => getSelectedCount(filterState), [filterState]);
|
|
38
47
|
if (!supportsExcluding(filterState)) {
|
|
39
48
|
return /*#__PURE__*/React.createElement(React.Fragment, null, children);
|
|
40
49
|
}
|
|
@@ -49,7 +58,10 @@ function FilterInputExcludeRowInner({
|
|
|
49
58
|
}), totalValueCount != null && totalValueCount > 0 && /*#__PURE__*/React.createElement("span", {
|
|
50
59
|
className: styles.excludeCountLabel,
|
|
51
60
|
title: "Approximate count of unique values"
|
|
52
|
-
}, totalValueCount.toLocaleString(), " values")
|
|
61
|
+
}, selectedCount.toLocaleString(), " of", " ", totalValueCount.toLocaleString(), " values"), onClearAll && selectedCount > 0 && /*#__PURE__*/React.createElement(Button, {
|
|
62
|
+
className: styles.clearAllButton,
|
|
63
|
+
onClick: onClearAll
|
|
64
|
+
}, "Clear all")), children);
|
|
53
65
|
}
|
|
54
66
|
export const FilterInputExcludeRow = /*#__PURE__*/memo(FilterInputExcludeRowInner);
|
|
55
67
|
//# sourceMappingURL=FilterInputExcludeRow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterInputExcludeRow.js","names":["classnames","React","memo","useCallback","supportsExcluding","ExcludeDropdown","styles","
|
|
1
|
+
{"version":3,"file":"FilterInputExcludeRow.js","names":["Button","classnames","React","memo","useCallback","useMemo","supportsExcluding","ExcludeDropdown","styles","getSelectedCount","filterState","type","values","length","selectedValues","FilterInputExcludeRowInner","excludeRowOpen","onFilterStateChanged","totalValueCount","onClearAll","children","handleToggleExclude","isExcluding","selectedCount","createElement","Fragment","className","excludeRow","excludeRowVisible","onToggleExclude","excludeCountLabel","title","toLocaleString","clearAllButton","onClick","FilterInputExcludeRow"],"sources":["FilterInputExcludeRow.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { supportsExcluding } from \"../utils/filterValues.js\";\nimport { ExcludeDropdown } from \"./ExcludeDropdown.js\";\nimport styles from \"./FilterListItem.module.css\";\n\nfunction getSelectedCount(filterState: FilterState | undefined): number {\n if (!filterState) return 0;\n if (filterState.type === \"EXACT_MATCH\") return filterState.values.length;\n if (filterState.type === \"SELECT\") return filterState.selectedValues.length;\n return 0;\n}\n\ninterface FilterInputExcludeRowProps {\n excludeRowOpen?: boolean;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n totalValueCount?: number;\n onClearAll?: () => void;\n children: React.ReactNode;\n}\n\nfunction FilterInputExcludeRowInner({\n excludeRowOpen,\n filterState,\n onFilterStateChanged,\n totalValueCount,\n onClearAll,\n children,\n}: FilterInputExcludeRowProps): React.ReactElement {\n const handleToggleExclude = useCallback(() => {\n if (filterState) {\n onFilterStateChanged({\n ...filterState,\n isExcluding: !filterState.isExcluding,\n });\n }\n }, [filterState, onFilterStateChanged]);\n\n const isExcluding = filterState?.isExcluding ?? false;\n const isOpen = excludeRowOpen ?? false;\n const selectedCount = useMemo(\n () => getSelectedCount(filterState),\n [filterState],\n );\n\n if (!supportsExcluding(filterState)) {\n return <>{children}</>;\n }\n\n return (\n <>\n <div\n data-exclude-row={true}\n className={classnames(styles.excludeRow, {\n [styles.excludeRowVisible]: isOpen,\n })}\n >\n <ExcludeDropdown\n isExcluding={isExcluding}\n onToggleExclude={handleToggleExclude}\n />\n {totalValueCount != null && totalValueCount > 0 && (\n <span\n className={styles.excludeCountLabel}\n title=\"Approximate count of unique values\"\n >\n {selectedCount.toLocaleString()} of{\" \"}\n {totalValueCount.toLocaleString()} values\n </span>\n )}\n {onClearAll && selectedCount > 0 && (\n <Button\n className={styles.clearAllButton}\n onClick={onClearAll}\n >\n Clear all\n </Button>\n )}\n </div>\n {children}\n </>\n );\n}\n\nexport const FilterInputExcludeRow: React.MemoExoticComponent<\n typeof FilterInputExcludeRowInner\n> = memo(FilterInputExcludeRowInner);\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,uBAAuB;AAC9C,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,IAAI,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAEzD,SAASC,iBAAiB,QAAQ,0BAA0B;AAC5D,SAASC,eAAe,QAAQ,sBAAsB;AACtD,OAAOC,MAAM,MAAM,6BAA6B;AAEhD,SAASC,gBAAgBA,CAACC,WAAoC,EAAU;EACtE,IAAI,CAACA,WAAW,EAAE,OAAO,CAAC;EAC1B,IAAIA,WAAW,CAACC,IAAI,KAAK,aAAa,EAAE,OAAOD,WAAW,CAACE,MAAM,CAACC,MAAM;EACxE,IAAIH,WAAW,CAACC,IAAI,KAAK,QAAQ,EAAE,OAAOD,WAAW,CAACI,cAAc,CAACD,MAAM;EAC3E,OAAO,CAAC;AACV;AAWA,SAASE,0BAA0BA,CAAC;EAClCC,cAAc;EACdN,WAAW;EACXO,oBAAoB;EACpBC,eAAe;EACfC,UAAU;EACVC;AAC0B,CAAC,EAAsB;EACjD,MAAMC,mBAAmB,GAAGjB,WAAW,CAAC,MAAM;IAC5C,IAAIM,WAAW,EAAE;MACfO,oBAAoB,CAAC;QACnB,GAAGP,WAAW;QACdY,WAAW,EAAE,CAACZ,WAAW,CAACY;MAC5B,CAAC,CAAC;IACJ;EACF,CAAC,EAAE,CAACZ,WAAW,EAAEO,oBAAoB,CAAC,CAAC;EAEvC,MAAMK,WAAW,GAAGZ,WAAW,EAAEY,WAAW,IAAI,KAAK;EAErD,MAAMC,aAAa,GAAGlB,OAAO,CAC3B,MAAMI,gBAAgB,CAACC,WAAW,CAAC,EACnC,CAACA,WAAW,CACd,CAAC;EAED,IAAI,CAACJ,iBAAiB,CAACI,WAAW,CAAC,EAAE;IACnC,oBAAOR,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,QAAGL,QAAW,CAAC;EACxB;EAEA,oBACElB,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,qBACEvB,KAAA,CAAAsB,aAAA;IACE,oBAAkB,IAAK;IACvBE,SAAS,EAAEzB,UAAU,CAACO,MAAM,CAACmB,UAAU,EAAE;MACvC,CAACnB,MAAM,CAACoB,iBAAiB,GAflBZ,cAAc,IAAI;IAgB3B,CAAC;EAAE,gBAEHd,KAAA,CAAAsB,aAAA,CAACjB,eAAe;IACde,WAAW,EAAEA,WAAY;IACzBO,eAAe,EAAER;EAAoB,CACtC,CAAC,EACDH,eAAe,IAAI,IAAI,IAAIA,eAAe,GAAG,CAAC,iBAC7ChB,KAAA,CAAAsB,aAAA;IACEE,SAAS,EAAElB,MAAM,CAACsB,iBAAkB;IACpCC,KAAK,EAAC;EAAoC,GAEzCR,aAAa,CAACS,cAAc,CAAC,CAAC,EAAC,KAAG,EAAC,GAAG,EACtCd,eAAe,CAACc,cAAc,CAAC,CAAC,EAAC,SAC9B,CACP,EACAb,UAAU,IAAII,aAAa,GAAG,CAAC,iBAC9BrB,KAAA,CAAAsB,aAAA,CAACxB,MAAM;IACL0B,SAAS,EAAElB,MAAM,CAACyB,cAAe;IACjCC,OAAO,EAAEf;EAAW,GACrB,WAEO,CAEP,CAAC,EACLC,QACD,CAAC;AAEP;AAEA,OAAO,MAAMe,qBAEZ,gBAAGhC,IAAI,CAACY,0BAA0B,CAAC","ignoreList":[]}
|
|
@@ -37,14 +37,23 @@
|
|
|
37
37
|
display: flex;
|
|
38
38
|
flex-direction: column;
|
|
39
39
|
height: 100%;
|
|
40
|
-
overflow
|
|
40
|
+
overflow: hidden;
|
|
41
41
|
background: var(--osdk-filter-list-bg);
|
|
42
42
|
border: var(--osdk-filter-list-border);
|
|
43
43
|
border-radius: var(--osdk-filter-list-border-radius);
|
|
44
|
+
box-shadow: var(--osdk-filter-list-shadow);
|
|
44
45
|
padding: var(--osdk-filter-list-padding);
|
|
45
46
|
gap: var(--osdk-filter-list-gap);
|
|
46
47
|
}
|
|
47
48
|
|
|
49
|
+
.scrollableContent {
|
|
50
|
+
display: flex;
|
|
51
|
+
flex-direction: column;
|
|
52
|
+
flex: 1;
|
|
53
|
+
overflow-y: auto;
|
|
54
|
+
min-height: 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
48
57
|
.hiddenContent {
|
|
49
58
|
display: none;
|
|
50
59
|
}
|
|
@@ -92,10 +101,10 @@
|
|
|
92
101
|
.addButtonContainer {
|
|
93
102
|
display: flex;
|
|
94
103
|
justify-content: center;
|
|
95
|
-
|
|
96
|
-
bottom: 0;
|
|
97
|
-
padding-top: var(--osdk-filter-list-addButton-padding-top);
|
|
104
|
+
padding: var(--osdk-filter-list-addButton-container-padding);
|
|
98
105
|
background: var(--osdk-filter-list-addButton-container-bg);
|
|
106
|
+
border-top: var(--osdk-filter-list-addButton-container-border-top);
|
|
107
|
+
flex-shrink: 0;
|
|
99
108
|
}
|
|
100
109
|
|
|
101
110
|
.addButtonContainer > * {
|
|
@@ -103,13 +112,17 @@
|
|
|
103
112
|
}
|
|
104
113
|
|
|
105
114
|
.addButton {
|
|
115
|
+
display: flex;
|
|
116
|
+
align-items: center;
|
|
117
|
+
justify-content: center;
|
|
106
118
|
font-family: var(--osdk-filter-header-font-family);
|
|
107
119
|
font-size: var(--osdk-filter-header-reset-font-size);
|
|
108
|
-
color: var(--osdk-
|
|
120
|
+
color: var(--osdk-typography-color-default-rest);
|
|
109
121
|
background: var(--osdk-filter-header-button-bg);
|
|
110
|
-
border:
|
|
122
|
+
border: var(--osdk-filter-list-addButton-border);
|
|
111
123
|
cursor: pointer;
|
|
112
124
|
padding: var(--osdk-filter-header-reset-padding);
|
|
125
|
+
min-height: var(--osdk-filter-list-addButton-height);
|
|
113
126
|
border-radius: var(--osdk-filter-header-button-border-radius);
|
|
114
127
|
transition: background-color var(--osdk-filter-header-button-transition);
|
|
115
128
|
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
import { closestCenter, DndContext, DragOverlay, KeyboardSensor, PointerSensor, useSensor, useSensors } from "@dnd-kit/core";
|
|
18
18
|
import { arrayMove, SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy } from "@dnd-kit/sortable";
|
|
19
19
|
import classnames from "classnames";
|
|
20
|
-
import React, { useCallback,
|
|
20
|
+
import React, { useCallback, useMemo, useState } from "react";
|
|
21
21
|
import styles from "./FilterListContent.module.css";
|
|
22
22
|
import { FilterListItem } from "./FilterListItem.js";
|
|
23
23
|
import { SortableFilterListItem } from "./SortableFilterListItem.js";
|
|
@@ -31,6 +31,14 @@ const POINTER_ACTIVATION_CONSTRAINT = {
|
|
|
31
31
|
distance: 8
|
|
32
32
|
};
|
|
33
33
|
const MODIFIERS = [restrictToVerticalAxis];
|
|
34
|
+
const DRAG_OVERLAY_HANDLE_ATTRIBUTES = {
|
|
35
|
+
role: "button",
|
|
36
|
+
tabIndex: -1,
|
|
37
|
+
"aria-disabled": true,
|
|
38
|
+
"aria-pressed": undefined,
|
|
39
|
+
"aria-roledescription": "sortable",
|
|
40
|
+
"aria-describedby": ""
|
|
41
|
+
};
|
|
34
42
|
export function FilterListContent({
|
|
35
43
|
filterDefinitions,
|
|
36
44
|
filterStates,
|
|
@@ -43,15 +51,27 @@ export function FilterListContent({
|
|
|
43
51
|
className,
|
|
44
52
|
style
|
|
45
53
|
}) {
|
|
46
|
-
const [
|
|
54
|
+
const [dragOrder, setDragOrder] = useState(null);
|
|
47
55
|
const [activeId, setActiveId] = useState(null);
|
|
48
|
-
|
|
49
|
-
if (filterDefinitions) {
|
|
50
|
-
|
|
56
|
+
const renderDefinitions = useMemo(() => {
|
|
57
|
+
if (!enableSorting || !dragOrder || !filterDefinitions) {
|
|
58
|
+
return filterDefinitions;
|
|
59
|
+
}
|
|
60
|
+
const defsByKey = new Map(filterDefinitions.map(d => [getFilterKey(d), d]));
|
|
61
|
+
const ordered = [];
|
|
62
|
+
for (const key of dragOrder) {
|
|
63
|
+
const def = defsByKey.get(key);
|
|
64
|
+
if (def) {
|
|
65
|
+
ordered.push(def);
|
|
66
|
+
defsByKey.delete(key);
|
|
67
|
+
}
|
|
51
68
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
69
|
+
for (const def of defsByKey.values()) {
|
|
70
|
+
ordered.push(def);
|
|
71
|
+
}
|
|
72
|
+
return ordered;
|
|
73
|
+
}, [enableSorting, dragOrder, filterDefinitions, getFilterKey]);
|
|
74
|
+
const sortableIds = useMemo(() => enableSorting && renderDefinitions ? renderDefinitions.map(def => getFilterKey(def)) : [], [enableSorting, renderDefinitions, getFilterKey]);
|
|
55
75
|
const pointerSensor = useSensor(PointerSensor, {
|
|
56
76
|
activationConstraint: POINTER_ACTIVATION_CONSTRAINT
|
|
57
77
|
});
|
|
@@ -60,7 +80,7 @@ export function FilterListContent({
|
|
|
60
80
|
});
|
|
61
81
|
const sensors = useSensors(pointerSensor, keyboardSensor);
|
|
62
82
|
const activeIndex = activeId != null ? sortableIds.indexOf(String(activeId)) : -1;
|
|
63
|
-
const activeDefinition = activeIndex >= 0 ?
|
|
83
|
+
const activeDefinition = activeIndex >= 0 && renderDefinitions ? renderDefinitions[activeIndex] : undefined;
|
|
64
84
|
const activeFilterKey = useMemo(() => activeDefinition ? getFilterKey(activeDefinition) : undefined, [activeDefinition, getFilterKey]);
|
|
65
85
|
const handleDragStart = useCallback(event => {
|
|
66
86
|
setActiveId(event.active.id);
|
|
@@ -77,9 +97,9 @@ export function FilterListContent({
|
|
|
77
97
|
const oldIndex = sortableIds.indexOf(String(active.id));
|
|
78
98
|
const newIndex = sortableIds.indexOf(String(over.id));
|
|
79
99
|
if (oldIndex !== -1 && newIndex !== -1) {
|
|
80
|
-
|
|
100
|
+
setDragOrder(arrayMove(sortableIds, oldIndex, newIndex));
|
|
81
101
|
}
|
|
82
|
-
}, [
|
|
102
|
+
}, [sortableIds]);
|
|
83
103
|
const handleDragCancel = useCallback(() => {
|
|
84
104
|
setActiveId(null);
|
|
85
105
|
}, []);
|
|
@@ -88,7 +108,7 @@ export function FilterListContent({
|
|
|
88
108
|
active
|
|
89
109
|
}) {
|
|
90
110
|
const idx = sortableIds.indexOf(String(active.id));
|
|
91
|
-
const def = idx >= 0 ?
|
|
111
|
+
const def = idx >= 0 && renderDefinitions ? renderDefinitions[idx] : undefined;
|
|
92
112
|
const label = def ? getFilterLabel(def) : "filter";
|
|
93
113
|
return `Picked up ${label} filter`;
|
|
94
114
|
},
|
|
@@ -106,7 +126,7 @@ export function FilterListContent({
|
|
|
106
126
|
over
|
|
107
127
|
}) {
|
|
108
128
|
const idx = sortableIds.indexOf(String(active.id));
|
|
109
|
-
const def = idx >= 0 ?
|
|
129
|
+
const def = idx >= 0 && renderDefinitions ? renderDefinitions[idx] : undefined;
|
|
110
130
|
const label = def ? getFilterLabel(def) : "filter";
|
|
111
131
|
if (over && active.id !== over.id) {
|
|
112
132
|
const overIdx = sortableIds.indexOf(String(over.id));
|
|
@@ -118,11 +138,11 @@ export function FilterListContent({
|
|
|
118
138
|
active
|
|
119
139
|
}) {
|
|
120
140
|
const idx = sortableIds.indexOf(String(active.id));
|
|
121
|
-
const def = idx >= 0 ?
|
|
141
|
+
const def = idx >= 0 && renderDefinitions ? renderDefinitions[idx] : undefined;
|
|
122
142
|
const label = def ? getFilterLabel(def) : "filter";
|
|
123
143
|
return `Cancelled dragging ${label} filter`;
|
|
124
144
|
}
|
|
125
|
-
}), [
|
|
145
|
+
}), [renderDefinitions, sortableIds, getFilterLabel]);
|
|
126
146
|
const accessibility = useMemo(() => ({
|
|
127
147
|
announcements
|
|
128
148
|
}), [announcements]);
|
|
@@ -148,7 +168,7 @@ export function FilterListContent({
|
|
|
148
168
|
}, /*#__PURE__*/React.createElement(SortableContext, {
|
|
149
169
|
items: sortableIds,
|
|
150
170
|
strategy: verticalListSortingStrategy
|
|
151
|
-
},
|
|
171
|
+
}, renderDefinitions.map((definition, index) => {
|
|
152
172
|
const id = sortableIds[index];
|
|
153
173
|
const filterKey = getFilterKey(definition);
|
|
154
174
|
const label = getFilterLabel(definition);
|
|
@@ -174,7 +194,8 @@ export function FilterListContent({
|
|
|
174
194
|
filterState: filterStates.get(activeFilterKey),
|
|
175
195
|
onFilterStateChanged: onFilterStateChanged,
|
|
176
196
|
onFilterRemoved: onFilterRemoved,
|
|
177
|
-
renderInput: renderInput
|
|
197
|
+
renderInput: renderInput,
|
|
198
|
+
dragHandleAttributes: DRAG_OVERLAY_HANDLE_ATTRIBUTES
|
|
178
199
|
}))));
|
|
179
200
|
}
|
|
180
201
|
return /*#__PURE__*/React.createElement("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterListContent.js","names":["closestCenter","DndContext","DragOverlay","KeyboardSensor","PointerSensor","useSensor","useSensors","arrayMove","SortableContext","sortableKeyboardCoordinates","verticalListSortingStrategy","classnames","React","useCallback","useEffect","useMemo","useState","styles","FilterListItem","SortableFilterListItem","restrictToVerticalAxis","transform","x","POINTER_ACTIVATION_CONSTRAINT","distance","MODIFIERS","FilterListContent","filterDefinitions","filterStates","onFilterStateChanged","onFilterRemoved","renderInput","getFilterKey","getFilterLabel","enableSorting","className","style","internalOrder","setInternalOrder","activeId","setActiveId","renderDefinitions","sortableIds","map","def","pointerSensor","activationConstraint","keyboardSensor","coordinateGetter","sensors","activeIndex","indexOf","String","activeDefinition","undefined","activeFilterKey","handleDragStart","event","active","id","handleDragEnd","over","oldIndex","newIndex","handleDragCancel","announcements","onDragStart","idx","label","onDragOver","overIdx","length","onDragEnd","onDragCancel","accessibility","createElement","content","collisionDetection","modifiers","items","strategy","definition","index","filterKey","state","get","key","filterState","dropAnimation","dragOverlay"],"sources":["FilterListContent.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n Announcements,\n DragEndEvent,\n DragStartEvent,\n Modifier,\n UniqueIdentifier,\n} from \"@dnd-kit/core\";\nimport {\n closestCenter,\n DndContext,\n DragOverlay,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport classnames from \"classnames\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport type { RenderFilterInput } from \"./BaseFilterListApi.js\";\nimport styles from \"./FilterListContent.module.css\";\nimport { FilterListItem } from \"./FilterListItem.js\";\nimport { SortableFilterListItem } from \"./SortableFilterListItem.js\";\n\nconst restrictToVerticalAxis: Modifier = ({ transform }) => ({\n ...transform,\n x: 0,\n});\n\nconst POINTER_ACTIVATION_CONSTRAINT = { distance: 8 } as const;\nconst MODIFIERS: Modifier[] = [restrictToVerticalAxis];\n\ninterface FilterListContentProps<D> {\n filterDefinitions?: Array<D>;\n filterStates: Map<string, FilterState>;\n onFilterStateChanged: (\n filterKey: string,\n state: FilterState,\n ) => void;\n onFilterRemoved?: (filterKey: string) => void;\n renderInput: RenderFilterInput<D>;\n getFilterKey: (definition: D) => string;\n getFilterLabel: (definition: D) => string;\n enableSorting?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function FilterListContent<D>({\n filterDefinitions,\n filterStates,\n onFilterStateChanged,\n onFilterRemoved,\n renderInput,\n getFilterKey,\n getFilterLabel,\n enableSorting,\n className,\n style,\n}: FilterListContentProps<D>): React.ReactElement {\n const [internalOrder, setInternalOrder] = useState<Array<D>>(\n () => filterDefinitions ?? [],\n );\n const [activeId, setActiveId] = useState<UniqueIdentifier | null>(null);\n\n useEffect(() => {\n if (filterDefinitions) {\n setInternalOrder(filterDefinitions);\n }\n }, [filterDefinitions]);\n\n const renderDefinitions = enableSorting ? internalOrder : filterDefinitions;\n\n const sortableIds = useMemo(\n () =>\n enableSorting\n ? internalOrder.map((def) => getFilterKey(def))\n : [],\n [enableSorting, internalOrder, getFilterKey],\n );\n\n const pointerSensor = useSensor(PointerSensor, {\n activationConstraint: POINTER_ACTIVATION_CONSTRAINT,\n });\n const keyboardSensor = useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n });\n const sensors = useSensors(pointerSensor, keyboardSensor);\n\n const activeIndex = activeId != null\n ? sortableIds.indexOf(String(activeId))\n : -1;\n const activeDefinition = activeIndex >= 0\n ? internalOrder[activeIndex]\n : undefined;\n\n const activeFilterKey = useMemo(\n () => activeDefinition ? getFilterKey(activeDefinition) : undefined,\n [activeDefinition, getFilterKey],\n );\n\n const handleDragStart = useCallback((event: DragStartEvent) => {\n setActiveId(event.active.id);\n }, []);\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n setActiveId(null);\n const { active, over } = event;\n if (!over || active.id === over.id) {\n return;\n }\n const oldIndex = sortableIds.indexOf(String(active.id));\n const newIndex = sortableIds.indexOf(String(over.id));\n if (oldIndex !== -1 && newIndex !== -1) {\n setInternalOrder(arrayMove(internalOrder, oldIndex, newIndex));\n }\n },\n [internalOrder, sortableIds],\n );\n\n const handleDragCancel = useCallback(() => {\n setActiveId(null);\n }, []);\n\n const announcements = useMemo<Announcements>(\n () => ({\n onDragStart({ active }) {\n const idx = sortableIds.indexOf(String(active.id));\n const def = idx >= 0 ? internalOrder[idx] : undefined;\n const label = def ? getFilterLabel(def) : \"filter\";\n return `Picked up ${label} filter`;\n },\n onDragOver({ over }) {\n if (!over) {\n return \"Not over a droppable area\";\n }\n const overIdx = sortableIds.indexOf(String(over.id));\n return `Moved to position ${overIdx + 1} of ${sortableIds.length}`;\n },\n onDragEnd({ active, over }) {\n const idx = sortableIds.indexOf(String(active.id));\n const def = idx >= 0 ? internalOrder[idx] : undefined;\n const label = def ? getFilterLabel(def) : \"filter\";\n if (over && active.id !== over.id) {\n const overIdx = sortableIds.indexOf(String(over.id));\n return `Dropped ${label} filter at position ${overIdx + 1}`;\n }\n return `Dropped ${label} filter back in its original position`;\n },\n onDragCancel({ active }) {\n const idx = sortableIds.indexOf(String(active.id));\n const def = idx >= 0 ? internalOrder[idx] : undefined;\n const label = def ? getFilterLabel(def) : \"filter\";\n return `Cancelled dragging ${label} filter`;\n },\n }),\n [internalOrder, sortableIds, getFilterLabel],\n );\n\n const accessibility = useMemo(\n () => ({ announcements }),\n [announcements],\n );\n\n if (!renderDefinitions || renderDefinitions.length === 0) {\n return (\n <div\n className={classnames(styles.content, className)}\n style={style}\n data-empty=\"true\"\n />\n );\n }\n\n if (enableSorting) {\n return (\n <div\n className={classnames(styles.content, className)}\n style={style}\n >\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n modifiers={MODIFIERS}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n accessibility={accessibility}\n >\n <SortableContext\n items={sortableIds}\n strategy={verticalListSortingStrategy}\n >\n {internalOrder.map((definition, index) => {\n const id = sortableIds[index];\n const filterKey = getFilterKey(definition);\n const label = getFilterLabel(definition);\n const state = filterStates.get(filterKey);\n\n return (\n <SortableFilterListItem\n key={id}\n id={id}\n definition={definition}\n filterKey={filterKey}\n label={label}\n filterState={state}\n onFilterStateChanged={onFilterStateChanged}\n onFilterRemoved={onFilterRemoved}\n renderInput={renderInput}\n />\n );\n })}\n </SortableContext>\n\n <DragOverlay\n dropAnimation={null}\n className={styles.dragOverlay}\n >\n {activeDefinition && activeFilterKey && (\n <FilterListItem\n definition={activeDefinition}\n filterKey={activeFilterKey}\n label={getFilterLabel(activeDefinition)}\n filterState={filterStates.get(activeFilterKey)}\n onFilterStateChanged={onFilterStateChanged}\n onFilterRemoved={onFilterRemoved}\n renderInput={renderInput}\n />\n )}\n </DragOverlay>\n </DndContext>\n </div>\n );\n }\n\n return (\n <div\n className={classnames(styles.content, className)}\n style={style}\n >\n {renderDefinitions.map((definition) => {\n const filterKey = getFilterKey(definition);\n const state = filterStates.get(filterKey);\n\n return (\n <FilterListItem\n key={filterKey}\n definition={definition}\n filterKey={filterKey}\n label={getFilterLabel(definition)}\n filterState={state}\n onFilterStateChanged={onFilterStateChanged}\n onFilterRemoved={onFilterRemoved}\n renderInput={renderInput}\n />\n );\n })}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FilterListContent.js","names":["closestCenter","DndContext","DragOverlay","KeyboardSensor","PointerSensor","useSensor","useSensors","arrayMove","SortableContext","sortableKeyboardCoordinates","verticalListSortingStrategy","classnames","React","useCallback","useMemo","useState","styles","FilterListItem","SortableFilterListItem","restrictToVerticalAxis","transform","x","POINTER_ACTIVATION_CONSTRAINT","distance","MODIFIERS","DRAG_OVERLAY_HANDLE_ATTRIBUTES","role","tabIndex","undefined","FilterListContent","filterDefinitions","filterStates","onFilterStateChanged","onFilterRemoved","renderInput","getFilterKey","getFilterLabel","enableSorting","className","style","dragOrder","setDragOrder","activeId","setActiveId","renderDefinitions","defsByKey","Map","map","d","ordered","key","def","get","push","delete","values","sortableIds","pointerSensor","activationConstraint","keyboardSensor","coordinateGetter","sensors","activeIndex","indexOf","String","activeDefinition","activeFilterKey","handleDragStart","event","active","id","handleDragEnd","over","oldIndex","newIndex","handleDragCancel","announcements","onDragStart","idx","label","onDragOver","overIdx","length","onDragEnd","onDragCancel","accessibility","createElement","content","collisionDetection","modifiers","items","strategy","definition","index","filterKey","state","filterState","dropAnimation","dragOverlay","dragHandleAttributes"],"sources":["FilterListContent.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n Announcements,\n DragEndEvent,\n DraggableAttributes,\n DragStartEvent,\n Modifier,\n UniqueIdentifier,\n} from \"@dnd-kit/core\";\nimport {\n closestCenter,\n DndContext,\n DragOverlay,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport classnames from \"classnames\";\nimport React, { useCallback, useMemo, useState } from \"react\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport type { RenderFilterInput } from \"./BaseFilterListApi.js\";\nimport styles from \"./FilterListContent.module.css\";\nimport { FilterListItem } from \"./FilterListItem.js\";\nimport { SortableFilterListItem } from \"./SortableFilterListItem.js\";\n\nconst restrictToVerticalAxis: Modifier = ({ transform }) => ({\n ...transform,\n x: 0,\n});\n\nconst POINTER_ACTIVATION_CONSTRAINT = { distance: 8 } as const;\nconst MODIFIERS: Modifier[] = [restrictToVerticalAxis];\n\nconst DRAG_OVERLAY_HANDLE_ATTRIBUTES: DraggableAttributes = {\n role: \"button\",\n tabIndex: -1,\n \"aria-disabled\": true,\n \"aria-pressed\": undefined,\n \"aria-roledescription\": \"sortable\",\n \"aria-describedby\": \"\",\n};\n\ninterface FilterListContentProps<D> {\n filterDefinitions?: Array<D>;\n filterStates: Map<string, FilterState>;\n onFilterStateChanged: (\n filterKey: string,\n state: FilterState,\n ) => void;\n onFilterRemoved?: (filterKey: string) => void;\n renderInput: RenderFilterInput<D>;\n getFilterKey: (definition: D) => string;\n getFilterLabel: (definition: D) => string;\n enableSorting?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function FilterListContent<D>({\n filterDefinitions,\n filterStates,\n onFilterStateChanged,\n onFilterRemoved,\n renderInput,\n getFilterKey,\n getFilterLabel,\n enableSorting,\n className,\n style,\n}: FilterListContentProps<D>): React.ReactElement {\n const [dragOrder, setDragOrder] = useState<string[] | null>(null);\n const [activeId, setActiveId] = useState<UniqueIdentifier | null>(null);\n\n const renderDefinitions = useMemo(() => {\n if (!enableSorting || !dragOrder || !filterDefinitions) {\n return filterDefinitions;\n }\n const defsByKey = new Map(filterDefinitions.map(d => [getFilterKey(d), d]));\n const ordered: Array<D> = [];\n for (const key of dragOrder) {\n const def = defsByKey.get(key);\n if (def) {\n ordered.push(def);\n defsByKey.delete(key);\n }\n }\n for (const def of defsByKey.values()) {\n ordered.push(def);\n }\n return ordered;\n }, [enableSorting, dragOrder, filterDefinitions, getFilterKey]);\n\n const sortableIds = useMemo(\n () =>\n enableSorting && renderDefinitions\n ? renderDefinitions.map((def) => getFilterKey(def))\n : [],\n [enableSorting, renderDefinitions, getFilterKey],\n );\n\n const pointerSensor = useSensor(PointerSensor, {\n activationConstraint: POINTER_ACTIVATION_CONSTRAINT,\n });\n const keyboardSensor = useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n });\n const sensors = useSensors(pointerSensor, keyboardSensor);\n\n const activeIndex = activeId != null\n ? sortableIds.indexOf(String(activeId))\n : -1;\n const activeDefinition = activeIndex >= 0 && renderDefinitions\n ? renderDefinitions[activeIndex]\n : undefined;\n\n const activeFilterKey = useMemo(\n () => activeDefinition ? getFilterKey(activeDefinition) : undefined,\n [activeDefinition, getFilterKey],\n );\n\n const handleDragStart = useCallback((event: DragStartEvent) => {\n setActiveId(event.active.id);\n }, []);\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n setActiveId(null);\n const { active, over } = event;\n if (!over || active.id === over.id) {\n return;\n }\n const oldIndex = sortableIds.indexOf(String(active.id));\n const newIndex = sortableIds.indexOf(String(over.id));\n if (oldIndex !== -1 && newIndex !== -1) {\n setDragOrder(arrayMove(sortableIds, oldIndex, newIndex));\n }\n },\n [sortableIds],\n );\n\n const handleDragCancel = useCallback(() => {\n setActiveId(null);\n }, []);\n\n const announcements = useMemo<Announcements>(\n () => ({\n onDragStart({ active }) {\n const idx = sortableIds.indexOf(String(active.id));\n const def = idx >= 0 && renderDefinitions\n ? renderDefinitions[idx]\n : undefined;\n const label = def ? getFilterLabel(def) : \"filter\";\n return `Picked up ${label} filter`;\n },\n onDragOver({ over }) {\n if (!over) {\n return \"Not over a droppable area\";\n }\n const overIdx = sortableIds.indexOf(String(over.id));\n return `Moved to position ${overIdx + 1} of ${sortableIds.length}`;\n },\n onDragEnd({ active, over }) {\n const idx = sortableIds.indexOf(String(active.id));\n const def = idx >= 0 && renderDefinitions\n ? renderDefinitions[idx]\n : undefined;\n const label = def ? getFilterLabel(def) : \"filter\";\n if (over && active.id !== over.id) {\n const overIdx = sortableIds.indexOf(String(over.id));\n return `Dropped ${label} filter at position ${overIdx + 1}`;\n }\n return `Dropped ${label} filter back in its original position`;\n },\n onDragCancel({ active }) {\n const idx = sortableIds.indexOf(String(active.id));\n const def = idx >= 0 && renderDefinitions\n ? renderDefinitions[idx]\n : undefined;\n const label = def ? getFilterLabel(def) : \"filter\";\n return `Cancelled dragging ${label} filter`;\n },\n }),\n [renderDefinitions, sortableIds, getFilterLabel],\n );\n\n const accessibility = useMemo(\n () => ({ announcements }),\n [announcements],\n );\n\n if (!renderDefinitions || renderDefinitions.length === 0) {\n return (\n <div\n className={classnames(styles.content, className)}\n style={style}\n data-empty=\"true\"\n />\n );\n }\n\n if (enableSorting) {\n return (\n <div\n className={classnames(styles.content, className)}\n style={style}\n >\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n modifiers={MODIFIERS}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n accessibility={accessibility}\n >\n <SortableContext\n items={sortableIds}\n strategy={verticalListSortingStrategy}\n >\n {renderDefinitions.map((definition, index) => {\n const id = sortableIds[index];\n const filterKey = getFilterKey(definition);\n const label = getFilterLabel(definition);\n const state = filterStates.get(filterKey);\n\n return (\n <SortableFilterListItem\n key={id}\n id={id}\n definition={definition}\n filterKey={filterKey}\n label={label}\n filterState={state}\n onFilterStateChanged={onFilterStateChanged}\n onFilterRemoved={onFilterRemoved}\n renderInput={renderInput}\n />\n );\n })}\n </SortableContext>\n\n <DragOverlay\n dropAnimation={null}\n className={styles.dragOverlay}\n >\n {activeDefinition && activeFilterKey && (\n <FilterListItem\n definition={activeDefinition}\n filterKey={activeFilterKey}\n label={getFilterLabel(activeDefinition)}\n filterState={filterStates.get(activeFilterKey)}\n onFilterStateChanged={onFilterStateChanged}\n onFilterRemoved={onFilterRemoved}\n renderInput={renderInput}\n dragHandleAttributes={DRAG_OVERLAY_HANDLE_ATTRIBUTES}\n />\n )}\n </DragOverlay>\n </DndContext>\n </div>\n );\n }\n\n return (\n <div\n className={classnames(styles.content, className)}\n style={style}\n >\n {renderDefinitions.map((definition) => {\n const filterKey = getFilterKey(definition);\n const state = filterStates.get(filterKey);\n\n return (\n <FilterListItem\n key={filterKey}\n definition={definition}\n filterKey={filterKey}\n label={getFilterLabel(definition)}\n filterState={state}\n onFilterStateChanged={onFilterStateChanged}\n onFilterRemoved={onFilterRemoved}\n renderInput={renderInput}\n />\n );\n })}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -48,7 +48,7 @@ function FilterListHeaderInner({
|
|
|
48
48
|
className: styles.resetButton,
|
|
49
49
|
onClick: onReset,
|
|
50
50
|
disabled: activeFilterCount === 0 && !hasVisibilityChanges
|
|
51
|
-
}, /*#__PURE__*/React.createElement(ResetIcon, null), " Reset"), onCollapsedChange != null && /*#__PURE__*/React.createElement(Button, {
|
|
51
|
+
}, /*#__PURE__*/React.createElement(ResetIcon, null), " Reset filters"), onCollapsedChange != null && /*#__PURE__*/React.createElement(Button, {
|
|
52
52
|
className: styles.collapseButton,
|
|
53
53
|
onClick: handleCollapseClick,
|
|
54
54
|
"aria-expanded": !collapsed,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterListHeader.js","names":["Button","React","memo","useCallback","CollapseIcon","ResetIcon","styles","FilterListHeaderInner","title","titleIcon","collapsed","onCollapsedChange","showResetButton","onReset","showActiveFilterCount","activeFilterCount","hasVisibilityChanges","handleCollapseClick","createElement","className","header","titleContainer","activeCount","actions","resetButton","onClick","disabled","collapseButton","FilterListHeader"],"sources":["FilterListHeader.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport React, { memo, type ReactNode, useCallback } from \"react\";\nimport { CollapseIcon, ResetIcon } from \"./FilterIcons.js\";\nimport styles from \"./FilterListHeader.module.css\";\n\ninterface FilterListHeaderProps {\n title?: ReactNode;\n titleIcon?: ReactNode;\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n showResetButton?: boolean;\n onReset?: () => void;\n showActiveFilterCount?: boolean;\n activeFilterCount?: number;\n hasVisibilityChanges?: boolean;\n}\n\nfunction FilterListHeaderInner({\n title,\n titleIcon,\n collapsed = false,\n onCollapsedChange,\n showResetButton,\n onReset,\n showActiveFilterCount,\n activeFilterCount = 0,\n hasVisibilityChanges = false,\n}: FilterListHeaderProps): React.ReactElement {\n const showCollapseButton = onCollapsedChange != null;\n\n const handleCollapseClick = useCallback(() => {\n onCollapsedChange?.(!collapsed);\n }, [onCollapsedChange, collapsed]);\n\n return (\n <div className={styles.header}>\n <div className={styles.titleContainer}>\n {titleIcon && (\n <span className={styles.titleIcon}>\n {titleIcon}\n </span>\n )}\n {title && (\n <span className={styles.title}>\n {title}\n </span>\n )}\n {showActiveFilterCount && activeFilterCount > 0 && (\n <span className={styles.activeCount}>\n ({activeFilterCount})\n </span>\n )}\n </div>\n\n <div className={styles.actions}>\n {showResetButton && (\n <Button\n className={styles.resetButton}\n onClick={onReset}\n disabled={activeFilterCount === 0 && !hasVisibilityChanges}\n >\n <ResetIcon /> Reset\n </Button>\n )}\n\n {showCollapseButton && (\n <Button\n className={styles.collapseButton}\n onClick={handleCollapseClick}\n aria-expanded={!collapsed}\n aria-label={collapsed ? \"Expand filters\" : \"Collapse filters\"}\n >\n <CollapseIcon />\n </Button>\n )}\n </div>\n </div>\n );\n}\n\nexport const FilterListHeader: React.MemoExoticComponent<\n typeof FilterListHeaderInner\n> = memo(FilterListHeaderInner);\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,uBAAuB;AAC9C,OAAOC,KAAK,IAAIC,IAAI,EAAkBC,WAAW,QAAQ,OAAO;AAChE,SAASC,YAAY,EAAEC,SAAS,QAAQ,kBAAkB;AAC1D,OAAOC,MAAM,MAAM,+BAA+B;AAclD,SAASC,qBAAqBA,CAAC;EAC7BC,KAAK;EACLC,SAAS;EACTC,SAAS,GAAG,KAAK;EACjBC,iBAAiB;EACjBC,eAAe;EACfC,OAAO;EACPC,qBAAqB;EACrBC,iBAAiB,GAAG,CAAC;EACrBC,oBAAoB,GAAG;AACF,CAAC,EAAsB;EAG5C,MAAMC,mBAAmB,GAAGd,WAAW,CAAC,MAAM;IAC5CQ,iBAAiB,GAAG,CAACD,SAAS,CAAC;EACjC,CAAC,EAAE,CAACC,iBAAiB,EAAED,SAAS,CAAC,CAAC;EAElC,oBACET,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAEb,MAAM,CAACc;EAAO,gBAC5BnB,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAEb,MAAM,CAACe;EAAe,GACnCZ,SAAS,iBACRR,KAAA,CAAAiB,aAAA;IAAMC,SAAS,EAAEb,MAAM,CAACG;EAAU,GAC/BA,SACG,CACP,EACAD,KAAK,iBACJP,KAAA,CAAAiB,aAAA;IAAMC,SAAS,EAAEb,MAAM,CAACE;EAAM,GAC3BA,KACG,CACP,EACAM,qBAAqB,IAAIC,iBAAiB,GAAG,CAAC,iBAC7Cd,KAAA,CAAAiB,aAAA;IAAMC,SAAS,EAAEb,MAAM,CAACgB;EAAY,GAAC,GAClC,EAACP,iBAAiB,EAAC,GAChB,CAEL,CAAC,eAENd,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAEb,MAAM,CAACiB;EAAQ,GAC5BX,eAAe,iBACdX,KAAA,CAAAiB,aAAA,CAAClB,MAAM;IACLmB,SAAS,EAAEb,MAAM,CAACkB,WAAY;IAC9BC,OAAO,EAAEZ,OAAQ;IACjBa,QAAQ,EAAEX,iBAAiB,KAAK,CAAC,IAAI,CAACC;EAAqB,gBAE3Df,KAAA,CAAAiB,aAAA,CAACb,SAAS,MAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"FilterListHeader.js","names":["Button","React","memo","useCallback","CollapseIcon","ResetIcon","styles","FilterListHeaderInner","title","titleIcon","collapsed","onCollapsedChange","showResetButton","onReset","showActiveFilterCount","activeFilterCount","hasVisibilityChanges","handleCollapseClick","createElement","className","header","titleContainer","activeCount","actions","resetButton","onClick","disabled","collapseButton","FilterListHeader"],"sources":["FilterListHeader.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport React, { memo, type ReactNode, useCallback } from \"react\";\nimport { CollapseIcon, ResetIcon } from \"./FilterIcons.js\";\nimport styles from \"./FilterListHeader.module.css\";\n\ninterface FilterListHeaderProps {\n title?: ReactNode;\n titleIcon?: ReactNode;\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n showResetButton?: boolean;\n onReset?: () => void;\n showActiveFilterCount?: boolean;\n activeFilterCount?: number;\n hasVisibilityChanges?: boolean;\n}\n\nfunction FilterListHeaderInner({\n title,\n titleIcon,\n collapsed = false,\n onCollapsedChange,\n showResetButton,\n onReset,\n showActiveFilterCount,\n activeFilterCount = 0,\n hasVisibilityChanges = false,\n}: FilterListHeaderProps): React.ReactElement {\n const showCollapseButton = onCollapsedChange != null;\n\n const handleCollapseClick = useCallback(() => {\n onCollapsedChange?.(!collapsed);\n }, [onCollapsedChange, collapsed]);\n\n return (\n <div className={styles.header}>\n <div className={styles.titleContainer}>\n {titleIcon && (\n <span className={styles.titleIcon}>\n {titleIcon}\n </span>\n )}\n {title && (\n <span className={styles.title}>\n {title}\n </span>\n )}\n {showActiveFilterCount && activeFilterCount > 0 && (\n <span className={styles.activeCount}>\n ({activeFilterCount})\n </span>\n )}\n </div>\n\n <div className={styles.actions}>\n {showResetButton && (\n <Button\n className={styles.resetButton}\n onClick={onReset}\n disabled={activeFilterCount === 0 && !hasVisibilityChanges}\n >\n <ResetIcon /> Reset filters\n </Button>\n )}\n\n {showCollapseButton && (\n <Button\n className={styles.collapseButton}\n onClick={handleCollapseClick}\n aria-expanded={!collapsed}\n aria-label={collapsed ? \"Expand filters\" : \"Collapse filters\"}\n >\n <CollapseIcon />\n </Button>\n )}\n </div>\n </div>\n );\n}\n\nexport const FilterListHeader: React.MemoExoticComponent<\n typeof FilterListHeaderInner\n> = memo(FilterListHeaderInner);\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,uBAAuB;AAC9C,OAAOC,KAAK,IAAIC,IAAI,EAAkBC,WAAW,QAAQ,OAAO;AAChE,SAASC,YAAY,EAAEC,SAAS,QAAQ,kBAAkB;AAC1D,OAAOC,MAAM,MAAM,+BAA+B;AAclD,SAASC,qBAAqBA,CAAC;EAC7BC,KAAK;EACLC,SAAS;EACTC,SAAS,GAAG,KAAK;EACjBC,iBAAiB;EACjBC,eAAe;EACfC,OAAO;EACPC,qBAAqB;EACrBC,iBAAiB,GAAG,CAAC;EACrBC,oBAAoB,GAAG;AACF,CAAC,EAAsB;EAG5C,MAAMC,mBAAmB,GAAGd,WAAW,CAAC,MAAM;IAC5CQ,iBAAiB,GAAG,CAACD,SAAS,CAAC;EACjC,CAAC,EAAE,CAACC,iBAAiB,EAAED,SAAS,CAAC,CAAC;EAElC,oBACET,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAEb,MAAM,CAACc;EAAO,gBAC5BnB,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAEb,MAAM,CAACe;EAAe,GACnCZ,SAAS,iBACRR,KAAA,CAAAiB,aAAA;IAAMC,SAAS,EAAEb,MAAM,CAACG;EAAU,GAC/BA,SACG,CACP,EACAD,KAAK,iBACJP,KAAA,CAAAiB,aAAA;IAAMC,SAAS,EAAEb,MAAM,CAACE;EAAM,GAC3BA,KACG,CACP,EACAM,qBAAqB,IAAIC,iBAAiB,GAAG,CAAC,iBAC7Cd,KAAA,CAAAiB,aAAA;IAAMC,SAAS,EAAEb,MAAM,CAACgB;EAAY,GAAC,GAClC,EAACP,iBAAiB,EAAC,GAChB,CAEL,CAAC,eAENd,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAEb,MAAM,CAACiB;EAAQ,GAC5BX,eAAe,iBACdX,KAAA,CAAAiB,aAAA,CAAClB,MAAM;IACLmB,SAAS,EAAEb,MAAM,CAACkB,WAAY;IAC9BC,OAAO,EAAEZ,OAAQ;IACjBa,QAAQ,EAAEX,iBAAiB,KAAK,CAAC,IAAI,CAACC;EAAqB,gBAE3Df,KAAA,CAAAiB,aAAA,CAACb,SAAS,MAAE,CAAC,kBACP,CACT,EAnCoBM,iBAAiB,IAAI,IAAI,iBAsC5CV,KAAA,CAAAiB,aAAA,CAAClB,MAAM;IACLmB,SAAS,EAAEb,MAAM,CAACqB,cAAe;IACjCF,OAAO,EAAER,mBAAoB;IAC7B,iBAAe,CAACP,SAAU;IAC1B,cAAYA,SAAS,GAAG,gBAAgB,GAAG;EAAmB,gBAE9DT,KAAA,CAAAiB,aAAA,CAACd,YAAY,MAAE,CACT,CAEP,CACF,CAAC;AAEV;AAEA,OAAO,MAAMwB,gBAEZ,gBAAG1B,IAAI,CAACK,qBAAqB,CAAC","ignoreList":[]}
|
|
@@ -18,14 +18,18 @@
|
|
|
18
18
|
display: flex;
|
|
19
19
|
align-items: center;
|
|
20
20
|
justify-content: space-between;
|
|
21
|
-
padding
|
|
21
|
+
padding: var(--osdk-filter-header-padding);
|
|
22
|
+
gap: var(--osdk-filter-header-gap);
|
|
22
23
|
border-bottom: var(--osdk-filter-header-border-bottom);
|
|
24
|
+
flex-shrink: 0;
|
|
23
25
|
}
|
|
24
26
|
|
|
25
27
|
.titleContainer {
|
|
26
28
|
display: flex;
|
|
27
29
|
align-items: center;
|
|
28
30
|
gap: var(--osdk-filter-header-titleContainer-gap);
|
|
31
|
+
flex: 1;
|
|
32
|
+
min-width: 0;
|
|
29
33
|
}
|
|
30
34
|
|
|
31
35
|
.title {
|
|
@@ -97,10 +101,10 @@
|
|
|
97
101
|
font-size: var(--osdk-filter-header-reset-font-size);
|
|
98
102
|
color: var(--osdk-filter-header-reset-color);
|
|
99
103
|
background: var(--osdk-filter-header-button-bg);
|
|
100
|
-
border:
|
|
104
|
+
border: var(--osdk-filter-header-reset-border);
|
|
101
105
|
cursor: pointer;
|
|
102
106
|
padding: var(--osdk-filter-header-reset-padding);
|
|
103
|
-
border-radius: var(--osdk-filter-header-
|
|
107
|
+
border-radius: var(--osdk-filter-header-reset-border-radius);
|
|
104
108
|
transition: background-color var(--osdk-filter-header-button-transition);
|
|
105
109
|
|
|
106
110
|
&:hover:not(:disabled) {
|
|
@@ -109,6 +113,7 @@
|
|
|
109
113
|
|
|
110
114
|
&:disabled {
|
|
111
115
|
color: var(--osdk-filter-header-reset-color-disabled);
|
|
116
|
+
border: var(--osdk-filter-header-reset-border-disabled);
|
|
112
117
|
cursor: not-allowed;
|
|
113
118
|
}
|
|
114
119
|
|