@osdk/react-components 0.19.0 → 0.19.1-beta.0
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 +39 -0
- package/build/browser/action-form/FormFieldApi.js.map +1 -1
- package/build/browser/action-form/utils/getDefaultFieldDefinitions.js +1 -0
- package/build/browser/action-form/utils/getDefaultFieldDefinitions.js.map +1 -1
- package/build/browser/filter-list/FilterInput.js +7 -0
- package/build/browser/filter-list/FilterInput.js.map +1 -1
- package/build/browser/filter-list/FilterList.js +8 -2
- 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/__tests__/aggregationMocks.js +50 -0
- package/build/browser/filter-list/__tests__/aggregationMocks.js.map +1 -0
- package/build/browser/filter-list/base/BaseFilterList.js.map +1 -1
- package/build/browser/filter-list/base/BaseFilterListApi.js.map +1 -1
- package/build/browser/filter-list/base/FilterInputExcludeRow.js +12 -16
- package/build/browser/filter-list/base/FilterInputExcludeRow.js.map +1 -1
- package/build/browser/filter-list/base/FilterListContent.js +42 -40
- package/build/browser/filter-list/base/FilterListContent.js.map +1 -1
- package/build/browser/filter-list/base/FilterListItem.js +8 -36
- package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
- package/build/browser/filter-list/base/SortableFilterListItem.js +3 -1
- package/build/browser/filter-list/base/SortableFilterListItem.js.map +1 -1
- package/build/browser/filter-list/base/inputs/ListogramInput.js +3 -1
- package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/ListogramInput.module.css +6 -0
- package/build/browser/filter-list/base/inputs/MultiDateInput.js +2 -1
- package/build/browser/filter-list/base/inputs/MultiDateInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/MultiSelectInput.js +7 -3
- package/build/browser/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css +6 -0
- package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css.js +1 -0
- package/build/browser/filter-list/base/inputs/SingleDateInput.js +4 -2
- package/build/browser/filter-list/base/inputs/SingleDateInput.js.map +1 -1
- package/build/browser/filter-list/hooks/useDualScopeAggregation.js +70 -0
- package/build/browser/filter-list/hooks/useDualScopeAggregation.js.map +1 -0
- package/build/browser/filter-list/hooks/useFilterListState.js +35 -17
- package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
- package/build/browser/filter-list/hooks/useFilterPropertyAggregation.js +37 -0
- package/build/browser/filter-list/hooks/useFilterPropertyAggregation.js.map +1 -0
- package/build/browser/filter-list/hooks/usePropertyAggregation.js +7 -6
- package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -1
- package/build/browser/filter-list/inputs/LinkedPropertyInput.js +45 -22
- package/build/browser/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
- package/build/browser/filter-list/inputs/ListogramFilterInput.js +9 -7
- package/build/browser/filter-list/inputs/ListogramFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/MultiSelectFilterInput.js +8 -6
- package/build/browser/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/PropertyFilterInput.js +10 -1
- package/build/browser/filter-list/inputs/PropertyFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/SingleDateFilterInput.js +4 -2
- package/build/browser/filter-list/inputs/SingleDateFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/SingleSelectFilterInput.js +9 -6
- package/build/browser/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/StaticValuesFilterInput.js.map +1 -1
- package/build/browser/filter-list/types/CustomRendererTypes.js.map +1 -1
- package/build/browser/filter-list/types/KeywordSearchTypes.js.map +1 -1
- package/build/browser/filter-list/types/LinkedFilterTypes.js +42 -1
- package/build/browser/filter-list/types/LinkedFilterTypes.js.map +1 -1
- package/build/browser/filter-list/types/StaticValuesTypes.js.map +1 -1
- package/build/browser/filter-list/utils/filterStateToWhereClause.js +58 -22
- package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -1
- package/build/browser/filter-list/utils/filterValues.js +148 -2
- package/build/browser/filter-list/utils/filterValues.js.map +1 -1
- package/build/browser/filter-list/utils/narrowObjectSet.js +48 -0
- package/build/browser/filter-list/utils/narrowObjectSet.js.map +1 -0
- package/build/browser/public/experimental/filter-list.js +1 -0
- package/build/browser/public/experimental/filter-list.js.map +1 -1
- package/build/browser/styles.css +17 -0
- package/build/browser/tokens/component-tokens/filter-list.css +5 -0
- package/build/browser/util/UserAgent.js +1 -1
- package/build/browser/util/UserAgent.js.map +1 -1
- package/build/cjs/{chunk-6XRF4IAL.cjs → chunk-2AK24MNP.cjs} +4 -4
- package/build/cjs/{chunk-6XRF4IAL.cjs.map → chunk-2AK24MNP.cjs.map} +1 -1
- package/build/cjs/chunk-3DIODTDY.cjs +11 -0
- package/build/cjs/{chunk-774FGQHO.cjs.map → chunk-3DIODTDY.cjs.map} +1 -1
- package/build/cjs/{chunk-P7R4RWMU.cjs → chunk-3RKGMRPD.cjs} +4 -4
- package/build/cjs/{chunk-P7R4RWMU.cjs.map → chunk-3RKGMRPD.cjs.map} +1 -1
- package/build/cjs/chunk-ACIIYYEL.cjs +11 -0
- package/build/cjs/{chunk-62DGPKOC.cjs.map → chunk-ACIIYYEL.cjs.map} +1 -1
- package/build/cjs/{chunk-3OUALM3K.cjs → chunk-COLGW56W.cjs} +4 -4
- package/build/cjs/{chunk-3OUALM3K.cjs.map → chunk-COLGW56W.cjs.map} +1 -1
- package/build/cjs/{chunk-DKPG7O4B.cjs → chunk-GTFPQHZL.cjs} +5 -4
- package/build/cjs/chunk-GTFPQHZL.cjs.map +1 -0
- package/build/cjs/{chunk-L6QDNMMG.cjs → chunk-K3IJA7WZ.cjs} +4 -4
- package/build/cjs/{chunk-L6QDNMMG.cjs.map → chunk-K3IJA7WZ.cjs.map} +1 -1
- package/build/cjs/chunk-MAQSZDRT.cjs +11 -0
- package/build/cjs/{chunk-S25XCKOA.cjs.map → chunk-MAQSZDRT.cjs.map} +1 -1
- package/build/cjs/chunk-MHMRIDIM.cjs +11 -0
- package/build/cjs/{chunk-SLHKSOQC.cjs.map → chunk-MHMRIDIM.cjs.map} +1 -1
- package/build/cjs/{chunk-BXCHISUQ.cjs → chunk-NOONKE5X.cjs} +3 -3
- package/build/cjs/{chunk-BXCHISUQ.cjs.map → chunk-NOONKE5X.cjs.map} +1 -1
- package/build/cjs/chunk-OEESYGT4.cjs +11 -0
- package/build/cjs/{chunk-3Y4W37E3.cjs.map → chunk-OEESYGT4.cjs.map} +1 -1
- package/build/cjs/{chunk-QOI2FQSL.cjs → chunk-PUZZZTC7.cjs} +372 -157
- package/build/cjs/chunk-PUZZZTC7.cjs.map +1 -0
- package/build/cjs/{chunk-FIAYYZHY.cjs → chunk-QWKUCBXE.cjs} +4 -4
- package/build/cjs/{chunk-FIAYYZHY.cjs.map → chunk-QWKUCBXE.cjs.map} +1 -1
- package/build/cjs/public/experimental/action-form.cjs +4 -4
- package/build/cjs/public/experimental/action-form.d.cts +1 -1
- package/build/cjs/public/experimental/document-viewer.cjs +4 -4
- package/build/cjs/public/experimental/email-viewer.cjs +3 -3
- package/build/cjs/public/experimental/excel-viewer.cjs +3 -3
- package/build/cjs/public/experimental/filter-list.cjs +17 -13
- package/build/cjs/public/experimental/filter-list.css +8 -0
- package/build/cjs/public/experimental/filter-list.css.map +1 -1
- package/build/cjs/public/experimental/filter-list.d.cts +95 -25
- package/build/cjs/public/experimental/image-viewer.cjs +3 -3
- package/build/cjs/public/experimental/markdown-renderer.cjs +3 -3
- package/build/cjs/public/experimental/object-table.cjs +8 -8
- package/build/cjs/public/experimental/pdf-viewer.cjs +7 -7
- package/build/cjs/public/experimental/tiff-renderer.cjs +3 -3
- package/build/cjs/public/experimental/video-viewer.cjs +3 -3
- package/build/cjs/public/experimental/xml-viewer.cjs +3 -3
- package/build/cjs/public/experimental.cjs +50 -46
- package/build/cjs/public/experimental.css +8 -0
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +1 -1
- package/build/esm/action-form/FormFieldApi.js.map +1 -1
- package/build/esm/action-form/utils/getDefaultFieldDefinitions.js +1 -0
- package/build/esm/action-form/utils/getDefaultFieldDefinitions.js.map +1 -1
- package/build/esm/filter-list/FilterInput.js +7 -0
- package/build/esm/filter-list/FilterInput.js.map +1 -1
- package/build/esm/filter-list/FilterList.js +8 -2
- 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/__tests__/aggregationMocks.js +50 -0
- package/build/esm/filter-list/__tests__/aggregationMocks.js.map +1 -0
- package/build/esm/filter-list/base/BaseFilterList.js.map +1 -1
- package/build/esm/filter-list/base/BaseFilterListApi.js.map +1 -1
- package/build/esm/filter-list/base/FilterInputExcludeRow.js +12 -16
- package/build/esm/filter-list/base/FilterInputExcludeRow.js.map +1 -1
- package/build/esm/filter-list/base/FilterListContent.js +42 -40
- package/build/esm/filter-list/base/FilterListContent.js.map +1 -1
- package/build/esm/filter-list/base/FilterListItem.js +8 -36
- package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
- package/build/esm/filter-list/base/SortableFilterListItem.js +3 -1
- package/build/esm/filter-list/base/SortableFilterListItem.js.map +1 -1
- package/build/esm/filter-list/base/inputs/ListogramInput.js +3 -1
- package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/ListogramInput.module.css +6 -0
- package/build/esm/filter-list/base/inputs/MultiDateInput.js +2 -1
- package/build/esm/filter-list/base/inputs/MultiDateInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/MultiSelectInput.js +7 -3
- package/build/esm/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/MultiSelectInput.module.css +6 -0
- package/build/esm/filter-list/base/inputs/SingleDateInput.js +4 -2
- package/build/esm/filter-list/base/inputs/SingleDateInput.js.map +1 -1
- package/build/esm/filter-list/hooks/useDualScopeAggregation.js +70 -0
- package/build/esm/filter-list/hooks/useDualScopeAggregation.js.map +1 -0
- package/build/esm/filter-list/hooks/useFilterListState.js +35 -17
- package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
- package/build/esm/filter-list/hooks/useFilterPropertyAggregation.js +37 -0
- package/build/esm/filter-list/hooks/useFilterPropertyAggregation.js.map +1 -0
- package/build/esm/filter-list/hooks/usePropertyAggregation.js +7 -6
- package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -1
- package/build/esm/filter-list/inputs/LinkedPropertyInput.js +45 -22
- package/build/esm/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
- package/build/esm/filter-list/inputs/ListogramFilterInput.js +9 -7
- package/build/esm/filter-list/inputs/ListogramFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/MultiSelectFilterInput.js +8 -6
- package/build/esm/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/PropertyFilterInput.js +10 -1
- package/build/esm/filter-list/inputs/PropertyFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/SingleDateFilterInput.js +4 -2
- package/build/esm/filter-list/inputs/SingleDateFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/SingleSelectFilterInput.js +9 -6
- package/build/esm/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/StaticValuesFilterInput.js.map +1 -1
- package/build/esm/filter-list/types/CustomRendererTypes.js.map +1 -1
- package/build/esm/filter-list/types/KeywordSearchTypes.js.map +1 -1
- package/build/esm/filter-list/types/LinkedFilterTypes.js +42 -1
- package/build/esm/filter-list/types/LinkedFilterTypes.js.map +1 -1
- package/build/esm/filter-list/types/StaticValuesTypes.js.map +1 -1
- package/build/esm/filter-list/utils/filterStateToWhereClause.js +58 -22
- package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -1
- package/build/esm/filter-list/utils/filterValues.js +148 -2
- package/build/esm/filter-list/utils/filterValues.js.map +1 -1
- package/build/esm/filter-list/utils/narrowObjectSet.js +48 -0
- package/build/esm/filter-list/utils/narrowObjectSet.js.map +1 -0
- package/build/esm/public/experimental/filter-list.js +1 -0
- package/build/esm/public/experimental/filter-list.js.map +1 -1
- package/build/esm/tokens/component-tokens/filter-list.css +5 -0
- package/build/esm/util/UserAgent.js +1 -1
- package/build/esm/util/UserAgent.js.map +1 -1
- package/build/types/action-form/FormFieldApi.d.ts +1 -1
- package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
- package/build/types/filter-list/FilterInput.d.ts +6 -1
- package/build/types/filter-list/FilterInput.d.ts.map +1 -1
- package/build/types/filter-list/FilterList.d.ts.map +1 -1
- package/build/types/filter-list/FilterListApi.d.ts +30 -15
- package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/FilterListItemApi.d.ts +15 -1
- package/build/types/filter-list/FilterListItemApi.d.ts.map +1 -1
- package/build/types/filter-list/__tests__/aggregationMocks.d.ts +11 -0
- package/build/types/filter-list/__tests__/aggregationMocks.d.ts.map +1 -0
- package/build/types/filter-list/base/BaseFilterList.d.ts +2 -1
- package/build/types/filter-list/base/BaseFilterList.d.ts.map +1 -1
- package/build/types/filter-list/base/BaseFilterListApi.d.ts +2 -2
- package/build/types/filter-list/base/BaseFilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterInputExcludeRow.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterListContent.d.ts +3 -3
- package/build/types/filter-list/base/FilterListContent.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterListItem.d.ts +2 -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.map +1 -1
- package/build/types/filter-list/base/inputs/MultiDateInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/SingleDateInput.d.ts +2 -0
- package/build/types/filter-list/base/inputs/SingleDateInput.d.ts.map +1 -1
- package/build/types/filter-list/hooks/useDualScopeAggregation.d.ts +32 -0
- package/build/types/filter-list/hooks/useDualScopeAggregation.d.ts.map +1 -0
- package/build/types/filter-list/hooks/useFilterListState.d.ts +7 -0
- package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -1
- package/build/types/filter-list/hooks/useFilterPropertyAggregation.d.ts +13 -0
- package/build/types/filter-list/hooks/useFilterPropertyAggregation.d.ts.map +1 -0
- package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts +6 -4
- package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/ListogramFilterInput.d.ts +4 -1
- package/build/types/filter-list/inputs/ListogramFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts +4 -1
- package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/PropertyFilterInput.d.ts +4 -1
- package/build/types/filter-list/inputs/PropertyFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/SingleDateFilterInput.d.ts +7 -1
- package/build/types/filter-list/inputs/SingleDateFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts +4 -1
- package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/StaticValuesFilterInput.d.ts +1 -1
- package/build/types/filter-list/types/CustomRendererTypes.d.ts +2 -2
- package/build/types/filter-list/types/CustomRendererTypes.d.ts.map +1 -1
- package/build/types/filter-list/types/KeywordSearchTypes.d.ts +2 -2
- package/build/types/filter-list/types/KeywordSearchTypes.d.ts.map +1 -1
- package/build/types/filter-list/types/LinkedFilterTypes.d.ts +34 -4
- package/build/types/filter-list/types/LinkedFilterTypes.d.ts.map +1 -1
- package/build/types/filter-list/types/StaticValuesTypes.d.ts +2 -2
- package/build/types/filter-list/types/StaticValuesTypes.d.ts.map +1 -1
- package/build/types/filter-list/utils/filterStateToWhereClause.d.ts +24 -1
- package/build/types/filter-list/utils/filterStateToWhereClause.d.ts.map +1 -1
- package/build/types/filter-list/utils/filterValues.d.ts +26 -0
- package/build/types/filter-list/utils/filterValues.d.ts.map +1 -1
- package/build/types/filter-list/utils/narrowObjectSet.d.ts +7 -0
- package/build/types/filter-list/utils/narrowObjectSet.d.ts.map +1 -0
- package/build/types/public/experimental/filter-list.d.ts +3 -1
- package/build/types/public/experimental/filter-list.d.ts.map +1 -1
- package/docs/CSSVariables.md +78 -17
- package/docs/FilterList.md +52 -6
- package/package.json +9 -9
- package/build/cjs/chunk-3Y4W37E3.cjs +0 -11
- package/build/cjs/chunk-62DGPKOC.cjs +0 -11
- package/build/cjs/chunk-774FGQHO.cjs +0 -11
- package/build/cjs/chunk-DKPG7O4B.cjs.map +0 -1
- package/build/cjs/chunk-QOI2FQSL.cjs.map +0 -1
- package/build/cjs/chunk-S25XCKOA.cjs +0 -11
- package/build/cjs/chunk-SLHKSOQC.cjs +0 -11
|
@@ -16,16 +16,10 @@
|
|
|
16
16
|
|
|
17
17
|
import { Button } from "@base-ui/react/button";
|
|
18
18
|
import classnames from "classnames";
|
|
19
|
-
import React, { memo, useCallback
|
|
20
|
-
import { supportsExcluding } from "../utils/filterValues.js";
|
|
19
|
+
import React, { memo, useCallback } from "react";
|
|
20
|
+
import { getEffectiveFilterState, getSelectedCount, supportsExcluding, toggleIsExcluding } from "../utils/filterValues.js";
|
|
21
21
|
import { ExcludeDropdown } from "./ExcludeDropdown.js";
|
|
22
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
|
-
}
|
|
29
23
|
function FilterInputExcludeRowInner({
|
|
30
24
|
excludeRowOpen,
|
|
31
25
|
filterState,
|
|
@@ -35,16 +29,18 @@ function FilterInputExcludeRowInner({
|
|
|
35
29
|
children
|
|
36
30
|
}) {
|
|
37
31
|
const handleToggleExclude = useCallback(() => {
|
|
38
|
-
if (filterState) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
32
|
+
if (filterState == null) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const next = toggleIsExcluding(filterState);
|
|
36
|
+
if (next != null) {
|
|
37
|
+
onFilterStateChanged(next);
|
|
43
38
|
}
|
|
44
39
|
}, [filterState, onFilterStateChanged]);
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
|
|
40
|
+
const effectiveState = getEffectiveFilterState(filterState);
|
|
41
|
+
const isExcluding = effectiveState?.isExcluding ?? false;
|
|
42
|
+
const selectedCount = getSelectedCount(effectiveState);
|
|
43
|
+
if (!supportsExcluding(effectiveState)) {
|
|
48
44
|
return /*#__PURE__*/React.createElement(React.Fragment, null, children);
|
|
49
45
|
}
|
|
50
46
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterInputExcludeRow.js","names":["Button","classnames","React","memo","useCallback","
|
|
1
|
+
{"version":3,"file":"FilterInputExcludeRow.js","names":["Button","classnames","React","memo","useCallback","getEffectiveFilterState","getSelectedCount","supportsExcluding","toggleIsExcluding","ExcludeDropdown","styles","FilterInputExcludeRowInner","excludeRowOpen","filterState","onFilterStateChanged","totalValueCount","onClearAll","children","handleToggleExclude","next","effectiveState","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 } from \"react\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport {\n getEffectiveFilterState,\n getSelectedCount,\n supportsExcluding,\n toggleIsExcluding,\n} from \"../utils/filterValues.js\";\nimport { ExcludeDropdown } from \"./ExcludeDropdown.js\";\nimport styles from \"./FilterListItem.module.css\";\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 == null) {\n return;\n }\n const next = toggleIsExcluding(filterState);\n if (next != null) {\n onFilterStateChanged(next);\n }\n }, [filterState, onFilterStateChanged]);\n\n const effectiveState = getEffectiveFilterState(filterState);\n const isExcluding = effectiveState?.isExcluding ?? false;\n const isOpen = excludeRowOpen ?? false;\n const selectedCount = getSelectedCount(effectiveState);\n\n if (!supportsExcluding(effectiveState)) {\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,QAAQ,OAAO;AAEhD,SACEC,uBAAuB,EACvBC,gBAAgB,EAChBC,iBAAiB,EACjBC,iBAAiB,QACZ,0BAA0B;AACjC,SAASC,eAAe,QAAQ,sBAAsB;AACtD,OAAOC,MAAM,MAAM,6BAA6B;AAWhD,SAASC,0BAA0BA,CAAC;EAClCC,cAAc;EACdC,WAAW;EACXC,oBAAoB;EACpBC,eAAe;EACfC,UAAU;EACVC;AAC0B,CAAC,EAAsB;EACjD,MAAMC,mBAAmB,GAAGd,WAAW,CAAC,MAAM;IAC5C,IAAIS,WAAW,IAAI,IAAI,EAAE;MACvB;IACF;IACA,MAAMM,IAAI,GAAGX,iBAAiB,CAACK,WAAW,CAAC;IAC3C,IAAIM,IAAI,IAAI,IAAI,EAAE;MAChBL,oBAAoB,CAACK,IAAI,CAAC;IAC5B;EACF,CAAC,EAAE,CAACN,WAAW,EAAEC,oBAAoB,CAAC,CAAC;EAEvC,MAAMM,cAAc,GAAGf,uBAAuB,CAACQ,WAAW,CAAC;EAC3D,MAAMQ,WAAW,GAAGD,cAAc,EAAEC,WAAW,IAAI,KAAK;EAExD,MAAMC,aAAa,GAAGhB,gBAAgB,CAACc,cAAc,CAAC;EAEtD,IAAI,CAACb,iBAAiB,CAACa,cAAc,CAAC,EAAE;IACtC,oBAAOlB,KAAA,CAAAqB,aAAA,CAAArB,KAAA,CAAAsB,QAAA,QAAGP,QAAW,CAAC;EACxB;EAEA,oBACEf,KAAA,CAAAqB,aAAA,CAAArB,KAAA,CAAAsB,QAAA,qBACEtB,KAAA,CAAAqB,aAAA;IACE,oBAAkB,IAAK;IACvBE,SAAS,EAAExB,UAAU,CAACS,MAAM,CAACgB,UAAU,EAAE;MACvC,CAAChB,MAAM,CAACiB,iBAAiB,GAZlBf,cAAc,IAAI;IAa3B,CAAC;EAAE,gBAEHV,KAAA,CAAAqB,aAAA,CAACd,eAAe;IACdY,WAAW,EAAEA,WAAY;IACzBO,eAAe,EAAEV;EAAoB,CACtC,CAAC,EACDH,eAAe,IAAI,IAAI,IAAIA,eAAe,GAAG,CAAC,iBAC7Cb,KAAA,CAAAqB,aAAA;IACEE,SAAS,EAAEf,MAAM,CAACmB,iBAAkB;IACpCC,KAAK,EAAC;EAAoC,GAEzCR,aAAa,CAACS,cAAc,CAAC,CAAC,EAAC,KAAG,EAAC,GAAG,EACtChB,eAAe,CAACgB,cAAc,CAAC,CAAC,EAAC,SAC9B,CACP,EACAf,UAAU,IAAIM,aAAa,GAAG,CAAC,iBAC9BpB,KAAA,CAAAqB,aAAA,CAACvB,MAAM;IACLyB,SAAS,EAAEf,MAAM,CAACsB,cAAe;IACjCC,OAAO,EAAEjB;EAAW,GACrB,WAEO,CAEP,CAAC,EACLC,QACD,CAAC;AAEP;AAEA,OAAO,MAAMiB,qBAEZ,gBAAG/B,IAAI,CAACQ,0BAA0B,CAAC","ignoreList":[]}
|
|
@@ -86,46 +86,45 @@ export function FilterListContent({
|
|
|
86
86
|
const handleDragCancel = useCallback(() => {
|
|
87
87
|
setActiveId(null);
|
|
88
88
|
}, []);
|
|
89
|
-
const announcements = useMemo(() =>
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
onDragEnd({
|
|
108
|
-
active,
|
|
109
|
-
over
|
|
110
|
-
}) {
|
|
111
|
-
const idx = sortableIds.indexOf(String(active.id));
|
|
112
|
-
const def = idx >= 0 && filterDefinitions ? filterDefinitions[idx] : undefined;
|
|
113
|
-
const label = def ? getFilterLabel(def) : "filter";
|
|
114
|
-
if (over && active.id !== over.id) {
|
|
89
|
+
const announcements = useMemo(() => {
|
|
90
|
+
const labelForId = id => {
|
|
91
|
+
const idx = sortableIds.indexOf(String(id));
|
|
92
|
+
const def = idx >= 0 ? filterDefinitions?.[idx] : undefined;
|
|
93
|
+
return def ? getFilterLabel(def) : "filter";
|
|
94
|
+
};
|
|
95
|
+
return {
|
|
96
|
+
onDragStart({
|
|
97
|
+
active
|
|
98
|
+
}) {
|
|
99
|
+
return `Picked up ${labelForId(active.id)} filter`;
|
|
100
|
+
},
|
|
101
|
+
onDragOver({
|
|
102
|
+
over
|
|
103
|
+
}) {
|
|
104
|
+
if (!over) {
|
|
105
|
+
return "Not over a droppable area";
|
|
106
|
+
}
|
|
115
107
|
const overIdx = sortableIds.indexOf(String(over.id));
|
|
116
|
-
return `
|
|
108
|
+
return `Moved to position ${overIdx + 1} of ${sortableIds.length}`;
|
|
109
|
+
},
|
|
110
|
+
onDragEnd({
|
|
111
|
+
active,
|
|
112
|
+
over
|
|
113
|
+
}) {
|
|
114
|
+
const label = labelForId(active.id);
|
|
115
|
+
if (over && active.id !== over.id) {
|
|
116
|
+
const overIdx = sortableIds.indexOf(String(over.id));
|
|
117
|
+
return `Dropped ${label} filter at position ${overIdx + 1}`;
|
|
118
|
+
}
|
|
119
|
+
return `Dropped ${label} filter back in its original position`;
|
|
120
|
+
},
|
|
121
|
+
onDragCancel({
|
|
122
|
+
active
|
|
123
|
+
}) {
|
|
124
|
+
return `Cancelled dragging ${labelForId(active.id)} filter`;
|
|
117
125
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
onDragCancel({
|
|
121
|
-
active
|
|
122
|
-
}) {
|
|
123
|
-
const idx = sortableIds.indexOf(String(active.id));
|
|
124
|
-
const def = idx >= 0 && filterDefinitions ? filterDefinitions[idx] : undefined;
|
|
125
|
-
const label = def ? getFilterLabel(def) : "filter";
|
|
126
|
-
return `Cancelled dragging ${label} filter`;
|
|
127
|
-
}
|
|
128
|
-
}), [filterDefinitions, sortableIds, getFilterLabel]);
|
|
126
|
+
};
|
|
127
|
+
}, [filterDefinitions, sortableIds, getFilterLabel]);
|
|
129
128
|
const accessibility = useMemo(() => ({
|
|
130
129
|
announcements
|
|
131
130
|
}), [announcements]);
|
|
@@ -165,7 +164,8 @@ export function FilterListContent({
|
|
|
165
164
|
filterState: state,
|
|
166
165
|
onFilterStateChanged: onFilterStateChanged,
|
|
167
166
|
onFilterRemoved: onFilterRemoved,
|
|
168
|
-
renderInput: renderInput
|
|
167
|
+
renderInput: renderInput,
|
|
168
|
+
searchField: definition.searchField
|
|
169
169
|
});
|
|
170
170
|
})), /*#__PURE__*/React.createElement(DragOverlay, {
|
|
171
171
|
dropAnimation: null,
|
|
@@ -178,6 +178,7 @@ export function FilterListContent({
|
|
|
178
178
|
onFilterStateChanged: onFilterStateChanged,
|
|
179
179
|
onFilterRemoved: onFilterRemoved,
|
|
180
180
|
renderInput: renderInput,
|
|
181
|
+
searchField: activeDefinition.searchField,
|
|
181
182
|
dragHandleAttributes: DRAG_OVERLAY_HANDLE_ATTRIBUTES
|
|
182
183
|
}))));
|
|
183
184
|
}
|
|
@@ -195,7 +196,8 @@ export function FilterListContent({
|
|
|
195
196
|
filterState: state,
|
|
196
197
|
onFilterStateChanged: onFilterStateChanged,
|
|
197
198
|
onFilterRemoved: onFilterRemoved,
|
|
198
|
-
renderInput: renderInput
|
|
199
|
+
renderInput: renderInput,
|
|
200
|
+
searchField: definition.searchField
|
|
199
201
|
});
|
|
200
202
|
}));
|
|
201
203
|
}
|
|
@@ -1 +1 @@
|
|
|
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","onOrderChange","renderInput","getFilterKey","getFilterLabel","enableSorting","className","style","activeId","setActiveId","sortableIds","map","def","pointerSensor","activationConstraint","keyboardSensor","coordinateGetter","sensors","activeIndex","indexOf","String","activeDefinition","activeFilterKey","handleDragStart","event","active","id","handleDragEnd","over","oldIndex","newIndex","next","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","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 onOrderChange?: (orderedKeys: 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 onOrderChange,\n renderInput,\n getFilterKey,\n getFilterLabel,\n enableSorting,\n className,\n style,\n}: FilterListContentProps<D>): React.ReactElement {\n const [activeId, setActiveId] = useState<UniqueIdentifier | null>(null);\n\n const sortableIds = useMemo(\n () =>\n enableSorting && filterDefinitions\n ? filterDefinitions.map((def) => getFilterKey(def))\n : [],\n [enableSorting, filterDefinitions, 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 && filterDefinitions\n ? filterDefinitions[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 const next = arrayMove(sortableIds, oldIndex, newIndex);\n onOrderChange?.(next);\n }\n },\n [sortableIds, onOrderChange],\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 && filterDefinitions\n ? filterDefinitions[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 && filterDefinitions\n ? filterDefinitions[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 && filterDefinitions\n ? filterDefinitions[idx]\n : undefined;\n const label = def ? getFilterLabel(def) : \"filter\";\n return `Cancelled dragging ${label} filter`;\n },\n }),\n [filterDefinitions, sortableIds, getFilterLabel],\n );\n\n const accessibility = useMemo(\n () => ({ announcements }),\n [announcements],\n );\n\n if (!filterDefinitions || filterDefinitions.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 {filterDefinitions.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 {filterDefinitions.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","onOrderChange","renderInput","getFilterKey","getFilterLabel","enableSorting","className","style","activeId","setActiveId","sortableIds","map","def","pointerSensor","activationConstraint","keyboardSensor","coordinateGetter","sensors","activeIndex","indexOf","String","activeDefinition","activeFilterKey","handleDragStart","event","active","id","handleDragEnd","over","oldIndex","newIndex","next","handleDragCancel","announcements","labelForId","idx","onDragStart","onDragOver","overIdx","length","onDragEnd","label","onDragCancel","accessibility","createElement","content","collisionDetection","modifiers","items","strategy","definition","index","filterKey","state","get","key","filterState","searchField","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 {\n FilterDefinitionControls,\n FilterState,\n} 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 extends FilterDefinitionControls> {\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 onOrderChange?: (orderedKeys: 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 extends FilterDefinitionControls>({\n filterDefinitions,\n filterStates,\n onFilterStateChanged,\n onFilterRemoved,\n onOrderChange,\n renderInput,\n getFilterKey,\n getFilterLabel,\n enableSorting,\n className,\n style,\n}: FilterListContentProps<D>): React.ReactElement {\n const [activeId, setActiveId] = useState<UniqueIdentifier | null>(null);\n\n const sortableIds = useMemo(\n () =>\n enableSorting && filterDefinitions\n ? filterDefinitions.map((def) => getFilterKey(def))\n : [],\n [enableSorting, filterDefinitions, 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 && filterDefinitions\n ? filterDefinitions[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 const next = arrayMove(sortableIds, oldIndex, newIndex);\n onOrderChange?.(next);\n }\n },\n [sortableIds, onOrderChange],\n );\n\n const handleDragCancel = useCallback(() => {\n setActiveId(null);\n }, []);\n\n const announcements = useMemo<Announcements>(() => {\n const labelForId = (id: UniqueIdentifier) => {\n const idx = sortableIds.indexOf(String(id));\n const def = idx >= 0 ? filterDefinitions?.[idx] : undefined;\n return def ? getFilterLabel(def) : \"filter\";\n };\n return {\n onDragStart({ active }) {\n return `Picked up ${labelForId(active.id)} 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 label = labelForId(active.id);\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 return `Cancelled dragging ${labelForId(active.id)} filter`;\n },\n };\n }, [filterDefinitions, sortableIds, getFilterLabel]);\n\n const accessibility = useMemo(\n () => ({ announcements }),\n [announcements],\n );\n\n if (!filterDefinitions || filterDefinitions.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 {filterDefinitions.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 searchField={definition.searchField}\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 searchField={activeDefinition.searchField}\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 {filterDefinitions.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 searchField={definition.searchField}\n />\n );\n })}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -18,43 +18,12 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
|
|
|
18
18
|
import { Button } from "@base-ui/react/button";
|
|
19
19
|
import { Input } from "@base-ui/react/input";
|
|
20
20
|
import classnames from "classnames";
|
|
21
|
-
import React, { memo, useCallback, useState } from "react";
|
|
21
|
+
import React, { memo, useCallback, useMemo, useState } from "react";
|
|
22
22
|
import { ErrorBoundary } from "../../shared/ErrorBoundary.js";
|
|
23
|
-
import { supportsExcluding, supportsSearch } from "../utils/filterValues.js";
|
|
23
|
+
import { filterHasActiveState, getEffectiveFilterState, supportsExcluding, supportsSearch } from "../utils/filterValues.js";
|
|
24
24
|
import { DragHandleIcon } from "./DragHandleIcon.js";
|
|
25
25
|
import { OverflowMenuIcon, RemoveIcon, SearchIcon } from "./FilterIcons.js";
|
|
26
26
|
import styles from "./FilterListItem.module.css";
|
|
27
|
-
function hasActiveSelection(filterState) {
|
|
28
|
-
if (filterState == null) {
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
switch (filterState.type) {
|
|
32
|
-
case "EXACT_MATCH":
|
|
33
|
-
return filterState.values.length > 0;
|
|
34
|
-
case "SELECT":
|
|
35
|
-
return filterState.selectedValues.length > 0;
|
|
36
|
-
case "CONTAINS_TEXT":
|
|
37
|
-
return filterState.value != null && filterState.value.length > 0;
|
|
38
|
-
case "NUMBER_RANGE":
|
|
39
|
-
return filterState.minValue != null || filterState.maxValue != null;
|
|
40
|
-
case "DATE_RANGE":
|
|
41
|
-
return filterState.minValue != null || filterState.maxValue != null;
|
|
42
|
-
case "TIMELINE":
|
|
43
|
-
return filterState.startDate != null || filterState.endDate != null;
|
|
44
|
-
case "TOGGLE":
|
|
45
|
-
return filterState.enabled;
|
|
46
|
-
case "keywordSearch":
|
|
47
|
-
return filterState.searchTerm.length > 0;
|
|
48
|
-
case "hasLink":
|
|
49
|
-
return filterState.hasLink;
|
|
50
|
-
case "linkedProperty":
|
|
51
|
-
return hasActiveSelection(filterState.linkedFilterState);
|
|
52
|
-
case "custom":
|
|
53
|
-
return true;
|
|
54
|
-
default:
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
27
|
function FilterListItemInner({
|
|
59
28
|
definition,
|
|
60
29
|
filterKey,
|
|
@@ -63,6 +32,7 @@ function FilterListItemInner({
|
|
|
63
32
|
onFilterStateChanged,
|
|
64
33
|
onFilterRemoved,
|
|
65
34
|
renderInput,
|
|
35
|
+
searchField,
|
|
66
36
|
dragHandleAttributes,
|
|
67
37
|
dragHandleListeners,
|
|
68
38
|
className,
|
|
@@ -106,15 +76,17 @@ function FilterListItemInner({
|
|
|
106
76
|
preventScroll: true
|
|
107
77
|
});
|
|
108
78
|
}, []);
|
|
109
|
-
const
|
|
110
|
-
const
|
|
79
|
+
const effectiveState = useMemo(() => getEffectiveFilterState(filterState), [filterState]);
|
|
80
|
+
const showExcludeDropdown = supportsExcluding(effectiveState);
|
|
81
|
+
const showSearch = supportsSearch(effectiveState) && searchField !== false;
|
|
82
|
+
const hasSelection = filterHasActiveState(filterState);
|
|
111
83
|
const searchOpen = searchState.type === "open";
|
|
112
84
|
const searchQuery = searchState.type === "open" ? searchState.query : "";
|
|
113
85
|
const searchQueryForInput = searchState.type === "open" ? searchState.query : undefined;
|
|
114
86
|
return /*#__PURE__*/React.createElement("div", {
|
|
115
87
|
className: classnames(styles.filterItem, className),
|
|
116
88
|
style: style,
|
|
117
|
-
"data-has-selection":
|
|
89
|
+
"data-has-selection": hasSelection || undefined
|
|
118
90
|
}, /*#__PURE__*/React.createElement("div", {
|
|
119
91
|
className: styles.itemHeader
|
|
120
92
|
}, dragHandleAttributes && /*#__PURE__*/React.createElement(Button, _extends({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterListItem.js","names":["Button","Input","classnames","React","memo","useCallback","useState","ErrorBoundary","supportsExcluding","supportsSearch","DragHandleIcon","OverflowMenuIcon","RemoveIcon","SearchIcon","styles","hasActiveSelection","filterState","type","values","length","selectedValues","value","minValue","maxValue","startDate","endDate","enabled","searchTerm","hasLink","linkedFilterState","FilterListItemInner","definition","filterKey","label","onFilterStateChanged","onFilterRemoved","renderInput","dragHandleAttributes","dragHandleListeners","className","style","searchState","setSearchState","excludeRowOpen","setExcludeRowOpen","handleFilterStateChanged","newState","handleToggleSearch","prev","query","handleSearchChange","e","target","handleSearchClear","handleRemove","handleToggleExcludeRow","searchInputRef","element","focus","preventScroll","showExcludeDropdown","showSearch","searchOpen","searchQuery","searchQueryForInput","undefined","createElement","filterItem","itemHeader","_extends","dragHandle","itemLabel","headerActionButton","onClick","searchRow","searchInput","onChange","placeholder","ref","searchClearButton","itemContent","errorMessage","FilterListItem"],"sources":["FilterListItem.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 { Input } from \"@base-ui/react/input\";\nimport type {\n DraggableAttributes,\n DraggableSyntheticListeners,\n} from \"@dnd-kit/core\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useState } from \"react\";\nimport { ErrorBoundary } from \"../../shared/ErrorBoundary.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { supportsExcluding, supportsSearch } from \"../utils/filterValues.js\";\nimport type { RenderFilterInput } from \"./BaseFilterListApi.js\";\nimport { DragHandleIcon } from \"./DragHandleIcon.js\";\nimport { OverflowMenuIcon, RemoveIcon, SearchIcon } from \"./FilterIcons.js\";\nimport styles from \"./FilterListItem.module.css\";\n\nfunction hasActiveSelection(filterState: FilterState | undefined): boolean {\n if (filterState == null) {\n return false;\n }\n switch (filterState.type) {\n case \"EXACT_MATCH\":\n return filterState.values.length > 0;\n case \"SELECT\":\n return filterState.selectedValues.length > 0;\n case \"CONTAINS_TEXT\":\n return filterState.value != null && filterState.value.length > 0;\n case \"NUMBER_RANGE\":\n return filterState.minValue != null || filterState.maxValue != null;\n case \"DATE_RANGE\":\n return filterState.minValue != null || filterState.maxValue != null;\n case \"TIMELINE\":\n return filterState.startDate != null || filterState.endDate != null;\n case \"TOGGLE\":\n return filterState.enabled;\n case \"keywordSearch\":\n return filterState.searchTerm.length > 0;\n case \"hasLink\":\n return filterState.hasLink;\n case \"linkedProperty\":\n return hasActiveSelection(filterState.linkedFilterState);\n case \"custom\":\n return true;\n default:\n return false;\n }\n}\n\ninterface FilterListItemProps<D> {\n definition: D;\n filterKey: string;\n label: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (\n filterKey: string,\n state: FilterState,\n ) => void;\n onFilterRemoved?: (filterKey: string) => void;\n renderInput: RenderFilterInput<D>;\n dragHandleAttributes?: DraggableAttributes;\n dragHandleListeners?: DraggableSyntheticListeners;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction FilterListItemInner<D>({\n definition,\n filterKey,\n label,\n filterState,\n onFilterStateChanged,\n onFilterRemoved,\n renderInput,\n dragHandleAttributes,\n dragHandleListeners,\n className,\n style,\n}: FilterListItemProps<D>): React.ReactElement {\n const [searchState, setSearchState] = useState<\n { type: \"closed\" } | { type: \"open\"; query: string }\n >({ type: \"closed\" });\n const [excludeRowOpen, setExcludeRowOpen] = useState(false);\n\n const handleFilterStateChanged = useCallback(\n (newState: FilterState) => {\n onFilterStateChanged(filterKey, newState);\n },\n [filterKey, onFilterStateChanged],\n );\n\n const handleToggleSearch = useCallback(() => {\n setSearchState((prev) =>\n prev.type === \"closed\" ? { type: \"open\", query: \"\" } : { type: \"closed\" }\n );\n }, []);\n\n const handleSearchChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchState({ type: \"open\", query: e.target.value });\n },\n [],\n );\n\n const handleSearchClear = useCallback(() => {\n setSearchState({ type: \"open\", query: \"\" });\n }, []);\n\n const handleRemove = useCallback(() => {\n onFilterRemoved?.(filterKey);\n }, [filterKey, onFilterRemoved]);\n\n const handleToggleExcludeRow = useCallback(() => {\n setExcludeRowOpen((prev) => !prev);\n }, []);\n\n const searchInputRef = useCallback((element: HTMLInputElement | null) => {\n element?.focus({ preventScroll: true });\n }, []);\n\n const showExcludeDropdown = supportsExcluding(filterState);\n const showSearch = supportsSearch(filterState);\n const hasOverflowActions = showExcludeDropdown;\n\n const searchOpen = searchState.type === \"open\";\n const searchQuery = searchState.type === \"open\" ? searchState.query : \"\";\n const searchQueryForInput = searchState.type === \"open\"\n ? searchState.query\n : undefined;\n\n return (\n <div\n className={classnames(styles.filterItem, className)}\n style={style}\n data-has-selection={hasActiveSelection(filterState) || undefined}\n >\n <div className={styles.itemHeader}>\n {dragHandleAttributes && (\n <Button\n className={styles.dragHandle}\n aria-label={`Reorder ${label}`}\n {...dragHandleAttributes}\n {...dragHandleListeners}\n >\n <DragHandleIcon />\n </Button>\n )}\n <span\n className={styles.itemLabel}\n >\n {label}\n </span>\n {showSearch && (\n <Button\n className={styles.headerActionButton}\n onClick={handleToggleSearch}\n aria-label=\"Search values\"\n aria-pressed={searchOpen}\n >\n <SearchIcon />\n </Button>\n )}\n {onFilterRemoved && (\n <Button\n className={styles.headerActionButton}\n onClick={handleRemove}\n aria-label={`Remove ${label} filter`}\n >\n <RemoveIcon />\n </Button>\n )}\n {hasOverflowActions && (\n <Button\n className={styles.headerActionButton}\n onClick={handleToggleExcludeRow}\n aria-label=\"More actions\"\n aria-pressed={excludeRowOpen}\n >\n <OverflowMenuIcon />\n </Button>\n )}\n </div>\n\n {searchOpen && (\n <div className={styles.searchRow}>\n <Input\n type=\"text\"\n className={styles.searchInput}\n value={searchQuery}\n onChange={handleSearchChange}\n placeholder=\"Search property values...\"\n aria-label=\"Search property values\"\n ref={searchInputRef}\n />\n {searchQuery && (\n <Button\n type=\"button\"\n className={styles.searchClearButton}\n onClick={handleSearchClear}\n aria-label=\"Clear search\"\n >\n <RemoveIcon />\n </Button>\n )}\n </div>\n )}\n\n <div className={styles.itemContent}>\n <ErrorBoundary errorMessage=\"Error loading filter\">\n {renderInput({\n definition,\n filterKey,\n filterState,\n onFilterStateChanged: handleFilterStateChanged,\n searchQuery: searchQueryForInput,\n excludeRowOpen,\n })}\n </ErrorBoundary>\n </div>\n </div>\n );\n}\n\nexport const FilterListItem = memo(\n FilterListItemInner,\n) as typeof FilterListItemInner;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FilterListItem.js","names":["Button","Input","classnames","React","memo","useCallback","useMemo","useState","ErrorBoundary","filterHasActiveState","getEffectiveFilterState","supportsExcluding","supportsSearch","DragHandleIcon","OverflowMenuIcon","RemoveIcon","SearchIcon","styles","FilterListItemInner","definition","filterKey","label","filterState","onFilterStateChanged","onFilterRemoved","renderInput","searchField","dragHandleAttributes","dragHandleListeners","className","style","searchState","setSearchState","type","excludeRowOpen","setExcludeRowOpen","handleFilterStateChanged","newState","handleToggleSearch","prev","query","handleSearchChange","e","target","value","handleSearchClear","handleRemove","handleToggleExcludeRow","searchInputRef","element","focus","preventScroll","effectiveState","showExcludeDropdown","showSearch","hasSelection","searchOpen","searchQuery","searchQueryForInput","undefined","createElement","filterItem","itemHeader","_extends","dragHandle","itemLabel","headerActionButton","onClick","searchRow","searchInput","onChange","placeholder","ref","searchClearButton","itemContent","errorMessage","FilterListItem"],"sources":["FilterListItem.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 { Input } from \"@base-ui/react/input\";\nimport type {\n DraggableAttributes,\n DraggableSyntheticListeners,\n} from \"@dnd-kit/core\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo, useState } from \"react\";\nimport { ErrorBoundary } from \"../../shared/ErrorBoundary.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport {\n filterHasActiveState,\n getEffectiveFilterState,\n supportsExcluding,\n supportsSearch,\n} from \"../utils/filterValues.js\";\nimport type { RenderFilterInput } from \"./BaseFilterListApi.js\";\nimport { DragHandleIcon } from \"./DragHandleIcon.js\";\nimport { OverflowMenuIcon, RemoveIcon, SearchIcon } from \"./FilterIcons.js\";\nimport styles from \"./FilterListItem.module.css\";\n\ninterface FilterListItemProps<D> {\n definition: D;\n filterKey: string;\n label: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (\n filterKey: string,\n state: FilterState,\n ) => void;\n onFilterRemoved?: (filterKey: string) => void;\n renderInput: RenderFilterInput<D>;\n searchField?: boolean;\n dragHandleAttributes?: DraggableAttributes;\n dragHandleListeners?: DraggableSyntheticListeners;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction FilterListItemInner<D>({\n definition,\n filterKey,\n label,\n filterState,\n onFilterStateChanged,\n onFilterRemoved,\n renderInput,\n searchField,\n dragHandleAttributes,\n dragHandleListeners,\n className,\n style,\n}: FilterListItemProps<D>): React.ReactElement {\n const [searchState, setSearchState] = useState<\n { type: \"closed\" } | { type: \"open\"; query: string }\n >({ type: \"closed\" });\n const [excludeRowOpen, setExcludeRowOpen] = useState(false);\n\n const handleFilterStateChanged = useCallback(\n (newState: FilterState) => {\n onFilterStateChanged(filterKey, newState);\n },\n [filterKey, onFilterStateChanged],\n );\n\n const handleToggleSearch = useCallback(() => {\n setSearchState((prev) =>\n prev.type === \"closed\" ? { type: \"open\", query: \"\" } : { type: \"closed\" }\n );\n }, []);\n\n const handleSearchChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchState({ type: \"open\", query: e.target.value });\n },\n [],\n );\n\n const handleSearchClear = useCallback(() => {\n setSearchState({ type: \"open\", query: \"\" });\n }, []);\n\n const handleRemove = useCallback(() => {\n onFilterRemoved?.(filterKey);\n }, [filterKey, onFilterRemoved]);\n\n const handleToggleExcludeRow = useCallback(() => {\n setExcludeRowOpen((prev) => !prev);\n }, []);\n\n const searchInputRef = useCallback((element: HTMLInputElement | null) => {\n element?.focus({ preventScroll: true });\n }, []);\n\n const effectiveState = useMemo(\n () => getEffectiveFilterState(filterState),\n [filterState],\n );\n\n const showExcludeDropdown = supportsExcluding(effectiveState);\n const showSearch = supportsSearch(effectiveState) && searchField !== false;\n const hasOverflowActions = showExcludeDropdown;\n const hasSelection = filterHasActiveState(filterState);\n\n const searchOpen = searchState.type === \"open\";\n const searchQuery = searchState.type === \"open\" ? searchState.query : \"\";\n const searchQueryForInput = searchState.type === \"open\"\n ? searchState.query\n : undefined;\n\n return (\n <div\n className={classnames(styles.filterItem, className)}\n style={style}\n data-has-selection={hasSelection || undefined}\n >\n <div className={styles.itemHeader}>\n {dragHandleAttributes && (\n <Button\n className={styles.dragHandle}\n aria-label={`Reorder ${label}`}\n {...dragHandleAttributes}\n {...dragHandleListeners}\n >\n <DragHandleIcon />\n </Button>\n )}\n <span\n className={styles.itemLabel}\n >\n {label}\n </span>\n {showSearch && (\n <Button\n className={styles.headerActionButton}\n onClick={handleToggleSearch}\n aria-label=\"Search values\"\n aria-pressed={searchOpen}\n >\n <SearchIcon />\n </Button>\n )}\n {onFilterRemoved && (\n <Button\n className={styles.headerActionButton}\n onClick={handleRemove}\n aria-label={`Remove ${label} filter`}\n >\n <RemoveIcon />\n </Button>\n )}\n {hasOverflowActions && (\n <Button\n className={styles.headerActionButton}\n onClick={handleToggleExcludeRow}\n aria-label=\"More actions\"\n aria-pressed={excludeRowOpen}\n >\n <OverflowMenuIcon />\n </Button>\n )}\n </div>\n\n {searchOpen && (\n <div className={styles.searchRow}>\n <Input\n type=\"text\"\n className={styles.searchInput}\n value={searchQuery}\n onChange={handleSearchChange}\n placeholder=\"Search property values...\"\n aria-label=\"Search property values\"\n ref={searchInputRef}\n />\n {searchQuery && (\n <Button\n type=\"button\"\n className={styles.searchClearButton}\n onClick={handleSearchClear}\n aria-label=\"Clear search\"\n >\n <RemoveIcon />\n </Button>\n )}\n </div>\n )}\n\n <div className={styles.itemContent}>\n <ErrorBoundary errorMessage=\"Error loading filter\">\n {renderInput({\n definition,\n filterKey,\n filterState,\n onFilterStateChanged: handleFilterStateChanged,\n searchQuery: searchQueryForInput,\n excludeRowOpen,\n })}\n </ErrorBoundary>\n </div>\n </div>\n );\n}\n\nexport const FilterListItem = memo(\n FilterListItemInner,\n) as typeof FilterListItemInner;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -28,7 +28,8 @@ function SortableFilterListItemInner({
|
|
|
28
28
|
filterState,
|
|
29
29
|
onFilterStateChanged,
|
|
30
30
|
onFilterRemoved,
|
|
31
|
-
renderInput
|
|
31
|
+
renderInput,
|
|
32
|
+
searchField
|
|
32
33
|
}) {
|
|
33
34
|
const {
|
|
34
35
|
attributes,
|
|
@@ -56,6 +57,7 @@ function SortableFilterListItemInner({
|
|
|
56
57
|
onFilterStateChanged: onFilterStateChanged,
|
|
57
58
|
onFilterRemoved: onFilterRemoved,
|
|
58
59
|
renderInput: renderInput,
|
|
60
|
+
searchField: searchField,
|
|
59
61
|
dragHandleAttributes: attributes,
|
|
60
62
|
dragHandleListeners: listeners
|
|
61
63
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SortableFilterListItem.js","names":["useSortable","CSS","classnames","React","memo","useMemo","FilterListItem","styles","SortableFilterListItemInner","id","definition","filterKey","label","filterState","onFilterStateChanged","onFilterRemoved","renderInput","attributes","listeners","setNodeRef","transform","transition","isDragging","style","Transform","toString","undefined","createElement","ref","className","dragging","dragHandleAttributes","dragHandleListeners","SortableFilterListItem"],"sources":["SortableFilterListItem.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 { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport classnames from \"classnames\";\nimport React, { memo, useMemo } from \"react\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport type { RenderFilterInput } from \"./BaseFilterListApi.js\";\nimport { FilterListItem } from \"./FilterListItem.js\";\nimport styles from \"./FilterListItem.module.css\";\n\ninterface SortableFilterListItemProps<D> {\n id: string;\n definition: D;\n filterKey: string;\n label: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (\n filterKey: string,\n state: FilterState,\n ) => void;\n onFilterRemoved?: (filterKey: string) => void;\n renderInput: RenderFilterInput<D>;\n}\n\nfunction SortableFilterListItemInner<D>({\n id,\n definition,\n filterKey,\n label,\n filterState,\n onFilterStateChanged,\n onFilterRemoved,\n renderInput,\n}: SortableFilterListItemProps<D>): React.ReactElement {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id });\n\n const style = useMemo<React.CSSProperties>(() => ({\n transform: CSS.Transform.toString(transform),\n transition: transition ?? undefined,\n }), [transform, transition]);\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={classnames(isDragging && styles.dragging)}\n >\n <FilterListItem\n definition={definition}\n filterKey={filterKey}\n label={label}\n filterState={filterState}\n onFilterStateChanged={onFilterStateChanged}\n onFilterRemoved={onFilterRemoved}\n renderInput={renderInput}\n dragHandleAttributes={attributes}\n dragHandleListeners={listeners}\n />\n </div>\n );\n}\n\nexport const SortableFilterListItem = memo(\n SortableFilterListItemInner,\n) as typeof SortableFilterListItemInner;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,GAAG,QAAQ,oBAAoB;AACxC,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,IAAI,EAAEC,OAAO,QAAQ,OAAO;AAG5C,SAASC,cAAc,QAAQ,qBAAqB;AACpD,OAAOC,MAAM,MAAM,6BAA6B;
|
|
1
|
+
{"version":3,"file":"SortableFilterListItem.js","names":["useSortable","CSS","classnames","React","memo","useMemo","FilterListItem","styles","SortableFilterListItemInner","id","definition","filterKey","label","filterState","onFilterStateChanged","onFilterRemoved","renderInput","searchField","attributes","listeners","setNodeRef","transform","transition","isDragging","style","Transform","toString","undefined","createElement","ref","className","dragging","dragHandleAttributes","dragHandleListeners","SortableFilterListItem"],"sources":["SortableFilterListItem.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 { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport classnames from \"classnames\";\nimport React, { memo, useMemo } from \"react\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport type { RenderFilterInput } from \"./BaseFilterListApi.js\";\nimport { FilterListItem } from \"./FilterListItem.js\";\nimport styles from \"./FilterListItem.module.css\";\n\ninterface SortableFilterListItemProps<D> {\n id: string;\n definition: D;\n filterKey: string;\n label: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (\n filterKey: string,\n state: FilterState,\n ) => void;\n onFilterRemoved?: (filterKey: string) => void;\n renderInput: RenderFilterInput<D>;\n searchField?: boolean;\n}\n\nfunction SortableFilterListItemInner<D>({\n id,\n definition,\n filterKey,\n label,\n filterState,\n onFilterStateChanged,\n onFilterRemoved,\n renderInput,\n searchField,\n}: SortableFilterListItemProps<D>): React.ReactElement {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id });\n\n const style = useMemo<React.CSSProperties>(() => ({\n transform: CSS.Transform.toString(transform),\n transition: transition ?? undefined,\n }), [transform, transition]);\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={classnames(isDragging && styles.dragging)}\n >\n <FilterListItem\n definition={definition}\n filterKey={filterKey}\n label={label}\n filterState={filterState}\n onFilterStateChanged={onFilterStateChanged}\n onFilterRemoved={onFilterRemoved}\n renderInput={renderInput}\n searchField={searchField}\n dragHandleAttributes={attributes}\n dragHandleListeners={listeners}\n />\n </div>\n );\n}\n\nexport const SortableFilterListItem = memo(\n SortableFilterListItemInner,\n) as typeof SortableFilterListItemInner;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,GAAG,QAAQ,oBAAoB;AACxC,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,IAAI,EAAEC,OAAO,QAAQ,OAAO;AAG5C,SAASC,cAAc,QAAQ,qBAAqB;AACpD,OAAOC,MAAM,MAAM,6BAA6B;AAiBhD,SAASC,2BAA2BA,CAAI;EACtCC,EAAE;EACFC,UAAU;EACVC,SAAS;EACTC,KAAK;EACLC,WAAW;EACXC,oBAAoB;EACpBC,eAAe;EACfC,WAAW;EACXC;AAC8B,CAAC,EAAsB;EACrD,MAAM;IACJC,UAAU;IACVC,SAAS;IACTC,UAAU;IACVC,SAAS;IACTC,UAAU;IACVC;EACF,CAAC,GAAGvB,WAAW,CAAC;IAAES;EAAG,CAAC,CAAC;EAEvB,MAAMe,KAAK,GAAGnB,OAAO,CAAsB,OAAO;IAChDgB,SAAS,EAAEpB,GAAG,CAACwB,SAAS,CAACC,QAAQ,CAACL,SAAS,CAAC;IAC5CC,UAAU,EAAEA,UAAU,IAAIK;EAC5B,CAAC,CAAC,EAAE,CAACN,SAAS,EAAEC,UAAU,CAAC,CAAC;EAE5B,oBACEnB,KAAA,CAAAyB,aAAA;IACEC,GAAG,EAAET,UAAW;IAChBI,KAAK,EAAEA,KAAM;IACbM,SAAS,EAAE5B,UAAU,CAACqB,UAAU,IAAIhB,MAAM,CAACwB,QAAQ;EAAE,gBAErD5B,KAAA,CAAAyB,aAAA,CAACtB,cAAc;IACbI,UAAU,EAAEA,UAAW;IACvBC,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA,KAAM;IACbC,WAAW,EAAEA,WAAY;IACzBC,oBAAoB,EAAEA,oBAAqB;IAC3CC,eAAe,EAAEA,eAAgB;IACjCC,WAAW,EAAEA,WAAY;IACzBC,WAAW,EAAEA,WAAY;IACzBe,oBAAoB,EAAEd,UAAW;IACjCe,mBAAmB,EAAEd;EAAU,CAChC,CACE,CAAC;AAEV;AAEA,OAAO,MAAMe,sBAAsB,gBAAG9B,IAAI,CACxCI,2BACF,CAAuC","ignoreList":[]}
|
|
@@ -88,10 +88,12 @@ function ListogramInputInner({
|
|
|
88
88
|
const percentage = maxCount > 0 ? count / maxCount * 100 : 0;
|
|
89
89
|
const perRowColor = colorMap?.[value];
|
|
90
90
|
const isEmpty = isEmptyValue(value);
|
|
91
|
+
const isFilteredOut = count === 0 && !selectedSet.has(value);
|
|
91
92
|
return /*#__PURE__*/React.createElement(Button, {
|
|
92
93
|
key: value,
|
|
93
94
|
className: styles.row,
|
|
94
|
-
"data-empty": isEmpty || undefined
|
|
95
|
+
"data-empty": isEmpty || undefined,
|
|
96
|
+
"data-filtered-out": isFilteredOut || undefined
|
|
95
97
|
// eslint-disable-next-line react/jsx-no-bind
|
|
96
98
|
,
|
|
97
99
|
onClick: () => toggleValue(value),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListogramInput.js","names":["Button","classnames","React","memo","useCallback","useMemo","useState","Checkbox","filterValuesBySearch","isEmptyValue","formatCompactCount","styles","ListogramSkeleton","NoValueLabel","sharedStyles","useStableData","ListogramInputInner","values","maxCount","isLoading","error","selectedValues","onChange","colorMap","displayMode","showCount","isExcluding","className","style","maxVisibleItems","searchQuery","renderValue","isExpanded","setIsExpanded","stableValues","selectedSet","Set","toggleValue","value","has","filter","v","filteredValues","rendered","sortedValues","selected","unselected","displayValues","slice","hasMore","length","createElement","listogram","errorMessage","message","emptyMessage","container","map","count","percentage","perRowColor","isEmpty","key","row","undefined","onClick","checkbox","e","stopPropagation","checked","onCheckedChange","label","noValueLabel","title","toLocaleString","bar","barFill","type","viewAllButton","ListogramInput"],"sources":["ListogramInput.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, useState } from \"react\";\nimport { Checkbox } from \"../../../base-components/checkbox/Checkbox.js\";\nimport type { PropertyAggregationValue } from \"../../types/AggregationTypes.js\";\nimport {\n filterValuesBySearch,\n isEmptyValue,\n} from \"../../utils/filterValues.js\";\nimport { formatCompactCount } from \"./formatCompactCount.js\";\nimport styles from \"./ListogramInput.module.css\";\nimport { ListogramSkeleton } from \"./ListogramSkeleton.js\";\nimport { NoValueLabel } from \"./NoValueLabel.js\";\nimport sharedStyles from \"./shared.module.css\";\nimport { useStableData } from \"./useStableData.js\";\n\nexport type ListogramDisplayMode = \"full\" | \"count\" | \"minimal\";\n\ninterface ListogramInputProps {\n values: PropertyAggregationValue[];\n maxCount: number;\n isLoading: boolean;\n error: Error | null;\n selectedValues: string[];\n onChange: (values: string[]) => void;\n colorMap?: Record<string, string>;\n displayMode?: ListogramDisplayMode;\n showCount?: boolean;\n isExcluding?: boolean;\n className?: string;\n style?: React.CSSProperties;\n maxVisibleItems?: number;\n searchQuery?: string;\n renderValue?: (value: string) => React.ReactNode;\n}\n\nfunction ListogramInputInner({\n values,\n maxCount,\n isLoading,\n error,\n selectedValues,\n onChange,\n colorMap,\n displayMode = \"full\",\n showCount = true,\n isExcluding,\n className,\n style,\n maxVisibleItems,\n searchQuery,\n renderValue,\n}: ListogramInputProps): React.ReactElement {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const stableValues = useStableData(values, isLoading);\n\n const selectedSet = useMemo(() => new Set(selectedValues), [selectedValues]);\n\n const toggleValue = useCallback(\n (value: string) => {\n if (selectedSet.has(value)) {\n onChange(selectedValues.filter((v) => v !== value));\n } else {\n onChange([...selectedValues, value]);\n }\n },\n [selectedValues, selectedSet, onChange],\n );\n\n const filteredValues = useMemo(() => {\n if (searchQuery) {\n return filterValuesBySearch(\n stableValues,\n searchQuery,\n (v) => {\n const rendered = renderValue?.(v.value);\n return typeof rendered === \"string\" ? rendered : v.value;\n },\n );\n }\n return stableValues;\n }, [stableValues, searchQuery, renderValue]);\n\n const sortedValues = useMemo(() => {\n const selected = filteredValues.filter((v) => selectedSet.has(v.value));\n const unselected = filteredValues.filter((v) => !selectedSet.has(v.value));\n return [...selected, ...unselected];\n }, [filteredValues, selectedSet]);\n\n const displayValues = useMemo(() => {\n if (isExpanded || !maxVisibleItems) return sortedValues;\n return sortedValues.slice(0, maxVisibleItems);\n }, [sortedValues, maxVisibleItems, isExpanded]);\n\n const hasMore = maxVisibleItems != null\n && sortedValues.length > maxVisibleItems;\n\n return (\n <div\n className={classnames(styles.listogram, className)}\n style={style}\n data-loading={isLoading && filteredValues.length > 0}\n >\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading values: {error.message}\n </div>\n )}\n\n {!error && filteredValues.length === 0 && isLoading && (\n <ListogramSkeleton />\n )}\n {!error && filteredValues.length === 0 && !isLoading && (\n <div className={sharedStyles.emptyMessage}>No values available</div>\n )}\n\n {filteredValues.length > 0 && (\n <div className={styles.container}>\n {displayValues.map(({ value, count }) => {\n const percentage = maxCount > 0 ? (count / maxCount) * 100 : 0;\n const perRowColor = colorMap?.[value];\n const isEmpty = isEmptyValue(value);\n\n return (\n <Button\n key={value}\n className={styles.row}\n data-empty={isEmpty || undefined}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => toggleValue(value)}\n aria-pressed={selectedSet.has(value)}\n style={perRowColor || percentage > 0\n ? ({\n \"--osdk-filter-listogram-bar-fill-scale\": percentage / 100,\n ...(perRowColor\n ? {\n \"--osdk-filter-listogram-row-bar-color\": perRowColor,\n }\n : undefined),\n } as React.CSSProperties)\n : undefined}\n >\n <span\n className={styles.checkbox}\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={selectedSet.has(value)}\n // eslint-disable-next-line react/jsx-no-bind\n onCheckedChange={() => toggleValue(value)}\n isExcluding={isExcluding}\n />\n </span>\n <span\n className={styles.label}\n data-excluding={(isExcluding && selectedSet.has(value))\n || undefined}\n >\n {isEmpty\n ? <NoValueLabel className={styles.noValueLabel} />\n : (renderValue?.(value) ?? value)}\n </span>\n {showCount && displayMode !== \"minimal\" && (\n <span\n className={styles.count}\n title={count.toLocaleString()}\n >\n {formatCompactCount(count)}\n </span>\n )}\n {displayMode === \"full\" && (\n <span className={styles.bar}>\n <span className={styles.barFill} />\n </span>\n )}\n </Button>\n );\n })}\n\n {hasMore && !isExpanded && (\n <Button\n type=\"button\"\n className={styles.viewAllButton}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => setIsExpanded(true)}\n >\n View all ({sortedValues.length})\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport const ListogramInput = memo(\n ListogramInputInner,\n) as typeof ListogramInputInner;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ListogramInput.js","names":["Button","classnames","React","memo","useCallback","useMemo","useState","Checkbox","filterValuesBySearch","isEmptyValue","formatCompactCount","styles","ListogramSkeleton","NoValueLabel","sharedStyles","useStableData","ListogramInputInner","values","maxCount","isLoading","error","selectedValues","onChange","colorMap","displayMode","showCount","isExcluding","className","style","maxVisibleItems","searchQuery","renderValue","isExpanded","setIsExpanded","stableValues","selectedSet","Set","toggleValue","value","has","filter","v","filteredValues","rendered","sortedValues","selected","unselected","displayValues","slice","hasMore","length","createElement","listogram","errorMessage","message","emptyMessage","container","map","count","percentage","perRowColor","isEmpty","isFilteredOut","key","row","undefined","onClick","checkbox","e","stopPropagation","checked","onCheckedChange","label","noValueLabel","title","toLocaleString","bar","barFill","type","viewAllButton","ListogramInput"],"sources":["ListogramInput.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, useState } from \"react\";\nimport { Checkbox } from \"../../../base-components/checkbox/Checkbox.js\";\nimport type { PropertyAggregationValue } from \"../../types/AggregationTypes.js\";\nimport {\n filterValuesBySearch,\n isEmptyValue,\n} from \"../../utils/filterValues.js\";\nimport { formatCompactCount } from \"./formatCompactCount.js\";\nimport styles from \"./ListogramInput.module.css\";\nimport { ListogramSkeleton } from \"./ListogramSkeleton.js\";\nimport { NoValueLabel } from \"./NoValueLabel.js\";\nimport sharedStyles from \"./shared.module.css\";\nimport { useStableData } from \"./useStableData.js\";\n\nexport type ListogramDisplayMode = \"full\" | \"count\" | \"minimal\";\n\ninterface ListogramInputProps {\n values: PropertyAggregationValue[];\n maxCount: number;\n isLoading: boolean;\n error: Error | null;\n selectedValues: string[];\n onChange: (values: string[]) => void;\n colorMap?: Record<string, string>;\n displayMode?: ListogramDisplayMode;\n showCount?: boolean;\n isExcluding?: boolean;\n className?: string;\n style?: React.CSSProperties;\n maxVisibleItems?: number;\n searchQuery?: string;\n renderValue?: (value: string) => React.ReactNode;\n}\n\nfunction ListogramInputInner({\n values,\n maxCount,\n isLoading,\n error,\n selectedValues,\n onChange,\n colorMap,\n displayMode = \"full\",\n showCount = true,\n isExcluding,\n className,\n style,\n maxVisibleItems,\n searchQuery,\n renderValue,\n}: ListogramInputProps): React.ReactElement {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const stableValues = useStableData(values, isLoading);\n\n const selectedSet = useMemo(() => new Set(selectedValues), [selectedValues]);\n\n const toggleValue = useCallback(\n (value: string) => {\n if (selectedSet.has(value)) {\n onChange(selectedValues.filter((v) => v !== value));\n } else {\n onChange([...selectedValues, value]);\n }\n },\n [selectedValues, selectedSet, onChange],\n );\n\n const filteredValues = useMemo(() => {\n if (searchQuery) {\n return filterValuesBySearch(\n stableValues,\n searchQuery,\n (v) => {\n const rendered = renderValue?.(v.value);\n return typeof rendered === \"string\" ? rendered : v.value;\n },\n );\n }\n return stableValues;\n }, [stableValues, searchQuery, renderValue]);\n\n const sortedValues = useMemo(() => {\n const selected = filteredValues.filter((v) => selectedSet.has(v.value));\n const unselected = filteredValues.filter((v) => !selectedSet.has(v.value));\n return [...selected, ...unselected];\n }, [filteredValues, selectedSet]);\n\n const displayValues = useMemo(() => {\n if (isExpanded || !maxVisibleItems) return sortedValues;\n return sortedValues.slice(0, maxVisibleItems);\n }, [sortedValues, maxVisibleItems, isExpanded]);\n\n const hasMore = maxVisibleItems != null\n && sortedValues.length > maxVisibleItems;\n\n return (\n <div\n className={classnames(styles.listogram, className)}\n style={style}\n data-loading={isLoading && filteredValues.length > 0}\n >\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading values: {error.message}\n </div>\n )}\n\n {!error && filteredValues.length === 0 && isLoading && (\n <ListogramSkeleton />\n )}\n {!error && filteredValues.length === 0 && !isLoading && (\n <div className={sharedStyles.emptyMessage}>No values available</div>\n )}\n\n {filteredValues.length > 0 && (\n <div className={styles.container}>\n {displayValues.map(({ value, count }) => {\n const percentage = maxCount > 0 ? (count / maxCount) * 100 : 0;\n const perRowColor = colorMap?.[value];\n const isEmpty = isEmptyValue(value);\n\n const isFilteredOut = count === 0 && !selectedSet.has(value);\n return (\n <Button\n key={value}\n className={styles.row}\n data-empty={isEmpty || undefined}\n data-filtered-out={isFilteredOut || undefined}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => toggleValue(value)}\n aria-pressed={selectedSet.has(value)}\n style={perRowColor || percentage > 0\n ? ({\n \"--osdk-filter-listogram-bar-fill-scale\": percentage / 100,\n ...(perRowColor\n ? {\n \"--osdk-filter-listogram-row-bar-color\": perRowColor,\n }\n : undefined),\n } as React.CSSProperties)\n : undefined}\n >\n <span\n className={styles.checkbox}\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={selectedSet.has(value)}\n // eslint-disable-next-line react/jsx-no-bind\n onCheckedChange={() => toggleValue(value)}\n isExcluding={isExcluding}\n />\n </span>\n <span\n className={styles.label}\n data-excluding={(isExcluding && selectedSet.has(value))\n || undefined}\n >\n {isEmpty\n ? <NoValueLabel className={styles.noValueLabel} />\n : (renderValue?.(value) ?? value)}\n </span>\n {showCount && displayMode !== \"minimal\" && (\n <span\n className={styles.count}\n title={count.toLocaleString()}\n >\n {formatCompactCount(count)}\n </span>\n )}\n {displayMode === \"full\" && (\n <span className={styles.bar}>\n <span className={styles.barFill} />\n </span>\n )}\n </Button>\n );\n })}\n\n {hasMore && !isExpanded && (\n <Button\n type=\"button\"\n className={styles.viewAllButton}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => setIsExpanded(true)}\n >\n View all ({sortedValues.length})\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport const ListogramInput = memo(\n ListogramInputInner,\n) as typeof ListogramInputInner;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -81,6 +81,12 @@
|
|
|
81
81
|
gap: var(--osdk-filter-null-label-gap);
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
+
/* Muted styling for filtered-out (count=0) rows. */
|
|
85
|
+
.row[data-filtered-out] {
|
|
86
|
+
opacity: var(--osdk-filter-filtered-out-item-opacity);
|
|
87
|
+
color: var(--osdk-filter-filtered-out-item-color);
|
|
88
|
+
}
|
|
89
|
+
|
|
84
90
|
.label {
|
|
85
91
|
flex: 1;
|
|
86
92
|
font-family: var(--osdk-filter-listogram-label-font-family);
|