@osdk/react-components 0.2.0-beta.27 → 0.2.0-beta.29

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