@osdk/react-components 0.2.0-beta.14 → 0.2.0-beta.16

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 (353) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/build/browser/base-components/action-button/ActionButton.module.css +0 -4
  3. package/build/browser/base-components/checkbox/Checkbox.module.css +0 -4
  4. package/build/browser/base-components/dialog/Dialog.module.css +0 -8
  5. package/build/browser/base-components/draggable-list/DraggableList.js +4 -2
  6. package/build/browser/base-components/draggable-list/DraggableList.js.map +1 -1
  7. package/build/browser/base-components/draggable-list/DraggableList.module.css +0 -8
  8. package/build/browser/filter-list/FilterInput.js +132 -0
  9. package/build/browser/filter-list/FilterInput.js.map +1 -0
  10. package/build/browser/filter-list/FilterList.js +91 -0
  11. package/build/browser/filter-list/FilterList.js.map +1 -0
  12. package/build/browser/filter-list/FilterListApi.js.map +1 -1
  13. package/build/browser/filter-list/FilterListItemApi.js.map +1 -1
  14. package/build/browser/filter-list/base/{FilterList.js → BaseFilterList.js} +30 -31
  15. package/build/browser/filter-list/base/BaseFilterList.js.map +1 -0
  16. package/build/browser/filter-list/base/BaseFilterListApi.js +2 -0
  17. package/build/browser/filter-list/base/BaseFilterListApi.js.map +1 -0
  18. package/build/browser/filter-list/base/FilterIcons.js +63 -0
  19. package/build/browser/filter-list/base/FilterIcons.js.map +1 -0
  20. package/build/browser/filter-list/base/FilterList.module.css +22 -1
  21. package/build/browser/filter-list/base/FilterList.module.css.js +2 -0
  22. package/build/browser/filter-list/base/FilterListContent.js +21 -20
  23. package/build/browser/filter-list/base/FilterListContent.js.map +1 -1
  24. package/build/browser/filter-list/base/FilterListHeader.js +8 -3
  25. package/build/browser/filter-list/base/FilterListHeader.js.map +1 -1
  26. package/build/browser/filter-list/base/FilterListHeader.module.css +25 -1
  27. package/build/browser/filter-list/base/FilterListHeader.module.css.js +3 -0
  28. package/build/browser/filter-list/base/FilterListItem.js +36 -17
  29. package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
  30. package/build/browser/filter-list/base/FilterListItem.module.css +58 -2
  31. package/build/browser/filter-list/base/FilterListItem.module.css.js +2 -0
  32. package/build/browser/filter-list/base/SortableFilterListItem.js +6 -6
  33. package/build/browser/filter-list/base/SortableFilterListItem.js.map +1 -1
  34. package/build/browser/filter-list/base/index.js +1 -2
  35. package/build/browser/filter-list/base/index.js.map +1 -1
  36. package/build/browser/filter-list/base/inputs/CheckboxListInput.js +34 -15
  37. package/build/browser/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
  38. package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css +13 -0
  39. package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css.js +2 -1
  40. package/build/browser/filter-list/base/inputs/DateRangeInput.js.map +1 -1
  41. package/build/browser/filter-list/base/inputs/ListogramInput.js +17 -21
  42. package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
  43. package/build/browser/filter-list/base/inputs/ListogramInput.module.css +25 -19
  44. package/build/browser/filter-list/base/inputs/MultiDateInput.module.css +6 -4
  45. package/build/browser/filter-list/base/inputs/MultiSelectInput.js +7 -14
  46. package/build/browser/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
  47. package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css +4 -1
  48. package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css.js +1 -1
  49. package/build/browser/filter-list/base/inputs/NullValueWrapper.js +4 -23
  50. package/build/browser/filter-list/base/inputs/NullValueWrapper.js.map +1 -1
  51. package/build/browser/filter-list/base/inputs/NullValueWrapper.module.css +3 -2
  52. package/build/browser/filter-list/base/inputs/NumberRangeInput.js.map +1 -1
  53. package/build/browser/filter-list/base/inputs/RangeInput.js +2 -32
  54. package/build/browser/filter-list/base/inputs/RangeInput.js.map +1 -1
  55. package/build/browser/filter-list/base/inputs/RangeInput.module.css +16 -14
  56. package/build/browser/filter-list/base/inputs/SingleDateInput.module.css +2 -1
  57. package/build/browser/filter-list/base/inputs/SingleSelectInput.js +6 -13
  58. package/build/browser/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
  59. package/build/browser/filter-list/base/inputs/TextTagsInput.js +6 -14
  60. package/build/browser/filter-list/base/inputs/TextTagsInput.js.map +1 -1
  61. package/build/browser/filter-list/base/inputs/TimelineInput.js +2 -2
  62. package/build/browser/filter-list/base/inputs/TimelineInput.js.map +1 -1
  63. package/build/browser/filter-list/base/inputs/TimelineInput.module.css +14 -12
  64. package/build/browser/filter-list/base/inputs/shared.module.css +5 -4
  65. package/build/browser/filter-list/hooks/useFilterListState.js +24 -3
  66. package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
  67. package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -1
  68. package/build/browser/filter-list/inputs/CheckboxListFilterInput.js +56 -0
  69. package/build/browser/filter-list/inputs/CheckboxListFilterInput.js.map +1 -0
  70. package/build/browser/filter-list/inputs/ContainsTextFilterInput.js +38 -0
  71. package/build/browser/filter-list/inputs/ContainsTextFilterInput.js.map +1 -0
  72. package/build/browser/filter-list/inputs/DateRangeFilterInput.js +105 -0
  73. package/build/browser/filter-list/inputs/DateRangeFilterInput.js.map +1 -0
  74. package/build/browser/filter-list/inputs/LinkedPropertyInput.js +508 -0
  75. package/build/browser/filter-list/inputs/LinkedPropertyInput.js.map +1 -0
  76. package/build/browser/filter-list/inputs/ListogramFilterInput.js +62 -0
  77. package/build/browser/filter-list/inputs/ListogramFilterInput.js.map +1 -0
  78. package/build/browser/filter-list/inputs/MultiDateFilterInput.js +38 -0
  79. package/build/browser/filter-list/inputs/MultiDateFilterInput.js.map +1 -0
  80. package/build/browser/filter-list/inputs/MultiSelectFilterInput.js +55 -0
  81. package/build/browser/filter-list/inputs/MultiSelectFilterInput.js.map +1 -0
  82. package/build/browser/filter-list/inputs/NumberRangeFilterInput.js +105 -0
  83. package/build/browser/filter-list/inputs/NumberRangeFilterInput.js.map +1 -0
  84. package/build/browser/filter-list/inputs/PropertyFilterInput.js +129 -0
  85. package/build/browser/filter-list/inputs/PropertyFilterInput.js.map +1 -0
  86. package/build/browser/filter-list/inputs/SingleDateFilterInput.js +38 -0
  87. package/build/browser/filter-list/inputs/SingleDateFilterInput.js.map +1 -0
  88. package/build/browser/filter-list/inputs/SingleSelectFilterInput.js +55 -0
  89. package/build/browser/filter-list/inputs/SingleSelectFilterInput.js.map +1 -0
  90. package/build/browser/filter-list/inputs/TextTagsFilterInput.js +54 -0
  91. package/build/browser/filter-list/inputs/TextTagsFilterInput.js.map +1 -0
  92. package/build/browser/filter-list/inputs/TimelineFilterInput.js +49 -0
  93. package/build/browser/filter-list/inputs/TimelineFilterInput.js.map +1 -0
  94. package/build/browser/filter-list/inputs/ToggleFilterInput.js +36 -0
  95. package/build/browser/filter-list/inputs/ToggleFilterInput.js.map +1 -0
  96. package/build/browser/filter-list/types/AggregationTypes.js +2 -0
  97. package/build/browser/filter-list/types/AggregationTypes.js.map +1 -0
  98. package/build/browser/filter-list/types/LinkedFilterTypes.js.map +1 -1
  99. package/build/browser/filter-list/types/index.js +0 -2
  100. package/build/browser/filter-list/types/index.js.map +1 -1
  101. package/build/browser/filter-list/utils/filterStateSerialization.js +42 -0
  102. package/build/browser/filter-list/utils/filterStateSerialization.js.map +1 -0
  103. package/build/browser/filter-list/utils/filterStateToWhereClause.js +19 -11
  104. package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  105. package/build/browser/filter-list/utils/filterValues.js +26 -0
  106. package/build/browser/filter-list/utils/filterValues.js.map +1 -1
  107. package/build/browser/object-table/ColumnConfigDialog.module.css +0 -9
  108. package/build/browser/object-table/MultiColumnSortDialog.module.css +0 -4
  109. package/build/browser/object-table/ObjectTable.js +2 -0
  110. package/build/browser/object-table/ObjectTable.js.map +1 -1
  111. package/build/browser/object-table/ObjectTableApi.js.map +1 -1
  112. package/build/browser/object-table/TableHeaderWithPopover.module.css +0 -12
  113. package/build/browser/object-table/hooks/useRowSelection.js +11 -8
  114. package/build/browser/object-table/hooks/useRowSelection.js.map +1 -1
  115. package/build/browser/public/experimental.js +4 -1
  116. package/build/browser/public/experimental.js.map +1 -1
  117. package/build/browser/shared/ErrorBoundary.module.css +14 -14
  118. package/build/browser/styles.css +207 -124
  119. package/build/cjs/public/experimental.cjs +3156 -2559
  120. package/build/cjs/public/experimental.cjs.map +1 -1
  121. package/build/cjs/public/experimental.css +591 -513
  122. package/build/cjs/public/experimental.css.map +1 -1
  123. package/build/cjs/public/experimental.d.cts +70 -4
  124. package/build/esm/base-components/action-button/ActionButton.module.css +0 -4
  125. package/build/esm/base-components/checkbox/Checkbox.module.css +0 -4
  126. package/build/esm/base-components/dialog/Dialog.module.css +0 -8
  127. package/build/esm/base-components/draggable-list/DraggableList.js +4 -2
  128. package/build/esm/base-components/draggable-list/DraggableList.js.map +1 -1
  129. package/build/esm/base-components/draggable-list/DraggableList.module.css +0 -8
  130. package/build/esm/filter-list/FilterInput.js +132 -0
  131. package/build/esm/filter-list/FilterInput.js.map +1 -0
  132. package/build/esm/filter-list/FilterList.js +91 -0
  133. package/build/esm/filter-list/FilterList.js.map +1 -0
  134. package/build/esm/filter-list/FilterListApi.js.map +1 -1
  135. package/build/esm/filter-list/FilterListItemApi.js.map +1 -1
  136. package/build/esm/filter-list/base/{FilterList.js → BaseFilterList.js} +30 -31
  137. package/build/esm/filter-list/base/BaseFilterList.js.map +1 -0
  138. package/build/esm/filter-list/base/BaseFilterListApi.js +2 -0
  139. package/build/esm/filter-list/base/BaseFilterListApi.js.map +1 -0
  140. package/build/esm/filter-list/base/FilterIcons.js +63 -0
  141. package/build/esm/filter-list/base/FilterIcons.js.map +1 -0
  142. package/build/esm/filter-list/base/FilterList.module.css +22 -1
  143. package/build/esm/filter-list/base/FilterListContent.js +21 -20
  144. package/build/esm/filter-list/base/FilterListContent.js.map +1 -1
  145. package/build/esm/filter-list/base/FilterListHeader.js +8 -3
  146. package/build/esm/filter-list/base/FilterListHeader.js.map +1 -1
  147. package/build/esm/filter-list/base/FilterListHeader.module.css +25 -1
  148. package/build/esm/filter-list/base/FilterListItem.js +36 -17
  149. package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
  150. package/build/esm/filter-list/base/FilterListItem.module.css +58 -2
  151. package/build/esm/filter-list/base/SortableFilterListItem.js +6 -6
  152. package/build/esm/filter-list/base/SortableFilterListItem.js.map +1 -1
  153. package/build/esm/filter-list/base/index.js +1 -2
  154. package/build/esm/filter-list/base/index.js.map +1 -1
  155. package/build/esm/filter-list/base/inputs/CheckboxListInput.js +34 -15
  156. package/build/esm/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
  157. package/build/esm/filter-list/base/inputs/CheckboxListInput.module.css +13 -0
  158. package/build/esm/filter-list/base/inputs/DateRangeInput.js.map +1 -1
  159. package/build/esm/filter-list/base/inputs/ListogramInput.js +17 -21
  160. package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
  161. package/build/esm/filter-list/base/inputs/ListogramInput.module.css +25 -19
  162. package/build/esm/filter-list/base/inputs/MultiDateInput.module.css +6 -4
  163. package/build/esm/filter-list/base/inputs/MultiSelectInput.js +7 -14
  164. package/build/esm/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
  165. package/build/esm/filter-list/base/inputs/MultiSelectInput.module.css +4 -1
  166. package/build/esm/filter-list/base/inputs/NullValueWrapper.js +4 -23
  167. package/build/esm/filter-list/base/inputs/NullValueWrapper.js.map +1 -1
  168. package/build/esm/filter-list/base/inputs/NullValueWrapper.module.css +3 -2
  169. package/build/esm/filter-list/base/inputs/NumberRangeInput.js.map +1 -1
  170. package/build/esm/filter-list/base/inputs/RangeInput.js +2 -32
  171. package/build/esm/filter-list/base/inputs/RangeInput.js.map +1 -1
  172. package/build/esm/filter-list/base/inputs/RangeInput.module.css +16 -14
  173. package/build/esm/filter-list/base/inputs/SingleDateInput.module.css +2 -1
  174. package/build/esm/filter-list/base/inputs/SingleSelectInput.js +6 -13
  175. package/build/esm/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
  176. package/build/esm/filter-list/base/inputs/TextTagsInput.js +6 -14
  177. package/build/esm/filter-list/base/inputs/TextTagsInput.js.map +1 -1
  178. package/build/esm/filter-list/base/inputs/TimelineInput.js +2 -2
  179. package/build/esm/filter-list/base/inputs/TimelineInput.js.map +1 -1
  180. package/build/esm/filter-list/base/inputs/TimelineInput.module.css +14 -12
  181. package/build/esm/filter-list/base/inputs/shared.module.css +5 -4
  182. package/build/esm/filter-list/hooks/useFilterListState.js +24 -3
  183. package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
  184. package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -1
  185. package/build/esm/filter-list/inputs/CheckboxListFilterInput.js +56 -0
  186. package/build/esm/filter-list/inputs/CheckboxListFilterInput.js.map +1 -0
  187. package/build/esm/filter-list/inputs/ContainsTextFilterInput.js +38 -0
  188. package/build/esm/filter-list/inputs/ContainsTextFilterInput.js.map +1 -0
  189. package/build/esm/filter-list/inputs/DateRangeFilterInput.js +105 -0
  190. package/build/esm/filter-list/inputs/DateRangeFilterInput.js.map +1 -0
  191. package/build/esm/filter-list/inputs/LinkedPropertyInput.js +508 -0
  192. package/build/esm/filter-list/inputs/LinkedPropertyInput.js.map +1 -0
  193. package/build/esm/filter-list/inputs/ListogramFilterInput.js +62 -0
  194. package/build/esm/filter-list/inputs/ListogramFilterInput.js.map +1 -0
  195. package/build/esm/filter-list/inputs/MultiDateFilterInput.js +38 -0
  196. package/build/esm/filter-list/inputs/MultiDateFilterInput.js.map +1 -0
  197. package/build/esm/filter-list/inputs/MultiSelectFilterInput.js +55 -0
  198. package/build/esm/filter-list/inputs/MultiSelectFilterInput.js.map +1 -0
  199. package/build/esm/filter-list/inputs/NumberRangeFilterInput.js +105 -0
  200. package/build/esm/filter-list/inputs/NumberRangeFilterInput.js.map +1 -0
  201. package/build/esm/filter-list/inputs/PropertyFilterInput.js +129 -0
  202. package/build/esm/filter-list/inputs/PropertyFilterInput.js.map +1 -0
  203. package/build/esm/filter-list/inputs/SingleDateFilterInput.js +38 -0
  204. package/build/esm/filter-list/inputs/SingleDateFilterInput.js.map +1 -0
  205. package/build/esm/filter-list/inputs/SingleSelectFilterInput.js +55 -0
  206. package/build/esm/filter-list/inputs/SingleSelectFilterInput.js.map +1 -0
  207. package/build/esm/filter-list/inputs/TextTagsFilterInput.js +54 -0
  208. package/build/esm/filter-list/inputs/TextTagsFilterInput.js.map +1 -0
  209. package/build/esm/filter-list/inputs/TimelineFilterInput.js +49 -0
  210. package/build/esm/filter-list/inputs/TimelineFilterInput.js.map +1 -0
  211. package/build/esm/filter-list/inputs/ToggleFilterInput.js +36 -0
  212. package/build/esm/filter-list/inputs/ToggleFilterInput.js.map +1 -0
  213. package/build/esm/filter-list/types/AggregationTypes.js +2 -0
  214. package/build/esm/filter-list/types/AggregationTypes.js.map +1 -0
  215. package/build/esm/filter-list/types/LinkedFilterTypes.js.map +1 -1
  216. package/build/esm/filter-list/types/index.js +0 -2
  217. package/build/esm/filter-list/types/index.js.map +1 -1
  218. package/build/esm/filter-list/utils/filterStateSerialization.js +42 -0
  219. package/build/esm/filter-list/utils/filterStateSerialization.js.map +1 -0
  220. package/build/esm/filter-list/utils/filterStateToWhereClause.js +19 -11
  221. package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  222. package/build/esm/filter-list/utils/filterValues.js +26 -0
  223. package/build/esm/filter-list/utils/filterValues.js.map +1 -1
  224. package/build/esm/object-table/ColumnConfigDialog.module.css +0 -9
  225. package/build/esm/object-table/MultiColumnSortDialog.module.css +0 -4
  226. package/build/esm/object-table/ObjectTable.js +2 -0
  227. package/build/esm/object-table/ObjectTable.js.map +1 -1
  228. package/build/esm/object-table/ObjectTableApi.js.map +1 -1
  229. package/build/esm/object-table/TableHeaderWithPopover.module.css +0 -12
  230. package/build/esm/object-table/hooks/useRowSelection.js +11 -8
  231. package/build/esm/object-table/hooks/useRowSelection.js.map +1 -1
  232. package/build/esm/public/experimental.js +4 -1
  233. package/build/esm/public/experimental.js.map +1 -1
  234. package/build/esm/shared/ErrorBoundary.module.css +14 -14
  235. package/build/types/filter-list/{base/FilterInput.d.ts → FilterInput.d.ts} +2 -2
  236. package/build/types/filter-list/FilterInput.d.ts.map +1 -0
  237. package/build/types/filter-list/{base/FilterList.d.ts → FilterList.d.ts} +1 -1
  238. package/build/types/filter-list/FilterList.d.ts.map +1 -0
  239. package/build/types/filter-list/FilterListApi.d.ts +14 -0
  240. package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
  241. package/build/types/filter-list/FilterListItemApi.d.ts +13 -0
  242. package/build/types/filter-list/FilterListItemApi.d.ts.map +1 -1
  243. package/build/types/filter-list/base/BaseFilterList.d.ts +3 -0
  244. package/build/types/filter-list/base/BaseFilterList.d.ts.map +1 -0
  245. package/build/types/filter-list/base/BaseFilterListApi.d.ts +29 -0
  246. package/build/types/filter-list/base/BaseFilterListApi.d.ts.map +1 -0
  247. package/build/types/filter-list/base/FilterIcons.d.ts +4 -0
  248. package/build/types/filter-list/base/FilterIcons.d.ts.map +1 -0
  249. package/build/types/filter-list/base/FilterListContent.d.ts +8 -8
  250. package/build/types/filter-list/base/FilterListContent.d.ts.map +1 -1
  251. package/build/types/filter-list/base/FilterListHeader.d.ts.map +1 -1
  252. package/build/types/filter-list/base/FilterListItem.d.ts +7 -8
  253. package/build/types/filter-list/base/FilterListItem.d.ts.map +1 -1
  254. package/build/types/filter-list/base/SortableFilterListItem.d.ts +7 -8
  255. package/build/types/filter-list/base/SortableFilterListItem.d.ts.map +1 -1
  256. package/build/types/filter-list/base/index.d.ts +2 -2
  257. package/build/types/filter-list/base/index.d.ts.map +1 -1
  258. package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts +7 -13
  259. package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts.map +1 -1
  260. package/build/types/filter-list/base/inputs/DateRangeInput.d.ts +7 -12
  261. package/build/types/filter-list/base/inputs/DateRangeInput.d.ts.map +1 -1
  262. package/build/types/filter-list/base/inputs/ListogramInput.d.ts +10 -13
  263. package/build/types/filter-list/base/inputs/ListogramInput.d.ts.map +1 -1
  264. package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts +7 -13
  265. package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts.map +1 -1
  266. package/build/types/filter-list/base/inputs/NullValueWrapper.d.ts +5 -11
  267. package/build/types/filter-list/base/inputs/NullValueWrapper.d.ts.map +1 -1
  268. package/build/types/filter-list/base/inputs/NumberRangeInput.d.ts +7 -12
  269. package/build/types/filter-list/base/inputs/NumberRangeInput.d.ts.map +1 -1
  270. package/build/types/filter-list/base/inputs/RangeInput.d.ts +7 -14
  271. package/build/types/filter-list/base/inputs/RangeInput.d.ts.map +1 -1
  272. package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts +7 -13
  273. package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts.map +1 -1
  274. package/build/types/filter-list/base/inputs/TextTagsInput.d.ts +7 -13
  275. package/build/types/filter-list/base/inputs/TextTagsInput.d.ts.map +1 -1
  276. package/build/types/filter-list/hooks/useFilterListState.d.ts +1 -0
  277. package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -1
  278. package/build/types/filter-list/hooks/usePropertyAggregation.d.ts +2 -5
  279. package/build/types/filter-list/hooks/usePropertyAggregation.d.ts.map +1 -1
  280. package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts +14 -0
  281. package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts.map +1 -0
  282. package/build/types/filter-list/inputs/ContainsTextFilterInput.d.ts +10 -0
  283. package/build/types/filter-list/inputs/ContainsTextFilterInput.d.ts.map +1 -0
  284. package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts +12 -0
  285. package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts.map +1 -0
  286. package/build/types/filter-list/{base/inputs → inputs}/LinkedPropertyInput.d.ts +2 -2
  287. package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts.map +1 -0
  288. package/build/types/filter-list/inputs/ListogramFilterInput.d.ts +16 -0
  289. package/build/types/filter-list/inputs/ListogramFilterInput.d.ts.map +1 -0
  290. package/build/types/filter-list/inputs/MultiDateFilterInput.d.ts +9 -0
  291. package/build/types/filter-list/inputs/MultiDateFilterInput.d.ts.map +1 -0
  292. package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts +13 -0
  293. package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts.map +1 -0
  294. package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts +12 -0
  295. package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts.map +1 -0
  296. package/build/types/filter-list/inputs/PropertyFilterInput.d.ts +17 -0
  297. package/build/types/filter-list/inputs/PropertyFilterInput.d.ts.map +1 -0
  298. package/build/types/filter-list/inputs/SingleDateFilterInput.d.ts +9 -0
  299. package/build/types/filter-list/inputs/SingleDateFilterInput.d.ts.map +1 -0
  300. package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts +13 -0
  301. package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts.map +1 -0
  302. package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts +13 -0
  303. package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts.map +1 -0
  304. package/build/types/filter-list/inputs/TimelineFilterInput.d.ts +9 -0
  305. package/build/types/filter-list/inputs/TimelineFilterInput.d.ts.map +1 -0
  306. package/build/types/filter-list/inputs/ToggleFilterInput.d.ts +9 -0
  307. package/build/types/filter-list/inputs/ToggleFilterInput.d.ts.map +1 -0
  308. package/build/types/filter-list/types/AggregationTypes.d.ts +5 -0
  309. package/build/types/filter-list/types/AggregationTypes.d.ts.map +1 -0
  310. package/build/types/filter-list/types/LinkedFilterTypes.d.ts +0 -19
  311. package/build/types/filter-list/types/LinkedFilterTypes.d.ts.map +1 -1
  312. package/build/types/filter-list/types/index.d.ts +0 -2
  313. package/build/types/filter-list/types/index.d.ts.map +1 -1
  314. package/build/types/filter-list/utils/filterStateSerialization.d.ts +3 -0
  315. package/build/types/filter-list/utils/filterStateSerialization.d.ts.map +1 -0
  316. package/build/types/filter-list/utils/filterStateToWhereClause.d.ts +1 -1
  317. package/build/types/filter-list/utils/filterStateToWhereClause.d.ts.map +1 -1
  318. package/build/types/filter-list/utils/filterValues.d.ts +2 -0
  319. package/build/types/filter-list/utils/filterValues.d.ts.map +1 -1
  320. package/build/types/object-table/ObjectTable.d.ts +1 -1
  321. package/build/types/object-table/ObjectTable.d.ts.map +1 -1
  322. package/build/types/object-table/ObjectTableApi.d.ts +7 -1
  323. package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
  324. package/build/types/object-table/hooks/useRowSelection.d.ts +3 -2
  325. package/build/types/object-table/hooks/useRowSelection.d.ts.map +1 -1
  326. package/build/types/public/experimental.d.ts +4 -1
  327. package/build/types/public/experimental.d.ts.map +1 -1
  328. package/package.json +4 -4
  329. package/build/browser/filter-list/base/FilterInput.js +0 -542
  330. package/build/browser/filter-list/base/FilterInput.js.map +0 -1
  331. package/build/browser/filter-list/base/FilterList.js.map +0 -1
  332. package/build/browser/filter-list/base/inputs/LinkedPropertyInput.js +0 -237
  333. package/build/browser/filter-list/base/inputs/LinkedPropertyInput.js.map +0 -1
  334. package/build/browser/filter-list/types/AddFilterMenuTypes.js +0 -2
  335. package/build/browser/filter-list/types/AddFilterMenuTypes.js.map +0 -1
  336. package/build/browser/filter-list/types/FilterPanelTypes.js +0 -2
  337. package/build/browser/filter-list/types/FilterPanelTypes.js.map +0 -1
  338. package/build/esm/filter-list/base/FilterInput.js +0 -542
  339. package/build/esm/filter-list/base/FilterInput.js.map +0 -1
  340. package/build/esm/filter-list/base/FilterList.js.map +0 -1
  341. package/build/esm/filter-list/base/inputs/LinkedPropertyInput.js +0 -237
  342. package/build/esm/filter-list/base/inputs/LinkedPropertyInput.js.map +0 -1
  343. package/build/esm/filter-list/types/AddFilterMenuTypes.js +0 -2
  344. package/build/esm/filter-list/types/AddFilterMenuTypes.js.map +0 -1
  345. package/build/esm/filter-list/types/FilterPanelTypes.js +0 -2
  346. package/build/esm/filter-list/types/FilterPanelTypes.js.map +0 -1
  347. package/build/types/filter-list/base/FilterInput.d.ts.map +0 -1
  348. package/build/types/filter-list/base/FilterList.d.ts.map +0 -1
  349. package/build/types/filter-list/base/inputs/LinkedPropertyInput.d.ts.map +0 -1
  350. package/build/types/filter-list/types/AddFilterMenuTypes.d.ts +0 -56
  351. package/build/types/filter-list/types/AddFilterMenuTypes.d.ts.map +0 -1
  352. package/build/types/filter-list/types/FilterPanelTypes.d.ts +0 -18
  353. package/build/types/filter-list/types/FilterPanelTypes.d.ts.map +0 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BaseFilterListApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseFilterListApi.js","names":[],"sources":["BaseFilterListApi.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type React from \"react\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\n\nexport type RenderFilterInput<D> = (props: {\n definition: D;\n filterKey: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n}) => React.ReactNode;\n\nexport interface BaseFilterListProps<D> {\n filterDefinitions?: Array<D>;\n filterStates: Map<string, FilterState>;\n onFilterStateChanged: (filterKey: string, state: FilterState) => void;\n renderInput: RenderFilterInput<D>;\n getFilterKey: (definition: D) => string;\n getFilterLabel: (definition: D) => string;\n activeFilterCount: number;\n onReset?: () => void;\n onFilterAdded?: () => void;\n onFilterRemoved?: (filterKey: string) => void;\n\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n title?: string;\n titleIcon?: React.ReactNode;\n showResetButton?: boolean;\n showActiveFilterCount?: boolean;\n enableSorting?: boolean;\n className?: string;\n renderAddFilterButton?: () => React.ReactNode;\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,63 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import React from "react";
