@osdk/react-components 0.19.0 → 0.19.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/build/browser/action-form/FormFieldApi.js.map +1 -1
  3. package/build/browser/action-form/utils/getDefaultFieldDefinitions.js +1 -0
  4. package/build/browser/action-form/utils/getDefaultFieldDefinitions.js.map +1 -1
  5. package/build/browser/filter-list/FilterInput.js +7 -0
  6. package/build/browser/filter-list/FilterInput.js.map +1 -1
  7. package/build/browser/filter-list/FilterList.js +8 -2
  8. package/build/browser/filter-list/FilterList.js.map +1 -1
  9. package/build/browser/filter-list/FilterListApi.js.map +1 -1
  10. package/build/browser/filter-list/FilterListItemApi.js.map +1 -1
  11. package/build/browser/filter-list/__tests__/aggregationMocks.js +50 -0
  12. package/build/browser/filter-list/__tests__/aggregationMocks.js.map +1 -0
  13. package/build/browser/filter-list/base/BaseFilterList.js.map +1 -1
  14. package/build/browser/filter-list/base/BaseFilterListApi.js.map +1 -1
  15. package/build/browser/filter-list/base/FilterInputExcludeRow.js +12 -16
  16. package/build/browser/filter-list/base/FilterInputExcludeRow.js.map +1 -1
  17. package/build/browser/filter-list/base/FilterListContent.js +42 -40
  18. package/build/browser/filter-list/base/FilterListContent.js.map +1 -1
  19. package/build/browser/filter-list/base/FilterListItem.js +8 -36
  20. package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
  21. package/build/browser/filter-list/base/SortableFilterListItem.js +3 -1
  22. package/build/browser/filter-list/base/SortableFilterListItem.js.map +1 -1
  23. package/build/browser/filter-list/base/inputs/ListogramInput.js +3 -1
  24. package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
  25. package/build/browser/filter-list/base/inputs/ListogramInput.module.css +6 -0
  26. package/build/browser/filter-list/base/inputs/MultiDateInput.js +2 -1
  27. package/build/browser/filter-list/base/inputs/MultiDateInput.js.map +1 -1
  28. package/build/browser/filter-list/base/inputs/MultiSelectInput.js +7 -3
  29. package/build/browser/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
  30. package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css +6 -0
  31. package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css.js +1 -0
  32. package/build/browser/filter-list/base/inputs/SingleDateInput.js +4 -2
  33. package/build/browser/filter-list/base/inputs/SingleDateInput.js.map +1 -1
  34. package/build/browser/filter-list/hooks/useDualScopeAggregation.js +70 -0
  35. package/build/browser/filter-list/hooks/useDualScopeAggregation.js.map +1 -0
  36. package/build/browser/filter-list/hooks/useFilterListState.js +35 -17
  37. package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
  38. package/build/browser/filter-list/hooks/useFilterPropertyAggregation.js +37 -0
  39. package/build/browser/filter-list/hooks/useFilterPropertyAggregation.js.map +1 -0
  40. package/build/browser/filter-list/hooks/usePropertyAggregation.js +7 -6
  41. package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -1
  42. package/build/browser/filter-list/inputs/LinkedPropertyInput.js +45 -22
  43. package/build/browser/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
  44. package/build/browser/filter-list/inputs/ListogramFilterInput.js +9 -7
  45. package/build/browser/filter-list/inputs/ListogramFilterInput.js.map +1 -1
  46. package/build/browser/filter-list/inputs/MultiSelectFilterInput.js +8 -6
  47. package/build/browser/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
  48. package/build/browser/filter-list/inputs/PropertyFilterInput.js +10 -1
  49. package/build/browser/filter-list/inputs/PropertyFilterInput.js.map +1 -1
  50. package/build/browser/filter-list/inputs/SingleDateFilterInput.js +4 -2
  51. package/build/browser/filter-list/inputs/SingleDateFilterInput.js.map +1 -1
  52. package/build/browser/filter-list/inputs/SingleSelectFilterInput.js +9 -6
  53. package/build/browser/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
  54. package/build/browser/filter-list/inputs/StaticValuesFilterInput.js.map +1 -1
  55. package/build/browser/filter-list/types/CustomRendererTypes.js.map +1 -1
  56. package/build/browser/filter-list/types/KeywordSearchTypes.js.map +1 -1
  57. package/build/browser/filter-list/types/LinkedFilterTypes.js +42 -1
  58. package/build/browser/filter-list/types/LinkedFilterTypes.js.map +1 -1
  59. package/build/browser/filter-list/types/StaticValuesTypes.js.map +1 -1
  60. package/build/browser/filter-list/utils/filterStateToWhereClause.js +58 -22
  61. package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  62. package/build/browser/filter-list/utils/filterValues.js +148 -2
  63. package/build/browser/filter-list/utils/filterValues.js.map +1 -1
  64. package/build/browser/filter-list/utils/narrowObjectSet.js +48 -0
  65. package/build/browser/filter-list/utils/narrowObjectSet.js.map +1 -0
  66. package/build/browser/public/experimental/filter-list.js +1 -0
  67. package/build/browser/public/experimental/filter-list.js.map +1 -1
  68. package/build/browser/styles.css +17 -0
  69. package/build/browser/tokens/component-tokens/filter-list.css +5 -0
  70. package/build/browser/util/UserAgent.js +1 -1
  71. package/build/browser/util/UserAgent.js.map +1 -1
  72. package/build/cjs/{chunk-6XRF4IAL.cjs → chunk-2AK24MNP.cjs} +4 -4
  73. package/build/cjs/{chunk-6XRF4IAL.cjs.map → chunk-2AK24MNP.cjs.map} +1 -1
  74. package/build/cjs/chunk-3DIODTDY.cjs +11 -0
  75. package/build/cjs/{chunk-774FGQHO.cjs.map → chunk-3DIODTDY.cjs.map} +1 -1
  76. package/build/cjs/{chunk-P7R4RWMU.cjs → chunk-3RKGMRPD.cjs} +4 -4
  77. package/build/cjs/{chunk-P7R4RWMU.cjs.map → chunk-3RKGMRPD.cjs.map} +1 -1
  78. package/build/cjs/chunk-ACIIYYEL.cjs +11 -0
  79. package/build/cjs/{chunk-62DGPKOC.cjs.map → chunk-ACIIYYEL.cjs.map} +1 -1
  80. package/build/cjs/{chunk-3OUALM3K.cjs → chunk-COLGW56W.cjs} +4 -4
  81. package/build/cjs/{chunk-3OUALM3K.cjs.map → chunk-COLGW56W.cjs.map} +1 -1
  82. package/build/cjs/{chunk-DKPG7O4B.cjs → chunk-GTFPQHZL.cjs} +5 -4
  83. package/build/cjs/chunk-GTFPQHZL.cjs.map +1 -0
  84. package/build/cjs/{chunk-L6QDNMMG.cjs → chunk-K3IJA7WZ.cjs} +4 -4
  85. package/build/cjs/{chunk-L6QDNMMG.cjs.map → chunk-K3IJA7WZ.cjs.map} +1 -1
  86. package/build/cjs/chunk-MAQSZDRT.cjs +11 -0
  87. package/build/cjs/{chunk-S25XCKOA.cjs.map → chunk-MAQSZDRT.cjs.map} +1 -1
  88. package/build/cjs/chunk-MHMRIDIM.cjs +11 -0
  89. package/build/cjs/{chunk-SLHKSOQC.cjs.map → chunk-MHMRIDIM.cjs.map} +1 -1
  90. package/build/cjs/{chunk-BXCHISUQ.cjs → chunk-NOONKE5X.cjs} +3 -3
  91. package/build/cjs/{chunk-BXCHISUQ.cjs.map → chunk-NOONKE5X.cjs.map} +1 -1
  92. package/build/cjs/chunk-OEESYGT4.cjs +11 -0
  93. package/build/cjs/{chunk-3Y4W37E3.cjs.map → chunk-OEESYGT4.cjs.map} +1 -1
  94. package/build/cjs/{chunk-QOI2FQSL.cjs → chunk-PUZZZTC7.cjs} +372 -157
  95. package/build/cjs/chunk-PUZZZTC7.cjs.map +1 -0
  96. package/build/cjs/{chunk-FIAYYZHY.cjs → chunk-QWKUCBXE.cjs} +4 -4
  97. package/build/cjs/{chunk-FIAYYZHY.cjs.map → chunk-QWKUCBXE.cjs.map} +1 -1
  98. package/build/cjs/public/experimental/action-form.cjs +4 -4
  99. package/build/cjs/public/experimental/action-form.d.cts +1 -1
  100. package/build/cjs/public/experimental/document-viewer.cjs +4 -4
  101. package/build/cjs/public/experimental/email-viewer.cjs +3 -3
  102. package/build/cjs/public/experimental/excel-viewer.cjs +3 -3
  103. package/build/cjs/public/experimental/filter-list.cjs +17 -13
  104. package/build/cjs/public/experimental/filter-list.css +8 -0
  105. package/build/cjs/public/experimental/filter-list.css.map +1 -1
  106. package/build/cjs/public/experimental/filter-list.d.cts +95 -25
  107. package/build/cjs/public/experimental/image-viewer.cjs +3 -3
  108. package/build/cjs/public/experimental/markdown-renderer.cjs +3 -3
  109. package/build/cjs/public/experimental/object-table.cjs +8 -8
  110. package/build/cjs/public/experimental/pdf-viewer.cjs +7 -7
  111. package/build/cjs/public/experimental/tiff-renderer.cjs +3 -3
  112. package/build/cjs/public/experimental/video-viewer.cjs +3 -3
  113. package/build/cjs/public/experimental/xml-viewer.cjs +3 -3
  114. package/build/cjs/public/experimental.cjs +50 -46
  115. package/build/cjs/public/experimental.css +8 -0
  116. package/build/cjs/public/experimental.css.map +1 -1
  117. package/build/cjs/public/experimental.d.cts +1 -1
  118. package/build/esm/action-form/FormFieldApi.js.map +1 -1
  119. package/build/esm/action-form/utils/getDefaultFieldDefinitions.js +1 -0
  120. package/build/esm/action-form/utils/getDefaultFieldDefinitions.js.map +1 -1
  121. package/build/esm/filter-list/FilterInput.js +7 -0
  122. package/build/esm/filter-list/FilterInput.js.map +1 -1
  123. package/build/esm/filter-list/FilterList.js +8 -2
  124. package/build/esm/filter-list/FilterList.js.map +1 -1
  125. package/build/esm/filter-list/FilterListApi.js.map +1 -1
  126. package/build/esm/filter-list/FilterListItemApi.js.map +1 -1
  127. package/build/esm/filter-list/__tests__/aggregationMocks.js +50 -0
  128. package/build/esm/filter-list/__tests__/aggregationMocks.js.map +1 -0
  129. package/build/esm/filter-list/base/BaseFilterList.js.map +1 -1
  130. package/build/esm/filter-list/base/BaseFilterListApi.js.map +1 -1
  131. package/build/esm/filter-list/base/FilterInputExcludeRow.js +12 -16
  132. package/build/esm/filter-list/base/FilterInputExcludeRow.js.map +1 -1
  133. package/build/esm/filter-list/base/FilterListContent.js +42 -40
  134. package/build/esm/filter-list/base/FilterListContent.js.map +1 -1
  135. package/build/esm/filter-list/base/FilterListItem.js +8 -36
  136. package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
  137. package/build/esm/filter-list/base/SortableFilterListItem.js +3 -1
  138. package/build/esm/filter-list/base/SortableFilterListItem.js.map +1 -1
  139. package/build/esm/filter-list/base/inputs/ListogramInput.js +3 -1
  140. package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
  141. package/build/esm/filter-list/base/inputs/ListogramInput.module.css +6 -0
  142. package/build/esm/filter-list/base/inputs/MultiDateInput.js +2 -1
  143. package/build/esm/filter-list/base/inputs/MultiDateInput.js.map +1 -1
  144. package/build/esm/filter-list/base/inputs/MultiSelectInput.js +7 -3
  145. package/build/esm/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
  146. package/build/esm/filter-list/base/inputs/MultiSelectInput.module.css +6 -0
  147. package/build/esm/filter-list/base/inputs/SingleDateInput.js +4 -2
  148. package/build/esm/filter-list/base/inputs/SingleDateInput.js.map +1 -1
  149. package/build/esm/filter-list/hooks/useDualScopeAggregation.js +70 -0
  150. package/build/esm/filter-list/hooks/useDualScopeAggregation.js.map +1 -0
  151. package/build/esm/filter-list/hooks/useFilterListState.js +35 -17
  152. package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
  153. package/build/esm/filter-list/hooks/useFilterPropertyAggregation.js +37 -0
  154. package/build/esm/filter-list/hooks/useFilterPropertyAggregation.js.map +1 -0
  155. package/build/esm/filter-list/hooks/usePropertyAggregation.js +7 -6
  156. package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -1
  157. package/build/esm/filter-list/inputs/LinkedPropertyInput.js +45 -22
  158. package/build/esm/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
  159. package/build/esm/filter-list/inputs/ListogramFilterInput.js +9 -7
  160. package/build/esm/filter-list/inputs/ListogramFilterInput.js.map +1 -1
  161. package/build/esm/filter-list/inputs/MultiSelectFilterInput.js +8 -6
  162. package/build/esm/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
  163. package/build/esm/filter-list/inputs/PropertyFilterInput.js +10 -1
  164. package/build/esm/filter-list/inputs/PropertyFilterInput.js.map +1 -1
  165. package/build/esm/filter-list/inputs/SingleDateFilterInput.js +4 -2
  166. package/build/esm/filter-list/inputs/SingleDateFilterInput.js.map +1 -1
  167. package/build/esm/filter-list/inputs/SingleSelectFilterInput.js +9 -6
  168. package/build/esm/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
  169. package/build/esm/filter-list/inputs/StaticValuesFilterInput.js.map +1 -1
  170. package/build/esm/filter-list/types/CustomRendererTypes.js.map +1 -1
  171. package/build/esm/filter-list/types/KeywordSearchTypes.js.map +1 -1
  172. package/build/esm/filter-list/types/LinkedFilterTypes.js +42 -1
  173. package/build/esm/filter-list/types/LinkedFilterTypes.js.map +1 -1
  174. package/build/esm/filter-list/types/StaticValuesTypes.js.map +1 -1
  175. package/build/esm/filter-list/utils/filterStateToWhereClause.js +58 -22
  176. package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  177. package/build/esm/filter-list/utils/filterValues.js +148 -2
  178. package/build/esm/filter-list/utils/filterValues.js.map +1 -1
  179. package/build/esm/filter-list/utils/narrowObjectSet.js +48 -0
  180. package/build/esm/filter-list/utils/narrowObjectSet.js.map +1 -0
  181. package/build/esm/public/experimental/filter-list.js +1 -0
  182. package/build/esm/public/experimental/filter-list.js.map +1 -1
  183. package/build/esm/tokens/component-tokens/filter-list.css +5 -0
  184. package/build/esm/util/UserAgent.js +1 -1
  185. package/build/esm/util/UserAgent.js.map +1 -1
  186. package/build/types/action-form/FormFieldApi.d.ts +1 -1
  187. package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
  188. package/build/types/filter-list/FilterInput.d.ts +6 -1
  189. package/build/types/filter-list/FilterInput.d.ts.map +1 -1
  190. package/build/types/filter-list/FilterList.d.ts.map +1 -1
  191. package/build/types/filter-list/FilterListApi.d.ts +30 -15
  192. package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
  193. package/build/types/filter-list/FilterListItemApi.d.ts +15 -1
  194. package/build/types/filter-list/FilterListItemApi.d.ts.map +1 -1
  195. package/build/types/filter-list/__tests__/aggregationMocks.d.ts +11 -0
  196. package/build/types/filter-list/__tests__/aggregationMocks.d.ts.map +1 -0
  197. package/build/types/filter-list/base/BaseFilterList.d.ts +2 -1
  198. package/build/types/filter-list/base/BaseFilterList.d.ts.map +1 -1
  199. package/build/types/filter-list/base/BaseFilterListApi.d.ts +2 -2
  200. package/build/types/filter-list/base/BaseFilterListApi.d.ts.map +1 -1
  201. package/build/types/filter-list/base/FilterInputExcludeRow.d.ts.map +1 -1
  202. package/build/types/filter-list/base/FilterListContent.d.ts +3 -3
  203. package/build/types/filter-list/base/FilterListContent.d.ts.map +1 -1
  204. package/build/types/filter-list/base/FilterListItem.d.ts +2 -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.map +1 -1
  209. package/build/types/filter-list/base/inputs/MultiDateInput.d.ts.map +1 -1
  210. package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts.map +1 -1
  211. package/build/types/filter-list/base/inputs/SingleDateInput.d.ts +2 -0
  212. package/build/types/filter-list/base/inputs/SingleDateInput.d.ts.map +1 -1
  213. package/build/types/filter-list/hooks/useDualScopeAggregation.d.ts +32 -0
  214. package/build/types/filter-list/hooks/useDualScopeAggregation.d.ts.map +1 -0
  215. package/build/types/filter-list/hooks/useFilterListState.d.ts +7 -0
  216. package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -1
  217. package/build/types/filter-list/hooks/useFilterPropertyAggregation.d.ts +13 -0
  218. package/build/types/filter-list/hooks/useFilterPropertyAggregation.d.ts.map +1 -0
  219. package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts +6 -4
  220. package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts.map +1 -1
  221. package/build/types/filter-list/inputs/ListogramFilterInput.d.ts +4 -1
  222. package/build/types/filter-list/inputs/ListogramFilterInput.d.ts.map +1 -1
  223. package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts +4 -1
  224. package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts.map +1 -1
  225. package/build/types/filter-list/inputs/PropertyFilterInput.d.ts +4 -1
  226. package/build/types/filter-list/inputs/PropertyFilterInput.d.ts.map +1 -1
  227. package/build/types/filter-list/inputs/SingleDateFilterInput.d.ts +7 -1
  228. package/build/types/filter-list/inputs/SingleDateFilterInput.d.ts.map +1 -1
  229. package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts +4 -1
  230. package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts.map +1 -1
  231. package/build/types/filter-list/inputs/StaticValuesFilterInput.d.ts +1 -1
  232. package/build/types/filter-list/types/CustomRendererTypes.d.ts +2 -2
  233. package/build/types/filter-list/types/CustomRendererTypes.d.ts.map +1 -1
  234. package/build/types/filter-list/types/KeywordSearchTypes.d.ts +2 -2
  235. package/build/types/filter-list/types/KeywordSearchTypes.d.ts.map +1 -1
  236. package/build/types/filter-list/types/LinkedFilterTypes.d.ts +34 -4
  237. package/build/types/filter-list/types/LinkedFilterTypes.d.ts.map +1 -1
  238. package/build/types/filter-list/types/StaticValuesTypes.d.ts +2 -2
  239. package/build/types/filter-list/types/StaticValuesTypes.d.ts.map +1 -1
  240. package/build/types/filter-list/utils/filterStateToWhereClause.d.ts +24 -1
  241. package/build/types/filter-list/utils/filterStateToWhereClause.d.ts.map +1 -1
  242. package/build/types/filter-list/utils/filterValues.d.ts +26 -0
  243. package/build/types/filter-list/utils/filterValues.d.ts.map +1 -1
  244. package/build/types/filter-list/utils/narrowObjectSet.d.ts +7 -0
  245. package/build/types/filter-list/utils/narrowObjectSet.d.ts.map +1 -0
  246. package/build/types/public/experimental/filter-list.d.ts +3 -1
  247. package/build/types/public/experimental/filter-list.d.ts.map +1 -1
  248. package/docs/CSSVariables.md +78 -17
  249. package/docs/FilterList.md +52 -6
  250. package/package.json +9 -9
  251. package/build/cjs/chunk-3Y4W37E3.cjs +0 -11
  252. package/build/cjs/chunk-62DGPKOC.cjs +0 -11
  253. package/build/cjs/chunk-774FGQHO.cjs +0 -11
  254. package/build/cjs/chunk-DKPG7O4B.cjs.map +0 -1
  255. package/build/cjs/chunk-QOI2FQSL.cjs.map +0 -1
  256. package/build/cjs/chunk-S25XCKOA.cjs +0 -11
  257. package/build/cjs/chunk-SLHKSOQC.cjs +0 -11
