@osdk/react-components 0.48.0 → 0.49.0-main-ff0ef7e7cc3986538c90f5632028a422b404d2eb
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 +12 -0
- package/build/browser/filter-list/FilterList.js +3 -2
- package/build/browser/filter-list/FilterList.js.map +1 -1
- package/build/browser/filter-list/FilterListApi.js.map +1 -1
- package/build/browser/util/UserAgent.js +1 -1
- package/build/browser/util/UserAgent.js.map +1 -1
- package/build/cjs/{chunk-PAGD7GEP.cjs → chunk-54R3LTJ6.cjs} +4 -4
- package/build/cjs/{chunk-PAGD7GEP.cjs.map → chunk-54R3LTJ6.cjs.map} +1 -1
- package/build/cjs/{chunk-GAYXGI57.cjs → chunk-6VCLTITH.cjs} +4 -4
- package/build/cjs/{chunk-GAYXGI57.cjs.map → chunk-6VCLTITH.cjs.map} +1 -1
- package/build/cjs/chunk-CAAFWJMU.cjs +11 -0
- package/build/cjs/{chunk-QAU2YBD2.cjs.map → chunk-CAAFWJMU.cjs.map} +1 -1
- package/build/cjs/{chunk-IQZRLI4C.cjs → chunk-DQWL7JWU.cjs} +7 -6
- package/build/cjs/chunk-DQWL7JWU.cjs.map +1 -0
- package/build/cjs/{chunk-FI4VEIXZ.cjs → chunk-EXGQBZLF.cjs} +4 -4
- package/build/cjs/{chunk-FI4VEIXZ.cjs.map → chunk-EXGQBZLF.cjs.map} +1 -1
- package/build/cjs/{chunk-56TROTOG.cjs → chunk-EXVTRFHQ.cjs} +3 -3
- package/build/cjs/chunk-EXVTRFHQ.cjs.map +1 -0
- package/build/cjs/{chunk-RYKBI2LD.cjs → chunk-H6UEEZRS.cjs} +4 -4
- package/build/cjs/{chunk-RYKBI2LD.cjs.map → chunk-H6UEEZRS.cjs.map} +1 -1
- package/build/cjs/chunk-I7GTJBDE.cjs +11 -0
- package/build/cjs/{chunk-OOLM7FFB.cjs.map → chunk-I7GTJBDE.cjs.map} +1 -1
- package/build/cjs/{chunk-TTLXA3BI.cjs → chunk-K7OFGQKZ.cjs} +4 -4
- package/build/cjs/{chunk-TTLXA3BI.cjs.map → chunk-K7OFGQKZ.cjs.map} +1 -1
- package/build/cjs/{chunk-DXCNAEYH.cjs → chunk-KNGOAQA3.cjs} +4 -4
- package/build/cjs/{chunk-DXCNAEYH.cjs.map → chunk-KNGOAQA3.cjs.map} +1 -1
- package/build/cjs/{chunk-ZKL4ZLRB.cjs → chunk-NR5YG3EY.cjs} +4 -4
- package/build/cjs/{chunk-ZKL4ZLRB.cjs.map → chunk-NR5YG3EY.cjs.map} +1 -1
- package/build/cjs/chunk-SWR5YFCI.cjs +11 -0
- package/build/cjs/{chunk-ZOYIO46A.cjs.map → chunk-SWR5YFCI.cjs.map} +1 -1
- package/build/cjs/{chunk-UWJZ76FJ.cjs → chunk-VOG4I6XK.cjs} +4 -4
- package/build/cjs/{chunk-UWJZ76FJ.cjs.map → chunk-VOG4I6XK.cjs.map} +1 -1
- package/build/cjs/chunk-Y6MLWDCC.cjs +11 -0
- package/build/cjs/{chunk-UACVTYIA.cjs.map → chunk-Y6MLWDCC.cjs.map} +1 -1
- package/build/cjs/public/experimental/action-form.cjs +4 -4
- package/build/cjs/public/experimental/cbac-picker.cjs +11 -11
- 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/filter-list.cjs +15 -15
- package/build/cjs/public/experimental/filter-list.d.cts +28 -23
- 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 +21 -21
- package/build/cjs/public/experimental/pdf-viewer.cjs +7 -7
- package/build/cjs/public/experimental/spreadsheet-viewer.cjs +3 -3
- 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 +71 -71
- package/build/esm/filter-list/FilterList.js +3 -2
- package/build/esm/filter-list/FilterList.js.map +1 -1
- package/build/esm/filter-list/FilterListApi.js.map +1 -1
- package/build/esm/util/UserAgent.js +1 -1
- package/build/esm/util/UserAgent.js.map +1 -1
- package/build/types/filter-list/FilterList.d.ts.map +1 -1
- package/build/types/filter-list/FilterListApi.d.ts +25 -22
- package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
- package/docs/FilterList.md +24 -24
- package/package.json +8 -8
- package/build/cjs/chunk-56TROTOG.cjs.map +0 -1
- package/build/cjs/chunk-IQZRLI4C.cjs.map +0 -1
- package/build/cjs/chunk-OOLM7FFB.cjs +0 -11
- package/build/cjs/chunk-QAU2YBD2.cjs +0 -11
- package/build/cjs/chunk-UACVTYIA.cjs +0 -11
- package/build/cjs/chunk-ZOYIO46A.cjs +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterList.js","names":["React","useCallback","useMemo","AddFilterPopover","BaseFilterList","FilterInput","useFilterListState","useFilterVisibility","EMPTY_LINKED_FILTERS","getEmptyDisplayState","getFilterKey","getFilterLabel","EMPTY_WHERE","FilterList","props","objectType","objectSet","title","titleIcon","collapsed","onCollapsedChange","filterDefinitions","addFilterMode","showResetButton","onReset","showActiveFilterCount","showFilteredOutValues","className","enableSorting","onFilterAdded","onFilterRemoved","onFilterVisibilityChange","renderAddFilterButton","filterStates","setFilterState","clearFilterState","perFilterWhereClauses","perFilterLinkedFilters","activeFilterCount","hasChangesFromInitial","reset","uncontrolledAddFilterMode","handleVisibilityChange","visibleKeys","hiddenKeys","states","map","key","filterKey","isVisible","visibleDefinitions","managedVisibleDefinitions","hiddenDefinitions","managedHiddenDefinitions","showFilter","hideFilter","reorderVisible","hasVisibilityChanges","resetVisibility","undefined","handleReset","simpleVisibleDefinitions","filter","def","effectiveVisibleDefinitions","handleFilterRemoved","handleFilterShown","handleOrderChange","orderedKeys","hiddenFilterItems","label","effectiveRenderAddFilterButton","length","createElement","onShowFilter","renderTrigger","effectiveOnFilterRemoved","renderInput","definition","filterState","onFilterStateChanged","searchQuery","excludeRowOpen","whereClause","get","linkedFilters","canReset","onOrderChange"],"sources":["FilterList.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 { ObjectTypeDefinition } from \"@osdk/api\";\nimport React, { useCallback, useMemo } from \"react\";\n\nimport { AddFilterPopover } from \"./base/AddFilterPopover.js\";\nimport { BaseFilterList } from \"./base/BaseFilterList.js\";\nimport type { RenderFilterInput } from \"./base/BaseFilterListApi.js\";\nimport { FilterInput } from \"./FilterInput.js\";\nimport type {\n FilterDefinitionUnion,\n FilterKey,\n FilterListProps,\n} from \"./FilterListApi.js\";\nimport { useFilterListState } from \"./hooks/useFilterListState.js\";\nimport { useFilterVisibility } from \"./hooks/useFilterVisibility.js\";\nimport { EMPTY_LINKED_FILTERS } from \"./types/LinkedFilterTypes.js\";\nimport { getEmptyDisplayState } from \"./utils/emptyFilterDisplayState.js\";\nimport { getFilterKey } from \"./utils/getFilterKey.js\";\nimport { getFilterLabel } from \"./utils/getFilterLabel.js\";\n\nconst EMPTY_WHERE = {};\n\nexport function FilterList<Q extends ObjectTypeDefinition>(\n props: FilterListProps<Q>,\n): React.ReactElement {\n const {\n objectType,\n objectSet,\n title,\n titleIcon,\n collapsed,\n onCollapsedChange,\n filterDefinitions,\n addFilterMode = \"uncontrolled\",\n showResetButton = false,\n onReset,\n showActiveFilterCount = false,\n showFilteredOutValues = false,\n className,\n enableSorting,\n onFilterAdded,\n onFilterRemoved,\n onFilterVisibilityChange,\n renderAddFilterButton,\n } = props;\n\n const {\n filterStates,\n setFilterState,\n clearFilterState,\n perFilterWhereClauses,\n perFilterLinkedFilters,\n activeFilterCount,\n hasChangesFromInitial,\n reset,\n } = useFilterListState(props);\n\n const uncontrolledAddFilterMode = addFilterMode === \"uncontrolled\";\n\n const handleVisibilityChange = useCallback(\n (visibleKeys: string[], hiddenKeys: string[]) => {\n if (!onFilterVisibilityChange) {\n return;\n }\n const states: Array<{ filterKey: FilterKey<Q>; isVisible: boolean }> = [\n ...visibleKeys.map((key) => ({\n filterKey: key as FilterKey<Q>,\n isVisible: true,\n })),\n ...hiddenKeys.map((key) => ({\n filterKey: key as FilterKey<Q>,\n isVisible: false,\n })),\n ];\n onFilterVisibilityChange(states);\n },\n [onFilterVisibilityChange],\n );\n\n const {\n visibleDefinitions: managedVisibleDefinitions,\n hiddenDefinitions: managedHiddenDefinitions,\n showFilter,\n hideFilter,\n reorderVisible,\n hasVisibilityChanges,\n resetVisibility,\n } = useFilterVisibility(\n filterDefinitions,\n uncontrolledAddFilterMode ? handleVisibilityChange : undefined,\n );\n\n const canReset = hasChangesFromInitial || hasVisibilityChanges;\n\n const handleReset = useCallback(() => {\n reset();\n resetVisibility();\n onReset?.();\n }, [reset, resetVisibility, onReset]);\n\n const simpleVisibleDefinitions = useMemo(() => {\n if (filterDefinitions == null) {\n return undefined;\n }\n return filterDefinitions.filter(\n (def: FilterDefinitionUnion<Q>) => def.isVisible !== false,\n );\n }, [filterDefinitions]);\n\n const effectiveVisibleDefinitions = uncontrolledAddFilterMode\n ? managedVisibleDefinitions\n : simpleVisibleDefinitions;\n\n const handleFilterRemoved = useCallback(\n (filterKey: string) => {\n clearFilterState(filterKey);\n if (uncontrolledAddFilterMode) {\n hideFilter(filterKey);\n }\n onFilterRemoved?.(filterKey);\n },\n [clearFilterState, uncontrolledAddFilterMode, hideFilter, onFilterRemoved],\n );\n\n const handleFilterShown = useCallback(\n (filterKey: string) => {\n showFilter(filterKey);\n onFilterAdded?.(filterKey, filterDefinitions ?? []);\n },\n [showFilter, onFilterAdded, filterDefinitions],\n );\n\n const handleOrderChange = useCallback(\n (orderedKeys: string[]) => {\n reorderVisible(orderedKeys);\n },\n [reorderVisible],\n );\n\n const hiddenFilterItems = useMemo(\n () =>\n managedHiddenDefinitions.map((def) => ({\n key: getFilterKey(def),\n label: getFilterLabel(def),\n })),\n [managedHiddenDefinitions],\n );\n\n const effectiveRenderAddFilterButton = useMemo(() => {\n if (uncontrolledAddFilterMode) {\n if (managedHiddenDefinitions.length === 0) {\n return undefined;\n }\n return () => (\n <AddFilterPopover\n hiddenDefinitions={hiddenFilterItems}\n onShowFilter={handleFilterShown}\n renderTrigger={renderAddFilterButton}\n />\n );\n }\n return renderAddFilterButton;\n }, [\n uncontrolledAddFilterMode,\n managedHiddenDefinitions.length,\n hiddenFilterItems,\n handleFilterShown,\n renderAddFilterButton,\n ]);\n\n const effectiveOnFilterRemoved = uncontrolledAddFilterMode\n ? handleFilterRemoved\n : onFilterRemoved;\n\n const renderInput = useCallback<RenderFilterInput<FilterDefinitionUnion<Q>>>(\n ({\n definition,\n filterKey,\n filterState,\n onFilterStateChanged,\n searchQuery,\n excludeRowOpen,\n }) => (\n <FilterInput\n objectType={objectType}\n objectSet={objectSet}\n definition={definition}\n filterState={filterState}\n onFilterStateChanged={onFilterStateChanged}\n whereClause={perFilterWhereClauses.get(filterKey) ?? EMPTY_WHERE}\n linkedFilters={\n perFilterLinkedFilters.get(filterKey) ?? EMPTY_LINKED_FILTERS\n }\n showFilteredOutValues={showFilteredOutValues}\n searchQuery={searchQuery}\n excludeRowOpen={excludeRowOpen}\n />\n ),\n [\n objectType,\n objectSet,\n perFilterWhereClauses,\n perFilterLinkedFilters,\n showFilteredOutValues,\n ],\n );\n\n return (\n <BaseFilterList\n title={title}\n titleIcon={titleIcon}\n collapsed={collapsed}\n onCollapsedChange={onCollapsedChange}\n filterDefinitions={effectiveVisibleDefinitions}\n filterStates={filterStates}\n onFilterStateChanged={setFilterState}\n renderInput={renderInput}\n getFilterKey={getFilterKey}\n getFilterLabel={getFilterLabel}\n getEmptyDisplayState={getEmptyDisplayState}\n activeFilterCount={activeFilterCount}\n onReset={handleReset}\n showResetButton={showResetButton}\n showActiveFilterCount={showActiveFilterCount}\n canReset={canReset}\n enableSorting={enableSorting}\n onFilterRemoved={effectiveOnFilterRemoved}\n onOrderChange={handleOrderChange}\n className={className}\n renderAddFilterButton={effectiveRenderAddFilterButton}\n />\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FilterList.js","names":["React","useCallback","useMemo","AddFilterPopover","BaseFilterList","FilterInput","useFilterListState","useFilterVisibility","EMPTY_LINKED_FILTERS","getEmptyDisplayState","getFilterKey","getFilterLabel","EMPTY_WHERE","EMPTY_DEFINITIONS","FilterList","props","objectType","objectSet","title","titleIcon","collapsed","onCollapsedChange","filterDefinitions","addFilterMode","showResetButton","onReset","showActiveFilterCount","showFilteredOutValues","className","enableSorting","onFilterAdded","onFilterRemoved","onFilterVisibilityChange","renderAddFilterButton","filterStates","setFilterState","clearFilterState","perFilterWhereClauses","perFilterLinkedFilters","activeFilterCount","hasChangesFromInitial","reset","uncontrolledAddFilterMode","handleVisibilityChange","visibleKeys","hiddenKeys","states","map","key","filterKey","isVisible","visibleDefinitions","managedVisibleDefinitions","hiddenDefinitions","managedHiddenDefinitions","showFilter","hideFilter","reorderVisible","hasVisibilityChanges","resetVisibility","handleReset","simpleVisibleDefinitions","undefined","filter","def","effectiveVisibleDefinitions","handleFilterRemoved","handleFilterShown","handleOrderChange","orderedKeys","hiddenFilterItems","label","effectiveRenderAddFilterButton","length","createElement","onShowFilter","renderTrigger","effectiveOnFilterRemoved","renderInput","definition","filterState","onFilterStateChanged","searchQuery","excludeRowOpen","whereClause","get","linkedFilters","canReset","onOrderChange"],"sources":["FilterList.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 { ObjectTypeDefinition } from \"@osdk/api\";\nimport React, { useCallback, useMemo } from \"react\";\n\nimport { AddFilterPopover } from \"./base/AddFilterPopover.js\";\nimport { BaseFilterList } from \"./base/BaseFilterList.js\";\nimport type { RenderFilterInput } from \"./base/BaseFilterListApi.js\";\nimport { FilterInput } from \"./FilterInput.js\";\nimport type {\n FilterDefinitionUnion,\n FilterKey,\n FilterListProps,\n} from \"./FilterListApi.js\";\nimport { useFilterListState } from \"./hooks/useFilterListState.js\";\nimport { useFilterVisibility } from \"./hooks/useFilterVisibility.js\";\nimport { EMPTY_LINKED_FILTERS } from \"./types/LinkedFilterTypes.js\";\nimport { getEmptyDisplayState } from \"./utils/emptyFilterDisplayState.js\";\nimport { getFilterKey } from \"./utils/getFilterKey.js\";\nimport { getFilterLabel } from \"./utils/getFilterLabel.js\";\n\nconst EMPTY_WHERE = {};\nconst EMPTY_DEFINITIONS: Array<never> = [];\n\nexport function FilterList<Q extends ObjectTypeDefinition>(\n props: FilterListProps<Q>,\n): React.ReactElement {\n const {\n objectType,\n objectSet,\n title,\n titleIcon,\n collapsed,\n onCollapsedChange,\n filterDefinitions,\n addFilterMode = \"uncontrolled\",\n showResetButton = false,\n onReset,\n showActiveFilterCount = false,\n showFilteredOutValues = false,\n className,\n enableSorting,\n onFilterAdded,\n onFilterRemoved,\n onFilterVisibilityChange,\n renderAddFilterButton,\n } = props;\n\n const {\n filterStates,\n setFilterState,\n clearFilterState,\n perFilterWhereClauses,\n perFilterLinkedFilters,\n activeFilterCount,\n hasChangesFromInitial,\n reset,\n } = useFilterListState(props);\n\n const uncontrolledAddFilterMode = addFilterMode === \"uncontrolled\";\n\n const handleVisibilityChange = useCallback(\n (visibleKeys: string[], hiddenKeys: string[]) => {\n if (!onFilterVisibilityChange) {\n return;\n }\n const states: Array<{ filterKey: FilterKey<Q>; isVisible: boolean }> = [\n ...visibleKeys.map((key) => ({\n filterKey: key as FilterKey<Q>,\n isVisible: true,\n })),\n ...hiddenKeys.map((key) => ({\n filterKey: key as FilterKey<Q>,\n isVisible: false,\n })),\n ];\n onFilterVisibilityChange(states);\n },\n [onFilterVisibilityChange],\n );\n\n const {\n visibleDefinitions: managedVisibleDefinitions,\n hiddenDefinitions: managedHiddenDefinitions,\n showFilter,\n hideFilter,\n reorderVisible,\n hasVisibilityChanges,\n resetVisibility,\n } = useFilterVisibility(filterDefinitions, handleVisibilityChange);\n\n const canReset = hasChangesFromInitial || hasVisibilityChanges;\n\n const handleReset = useCallback(() => {\n reset();\n resetVisibility();\n onReset?.();\n }, [reset, resetVisibility, onReset]);\n\n const simpleVisibleDefinitions = useMemo(() => {\n if (filterDefinitions == null) {\n return undefined;\n }\n return filterDefinitions.filter(\n (def: FilterDefinitionUnion<Q>) => def.isVisible !== false,\n );\n }, [filterDefinitions]);\n\n const effectiveVisibleDefinitions = uncontrolledAddFilterMode\n ? managedVisibleDefinitions\n : simpleVisibleDefinitions;\n\n const handleFilterRemoved = useCallback(\n (filterKey: string) => {\n clearFilterState(filterKey);\n if (uncontrolledAddFilterMode) {\n hideFilter(filterKey);\n }\n onFilterRemoved?.(filterKey);\n },\n [clearFilterState, uncontrolledAddFilterMode, hideFilter, onFilterRemoved],\n );\n\n const handleFilterShown = useCallback(\n (filterKey: string) => {\n showFilter(filterKey);\n onFilterAdded?.(filterKey, filterDefinitions ?? EMPTY_DEFINITIONS);\n },\n [showFilter, onFilterAdded, filterDefinitions],\n );\n\n const handleOrderChange = useCallback(\n (orderedKeys: string[]) => {\n reorderVisible(orderedKeys);\n },\n [reorderVisible],\n );\n\n const hiddenFilterItems = useMemo(\n () =>\n managedHiddenDefinitions.map((def) => ({\n key: getFilterKey(def),\n label: getFilterLabel(def),\n })),\n [managedHiddenDefinitions],\n );\n\n const effectiveRenderAddFilterButton = useMemo(() => {\n if (uncontrolledAddFilterMode) {\n if (managedHiddenDefinitions.length === 0) {\n return undefined;\n }\n return () => (\n <AddFilterPopover\n hiddenDefinitions={hiddenFilterItems}\n onShowFilter={handleFilterShown}\n renderTrigger={renderAddFilterButton}\n />\n );\n }\n return renderAddFilterButton;\n }, [\n uncontrolledAddFilterMode,\n managedHiddenDefinitions.length,\n hiddenFilterItems,\n handleFilterShown,\n renderAddFilterButton,\n ]);\n\n const effectiveOnFilterRemoved = uncontrolledAddFilterMode\n ? handleFilterRemoved\n : onFilterRemoved;\n\n const renderInput = useCallback<RenderFilterInput<FilterDefinitionUnion<Q>>>(\n ({\n definition,\n filterKey,\n filterState,\n onFilterStateChanged,\n searchQuery,\n excludeRowOpen,\n }) => (\n <FilterInput\n objectType={objectType}\n objectSet={objectSet}\n definition={definition}\n filterState={filterState}\n onFilterStateChanged={onFilterStateChanged}\n whereClause={perFilterWhereClauses.get(filterKey) ?? EMPTY_WHERE}\n linkedFilters={\n perFilterLinkedFilters.get(filterKey) ?? EMPTY_LINKED_FILTERS\n }\n showFilteredOutValues={showFilteredOutValues}\n searchQuery={searchQuery}\n excludeRowOpen={excludeRowOpen}\n />\n ),\n [\n objectType,\n objectSet,\n perFilterWhereClauses,\n perFilterLinkedFilters,\n showFilteredOutValues,\n ],\n );\n\n return (\n <BaseFilterList\n title={title}\n titleIcon={titleIcon}\n collapsed={collapsed}\n onCollapsedChange={onCollapsedChange}\n filterDefinitions={effectiveVisibleDefinitions}\n filterStates={filterStates}\n onFilterStateChanged={setFilterState}\n renderInput={renderInput}\n getFilterKey={getFilterKey}\n getFilterLabel={getFilterLabel}\n getEmptyDisplayState={getEmptyDisplayState}\n activeFilterCount={activeFilterCount}\n onReset={handleReset}\n showResetButton={showResetButton}\n showActiveFilterCount={showActiveFilterCount}\n canReset={canReset}\n enableSorting={enableSorting}\n onFilterRemoved={effectiveOnFilterRemoved}\n onOrderChange={handleOrderChange}\n className={className}\n renderAddFilterButton={effectiveRenderAddFilterButton}\n />\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterListApi.js","names":[],"sources":["FilterListApi.ts"],"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 LinkNames,\n ObjectSet,\n ObjectTypeDefinition,\n WhereClause,\n} from \"@osdk/api\";\nimport type React from \"react\";\nimport type { ReactNode } from \"react\";\n\nimport type {\n FilterState,\n PropertyFilterDefinition,\n} from \"./FilterListItemApi.js\";\nimport type { CustomFilterDefinition } from \"./types/CustomRendererTypes.js\";\nimport type { KeywordSearchFilterDefinition } from \"./types/KeywordSearchTypes.js\";\nimport type {\n HasLinkFilterDefinition,\n LinkedPropertyFilterDefinition,\n} from \"./types/LinkedFilterTypes.js\";\nimport type { StaticValuesFilterDefinition } from \"./types/StaticValuesTypes.js\";\n\n/**\n * Distributes LinkedPropertyFilterDefinition over each link name individually,\n * so that LinkedQ/LinkedK/LinkedC defaults resolve correctly per link.\n */\ntype DistributeLinkedProperty<\n Q extends ObjectTypeDefinition,\n L extends LinkNames<Q>,\n> = L extends LinkNames<Q> ? LinkedPropertyFilterDefinition<Q, L> : never;\n\n/**\n * Union type of all filter definition types\n */\nexport type FilterDefinitionUnion<Q extends ObjectTypeDefinition> =\n | PropertyFilterDefinition<Q>\n | HasLinkFilterDefinition<Q>\n | DistributeLinkedProperty<Q, LinkNames<Q>>\n | KeywordSearchFilterDefinition<Q>\n | CustomFilterDefinition<Q>\n | StaticValuesFilterDefinition<Q>;\n\n/**\n * Extract the key from a filter definition union\n */\ntype ExtractFilterKey<D> = D extends { key: infer K }\n ? K\n : D extends { linkName: infer L }\n ? L\n : never;\n\nexport type FilterKey<Q extends ObjectTypeDefinition> = ExtractFilterKey<\n FilterDefinitionUnion<Q>\n>;\n\nexport interface FilterListProps<Q extends ObjectTypeDefinition> {\n /**\n * The object type definition for the objects being filtered.\n * Used for metadata resolution (property types, display names).\n */\n objectType: Q;\n\n /**\n * Optional object set to scope aggregation queries. When omitted,\n * aggregations run against the full object type.\n */\n objectSet?: ObjectSet<Q>;\n\n /**\n * Called whenever the filter clause changes. FilterList owns filter state;\n * this is how you read it out, e.g. to feed an `ObjectTable`'s `filter`.\n *\n * `LINKED_PROPERTY` filters are not represented in the clause — use\n * `onEffectiveObjectSet` for those.\n *\n * @param newClause The updated filter clause\n */\n onFilterClauseChanged?: (newClause: WhereClause<Q>) => void;\n\n /**\n * Optional title to display in the filter list header\n */\n title?: ReactNode;\n\n /**\n * Optional icon to display next to the title\n */\n titleIcon?: React.ReactNode;\n\n /**\n * The definition for all supported filter items in the list\n * If not supplied, all filterable properties will be available\n */\n filterDefinitions?: Array<FilterDefinitionUnion<Q>>;\n\n /**\n * Called when filter state changes\n *\n * @param definition The filter definition whose state changed\n * @param newState The updated filter state\n */\n onFilterStateChanged?: (\n definition: FilterDefinitionUnion<Q>,\n newState: FilterState,\n ) => void;\n\n /**\n * Called with the narrowed `ObjectSet` whenever filters change. Requires\n * `objectSet` to be set.\n *\n * A linked filter only narrows the set when its definition has\n * `reverseLinkName`. Linked filters without it are skipped here; read their\n * state from `onFilterStateChanged` instead.\n */\n onEffectiveObjectSet?: (objectSet: ObjectSet<Q>) => void;\n\n /**\n * When `true`, facets render greyed-out count=0 rows for values present in\n * the unfiltered data but excluded by other active filters.\n * @default false\n */\n showFilteredOutValues?: boolean;\n\n /**\n * Controls how filter visibility (add/remove) is managed.\n *\n * - `\"uncontrolled\"` (default): FilterList manages visibility internally.\n * An \"Add filter\" popover is rendered for filters with `isVisible: false`,\n * and each visible filter shows a remove button.\n * - `\"controlled\"`: The consumer manages which filters are visible via\n * `filterDefinitions`. Filters with `isVisible: false` are excluded from\n * the rendered list.\n *\n * @default \"uncontrolled\"\n */\n addFilterMode?: \"controlled\" | \"uncontrolled\";\n\n /**\n * Called
|
|
1
|
+
{"version":3,"file":"FilterListApi.js","names":[],"sources":["FilterListApi.ts"],"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 LinkNames,\n ObjectSet,\n ObjectTypeDefinition,\n WhereClause,\n} from \"@osdk/api\";\nimport type React from \"react\";\nimport type { ReactNode } from \"react\";\n\nimport type {\n FilterState,\n PropertyFilterDefinition,\n} from \"./FilterListItemApi.js\";\nimport type { CustomFilterDefinition } from \"./types/CustomRendererTypes.js\";\nimport type { KeywordSearchFilterDefinition } from \"./types/KeywordSearchTypes.js\";\nimport type {\n HasLinkFilterDefinition,\n LinkedPropertyFilterDefinition,\n} from \"./types/LinkedFilterTypes.js\";\nimport type { StaticValuesFilterDefinition } from \"./types/StaticValuesTypes.js\";\n\n/**\n * Distributes LinkedPropertyFilterDefinition over each link name individually,\n * so that LinkedQ/LinkedK/LinkedC defaults resolve correctly per link.\n */\ntype DistributeLinkedProperty<\n Q extends ObjectTypeDefinition,\n L extends LinkNames<Q>,\n> = L extends LinkNames<Q> ? LinkedPropertyFilterDefinition<Q, L> : never;\n\n/**\n * Union type of all filter definition types\n */\nexport type FilterDefinitionUnion<Q extends ObjectTypeDefinition> =\n | PropertyFilterDefinition<Q>\n | HasLinkFilterDefinition<Q>\n | DistributeLinkedProperty<Q, LinkNames<Q>>\n | KeywordSearchFilterDefinition<Q>\n | CustomFilterDefinition<Q>\n | StaticValuesFilterDefinition<Q>;\n\n/**\n * Extract the key from a filter definition union\n */\ntype ExtractFilterKey<D> = D extends { key: infer K }\n ? K\n : D extends { linkName: infer L }\n ? L\n : never;\n\nexport type FilterKey<Q extends ObjectTypeDefinition> = ExtractFilterKey<\n FilterDefinitionUnion<Q>\n>;\n\nexport interface FilterListProps<Q extends ObjectTypeDefinition> {\n /**\n * The object type definition for the objects being filtered.\n * Used for metadata resolution (property types, display names).\n */\n objectType: Q;\n\n /**\n * Optional object set to scope aggregation queries. When omitted,\n * aggregations run against the full object type.\n */\n objectSet?: ObjectSet<Q>;\n\n /**\n * Called whenever the filter clause changes. FilterList owns filter state;\n * this is how you read it out, e.g. to feed an `ObjectTable`'s `filter`.\n *\n * `LINKED_PROPERTY` filters are not represented in the clause — use\n * `onEffectiveObjectSet` for those.\n *\n * @param newClause The updated filter clause\n */\n onFilterClauseChanged?: (newClause: WhereClause<Q>) => void;\n\n /**\n * Optional title to display in the filter list header\n */\n title?: ReactNode;\n\n /**\n * Optional icon to display next to the title\n */\n titleIcon?: React.ReactNode;\n\n /**\n * The definition for all supported filter items in the list\n * If not supplied, all filterable properties will be available\n */\n filterDefinitions?: Array<FilterDefinitionUnion<Q>>;\n\n /**\n * Called when filter state changes\n *\n * @param definition The filter definition whose state changed\n * @param newState The updated filter state\n */\n onFilterStateChanged?: (\n definition: FilterDefinitionUnion<Q>,\n newState: FilterState,\n ) => void;\n\n /**\n * Called with the narrowed `ObjectSet` whenever filters change. Requires\n * `objectSet` to be set.\n *\n * A linked filter only narrows the set when its definition has\n * `reverseLinkName`. Linked filters without it are skipped here; read their\n * state from `onFilterStateChanged` instead.\n */\n onEffectiveObjectSet?: (objectSet: ObjectSet<Q>) => void;\n\n /**\n * When `true`, facets render greyed-out count=0 rows for values present in\n * the unfiltered data but excluded by other active filters.\n * @default false\n */\n showFilteredOutValues?: boolean;\n\n /**\n * Controls how filter visibility (add/remove) is managed.\n *\n * - `\"uncontrolled\"` (default): FilterList manages visibility internally.\n * An \"Add filter\" popover is rendered for filters with `isVisible: false`,\n * and each visible filter shows a remove button.\n * - `\"controlled\"`: The consumer manages which filters are visible via\n * `filterDefinitions`. Filters with `isVisible: false` are excluded from\n * the rendered list.\n *\n * @default \"uncontrolled\"\n * @deprecated Going away; visibility will always be managed internally.\n * Seed it with `isVisible` on each `filterDefinitions` entry and observe\n * changes with `onFilterVisibilityChange`.\n */\n addFilterMode?: \"controlled\" | \"uncontrolled\";\n\n /**\n * Called after a filter is shown from the built-in \"Add filter\" popover.\n *\n * @param filterKey The key of the added filter\n * @param newDefinitions Deprecated. The `filterDefinitions` you passed in,\n * unchanged — not the post-add state. Use `onFilterVisibilityChange`.\n */\n onFilterAdded?: (\n filterKey: FilterKey<Q>,\n /** @deprecated Use `onFilterVisibilityChange`. */\n newDefinitions: Array<FilterDefinitionUnion<Q>>,\n ) => void;\n\n /**\n * Called after a filter's remove button is clicked, once the filter is\n * hidden and its state cleared.\n *\n * @param filterKey The key of the removed filter\n */\n onFilterRemoved?: (filterKey: FilterKey<Q>) => void;\n\n /**\n * Called when filter visibility or ordering changes, i.e. when filters are\n * reordered, added or removed via the built-in show/remove controls, or\n * reset.\n *\n * Visible filters come first, in display order, followed by the hidden ones.\n * Persist this array and feed it back as the order and `isVisible` of\n * `filterDefinitions` to make reordering survive a remount.\n *\n * @param newStates The filters in current display order with their visibility state\n */\n onFilterVisibilityChange?: (\n newStates: Array<{\n filterKey: FilterKey<Q>;\n isVisible: boolean;\n }>,\n ) => void;\n\n /**\n * Enable drag-and-drop reordering of filters. When `true`, drag handles are\n * rendered and filters can be reordered.\n *\n * Reorder state is managed internally; persist `onFilterVisibilityChange` to\n * track order across remounts.\n *\n * @default false\n */\n enableSorting?: boolean;\n\n /**\n * Whether the filter list panel is collapsed\n */\n collapsed?: boolean;\n\n /**\n * Called when the collapsed state changes\n */\n onCollapsedChange?: (collapsed: boolean) => void;\n\n /**\n * Initial filter states for hydrating from external storage.\n * These states are merged over definition defaults on mount.\n * Use onFilterStateChanged to persist state changes externally.\n */\n initialFilterStates?: Map<string, FilterState>;\n\n /**\n * Show reset filters button in header\n */\n showResetButton?: boolean;\n\n /**\n * Called when reset button is clicked\n */\n onReset?: () => void;\n\n /**\n * Show count of active filters in header\n */\n showActiveFilterCount?: boolean;\n\n /**\n * Additional CSS class name\n */\n className?: string;\n\n /**\n * Custom render function for the \"Add filter\" button. Customizes the trigger\n * element for the built-in add-filter popover; the popover behavior is\n * handled automatically.\n */\n renderAddFilterButton?: () => React.ReactNode;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
const PACKAGE_USER_AGENT = `osdk-react-components/${"0.
|
|
17
|
+
const PACKAGE_USER_AGENT = `osdk-react-components/${"0.49.0-main-ff0ef7e7cc3986538c90f5632028a422b404d2eb"}`;
|
|
18
18
|
export function componentUserAgent(componentName) {
|
|
19
19
|
return `${PACKAGE_USER_AGENT}/${componentName}`;
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserAgent.js","names":["PACKAGE_USER_AGENT","componentUserAgent","componentName"],"sources":["UserAgent.ts"],"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\nconst PACKAGE_USER_AGENT = `osdk-react-components/${process.env.PACKAGE_VERSION}`;\n\nexport function componentUserAgent(componentName: string): string {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,kBAAkB,GAAG,
|
|
1
|
+
{"version":3,"file":"UserAgent.js","names":["PACKAGE_USER_AGENT","componentUserAgent","componentName"],"sources":["UserAgent.ts"],"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\nconst PACKAGE_USER_AGENT = `osdk-react-components/${process.env.PACKAGE_VERSION}`;\n\nexport function componentUserAgent(componentName: string): string {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,kBAAkB,GAAG,iFAAsD;AAEjF,OAAO,SAASC,kBAAkBA,CAACC,aAAqB,EAAU;EAChE,OAAO,GAAGF,kBAAkB,IAAIE,aAAa,EAAE;AACjD","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"AAgBA,cAAc,4BAA4B,WAAY;AACtD,OAAO,WAAqC,OAAQ;AAMpD,cAGE,uBACK,oBAAqB;
|
|
1
|
+
{"mappings":"AAgBA,cAAc,4BAA4B,WAAY;AACtD,OAAO,WAAqC,OAAQ;AAMpD,cAGE,uBACK,oBAAqB;AAW5B,OAAO,iBAAS,WAAW,UAAU,sBACnCA,OAAO,gBAAgB,KACtB,MAAM","names":["props: FilterListProps<Q>"],"sources":["../../../src/filter-list/FilterList.tsx"],"version":3,"file":"FilterList.d.ts"}
|
|
@@ -94,31 +94,34 @@ export interface FilterListProps<Q extends ObjectTypeDefinition> {
|
|
|
94
94
|
* the rendered list.
|
|
95
95
|
*
|
|
96
96
|
* @default "uncontrolled"
|
|
97
|
+
* @deprecated Going away; visibility will always be managed internally.
|
|
98
|
+
* Seed it with `isVisible` on each `filterDefinitions` entry and observe
|
|
99
|
+
* changes with `onFilterVisibilityChange`.
|
|
97
100
|
*/
|
|
98
101
|
addFilterMode?: "controlled" | "uncontrolled";
|
|
99
102
|
/**
|
|
100
|
-
* Called
|
|
101
|
-
*
|
|
102
|
-
* In uncontrolled mode, this fires when a user selects a hidden filter
|
|
103
|
-
* from the "Add filter" popover.
|
|
103
|
+
* Called after a filter is shown from the built-in "Add filter" popover.
|
|
104
104
|
*
|
|
105
105
|
* @param filterKey The key of the added filter
|
|
106
|
-
* @param newDefinitions The
|
|
106
|
+
* @param newDefinitions Deprecated. The `filterDefinitions` you passed in,
|
|
107
|
+
* unchanged — not the post-add state. Use `onFilterVisibilityChange`.
|
|
107
108
|
*/
|
|
108
109
|
onFilterAdded?: (filterKey: FilterKey<Q>, newDefinitions: Array<FilterDefinitionUnion<Q>>) => void;
|
|
109
110
|
/**
|
|
110
|
-
* Called
|
|
111
|
-
*
|
|
112
|
-
* In uncontrolled mode, this fires as a notification after the filter
|
|
113
|
-
* is hidden internally.
|
|
111
|
+
* Called after a filter's remove button is clicked, once the filter is
|
|
112
|
+
* hidden and its state cleared.
|
|
114
113
|
*
|
|
115
114
|
* @param filterKey The key of the removed filter
|
|
116
115
|
*/
|
|
117
116
|
onFilterRemoved?: (filterKey: FilterKey<Q>) => void;
|
|
118
117
|
/**
|
|
119
|
-
* Called when filter visibility or ordering changes, i.e. when filters
|
|
120
|
-
*
|
|
121
|
-
*
|
|
118
|
+
* Called when filter visibility or ordering changes, i.e. when filters are
|
|
119
|
+
* reordered, added or removed via the built-in show/remove controls, or
|
|
120
|
+
* reset.
|
|
121
|
+
*
|
|
122
|
+
* Visible filters come first, in display order, followed by the hidden ones.
|
|
123
|
+
* Persist this array and feed it back as the order and `isVisible` of
|
|
124
|
+
* `filterDefinitions` to make reordering survive a remount.
|
|
122
125
|
*
|
|
123
126
|
* @param newStates The filters in current display order with their visibility state
|
|
124
127
|
*/
|
|
@@ -127,10 +130,13 @@ export interface FilterListProps<Q extends ObjectTypeDefinition> {
|
|
|
127
130
|
isVisible: boolean
|
|
128
131
|
}>) => void;
|
|
129
132
|
/**
|
|
130
|
-
* Enable drag-and-drop reordering of filters.
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
133
|
+
* Enable drag-and-drop reordering of filters. When `true`, drag handles are
|
|
134
|
+
* rendered and filters can be reordered.
|
|
135
|
+
*
|
|
136
|
+
* Reorder state is managed internally; persist `onFilterVisibilityChange` to
|
|
137
|
+
* track order across remounts.
|
|
138
|
+
*
|
|
139
|
+
* @default false
|
|
134
140
|
*/
|
|
135
141
|
enableSorting?: boolean;
|
|
136
142
|
/**
|
|
@@ -164,12 +170,9 @@ export interface FilterListProps<Q extends ObjectTypeDefinition> {
|
|
|
164
170
|
*/
|
|
165
171
|
className?: string;
|
|
166
172
|
/**
|
|
167
|
-
* Custom render function for the "Add filter" button.
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
* add-filter popover. The popover behavior is handled automatically.
|
|
171
|
-
* - In controlled mode: replaces the entire add-filter button area.
|
|
172
|
-
* The consumer is responsible for all add-filter behavior.
|
|
173
|
+
* Custom render function for the "Add filter" button. Customizes the trigger
|
|
174
|
+
* element for the built-in add-filter popover; the popover behavior is
|
|
175
|
+
* handled automatically.
|
|
173
176
|
*/
|
|
174
177
|
renderAddFilterButton?: () => React.ReactNode;
|
|
175
178
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"AAgBA,cACE,WACA,WACA,sBACA,mBACK,WAAY;AACnB,YAAY,WAAW,OAAQ;AAC/B,cAAc,iBAAiB,OAAQ;AAEvC,cACE,aACA,gCACK,wBAAyB;AAChC,cAAc,8BAA8B,gCAAiC;AAC7E,cAAc,qCAAqC,+BAAgC;AACnF,cACE,yBACA,sCACK,8BAA+B;AACtC,cAAc,oCAAoC,8BAA+B;;;;;KAM5E;CACH,UAAU;CACV,UAAU,UAAU;IAClB,UAAU,UAAU,KAAK,+BAA+B,GAAG;;;;AAK/D,YAAY,sBAAsB,UAAU,wBACxC,yBAAyB,KACzB,wBAAwB,KACxB,yBAAyB,GAAG,UAAU,MACtC,8BAA8B,KAC9B,uBAAuB,KACvB,6BAA6B;;;;KAK5B,iBAAiB,KAAK,UAAU;CAAE,WAAW;AAAG,IACjD,IACA,UAAU;CAAE,gBAAgB;AAAG,IAC7B;AAGN,YAAY,UAAU,UAAU,wBAAwB,iBACtD,sBAAsB;AAGxB,iBAAiB,gBAAgB,UAAU,sBAAsB;;;;;CAK/D,YAAY;;;;;CAMZ,YAAY,UAAU;;;;;;;;;;CAWtB,yBAAyBA,WAAW,YAAY;;;;CAKhD,QAAQ;;;;CAKR,YAAY,MAAM;;;;;CAMlB,oBAAoB,MAAM,sBAAsB;;;;;;;CAQhD,wBACEC,YAAY,sBAAsB,IAClCC,UAAU;;;;;;;;;CAWZ,wBAAwBC,WAAW,UAAU;;;;;;CAO7C
|
|
1
|
+
{"mappings":"AAgBA,cACE,WACA,WACA,sBACA,mBACK,WAAY;AACnB,YAAY,WAAW,OAAQ;AAC/B,cAAc,iBAAiB,OAAQ;AAEvC,cACE,aACA,gCACK,wBAAyB;AAChC,cAAc,8BAA8B,gCAAiC;AAC7E,cAAc,qCAAqC,+BAAgC;AACnF,cACE,yBACA,sCACK,8BAA+B;AACtC,cAAc,oCAAoC,8BAA+B;;;;;KAM5E;CACH,UAAU;CACV,UAAU,UAAU;IAClB,UAAU,UAAU,KAAK,+BAA+B,GAAG;;;;AAK/D,YAAY,sBAAsB,UAAU,wBACxC,yBAAyB,KACzB,wBAAwB,KACxB,yBAAyB,GAAG,UAAU,MACtC,8BAA8B,KAC9B,uBAAuB,KACvB,6BAA6B;;;;KAK5B,iBAAiB,KAAK,UAAU;CAAE,WAAW;AAAG,IACjD,IACA,UAAU;CAAE,gBAAgB;AAAG,IAC7B;AAGN,YAAY,UAAU,UAAU,wBAAwB,iBACtD,sBAAsB;AAGxB,iBAAiB,gBAAgB,UAAU,sBAAsB;;;;;CAK/D,YAAY;;;;;CAMZ,YAAY,UAAU;;;;;;;;;;CAWtB,yBAAyBA,WAAW,YAAY;;;;CAKhD,QAAQ;;;;CAKR,YAAY,MAAM;;;;;CAMlB,oBAAoB,MAAM,sBAAsB;;;;;;;CAQhD,wBACEC,YAAY,sBAAsB,IAClCC,UAAU;;;;;;;;;CAWZ,wBAAwBC,WAAW,UAAU;;;;;;CAO7C;;;;;;;;;;;;;;;;CAiBA,gBAAgB,eAAe;;;;;;;;CAS/B,iBACEC,WAAW,UAAU,IAErBC,gBAAgB,MAAM,sBAAsB;;;;;;;CAS9C,mBAAmBD,WAAW,UAAU;;;;;;;;;;;;CAaxC,4BACEE,WAAW,MAAM;EACf,WAAW,UAAU;EACrB;CACD;;;;;;;;;;CAYH;;;;CAKA;;;;CAKA,qBAAqBC;;;;;;CAOrB,sBAAsB,YAAY;;;;CAKlC;;;;CAKA;;;;CAKA;;;;CAKA;;;;;;CAOA,8BAA8B,MAAM;AACrC","names":["newClause: WhereClause<Q>","definition: FilterDefinitionUnion<Q>","newState: FilterState","objectSet: ObjectSet<Q>","filterKey: FilterKey<Q>","newDefinitions: Array<FilterDefinitionUnion<Q>>","newStates: Array<{\n filterKey: FilterKey<Q>;\n isVisible: boolean;\n }>","collapsed: boolean"],"sources":["../../../src/filter-list/FilterListApi.ts"],"version":3,"file":"FilterListApi.d.ts"}
|
package/docs/FilterList.md
CHANGED
|
@@ -66,30 +66,30 @@ function EmployeeFilters() {
|
|
|
66
66
|
|
|
67
67
|
Type parameters: `Q extends ObjectTypeDefinition`
|
|
68
68
|
|
|
69
|
-
| Name | Type | Description
|
|
70
|
-
| -------------------------- | ------------------------------------------------------------------------------------ |
|
|
71
|
-
| `objectType` | `Q` | **Required.** The object type definition for the objects being filtered. Used for metadata resolution (property types, display names).
|
|
72
|
-
| `objectSet` | `ObjectSet<Q>` | Optional object set to scope aggregation queries. When omitted, aggregations run against the full object type.
|
|
73
|
-
| `onFilterClauseChanged` | `(newClause: WhereClause<Q>) => void` | Called whenever the filter clause changes. FilterList owns filter state; this is how you read it out, e.g. to feed an `ObjectTable`'s `filter`.<br /><br />`LINKED_PROPERTY` filters are not represented in the clause — use `onEffectiveObjectSet` for those.
|
|
74
|
-
| `title` | `ReactNode` | Optional title to display in the filter list header
|
|
75
|
-
| `titleIcon` | `React.ReactNode` | Optional icon to display next to the title
|
|
76
|
-
| `filterDefinitions` | `Array<FilterDefinitionUnion<Q>>` | The definition for all supported filter items in the list If not supplied, all filterable properties will be available
|
|
77
|
-
| `onFilterStateChanged` | `(definition: FilterDefinitionUnion<Q>, newState: FilterState) => void` | Called when filter state changes
|
|
78
|
-
| `onEffectiveObjectSet` | `(objectSet: ObjectSet<Q>) => void` | Called with the narrowed `ObjectSet` whenever filters change. Requires `objectSet` to be set.<br /><br />A linked filter only narrows the set when its definition has `reverseLinkName`. Linked filters without it are skipped here; read their state from `onFilterStateChanged` instead.
|
|
79
|
-
| `showFilteredOutValues` | `boolean` | When `true`, facets render greyed-out count=0 rows for values present in the unfiltered data but excluded by other active filters. Defaults to `false`.
|
|
80
|
-
| `addFilterMode` | `"controlled" \| "uncontrolled"` | Controls how filter visibility (add/remove) is managed.<br /><br />- `"uncontrolled"` (default): FilterList manages visibility internally. An "Add filter" popover is rendered for filters with `isVisible: false`, and each visible filter shows a remove button. - `"controlled"`: The consumer manages which filters are visible via `filterDefinitions`. Filters with `isVisible: false` are excluded from the rendered list. Defaults to `"uncontrolled"`. |
|
|
81
|
-
| `onFilterAdded` | `(filterKey: FilterKey<Q>, newDefinitions: Array<FilterDefinitionUnion<Q>>) => void` | Called
|
|
82
|
-
| `onFilterRemoved` | `(filterKey: FilterKey<Q>) => void` | Called
|
|
83
|
-
| `onFilterVisibilityChange` | `(newStates: Array<{ filterKey: FilterKey<Q>; isVisible: boolean; }>) => void` | Called when filter visibility or ordering changes, i.e. when filters are reordered,
|
|
84
|
-
| `enableSorting` | `boolean` | Enable drag-and-drop reordering of filters. When true
|
|
85
|
-
| `collapsed` | `boolean` | Whether the filter list panel is collapsed
|
|
86
|
-
| `onCollapsedChange` | `(collapsed: boolean) => void` | Called when the collapsed state changes
|
|
87
|
-
| `initialFilterStates` | `Map<string, FilterState>` | Initial filter states for hydrating from external storage. These states are merged over definition defaults on mount. Use onFilterStateChanged to persist state changes externally.
|
|
88
|
-
| `showResetButton` | `boolean` | Show reset filters button in header
|
|
89
|
-
| `onReset` | `() => void` | Called when reset button is clicked
|
|
90
|
-
| `showActiveFilterCount` | `boolean` | Show count of active filters in header
|
|
91
|
-
| `className` | `string` | Additional CSS class name
|
|
92
|
-
| `renderAddFilterButton` | `() => React.ReactNode` | Custom render function for the "Add filter" button
|
|
69
|
+
| Name | Type | Description |
|
|
70
|
+
| -------------------------- | ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
71
|
+
| `objectType` | `Q` | **Required.** The object type definition for the objects being filtered. Used for metadata resolution (property types, display names). |
|
|
72
|
+
| `objectSet` | `ObjectSet<Q>` | Optional object set to scope aggregation queries. When omitted, aggregations run against the full object type. |
|
|
73
|
+
| `onFilterClauseChanged` | `(newClause: WhereClause<Q>) => void` | Called whenever the filter clause changes. FilterList owns filter state; this is how you read it out, e.g. to feed an `ObjectTable`'s `filter`.<br /><br />`LINKED_PROPERTY` filters are not represented in the clause — use `onEffectiveObjectSet` for those. |
|
|
74
|
+
| `title` | `ReactNode` | Optional title to display in the filter list header |
|
|
75
|
+
| `titleIcon` | `React.ReactNode` | Optional icon to display next to the title |
|
|
76
|
+
| `filterDefinitions` | `Array<FilterDefinitionUnion<Q>>` | The definition for all supported filter items in the list If not supplied, all filterable properties will be available |
|
|
77
|
+
| `onFilterStateChanged` | `(definition: FilterDefinitionUnion<Q>, newState: FilterState) => void` | Called when filter state changes |
|
|
78
|
+
| `onEffectiveObjectSet` | `(objectSet: ObjectSet<Q>) => void` | Called with the narrowed `ObjectSet` whenever filters change. Requires `objectSet` to be set.<br /><br />A linked filter only narrows the set when its definition has `reverseLinkName`. Linked filters without it are skipped here; read their state from `onFilterStateChanged` instead. |
|
|
79
|
+
| `showFilteredOutValues` | `boolean` | When `true`, facets render greyed-out count=0 rows for values present in the unfiltered data but excluded by other active filters. Defaults to `false`. |
|
|
80
|
+
| `addFilterMode` | `"controlled" \| "uncontrolled"` | **Deprecated** — Going away; visibility will always be managed internally. Seed it with `isVisible` on each `filterDefinitions` entry and observe changes with `onFilterVisibilityChange`. Controls how filter visibility (add/remove) is managed.<br /><br />- `"uncontrolled"` (default): FilterList manages visibility internally. An "Add filter" popover is rendered for filters with `isVisible: false`, and each visible filter shows a remove button. - `"controlled"`: The consumer manages which filters are visible via `filterDefinitions`. Filters with `isVisible: false` are excluded from the rendered list. Defaults to `"uncontrolled"`. |
|
|
81
|
+
| `onFilterAdded` | `(filterKey: FilterKey<Q>, newDefinitions: Array<FilterDefinitionUnion<Q>>) => void` | Called after a filter is shown from the built-in "Add filter" popover. |
|
|
82
|
+
| `onFilterRemoved` | `(filterKey: FilterKey<Q>) => void` | Called after a filter's remove button is clicked, once the filter is hidden and its state cleared. |
|
|
83
|
+
| `onFilterVisibilityChange` | `(newStates: Array<{ filterKey: FilterKey<Q>; isVisible: boolean; }>) => void` | Called when filter visibility or ordering changes, i.e. when filters are reordered, added or removed via the built-in show/remove controls, or reset.<br /><br />Visible filters come first, in display order, followed by the hidden ones. Persist this array and feed it back as the order and `isVisible` of `filterDefinitions` to make reordering survive a remount. |
|
|
84
|
+
| `enableSorting` | `boolean` | Enable drag-and-drop reordering of filters. When `true`, drag handles are rendered and filters can be reordered.<br /><br />Reorder state is managed internally; persist `onFilterVisibilityChange` to track order across remounts. Defaults to `false`. |
|
|
85
|
+
| `collapsed` | `boolean` | Whether the filter list panel is collapsed |
|
|
86
|
+
| `onCollapsedChange` | `(collapsed: boolean) => void` | Called when the collapsed state changes |
|
|
87
|
+
| `initialFilterStates` | `Map<string, FilterState>` | Initial filter states for hydrating from external storage. These states are merged over definition defaults on mount. Use onFilterStateChanged to persist state changes externally. |
|
|
88
|
+
| `showResetButton` | `boolean` | Show reset filters button in header |
|
|
89
|
+
| `onReset` | `() => void` | Called when reset button is clicked |
|
|
90
|
+
| `showActiveFilterCount` | `boolean` | Show count of active filters in header |
|
|
91
|
+
| `className` | `string` | Additional CSS class name |
|
|
92
|
+
| `renderAddFilterButton` | `() => React.ReactNode` | Custom render function for the "Add filter" button. Customizes the trigger element for the built-in add-filter popover; the popover behavior is handled automatically. |
|
|
93
93
|
|
|
94
94
|
<!-- AUTOGEN:props END -->
|
|
95
95
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@osdk/react-components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.49.0-main-ff0ef7e7cc3986538c90f5632028a422b404d2eb",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -203,9 +203,9 @@
|
|
|
203
203
|
},
|
|
204
204
|
"peerDependencies": {
|
|
205
205
|
"@osdk/aip-core": ">=0.5.0 <1.0.0",
|
|
206
|
-
"@osdk/api": "
|
|
207
|
-
"@osdk/client": "
|
|
208
|
-
"@osdk/react": "
|
|
206
|
+
"@osdk/api": ">=2.56.1-beta.0",
|
|
207
|
+
"@osdk/client": ">=2.56.1-beta.0",
|
|
208
|
+
"@osdk/react": ">=2.56.1-beta.0",
|
|
209
209
|
"@types/react": "^17 || ^18 || ^19",
|
|
210
210
|
"classnames": "^2.0.0",
|
|
211
211
|
"react": "^17 || ^18 || ^19",
|
|
@@ -228,11 +228,11 @@
|
|
|
228
228
|
"react-dom": "^18.3.1",
|
|
229
229
|
"typescript": "~5.5.4",
|
|
230
230
|
"@osdk/aip-core": "0.9.0",
|
|
231
|
-
"@osdk/api": "2.56.
|
|
232
|
-
"@osdk/client": "2.56.
|
|
233
|
-
"@osdk/monorepo.tsconfig": "~0.7.0",
|
|
231
|
+
"@osdk/api": "2.56.1-main-ff0ef7e7cc3986538c90f5632028a422b404d2eb",
|
|
232
|
+
"@osdk/client": "2.56.1-main-ff0ef7e7cc3986538c90f5632028a422b404d2eb",
|
|
234
233
|
"@osdk/monorepo.api-extractor": "~0.7.0",
|
|
235
|
-
"@osdk/
|
|
234
|
+
"@osdk/monorepo.tsconfig": "~0.7.0",
|
|
235
|
+
"@osdk/react": "2.56.1-main-ff0ef7e7cc3986538c90f5632028a422b404d2eb"
|
|
236
236
|
},
|
|
237
237
|
"publishConfig": {
|
|
238
238
|
"access": "public"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/util/UserAgent.ts","../../src/util/withOsdkMetrics.ts"],"names":["useRegisterUserAgent","React"],"mappings":";;;;;;;;;;;;AAgBA,IAAM,kBAAA,GAAqB,yBAAyB,QAA2B,CAAA,CAAA;AACxE,SAAS,mBAAmB,aAAA,EAAe;AAChD,EAAA,OAAO,CAAA,EAAG,kBAAkB,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA;AAC/C;;;ACKO,SAAS,eAAA,CAAgB,WAAW,IAAA,EAAM;AAC/C,EAAA,MAAM,UAAU,CAAA,KAAA,KAAS;AACvB,IAAAA,0BAAA,CAAqB,kBAAA,CAAmB,IAAI,CAAC,CAAA;AAC7C,IAAA,uBAAoBC,sBAAA,CAAM,aAAA,CAAc,SAAA,EAAW,KAAK,CAAA;AAAA,EAC1D,CAAA;AACA,EAAA,OAAA,CAAQ,WAAA,GAAc,mBAAmB,IAAI,CAAA,CAAA,CAAA;AAC7C,EAAA,OAAO,OAAA;AACT","file":"chunk-56TROTOG.cjs","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\nconst PACKAGE_USER_AGENT = `osdk-react-components/${process.env.PACKAGE_VERSION}`;\nexport function componentUserAgent(componentName) {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}","/*\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 { useRegisterUserAgent } from \"@osdk/react\";\nimport React from \"react\";\nimport { componentUserAgent } from \"./UserAgent.js\";\n\n// `any` is required: FunctionComponent defaults to FunctionComponent<{}> which\n// rejects components with required props. A generic P parameter doesn't help\n// because TS can't infer both P and C simultaneously from a single argument.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withOsdkMetrics(Component, name) {\n const Wrapped = props => {\n useRegisterUserAgent(componentUserAgent(name));\n return /*#__PURE__*/React.createElement(Component, props);\n };\n Wrapped.displayName = `withOsdkMetrics(${name})`;\n return Wrapped;\n}"]}
|