18
+ export function IncludeIcon() {
19
+ return /*#__PURE__*/React.createElement("svg", {
20
+ width: "14",
21
+ height: "14",
22
+ viewBox: "0 0 16 16",
23
+ fill: "none",
24
+ stroke: "currentColor",
25
+ strokeWidth: "1.5",
26
+ "aria-hidden": "true"
27
+ }, /*#__PURE__*/React.createElement("path", {
28
+ d: "M2 3h12M5 8h6M7 13h2",
29
+ strokeLinecap: "round"
30
+ }));
31
+ }
32
+ export function ExcludeIcon() {
33
+ return /*#__PURE__*/React.createElement("svg", {
34
+ width: "14",
35
+ height: "14",
36
+ viewBox: "0 0 16 16",
37
+ fill: "none",
38
+ stroke: "currentColor",
39
+ strokeWidth: "1.5",
40
+ "aria-hidden": "true"
41
+ }, /*#__PURE__*/React.createElement("path", {
42
+ d: "M2 3h12M5 8h6M7 13h2",
43
+ strokeLinecap: "round"
44
+ }), /*#__PURE__*/React.createElement("path", {
45
+ d: "M3 14L13 2",
46
+ strokeLinecap: "round"
47
+ }));
48
+ }
49
+ export function RemoveIcon() {
50
+ return /*#__PURE__*/React.createElement("svg", {
51
+ width: "14",
52
+ height: "14",
53
+ viewBox: "0 0 16 16",
54
+ fill: "none",
55
+ stroke: "currentColor",
56
+ strokeWidth: "1.5",
57
+ "aria-hidden": "true"
58
+ }, /*#__PURE__*/React.createElement("path", {
59
+ d: "M4 4l8 8M12 4l-8 8",
60
+ strokeLinecap: "round"
61
+ }));
62
+ }
63
+ //# sourceMappingURL=FilterIcons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterIcons.js","names":["React","IncludeIcon","createElement","width","height","viewBox","fill","stroke","strokeWidth","d","strokeLinecap","ExcludeIcon","RemoveIcon"],"sources":["FilterIcons.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 React from \"react\";\n\nexport function IncludeIcon(): React.ReactElement {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n aria-hidden=\"true\"\n >\n <path d=\"M2 3h12M5 8h6M7 13h2\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function ExcludeIcon(): React.ReactElement {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n aria-hidden=\"true\"\n >\n <path d=\"M2 3h12M5 8h6M7 13h2\" strokeLinecap=\"round\" />\n <path d=\"M3 14L13 2\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function RemoveIcon(): React.ReactElement {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n aria-hidden=\"true\"\n >\n <path d=\"M4 4l8 8M12 4l-8 8\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,MAAM,OAAO;AAEzB,OAAO,SAASC,WAAWA,CAAA,EAAuB;EAChD,oBACED,KAAA,CAAAE,aAAA;IACEC,KAAK,EAAC,IAAI;IACVC,MAAM,EAAC,IAAI;IACXC,OAAO,EAAC,WAAW;IACnBC,IAAI,EAAC,MAAM;IACXC,MAAM,EAAC,cAAc;IACrBC,WAAW,EAAC,KAAK;IACjB,eAAY;EAAM,gBAElBR,KAAA,CAAAE,aAAA;IAAMO,CAAC,EAAC,sBAAsB;IAACC,aAAa,EAAC;EAAO,CAAE,CACnD,CAAC;AAEV;AAEA,OAAO,SAASC,WAAWA,CAAA,EAAuB;EAChD,oBACEX,KAAA,CAAAE,aAAA;IACEC,KAAK,EAAC,IAAI;IACVC,MAAM,EAAC,IAAI;IACXC,OAAO,EAAC,WAAW;IACnBC,IAAI,EAAC,MAAM;IACXC,MAAM,EAAC,cAAc;IACrBC,WAAW,EAAC,KAAK;IACjB,eAAY;EAAM,gBAElBR,KAAA,CAAAE,aAAA;IAAMO,CAAC,EAAC,sBAAsB;IAACC,aAAa,EAAC;EAAO,CAAE,CAAC,eACvDV,KAAA,CAAAE,aAAA;IAAMO,CAAC,EAAC,YAAY;IAACC,aAAa,EAAC;EAAO,CAAE,CACzC,CAAC;AAEV;AAEA,OAAO,SAASE,UAAUA,CAAA,EAAuB;EAC/C,oBACEZ,KAAA,CAAAE,aAAA;IACEC,KAAK,EAAC,IAAI;IACVC,MAAM,EAAC,IAAI;IACXC,OAAO,EAAC,WAAW;IACnBC,IAAI,EAAC,MAAM;IACXC,MAAM,EAAC,cAAc;IACrBC,WAAW,EAAC,KAAK;IACjB,eAAY;EAAM,gBAElBR,KAAA,CAAAE,aAAA;IAAMO,CAAC,EAAC,oBAAoB;IAACC,aAAa,EAAC;EAAO,CAAE,CACjD,CAAC;AAEV","ignoreList":[]}
@@ -24,13 +24,34 @@
24
24
  gap: var(--osdk-filter-list-gap);