@@ -1 +1 @@
1
- {"version":3,"file":"filterStateToWhereClause.js","names":["assertUnreachable","formatDateForInput","getFilterKey","isCompoundFilter","f","NUMERIC_BOUNDS","byte","min","max","short","integer","long","Number","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","clampToPropertyBounds","value","propertyType","undefined","bounds","Math","formatDateValue","date","toISOString","filterStateToPropertyFilter","state","type","$containsAnyTerm","enabled","conditions","minValue","push","$gte","maxValue","$lte","length","includeNull","$isNull","__compound","buildValueOrNullFilter","values","selectedValues","map","v","Date","startDate","endDate","buildPropertyKeyClause","key","filter","isExcluding","fieldClauses","c","rangeClause","$and","$or","$not","clause","buildWhereClause","definitions","filterStates","propertyTypes","excludeFilterKey","clauses","definition","get","process","env","NODE_ENV","console","warn","linkName","hasLink","$isNotNull","searchTerm","trim","properties","propertiesToSearch","size","info","multiplicity","containsOp","operator","propertySearches","prop","searchClause","customClause","toWhereClause","Object","keys","staticClause","nonEmpty","hasEmpty","valueClause","$in"],"sources":["filterStateToWhereClause.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 { ObjectTypeDefinition, WhereClause } from \"@osdk/api\";\nimport { assertUnreachable } from \"../../shared/assertUnreachable.js\";\nimport { formatDateForInput } from \"../../shared/dateUtils.js\";\nimport type { FilterDefinitionUnion } from \"../FilterListApi.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { getFilterKey } from \"./getFilterKey.js\";\n\ntype PropertyFilter = Record<string, unknown> | boolean | string | number;\n\ninterface CompoundFilter {\n __compound: true;\n conditions: PropertyFilter[];\n includeNull: boolean;\n}\n\nfunction isCompoundFilter(\n f: PropertyFilter | CompoundFilter,\n): f is CompoundFilter {\n return typeof f === \"object\" && f != null && \"__compound\" in f;\n}\n\nconst NUMERIC_BOUNDS: Record<string, { min: number; max: number }> = {\n byte: { min: -128, max: 127 },\n short: { min: -32_768, max: 32_767 },\n integer: { min: -2_147_483_648, max: 2_147_483_647 },\n long: { min: Number.MIN_SAFE_INTEGER, max: Number.MAX_SAFE_INTEGER },\n};\n\nfunction clampToPropertyBounds(\n value: number,\n propertyType: string | undefined,\n): number {\n if (propertyType === undefined) {\n return value;\n }\n const bounds = NUMERIC_BOUNDS[propertyType];\n if (bounds === undefined) {\n return value;\n }\n return Math.max(bounds.min, Math.min(bounds.max, value));\n}\n\nfunction formatDateValue(\n date: Date,\n propertyType: string | undefined,\n): string {\n if (propertyType === \"datetime\") {\n return formatDateForInput(date);\n }\n return date.toISOString();\n}\n\nfunction filterStateToPropertyFilter(\n state: FilterState,\n propertyType?: string,\n): PropertyFilter | CompoundFilter | undefined {\n switch (state.type) {\n case \"CONTAINS_TEXT\": {\n if (!state.value) {\n return undefined;\n }\n return { $containsAnyTerm: state.value };\n }\n\n case \"TOGGLE\": {\n return state.enabled;\n }\n\n case \"DATE_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({\n $gte: formatDateValue(state.minValue, propertyType),\n });\n }\n if (state.maxValue !== undefined) {\n conditions.push({\n $lte: formatDateValue(state.maxValue, propertyType),\n });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n if (conditions.length === 0 && state.includeNull) {\n return { $isNull: true };\n }\n\n if (conditions.length === 1 && !state.includeNull) {\n return conditions[0];\n }\n\n return {\n __compound: true,\n conditions,\n includeNull: state.includeNull ?? false,\n };\n }\n\n case \"NUMBER_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({\n $gte: clampToPropertyBounds(state.minValue, propertyType),\n });\n }\n if (state.maxValue !== undefined) {\n conditions.push({\n $lte: clampToPropertyBounds(state.maxValue, propertyType),\n });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n if (conditions.length === 0 && state.includeNull) {\n return { $isNull: true };\n }\n\n if (conditions.length === 1 && !state.includeNull) {\n return conditions[0];\n }\n\n return {\n __compound: true,\n conditions,\n includeNull: state.includeNull ?? false,\n };\n }\n\n case \"EXACT_MATCH\": {\n return buildValueOrNullFilter(state.values);\n }\n\n case \"SELECT\": {\n if (state.selectedValues.length === 0) {\n return undefined;\n }\n const values: (string | number | boolean)[] = state.selectedValues.map(\n (v) =>\n v instanceof Date\n ? formatDateValue(v, propertyType)\n : v as string | number | boolean,\n );\n return buildValueOrNullFilter(values);\n }\n\n case \"TIMELINE\": {\n const conditions: PropertyFilter[] = [];\n if (state.startDate !== undefined) {\n conditions.push({\n $gte: formatDateValue(state.startDate, propertyType),\n });\n }\n if (state.endDate !== undefined) {\n conditions.push({\n $lte: formatDateValue(state.endDate, propertyType),\n });\n }\n if (conditions.length === 0) {\n return undefined;\n }\n if (conditions.length === 1) {\n return conditions[0];\n }\n return {\n __compound: true,\n conditions,\n includeNull: false,\n };\n }\n\n // These filter types are handled separately in buildWhereClause\n // since they need access to the full definition, not just state\n case \"hasLink\":\n case \"linkedProperty\":\n case \"keywordSearch\":\n case \"custom\":\n return undefined;\n\n default:\n return assertUnreachable(state);\n }\n}\n\n/**\n * Builds a WhereClause from filter definitions and their current states.\n *\n * The filterStates map uses string keys derived from filter definitions via\n * getFilterKey(). This ensures stable state lookups even when filters are\n * reordered or definition object references change.\n *\n * Note: The `as WhereClause<Q>` casts are necessary because we're building\n * clauses dynamically from property keys determined at runtime. TypeScript\n * cannot verify that the constructed clause structure matches the generic Q's\n * expected shape, but the structure is guaranteed to be valid by construction.\n */\n/**\n * Builds a WHERE clause fragment for a single property key from filter state.\n * Shared by PROPERTY and STATIC_VALUES filter types.\n */\nfunction buildPropertyKeyClause(\n key: string,\n state: FilterState,\n propertyType?: string,\n): Record<string, unknown> | undefined {\n const filter = filterStateToPropertyFilter(state, propertyType);\n if (filter === undefined) {\n return undefined;\n }\n const isExcluding = \"isExcluding\" in state && state.isExcluding;\n if (isCompoundFilter(filter)) {\n const fieldClauses = filter.conditions.map(c => ({\n [key]: c,\n }));\n let rangeClause: Record<string, unknown> = fieldClauses.length === 1\n ? fieldClauses[0]\n : { $and: fieldClauses };\n if (filter.includeNull) {\n rangeClause = {\n $or: [rangeClause, { [key]: { $isNull: true } }],\n };\n }\n return isExcluding ? { $not: rangeClause } : rangeClause;\n } else {\n const clause = { [key]: filter };\n return isExcluding ? { $not: clause } : clause;\n }\n}\n\nexport interface PropertyTypeInfo {\n type: string;\n multiplicity: boolean;\n}\n\nexport function buildWhereClause<Q extends ObjectTypeDefinition>(\n definitions: Array<FilterDefinitionUnion<Q>> | undefined,\n filterStates: Map<string, FilterState>,\n propertyTypes?: Map<string, PropertyTypeInfo>,\n excludeFilterKey?: string,\n): WhereClause<Q> {\n if (!definitions || definitions.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n const clauses: Array<Record<string, unknown>> = [];\n\n for (const definition of definitions) {\n const key = getFilterKey(definition);\n if (key === excludeFilterKey) {\n continue;\n }\n const state = filterStates.get(key);\n\n if (!state) {\n continue;\n }\n\n switch (definition.type) {\n case \"PROPERTY\": {\n const propertyType = propertyTypes?.get(definition.key as string)\n ?.type;\n const clause = buildPropertyKeyClause(\n definition.key as string,\n state,\n propertyType,\n );\n if (clause !== undefined) {\n clauses.push(clause);\n }\n break;\n }\n\n case \"HAS_LINK\": {\n if (state.type !== \"hasLink\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for hasLink filter \"${definition.linkName}\": expected hasLink, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.hasLink) {\n break;\n }\n clauses.push({ [definition.linkName]: { $isNotNull: true } });\n break;\n }\n\n case \"LINKED_PROPERTY\": {\n // OSDK WhereClause does not support filtering through links.\n // Link-based filtering requires ObjectSet operations (pivotTo/intersect).\n // LinkedProperty filters render UI for selection but cannot be included\n // in the where clause. Consumers needing linked property filtering must\n // implement it using ObjectSet.pivotTo() and intersect().\n break;\n }\n\n case \"KEYWORD_SEARCH\": {\n if (state.type !== \"keywordSearch\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for keywordSearch filter: expected keywordSearch, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.searchTerm) {\n break;\n }\n // TypeScript narrows state to KeywordSearchFilterState\n const searchTerm = state.searchTerm.trim();\n if (!searchTerm) {\n break;\n }\n\n const properties = definition.properties;\n let propertiesToSearch: string[];\n\n if (properties === \"all\") {\n if (propertyTypes && propertyTypes.size > 0) {\n propertiesToSearch = [];\n for (const [key, info] of propertyTypes) {\n if (info.type === \"string\" && !info.multiplicity) {\n propertiesToSearch.push(key);\n }\n }\n } else {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n \"[FilterList] Keyword search with properties: 'all' requires propertyTypes to be provided. Filter will be skipped.\",\n );\n }\n break;\n }\n } else {\n propertiesToSearch = properties;\n }\n\n if (propertiesToSearch.length === 0) {\n break;\n }\n\n const containsOp = state.operator === \"AND\"\n ? \"$containsAllTerms\"\n : \"$containsAnyTerm\";\n\n const propertySearches = propertiesToSearch.map((prop) => ({\n [prop]: { [containsOp]: searchTerm },\n }));\n\n let searchClause: Record<string, unknown>;\n if (propertySearches.length === 1) {\n searchClause = propertySearches[0];\n } else {\n searchClause = { $or: propertySearches };\n }\n clauses.push(\n state.isExcluding ? { $not: searchClause } : searchClause,\n );\n break;\n }\n\n case \"CUSTOM\": {\n if (state.type !== \"custom\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for custom filter \"${definition.key}\": expected custom, got ${state.type}`,\n );\n }\n break;\n }\n // TypeScript narrows state to CustomFilterState\n const customClause = definition.toWhereClause(state);\n if (customClause && Object.keys(customClause).length > 0) {\n clauses.push(customClause as Record<string, unknown>);\n }\n break;\n }\n\n case \"STATIC_VALUES\": {\n if (definition.toWhereClause) {\n const staticClause = definition.toWhereClause(state);\n if (staticClause && Object.keys(staticClause).length > 0) {\n clauses.push(staticClause as Record<string, unknown>);\n }\n } else {\n const clause = buildPropertyKeyClause(definition.key, state);\n if (clause !== undefined) {\n clauses.push(clause);\n }\n }\n break;\n }\n\n default:\n assertUnreachable(definition);\n }\n }\n\n if (clauses.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n if (clauses.length === 1) {\n return clauses[0] as WhereClause<Q>;\n }\n\n return { $and: clauses } as WhereClause<Q>;\n}\n\n/** Splits values into non-empty and empty, returning $isNull for empty strings. */\nfunction buildValueOrNullFilter(\n values: (string | number | boolean)[],\n): PropertyFilter | CompoundFilter | undefined {\n if (values.length === 0) {\n return undefined;\n }\n\n const nonEmpty = values.filter((v) => v !== \"\");\n const hasEmpty = nonEmpty.length < values.length;\n\n const valueClause: PropertyFilter | undefined = nonEmpty.length === 0\n ? undefined\n : nonEmpty.length === 1\n ? nonEmpty[0]\n : { $in: nonEmpty };\n\n if (!hasEmpty) {\n return valueClause;\n }\n\n if (valueClause === undefined) {\n return { $isNull: true };\n }\n\n return {\n __compound: true,\n conditions: [valueClause],\n includeNull: true,\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"filterStateToWhereClause.js","names":["assertUnreachable","formatDateForInput","getFilterKey","isCompoundFilter","f","NUMERIC_BOUNDS","byte","min","max","short","integer","long","Number","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","clampToPropertyBounds","value","propertyType","undefined","bounds","Math","formatDateValue","date","toISOString","filterStateToPropertyFilter","state","type","$containsAnyTerm","enabled","conditions","minValue","push","$gte","maxValue","$lte","length","includeNull","$isNull","__compound","buildValueOrNullFilter","values","selectedValues","map","v","Date","startDate","endDate","buildPropertyKeyClause","key","filter","isExcluding","fieldClauses","c","rangeClause","$and","$or","$not","clause","buildWhereClause","definitions","filterStates","propertyTypes","excludeFilterKey","clauses","definition","get","process","env","NODE_ENV","console","warn","linkName","hasLink","$isNotNull","searchTerm","trim","properties","propertiesToSearch","size","info","multiplicity","containsOp","operator","propertySearches","prop","searchClause","customClause","toWhereClause","Object","keys","staticClause","buildLinkedInnerWhere","record","linkedPropertyKey","linkedFilterState","getActiveLinkedFilters","result","reverseLinkName","innerWhere","nonEmpty","hasEmpty","valueClause","$in"],"sources":["filterStateToWhereClause.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n LinkedType,\n LinkNames,\n ObjectTypeDefinition,\n WhereClause,\n} from \"@osdk/api\";\nimport { assertUnreachable } from \"../../shared/assertUnreachable.js\";\nimport { formatDateForInput } from \"../../shared/dateUtils.js\";\nimport type { FilterDefinitionUnion } from \"../FilterListApi.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport type {\n LinkedFilter,\n LinkedPropertyFilterDefinition,\n LinkedPropertyFilterState,\n} from \"../types/LinkedFilterTypes.js\";\nimport { getFilterKey } from \"./getFilterKey.js\";\n\ntype PropertyFilter = Record<string, unknown> | boolean | string | number;\n\ninterface CompoundFilter {\n __compound: true;\n conditions: PropertyFilter[];\n includeNull: boolean;\n}\n\nfunction isCompoundFilter(\n f: PropertyFilter | CompoundFilter,\n): f is CompoundFilter {\n return typeof f === \"object\" && f != null && \"__compound\" in f;\n}\n\nconst NUMERIC_BOUNDS: Record<string, { min: number; max: number }> = {\n byte: { min: -128, max: 127 },\n short: { min: -32_768, max: 32_767 },\n integer: { min: -2_147_483_648, max: 2_147_483_647 },\n long: { min: Number.MIN_SAFE_INTEGER, max: Number.MAX_SAFE_INTEGER },\n};\n\nfunction clampToPropertyBounds(\n value: number,\n propertyType: string | undefined,\n): number {\n if (propertyType === undefined) {\n return value;\n }\n const bounds = NUMERIC_BOUNDS[propertyType];\n if (bounds === undefined) {\n return value;\n }\n return Math.max(bounds.min, Math.min(bounds.max, value));\n}\n\nfunction formatDateValue(\n date: Date,\n propertyType: string | undefined,\n): string {\n if (propertyType === \"datetime\") {\n return formatDateForInput(date);\n }\n return date.toISOString();\n}\n\nfunction filterStateToPropertyFilter(\n state: FilterState,\n propertyType?: string,\n): PropertyFilter | CompoundFilter | undefined {\n switch (state.type) {\n case \"CONTAINS_TEXT\": {\n if (!state.value) {\n return undefined;\n }\n return { $containsAnyTerm: state.value };\n }\n\n case \"TOGGLE\": {\n return state.enabled;\n }\n\n case \"DATE_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({\n $gte: formatDateValue(state.minValue, propertyType),\n });\n }\n if (state.maxValue !== undefined) {\n conditions.push({\n $lte: formatDateValue(state.maxValue, propertyType),\n });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n if (conditions.length === 0 && state.includeNull) {\n return { $isNull: true };\n }\n\n if (conditions.length === 1 && !state.includeNull) {\n return conditions[0];\n }\n\n return {\n __compound: true,\n conditions,\n includeNull: state.includeNull ?? false,\n };\n }\n\n case \"NUMBER_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({\n $gte: clampToPropertyBounds(state.minValue, propertyType),\n });\n }\n if (state.maxValue !== undefined) {\n conditions.push({\n $lte: clampToPropertyBounds(state.maxValue, propertyType),\n });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n if (conditions.length === 0 && state.includeNull) {\n return { $isNull: true };\n }\n\n if (conditions.length === 1 && !state.includeNull) {\n return conditions[0];\n }\n\n return {\n __compound: true,\n conditions,\n includeNull: state.includeNull ?? false,\n };\n }\n\n case \"EXACT_MATCH\": {\n return buildValueOrNullFilter(state.values);\n }\n\n case \"SELECT\": {\n if (state.selectedValues.length === 0) {\n return undefined;\n }\n const values: (string | number | boolean)[] = state.selectedValues.map(\n (v) =>\n v instanceof Date\n ? formatDateValue(v, propertyType)\n : v as string | number | boolean,\n );\n return buildValueOrNullFilter(values);\n }\n\n case \"TIMELINE\": {\n const conditions: PropertyFilter[] = [];\n if (state.startDate !== undefined) {\n conditions.push({\n $gte: formatDateValue(state.startDate, propertyType),\n });\n }\n if (state.endDate !== undefined) {\n conditions.push({\n $lte: formatDateValue(state.endDate, propertyType),\n });\n }\n if (conditions.length === 0) {\n return undefined;\n }\n if (conditions.length === 1) {\n return conditions[0];\n }\n return {\n __compound: true,\n conditions,\n includeNull: false,\n };\n }\n\n // These filter types are handled separately in buildWhereClause\n // since they need access to the full definition, not just state\n case \"hasLink\":\n case \"linkedProperty\":\n case \"keywordSearch\":\n case \"custom\":\n return undefined;\n\n default:\n return assertUnreachable(state);\n }\n}\n\n/**\n * Builds a WHERE clause fragment for a single property key from filter state.\n */\nexport function buildPropertyKeyClause(\n key: string | number | symbol,\n state: FilterState,\n propertyType?: string,\n): Record<string, unknown> | undefined {\n const filter = filterStateToPropertyFilter(state, propertyType);\n if (filter === undefined) {\n return undefined;\n }\n const isExcluding = \"isExcluding\" in state && state.isExcluding;\n if (isCompoundFilter(filter)) {\n const fieldClauses = filter.conditions.map(c => ({\n [key]: c,\n }));\n let rangeClause: Record<string, unknown> = fieldClauses.length === 1\n ? fieldClauses[0]\n : { $and: fieldClauses };\n if (filter.includeNull) {\n rangeClause = {\n $or: [rangeClause, { [key]: { $isNull: true } }],\n };\n }\n return isExcluding ? { $not: rangeClause } : rangeClause;\n } else {\n const clause = { [key]: filter };\n return isExcluding ? { $not: clause } : clause;\n }\n}\n\nexport interface PropertyTypeInfo {\n type: string;\n multiplicity: boolean;\n}\n\n/**\n * Builds a `WhereClause<Q>` from direct (non-link-traversing) filter\n * definitions and current states. LINKED_PROPERTY filters are excluded —\n * use `getActiveLinkedFilters` for those and apply via `narrowObjectSet`.\n */\nexport function buildWhereClause<Q extends ObjectTypeDefinition>(\n definitions: Array<FilterDefinitionUnion<Q>> | undefined,\n filterStates: Map<string, FilterState>,\n propertyTypes?: Map<string, PropertyTypeInfo>,\n excludeFilterKey?: string,\n): WhereClause<Q> {\n if (!definitions || definitions.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n const clauses: Array<Record<string, unknown>> = [];\n\n for (const definition of definitions) {\n const key = getFilterKey(definition);\n if (key === excludeFilterKey) {\n continue;\n }\n const state = filterStates.get(key);\n\n if (!state) {\n continue;\n }\n\n switch (definition.type) {\n case \"PROPERTY\": {\n const propertyType = propertyTypes?.get(definition.key as string)\n ?.type;\n const clause = buildPropertyKeyClause(\n definition.key,\n state,\n propertyType,\n );\n if (clause !== undefined) {\n clauses.push(clause);\n }\n break;\n }\n\n case \"HAS_LINK\": {\n if (state.type !== \"hasLink\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for hasLink filter \"${definition.linkName}\": expected hasLink, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.hasLink) {\n break;\n }\n clauses.push({ [definition.linkName]: { $isNotNull: true } });\n break;\n }\n\n case \"LINKED_PROPERTY\":\n // Handled by getActiveLinkedFilters — can't be expressed as a\n // WhereClause<Q>.\n break;\n\n case \"KEYWORD_SEARCH\": {\n if (state.type !== \"keywordSearch\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for keywordSearch filter: expected keywordSearch, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.searchTerm) {\n break;\n }\n // TypeScript narrows state to KeywordSearchFilterState\n const searchTerm = state.searchTerm.trim();\n if (!searchTerm) {\n break;\n }\n\n const properties = definition.properties;\n let propertiesToSearch: string[];\n\n if (properties === \"all\") {\n if (propertyTypes && propertyTypes.size > 0) {\n propertiesToSearch = [];\n for (const [key, info] of propertyTypes) {\n if (info.type === \"string\" && !info.multiplicity) {\n propertiesToSearch.push(key);\n }\n }\n } else {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n \"[FilterList] Keyword search with properties: 'all' requires propertyTypes to be provided. Filter will be skipped.\",\n );\n }\n break;\n }\n } else {\n propertiesToSearch = properties;\n }\n\n if (propertiesToSearch.length === 0) {\n break;\n }\n\n const containsOp = state.operator === \"AND\"\n ? \"$containsAllTerms\"\n : \"$containsAnyTerm\";\n\n const propertySearches = propertiesToSearch.map((prop) => ({\n [prop]: { [containsOp]: searchTerm },\n }));\n\n let searchClause: Record<string, unknown>;\n if (propertySearches.length === 1) {\n searchClause = propertySearches[0];\n } else {\n searchClause = { $or: propertySearches };\n }\n clauses.push(\n state.isExcluding ? { $not: searchClause } : searchClause,\n );\n break;\n }\n\n case \"CUSTOM\": {\n if (state.type !== \"custom\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for custom filter \"${definition.key}\": expected custom, got ${state.type}`,\n );\n }\n break;\n }\n // TypeScript narrows state to CustomFilterState\n const customClause = definition.toWhereClause(state);\n if (customClause && Object.keys(customClause).length > 0) {\n clauses.push(customClause as Record<string, unknown>);\n }\n break;\n }\n\n case \"STATIC_VALUES\": {\n if (definition.toWhereClause) {\n const staticClause = definition.toWhereClause(state);\n if (staticClause && Object.keys(staticClause).length > 0) {\n clauses.push(staticClause as Record<string, unknown>);\n }\n } else {\n const clause = buildPropertyKeyClause(definition.key, state);\n if (clause !== undefined) {\n clauses.push(clause);\n }\n }\n break;\n }\n\n default:\n assertUnreachable(definition);\n }\n }\n\n if (clauses.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n if (clauses.length === 1) {\n return clauses[0] as WhereClause<Q>;\n }\n\n return { $and: clauses } as WhereClause<Q>;\n}\n\n/**\n * Builds the inner `WhereClause` for a linked-property filter, typed against\n * the linked object type. Returns `undefined` when the state doesn't yield a\n * predicate (e.g. empty selection).\n */\nexport function buildLinkedInnerWhere<\n Q extends ObjectTypeDefinition,\n L extends LinkNames<Q>,\n>(\n definition: LinkedPropertyFilterDefinition<Q, L>,\n state: LinkedPropertyFilterState,\n): WhereClause<LinkedType<Q, L>> | undefined {\n const record = buildPropertyKeyClause(\n definition.linkedPropertyKey,\n state.linkedFilterState,\n );\n if (record === undefined) {\n return undefined;\n }\n return record as WhereClause<LinkedType<Q, L>>;\n}\n\n/**\n * Returns the active LINKED_PROPERTY filters as `LinkedFilter<Q>` records.\n */\nexport function getActiveLinkedFilters<Q extends ObjectTypeDefinition>(\n definitions: Array<FilterDefinitionUnion<Q>> | undefined,\n filterStates: Map<string, FilterState>,\n excludeFilterKey?: string,\n): Array<LinkedFilter<Q>> {\n if (!definitions || definitions.length === 0) {\n return [];\n }\n const result: Array<LinkedFilter<Q>> = [];\n for (const definition of definitions) {\n if (definition.type !== \"LINKED_PROPERTY\") {\n continue;\n }\n const key = getFilterKey(definition);\n if (key === excludeFilterKey) {\n continue;\n }\n const state = filterStates.get(key);\n if (!state || state.type !== \"linkedProperty\") {\n continue;\n }\n if (definition.reverseLinkName == null) {\n continue;\n }\n const innerWhere = buildLinkedInnerWhere(definition, state);\n if (innerWhere === undefined) {\n continue;\n }\n result.push({\n linkName: definition.linkName,\n reverseLinkName: definition.reverseLinkName,\n innerWhere,\n } as LinkedFilter<Q>);\n }\n return result;\n}\n\n/** Splits values into non-empty and empty, returning $isNull for empty strings. */\nfunction buildValueOrNullFilter(\n values: (string | number | boolean)[],\n): PropertyFilter | CompoundFilter | undefined {\n if (values.length === 0) {\n return undefined;\n }\n\n const nonEmpty = values.filter((v) => v !== \"\");\n const hasEmpty = nonEmpty.length < values.length;\n\n const valueClause: PropertyFilter | undefined = nonEmpty.length === 0\n ? undefined\n : nonEmpty.length === 1\n ? nonEmpty[0]\n : { $in: nonEmpty };\n\n if (!hasEmpty) {\n return valueClause;\n }\n\n if (valueClause === undefined) {\n return { $isNull: true };\n }\n\n return {\n __compound: true,\n conditions: [valueClause],\n includeNull: true,\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -14,6 +14,18 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
+ /**
18
+ * Unwraps a `linkedProperty` wrapper one level so callers can reason about the
19
+ * underlying filter state directly (e.g. for header controls that should
20
+ * follow the inner filter's capabilities).
21
+ */
22
+ export function getEffectiveFilterState(state) {
23
+ if (state?.type === "linkedProperty") {
24
+ return state.linkedFilterState;
25
+ }
26
+ return state;
27
+ }
28
+
17
29
  /** Returns true for filter state types that support in-filter search. */
18
30
  export function supportsSearch(state) {
19
31
  if (!state) {
@@ -111,14 +123,148 @@ export function dedupeEmptyAggregationRows(values) {
111
123
  /** Case-insensitive substring filter for search functionality. */
112
124
  export function filterValuesBySearch(values, searchValue, getValue) {
113
125
  const trimmed = searchValue.trim();
114
- if (!trimmed) return values;
126
+ if (!trimmed) {
127
+ return values;
128
+ }
115
129
  const lowerSearch = trimmed.toLowerCase();
116
130
  return values.filter(v => getValue(v).toLowerCase().includes(lowerSearch));
117
131
  }
118
132
 
133
+ /**
134
+ * Returns a "cleared" version of the given filter state, preserving the
135
+ * discriminator and `isExcluding` flag so the UI doesn't snap between filter
136
+ * modes when a user clicks "Clear all selections". Returns `undefined` if no
137
+ * cleared form is meaningful for the state shape.
138
+ */
139
+ export function clearFilterState(state) {
140
+ if (!state) {
141
+ return undefined;
142
+ }
143
+ switch (state.type) {
144
+ case "SELECT":
145
+ return {
146
+ type: "SELECT",
147
+ selectedValues: [],
148
+ isExcluding: state.isExcluding
149
+ };
150
+ case "EXACT_MATCH":
151
+ return {
152
+ type: "EXACT_MATCH",
153
+ values: [],
154
+ isExcluding: state.isExcluding
155
+ };
156
+ case "CONTAINS_TEXT":
157
+ return {
158
+ type: "CONTAINS_TEXT",
159
+ value: undefined,
160
+ isExcluding: state.isExcluding
161
+ };
162
+ case "NUMBER_RANGE":
163
+ return {
164
+ type: "NUMBER_RANGE",
165
+ minValue: undefined,
166
+ maxValue: undefined,
167
+ includeNull: false
168
+ };
169
+ case "DATE_RANGE":
170
+ return {
171
+ type: "DATE_RANGE",
172
+ minValue: undefined,
173
+ maxValue: undefined,
174
+ includeNull: false
175
+ };
176
+ case "TIMELINE":
177
+ return {
178
+ type: "TIMELINE",
179
+ startDate: undefined,
180
+ endDate: undefined,
181
+ isExcluding: state.isExcluding
182
+ };
183
+ case "TOGGLE":
184
+ return {
185
+ type: "TOGGLE",
186
+ enabled: false
187
+ };
188
+ case "hasLink":
189
+ return {
190
+ type: "hasLink",
191
+ hasLink: false
192
+ };
193
+ case "keywordSearch":
194
+ return {
195
+ type: "keywordSearch",
196
+ searchTerm: "",
197
+ operator: state.operator
198
+ };
199
+ case "linkedProperty":
200
+ {
201
+ const innerCleared = clearFilterState(state.linkedFilterState);
202
+ if (!innerCleared) {
203
+ return undefined;
204
+ }
205
+ return {
206
+ type: "linkedProperty",
207
+ linkedFilterState: innerCleared
208
+ };
209
+ }
210
+ case "custom":
211
+ return undefined;
212
+ default:
213
+ {
214
+ return undefined;
215
+ }
216
+ }
217
+ }
218
+
219
+ /**
220
+ * Returns the state with `isExcluding` flipped, preserving the discriminator
221
+ * and unwrapping/re-wrapping any `linkedProperty` wrapper. Returns `undefined`
222
+ * if the wrapped state is one that does not support excluding.
223
+ */
224
+ export function toggleIsExcluding(state) {
225
+ if (state.type === "linkedProperty") {
226
+ const inner = state.linkedFilterState;
227
+ return {
228
+ type: "linkedProperty",
229
+ linkedFilterState: {
230
+ ...inner,
231
+ isExcluding: !inner.isExcluding
232
+ }
233
+ };
234
+ }
235
+ if (!supportsExcluding(state)) {
236
+ return undefined;
237
+ }
238
+ return {
239
+ ...state,
240
+ isExcluding: !state.isExcluding
241
+ };
242
+ }
243
+
244
+ /**
245
+ * Returns the number of values the user has actively selected for filters
246
+ * whose UI surfaces a selected-of-total count (LISTOGRAM, SINGLE_SELECT,
247
+ * MULTI_SELECT, TEXT_TAGS). Returns 0 for state shapes that don't have a
248
+ * discrete list of selected values.
249
+ */
250
+ export function getSelectedCount(state) {
251
+ if (!state) {
252
+ return 0;
253
+ }
254
+ if (state.type === "EXACT_MATCH") {
255
+ return state.values.length;
256
+ }
257
+ if (state.type === "SELECT") {
258
+ return state.selectedValues.length;
259
+ }
260
+ return 0;
261
+ }
262
+
119
263
  /** Check if a filter state has an active (non-empty) value. */
120
264
  export function filterHasActiveState(state) {
121
- if (!state) return false;
265
+ if (!state) {
266
+ return false;
267
+ }
122
268
  switch (state.type) {
123
269
  case "SELECT":
124
270
  return state.selectedValues.length > 0;
@@ -1 +1 @@
1
- {"version":3,"file":"filterValues.js","names":["supportsSearch","state","type","supportsExcluding","isEmptyValue","value","dedupeEmptyAggregationRows","values","out","emptyCount","firstEmptyIndex","v","length","count","push","splice","isNull","filterValuesBySearch","searchValue","getValue","trimmed","trim","lowerSearch","toLowerCase","filter","includes","filterHasActiveState","selectedValues","undefined","minValue","maxValue","includeNull","enabled","hasLink","linkedFilterState","searchTerm","startDate","endDate"],"sources":["filterValues.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 { FilterState } from \"../FilterListItemApi.js\";\nimport type { PropertyAggregationValue } from \"../types/AggregationTypes.js\";\n\n/** Returns true for filter state types that support in-filter search. */\nexport function supportsSearch(state: FilterState | undefined): boolean {\n if (!state) {\n return false;\n }\n switch (state.type) {\n case \"SELECT\":\n case \"EXACT_MATCH\":\n return true;\n case \"CONTAINS_TEXT\":\n case \"NUMBER_RANGE\":\n case \"DATE_RANGE\":\n case \"TOGGLE\":\n case \"hasLink\":\n case \"linkedProperty\":\n case \"keywordSearch\":\n case \"TIMELINE\":\n case \"custom\":\n return false;\n default: {\n const _exhaustive: never = state;\n return false;\n }\n }\n}\n\n/** Returns true for filter state types that support isExcluding. */\nexport function supportsExcluding(state: FilterState | undefined): boolean {\n if (!state) {\n return false;\n }\n switch (state.type) {\n case \"SELECT\":\n case \"EXACT_MATCH\":\n case \"CONTAINS_TEXT\":\n case \"TIMELINE\":\n return true;\n case \"NUMBER_RANGE\":\n case \"DATE_RANGE\":\n case \"TOGGLE\":\n case \"hasLink\":\n case \"linkedProperty\":\n case \"keywordSearch\":\n case \"custom\":\n return false;\n default: {\n const _exhaustive: never = state;\n return false;\n }\n }\n}\n\n/**\n * Returns true if the given value should render as a \"No value\" placeholder\n * in dropdown options, listogram buckets, and tag chips.\n *\n * Whitespace-only strings (e.g. \" \", \"\\t\") are real values and remain\n * distinct from \"No value\".\n */\nexport function isEmptyValue(value: string | null | undefined): boolean {\n return value == null || value === \"\";\n}\n\n/**\n * Merges every null/undefined/empty-string aggregation row into a single\n * \"No value\" bucket placed at the position of the first empty row encountered.\n * Backends sometimes return separate rows for null, undefined, and \"\"; this\n * collapses them so consumers (listogram, dropdown, multi-select) all see one\n * canonical row.\n */\nexport function dedupeEmptyAggregationRows(\n values: PropertyAggregationValue[],\n): PropertyAggregationValue[] {\n const out: PropertyAggregationValue[] = [];\n let emptyCount = 0;\n let firstEmptyIndex = -1;\n for (const v of values) {\n if (isEmptyValue(v.value)) {\n if (firstEmptyIndex === -1) {\n firstEmptyIndex = out.length;\n }\n emptyCount += v.count;\n } else {\n out.push(v);\n }\n }\n if (firstEmptyIndex >= 0 && emptyCount > 0) {\n out.splice(firstEmptyIndex, 0, {\n value: \"\",\n count: emptyCount,\n isNull: true,\n });\n }\n return out;\n}\n\n/** Case-insensitive substring filter for search functionality. */\nexport function filterValuesBySearch<T>(\n values: T[],\n searchValue: string,\n getValue: (item: T) => string,\n): T[] {\n const trimmed = searchValue.trim();\n if (!trimmed) return values;\n const lowerSearch = trimmed.toLowerCase();\n return values.filter((v) => getValue(v).toLowerCase().includes(lowerSearch));\n}\n\n/** Check if a filter state has an active (non-empty) value. */\nexport function filterHasActiveState(state: FilterState | undefined): boolean {\n if (!state) return false;\n\n switch (state.type) {\n case \"SELECT\":\n return state.selectedValues.length > 0;\n case \"EXACT_MATCH\":\n return state.values.length > 0;\n case \"CONTAINS_TEXT\":\n return state.value !== undefined && state.value !== \"\";\n case \"NUMBER_RANGE\":\n return state.minValue !== undefined || state.maxValue !== undefined\n || state.includeNull === true;\n case \"DATE_RANGE\":\n return state.minValue !== undefined || state.maxValue !== undefined\n || state.includeNull === true;\n case \"TOGGLE\":\n return state.enabled;\n case \"hasLink\":\n return state.hasLink;\n case \"linkedProperty\":\n return filterHasActiveState(state.linkedFilterState);\n case \"keywordSearch\":\n return state.searchTerm !== undefined && state.searchTerm !== \"\";\n case \"TIMELINE\":\n return state.startDate !== undefined || state.endDate !== undefined;\n case \"custom\":\n return true;\n default: {\n const _exhaustive: never = state;\n return false;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"filterValues.js","names":["getEffectiveFilterState","state","type","linkedFilterState","supportsSearch","supportsExcluding","isEmptyValue","value","dedupeEmptyAggregationRows","values","out","emptyCount","firstEmptyIndex","v","length","count","push","splice","isNull","filterValuesBySearch","searchValue","getValue","trimmed","trim","lowerSearch","toLowerCase","filter","includes","clearFilterState","undefined","selectedValues","isExcluding","minValue","maxValue","includeNull","startDate","endDate","enabled","hasLink","searchTerm","operator","innerCleared","toggleIsExcluding","inner","getSelectedCount","filterHasActiveState"],"sources":["filterValues.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 { FilterState } from \"../FilterListItemApi.js\";\nimport type { PropertyAggregationValue } from \"../types/AggregationTypes.js\";\n\n/**\n * Unwraps a `linkedProperty` wrapper one level so callers can reason about the\n * underlying filter state directly (e.g. for header controls that should\n * follow the inner filter's capabilities).\n */\nexport function getEffectiveFilterState(\n state: FilterState | undefined,\n): FilterState | undefined {\n if (state?.type === \"linkedProperty\") {\n return state.linkedFilterState;\n }\n return state;\n}\n\n/** Returns true for filter state types that support in-filter search. */\nexport function supportsSearch(state: FilterState | undefined): boolean {\n if (!state) {\n return false;\n }\n switch (state.type) {\n case \"SELECT\":\n case \"EXACT_MATCH\":\n return true;\n case \"CONTAINS_TEXT\":\n case \"NUMBER_RANGE\":\n case \"DATE_RANGE\":\n case \"TOGGLE\":\n case \"hasLink\":\n case \"linkedProperty\":\n case \"keywordSearch\":\n case \"TIMELINE\":\n case \"custom\":\n return false;\n default: {\n const _exhaustive: never = state;\n return false;\n }\n }\n}\n\n/** Returns true for filter state types that support isExcluding. */\nexport function supportsExcluding(state: FilterState | undefined): boolean {\n if (!state) {\n return false;\n }\n switch (state.type) {\n case \"SELECT\":\n case \"EXACT_MATCH\":\n case \"CONTAINS_TEXT\":\n case \"TIMELINE\":\n return true;\n case \"NUMBER_RANGE\":\n case \"DATE_RANGE\":\n case \"TOGGLE\":\n case \"hasLink\":\n case \"linkedProperty\":\n case \"keywordSearch\":\n case \"custom\":\n return false;\n default: {\n const _exhaustive: never = state;\n return false;\n }\n }\n}\n\n/**\n * Returns true if the given value should render as a \"No value\" placeholder\n * in dropdown options, listogram buckets, and tag chips.\n *\n * Whitespace-only strings (e.g. \" \", \"\\t\") are real values and remain\n * distinct from \"No value\".\n */\nexport function isEmptyValue(value: string | null | undefined): boolean {\n return value == null || value === \"\";\n}\n\n/**\n * Merges every null/undefined/empty-string aggregation row into a single\n * \"No value\" bucket placed at the position of the first empty row encountered.\n * Backends sometimes return separate rows for null, undefined, and \"\"; this\n * collapses them so consumers (listogram, dropdown, multi-select) all see one\n * canonical row.\n */\nexport function dedupeEmptyAggregationRows(\n values: PropertyAggregationValue[],\n): PropertyAggregationValue[] {\n const out: PropertyAggregationValue[] = [];\n let emptyCount = 0;\n let firstEmptyIndex = -1;\n for (const v of values) {\n if (isEmptyValue(v.value)) {\n if (firstEmptyIndex === -1) {\n firstEmptyIndex = out.length;\n }\n emptyCount += v.count;\n } else {\n out.push(v);\n }\n }\n if (firstEmptyIndex >= 0 && emptyCount > 0) {\n out.splice(firstEmptyIndex, 0, {\n value: \"\",\n count: emptyCount,\n isNull: true,\n });\n }\n return out;\n}\n\n/** Case-insensitive substring filter for search functionality. */\nexport function filterValuesBySearch<T>(\n values: T[],\n searchValue: string,\n getValue: (item: T) => string,\n): T[] {\n const trimmed = searchValue.trim();\n if (!trimmed) {\n return values;\n }\n const lowerSearch = trimmed.toLowerCase();\n return values.filter((v) => getValue(v).toLowerCase().includes(lowerSearch));\n}\n\n/**\n * Returns a \"cleared\" version of the given filter state, preserving the\n * discriminator and `isExcluding` flag so the UI doesn't snap between filter\n * modes when a user clicks \"Clear all selections\". Returns `undefined` if no\n * cleared form is meaningful for the state shape.\n */\nexport function clearFilterState(\n state: FilterState | undefined,\n): FilterState | undefined {\n if (!state) {\n return undefined;\n }\n switch (state.type) {\n case \"SELECT\":\n return {\n type: \"SELECT\",\n selectedValues: [],\n isExcluding: state.isExcluding,\n };\n case \"EXACT_MATCH\":\n return {\n type: \"EXACT_MATCH\",\n values: [],\n isExcluding: state.isExcluding,\n };\n case \"CONTAINS_TEXT\":\n return {\n type: \"CONTAINS_TEXT\",\n value: undefined,\n isExcluding: state.isExcluding,\n };\n case \"NUMBER_RANGE\":\n return {\n type: \"NUMBER_RANGE\",\n minValue: undefined,\n maxValue: undefined,\n includeNull: false,\n };\n case \"DATE_RANGE\":\n return {\n type: \"DATE_RANGE\",\n minValue: undefined,\n maxValue: undefined,\n includeNull: false,\n };\n case \"TIMELINE\":\n return {\n type: \"TIMELINE\",\n startDate: undefined,\n endDate: undefined,\n isExcluding: state.isExcluding,\n };\n case \"TOGGLE\":\n return { type: \"TOGGLE\", enabled: false };\n case \"hasLink\":\n return { type: \"hasLink\", hasLink: false };\n case \"keywordSearch\":\n return {\n type: \"keywordSearch\",\n searchTerm: \"\",\n operator: state.operator,\n };\n case \"linkedProperty\": {\n const innerCleared = clearFilterState(state.linkedFilterState);\n if (!innerCleared) {\n return undefined;\n }\n return { type: \"linkedProperty\", linkedFilterState: innerCleared };\n }\n case \"custom\":\n return undefined;\n default: {\n const _exhaustive: never = state;\n return undefined;\n }\n }\n}\n\n/**\n * Returns the state with `isExcluding` flipped, preserving the discriminator\n * and unwrapping/re-wrapping any `linkedProperty` wrapper. Returns `undefined`\n * if the wrapped state is one that does not support excluding.\n */\nexport function toggleIsExcluding(\n state: FilterState,\n): FilterState | undefined {\n if (state.type === \"linkedProperty\") {\n const inner = state.linkedFilterState;\n return {\n type: \"linkedProperty\",\n linkedFilterState: { ...inner, isExcluding: !inner.isExcluding },\n };\n }\n if (!supportsExcluding(state)) {\n return undefined;\n }\n return { ...state, isExcluding: !state.isExcluding };\n}\n\n/**\n * Returns the number of values the user has actively selected for filters\n * whose UI surfaces a selected-of-total count (LISTOGRAM, SINGLE_SELECT,\n * MULTI_SELECT, TEXT_TAGS). Returns 0 for state shapes that don't have a\n * discrete list of selected values.\n */\nexport function getSelectedCount(state: FilterState | undefined): number {\n if (!state) {\n return 0;\n }\n if (state.type === \"EXACT_MATCH\") {\n return state.values.length;\n }\n if (state.type === \"SELECT\") {\n return state.selectedValues.length;\n }\n return 0;\n}\n\n/** Check if a filter state has an active (non-empty) value. */\nexport function filterHasActiveState(state: FilterState | undefined): boolean {\n if (!state) {\n return false;\n }\n\n switch (state.type) {\n case \"SELECT\":\n return state.selectedValues.length > 0;\n case \"EXACT_MATCH\":\n return state.values.length > 0;\n case \"CONTAINS_TEXT\":\n return state.value !== undefined && state.value !== \"\";\n case \"NUMBER_RANGE\":\n return state.minValue !== undefined || state.maxValue !== undefined\n || state.includeNull === true;\n case \"DATE_RANGE\":\n return state.minValue !== undefined || state.maxValue !== undefined\n || state.includeNull === true;\n case \"TOGGLE\":\n return state.enabled;\n case \"hasLink\":\n return state.hasLink;\n case \"linkedProperty\":\n return filterHasActiveState(state.linkedFilterState);\n case \"keywordSearch\":\n return state.searchTerm !== undefined && state.searchTerm !== \"\";\n case \"TIMELINE\":\n return state.startDate !== undefined || state.endDate !== undefined;\n case \"custom\":\n return true;\n default: {\n const _exhaustive: never = state;\n return false;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,48 @@
1
+ /*
2
+ * Copyright 2026 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
+ export function narrowObjectSet(objectSet, whereClause, linkedFilters) {
18
+ let narrowed = Object.keys(whereClause).length === 0 ? objectSet : objectSet.where(whereClause);
19
+ for (const filter of linkedFilters) {
20
+ narrowed = narrowed.intersect(applyLinkedFilter(narrowed, filter));
21
+ }
22
+ return narrowed;
23
+ }
24
+ function applyLinkedFilter(base, filter) {
25
+ // reverseLinkName's pointing back to Q is a semantic invariant we can't encode
26
+ // in the type system, so the final result is cast to ObjectSet<Q>.
27
+ return base.pivotTo(filter.linkName).where(filter.innerWhere).pivotTo(filter.reverseLinkName);
28
+ }
29
+ export function computeDualScopes(objectSet, whereClause, linkedFilters, showFilteredOutValues) {
30
+ if (objectSet == null) {
31
+ return {
32
+ scoped: undefined,
33
+ emptySource: undefined
34
+ };
35
+ }
36
+ const scoped = narrowObjectSet(objectSet, whereClause, linkedFilters);
37
+ if (!showFilteredOutValues || linkedFilters.length === 0) {
38
+ return {
39
+ scoped,
40
+ emptySource: undefined
41
+ };
42
+ }
43
+ return {
44
+ scoped,
45
+ emptySource: narrowObjectSet(objectSet, whereClause, [])
46
+ };
47
+ }
48
+ //# sourceMappingURL=narrowObjectSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"narrowObjectSet.js","names":["narrowObjectSet","objectSet","whereClause","linkedFilters","narrowed","Object","keys","length","where","filter","intersect","applyLinkedFilter","base","pivotTo","linkName","innerWhere","reverseLinkName","computeDualScopes","showFilteredOutValues","scoped","undefined","emptySource"],"sources":["narrowObjectSet.ts"],"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 type { ObjectSet, ObjectTypeDefinition, WhereClause } from \"@osdk/api\";\nimport type { LinkedFilter } from \"../types/LinkedFilterTypes.js\";\n\nexport function narrowObjectSet<Q extends ObjectTypeDefinition>(\n objectSet: ObjectSet<Q>,\n whereClause: WhereClause<Q>,\n linkedFilters: ReadonlyArray<LinkedFilter<Q>>,\n): ObjectSet<Q> {\n let narrowed = Object.keys(whereClause).length === 0\n ? objectSet\n : objectSet.where(whereClause);\n for (const filter of linkedFilters) {\n narrowed = narrowed.intersect(applyLinkedFilter(narrowed, filter));\n }\n return narrowed;\n}\n\nfunction applyLinkedFilter<Q extends ObjectTypeDefinition>(\n base: ObjectSet<Q>,\n filter: LinkedFilter<Q>,\n): ObjectSet<Q> {\n // reverseLinkName's pointing back to Q is a semantic invariant we can't encode\n // in the type system, so the final result is cast to ObjectSet<Q>.\n return base\n .pivotTo(filter.linkName)\n .where(filter.innerWhere)\n .pivotTo(filter.reverseLinkName) as ObjectSet<Q>;\n}\n\nexport function computeDualScopes<Q extends ObjectTypeDefinition>(\n objectSet: ObjectSet<Q> | undefined,\n whereClause: WhereClause<Q>,\n linkedFilters: ReadonlyArray<LinkedFilter<Q>>,\n showFilteredOutValues: boolean | undefined,\n): {\n scoped: ObjectSet<Q> | undefined;\n emptySource: ObjectSet<Q> | undefined;\n} {\n if (objectSet == null) {\n return { scoped: undefined, emptySource: undefined };\n }\n const scoped = narrowObjectSet(objectSet, whereClause, linkedFilters);\n if (!showFilteredOutValues || linkedFilters.length === 0) {\n return { scoped, emptySource: undefined };\n }\n return { scoped, emptySource: narrowObjectSet(objectSet, whereClause, []) };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA,OAAO,SAASA,eAAeA,CAC7BC,SAAuB,EACvBC,WAA2B,EAC3BC,aAA6C,EAC/B;EACd,IAAIC,QAAQ,GAAGC,MAAM,CAACC,IAAI,CAACJ,WAAW,CAAC,CAACK,MAAM,KAAK,CAAC,GAChDN,SAAS,GACTA,SAAS,CAACO,KAAK,CAACN,WAAW,CAAC;EAChC,KAAK,MAAMO,MAAM,IAAIN,aAAa,EAAE;IAClCC,QAAQ,GAAGA,QAAQ,CAACM,SAAS,CAACC,iBAAiB,CAACP,QAAQ,EAAEK,MAAM,CAAC,CAAC;EACpE;EACA,OAAOL,QAAQ;AACjB;AAEA,SAASO,iBAAiBA,CACxBC,IAAkB,EAClBH,MAAuB,EACT;EACd;EACA;EACA,OAAOG,IAAI,CACRC,OAAO,CAACJ,MAAM,CAACK,QAAQ,CAAC,CACxBN,KAAK,CAACC,MAAM,CAACM,UAAU,CAAC,CACxBF,OAAO,CAACJ,MAAM,CAACO,eAAe,CAAC;AACpC;AAEA,OAAO,SAASC,iBAAiBA,CAC/BhB,SAAmC,EACnCC,WAA2B,EAC3BC,aAA6C,EAC7Ce,qBAA0C,EAI1C;EACA,IAAIjB,SAAS,IAAI,IAAI,EAAE;IACrB,OAAO;MAAEkB,MAAM,EAAEC,SAAS;MAAEC,WAAW,EAAED;IAAU,CAAC;EACtD;EACA,MAAMD,MAAM,GAAGnB,eAAe,CAACC,SAAS,EAAEC,WAAW,EAAEC,aAAa,CAAC;EACrE,IAAI,CAACe,qBAAqB,IAAIf,aAAa,CAACI,MAAM,KAAK,CAAC,EAAE;IACxD,OAAO;MAAEY,MAAM;MAAEE,WAAW,EAAED;IAAU,CAAC;EAC3C;EACA,OAAO;IAAED,MAAM;IAAEE,WAAW,EAAErB,eAAe,CAACC,SAAS,EAAEC,WAAW,EAAE,EAAE;EAAE,CAAC;AAC7E","ignoreList":[]}
@@ -26,4 +26,5 @@ export { filterHasActiveState } from "../../filter-list/utils/filterValues.js";
26
26
  export { getFilterKey } from "../../filter-list/utils/getFilterKey.js";
27
27
  export { getFilterLabel } from "../../filter-list/utils/getFilterLabel.js";
28
28
  export { summarizeFilterValue } from "../../filter-list/utils/summarizeFilterValue.js";
29
+ export { narrowObjectSet } from "../../filter-list/utils/narrowObjectSet.js";
29
30
  //# sourceMappingURL=filter-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter-list.js","names":["BaseFilterList","FilterList","_FilterList","withOsdkMetrics","deserializeFilterStates","serializeFilterStates","FilterPopover","FilterInput","useFilterListState","filterHasActiveState","getFilterKey","getFilterLabel","summarizeFilterValue"],"sources":["filter-list.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\nexport { BaseFilterList } from \"../../filter-list/base/BaseFilterList.js\";\nexport type {\n BaseFilterListProps,\n RenderFilterInput,\n} from \"../../filter-list/base/BaseFilterListApi.js\";\nimport { FilterList as _FilterList } from \"../../filter-list/FilterList.js\";\nimport { withOsdkMetrics } from \"../../util/withOsdkMetrics.js\";\nexport const FilterList: typeof _FilterList = withOsdkMetrics(\n _FilterList,\n \"FilterList\",\n);\n\nexport type {\n FilterDefinitionUnion,\n FilterListProps,\n} from \"../../filter-list/FilterListApi.js\";\nexport type {\n FilterComponentType,\n FilterListItemProps,\n FilterState,\n PropertyFilterDefinition,\n} from \"../../filter-list/FilterListItemApi.js\";\nexport {\n deserializeFilterStates,\n serializeFilterStates,\n} from \"../../filter-list/utils/filterStateSerialization.js\";\n\nexport { FilterPopover } from \"../../filter-list/base/FilterPopover.js\";\nexport type { FilterPopoverProps } from \"../../filter-list/base/FilterPopover.js\";\n\nexport { FilterInput } from \"../../filter-list/FilterInput.js\";\nexport type { FilterInputProps } from \"../../filter-list/FilterInput.js\";\n\nexport { useFilterListState } from \"../../filter-list/hooks/useFilterListState.js\";\nexport type { UseFilterListStateResult } from \"../../filter-list/hooks/useFilterListState.js\";\n\nexport { filterHasActiveState } from \"../../filter-list/utils/filterValues.js\";\nexport { getFilterKey } from \"../../filter-list/utils/getFilterKey.js\";\nexport { getFilterLabel } from \"../../filter-list/utils/getFilterLabel.js\";\nexport { summarizeFilterValue } from \"../../filter-list/utils/summarizeFilterValue.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,cAAc,QAAQ,0CAA0C;AAKzE,SAASC,UAAU,IAAIC,WAAW,QAAQ,iCAAiC;AAC3E,SAASC,eAAe,QAAQ,+BAA+B;AAC/D,OAAO,MAAMF,UAA8B,GAAGE,eAAe,CAC3DD,WAAW,EACX,YACF,CAAC;AAYD,SACEE,uBAAuB,EACvBC,qBAAqB,QAChB,qDAAqD;AAE5D,SAASC,aAAa,QAAQ,yCAAyC;AAGvE,SAASC,WAAW,QAAQ,kCAAkC;AAG9D,SAASC,kBAAkB,QAAQ,+CAA+C;AAGlF,SAASC,oBAAoB,QAAQ,yCAAyC;AAC9E,SAASC,YAAY,QAAQ,yCAAyC;AACtE,SAASC,cAAc,QAAQ,2CAA2C;AAC1E,SAASC,oBAAoB,QAAQ,iDAAiD","ignoreList":[]}
1
+ {"version":3,"file":"filter-list.js","names":["BaseFilterList","FilterList","_FilterList","withOsdkMetrics","deserializeFilterStates","serializeFilterStates","FilterPopover","FilterInput","useFilterListState","filterHasActiveState","getFilterKey","getFilterLabel","summarizeFilterValue","narrowObjectSet"],"sources":["filter-list.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\nexport { BaseFilterList } from \"../../filter-list/base/BaseFilterList.js\";\nexport type {\n BaseFilterListProps,\n RenderFilterInput,\n} from \"../../filter-list/base/BaseFilterListApi.js\";\nimport { FilterList as _FilterList } from \"../../filter-list/FilterList.js\";\nimport { withOsdkMetrics } from \"../../util/withOsdkMetrics.js\";\nexport const FilterList: typeof _FilterList = withOsdkMetrics(\n _FilterList,\n \"FilterList\",\n);\n\nexport type {\n FilterDefinitionUnion,\n FilterListProps,\n} from \"../../filter-list/FilterListApi.js\";\nexport type {\n FilterComponentType,\n FilterDefinitionControls,\n FilterListItemProps,\n FilterState,\n PropertyFilterDefinition,\n} from \"../../filter-list/FilterListItemApi.js\";\nexport {\n deserializeFilterStates,\n serializeFilterStates,\n} from \"../../filter-list/utils/filterStateSerialization.js\";\n\nexport { FilterPopover } from \"../../filter-list/base/FilterPopover.js\";\nexport type { FilterPopoverProps } from \"../../filter-list/base/FilterPopover.js\";\n\nexport { FilterInput } from \"../../filter-list/FilterInput.js\";\nexport type { FilterInputProps } from \"../../filter-list/FilterInput.js\";\n\nexport { useFilterListState } from \"../../filter-list/hooks/useFilterListState.js\";\nexport type { UseFilterListStateResult } from \"../../filter-list/hooks/useFilterListState.js\";\n\nexport { filterHasActiveState } from \"../../filter-list/utils/filterValues.js\";\nexport { getFilterKey } from \"../../filter-list/utils/getFilterKey.js\";\nexport { getFilterLabel } from \"../../filter-list/utils/getFilterLabel.js\";\nexport { summarizeFilterValue } from \"../../filter-list/utils/summarizeFilterValue.js\";\n\nexport type { LinkedFilter } from \"../../filter-list/types/LinkedFilterTypes.js\";\nexport { narrowObjectSet } from \"../../filter-list/utils/narrowObjectSet.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,cAAc,QAAQ,0CAA0C;AAKzE,SAASC,UAAU,IAAIC,WAAW,QAAQ,iCAAiC;AAC3E,SAASC,eAAe,QAAQ,+BAA+B;AAC/D,OAAO,MAAMF,UAA8B,GAAGE,eAAe,CAC3DD,WAAW,EACX,YACF,CAAC;AAaD,SACEE,uBAAuB,EACvBC,qBAAqB,QAChB,qDAAqD;AAE5D,SAASC,aAAa,QAAQ,yCAAyC;AAGvE,SAASC,WAAW,QAAQ,kCAAkC;AAG9D,SAASC,kBAAkB,QAAQ,+CAA+C;AAGlF,SAASC,oBAAoB,QAAQ,yCAAyC;AAC9E,SAASC,YAAY,QAAQ,yCAAyC;AACtE,SAASC,cAAc,QAAQ,2CAA2C;AAC1E,SAASC,oBAAoB,QAAQ,iDAAiD;AAGtF,SAASC,eAAe,QAAQ,4CAA4C","ignoreList":[]}
@@ -22,6 +22,11 @@
22
22
  --osdk-filter-list-empty-text-color: var(--osdk-typography-color-muted);
23
23
  --osdk-filter-list-empty-font-size: var(--osdk-typography-size-body-small);
24
24
 
25
+ /* Filtered-out entries: values present in the wider scope but absent from
26
+ the narrowed scope. Rendered as count=0 muted rows. */
27
+ --osdk-filter-filtered-out-item-opacity: 0.5;
28
+ --osdk-filter-filtered-out-item-color: var(--osdk-typography-color-muted);
29
+
25
30
  /* Filter List Header */
26
31
  --osdk-filter-header-padding: calc(var(--osdk-surface-spacing) * 2)
27
32
  calc(var(--osdk-surface-spacing) * 3);
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- const PACKAGE_USER_AGENT = `osdk-react-components/${"0.19.0"}`;
17
+ const PACKAGE_USER_AGENT = `osdk-react-components/${"0.19.1-beta.0"}`;
18
18
  export function componentUserAgent(componentName) {
19
19
  return `${PACKAGE_USER_AGENT}/${componentName}`;
20
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UserAgent.js","names":["PACKAGE_USER_AGENT","componentUserAgent","componentName"],"sources":["UserAgent.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst PACKAGE_USER_AGENT =\n `osdk-react-components/${process.env.PACKAGE_VERSION}`;\n\nexport function componentUserAgent(componentName: string): string {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,kBAAkB,GACtB,mCAAsD;AAExD,OAAO,SAASC,kBAAkBA,CAACC,aAAqB,EAAU;EAChE,OAAO,GAAGF,kBAAkB,IAAIE,aAAa,EAAE;AACjD","ignoreList":[]}
1
+ {"version":3,"file":"UserAgent.js","names":["PACKAGE_USER_AGENT","componentUserAgent","componentName"],"sources":["UserAgent.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst PACKAGE_USER_AGENT =\n `osdk-react-components/${process.env.PACKAGE_VERSION}`;\n\nexport function componentUserAgent(componentName: string): string {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,kBAAkB,GACtB,0CAAsD;AAExD,OAAO,SAASC,kBAAkBA,CAACC,aAAqB,EAAU;EAChE,OAAO,GAAGF,kBAAkB,IAAIE,aAAa,EAAE;AACjD","ignoreList":[]}
@@ -411,7 +411,7 @@ export type FieldComponent = "DATE_RANGE_INPUT" | "DATETIME_PICKER" | "DROPDOWN"
411
411
  * Describes the data type of a form field, independent of OSDK.
412
412
  * Mirrors ActionMetadata.DataType to keep the rendering layer OSDK-agnostic.
413
413
  */
414
- export type FieldType = "boolean" | "string" | "integer" | "long" | "double" | "datetime" | "timestamp" | "attachment" | "marking" | "mediaReference" | "objectType" | "geoshape" | "geohash" | {
414
+ export type FieldType = "boolean" | "string" | "integer" | "long" | "double" | "datetime" | "timestamp" | "attachment" | "marking" | "mediaReference" | "objectType" | "geoshape" | "geohash" | "scenarioReference" | {
415
415
  type: "object"
416
416
  object: string
417
417
  } | {
@@ -1 +1 @@
1
- {"mappings":"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","names":["error: ValidationError","value: FieldValueType<Q, K>","item: V","a: V","b: V","query: string","props: BaseFormFieldProps<V>","value: V | null","value: unknown"],"sources":["../../../src/action-form/FormFieldApi.ts"],"version":3,"file":"FormFieldApi.d.ts"}
1
+ {"mappings":"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","names":["error: ValidationError","value: FieldValueType<Q, K>","item: V","a: V","b: V","query: string","props: BaseFormFieldProps<V>","value: V | null","value: unknown"],"sources":["../../../src/action-form/FormFieldApi.ts"],"version":3,"file":"FormFieldApi.d.ts"}
@@ -3,13 +3,18 @@ import React from "react";
3
3
  import type { MultiSelectInputLayout } from "./base/inputs/MultiSelectInput.js";
4
4
  import type { FilterDefinitionUnion } from "./FilterListApi.js";
5
5
  import type { FilterState } from "./FilterListItemApi.js";
6
+ import type { LinkedFilter } from "./types/LinkedFilterTypes.js";
6
7
  export interface FilterInputProps<Q extends ObjectTypeDefinition> {
7
8
  objectType: Q;
8
9
  objectSet?: ObjectSet<Q>;
9
10
  definition: FilterDefinitionUnion<Q>;
10
11
  filterState: FilterState | undefined;
11
12
  onFilterStateChanged: (state: FilterState) => void;
13
+ /** Per-filter excluding-self where clause (direct filters only). */
12
14
  whereClause: WhereClause<Q>;
15
+ /** Per-filter excluding-self linked-filter records. */
16
+ linkedFilters?: ReadonlyArray<LinkedFilter<Q>>;
17
+ showFilteredOutValues?: boolean;
13
18
  searchQuery?: string;
14
19
  excludeRowOpen?: boolean;
15
20
  /**
@@ -21,6 +26,6 @@ export interface FilterInputProps<Q extends ObjectTypeDefinition> {
21
26
  */
22
27
  layout?: MultiSelectInputLayout;
23
28
  }
24
- declare function FilterInputInner<Q extends ObjectTypeDefinition>({ objectType, objectSet, definition, filterState, onFilterStateChanged, whereClause, searchQuery, excludeRowOpen, layout }: FilterInputProps<Q>): React.ReactElement;
29
+ declare function FilterInputInner<Q extends ObjectTypeDefinition>({ objectType, objectSet, definition, filterState, onFilterStateChanged, whereClause, linkedFilters, showFilteredOutValues, searchQuery, excludeRowOpen, layout }: FilterInputProps<Q>): React.ReactElement;
25
30
  export declare const FilterInput: typeof FilterInputInner;
26
31
  export {};
@@ -1 +1 @@
1
- {"mappings":"AAgBA,cAAc,WAAW,sBAAsB,mBAAmB,WAAY;AAC9E,OAAO,WAAkC,OAAQ;AAEjD,cAAc,8BAA8B,mCAAoC;AAEhF,cAAc,6BAA6B,oBAAqB;AAChE,cAAc,mBAAmB,wBAAyB;AAK1D,iBAAiB,iBAAiB,UAAU,sBAAsB;CAChE,YAAY;CACZ,YAAY,UAAU;CACtB,YAAY,sBAAsB;CAClC,aAAa;CACb,uBAAuBA,OAAO;CAC9B,aAAa,YAAY;CACzB;CACA;;;;;;;;CAQA,SAAS;AACV;AAED,iBAAS,iBAAiB,UAAU,sBAAsB,EACxD,YACA,WACA,YACA,aACA,sBACA,aACA,aACA,gBACA,QACoB,EAAnB,iBAAiB,KAAK,MAAM;AAwF/B,OAAO,cAAM,oBAA+C","names":["state: FilterState"],"sources":["../../../src/filter-list/FilterInput.tsx"],"version":3,"file":"FilterInput.d.ts"}
1
+ {"mappings":"AAgBA,cAAc,WAAW,sBAAsB,mBAAmB,WAAY;AAC9E,OAAO,WAAkC,OAAQ;AAEjD,cAAc,8BAA8B,mCAAoC;AAEhF,cAAc,6BAA6B,oBAAqB;AAChE,cAAc,mBAAmB,wBAAyB;AAI1D,cAAc,oBAAoB,8BAA+B;AAEjE,iBAAiB,iBAAiB,UAAU,sBAAsB;CAChE,YAAY;CACZ,YAAY,UAAU;CACtB,YAAY,sBAAsB;CAClC,aAAa;CACb,uBAAuBA,OAAO;;CAE9B,aAAa,YAAY;;CAEzB,gBAAgB,cAAc,aAAa;CAC3C;CACA;CACA;;;;;;;;CAQA,SAAS;AACV;AAED,iBAAS,iBAAiB,UAAU,sBAAsB,EACxD,YACA,WACA,YACA,aACA,sBACA,aACA,eACA,uBACA,aACA,gBACA,QACoB,EAAnB,iBAAiB,KAAK,MAAM;AA6F/B,OAAO,cAAM,oBAA+C","names":["state: FilterState"],"sources":["../../../src/filter-list/FilterInput.tsx"],"version":3,"file":"FilterInput.d.ts"}
@@ -1 +1 @@
1
- {"mappings":"AAgBA,cAAc,4BAAyC,WAAY;AACnE,OAAO,WAAqC,OAAQ;AAKpD,cAGE,uBACK,oBAAqB;AAM5B,OAAO,iBAAS,WAAW,UAAU,sBACnCA,OAAO,gBAAgB,KACtB,MAAM","names":["props: FilterListProps<Q>"],"sources":["../../../src/filter-list/FilterList.tsx"],"version":3,"file":"FilterList.d.ts"}
1
+ {"mappings":"AAgBA,cAAc,4BAA4B,WAAY;AACtD,OAAO,WAAqC,OAAQ;AAKpD,cAGE,uBACK,oBAAqB;AAS5B,OAAO,iBAAS,WAAW,UAAU,sBACnCA,OAAO,gBAAgB,KACtB,MAAM","names":["props: FilterListProps<Q>"],"sources":["../../../src/filter-list/FilterList.tsx"],"version":3,"file":"FilterList.d.ts"}
@@ -46,12 +46,24 @@ export interface FilterListProps<Q extends ObjectTypeDefinition> {
46
46
  */
47
47
  objectType: Q;
48
48
  /**
49
- * Optional object set to scope aggregation queries.
50
- * When provided, filter aggregations (e.g. listogram counts) are scoped to this set.
51
- * When omitted, aggregations run against the full object type.
49
+ * Optional object set to scope aggregation queries. When omitted,
50
+ * aggregations run against the full object type.
52
51
  */
53
52
  objectSet?: ObjectSet<Q>;
54
53
  /**
54
+ * The current where clause to filter the objectSet.
55
+ * If provided, the filter clause is controlled.
56
+ * LINKED_PROPERTY filters are not included; use `onEffectiveObjectSet`.
57
+ */
58
+ filterClause?: WhereClause<Q>;
59
+ /**
60
+ * Called when the filter clause changes.
61
+ * Required in controlled mode.
62
+ *
63
+ * @param newClause The updated filter clause
64
+ */
65
+ onFilterClauseChanged?: (newClause: WhereClause<Q>) => void;
66
+ /**
55
67
  * Optional title to display in the filter list header
56
68
  */
57
69
  title?: ReactNode;
@@ -65,18 +77,6 @@ export interface FilterListProps<Q extends ObjectTypeDefinition> {
65
77
  */
66
78
  filterDefinitions?: Array<FilterDefinitionUnion<Q>>;
67
79
  /**
68
- * The current where clause to filter the objectSet.
69
- * If provided, the filter clause is controlled.
70
- */
71
- filterClause?: WhereClause<Q>;
72
- /**
73
- * Called when the filter clause changes.
74
- * Required in controlled mode.
75
- *
76
- * @param newClause The updated filter clause
77
- */
78
- onFilterClauseChanged?: (newClause: WhereClause<Q>) => void;
79
- /**
80
80
  * Called when filter state changes
81
81
  *
82
82
  * @param definition The filter definition whose state changed
@@ -84,6 +84,21 @@ export interface FilterListProps<Q extends ObjectTypeDefinition> {
84
84
  */
85
85
  onFilterStateChanged?: (definition: FilterDefinitionUnion<Q>, newState: FilterStateType) => void;
86
86
  /**
87
+ * Called with the narrowed `ObjectSet` whenever filters change. Requires
88
+ * `objectSet` to be set.
89
+ *
90
+ * A linked filter only narrows the set when its definition has
91
+ * `reverseLinkName`. Linked filters without it are skipped here; read their
92
+ * state from `onFilterStateChanged` instead.
93
+ */
94
+ onEffectiveObjectSet?: (objectSet: ObjectSet<Q>) => void;
95
+ /**
96
+ * When `true`, facets render greyed-out count=0 rows for values present in
97
+ * the unfiltered data but excluded by other active filters.
98
+ * @default false
99
+ */
100
+ showFilteredOutValues?: boolean;
101
+ /**
87
102
  * Controls how filter visibility (add/remove) is managed.
88
103
  *
89
104
  * - `"uncontrolled"` (default): FilterList manages visibility internally.