@osdk/react-components 0.49.0 → 0.50.0-main-41792377143a0de432531919fc11cabde285b402

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.
Files changed (146) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/build/browser/filter-list/FilterList.js +4 -0
  3. package/build/browser/filter-list/FilterList.js.map +1 -1
  4. package/build/browser/filter-list/FilterListApi.js.map +1 -1
  5. package/build/browser/filter-list/base/BaseFilterList.js +21 -7
  6. package/build/browser/filter-list/base/BaseFilterList.js.map +1 -1
  7. package/build/browser/filter-list/base/BaseFilterListApi.js.map +1 -1
  8. package/build/browser/filter-list/base/FilterListHeader.js +2 -1
  9. package/build/browser/filter-list/base/FilterListHeader.js.map +1 -1
  10. package/build/browser/object-table/ColumnConfigDialog.js +15 -20
  11. package/build/browser/object-table/ColumnConfigDialog.js.map +1 -1
  12. package/build/browser/object-table/EditableCell.js +3 -4
  13. package/build/browser/object-table/EditableCell.js.map +1 -1
  14. package/build/browser/object-table/MultiColumnSortDialog.js +12 -15
  15. package/build/browser/object-table/MultiColumnSortDialog.js.map +1 -1
  16. package/build/browser/object-table/ObjectTable.js +1 -3
  17. package/build/browser/object-table/ObjectTable.js.map +1 -1
  18. package/build/browser/object-table/ObjectTableApi.js.map +1 -1
  19. package/build/browser/object-table/SelectionCells.js +2 -5
  20. package/build/browser/object-table/SelectionCells.js.map +1 -1
  21. package/build/browser/object-table/Table.js +3 -7
  22. package/build/browser/object-table/Table.js.map +1 -1
  23. package/build/browser/object-table/TableEditContainer.js +6 -8
  24. package/build/browser/object-table/TableEditContainer.js.map +1 -1
  25. package/build/browser/object-table/TableHeaderWithPopover.js +9 -11
  26. package/build/browser/object-table/TableHeaderWithPopover.js.map +1 -1
  27. package/build/browser/object-table/components/AsyncValueCell.js +2 -4
  28. package/build/browser/object-table/components/AsyncValueCell.js.map +1 -1
  29. package/build/browser/public/experimental/object-table.js.map +1 -1
  30. package/build/browser/util/UserAgent.js +1 -1
  31. package/build/browser/util/UserAgent.js.map +1 -1
  32. package/build/cjs/{chunk-4J74GCJE.cjs → chunk-45OHJ6JU.cjs} +4 -4
  33. package/build/cjs/{chunk-4J74GCJE.cjs.map → chunk-45OHJ6JU.cjs.map} +1 -1
  34. package/build/cjs/{chunk-HYSB5XC7.cjs → chunk-4FAF4WQ2.cjs} +28 -12
  35. package/build/cjs/chunk-4FAF4WQ2.cjs.map +1 -0
  36. package/build/cjs/chunk-5UN4WAN2.cjs +11 -0
  37. package/build/cjs/{chunk-A7JAFDYS.cjs.map → chunk-5UN4WAN2.cjs.map} +1 -1
  38. package/build/cjs/{chunk-IDPY2J4H.cjs → chunk-5YR33EHP.cjs} +4 -4
  39. package/build/cjs/{chunk-IDPY2J4H.cjs.map → chunk-5YR33EHP.cjs.map} +1 -1
  40. package/build/cjs/chunk-73TS5DBG.cjs +11 -0
  41. package/build/cjs/{chunk-EFDPVL2Q.cjs.map → chunk-73TS5DBG.cjs.map} +1 -1
  42. package/build/cjs/{chunk-3CXY3XVX.cjs → chunk-7WZJA6DB.cjs} +4 -4
  43. package/build/cjs/{chunk-3CXY3XVX.cjs.map → chunk-7WZJA6DB.cjs.map} +1 -1
  44. package/build/cjs/chunk-DLS7ECBO.cjs +11 -0
  45. package/build/cjs/{chunk-QV4ZPQCM.cjs.map → chunk-DLS7ECBO.cjs.map} +1 -1
  46. package/build/cjs/{chunk-2RG3GPGR.cjs → chunk-FZN3R3UP.cjs} +4 -4
  47. package/build/cjs/{chunk-2RG3GPGR.cjs.map → chunk-FZN3R3UP.cjs.map} +1 -1
  48. package/build/cjs/chunk-KQ3KHNEA.cjs +11 -0
  49. package/build/cjs/{chunk-B2JJHLEB.cjs.map → chunk-KQ3KHNEA.cjs.map} +1 -1
  50. package/build/cjs/{chunk-MS2NCB4W.cjs → chunk-MZHAP6QG.cjs} +4 -4
  51. package/build/cjs/{chunk-MS2NCB4W.cjs.map → chunk-MZHAP6QG.cjs.map} +1 -1
  52. package/build/cjs/{chunk-RIJBNG4S.cjs → chunk-P5DWI3JR.cjs} +3 -3
  53. package/build/cjs/chunk-P5DWI3JR.cjs.map +1 -0
  54. package/build/cjs/{chunk-KETQ47GR.cjs → chunk-QHK3WJAV.cjs} +398 -491
  55. package/build/cjs/chunk-QHK3WJAV.cjs.map +1 -0
  56. package/build/cjs/{chunk-3QV5V3EM.cjs → chunk-UWSN3NJZ.cjs} +4 -4
  57. package/build/cjs/{chunk-3QV5V3EM.cjs.map → chunk-UWSN3NJZ.cjs.map} +1 -1
  58. package/build/cjs/{chunk-HSWSSM3Q.cjs → chunk-WHIUXGGH.cjs} +4 -4
  59. package/build/cjs/{chunk-HSWSSM3Q.cjs.map → chunk-WHIUXGGH.cjs.map} +1 -1
  60. package/build/cjs/public/experimental/action-form.cjs +4 -4
  61. package/build/cjs/public/experimental/cbac-picker.cjs +11 -11
  62. package/build/cjs/public/experimental/document-viewer.cjs +4 -4
  63. package/build/cjs/public/experimental/email-viewer.cjs +3 -3
  64. package/build/cjs/public/experimental/filter-list.cjs +15 -15
  65. package/build/cjs/public/experimental/filter-list.d.cts +56 -2
  66. package/build/cjs/public/experimental/image-viewer.cjs +3 -3
  67. package/build/cjs/public/experimental/markdown-renderer.cjs +3 -3
  68. package/build/cjs/public/experimental/object-table.cjs +21 -21
  69. package/build/cjs/public/experimental/object-table.d.cts +4 -136
  70. package/build/cjs/public/experimental/pdf-viewer.cjs +7 -7
  71. package/build/cjs/public/experimental/spreadsheet-viewer.cjs +3 -3
  72. package/build/cjs/public/experimental/tiff-renderer.cjs +3 -3
  73. package/build/cjs/public/experimental/video-viewer.cjs +3 -3
  74. package/build/cjs/public/experimental/xml-viewer.cjs +3 -3
  75. package/build/cjs/public/experimental.cjs +71 -71
  76. package/build/cjs/public/experimental.d.cts +1 -1
  77. package/build/esm/filter-list/FilterList.js +4 -0
  78. package/build/esm/filter-list/FilterList.js.map +1 -1
  79. package/build/esm/filter-list/FilterListApi.js.map +1 -1
  80. package/build/esm/filter-list/base/BaseFilterList.js +21 -7
  81. package/build/esm/filter-list/base/BaseFilterList.js.map +1 -1
  82. package/build/esm/filter-list/base/BaseFilterListApi.js.map +1 -1
  83. package/build/esm/filter-list/base/FilterListHeader.js +2 -1
  84. package/build/esm/filter-list/base/FilterListHeader.js.map +1 -1
  85. package/build/esm/object-table/ColumnConfigDialog.js +15 -20
  86. package/build/esm/object-table/ColumnConfigDialog.js.map +1 -1
  87. package/build/esm/object-table/EditableCell.js +3 -4
  88. package/build/esm/object-table/EditableCell.js.map +1 -1
  89. package/build/esm/object-table/MultiColumnSortDialog.js +12 -15
  90. package/build/esm/object-table/MultiColumnSortDialog.js.map +1 -1
  91. package/build/esm/object-table/ObjectTable.js +1 -3
  92. package/build/esm/object-table/ObjectTable.js.map +1 -1
  93. package/build/esm/object-table/ObjectTableApi.js.map +1 -1
  94. package/build/esm/object-table/SelectionCells.js +2 -5
  95. package/build/esm/object-table/SelectionCells.js.map +1 -1
  96. package/build/esm/object-table/Table.js +3 -7
  97. package/build/esm/object-table/Table.js.map +1 -1
  98. package/build/esm/object-table/TableEditContainer.js +6 -8
  99. package/build/esm/object-table/TableEditContainer.js.map +1 -1
  100. package/build/esm/object-table/TableHeaderWithPopover.js +9 -11
  101. package/build/esm/object-table/TableHeaderWithPopover.js.map +1 -1
  102. package/build/esm/object-table/components/AsyncValueCell.js +2 -4
  103. package/build/esm/object-table/components/AsyncValueCell.js.map +1 -1
  104. package/build/esm/public/experimental/object-table.js.map +1 -1
  105. package/build/esm/util/UserAgent.js +1 -1
  106. package/build/esm/util/UserAgent.js.map +1 -1
  107. package/build/types/filter-list/FilterListApi.d.ts +26 -2
  108. package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
  109. package/build/types/filter-list/base/BaseFilterListApi.d.ts +30 -0
  110. package/build/types/filter-list/base/BaseFilterListApi.d.ts.map +1 -1
  111. package/build/types/filter-list/base/FilterListHeader.d.ts +2 -1
  112. package/build/types/filter-list/base/FilterListHeader.d.ts.map +1 -1
  113. package/build/types/object-table/ColumnConfigDialog.d.ts +1 -10
  114. package/build/types/object-table/ColumnConfigDialog.d.ts.map +1 -1
  115. package/build/types/object-table/EditableCell.d.ts.map +1 -1
  116. package/build/types/object-table/MultiColumnSortDialog.d.ts +1 -10
  117. package/build/types/object-table/MultiColumnSortDialog.d.ts.map +1 -1
  118. package/build/types/object-table/ObjectTable.d.ts +1 -1
  119. package/build/types/object-table/ObjectTable.d.ts.map +1 -1
  120. package/build/types/object-table/ObjectTableApi.d.ts +0 -9
  121. package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
  122. package/build/types/object-table/SelectionCells.d.ts.map +1 -1
  123. package/build/types/object-table/Table.d.ts +0 -7
  124. package/build/types/object-table/Table.d.ts.map +1 -1
  125. package/build/types/object-table/TableEditContainer.d.ts.map +1 -1
  126. package/build/types/object-table/TableHeaderWithPopover.d.ts.map +1 -1
  127. package/build/types/object-table/components/AsyncValueCell.d.ts.map +1 -1
  128. package/build/types/public/experimental/object-table.d.ts +0 -1
  129. package/build/types/public/experimental/object-table.d.ts.map +1 -1
  130. package/docs/FilterList.md +59 -13
  131. package/docs/ObjectTable.md +0 -1
  132. package/docs/ObjectTableOverview.md +0 -2
  133. package/package.json +3 -3
  134. package/build/browser/object-table/ObjectTableLabels.js +0 -130
  135. package/build/browser/object-table/ObjectTableLabels.js.map +0 -1
  136. package/build/cjs/chunk-A7JAFDYS.cjs +0 -11
  137. package/build/cjs/chunk-B2JJHLEB.cjs +0 -11
  138. package/build/cjs/chunk-EFDPVL2Q.cjs +0 -11
  139. package/build/cjs/chunk-HYSB5XC7.cjs.map +0 -1
  140. package/build/cjs/chunk-KETQ47GR.cjs.map +0 -1
  141. package/build/cjs/chunk-QV4ZPQCM.cjs +0 -11
  142. package/build/cjs/chunk-RIJBNG4S.cjs.map +0 -1
  143. package/build/esm/object-table/ObjectTableLabels.js +0 -130
  144. package/build/esm/object-table/ObjectTableLabels.js.map +0 -1
  145. package/build/types/object-table/ObjectTableLabels.d.ts +0 -135
  146. package/build/types/object-table/ObjectTableLabels.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # @osdk/react-components