25
25
  }
26
26
 
27
+ .contentWrapper {
28
+ display: grid;
29
+ grid-template-rows: 1fr;
30
+ transition: grid-template-rows var(--osdk-filter-list-collapse-transition);
31
+
32
+ @media (prefers-reduced-motion: reduce) {
33
+ transition: none;
34
+ }
35
+ }
36
+
37
+ .contentWrapper[data-collapsed="true"] {
38
+ grid-template-rows: 0fr;
39
+ }
40
+
41
+ .contentInner {
42
+ overflow: hidden;
43
+ display: flex;
44
+ flex-direction: column;
45
+ gap: var(--osdk-filter-list-gap);
46
+ }
47
+
27
48
  .addButtonContainer {
28
49
  display: flex;
29
50
  justify-content: center;
30
51
  position: sticky;
31
52
  bottom: 0;
32
53
  padding-top: var(--osdk-filter-list-addButton-padding-top);
33
- background: var(--osdk-filter-list-addButton-container-bg, var(--osdk-filter-list-bg));
54
+ background: var(--osdk-filter-list-addButton-container-bg);
34
55
  }
35
56
 
36
57
  .addButtonContainer > * {
@@ -1,6 +1,8 @@
1
1
  // CSS Module proxy for FilterList.module.css
2
2
  const styles = {
3
3
  "filterList": "FilterList-module__filterList___wmzCNbkH",
4
+ "contentWrapper": "FilterList-module__contentWrapper___Y8k76Dtw",
5
+ "contentInner": "FilterList-module__contentInner___5St4fWIE",
4
6
  "addButtonContainer": "FilterList-module__addButtonContainer___kq300FEV",
5
7
  "addButton": "FilterList-module__addButton___oD4yvwyZ"
6
8
  };
@@ -18,8 +18,6 @@ import { closestCenter, DndContext, DragOverlay, KeyboardSensor, PointerSensor,
18
18
  import { arrayMove, SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy } from "@dnd-kit/sortable";
19
19
  import classnames from "classnames";
20
20
  import React, { useCallback, useEffect, useMemo, useState } from "react";
21
- import { getFilterKey } from "../utils/getFilterKey.js";
22
- import { getFilterLabel } from "../utils/getFilterLabel.js";
23
21
  import styles from "./FilterListContent.module.css.js";
24
22
  import { FilterListItem } from "./FilterListItem.js";
25
23
  import { SortableFilterListItem } from "./SortableFilterListItem.js";
@@ -34,12 +32,13 @@ const POINTER_ACTIVATION_CONSTRAINT = {
34
32
  };
35
33
  const MODIFIERS = [restrictToVerticalAxis];
36
34
  export function FilterListContent({
37
- objectType,
38
- objectSet,
39
35
  filterDefinitions,
40
36
  filterStates,
41
37
  onFilterStateChanged,
42
- whereClause,
38
+ onFilterRemoved,
39
+ renderInput,
40
+ getFilterKey,
41
+ getFilterLabel,
43
42
  enableSorting,
44
43
  className,
45
44
  style
@@ -52,7 +51,7 @@ export function FilterListContent({
52
51
  }
53
52
  }, [filterDefinitions]);
54
53
  const renderDefinitions = enableSorting ? internalOrder : filterDefinitions;
55
- const sortableIds = useMemo(() => enableSorting ? internalOrder.map(def => getFilterKey(def)) : [], [enableSorting, internalOrder]);
54
+ const sortableIds = useMemo(() => enableSorting ? internalOrder.map(def => getFilterKey(def)) : [], [enableSorting, internalOrder, getFilterKey]);
56
55
  const pointerSensor = useSensor(PointerSensor, {
57
56
  activationConstraint: POINTER_ACTIVATION_CONSTRAINT
58
57
  });
@@ -62,7 +61,7 @@ export function FilterListContent({
62
61
  const sensors = useSensors(pointerSensor, keyboardSensor);
63
62
  const activeIndex = activeId != null ? sortableIds.indexOf(String(activeId)) : -1;
64
63
  const activeDefinition = activeIndex >= 0 ? internalOrder[activeIndex] : undefined;
65
- const activeFilterKey = useMemo(() => activeDefinition ? getFilterKey(activeDefinition) : undefined, [activeDefinition]);
64
+ const activeFilterKey = useMemo(() => activeDefinition ? getFilterKey(activeDefinition) : undefined, [activeDefinition, getFilterKey]);
66
65
  const handleDragStart = useCallback(event => {
67
66
  setActiveId(event.active.id);
68
67
  }, []);
@@ -123,7 +122,10 @@ export function FilterListContent({
123
122
  const label = def ? getFilterLabel(def) : "filter";
124
123
  return `Cancelled dragging ${label} filter`;
125
124
  }
126
- }), [internalOrder, sortableIds]);
125
+ }), [internalOrder, sortableIds, getFilterLabel]);
126
+ const accessibility = useMemo(() => ({
127
+ announcements
128
+ }), [announcements]);
127
129
  if (!renderDefinitions || renderDefinitions.length === 0) {
128
130
  return /*#__PURE__*/React.createElement("div", {
129
131
  className: classnames(styles.content, className),
@@ -142,38 +144,37 @@ export function FilterListContent({
142
144
  onDragStart: handleDragStart,
143
145
  onDragEnd: handleDragEnd,
144
146
  onDragCancel: handleDragCancel,
145
- accessibility: {
146
- announcements
147
- }
147
+ accessibility: accessibility
148
148
  }, /*#__PURE__*/React.createElement(SortableContext, {
149
149
  items: sortableIds,
150
150
  strategy: verticalListSortingStrategy
151
151
  }, internalOrder.map((definition, index) => {
152
152
  const id = sortableIds[index];
153
153
  const filterKey = getFilterKey(definition);
154
+ const label = getFilterLabel(definition);
154
155
  const state = filterStates.get(filterKey);
155
156
  return /*#__PURE__*/React.createElement(SortableFilterListItem, {
156
157
  key: id,
157
158
  id: id,
158
- objectType: objectType,
159
- objectSet: objectSet,
160
159
  definition: definition,
161
160
  filterKey: filterKey,
161
+ label: label,
162
162
  filterState: state,
163
163
  onFilterStateChanged: onFilterStateChanged,
164
- whereClause: whereClause
164
+ onFilterRemoved: onFilterRemoved,
165
+ renderInput: renderInput
165
166
  });
166
167
  })), /*#__PURE__*/React.createElement(DragOverlay, {
167
168
  dropAnimation: null,
168
169
  className: styles.dragOverlay
169
170
  }, activeDefinition && activeFilterKey && /*#__PURE__*/React.createElement(FilterListItem, {
170
- objectType: objectType,
171
- objectSet: objectSet,
172
171
  definition: activeDefinition,
173
172
  filterKey: activeFilterKey,
173
+ label: getFilterLabel(activeDefinition),
174
174
  filterState: filterStates.get(activeFilterKey),
175
175
  onFilterStateChanged: onFilterStateChanged,
176
- whereClause: whereClause
176
+ onFilterRemoved: onFilterRemoved,
177
+ renderInput: renderInput
177
178
  }))));
178
179
  }
179
180
  return /*#__PURE__*/React.createElement("div", {
@@ -184,13 +185,13 @@ export function FilterListContent({
184
185
  const state = filterStates.get(filterKey);
185
186
  return /*#__PURE__*/React.createElement(FilterListItem, {
186
187
  key: filterKey,
187
- objectType: objectType,
188
- objectSet: objectSet,
189
188
  definition: definition,
190
189
  filterKey: filterKey,
190
+ label: getFilterLabel(definition),
191
191
  filterState: state,
192
192
  onFilterStateChanged: onFilterStateChanged,
193
- whereClause: whereClause
193
+ onFilterRemoved: onFilterRemoved,
194
+ renderInput: renderInput
194
195
  });
195
196
  }));
196
197
  }
@@ -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","getFilterKey","getFilterLabel","styles","FilterListItem","SortableFilterListItem","restrictToVerticalAxis","transform","x","POINTER_ACTIVATION_CONSTRAINT","distance","MODIFIERS","FilterListContent","objectType","objectSet","filterDefinitions","filterStates","onFilterStateChanged","whereClause","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","createElement","content","collisionDetection","modifiers","accessibility","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 type { ObjectSet, ObjectTypeDefinition, WhereClause } from \"@osdk/api\";\nimport classnames from \"classnames\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { FilterDefinitionUnion } from \"../FilterListApi.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { getFilterKey } from \"../utils/getFilterKey.js\";\nimport { getFilterLabel } from \"../utils/getFilterLabel.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<Q extends ObjectTypeDefinition> {\n objectType: Q;\n objectSet: ObjectSet<Q>;\n filterDefinitions?: Array<FilterDefinitionUnion<Q>>;\n filterStates: Map<string, FilterState>;\n onFilterStateChanged: (\n filterKey: string,\n state: FilterState,\n ) => void;\n whereClause: WhereClause<Q>;\n enableSorting?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function FilterListContent<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n filterDefinitions,\n filterStates,\n onFilterStateChanged,\n whereClause,\n enableSorting,\n className,\n style,\n}: FilterListContentProps<Q>): React.ReactElement {\n const [internalOrder, setInternalOrder] = useState<\n Array<FilterDefinitionUnion<Q>>\n >(() => filterDefinitions ?? []);\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],\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],\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],\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={{ announcements }}\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 state = filterStates.get(filterKey);\n\n return (\n <SortableFilterListItem\n key={id}\n id={id}\n objectType={objectType}\n objectSet={objectSet}\n definition={definition}\n filterKey={filterKey}\n filterState={state}\n onFilterStateChanged={onFilterStateChanged}\n whereClause={whereClause}\n />\n );\n })}\n </SortableContext>\n\n <DragOverlay\n dropAnimation={null}\n className={styles.dragOverlay}\n >\n {activeDefinition && activeFilterKey && (\n <FilterListItem\n objectType={objectType}\n objectSet={objectSet}\n definition={activeDefinition}\n filterKey={activeFilterKey}\n filterState={filterStates.get(activeFilterKey)}\n onFilterStateChanged={onFilterStateChanged}\n whereClause={whereClause}\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 objectType={objectType}\n objectSet={objectSet}\n definition={definition}\n filterKey={filterKey}\n filterState={state}\n onFilterStateChanged={onFilterStateChanged}\n whereClause={whereClause}\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","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":[]}
@@ -15,6 +15,7 @@
15
15
  */
16
16
 
17
17
  import { Button } from "@base-ui/react/button";
18
+ import classnames from "classnames";
18
19
  import React, { memo, useCallback } from "react";
19
20
  import styles from "./FilterListHeader.module.css.js";
20
21
  function FilterListHeaderInner({
@@ -38,9 +39,13 @@ function FilterListHeaderInner({
38
39
  "aria-expanded": !collapsed,
39
40
  "aria-label": collapsed ? "Expand filters" : "Collapse filters"
40
41
  }, /*#__PURE__*/React.createElement("span", {
41
- className: styles.collapseIcon,
42
+ className: classnames(styles.collapseIcon, collapsed && styles.collapsed)
43
+ })), /*#__PURE__*/React.createElement("div", {
44
+ className: styles.headerContentWrapper,
42
45
  "data-collapsed": collapsed
43
- })), !collapsed && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
46
+ }, /*#__PURE__*/React.createElement("div", {
47
+ className: styles.headerContentInner
48
+ }, /*#__PURE__*/React.createElement("div", {
44
49
  className: styles.titleContainer
45
50
  }, titleIcon && /*#__PURE__*/React.createElement("span", {
46
51
  className: styles.titleIcon
@@ -52,7 +57,7 @@ function FilterListHeaderInner({
52
57
  className: styles.resetButton,
53
58
  onClick: onReset,
54
59
  disabled: activeFilterCount === 0
55
- }, "Reset")));
60
+ }, "Reset"))));
56
61
  }