2
2
 
3
+ ## 0.50.0-main-41792377143a0de432531919fc11cabde285b402
4
+
5
+ ### Minor Changes
6
+
7
+ - 710ee1d: FilterList: support both controlled and uncontrolled collapse. `onCollapsedChange` no longer gates the collapse control — it is now purely an event listener that fires in both modes. Pass `collapsed` for controlled mode or the new `defaultCollapsed` to seed uncontrolled mode; `collapsed` takes precedence when both are given. Previously `collapsed` did nothing unless `onCollapsedChange` was also supplied. The new `enableCollapse` prop defaults to `true`, so existing collapse setups keep working and lists that had no collapse control gain one; pass `enableCollapse={false}` to opt out.
8
+ - 4179237: Revert labels override on ObjectTable in PR 3697
9
+
3
10
  ## 0.49.0
4
11
 
5
12
  ### Minor Changes
@@ -32,6 +32,8 @@ export function FilterList(props) {
32
32
  objectSet,
33
33
  title,
34
34
  titleIcon,
35
+ enableCollapse,
36
+ defaultCollapsed,
35
37
  collapsed,
36
38
  onCollapsedChange,
37
39
  filterDefinitions,
@@ -146,6 +148,8 @@ export function FilterList(props) {
146
148
  return /*#__PURE__*/React.createElement(BaseFilterList, {
147
149
  title: title,
148
150
  titleIcon: titleIcon,
151
+ enableCollapse: enableCollapse,
152
+ defaultCollapsed: defaultCollapsed,
149
153
  collapsed: collapsed,
150
154
  onCollapsedChange: onCollapsedChange,
151
155
  filterDefinitions: effectiveVisibleDefinitions,
@@ -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","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":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAEnD,SAASC,gBAAgB,QAAQ,4BAA4B;AAC7D,SAASC,cAAc,QAAQ,0BAA0B;AAEzD,SAASC,WAAW,QAAQ,kBAAkB;AAM9C,SAASC,kBAAkB,QAAQ,+BAA+B;AAClE,SAASC,mBAAmB,QAAQ,gCAAgC;AACpE,SAASC,oBAAoB,QAAQ,8BAA8B;AACnE,SAASC,oBAAoB,QAAQ,oCAAoC;AACzE,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAASC,cAAc,QAAQ,2BAA2B;AAE1D,MAAMC,WAAW,GAAG,CAAC,CAAC;AACtB,MAAMC,iBAA+B,GAAG,EAAE;AAE1C,OAAO,SAASC,UAAUA,CACxBC,KAAyB,EACL;EACpB,MAAM;IACJC,UAAU;IACVC,SAAS;IACTC,KAAK;IACLC,SAAS;IACTC,SAAS;IACTC,iBAAiB;IACjBC,iBAAiB;IACjBC,aAAa,GAAG,cAAc;IAC9BC,eAAe,GAAG,KAAK;IACvBC,OAAO;IACPC,qBAAqB,GAAG,KAAK;IAC7BC,qBAAqB,GAAG,KAAK;IAC7BC,SAAS;IACTC,aAAa;IACbC,aAAa;IACbC,eAAe;IACfC,wBAAwB;IACxBC;EACF,CAAC,GAAGlB,KAAK;EAET,MAAM;IACJmB,YAAY;IACZC,cAAc;IACdC,gBAAgB;IAChBC,qBAAqB;IACrBC,sBAAsB;IACtBC,iBAAiB;IACjBC,qBAAqB;IACrBC;EACF,CAAC,GAAGnC,kBAAkB,CAACS,KAAK,CAAC;EAE7B,MAAM2B,yBAAyB,GAAGnB,aAAa,KAAK,cAAc;EAElE,MAAMoB,sBAAsB,GAAG1C,WAAW,CACxC,CAAC2C,WAAqB,EAAEC,UAAoB,KAAK;IAC/C,IAAI,CAACb,wBAAwB,EAAE;MAC7B;IACF;IACA,MAAMc,MAA8D,GAAG,CACrE,GAAGF,WAAW,CAACG,GAAG,CAAEC,GAAG,KAAM;MAC3BC,SAAS,EAAED,GAAmB;MAC9BE,SAAS,EAAE;IACb,CAAC,CAAC,CAAC,EACH,GAAGL,UAAU,CAACE,GAAG,CAAEC,GAAG,KAAM;MAC1BC,SAAS,EAAED,GAAmB;MAC9BE,SAAS,EAAE;IACb,CAAC,CAAC,CAAC,CACJ;IACDlB,wBAAwB,CAACc,MAAM,CAAC;EAClC,CAAC,EACD,CAACd,wBAAwB,CAC3B,CAAC;EAED,MAAM;IACJmB,kBAAkB,EAAEC,yBAAyB;IAC7CC,iBAAiB,EAAEC,wBAAwB;IAC3CC,UAAU;IACVC,UAAU;IACVC,cAAc;IACdC,oBAAoB;IACpBC;EACF,CAAC,GAAGpD,mBAAmB,CAACe,iBAAiB,EAAEqB,sBAAsB,CAAC;EAIlE,MAAMiB,WAAW,GAAG3D,WAAW,CAAC,MAAM;IACpCwC,KAAK,CAAC,CAAC;IACPkB,eAAe,CAAC,CAAC;IACjBlC,OAAO,GAAG,CAAC;EACb,CAAC,EAAE,CAACgB,KAAK,EAAEkB,eAAe,EAAElC,OAAO,CAAC,CAAC;EAErC,MAAMoC,wBAAwB,GAAG3D,OAAO,CAAC,MAAM;IAC7C,IAAIoB,iBAAiB,IAAI,IAAI,EAAE;MAC7B,OAAOwC,SAAS;IAClB;IACA,OAAOxC,iBAAiB,CAACyC,MAAM,CAC5BC,GAA6B,IAAKA,GAAG,CAACd,SAAS,KAAK,KACvD,CAAC;EACH,CAAC,EAAE,CAAC5B,iBAAiB,CAAC,CAAC;EAEvB,MAAM2C,2BAA2B,GAAGvB,yBAAyB,GACzDU,yBAAyB,GACzBS,wBAAwB;EAE5B,MAAMK,mBAAmB,GAAGjE,WAAW,CACpCgD,SAAiB,IAAK;IACrBb,gBAAgB,CAACa,SAAS,CAAC;IAC3B,IAAIP,yBAAyB,EAAE;MAC7Bc,UAAU,CAACP,SAAS,CAAC;IACvB;IACAlB,eAAe,GAAGkB,SAAS,CAAC;EAC9B,CAAC,EACD,CAACb,gBAAgB,EAAEM,yBAAyB,EAAEc,UAAU,EAAEzB,eAAe,CAC3E,CAAC;EAED,MAAMoC,iBAAiB,GAAGlE,WAAW,CAClCgD,SAAiB,IAAK;IACrBM,UAAU,CAACN,SAAS,CAAC;IACrBnB,aAAa,GAAGmB,SAAS,EAAE3B,iBAAiB,IAAIT,iBAAiB,CAAC;EACpE,CAAC,EACD,CAAC0C,UAAU,EAAEzB,aAAa,EAAER,iBAAiB,CAC/C,CAAC;EAED,MAAM8C,iBAAiB,GAAGnE,WAAW,CAClCoE,WAAqB,IAAK;IACzBZ,cAAc,CAACY,WAAW,CAAC;EAC7B,CAAC,EACD,CAACZ,cAAc,CACjB,CAAC;EAED,MAAMa,iBAAiB,GAAGpE,OAAO,CAC/B,MACEoD,wBAAwB,CAACP,GAAG,CAAEiB,GAAG,KAAM;IACrChB,GAAG,EAAEtC,YAAY,CAACsD,GAAG,CAAC;IACtBO,KAAK,EAAE5D,cAAc,CAACqD,GAAG;EAC3B,CAAC,CAAC,CAAC,EACL,CAACV,wBAAwB,CAC3B,CAAC;EAED,MAAMkB,8BAA8B,GAAGtE,OAAO,CAAC,MAAM;IACnD,IAAIwC,yBAAyB,EAAE;MAC7B,IAAIY,wBAAwB,CAACmB,MAAM,KAAK,CAAC,EAAE;QACzC,OAAOX,SAAS;MAClB;MACA,OAAO,mBACL9D,KAAA,CAAA0E,aAAA,CAACvE,gBAAgB;QACfkD,iBAAiB,EAAEiB,iBAAkB;QACrCK,YAAY,EAAER,iBAAkB;QAChCS,aAAa,EAAE3C;MAAsB,CACtC,CACF;IACH;IACA,OAAOA,qBAAqB;EAC9B,CAAC,EAAE,CACDS,yBAAyB,EACzBY,wBAAwB,CAACmB,MAAM,EAC/BH,iBAAiB,EACjBH,iBAAiB,EACjBlC,qBAAqB,CACtB,CAAC;EAEF,MAAM4C,wBAAwB,GAAGnC,yBAAyB,GACtDwB,mBAAmB,GACnBnC,eAAe;EAEnB,MAAM+C,WAAW,GAAG7E,WAAW,CAC7B,CAAC;IACC8E,UAAU;IACV9B,SAAS;IACT+B,WAAW;IACXC,oBAAoB;IACpBC,WAAW;IACXC;EACF,CAAC,kBACCnF,KAAA,CAAA0E,aAAA,CAACrE,WAAW;IACVW,UAAU,EAAEA,UAAW;IACvBC,SAAS,EAAEA,SAAU;IACrB8D,UAAU,EAAEA,UAAW;IACvBC,WAAW,EAAEA,WAAY;IACzBC,oBAAoB,EAAEA,oBAAqB;IAC3CG,WAAW,EAAE/C,qBAAqB,CAACgD,GAAG,CAACpC,SAAS,CAAC,IAAIrC,WAAY;IACjE0E,aAAa,EACXhD,sBAAsB,CAAC+C,GAAG,CAACpC,SAAS,CAAC,IAAIzC,oBAC1C;IACDmB,qBAAqB,EAAEA,qBAAsB;IAC7CuD,WAAW,EAAEA,WAAY;IACzBC,cAAc,EAAEA;EAAe,CAChC,CACF,EACD,CACEnE,UAAU,EACVC,SAAS,EACToB,qBAAqB,EACrBC,sBAAsB,EACtBX,qBAAqB,CAEzB,CAAC;EAED,oBACE3B,KAAA,CAAA0E,aAAA,CAACtE,cAAc;IACbc,KAAK,EAAEA,KAAM;IACbC,SAAS,EAAEA,SAAU;IACrBC,SAAS,EAAEA,SAAU;IACrBC,iBAAiB,EAAEA,iBAAkB;IACrCC,iBAAiB,EAAE2C,2BAA4B;IAC/C/B,YAAY,EAAEA,YAAa;IAC3B+C,oBAAoB,EAAE9C,cAAe;IACrC2C,WAAW,EAAEA,WAAY;IACzBpE,YAAY,EAAEA,YAAa;IAC3BC,cAAc,EAAEA,cAAe;IAC/BF,oBAAoB,EAAEA,oBAAqB;IAC3C8B,iBAAiB,EAAEA,iBAAkB;IACrCd,OAAO,EAAEmC,WAAY;IACrBpC,eAAe,EAAEA,eAAgB;IACjCE,qBAAqB,EAAEA,qBAAsB;IAC7C6D,QAAQ,EApIK/C,qBAAqB,IAAIkB,oBAoInB;IACnB7B,aAAa,EAAEA,aAAc;IAC7BE,eAAe,EAAE8C,wBAAyB;IAC1CW,aAAa,EAAEpB,iBAAkB;IACjCxC,SAAS,EAAEA,SAAU;IACrBK,qBAAqB,EAAEuC;EAA+B,CACvD,CAAC;AAEN","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","enableCollapse","defaultCollapsed","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 enableCollapse,\n defaultCollapsed,\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 enableCollapse={enableCollapse}\n defaultCollapsed={defaultCollapsed}\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 * @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":[]}
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 collapse/expand control is available. When `false` the panel is\n * always expanded, no collapse control is rendered, and `collapsed` /\n * `defaultCollapsed` are ignored.\n * @default true\n */\n enableCollapse?: boolean;\n\n /**\n * Controlled mode. When supplied, this prop is the source of truth for\n * whether the panel is collapsed and the component keeps no internal state;\n * re-render with a new value in response to `onCollapsedChange`.\n *\n * If both `collapsed` and `defaultCollapsed` are provided, `collapsed` takes\n * precedence. Ignored when `enableCollapse` is `false`.\n */\n collapsed?: boolean;\n\n /**\n * Uncontrolled mode. Seeds the panel's internal collapsed state; the\n * component continues to own the state after mount, so later changes to this\n * prop are ignored.\n *\n * If both `collapsed` and `defaultCollapsed` are provided, `collapsed` takes\n * precedence. Ignored when `enableCollapse` is `false`.\n * @default false\n */\n defaultCollapsed?: boolean;\n\n /**\n * Called whenever the collapsed state changes.\n *\n * @param collapsed The new collapsed state\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":[]}
@@ -26,7 +26,9 @@ export function BaseFilterList(props) {
26
26
  const {
27
27
  title,
28
28
  titleIcon,
29
- collapsed = false,
29
+ enableCollapse = true,
30
+ collapsed,
31
+ defaultCollapsed,
30
32
  onCollapsedChange,
31
33
  filterDefinitions,
32
34
  filterStates,
@@ -48,10 +50,21 @@ export function BaseFilterList(props) {
48
50
  renderAddFilterButton
49
51
  } = props;
50
52
  const [boundaryElement, setBoundaryElement] = useState(null);
53
+
54
+ // The collapsed state in uncontrolled mode.
55
+ const [internalCollapsed, setInternalCollapsed] = useState(() => defaultCollapsed ?? false);
56
+ const isCollapsedControlled = collapsed !== undefined;
57
+ const collapsedState = isCollapsedControlled ? collapsed : internalCollapsed;
58
+ const handleCollapsedChange = useCallback(next => {
59
+ if (!isCollapsedControlled) {
60
+ setInternalCollapsed(next);
61
+ }
62
+ onCollapsedChange?.(next);
63
+ }, [isCollapsedControlled, onCollapsedChange]);
51
64
  const handleExpand = useCallback(() => {
52
- onCollapsedChange?.(false);
53
- }, [onCollapsedChange]);
54
- const isCollapsed = collapsed && onCollapsedChange != null;
65
+ handleCollapsedChange(false);
66
+ }, [handleCollapsedChange]);
67
+ const isCollapsed = enableCollapse && collapsedState;
55
68
  return /*#__PURE__*/React.createElement("div", {
56
69
  className: classnames(styles.filterList, className)
57
70
  }, isCollapsed && /*#__PURE__*/React.createElement("div", {
@@ -69,11 +82,12 @@ export function BaseFilterList(props) {
69
82
  "data-active-count": activeFilterCount
70
83
  }, /*#__PURE__*/React.createElement(FilterListBoundaryProvider, {
71
84
  value: boundaryElement
72
- }, (title || titleIcon || showResetButton || showActiveFilterCount || onCollapsedChange) && /*#__PURE__*/React.createElement(FilterListHeader, {
85
+ }, (title || titleIcon || showResetButton || showActiveFilterCount || enableCollapse) && /*#__PURE__*/React.createElement(FilterListHeader, {
73
86
  title: title,
74
87
  titleIcon: titleIcon,
75
- collapsed: collapsed,
76
- onCollapsedChange: onCollapsedChange,
88
+ showCollapseButton: enableCollapse,
89
+ collapsed: isCollapsed,
90
+ onCollapsedChange: handleCollapsedChange,
77
91
  showResetButton: showResetButton,
78
92
  onReset: onReset,
79
93
  showActiveFilterCount: showActiveFilterCount,
@@ -1 +1 @@
1
- {"version":3,"file":"BaseFilterList.js","names":["Button","classnames","React","useCallback","useState","ExpandIcon","FilterListBoundaryProvider","FilterListContent","FilterListHeader","styles","BaseFilterList","props","title","titleIcon","collapsed","onCollapsedChange","filterDefinitions","filterStates","onFilterStateChanged","renderInput","getFilterKey","getFilterLabel","getEmptyDisplayState","activeFilterCount","onReset","onFilterAdded","onFilterRemoved","onOrderChange","showResetButton","showActiveFilterCount","canReset","enableSorting","className","renderAddFilterButton","boundaryElement","setBoundaryElement","handleExpand","isCollapsed","createElement","filterList","filterListCollapsed","expandButton","onClick","collapsedLabel","ref","expandedContent","hiddenContent","value","scrollableContent","addButtonContainer","type","addButton"],"sources":["BaseFilterList.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport classnames from \"classnames\";\nimport React, { useCallback, useState } from \"react\";\n\nimport type { FilterDefinitionControls } from \"../FilterListItemApi.js\";\nimport type { BaseFilterListProps } from \"./BaseFilterListApi.js\";\nimport { ExpandIcon } from \"./FilterIcons.js\";\nimport { FilterListBoundaryProvider } from \"./FilterListBoundaryContext.js\";\nimport { FilterListContent } from \"./FilterListContent.js\";\nimport { FilterListHeader } from \"./FilterListHeader.js\";\n\nimport styles from \"./FilterList.module.css\";\n\nexport function BaseFilterList<D extends FilterDefinitionControls>(\n props: BaseFilterListProps<D>,\n): React.ReactElement {\n const {\n title,\n titleIcon,\n collapsed = false,\n onCollapsedChange,\n filterDefinitions,\n filterStates,\n onFilterStateChanged,\n renderInput,\n getFilterKey,\n getFilterLabel,\n getEmptyDisplayState,\n activeFilterCount,\n onReset,\n onFilterAdded,\n onFilterRemoved,\n onOrderChange,\n showResetButton = false,\n showActiveFilterCount = false,\n canReset,\n enableSorting,\n className,\n renderAddFilterButton,\n } = props;\n\n const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(\n null,\n );\n\n const showHeader =\n title ||\n titleIcon ||\n showResetButton ||\n showActiveFilterCount ||\n onCollapsedChange;\n\n const showAddButton = renderAddFilterButton != null || onFilterAdded != null;\n\n const handleExpand = useCallback(() => {\n onCollapsedChange?.(false);\n }, [onCollapsedChange]);\n\n const isCollapsed = collapsed && onCollapsedChange != null;\n\n return (\n <div className={classnames(styles.filterList, className)}>\n {isCollapsed && (\n <div className={styles.filterListCollapsed} data-collapsed=\"true\">\n <Button\n className={styles.expandButton}\n onClick={handleExpand}\n aria-label=\"Expand filters\"\n >\n <ExpandIcon />\n </Button>\n <span className={styles.collapsedLabel}>{title ?? \"Filters\"}</span>\n </div>\n )}\n <div\n ref={setBoundaryElement}\n className={classnames(\n styles.expandedContent,\n isCollapsed && styles.hiddenContent,\n )}\n data-active-count={activeFilterCount}\n >\n <FilterListBoundaryProvider value={boundaryElement}>\n {showHeader && (\n <FilterListHeader\n title={title}\n titleIcon={titleIcon}\n collapsed={collapsed}\n onCollapsedChange={onCollapsedChange}\n showResetButton={showResetButton}\n onReset={onReset}\n showActiveFilterCount={showActiveFilterCount}\n activeFilterCount={activeFilterCount}\n canReset={canReset}\n />\n )}\n\n <div className={styles.scrollableContent}>\n <FilterListContent\n filterDefinitions={filterDefinitions}\n filterStates={filterStates}\n onFilterStateChanged={onFilterStateChanged}\n onFilterRemoved={onFilterRemoved}\n onOrderChange={onOrderChange}\n renderInput={renderInput}\n getFilterKey={getFilterKey}\n getFilterLabel={getFilterLabel}\n getEmptyDisplayState={getEmptyDisplayState}\n enableSorting={enableSorting}\n />\n </div>\n\n {showAddButton && (\n <div className={styles.addButtonContainer}>\n {renderAddFilterButton ? (\n renderAddFilterButton()\n ) : (\n <Button\n type=\"button\"\n className={styles.addButton}\n onClick={onFilterAdded}\n >\n + Add filter\n </Button>\n )}\n </div>\n )}\n </FilterListBoundaryProvider>\n </div>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BaseFilterList.js","names":["Button","classnames","React","useCallback","useState","ExpandIcon","FilterListBoundaryProvider","FilterListContent","FilterListHeader","styles","BaseFilterList","props","title","titleIcon","enableCollapse","collapsed","defaultCollapsed","onCollapsedChange","filterDefinitions","filterStates","onFilterStateChanged","renderInput","getFilterKey","getFilterLabel","getEmptyDisplayState","activeFilterCount","onReset","onFilterAdded","onFilterRemoved","onOrderChange","showResetButton","showActiveFilterCount","canReset","enableSorting","className","renderAddFilterButton","boundaryElement","setBoundaryElement","internalCollapsed","setInternalCollapsed","isCollapsedControlled","undefined","collapsedState","handleCollapsedChange","next","handleExpand","isCollapsed","createElement","filterList","filterListCollapsed","expandButton","onClick","collapsedLabel","ref","expandedContent","hiddenContent","value","showCollapseButton","scrollableContent","addButtonContainer","type","addButton"],"sources":["BaseFilterList.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport classnames from \"classnames\";\nimport React, { useCallback, useState } from \"react\";\n\nimport type { FilterDefinitionControls } from \"../FilterListItemApi.js\";\nimport type { BaseFilterListProps } from \"./BaseFilterListApi.js\";\nimport { ExpandIcon } from \"./FilterIcons.js\";\nimport { FilterListBoundaryProvider } from \"./FilterListBoundaryContext.js\";\nimport { FilterListContent } from \"./FilterListContent.js\";\nimport { FilterListHeader } from \"./FilterListHeader.js\";\n\nimport styles from \"./FilterList.module.css\";\n\nexport function BaseFilterList<D extends FilterDefinitionControls>(\n props: BaseFilterListProps<D>,\n): React.ReactElement {\n const {\n title,\n titleIcon,\n enableCollapse = true,\n collapsed,\n defaultCollapsed,\n onCollapsedChange,\n filterDefinitions,\n filterStates,\n onFilterStateChanged,\n renderInput,\n getFilterKey,\n getFilterLabel,\n getEmptyDisplayState,\n activeFilterCount,\n onReset,\n onFilterAdded,\n onFilterRemoved,\n onOrderChange,\n showResetButton = false,\n showActiveFilterCount = false,\n canReset,\n enableSorting,\n className,\n renderAddFilterButton,\n } = props;\n\n const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(\n null,\n );\n\n // The collapsed state in uncontrolled mode.\n const [internalCollapsed, setInternalCollapsed] = useState(\n () => defaultCollapsed ?? false,\n );\n\n const isCollapsedControlled = collapsed !== undefined;\n const collapsedState = isCollapsedControlled ? collapsed : internalCollapsed;\n\n const showHeader =\n title ||\n titleIcon ||\n showResetButton ||\n showActiveFilterCount ||\n enableCollapse;\n\n const showAddButton = renderAddFilterButton != null || onFilterAdded != null;\n\n const handleCollapsedChange = useCallback(\n (next: boolean) => {\n if (!isCollapsedControlled) {\n setInternalCollapsed(next);\n }\n onCollapsedChange?.(next);\n },\n [isCollapsedControlled, onCollapsedChange],\n );\n\n const handleExpand = useCallback(() => {\n handleCollapsedChange(false);\n }, [handleCollapsedChange]);\n\n const isCollapsed = enableCollapse && collapsedState;\n\n return (\n <div className={classnames(styles.filterList, className)}>\n {isCollapsed && (\n <div className={styles.filterListCollapsed} data-collapsed=\"true\">\n <Button\n className={styles.expandButton}\n onClick={handleExpand}\n aria-label=\"Expand filters\"\n >\n <ExpandIcon />\n </Button>\n <span className={styles.collapsedLabel}>{title ?? \"Filters\"}</span>\n </div>\n )}\n <div\n ref={setBoundaryElement}\n className={classnames(\n styles.expandedContent,\n isCollapsed && styles.hiddenContent,\n )}\n data-active-count={activeFilterCount}\n >\n <FilterListBoundaryProvider value={boundaryElement}>\n {showHeader && (\n <FilterListHeader\n title={title}\n titleIcon={titleIcon}\n showCollapseButton={enableCollapse}\n collapsed={isCollapsed}\n onCollapsedChange={handleCollapsedChange}\n showResetButton={showResetButton}\n onReset={onReset}\n showActiveFilterCount={showActiveFilterCount}\n activeFilterCount={activeFilterCount}\n canReset={canReset}\n />\n )}\n\n <div className={styles.scrollableContent}>\n <FilterListContent\n filterDefinitions={filterDefinitions}\n filterStates={filterStates}\n onFilterStateChanged={onFilterStateChanged}\n onFilterRemoved={onFilterRemoved}\n onOrderChange={onOrderChange}\n renderInput={renderInput}\n getFilterKey={getFilterKey}\n getFilterLabel={getFilterLabel}\n getEmptyDisplayState={getEmptyDisplayState}\n enableSorting={enableSorting}\n />\n </div>\n\n {showAddButton && (\n <div className={styles.addButtonContainer}>\n {renderAddFilterButton ? (\n renderAddFilterButton()\n ) : (\n <Button\n type=\"button\"\n className={styles.addButton}\n onClick={onFilterAdded}\n >\n + Add filter\n </Button>\n )}\n </div>\n )}\n </FilterListBoundaryProvider>\n </div>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"BaseFilterListApi.js","names":[],"sources":["BaseFilterListApi.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 React from \"react\";\n\nimport type {\n FilterDefinitionControls,\n FilterState,\n} from \"../FilterListItemApi.js\";\n\nexport type RenderFilterInput<D> = (props: {\n definition: D;\n filterKey: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n searchQuery?: string;\n excludeRowOpen?: boolean;\n}) => React.ReactNode;\n\nexport interface BaseFilterListProps<D extends FilterDefinitionControls> {\n filterDefinitions?: Array<D>;\n filterStates: Map<string, FilterState>;\n onFilterStateChanged: (filterKey: string, state: FilterState) => void;\n renderInput: RenderFilterInput<D>;\n getFilterKey: (definition: D) => string;\n getFilterLabel: (definition: D) => string;\n /**\n * Display-only fallback state for a filter that has no stored state, used so\n * capability-driven header controls (overflow … menu, search) render for\n * empty/just-added filters. Never written into the filter-state map.\n */\n getEmptyDisplayState?: (definition: D) => FilterState | undefined;\n activeFilterCount: number;\n onReset?: () => void;\n onFilterAdded?: () => void;\n onFilterRemoved?: (filterKey: string) => void;\n onOrderChange?: (orderedKeys: string[]) => void;\n\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n title?: React.ReactNode;\n titleIcon?: React.ReactNode;\n showResetButton?: boolean;\n showActiveFilterCount?: boolean;\n /**\n * Whether the reset button is enabled. Hosts compute this from whether the\n * filter and/or visibility state has diverged from its initial snapshot.\n */\n canReset?: boolean;\n enableSorting?: boolean;\n className?: string;\n renderAddFilterButton?: () => React.ReactNode;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"BaseFilterListApi.js","names":[],"sources":["BaseFilterListApi.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 React from \"react\";\n\nimport type {\n FilterDefinitionControls,\n FilterState,\n} from \"../FilterListItemApi.js\";\n\nexport type RenderFilterInput<D> = (props: {\n definition: D;\n filterKey: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n searchQuery?: string;\n excludeRowOpen?: boolean;\n}) => React.ReactNode;\n\nexport interface BaseFilterListProps<D extends FilterDefinitionControls> {\n filterDefinitions?: Array<D>;\n filterStates: Map<string, FilterState>;\n onFilterStateChanged: (filterKey: string, state: FilterState) => void;\n renderInput: RenderFilterInput<D>;\n getFilterKey: (definition: D) => string;\n getFilterLabel: (definition: D) => string;\n /**\n * Display-only fallback state for a filter that has no stored state, used so\n * capability-driven header controls (overflow … menu, search) render for\n * empty/just-added filters. Never written into the filter-state map.\n */\n getEmptyDisplayState?: (definition: D) => FilterState | undefined;\n activeFilterCount: number;\n onReset?: () => void;\n onFilterAdded?: () => void;\n onFilterRemoved?: (filterKey: string) => void;\n onOrderChange?: (orderedKeys: string[]) => void;\n\n /**\n * Whether the collapse/expand control is available. When `false` the panel is\n * always expanded, no collapse control is rendered, and `collapsed` /\n * `defaultCollapsed` are ignored.\n * @default true\n */\n enableCollapse?: boolean;\n\n /**\n * Controlled mode. When supplied, this prop is the source of truth for\n * whether the panel is collapsed and the component keeps no internal state;\n * re-render with a new value in response to `onCollapsedChange`.\n *\n * If both `collapsed` and `defaultCollapsed` are provided, `collapsed` takes\n * precedence. Ignored when `enableCollapse` is `false`.\n */\n collapsed?: boolean;\n\n /**\n * Uncontrolled mode. Seeds the panel's internal collapsed state; the\n * component continues to own the state after mount, so later changes to this\n * prop are ignored.\n *\n * If both `collapsed` and `defaultCollapsed` are provided, `collapsed` takes\n * precedence. Ignored when `enableCollapse` is `false`.\n * @default false\n */\n defaultCollapsed?: boolean;\n\n /**\n * Called whenever the collapsed state changes.\n *\n * @param collapsed The new collapsed state\n */\n onCollapsedChange?: (collapsed: boolean) => void;\n title?: React.ReactNode;\n titleIcon?: React.ReactNode;\n showResetButton?: boolean;\n showActiveFilterCount?: boolean;\n /**\n * Whether the reset button is enabled. Hosts compute this from whether the\n * filter and/or visibility state has diverged from its initial snapshot.\n */\n canReset?: boolean;\n enableSorting?: boolean;\n className?: string;\n renderAddFilterButton?: () => React.ReactNode;\n}\n"],"mappings":"","ignoreList":[]}
@@ -21,6 +21,7 @@ import styles from "./FilterListHeader.module.css.js";
21
21
  function FilterListHeaderInner({
22
22
  title,
23
23
  titleIcon,
24
+ showCollapseButton = false,
24
25
  collapsed = false,
25
26
  onCollapsedChange,
26
27
  showResetButton,
@@ -49,7 +50,7 @@ function FilterListHeaderInner({
49
50
  className: styles.resetButton,
50
51
  onClick: onReset,
51
52
  disabled: resetDisabled
52
- }, /*#__PURE__*/React.createElement(ResetIcon, null), " Reset filters"), onCollapsedChange != null && /*#__PURE__*/React.createElement(Button, {
53
+ }, /*#__PURE__*/React.createElement(ResetIcon, null), " Reset filters"), showCollapseButton && /*#__PURE__*/React.createElement(Button, {
53
54
  className: styles.collapseButton,
54
55
  onClick: handleCollapseClick,
55
56
  "aria-expanded": !collapsed,
@@ -1 +1 @@
1
- {"version":3,"file":"FilterListHeader.js","names":["Button","React","memo","useCallback","CollapseIcon","ResetIcon","styles","FilterListHeaderInner","title","titleIcon","collapsed","onCollapsedChange","showResetButton","onReset","showActiveFilterCount","activeFilterCount","canReset","handleCollapseClick","resetDisabled","createElement","className","header","titleContainer","activeCount","actions","resetButton","onClick","disabled","collapseButton","FilterListHeader"],"sources":["FilterListHeader.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport React, { memo, type ReactNode, useCallback } from \"react\";\n\nimport { CollapseIcon, ResetIcon } from \"./FilterIcons.js\";\n\nimport styles from \"./FilterListHeader.module.css\";\n\ninterface FilterListHeaderProps {\n title?: ReactNode;\n titleIcon?: ReactNode;\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n showResetButton?: boolean;\n onReset?: () => void;\n showActiveFilterCount?: boolean;\n activeFilterCount?: number;\n canReset?: boolean;\n}\n\nfunction FilterListHeaderInner({\n title,\n titleIcon,\n collapsed = false,\n onCollapsedChange,\n showResetButton,\n onReset,\n showActiveFilterCount,\n activeFilterCount = 0,\n canReset,\n}: FilterListHeaderProps): React.ReactElement {\n const showCollapseButton = onCollapsedChange != null;\n\n const handleCollapseClick = useCallback(() => {\n onCollapsedChange?.(!collapsed);\n }, [onCollapsedChange, collapsed]);\n\n const resetDisabled = canReset != null ? !canReset : activeFilterCount === 0;\n\n return (\n <div className={styles.header}>\n <div className={styles.titleContainer}>\n {titleIcon && <span className={styles.titleIcon}>{titleIcon}</span>}\n {title && <span className={styles.title}>{title}</span>}\n {showActiveFilterCount && activeFilterCount > 0 && (\n <span className={styles.activeCount}>({activeFilterCount})</span>\n )}\n </div>\n\n <div className={styles.actions}>\n {showResetButton && (\n <Button\n className={styles.resetButton}\n onClick={onReset}\n disabled={resetDisabled}\n >\n <ResetIcon /> Reset filters\n </Button>\n )}\n\n {showCollapseButton && (\n <Button\n className={styles.collapseButton}\n onClick={handleCollapseClick}\n aria-expanded={!collapsed}\n aria-label={collapsed ? \"Expand filters\" : \"Collapse filters\"}\n >\n <CollapseIcon />\n </Button>\n )}\n </div>\n </div>\n );\n}\n\nexport const FilterListHeader: React.MemoExoticComponent<\n typeof FilterListHeaderInner\n> = memo(FilterListHeaderInner);\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,uBAAuB;AAC9C,OAAOC,KAAK,IAAIC,IAAI,EAAkBC,WAAW,QAAQ,OAAO;AAEhE,SAASC,YAAY,EAAEC,SAAS,QAAQ,kBAAkB;AAE1D,OAAOC,MAAM,MAAM,+BAA+B;AAclD,SAASC,qBAAqBA,CAAC;EAC7BC,KAAK;EACLC,SAAS;EACTC,SAAS,GAAG,KAAK;EACjBC,iBAAiB;EACjBC,eAAe;EACfC,OAAO;EACPC,qBAAqB;EACrBC,iBAAiB,GAAG,CAAC;EACrBC;AACqB,CAAC,EAAsB;EAG5C,MAAMC,mBAAmB,GAAGd,WAAW,CAAC,MAAM;IAC5CQ,iBAAiB,GAAG,CAACD,SAAS,CAAC;EACjC,CAAC,EAAE,CAACC,iBAAiB,EAAED,SAAS,CAAC,CAAC;EAElC,MAAMQ,aAAa,GAAGF,QAAQ,IAAI,IAAI,GAAG,CAACA,QAAQ,GAAGD,iBAAiB,KAAK,CAAC;EAE5E,oBACEd,KAAA,CAAAkB,aAAA;IAAKC,SAAS,EAAEd,MAAM,CAACe;EAAO,gBAC5BpB,KAAA,CAAAkB,aAAA;IAAKC,SAAS,EAAEd,MAAM,CAACgB;EAAe,GACnCb,SAAS,iBAAIR,KAAA,CAAAkB,aAAA;IAAMC,SAAS,EAAEd,MAAM,CAACG;EAAU,GAAEA,SAAgB,CAAC,EAClED,KAAK,iBAAIP,KAAA,CAAAkB,aAAA;IAAMC,SAAS,EAAEd,MAAM,CAACE;EAAM,GAAEA,KAAY,CAAC,EACtDM,qBAAqB,IAAIC,iBAAiB,GAAG,CAAC,iBAC7Cd,KAAA,CAAAkB,aAAA;IAAMC,SAAS,EAAEd,MAAM,CAACiB;EAAY,GAAC,GAAC,EAACR,iBAAiB,EAAC,GAAO,CAE/D,CAAC,eAENd,KAAA,CAAAkB,aAAA;IAAKC,SAAS,EAAEd,MAAM,CAACkB;EAAQ,GAC5BZ,eAAe,iBACdX,KAAA,CAAAkB,aAAA,CAACnB,MAAM;IACLoB,SAAS,EAAEd,MAAM,CAACmB,WAAY;IAC9BC,OAAO,EAAEb,OAAQ;IACjBc,QAAQ,EAAET;EAAc,gBAExBjB,KAAA,CAAAkB,aAAA,CAACd,SAAS,MAAE,CAAC,kBACP,CACT,EA3BoBM,iBAAiB,IAAI,IAAI,iBA8B5CV,KAAA,CAAAkB,aAAA,CAACnB,MAAM;IACLoB,SAAS,EAAEd,MAAM,CAACsB,cAAe;IACjCF,OAAO,EAAET,mBAAoB;IAC7B,iBAAe,CAACP,SAAU;IAC1B,cAAYA,SAAS,GAAG,gBAAgB,GAAG;EAAmB,gBAE9DT,KAAA,CAAAkB,aAAA,CAACf,YAAY,MAAE,CACT,CAEP,CACF,CAAC;AAEV;AAEA,OAAO,MAAMyB,gBAEZ,gBAAG3B,IAAI,CAACK,qBAAqB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"FilterListHeader.js","names":["Button","React","memo","useCallback","CollapseIcon","ResetIcon","styles","FilterListHeaderInner","title","titleIcon","showCollapseButton","collapsed","onCollapsedChange","showResetButton","onReset","showActiveFilterCount","activeFilterCount","canReset","handleCollapseClick","resetDisabled","createElement","className","header","titleContainer","activeCount","actions","resetButton","onClick","disabled","collapseButton","FilterListHeader"],"sources":["FilterListHeader.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport React, { memo, type ReactNode, useCallback } from \"react\";\n\nimport { CollapseIcon, ResetIcon } from \"./FilterIcons.js\";\n\nimport styles from \"./FilterListHeader.module.css\";\n\ninterface FilterListHeaderProps {\n title?: ReactNode;\n titleIcon?: ReactNode;\n showCollapseButton?: boolean;\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n showResetButton?: boolean;\n onReset?: () => void;\n showActiveFilterCount?: boolean;\n activeFilterCount?: number;\n canReset?: boolean;\n}\n\nfunction FilterListHeaderInner({\n title,\n titleIcon,\n showCollapseButton = false,\n collapsed = false,\n onCollapsedChange,\n showResetButton,\n onReset,\n showActiveFilterCount,\n activeFilterCount = 0,\n canReset,\n}: FilterListHeaderProps): React.ReactElement {\n const handleCollapseClick = useCallback(() => {\n onCollapsedChange?.(!collapsed);\n }, [onCollapsedChange, collapsed]);\n\n const resetDisabled = canReset != null ? !canReset : activeFilterCount === 0;\n\n return (\n <div className={styles.header}>\n <div className={styles.titleContainer}>\n {titleIcon && <span className={styles.titleIcon}>{titleIcon}</span>}\n {title && <span className={styles.title}>{title}</span>}\n {showActiveFilterCount && activeFilterCount > 0 && (\n <span className={styles.activeCount}>({activeFilterCount})</span>\n )}\n </div>\n\n <div className={styles.actions}>\n {showResetButton && (\n <Button\n className={styles.resetButton}\n onClick={onReset}\n disabled={resetDisabled}\n >\n <ResetIcon /> Reset filters\n </Button>\n )}\n\n {showCollapseButton && (\n <Button\n className={styles.collapseButton}\n onClick={handleCollapseClick}\n aria-expanded={!collapsed}\n aria-label={collapsed ? \"Expand filters\" : \"Collapse filters\"}\n >\n <CollapseIcon />\n </Button>\n )}\n </div>\n </div>\n );\n}\n\nexport const FilterListHeader: React.MemoExoticComponent<\n typeof FilterListHeaderInner\n> = memo(FilterListHeaderInner);\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,uBAAuB;AAC9C,OAAOC,KAAK,IAAIC,IAAI,EAAkBC,WAAW,QAAQ,OAAO;AAEhE,SAASC,YAAY,EAAEC,SAAS,QAAQ,kBAAkB;AAE1D,OAAOC,MAAM,MAAM,+BAA+B;AAelD,SAASC,qBAAqBA,CAAC;EAC7BC,KAAK;EACLC,SAAS;EACTC,kBAAkB,GAAG,KAAK;EAC1BC,SAAS,GAAG,KAAK;EACjBC,iBAAiB;EACjBC,eAAe;EACfC,OAAO;EACPC,qBAAqB;EACrBC,iBAAiB,GAAG,CAAC;EACrBC;AACqB,CAAC,EAAsB;EAC5C,MAAMC,mBAAmB,GAAGf,WAAW,CAAC,MAAM;IAC5CS,iBAAiB,GAAG,CAACD,SAAS,CAAC;EACjC,CAAC,EAAE,CAACC,iBAAiB,EAAED,SAAS,CAAC,CAAC;EAElC,MAAMQ,aAAa,GAAGF,QAAQ,IAAI,IAAI,GAAG,CAACA,QAAQ,GAAGD,iBAAiB,KAAK,CAAC;EAE5E,oBACEf,KAAA,CAAAmB,aAAA;IAAKC,SAAS,EAAEf,MAAM,CAACgB;EAAO,gBAC5BrB,KAAA,CAAAmB,aAAA;IAAKC,SAAS,EAAEf,MAAM,CAACiB;EAAe,GACnCd,SAAS,iBAAIR,KAAA,CAAAmB,aAAA;IAAMC,SAAS,EAAEf,MAAM,CAACG;EAAU,GAAEA,SAAgB,CAAC,EAClED,KAAK,iBAAIP,KAAA,CAAAmB,aAAA;IAAMC,SAAS,EAAEf,MAAM,CAACE;EAAM,GAAEA,KAAY,CAAC,EACtDO,qBAAqB,IAAIC,iBAAiB,GAAG,CAAC,iBAC7Cf,KAAA,CAAAmB,aAAA;IAAMC,SAAS,EAAEf,MAAM,CAACkB;EAAY,GAAC,GAAC,EAACR,iBAAiB,EAAC,GAAO,CAE/D,CAAC,eAENf,KAAA,CAAAmB,aAAA;IAAKC,SAAS,EAAEf,MAAM,CAACmB;EAAQ,GAC5BZ,eAAe,iBACdZ,KAAA,CAAAmB,aAAA,CAACpB,MAAM;IACLqB,SAAS,EAAEf,MAAM,CAACoB,WAAY;IAC9BC,OAAO,EAAEb,OAAQ;IACjBc,QAAQ,EAAET;EAAc,gBAExBlB,KAAA,CAAAmB,aAAA,CAACf,SAAS,MAAE,CAAC,kBACP,CACT,EAEAK,kBAAkB,iBACjBT,KAAA,CAAAmB,aAAA,CAACpB,MAAM;IACLqB,SAAS,EAAEf,MAAM,CAACuB,cAAe;IACjCF,OAAO,EAAET,mBAAoB;IAC7B,iBAAe,CAACP,SAAU;IAC1B,cAAYA,SAAS,GAAG,gBAAgB,GAAG;EAAmB,gBAE9DV,KAAA,CAAAmB,aAAA,CAAChB,YAAY,MAAE,CACT,CAEP,CACF,CAAC;AAEV;AAEA,OAAO,MAAM0B,gBAEZ,gBAAG5B,IAAI,CAACK,qBAAqB,CAAC","ignoreList":[]}
@@ -24,10 +24,8 @@ import { Checkbox } from "../base-components/checkbox/Checkbox.js";
24
24
  import { Dialog } from "../base-components/dialog/Dialog.js";
25
25
  import { DraggableList } from "../base-components/draggable-list/DraggableList.js";
26
26
  import { SearchBar } from "../base-components/search-bar/SearchBar.js";
27
- import { useObjectTableLabels, withObjectTableLabels } from "./ObjectTableLabels.js";
28
27
  import styles from "./ColumnConfigDialog.module.css.js";
29
- export const ColumnConfigDialog = withObjectTableLabels(ColumnConfigDialogInner);
30
- function ColumnConfigDialogInner({
28
+ export function ColumnConfigDialog({
31
29
  isOpen,
32
30
  onClose,
33
31
  columnOptions,
@@ -36,7 +34,6 @@ function ColumnConfigDialogInner({
36
34
  onApply,
37
35
  isValidConfig
38
36
  }) {
39
- const labels = useObjectTableLabels();
40
37
  const [visibleColumns, setVisibleColumns] = useState([]);
41
38
  const [searchQuery, setSearchQuery] = useState("");
42
39
  const allColumns = useMemo(() => {
@@ -119,18 +116,15 @@ function ColumnConfigDialogInner({
119
116
  }, [allColumns, searchQuery]);
120
117
  const footer = useMemo(() => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ActionButton, {
121
118
  onClick: onClose
122
- }, labels.columnConfigCancel), /*#__PURE__*/React.createElement(ActionButton, {
119
+ }, "Cancel"), /*#__PURE__*/React.createElement(ActionButton, {
123
120
  variant: "primary",
124
121
  onClick: handleApply,
125
122
  disabled: isApplyDisabled
126
- }, labels.columnConfigApply)), [onClose, handleApply, isApplyDisabled, labels]);
127
- const dialogTitle = useMemo(() => /*#__PURE__*/React.createElement("div", {
128
- className: styles.title
129
- }, /*#__PURE__*/React.createElement(Cog, null), labels.columnConfigTitle), [labels]);
123
+ }, "Apply")), [onClose, handleApply, isApplyDisabled]);
130
124
  return /*#__PURE__*/React.createElement(Dialog, {
131
125
  isOpen: isOpen,
132
126
  onOpenChange: onClose,
133
- title: dialogTitle,
127
+ title: DialogTitle,
134
128
  footer: footer,
135
129
  className: styles.columnConfigDialog
136
130
  }, /*#__PURE__*/React.createElement("div", {
@@ -148,6 +142,9 @@ function ColumnConfigDialogInner({
148
142
  filteredColumns: filteredAvailableColumns
149
143
  })));
150
144
  }
145
+ const DialogTitle = /*#__PURE__*/React.createElement("div", {
146
+ className: styles.title
147
+ }, /*#__PURE__*/React.createElement(Cog, null), "Configure Table Columns");
151
148
  const getColumnConfig = (allColumns, visibleColumns) => {
152
149
  const hiddenColumns = allColumns.filter(col => !visibleColumns.some(v => v.id === col.id));
153
150
  return [...visibleColumns.map(col => ({
@@ -163,23 +160,22 @@ function VisibleColumnsList({
163
160
  onReorder,
164
161
  onRemove
165
162
  }) {
166
- const labels = useObjectTableLabels();
167
163
  return /*#__PURE__*/React.createElement("div", {
168
164
  className: styles.visibleColumnsContainer
169
165
  }, /*#__PURE__*/React.createElement("div", {
170
166
  className: styles.sectionHeader
171
167
  }, /*#__PURE__*/React.createElement("div", {
172
168
  className: styles.sectionTitle
173
- }, /*#__PURE__*/React.createElement("span", null, labels.columnConfigVisibleColumns), /*#__PURE__*/React.createElement("span", {
169
+ }, /*#__PURE__*/React.createElement("span", null, "Visible Columns"), /*#__PURE__*/React.createElement("span", {
174
170
  className: styles.countTag
175
171
  }, columns.length)), /*#__PURE__*/React.createElement("div", {
176
172
  className: styles.sectionHint
177
- }, labels.columnConfigDragToReorder)), /*#__PURE__*/React.createElement(DraggableList, {
173
+ }, "Drag to reorder")), /*#__PURE__*/React.createElement(DraggableList, {
178
174
  items: columns,
179
175
  onReorder: onReorder,
180
176
  onRemove: onRemove,
181
177
  removeIconVariant: "trash",
182
- emptyMessage: labels.columnConfigNoVisibleColumns,
178
+ emptyMessage: "No visible columns",
183
179
  className: styles.columnList
184
180
  }));
185
181
  }
@@ -195,7 +191,6 @@ function AvailableColumnsList({
195
191
  const totalCount = filteredColumns.length;
196
192
  const allFilteredSelected = filteredColumns.every(col => visibleColumns.some(v => v.id === col.id));
197
193
  const someFilteredSelected = filteredColumns.some(col => visibleColumns.some(v => v.id === col.id));
198
- const labels = useObjectTableLabels();
199
194
  const handleSelectAllClick = useCallback(() => {
200
195
  onSelectAll(filteredColumns);
201
196
  }, [filteredColumns, onSelectAll]);
@@ -203,11 +198,11 @@ function AvailableColumnsList({
203
198
  className: styles.availableColumnsContainer
204
199
  }, /*#__PURE__*/React.createElement("div", {
205
200
  className: classNames(styles.sectionHeader, styles.sectionTitle)
206
- }, labels.columnConfigAddOrRemoveColumns), /*#__PURE__*/React.createElement(SearchBar, {
201
+ }, "Add or Remove Columns"), /*#__PURE__*/React.createElement(SearchBar, {
207
202
  value: searchQuery,
208
203
  onChange: onSearchChange,
209
- placeholder: labels.columnConfigSearchPlaceholder,
210
- "aria-label": labels.columnConfigSearchAriaLabel,
204
+ placeholder: "Search...",
205
+ "aria-label": "Search available columns",
211
206
  className: styles.searchContainer
212
207
  }), /*#__PURE__*/React.createElement(Collapsible.Root, {
213
208
  defaultOpen: true,
@@ -221,7 +216,7 @@ function AvailableColumnsList({
221
216
  indeterminate: someFilteredSelected && !allFilteredSelected,
222
217
  onCheckedChange: handleSelectAllClick,
223
218
  className: styles.checkbox
224
- }), labels.columnConfigAllColumns), /*#__PURE__*/React.createElement(Collapsible.Trigger, {
219
+ }), "All Columns"), /*#__PURE__*/React.createElement(Collapsible.Trigger, {
225
220
  className: styles.categoryTrigger
226
221
  }, /*#__PURE__*/React.createElement("span", {
227
222
  className: styles.categoryCount
@@ -231,7 +226,7 @@ function AvailableColumnsList({
231
226
  className: styles.propertyList
232
227
  }, filteredColumns.length === 0 ? /*#__PURE__*/React.createElement("div", {
233
228
  className: styles.emptyState
234
- }, labels.columnConfigNoMatchingColumns) : filteredColumns.map(column => /*#__PURE__*/React.createElement(PropertyItem, {
229
+ }, "No matching columns found") : filteredColumns.map(column => /*#__PURE__*/React.createElement(PropertyItem, {
235
230
  key: column.id,
236
231
  column: column,
237
232
  isSelected: visibleColumns.some(v => v.id === column.id),
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnConfigDialog.js","names":["Collapsible","CaretDown","Cog","SmallInfoSign","arrayMove","classNames","React","useCallback","useEffect","useMemo","useState","ActionButton","Checkbox","Dialog","DraggableList","SearchBar","useObjectTableLabels","withObjectTableLabels","styles","ColumnConfigDialog","ColumnConfigDialogInner","isOpen","onClose","columnOptions","currentVisibility","currentColumnOrder","onApply","isValidConfig","labels","visibleColumns","setVisibleColumns","searchQuery","setSearchQuery","allColumns","map","opt","isVisible","id","label","name","visibleCols","filter","col","length","sort","a","b","indexA","indexOf","indexB","orderA","Infinity","orderB","handleApply","getColumnConfig","isValid","isApplyDisabled","handleReorderColumns","fromIndex","toIndex","items","handleRemoveColumn","columnId","prev","handleToggleColumn","column","isCurrentlyVisible","some","handleSearchChange","event","target","value","handleSelectAll","columns","allSelected","every","v","newColumns","filteredAvailableColumns","query","toLowerCase","trim","includes","footer","createElement","Fragment","onClick","columnConfigCancel","variant","disabled","columnConfigApply","dialogTitle","className","title","columnConfigTitle","onOpenChange","columnConfigDialog","dialogLayout","VisibleColumnsList","onReorder","onRemove","AvailableColumnsList","onSearchChange","onToggleColumn","onSelectAll","filteredColumns","hiddenColumns","visibleColumnsContainer","sectionHeader","sectionTitle","columnConfigVisibleColumns","countTag","sectionHint","columnConfigDragToReorder","removeIconVariant","emptyMessage","columnConfigNoVisibleColumns","columnList","selectedCount","totalCount","allFilteredSelected","someFilteredSelected","handleSelectAllClick","availableColumnsContainer","columnConfigAddOrRemoveColumns","onChange","placeholder","columnConfigSearchPlaceholder","columnConfigSearchAriaLabel","searchContainer","Root","defaultOpen","propertiesList","categoryHeader","selectAllLabel","checked","indeterminate","onCheckedChange","checkbox","columnConfigAllColumns","Trigger","categoryTrigger","categoryCount","caretIcon","Panel","propertyList","emptyState","columnConfigNoMatchingColumns","PropertyItem","key","isSelected","onToggle","showInfoIcon","handleClick","propertyItem","propertyLabel","propertyName","infoIcon"],"sources":["ColumnConfigDialog.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 { Collapsible } from \"@base-ui/react/collapsible\";\nimport { CaretDown, Cog, SmallInfoSign } from \"@blueprintjs/icons\";\nimport { arrayMove } from \"@dnd-kit/sortable\";\nimport type { ColumnOrderState, VisibilityState } from \"@tanstack/react-table\";\nimport classNames from \"classnames\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { ActionButton } from \"../base-components/action-button/ActionButton.js\";\nimport { Checkbox } from \"../base-components/checkbox/Checkbox.js\";\nimport { Dialog } from \"../base-components/dialog/Dialog.js\";\nimport { DraggableList } from \"../base-components/draggable-list/DraggableList.js\";\nimport { SearchBar } from \"../base-components/search-bar/SearchBar.js\";\nimport type { ObjectTableLabels } from \"./ObjectTableLabels.js\";\nimport {\n useObjectTableLabels,\n withObjectTableLabels,\n} from \"./ObjectTableLabels.js\";\nimport type { ColumnOption } from \"./utils/types.js\";\n\nimport styles from \"./ColumnConfigDialog.module.css\";\n\nexport interface ColumnConfig {\n columnId: string;\n isVisible: boolean;\n}\n\nexport type ColumnConfigOptions = Array<Pick<ColumnOption, \"id\" | \"name\">>;\n\nexport interface ColumnConfigDialogProps {\n isOpen: boolean;\n onClose: () => void;\n columnOptions: ColumnConfigOptions;\n currentVisibility?: VisibilityState;\n currentColumnOrder?: ColumnOrderState;\n onApply: (columns: ColumnConfig[]) => void;\n isValidConfig?: (columns: ColumnConfig[]) => boolean;\n /**\n * Overrides for the dialog's user-facing strings. Provide any subset; unset\n * keys fall back to the built-in English defaults. When this dialog is\n * rendered inside a `BaseTable`/`ObjectTable`, it inherits that table's\n * `labels` and this prop is only needed to override further. See\n * {@link ObjectTableLabels}.\n */\n labels?: Partial<ObjectTableLabels>;\n}\n\ninterface ColumnItem {\n id: string;\n label: string;\n isVisible: boolean;\n}\n\nexport const ColumnConfigDialog: React.FC<ColumnConfigDialogProps> =\n withObjectTableLabels(ColumnConfigDialogInner);\n\nfunction ColumnConfigDialogInner({\n isOpen,\n onClose,\n columnOptions,\n currentVisibility,\n currentColumnOrder,\n onApply,\n isValidConfig,\n}: Omit<ColumnConfigDialogProps, \"labels\">): React.ReactElement {\n const labels = useObjectTableLabels();\n const [visibleColumns, setVisibleColumns] = useState<ColumnItem[]>([]);\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n const allColumns: ColumnItem[] = useMemo(() => {\n return columnOptions.map((opt) => {\n const isVisible = currentVisibility ? currentVisibility[opt.id] : false;\n\n return {\n id: opt.id,\n label: opt.name,\n isVisible,\n };\n });\n }, [columnOptions, currentVisibility]);\n\n // Sync local state with prop when dialog is opened\n useEffect(() => {\n if (isOpen) {\n const visibleCols = allColumns.filter((col) => col.isVisible);\n\n // Sort by current column order if available\n if (!!currentColumnOrder?.length) {\n visibleCols.sort((a, b) => {\n const indexA = currentColumnOrder.indexOf(a.id);\n const indexB = currentColumnOrder.indexOf(b.id);\n // If not in order array, put at end\n const orderA = indexA === -1 ? Infinity : indexA;\n const orderB = indexB === -1 ? Infinity : indexB;\n return orderA - orderB;\n });\n }\n\n setVisibleColumns(visibleCols);\n setSearchQuery(\"\");\n }\n }, [isOpen, allColumns, currentColumnOrder]);\n\n const handleApply = useCallback(() => {\n onApply(getColumnConfig(allColumns, visibleColumns));\n onClose();\n }, [allColumns, visibleColumns, onApply, onClose]);\n\n // If no condition provided, default to valid\n const isValid = isValidConfig\n ? isValidConfig(getColumnConfig(allColumns, visibleColumns))\n : true;\n\n const isApplyDisabled = visibleColumns.length === 0 || !isValid;\n\n const handleReorderColumns = useCallback(\n (fromIndex: number, toIndex: number) => {\n setVisibleColumns((items) => arrayMove(items, fromIndex, toIndex));\n },\n [],\n );\n\n const handleRemoveColumn = useCallback((columnId: string) => {\n setVisibleColumns((prev) => prev.filter((col) => col.id !== columnId));\n }, []);\n\n const handleToggleColumn = useCallback((column: ColumnItem) => {\n setVisibleColumns((prev) => {\n const isCurrentlyVisible = prev.some((col) => col.id === column.id);\n if (isCurrentlyVisible) {\n return prev.filter((col) => col.id !== column.id);\n } else {\n return [...prev, column];\n }\n });\n }, []);\n\n const handleSearchChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchQuery(event.target.value);\n },\n [],\n );\n\n const handleSelectAll = useCallback((columns: ColumnItem[]) => {\n setVisibleColumns((prev) => {\n const allSelected = columns.every((col) =>\n prev.some((v) => v.id === col.id),\n );\n if (allSelected) {\n // Deselect all filtered columns\n return prev.filter((v) => !columns.some((col) => col.id === v.id));\n } else {\n // Select all filtered columns that aren't already selected\n const newColumns = columns.filter(\n (col) => !prev.some((v) => v.id === col.id),\n );\n return [...prev, ...newColumns];\n }\n });\n }, []);\n\n const filteredAvailableColumns = useMemo(() => {\n const query = searchQuery.toLowerCase().trim();\n if (!query) {\n return allColumns;\n }\n return allColumns.filter(\n (col) =>\n (col.label?.toLowerCase().includes(query) ?? false) ||\n col.id.toLowerCase().includes(query),\n );\n }, [allColumns, searchQuery]);\n\n const footer = useMemo(\n () => (\n <>\n <ActionButton onClick={onClose}>\n {labels.columnConfigCancel}\n </ActionButton>\n <ActionButton\n variant=\"primary\"\n onClick={handleApply}\n disabled={isApplyDisabled}\n >\n {labels.columnConfigApply}\n </ActionButton>\n </>\n ),\n [onClose, handleApply, isApplyDisabled, labels],\n );\n\n const dialogTitle = useMemo(\n () => (\n <div className={styles.title}>\n <Cog />\n {labels.columnConfigTitle}\n </div>\n ),\n [labels],\n );\n\n return (\n <Dialog\n isOpen={isOpen}\n onOpenChange={onClose}\n title={dialogTitle}\n footer={footer}\n className={styles.columnConfigDialog}\n >\n <div className={styles.dialogLayout}>\n <VisibleColumnsList\n columns={visibleColumns}\n onReorder={handleReorderColumns}\n onRemove={handleRemoveColumn}\n />\n <AvailableColumnsList\n visibleColumns={visibleColumns}\n searchQuery={searchQuery}\n onSearchChange={handleSearchChange}\n onToggleColumn={handleToggleColumn}\n onSelectAll={handleSelectAll}\n filteredColumns={filteredAvailableColumns}\n />\n </div>\n </Dialog>\n );\n}\n\nconst getColumnConfig = (\n allColumns: ColumnItem[],\n visibleColumns: ColumnItem[],\n): ColumnConfig[] => {\n const hiddenColumns = allColumns.filter(\n (col) => !visibleColumns.some((v) => v.id === col.id),\n );\n\n return [\n ...visibleColumns.map((col) => ({ columnId: col.id, isVisible: true })),\n ...hiddenColumns.map((col) => ({ columnId: col.id, isVisible: false })),\n ];\n};\n\ninterface VisibleColumnsListProps {\n columns: ColumnItem[];\n onReorder: (fromIndex: number, toIndex: number) => void;\n onRemove: (columnId: string) => void;\n}\n\nfunction VisibleColumnsList({\n columns,\n onReorder,\n onRemove,\n}: VisibleColumnsListProps): React.ReactElement {\n const labels = useObjectTableLabels();\n return (\n <div className={styles.visibleColumnsContainer}>\n <div className={styles.sectionHeader}>\n <div className={styles.sectionTitle}>\n <span>{labels.columnConfigVisibleColumns}</span>\n <span className={styles.countTag}>{columns.length}</span>\n </div>\n <div className={styles.sectionHint}>\n {labels.columnConfigDragToReorder}\n </div>\n </div>\n <DraggableList\n items={columns}\n onReorder={onReorder}\n onRemove={onRemove}\n removeIconVariant=\"trash\"\n emptyMessage={labels.columnConfigNoVisibleColumns}\n className={styles.columnList}\n />\n </div>\n );\n}\n\ninterface AvailableColumnsListProps {\n visibleColumns: ColumnItem[];\n searchQuery: string;\n onSearchChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onToggleColumn: (column: ColumnItem) => void;\n onSelectAll: (columns: ColumnItem[]) => void;\n filteredColumns: ColumnItem[];\n}\n\nfunction AvailableColumnsList({\n visibleColumns,\n searchQuery,\n onSearchChange,\n onToggleColumn,\n onSelectAll,\n filteredColumns,\n}: AvailableColumnsListProps): React.ReactElement {\n const selectedCount = visibleColumns.length;\n const totalCount = filteredColumns.length;\n const allFilteredSelected = filteredColumns.every((col) =>\n visibleColumns.some((v) => v.id === col.id),\n );\n const someFilteredSelected = filteredColumns.some((col) =>\n visibleColumns.some((v) => v.id === col.id),\n );\n\n const labels = useObjectTableLabels();\n\n const handleSelectAllClick = useCallback(() => {\n onSelectAll(filteredColumns);\n }, [filteredColumns, onSelectAll]);\n\n return (\n <div className={styles.availableColumnsContainer}>\n <div className={classNames(styles.sectionHeader, styles.sectionTitle)}>\n {labels.columnConfigAddOrRemoveColumns}\n </div>\n <SearchBar\n value={searchQuery}\n onChange={onSearchChange}\n placeholder={labels.columnConfigSearchPlaceholder}\n aria-label={labels.columnConfigSearchAriaLabel}\n className={styles.searchContainer}\n />\n <Collapsible.Root defaultOpen={true} className={styles.propertiesList}>\n <div className={styles.categoryHeader}>\n <label className={styles.selectAllLabel}>\n <Checkbox\n checked={allFilteredSelected}\n indeterminate={someFilteredSelected && !allFilteredSelected}\n onCheckedChange={handleSelectAllClick}\n className={styles.checkbox}\n />\n {labels.columnConfigAllColumns}\n </label>\n <Collapsible.Trigger className={styles.categoryTrigger}>\n <span className={styles.categoryCount}>\n {selectedCount}/{totalCount}\n </span>\n <CaretDown className={styles.caretIcon} />\n </Collapsible.Trigger>\n </div>\n <Collapsible.Panel className={styles.propertyList}>\n {filteredColumns.length === 0 ? (\n <div className={styles.emptyState}>\n {labels.columnConfigNoMatchingColumns}\n </div>\n ) : (\n filteredColumns.map((column) => (\n <PropertyItem\n key={column.id}\n column={column}\n isSelected={visibleColumns.some((v) => v.id === column.id)}\n onToggle={onToggleColumn}\n />\n ))\n )}\n </Collapsible.Panel>\n </Collapsible.Root>\n </div>\n );\n}\n\ninterface PropertyItemProps {\n column: ColumnItem;\n isSelected: boolean;\n onToggle: (column: ColumnItem) => void;\n showInfoIcon?: boolean;\n}\n\nfunction PropertyItem({\n column,\n isSelected,\n onToggle,\n showInfoIcon = false,\n}: PropertyItemProps): React.ReactElement {\n const handleClick = useCallback(() => {\n onToggle(column);\n }, [onToggle, column]);\n\n return (\n <div className={styles.propertyItem}>\n <label className={styles.propertyLabel}>\n <Checkbox\n checked={isSelected}\n onCheckedChange={handleClick}\n className={styles.checkbox}\n />\n <span className={styles.propertyName}>{column.label}</span>\n </label>\n {showInfoIcon && <SmallInfoSign className={styles.infoIcon} />}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ColumnConfigDialog.js","names":["Collapsible","CaretDown","Cog","SmallInfoSign","arrayMove","classNames","React","useCallback","useEffect","useMemo","useState","ActionButton","Checkbox","Dialog","DraggableList","SearchBar","styles","ColumnConfigDialog","isOpen","onClose","columnOptions","currentVisibility","currentColumnOrder","onApply","isValidConfig","visibleColumns","setVisibleColumns","searchQuery","setSearchQuery","allColumns","map","opt","isVisible","id","label","name","visibleCols","filter","col","length","sort","a","b","indexA","indexOf","indexB","orderA","Infinity","orderB","handleApply","getColumnConfig","isValid","isApplyDisabled","handleReorderColumns","fromIndex","toIndex","items","handleRemoveColumn","columnId","prev","handleToggleColumn","column","isCurrentlyVisible","some","handleSearchChange","event","target","value","handleSelectAll","columns","allSelected","every","v","newColumns","filteredAvailableColumns","query","toLowerCase","trim","includes","footer","createElement","Fragment","onClick","variant","disabled","onOpenChange","title","DialogTitle","className","columnConfigDialog","dialogLayout","VisibleColumnsList","onReorder","onRemove","AvailableColumnsList","onSearchChange","onToggleColumn","onSelectAll","filteredColumns","hiddenColumns","visibleColumnsContainer","sectionHeader","sectionTitle","countTag","sectionHint","removeIconVariant","emptyMessage","columnList","selectedCount","totalCount","allFilteredSelected","someFilteredSelected","handleSelectAllClick","availableColumnsContainer","onChange","placeholder","searchContainer","Root","defaultOpen","propertiesList","categoryHeader","selectAllLabel","checked","indeterminate","onCheckedChange","checkbox","Trigger","categoryTrigger","categoryCount","caretIcon","Panel","propertyList","emptyState","PropertyItem","key","isSelected","onToggle","showInfoIcon","handleClick","propertyItem","propertyLabel","propertyName","infoIcon"],"sources":["ColumnConfigDialog.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 { Collapsible } from \"@base-ui/react/collapsible\";\nimport { CaretDown, Cog, SmallInfoSign } from \"@blueprintjs/icons\";\nimport { arrayMove } from \"@dnd-kit/sortable\";\nimport type { ColumnOrderState, VisibilityState } from \"@tanstack/react-table\";\nimport classNames from \"classnames\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { ActionButton } from \"../base-components/action-button/ActionButton.js\";\nimport { Checkbox } from \"../base-components/checkbox/Checkbox.js\";\nimport { Dialog } from \"../base-components/dialog/Dialog.js\";\nimport { DraggableList } from \"../base-components/draggable-list/DraggableList.js\";\nimport { SearchBar } from \"../base-components/search-bar/SearchBar.js\";\nimport type { ColumnOption } from \"./utils/types.js\";\n\nimport styles from \"./ColumnConfigDialog.module.css\";\n\nexport interface ColumnConfig {\n columnId: string;\n isVisible: boolean;\n}\n\nexport type ColumnConfigOptions = Array<Pick<ColumnOption, \"id\" | \"name\">>;\n\nexport interface ColumnConfigDialogProps {\n isOpen: boolean;\n onClose: () => void;\n columnOptions: ColumnConfigOptions;\n currentVisibility?: VisibilityState;\n currentColumnOrder?: ColumnOrderState;\n onApply: (columns: ColumnConfig[]) => void;\n isValidConfig?: (columns: ColumnConfig[]) => boolean;\n}\n\ninterface ColumnItem {\n id: string;\n label: string;\n isVisible: boolean;\n}\n\nexport function ColumnConfigDialog({\n isOpen,\n onClose,\n columnOptions,\n currentVisibility,\n currentColumnOrder,\n onApply,\n isValidConfig,\n}: ColumnConfigDialogProps): React.ReactElement | null {\n const [visibleColumns, setVisibleColumns] = useState<ColumnItem[]>([]);\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n const allColumns: ColumnItem[] = useMemo(() => {\n return columnOptions.map((opt) => {\n const isVisible = currentVisibility ? currentVisibility[opt.id] : false;\n\n return {\n id: opt.id,\n label: opt.name,\n isVisible,\n };\n });\n }, [columnOptions, currentVisibility]);\n\n // Sync local state with prop when dialog is opened\n useEffect(() => {\n if (isOpen) {\n const visibleCols = allColumns.filter((col) => col.isVisible);\n\n // Sort by current column order if available\n if (!!currentColumnOrder?.length) {\n visibleCols.sort((a, b) => {\n const indexA = currentColumnOrder.indexOf(a.id);\n const indexB = currentColumnOrder.indexOf(b.id);\n // If not in order array, put at end\n const orderA = indexA === -1 ? Infinity : indexA;\n const orderB = indexB === -1 ? Infinity : indexB;\n return orderA - orderB;\n });\n }\n\n setVisibleColumns(visibleCols);\n setSearchQuery(\"\");\n }\n }, [isOpen, allColumns, currentColumnOrder]);\n\n const handleApply = useCallback(() => {\n onApply(getColumnConfig(allColumns, visibleColumns));\n onClose();\n }, [allColumns, visibleColumns, onApply, onClose]);\n\n // If no condition provided, default to valid\n const isValid = isValidConfig\n ? isValidConfig(getColumnConfig(allColumns, visibleColumns))\n : true;\n\n const isApplyDisabled = visibleColumns.length === 0 || !isValid;\n\n const handleReorderColumns = useCallback(\n (fromIndex: number, toIndex: number) => {\n setVisibleColumns((items) => arrayMove(items, fromIndex, toIndex));\n },\n [],\n );\n\n const handleRemoveColumn = useCallback((columnId: string) => {\n setVisibleColumns((prev) => prev.filter((col) => col.id !== columnId));\n }, []);\n\n const handleToggleColumn = useCallback((column: ColumnItem) => {\n setVisibleColumns((prev) => {\n const isCurrentlyVisible = prev.some((col) => col.id === column.id);\n if (isCurrentlyVisible) {\n return prev.filter((col) => col.id !== column.id);\n } else {\n return [...prev, column];\n }\n });\n }, []);\n\n const handleSearchChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchQuery(event.target.value);\n },\n [],\n );\n\n const handleSelectAll = useCallback((columns: ColumnItem[]) => {\n setVisibleColumns((prev) => {\n const allSelected = columns.every((col) =>\n prev.some((v) => v.id === col.id),\n );\n if (allSelected) {\n // Deselect all filtered columns\n return prev.filter((v) => !columns.some((col) => col.id === v.id));\n } else {\n // Select all filtered columns that aren't already selected\n const newColumns = columns.filter(\n (col) => !prev.some((v) => v.id === col.id),\n );\n return [...prev, ...newColumns];\n }\n });\n }, []);\n\n const filteredAvailableColumns = useMemo(() => {\n const query = searchQuery.toLowerCase().trim();\n if (!query) {\n return allColumns;\n }\n return allColumns.filter(\n (col) =>\n (col.label?.toLowerCase().includes(query) ?? false) ||\n col.id.toLowerCase().includes(query),\n );\n }, [allColumns, searchQuery]);\n\n const footer = useMemo(\n () => (\n <>\n <ActionButton onClick={onClose}>Cancel</ActionButton>\n <ActionButton\n variant=\"primary\"\n onClick={handleApply}\n disabled={isApplyDisabled}\n >\n Apply\n </ActionButton>\n </>\n ),\n [onClose, handleApply, isApplyDisabled],\n );\n\n return (\n <Dialog\n isOpen={isOpen}\n onOpenChange={onClose}\n title={DialogTitle}\n footer={footer}\n className={styles.columnConfigDialog}\n >\n <div className={styles.dialogLayout}>\n <VisibleColumnsList\n columns={visibleColumns}\n onReorder={handleReorderColumns}\n onRemove={handleRemoveColumn}\n />\n <AvailableColumnsList\n visibleColumns={visibleColumns}\n searchQuery={searchQuery}\n onSearchChange={handleSearchChange}\n onToggleColumn={handleToggleColumn}\n onSelectAll={handleSelectAll}\n filteredColumns={filteredAvailableColumns}\n />\n </div>\n </Dialog>\n );\n}\n\nconst DialogTitle = (\n <div className={styles.title}>\n <Cog />\n Configure Table Columns\n </div>\n);\n\nconst getColumnConfig = (\n allColumns: ColumnItem[],\n visibleColumns: ColumnItem[],\n): ColumnConfig[] => {\n const hiddenColumns = allColumns.filter(\n (col) => !visibleColumns.some((v) => v.id === col.id),\n );\n\n return [\n ...visibleColumns.map((col) => ({ columnId: col.id, isVisible: true })),\n ...hiddenColumns.map((col) => ({ columnId: col.id, isVisible: false })),\n ];\n};\n\ninterface VisibleColumnsListProps {\n columns: ColumnItem[];\n onReorder: (fromIndex: number, toIndex: number) => void;\n onRemove: (columnId: string) => void;\n}\n\nfunction VisibleColumnsList({\n columns,\n onReorder,\n onRemove,\n}: VisibleColumnsListProps): React.ReactElement {\n return (\n <div className={styles.visibleColumnsContainer}>\n <div className={styles.sectionHeader}>\n <div className={styles.sectionTitle}>\n <span>Visible Columns</span>\n <span className={styles.countTag}>{columns.length}</span>\n </div>\n <div className={styles.sectionHint}>Drag to reorder</div>\n </div>\n <DraggableList\n items={columns}\n onReorder={onReorder}\n onRemove={onRemove}\n removeIconVariant=\"trash\"\n emptyMessage=\"No visible columns\"\n className={styles.columnList}\n />\n </div>\n );\n}\n\ninterface AvailableColumnsListProps {\n visibleColumns: ColumnItem[];\n searchQuery: string;\n onSearchChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onToggleColumn: (column: ColumnItem) => void;\n onSelectAll: (columns: ColumnItem[]) => void;\n filteredColumns: ColumnItem[];\n}\n\nfunction AvailableColumnsList({\n visibleColumns,\n searchQuery,\n onSearchChange,\n onToggleColumn,\n onSelectAll,\n filteredColumns,\n}: AvailableColumnsListProps): React.ReactElement {\n const selectedCount = visibleColumns.length;\n const totalCount = filteredColumns.length;\n const allFilteredSelected = filteredColumns.every((col) =>\n visibleColumns.some((v) => v.id === col.id),\n );\n const someFilteredSelected = filteredColumns.some((col) =>\n visibleColumns.some((v) => v.id === col.id),\n );\n\n const handleSelectAllClick = useCallback(() => {\n onSelectAll(filteredColumns);\n }, [filteredColumns, onSelectAll]);\n\n return (\n <div className={styles.availableColumnsContainer}>\n <div className={classNames(styles.sectionHeader, styles.sectionTitle)}>\n Add or Remove Columns\n </div>\n <SearchBar\n value={searchQuery}\n onChange={onSearchChange}\n placeholder=\"Search...\"\n aria-label=\"Search available columns\"\n className={styles.searchContainer}\n />\n <Collapsible.Root defaultOpen={true} className={styles.propertiesList}>\n <div className={styles.categoryHeader}>\n <label className={styles.selectAllLabel}>\n <Checkbox\n checked={allFilteredSelected}\n indeterminate={someFilteredSelected && !allFilteredSelected}\n onCheckedChange={handleSelectAllClick}\n className={styles.checkbox}\n />\n All Columns\n </label>\n <Collapsible.Trigger className={styles.categoryTrigger}>\n <span className={styles.categoryCount}>\n {selectedCount}/{totalCount}\n </span>\n <CaretDown className={styles.caretIcon} />\n </Collapsible.Trigger>\n </div>\n <Collapsible.Panel className={styles.propertyList}>\n {filteredColumns.length === 0 ? (\n <div className={styles.emptyState}>No matching columns found</div>\n ) : (\n filteredColumns.map((column) => (\n <PropertyItem\n key={column.id}\n column={column}\n isSelected={visibleColumns.some((v) => v.id === column.id)}\n onToggle={onToggleColumn}\n />\n ))\n )}\n </Collapsible.Panel>\n </Collapsible.Root>\n </div>\n );\n}\n\ninterface PropertyItemProps {\n column: ColumnItem;\n isSelected: boolean;\n onToggle: (column: ColumnItem) => void;\n showInfoIcon?: boolean;\n}\n\nfunction PropertyItem({\n column,\n isSelected,\n onToggle,\n showInfoIcon = false,\n}: PropertyItemProps): React.ReactElement {\n const handleClick = useCallback(() => {\n onToggle(column);\n }, [onToggle, column]);\n\n return (\n <div className={styles.propertyItem}>\n <label className={styles.propertyLabel}>\n <Checkbox\n checked={isSelected}\n onCheckedChange={handleClick}\n className={styles.checkbox}\n />\n <span className={styles.propertyName}>{column.label}</span>\n </label>\n {showInfoIcon && <SmallInfoSign className={styles.infoIcon} />}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -20,11 +20,11 @@ import { Tooltip } from "../base-components/tooltip/Tooltip.js";
20
20
  import { DatePickerCellField } from "./components/DatePickerCellField.js";
21
21
  import { DropdownCellField } from "./components/DropdownCellField.js";
22
22
  import { TextInputCellField } from "./components/TextInputCellField.js";
23
- import { useObjectTableLabels } from "./ObjectTableLabels.js";
24
23
  import { cellValuesEqual } from "./utils/editableUtils.js";
25
24
  import styles from "./EditableCell.module.css.js";
26
25
  const NUMBER_TYPES = ["double", "integer", "long", "float", "decimal", "byte", "short"];
27
26
  const DATE_TYPES = ["datetime", "timestamp"];
27
+ const VALIDATION_ERROR_MESSAGE = "Validation error";
28
28
  function valueToString(value) {
29
29
  if (value == null) {
30
30
  return "";
@@ -65,7 +65,6 @@ function EditableCellInner({
65
65
  rowCellEdits,
66
66
  isRowFocused = false
67
67
  }) {
68
- const labels = useObjectTableLabels();
69
68
  const [inputValue, setInputValue] = useState(valueToString(currentValue));
70
69
  const isCancelled = useRef(false);
71
70
  const validationAbortControllerRef = useRef(null);
@@ -109,10 +108,10 @@ function EditableCellInner({
109
108
  }
110
109
  }, error => {
111
110
  if (!controller.signal.aborted && error.name !== "AbortError") {
112
- onCellValidationError?.(cellId, labels.cellValidationError);
111
+ onCellValidationError?.(cellId, VALIDATION_ERROR_MESSAGE);
113
112
  }
114
113
  });
115
- }, [validateEdit, onCellValidationError, clearCellValidationError, cellId, labels]);
114
+ }, [validateEdit, onCellValidationError, clearCellValidationError, cellId]);
116
115
  const commitEdit = useCallback(newValue => {
117
116
  abortValidation();
118
117
  onCellEdit(cellId, {