57
62
  export const FilterListHeader = /*#__PURE__*/memo(FilterListHeaderInner);
58
63
  //# sourceMappingURL=FilterListHeader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterListHeader.js","names":["Button","React","memo","useCallback","styles","FilterListHeaderInner","title","titleIcon","collapsed","onCollapsedChange","showResetButton","onReset","showActiveFilterCount","activeFilterCount","handleCollapseClick","createElement","className","header","collapseButton","onClick","collapseIcon","Fragment","titleContainer","activeCount","resetButton","disabled","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 styles from \"./FilterListHeader.module.css\";\n\ninterface FilterListHeaderProps {\n title?: string;\n titleIcon?: ReactNode;\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n showResetButton?: boolean;\n onReset?: () => void;\n showActiveFilterCount?: boolean;\n activeFilterCount?: number;\n}\n\nfunction FilterListHeaderInner({\n title,\n titleIcon,\n collapsed = false,\n onCollapsedChange,\n showResetButton,\n onReset,\n showActiveFilterCount,\n activeFilterCount = 0,\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 {showCollapseButton && (\n <Button\n className={styles.collapseButton}\n onClick={handleCollapseClick}\n aria-expanded={!collapsed}\n aria-label={collapsed ? \"Expand filters\" : \"Collapse filters\"}\n >\n <span\n className={styles.collapseIcon}\n data-collapsed={collapsed}\n />\n </Button>\n )}\n\n {!collapsed && (\n <>\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 {showResetButton && (\n <Button\n className={styles.resetButton}\n onClick={onReset}\n disabled={activeFilterCount === 0}\n >\n Reset\n </Button>\n )}\n </>\n )}\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,OAAOC,MAAM,MAAM,+BAA+B;AAalD,SAASC,qBAAqBA,CAAC;EAC7BC,KAAK;EACLC,SAAS;EACTC,SAAS,GAAG,KAAK;EACjBC,iBAAiB;EACjBC,eAAe;EACfC,OAAO;EACPC,qBAAqB;EACrBC,iBAAiB,GAAG;AACC,CAAC,EAAsB;EAG5C,MAAMC,mBAAmB,GAAGX,WAAW,CAAC,MAAM;IAC5CM,iBAAiB,GAAG,CAACD,SAAS,CAAC;EACjC,CAAC,EAAE,CAACC,iBAAiB,EAAED,SAAS,CAAC,CAAC;EAElC,oBACEP,KAAA,CAAAc,aAAA;IAAKC,SAAS,EAAEZ,MAAM,CAACa;EAAO,GAPLR,iBAAiB,IAAI,IAAI,iBAS9CR,KAAA,CAAAc,aAAA,CAACf,MAAM;IACLgB,SAAS,EAAEZ,MAAM,CAACc,cAAe;IACjCC,OAAO,EAAEL,mBAAoB;IAC7B,iBAAe,CAACN,SAAU;IAC1B,cAAYA,SAAS,GAAG,gBAAgB,GAAG;EAAmB,gBAE9DP,KAAA,CAAAc,aAAA;IACEC,SAAS,EAAEZ,MAAM,CAACgB,YAAa;IAC/B,kBAAgBZ;EAAU,CAC3B,CACK,CACT,EAEA,CAACA,SAAS,iBACTP,KAAA,CAAAc,aAAA,CAAAd,KAAA,CAAAoB,QAAA,qBACEpB,KAAA,CAAAc,aAAA;IAAKC,SAAS,EAAEZ,MAAM,CAACkB;EAAe,GACnCf,SAAS,iBACRN,KAAA,CAAAc,aAAA;IAAMC,SAAS,EAAEZ,MAAM,CAACG;EAAU,GAC/BA,SACG,CACP,EACAD,KAAK,iBACJL,KAAA,CAAAc,aAAA;IAAMC,SAAS,EAAEZ,MAAM,CAACE;EAAM,GAC3BA,KACG,CACP,EACAM,qBAAqB,IAAIC,iBAAiB,GAAG,CAAC,iBAC7CZ,KAAA,CAAAc,aAAA;IAAMC,SAAS,EAAEZ,MAAM,CAACmB;EAAY,GAAC,GAClC,EAACV,iBAAiB,EAAC,GAChB,CAEL,CAAC,EAELH,eAAe,iBACdT,KAAA,CAAAc,aAAA,CAACf,MAAM;IACLgB,SAAS,EAAEZ,MAAM,CAACoB,WAAY;IAC9BL,OAAO,EAAER,OAAQ;IACjBc,QAAQ,EAAEZ,iBAAiB,KAAK;EAAE,GACnC,OAEO,CAEV,CAED,CAAC;AAEV;AAEA,OAAO,MAAMa,gBAEZ,gBAAGxB,IAAI,CAACG,qBAAqB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"FilterListHeader.js","names":["Button","classnames","React","memo","useCallback","styles","FilterListHeaderInner","title","titleIcon","collapsed","onCollapsedChange","showResetButton","onReset","showActiveFilterCount","activeFilterCount","handleCollapseClick","createElement","className","header","collapseButton","onClick","collapseIcon","headerContentWrapper","headerContentInner","titleContainer","activeCount","resetButton","disabled","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 classnames from \"classnames\";\nimport React, { memo, type ReactNode, useCallback } from \"react\";\nimport styles from \"./FilterListHeader.module.css\";\n\ninterface FilterListHeaderProps {\n title?: string;\n titleIcon?: ReactNode;\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n showResetButton?: boolean;\n onReset?: () => void;\n showActiveFilterCount?: boolean;\n activeFilterCount?: number;\n}\n\nfunction FilterListHeaderInner({\n title,\n titleIcon,\n collapsed = false,\n onCollapsedChange,\n showResetButton,\n onReset,\n showActiveFilterCount,\n activeFilterCount = 0,\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 {showCollapseButton && (\n <Button\n className={styles.collapseButton}\n onClick={handleCollapseClick}\n aria-expanded={!collapsed}\n aria-label={collapsed ? \"Expand filters\" : \"Collapse filters\"}\n >\n <span\n className={classnames(\n styles.collapseIcon,\n collapsed && styles.collapsed,\n )}\n />\n </Button>\n )}\n\n <div\n className={styles.headerContentWrapper}\n data-collapsed={collapsed}\n >\n <div className={styles.headerContentInner}>\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 {showResetButton && (\n <Button\n className={styles.resetButton}\n onClick={onReset}\n disabled={activeFilterCount === 0}\n >\n Reset\n </Button>\n )}\n </div>\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,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,IAAI,EAAkBC,WAAW,QAAQ,OAAO;AAChE,OAAOC,MAAM,MAAM,+BAA+B;AAalD,SAASC,qBAAqBA,CAAC;EAC7BC,KAAK;EACLC,SAAS;EACTC,SAAS,GAAG,KAAK;EACjBC,iBAAiB;EACjBC,eAAe;EACfC,OAAO;EACPC,qBAAqB;EACrBC,iBAAiB,GAAG;AACC,CAAC,EAAsB;EAG5C,MAAMC,mBAAmB,GAAGX,WAAW,CAAC,MAAM;IAC5CM,iBAAiB,GAAG,CAACD,SAAS,CAAC;EACjC,CAAC,EAAE,CAACC,iBAAiB,EAAED,SAAS,CAAC,CAAC;EAElC,oBACEP,KAAA,CAAAc,aAAA;IAAKC,SAAS,EAAEZ,MAAM,CAACa;EAAO,GAPLR,iBAAiB,IAAI,IAAI,iBAS9CR,KAAA,CAAAc,aAAA,CAAChB,MAAM;IACLiB,SAAS,EAAEZ,MAAM,CAACc,cAAe;IACjCC,OAAO,EAAEL,mBAAoB;IAC7B,iBAAe,CAACN,SAAU;IAC1B,cAAYA,SAAS,GAAG,gBAAgB,GAAG;EAAmB,gBAE9DP,KAAA,CAAAc,aAAA;IACEC,SAAS,EAAEhB,UAAU,CACnBI,MAAM,CAACgB,YAAY,EACnBZ,SAAS,IAAIJ,MAAM,CAACI,SACtB;EAAE,CACH,CACK,CACT,eAEDP,KAAA,CAAAc,aAAA;IACEC,SAAS,EAAEZ,MAAM,CAACiB,oBAAqB;IACvC,kBAAgBb;EAAU,gBAE1BP,KAAA,CAAAc,aAAA;IAAKC,SAAS,EAAEZ,MAAM,CAACkB;EAAmB,gBACxCrB,KAAA,CAAAc,aAAA;IAAKC,SAAS,EAAEZ,MAAM,CAACmB;EAAe,GACnChB,SAAS,iBACRN,KAAA,CAAAc,aAAA;IAAMC,SAAS,EAAEZ,MAAM,CAACG;EAAU,GAC/BA,SACG,CACP,EACAD,KAAK,iBACJL,KAAA,CAAAc,aAAA;IAAMC,SAAS,EAAEZ,MAAM,CAACE;EAAM,GAC3BA,KACG,CACP,EACAM,qBAAqB,IAAIC,iBAAiB,GAAG,CAAC,iBAC7CZ,KAAA,CAAAc,aAAA;IAAMC,SAAS,EAAEZ,MAAM,CAACoB;EAAY,GAAC,GAClC,EAACX,iBAAiB,EAAC,GAChB,CAEL,CAAC,EAELH,eAAe,iBACdT,KAAA,CAAAc,aAAA,CAAChB,MAAM;IACLiB,SAAS,EAAEZ,MAAM,CAACqB,WAAY;IAC9BN,OAAO,EAAER,OAAQ;IACjBe,QAAQ,EAAEb,iBAAiB,KAAK;EAAE,GACnC,OAEO,CAEP,CACF,CACF,CAAC;AAEV;AAEA,OAAO,MAAMc,gBAEZ,gBAAGzB,IAAI,CAACG,qBAAqB,CAAC","ignoreList":[]}
@@ -92,10 +92,34 @@
92
92
  }
93
93
  }
94
94
 
95
- .collapseIcon[data-collapsed="true"] {
95
+ .collapsed {
96
96
  transform: rotate(-135deg);
97
97
  }
98
98
 
99
+ .headerContentWrapper {
100
+ display: grid;
101
+ grid-template-columns: 1fr;
102
+ overflow: hidden;
103
+ transition: grid-template-columns var(--osdk-filter-list-collapse-transition);
104
+
105
+ @media (prefers-reduced-motion: reduce) {
106
+ transition: none;
107
+ }
108
+ }
109
+
110
+ .headerContentWrapper[data-collapsed="true"] {
111
+ grid-template-columns: 0fr;
112
+ }
113
+
114
+ .headerContentInner {
115
+ display: flex;
116
+ align-items: center;
117
+ justify-content: space-between;
118
+ flex: 1;
119
+ overflow: hidden;
120
+ min-width: 0;
121
+ }
122
+
99
123
  .resetButton {
100
124
  font-family: var(--osdk-filter-header-font-family);
101
125
  font-size: var(--osdk-filter-header-reset-font-size);
@@ -7,6 +7,9 @@ const styles = {
7
7
  "activeCount": "FilterListHeader-module__activeCount___GyBsnsQL",
8
8
  "collapseButton": "FilterListHeader-module__collapseButton___N1-sj3B3",
9
9
  "collapseIcon": "FilterListHeader-module__collapseIcon___P4YOgKig",
10
+ "collapsed": "FilterListHeader-module__collapsed___RKg0zje4",
11
+ "headerContentWrapper": "FilterListHeader-module__headerContentWrapper___Jb48M86S",
12
+ "headerContentInner": "FilterListHeader-module__headerContentInner___d2-TGJNm",
10
13
  "resetButton": "FilterListHeader-module__resetButton___jLcUypov"
11
14
  };
12
15
 
@@ -15,53 +15,72 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
+ import { Button } from "@base-ui/react/button";
18
19
  import classnames from "classnames";
19
20
  import React, { memo, useCallback } from "react";
20
21
  import { ErrorBoundary } from "../../shared/ErrorBoundary.js";
21
- import { getFilterLabel } from "../utils/getFilterLabel.js";
22
+ import { supportsExcluding } from "../utils/filterValues.js";
22
23
  import { DragHandleIcon } from "./DragHandleIcon.js";
23
- import { FilterInput } from "./FilterInput.js";
24
+ import { ExcludeIcon, IncludeIcon, RemoveIcon } from "./FilterIcons.js";
24
25
  import styles from "./FilterListItem.module.css.js";
25
26
  function FilterListItemInner({
26
- objectType,
27
- objectSet,
28
27
  definition,
29
28
  filterKey,
29
+ label,
30
30
  filterState,
31
31
  onFilterStateChanged,
32
- whereClause,
32
+ onFilterRemoved,
33
+ renderInput,
33
34
  dragHandleAttributes,
34
35
  dragHandleListeners,
35
36
  className,
36
37
  style
37
38
  }) {
38
- const label = getFilterLabel(definition);
39
39
  const handleFilterStateChanged = useCallback(newState => {
40
40
  onFilterStateChanged(filterKey, newState);
41
41
  }, [filterKey, onFilterStateChanged]);
42
+ const handleToggleExclude = useCallback(() => {
43
+ if (filterState) {
44
+ onFilterStateChanged(filterKey, {
45
+ ...filterState,
46
+ isExcluding: !filterState.isExcluding
47
+ });
48
+ }
49
+ }, [filterKey, filterState, onFilterStateChanged]);
50
+ const handleRemove = useCallback(() => {
51
+ onFilterRemoved?.(filterKey);
52
+ }, [filterKey, onFilterRemoved]);
53
+ const isExcluding = filterState?.isExcluding ?? false;
54
+ const showExcludeToggle = supportsExcluding(filterState);
42
55
  return /*#__PURE__*/React.createElement("div", {
43
56
  className: classnames(styles.filterItem, className),
44
57
  style: style,
45
- "data-filter-type": definition.type
58
+ "data-excluding": isExcluding || undefined
46
59
  }, /*#__PURE__*/React.createElement("div", {
47
60
  className: styles.itemHeader
48
- }, dragHandleAttributes && /*#__PURE__*/React.createElement("button", _extends({
49
- type: "button",
61
+ }, dragHandleAttributes && /*#__PURE__*/React.createElement(Button, _extends({
50
62
  className: styles.dragHandle,
51
63
  "aria-label": `Reorder ${label}`
52
64
  }, dragHandleAttributes, dragHandleListeners), /*#__PURE__*/React.createElement(DragHandleIcon, null)), /*#__PURE__*/React.createElement("span", {
53
65
  className: styles.itemLabel
54
- }, label)), /*#__PURE__*/React.createElement("div", {
66
+ }, label), showExcludeToggle && /*#__PURE__*/React.createElement(Button, {
67
+ className: styles.excludeToggle,
68
+ onClick: handleToggleExclude,
69
+ "aria-pressed": isExcluding,
70
+ "aria-label": isExcluding ? "Switch to include mode" : "Switch to exclude mode"
71
+ }, isExcluding ? /*#__PURE__*/React.createElement(ExcludeIcon, null) : /*#__PURE__*/React.createElement(IncludeIcon, null)), onFilterRemoved && /*#__PURE__*/React.createElement(Button, {
72
+ className: styles.removeButton,
73
+ onClick: handleRemove,
74
+ "aria-label": `Remove ${label} filter`
75
+ }, /*#__PURE__*/React.createElement(RemoveIcon, null))), /*#__PURE__*/React.createElement("div", {
55
76
  className: styles.itemContent
56
77
  }, /*#__PURE__*/React.createElement(ErrorBoundary, {
57
78
  errorMessage: "Error loading filter"
58
- }, /*#__PURE__*/React.createElement(FilterInput, {
59
- objectType: objectType,
60
- objectSet: objectSet,
61
- definition: definition,
62
- filterState: filterState,
63
- onFilterStateChanged: handleFilterStateChanged,
64
- whereClause: whereClause
79
+ }, renderInput({
80
+ definition,
81
+ filterKey,
82
+ filterState,
83
+ onFilterStateChanged: handleFilterStateChanged
65
84
  }))));
66
85
  }
67
86
  export const FilterListItem = /*#__PURE__*/memo(FilterListItemInner);
@@ -1 +1 @@
1
- {"version":3,"file":"FilterListItem.js","names":["classnames","React","memo","useCallback","ErrorBoundary","getFilterLabel","DragHandleIcon","FilterInput","styles","FilterListItemInner","objectType","objectSet","definition","filterKey","filterState","onFilterStateChanged","whereClause","dragHandleAttributes","dragHandleListeners","className","style","label","handleFilterStateChanged","newState","createElement","filterItem","type","itemHeader","_extends","dragHandle","itemLabel","itemContent","errorMessage","FilterListItem"],"sources":["FilterListItem.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n DraggableAttributes,\n DraggableSyntheticListeners,\n} from \"@dnd-kit/core\";\nimport type { ObjectSet, ObjectTypeDefinition, WhereClause } from \"@osdk/api\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback } from \"react\";\nimport { ErrorBoundary } from \"../../shared/ErrorBoundary.js\";\nimport type { FilterDefinitionUnion } from \"../FilterListApi.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { getFilterLabel } from \"../utils/getFilterLabel.js\";\nimport { DragHandleIcon } from \"./DragHandleIcon.js\";\nimport { FilterInput } from \"./FilterInput.js\";\nimport styles from \"./FilterListItem.module.css\";\n\ninterface FilterListItemProps<Q extends ObjectTypeDefinition> {\n objectType: Q;\n objectSet: ObjectSet<Q>;\n definition: FilterDefinitionUnion<Q>;\n filterKey: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (\n filterKey: string,\n state: FilterState,\n ) => void;\n whereClause: WhereClause<Q>;\n dragHandleAttributes?: DraggableAttributes;\n dragHandleListeners?: DraggableSyntheticListeners;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction FilterListItemInner<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n definition,\n filterKey,\n filterState,\n onFilterStateChanged,\n whereClause,\n dragHandleAttributes,\n dragHandleListeners,\n className,\n style,\n}: FilterListItemProps<Q>): React.ReactElement {\n const label = getFilterLabel(definition);\n\n const handleFilterStateChanged = useCallback(\n (newState: FilterState) => {\n onFilterStateChanged(filterKey, newState);\n },\n [filterKey, onFilterStateChanged],\n );\n\n return (\n <div\n className={classnames(styles.filterItem, className)}\n style={style}\n data-filter-type={definition.type}\n >\n <div className={styles.itemHeader}>\n {dragHandleAttributes && (\n <button\n type=\"button\"\n className={styles.dragHandle}\n aria-label={`Reorder ${label}`}\n {...dragHandleAttributes}\n {...dragHandleListeners}\n >\n <DragHandleIcon />\n </button>\n )}\n <span className={styles.itemLabel}>{label}</span>\n </div>\n\n <div className={styles.itemContent}>\n <ErrorBoundary errorMessage=\"Error loading filter\">\n <FilterInput\n objectType={objectType}\n objectSet={objectSet}\n definition={definition}\n filterState={filterState}\n onFilterStateChanged={handleFilterStateChanged}\n whereClause={whereClause}\n />\n </ErrorBoundary>\n </div>\n </div>\n );\n}\n\nexport const FilterListItem = memo(\n FilterListItemInner,\n) as typeof FilterListItemInner;\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA,OAAOA,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,IAAI,EAAEC,WAAW,QAAQ,OAAO;AAChD,SAASC,aAAa,QAAQ,+BAA+B;AAG7D,SAASC,cAAc,QAAQ,4BAA4B;AAC3D,SAASC,cAAc,QAAQ,qBAAqB;AACpD,SAASC,WAAW,QAAQ,kBAAkB;AAC9C,OAAOC,MAAM,MAAM,6BAA6B;AAmBhD,SAASC,mBAAmBA,CAAiC;EAC3DC,UAAU;EACVC,SAAS;EACTC,UAAU;EACVC,SAAS;EACTC,WAAW;EACXC,oBAAoB;EACpBC,WAAW;EACXC,oBAAoB;EACpBC,mBAAmB;EACnBC,SAAS;EACTC;AACsB,CAAC,EAAsB;EAC7C,MAAMC,KAAK,GAAGhB,cAAc,CAACO,UAAU,CAAC;EAExC,MAAMU,wBAAwB,GAAGnB,WAAW,CACzCoB,QAAqB,IAAK;IACzBR,oBAAoB,CAACF,SAAS,EAAEU,QAAQ,CAAC;EAC3C,CAAC,EACD,CAACV,SAAS,EAAEE,oBAAoB,CAClC,CAAC;EAED,oBACEd,KAAA,CAAAuB,aAAA;IACEL,SAAS,EAAEnB,UAAU,CAACQ,MAAM,CAACiB,UAAU,EAAEN,SAAS,CAAE;IACpDC,KAAK,EAAEA,KAAM;IACb,oBAAkBR,UAAU,CAACc;EAAK,gBAElCzB,KAAA,CAAAuB,aAAA;IAAKL,SAAS,EAAEX,MAAM,CAACmB;EAAW,GAC/BV,oBAAoB,iBACnBhB,KAAA,CAAAuB,aAAA,WAAAI,QAAA;IACEF,IAAI,EAAC,QAAQ;IACbP,SAAS,EAAEX,MAAM,CAACqB,UAAW;IAC7B,cAAY,WAAWR,KAAK;EAAG,GAC3BJ,oBAAoB,EACpBC,mBAAmB,gBAEvBjB,KAAA,CAAAuB,aAAA,CAAClB,cAAc,MAAE,CACX,CACT,eACDL,KAAA,CAAAuB,aAAA;IAAML,SAAS,EAAEX,MAAM,CAACsB;EAAU,GAAET,KAAY,CAC7C,CAAC,eAENpB,KAAA,CAAAuB,aAAA;IAAKL,SAAS,EAAEX,MAAM,CAACuB;EAAY,gBACjC9B,KAAA,CAAAuB,aAAA,CAACpB,aAAa;IAAC4B,YAAY,EAAC;EAAsB,gBAChD/B,KAAA,CAAAuB,aAAA,CAACjB,WAAW;IACVG,UAAU,EAAEA,UAAW;IACvBC,SAAS,EAAEA,SAAU;IACrBC,UAAU,EAAEA,UAAW;IACvBE,WAAW,EAAEA,WAAY;IACzBC,oBAAoB,EAAEO,wBAAyB;IAC/CN,WAAW,EAAEA;EAAY,CAC1B,CACY,CACZ,CACF,CAAC;AAEV;AAEA,OAAO,MAAMiB,cAAc,gBAAG/B,IAAI,CAChCO,mBACF,CAA+B","ignoreList":[]}
1
+ {"version":3,"file":"FilterListItem.js","names":["Button","classnames","React","memo","useCallback","ErrorBoundary","supportsExcluding","DragHandleIcon","ExcludeIcon","IncludeIcon","RemoveIcon","styles","FilterListItemInner","definition","filterKey","label","filterState","onFilterStateChanged","onFilterRemoved","renderInput","dragHandleAttributes","dragHandleListeners","className","style","handleFilterStateChanged","newState","handleToggleExclude","isExcluding","handleRemove","showExcludeToggle","createElement","filterItem","undefined","itemHeader","_extends","dragHandle","itemLabel","excludeToggle","onClick","removeButton","itemContent","errorMessage","FilterListItem"],"sources":["FilterListItem.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport type {\n DraggableAttributes,\n DraggableSyntheticListeners,\n} from \"@dnd-kit/core\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback } from \"react\";\nimport { ErrorBoundary } from \"../../shared/ErrorBoundary.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { supportsExcluding } from \"../utils/filterValues.js\";\nimport type { RenderFilterInput } from \"./BaseFilterListApi.js\";\nimport { DragHandleIcon } from \"./DragHandleIcon.js\";\nimport { ExcludeIcon, IncludeIcon, RemoveIcon } from \"./FilterIcons.js\";\nimport styles from \"./FilterListItem.module.css\";\n\ninterface FilterListItemProps<D> {\n definition: D;\n filterKey: string;\n label: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (\n filterKey: string,\n state: FilterState,\n ) => void;\n onFilterRemoved?: (filterKey: string) => void;\n renderInput: RenderFilterInput<D>;\n dragHandleAttributes?: DraggableAttributes;\n dragHandleListeners?: DraggableSyntheticListeners;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction FilterListItemInner<D>({\n definition,\n filterKey,\n label,\n filterState,\n onFilterStateChanged,\n onFilterRemoved,\n renderInput,\n dragHandleAttributes,\n dragHandleListeners,\n className,\n style,\n}: FilterListItemProps<D>): React.ReactElement {\n const handleFilterStateChanged = useCallback(\n (newState: FilterState) => {\n onFilterStateChanged(filterKey, newState);\n },\n [filterKey, onFilterStateChanged],\n );\n\n const handleToggleExclude = useCallback(\n () => {\n if (filterState) {\n onFilterStateChanged(filterKey, {\n ...filterState,\n isExcluding: !filterState.isExcluding,\n });\n }\n },\n [filterKey, filterState, onFilterStateChanged],\n );\n\n const handleRemove = useCallback(\n () => {\n onFilterRemoved?.(filterKey);\n },\n [filterKey, onFilterRemoved],\n );\n\n const isExcluding = filterState?.isExcluding ?? false;\n const showExcludeToggle = supportsExcluding(filterState);\n\n return (\n <div\n className={classnames(styles.filterItem, className)}\n style={style}\n data-excluding={isExcluding || undefined}\n >\n <div className={styles.itemHeader}>\n {dragHandleAttributes && (\n <Button\n className={styles.dragHandle}\n aria-label={`Reorder ${label}`}\n {...dragHandleAttributes}\n {...dragHandleListeners}\n >\n <DragHandleIcon />\n </Button>\n )}\n <span className={styles.itemLabel}>{label}</span>\n {showExcludeToggle && (\n <Button\n className={styles.excludeToggle}\n onClick={handleToggleExclude}\n aria-pressed={isExcluding}\n aria-label={isExcluding\n ? \"Switch to include mode\"\n : \"Switch to exclude mode\"}\n >\n {isExcluding ? <ExcludeIcon /> : <IncludeIcon />}\n </Button>\n )}\n {onFilterRemoved && (\n <Button\n className={styles.removeButton}\n onClick={handleRemove}\n aria-label={`Remove ${label} filter`}\n >\n <RemoveIcon />\n </Button>\n )}\n </div>\n\n <div className={styles.itemContent}>\n <ErrorBoundary errorMessage=\"Error loading filter\">\n {renderInput({\n definition,\n filterKey,\n filterState,\n onFilterStateChanged: handleFilterStateChanged,\n })}\n </ErrorBoundary>\n </div>\n </div>\n );\n}\n\nexport const FilterListItem = memo(\n FilterListItemInner,\n) as typeof FilterListItemInner;\n"],"mappings":"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","ignoreList":[]}