@osdk/react-components 0.2.0-beta.21 → 0.2.0-beta.22

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/AGENTS.md +14 -97
  2. package/CHANGELOG.md +19 -0
  3. package/README.md +1 -1
  4. package/build/browser/action-form/ActionFormApi.js.map +1 -1
  5. package/build/browser/action-form/BaseForm.js +18 -5
  6. package/build/browser/action-form/BaseForm.js.map +1 -1
  7. package/build/browser/action-form/BaseForm.module.css +38 -0
  8. package/build/browser/action-form/BaseForm.module.css.js +8 -0
  9. package/build/browser/action-form/FormField.js +42 -0
  10. package/build/browser/action-form/FormField.js.map +1 -0
  11. package/build/browser/action-form/FormField.module.css +41 -0
  12. package/build/browser/action-form/FormField.module.css.js +10 -0
  13. package/build/browser/action-form/FormFieldApi.js.map +1 -1
  14. package/build/browser/action-form/FormHeader.js +26 -0
  15. package/build/browser/action-form/FormHeader.js.map +1 -0
  16. package/build/browser/action-form/FormHeader.module.css +26 -0
  17. package/build/browser/action-form/FormHeader.module.css.js +6 -0
  18. package/build/browser/action-form/fields/FormFieldRenderer.js +7 -5
  19. package/build/browser/action-form/fields/FormFieldRenderer.js.map +1 -1
  20. package/build/browser/action-form/fields/TextInputField.js +2 -0
  21. package/build/browser/action-form/fields/TextInputField.js.map +1 -1
  22. package/build/browser/action-form/fields/TextInputField.module.css +56 -0
  23. package/build/browser/action-form/fields/TextInputField.module.css.js +6 -0
  24. package/build/browser/base-components/checkbox/Checkbox.js +2 -2
  25. package/build/browser/base-components/checkbox/Checkbox.js.map +1 -1
  26. package/build/browser/base-components/checkbox/Checkbox.module.css +0 -4
  27. package/build/browser/base-components/combobox/Combobox.js +3 -8
  28. package/build/browser/base-components/combobox/Combobox.js.map +1 -1
  29. package/build/browser/base-components/combobox/Combobox.module.css +0 -3
  30. package/build/browser/base-components/draggable-list/DraggableList.js +2 -4
  31. package/build/browser/base-components/draggable-list/DraggableList.js.map +1 -1
  32. package/build/browser/base-components/search-bar/SearchBar.module.css +2 -2
  33. package/build/browser/base-components/select/Select.js +1 -3
  34. package/build/browser/base-components/select/Select.js.map +1 -1
  35. package/build/browser/base-components/select/Select.module.css +0 -2
  36. package/build/browser/base-components/switch/Switch.module.css +0 -1
  37. package/build/browser/filter-list/FilterInput.js +14 -5
  38. package/build/browser/filter-list/FilterInput.js.map +1 -1
  39. package/build/browser/filter-list/FilterList.js +13 -5
  40. package/build/browser/filter-list/FilterList.js.map +1 -1
  41. package/build/browser/filter-list/FilterListApi.js.map +1 -1
  42. package/build/browser/filter-list/base/AddFilterPopover.js +4 -3
  43. package/build/browser/filter-list/base/AddFilterPopover.js.map +1 -1
  44. package/build/browser/filter-list/base/BaseFilterListApi.js.map +1 -1
  45. package/build/browser/filter-list/base/ExcludeDropdown.js +61 -0
  46. package/build/browser/filter-list/base/ExcludeDropdown.js.map +1 -0
  47. package/build/browser/filter-list/base/ExcludeDropdown.module.css +94 -0
  48. package/build/browser/filter-list/base/ExcludeDropdown.module.css.js +12 -0
  49. package/build/browser/filter-list/base/FilterIcons.js +0 -39
  50. package/build/browser/filter-list/base/FilterIcons.js.map +1 -1
  51. package/build/browser/filter-list/base/FilterInputExcludeRow.js +55 -0
  52. package/build/browser/filter-list/base/FilterInputExcludeRow.js.map +1 -0
  53. package/build/browser/filter-list/base/FilterListItem.js +72 -23
  54. package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
  55. package/build/browser/filter-list/base/FilterListItem.module.css +96 -20
  56. package/build/browser/filter-list/base/FilterListItem.module.css.js +7 -2
  57. package/build/browser/filter-list/base/inputs/CheckboxListInput.js +2 -2
  58. package/build/browser/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
  59. package/build/browser/filter-list/base/inputs/ContainsTextInput.js +2 -6
  60. package/build/browser/filter-list/base/inputs/ContainsTextInput.js.map +1 -1
  61. package/build/browser/filter-list/base/inputs/ListogramInput.js +2 -2
  62. package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
  63. package/build/browser/filter-list/base/inputs/RangeInput.js +2 -2
  64. package/build/browser/filter-list/base/inputs/RangeInput.js.map +1 -1
  65. package/build/browser/filter-list/base/inputs/SingleSelectInput.js +1 -3
  66. package/build/browser/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
  67. package/build/browser/filter-list/base/inputs/{useStaleData.js → useStableData.js} +5 -5
  68. package/build/browser/filter-list/base/inputs/useStableData.js.map +1 -0
  69. package/build/browser/filter-list/hooks/usePropertyAggregation.js +3 -2
  70. package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -1
  71. package/build/browser/filter-list/inputs/CheckboxListFilterInput.js +15 -5
  72. package/build/browser/filter-list/inputs/CheckboxListFilterInput.js.map +1 -1
  73. package/build/browser/filter-list/inputs/DateRangeFilterInput.js +10 -6
  74. package/build/browser/filter-list/inputs/DateRangeFilterInput.js.map +1 -1
  75. package/build/browser/filter-list/inputs/LinkedPropertyInput.js +41 -18
  76. package/build/browser/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
  77. package/build/browser/filter-list/inputs/ListogramFilterInput.js +15 -5
  78. package/build/browser/filter-list/inputs/ListogramFilterInput.js.map +1 -1
  79. package/build/browser/filter-list/inputs/MultiSelectFilterInput.js +12 -4
  80. package/build/browser/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
  81. package/build/browser/filter-list/inputs/NumberRangeFilterInput.js +10 -6
  82. package/build/browser/filter-list/inputs/NumberRangeFilterInput.js.map +1 -1
  83. package/build/browser/filter-list/inputs/PropertyFilterInput.js +36 -10
  84. package/build/browser/filter-list/inputs/PropertyFilterInput.js.map +1 -1
  85. package/build/browser/filter-list/inputs/SingleSelectFilterInput.js +12 -4
  86. package/build/browser/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
  87. package/build/browser/filter-list/inputs/TextTagsFilterInput.js +12 -4
  88. package/build/browser/filter-list/inputs/TextTagsFilterInput.js.map +1 -1
  89. package/build/browser/filter-list/utils/filterValues.js +29 -1
  90. package/build/browser/filter-list/utils/filterValues.js.map +1 -1
  91. package/build/browser/object-table/LoadingCell.module.css +0 -1
  92. package/build/browser/object-table/MultiColumnSortDialog.js +1 -3
  93. package/build/browser/object-table/MultiColumnSortDialog.js.map +1 -1
  94. package/build/browser/object-table/MultiColumnSortDialog.module.css +0 -1
  95. package/build/browser/object-table/TableCell.module.css +1 -1
  96. package/build/browser/object-table/TableHeader.module.css +2 -2
  97. package/build/browser/object-table/TableHeaderWithPopover.js +2 -4
  98. package/build/browser/object-table/TableHeaderWithPopover.js.map +1 -1
  99. package/build/browser/object-table/TableHeaderWithPopover.module.css +1 -0
  100. package/build/browser/pdf-viewer/PdfViewerAnnotationLayer.module.css +0 -1
  101. package/build/browser/public/experimental.js +2 -0
  102. package/build/browser/public/experimental.js.map +1 -1
  103. package/build/browser/styles.css +372 -38
  104. package/build/cjs/public/experimental.cjs +1882 -1068
  105. package/build/cjs/public/experimental.cjs.map +1 -1
  106. package/build/cjs/public/experimental.css +244 -38
  107. package/build/cjs/public/experimental.css.map +1 -1
  108. package/build/cjs/public/experimental.d.cts +420 -11
  109. package/build/esm/action-form/ActionFormApi.js.map +1 -1
  110. package/build/esm/action-form/BaseForm.js +18 -5
  111. package/build/esm/action-form/BaseForm.js.map +1 -1
  112. package/build/esm/action-form/BaseForm.module.css +38 -0
  113. package/build/esm/action-form/FormField.js +42 -0
  114. package/build/esm/action-form/FormField.js.map +1 -0
  115. package/build/esm/action-form/FormField.module.css +41 -0
  116. package/build/esm/action-form/FormFieldApi.js.map +1 -1
  117. package/build/esm/action-form/FormHeader.js +26 -0
  118. package/build/esm/action-form/FormHeader.js.map +1 -0
  119. package/build/esm/action-form/FormHeader.module.css +26 -0
  120. package/build/esm/action-form/fields/FormFieldRenderer.js +7 -5
  121. package/build/esm/action-form/fields/FormFieldRenderer.js.map +1 -1
  122. package/build/esm/action-form/fields/TextInputField.js +2 -0
  123. package/build/esm/action-form/fields/TextInputField.js.map +1 -1
  124. package/build/esm/action-form/fields/TextInputField.module.css +56 -0
  125. package/build/esm/base-components/checkbox/Checkbox.js +2 -2
  126. package/build/esm/base-components/checkbox/Checkbox.js.map +1 -1
  127. package/build/esm/base-components/checkbox/Checkbox.module.css +0 -4
  128. package/build/esm/base-components/combobox/Combobox.js +3 -8
  129. package/build/esm/base-components/combobox/Combobox.js.map +1 -1
  130. package/build/esm/base-components/combobox/Combobox.module.css +0 -3
  131. package/build/esm/base-components/draggable-list/DraggableList.js +2 -4
  132. package/build/esm/base-components/draggable-list/DraggableList.js.map +1 -1
  133. package/build/esm/base-components/search-bar/SearchBar.module.css +2 -2
  134. package/build/esm/base-components/select/Select.js +1 -3
  135. package/build/esm/base-components/select/Select.js.map +1 -1
  136. package/build/esm/base-components/select/Select.module.css +0 -2
  137. package/build/esm/base-components/switch/Switch.module.css +0 -1
  138. package/build/esm/filter-list/FilterInput.js +14 -5
  139. package/build/esm/filter-list/FilterInput.js.map +1 -1
  140. package/build/esm/filter-list/FilterList.js +13 -5
  141. package/build/esm/filter-list/FilterList.js.map +1 -1
  142. package/build/esm/filter-list/FilterListApi.js.map +1 -1
  143. package/build/esm/filter-list/base/AddFilterPopover.js +4 -3
  144. package/build/esm/filter-list/base/AddFilterPopover.js.map +1 -1
  145. package/build/esm/filter-list/base/BaseFilterListApi.js.map +1 -1
  146. package/build/esm/filter-list/base/ExcludeDropdown.js +61 -0
  147. package/build/esm/filter-list/base/ExcludeDropdown.js.map +1 -0
  148. package/build/esm/filter-list/base/ExcludeDropdown.module.css +94 -0
  149. package/build/esm/filter-list/base/FilterIcons.js +0 -39
  150. package/build/esm/filter-list/base/FilterIcons.js.map +1 -1
  151. package/build/esm/filter-list/base/FilterInputExcludeRow.js +55 -0
  152. package/build/esm/filter-list/base/FilterInputExcludeRow.js.map +1 -0
  153. package/build/esm/filter-list/base/FilterListItem.js +72 -23
  154. package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
  155. package/build/esm/filter-list/base/FilterListItem.module.css +96 -20
  156. package/build/esm/filter-list/base/inputs/CheckboxListInput.js +2 -2
  157. package/build/esm/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
  158. package/build/esm/filter-list/base/inputs/ContainsTextInput.js +2 -6
  159. package/build/esm/filter-list/base/inputs/ContainsTextInput.js.map +1 -1
  160. package/build/esm/filter-list/base/inputs/ListogramInput.js +2 -2
  161. package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
  162. package/build/esm/filter-list/base/inputs/RangeInput.js +2 -2
  163. package/build/esm/filter-list/base/inputs/RangeInput.js.map +1 -1
  164. package/build/esm/filter-list/base/inputs/SingleSelectInput.js +1 -3
  165. package/build/esm/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
  166. package/build/esm/filter-list/base/inputs/{useStaleData.js → useStableData.js} +5 -5
  167. package/build/esm/filter-list/base/inputs/useStableData.js.map +1 -0
  168. package/build/esm/filter-list/hooks/usePropertyAggregation.js +3 -2
  169. package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -1
  170. package/build/esm/filter-list/inputs/CheckboxListFilterInput.js +15 -5
  171. package/build/esm/filter-list/inputs/CheckboxListFilterInput.js.map +1 -1
  172. package/build/esm/filter-list/inputs/DateRangeFilterInput.js +10 -6
  173. package/build/esm/filter-list/inputs/DateRangeFilterInput.js.map +1 -1
  174. package/build/esm/filter-list/inputs/LinkedPropertyInput.js +41 -18
  175. package/build/esm/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
  176. package/build/esm/filter-list/inputs/ListogramFilterInput.js +15 -5
  177. package/build/esm/filter-list/inputs/ListogramFilterInput.js.map +1 -1
  178. package/build/esm/filter-list/inputs/MultiSelectFilterInput.js +12 -4
  179. package/build/esm/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
  180. package/build/esm/filter-list/inputs/NumberRangeFilterInput.js +10 -6
  181. package/build/esm/filter-list/inputs/NumberRangeFilterInput.js.map +1 -1
  182. package/build/esm/filter-list/inputs/PropertyFilterInput.js +36 -10
  183. package/build/esm/filter-list/inputs/PropertyFilterInput.js.map +1 -1
  184. package/build/esm/filter-list/inputs/SingleSelectFilterInput.js +12 -4
  185. package/build/esm/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
  186. package/build/esm/filter-list/inputs/TextTagsFilterInput.js +12 -4
  187. package/build/esm/filter-list/inputs/TextTagsFilterInput.js.map +1 -1
  188. package/build/esm/filter-list/utils/filterValues.js +29 -1
  189. package/build/esm/filter-list/utils/filterValues.js.map +1 -1
  190. package/build/esm/object-table/LoadingCell.module.css +0 -1
  191. package/build/esm/object-table/MultiColumnSortDialog.js +1 -3
  192. package/build/esm/object-table/MultiColumnSortDialog.js.map +1 -1
  193. package/build/esm/object-table/MultiColumnSortDialog.module.css +0 -1
  194. package/build/esm/object-table/TableCell.module.css +1 -1
  195. package/build/esm/object-table/TableHeader.module.css +2 -2
  196. package/build/esm/object-table/TableHeaderWithPopover.js +2 -4
  197. package/build/esm/object-table/TableHeaderWithPopover.js.map +1 -1
  198. package/build/esm/object-table/TableHeaderWithPopover.module.css +1 -0
  199. package/build/esm/pdf-viewer/PdfViewerAnnotationLayer.module.css +0 -1
  200. package/build/esm/public/experimental.js +2 -0
  201. package/build/esm/public/experimental.js.map +1 -1
  202. package/build/types/action-form/ActionFormApi.d.ts +1 -0
  203. package/build/types/action-form/ActionFormApi.d.ts.map +1 -1
  204. package/build/types/action-form/BaseForm.d.ts.map +1 -1
  205. package/build/types/action-form/FormField.d.ts +11 -0
  206. package/build/types/action-form/FormField.d.ts.map +1 -0
  207. package/build/types/action-form/FormFieldApi.d.ts +1 -1
  208. package/build/types/action-form/FormHeader.d.ts +6 -0
  209. package/build/types/action-form/FormHeader.d.ts.map +1 -0
  210. package/build/types/action-form/fields/FormFieldRenderer.d.ts.map +1 -1
  211. package/build/types/action-form/fields/TextInputField.d.ts.map +1 -1
  212. package/build/types/filter-list/FilterInput.d.ts +3 -1
  213. package/build/types/filter-list/FilterInput.d.ts.map +1 -1
  214. package/build/types/filter-list/FilterListApi.d.ts +12 -9
  215. package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
  216. package/build/types/filter-list/base/AddFilterPopover.d.ts +2 -1
  217. package/build/types/filter-list/base/AddFilterPopover.d.ts.map +1 -1
  218. package/build/types/filter-list/base/BaseFilterListApi.d.ts +2 -0
  219. package/build/types/filter-list/base/BaseFilterListApi.d.ts.map +1 -1
  220. package/build/types/filter-list/base/ExcludeDropdown.d.ts +8 -0
  221. package/build/types/filter-list/base/ExcludeDropdown.d.ts.map +1 -0
  222. package/build/types/filter-list/base/FilterIcons.d.ts +0 -2
  223. package/build/types/filter-list/base/FilterIcons.d.ts.map +1 -1
  224. package/build/types/filter-list/base/FilterInputExcludeRow.d.ts +12 -0
  225. package/build/types/filter-list/base/FilterInputExcludeRow.d.ts.map +1 -0
  226. package/build/types/filter-list/base/FilterListItem.d.ts.map +1 -1
  227. package/build/types/filter-list/base/inputs/useStableData.d.ts +1 -0
  228. package/build/types/filter-list/base/inputs/useStableData.d.ts.map +1 -0
  229. package/build/types/filter-list/hooks/usePropertyAggregation.d.ts +2 -2
  230. package/build/types/filter-list/hooks/usePropertyAggregation.d.ts.map +1 -1
  231. package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts +5 -2
  232. package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts.map +1 -1
  233. package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts +3 -2
  234. package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts.map +1 -1
  235. package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts +2 -1
  236. package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts.map +1 -1
  237. package/build/types/filter-list/inputs/ListogramFilterInput.d.ts +5 -2
  238. package/build/types/filter-list/inputs/ListogramFilterInput.d.ts.map +1 -1
  239. package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts +4 -2
  240. package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts.map +1 -1
  241. package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts +3 -2
  242. package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts.map +1 -1
  243. package/build/types/filter-list/inputs/PropertyFilterInput.d.ts +3 -1
  244. package/build/types/filter-list/inputs/PropertyFilterInput.d.ts.map +1 -1
  245. package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts +4 -2
  246. package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts.map +1 -1
  247. package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts +4 -2
  248. package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts.map +1 -1
  249. package/build/types/filter-list/utils/filterValues.d.ts +2 -0
  250. package/build/types/filter-list/utils/filterValues.d.ts.map +1 -1
  251. package/build/types/public/experimental.d.ts +4 -0
  252. package/build/types/public/experimental.d.ts.map +1 -1
  253. package/package.json +4 -4
  254. package/build/browser/filter-list/base/inputs/useStaleData.js.map +0 -1
  255. package/build/esm/filter-list/base/inputs/useStaleData.js.map +0 -1
  256. package/build/types/filter-list/base/inputs/useStaleData.d.ts +0 -1
  257. package/build/types/filter-list/base/inputs/useStaleData.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"RangeInput.js","names":["Input","classnames","debounce","React","memo","useCallback","useEffect","useId","useMemo","useRef","useState","createHistogramBuckets","getMaxBucketCount","styles","useStaleData","DEBOUNCE_MS","RangeInputInner","valueCountPairs","isLoading","minValue","maxValue","onChange","showHistogram","className","style","config","minInputId","maxInputId","localMin","setLocalMin","formatValue","localMax","setLocalMax","onChangeRef","current","minValueRef","maxValueRef","debouncedMinChange","newValue","parsed","parseValue","debouncedMaxChange","cancel","displayPairs","computedRange","length","min","undefined","max","reduce","acc","p","Math","toNumber","value","Infinity","fromNumber","dataRange","dataMin","dataMax","buckets","maxBucketCount","handleMinChange","e","target","handleMaxChange","createElement","rangeInput","histogramContainer","map","bucket","index","height","count","isInRange","key","histogramBar","title","formatTooltip","rangeInputs","inputWrapper","htmlFor","inputLabel","minLabel","_extends","id","type","inputType","input","placeholder","formatPlaceholder","inputProps","separator","maxLabel","RangeInput"],"sources":["RangeInput.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 { Input } from \"@base-ui/react/input\";\nimport classnames from \"classnames\";\nimport { debounce } from \"lodash-es\";\nimport React, {\n memo,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n createHistogramBuckets,\n getMaxBucketCount,\n type HistogramBucket,\n} from \"./createHistogramBuckets.js\";\nimport styles from \"./RangeInput.module.css\";\nimport { useStaleData } from \"./useStaleData.js\";\n\nconst DEBOUNCE_MS = 300;\n\nexport interface RangeInputConfig<T> {\n inputType: \"number\" | \"date\";\n formatValue: (value: T | undefined) => string;\n parseValue: (value: string) => T | undefined;\n toNumber: (value: T) => number;\n fromNumber: (value: number) => T;\n minLabel: string;\n maxLabel: string;\n formatTooltip: (min: T, max: T, count: number) => string;\n formatPlaceholder?: (value: T) => string;\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n}\n\nexport interface RangeInputProps<T> {\n valueCountPairs: Array<{ value: T; count: number }>;\n isLoading: boolean;\n minValue: T | undefined;\n maxValue: T | undefined;\n onChange: (min: T | undefined, max: T | undefined) => void;\n showHistogram?: boolean;\n className?: string;\n style?: React.CSSProperties;\n config: RangeInputConfig<T>;\n}\n\nfunction RangeInputInner<T>({\n valueCountPairs,\n isLoading,\n minValue,\n maxValue,\n onChange,\n showHistogram = true,\n className,\n style,\n config,\n}: RangeInputProps<T>): React.ReactElement {\n const minInputId = useId();\n const maxInputId = useId();\n\n const [localMin, setLocalMin] = useState<string>(\n config.formatValue(minValue),\n );\n const [localMax, setLocalMax] = useState<string>(\n config.formatValue(maxValue),\n );\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const minValueRef = useRef(minValue);\n minValueRef.current = minValue;\n const maxValueRef = useRef(maxValue);\n maxValueRef.current = maxValue;\n\n const debouncedMinChange = useMemo(\n () =>\n debounce((newValue: string) => {\n const parsed = config.parseValue(newValue);\n onChangeRef.current(parsed, maxValueRef.current);\n }, DEBOUNCE_MS),\n [config],\n );\n\n const debouncedMaxChange = useMemo(\n () =>\n debounce((newValue: string) => {\n const parsed = config.parseValue(newValue);\n onChangeRef.current(minValueRef.current, parsed);\n }, DEBOUNCE_MS),\n [config],\n );\n\n useEffect(() => {\n setLocalMin(config.formatValue(minValue));\n debouncedMinChange.cancel();\n }, [minValue, config, debouncedMinChange]);\n\n useEffect(() => {\n setLocalMax(config.formatValue(maxValue));\n debouncedMaxChange.cancel();\n }, [maxValue, config, debouncedMaxChange]);\n\n useEffect(() => {\n return () => {\n debouncedMinChange.cancel();\n debouncedMaxChange.cancel();\n };\n }, [debouncedMinChange, debouncedMaxChange]);\n\n const displayPairs = useStaleData(valueCountPairs, isLoading);\n\n const computedRange = useMemo(() => {\n if (displayPairs.length === 0) return { min: undefined, max: undefined };\n const min = displayPairs.reduce(\n (acc, p) => Math.min(acc, config.toNumber(p.value)),\n Infinity,\n );\n const max = displayPairs.reduce(\n (acc, p) => Math.max(acc, config.toNumber(p.value)),\n -Infinity,\n );\n return {\n min: config.fromNumber(min),\n max: config.fromNumber(max),\n };\n }, [displayPairs, config]);\n\n const dataRange = useMemo(() => ({\n dataMin: computedRange.min,\n dataMax: computedRange.max,\n }), [computedRange.min, computedRange.max]);\n\n const buckets = useMemo<Array<HistogramBucket<T>>>(() => {\n if (\n !showHistogram\n || displayPairs.length === 0\n || computedRange.min === undefined\n || computedRange.max === undefined\n ) {\n return [];\n }\n\n return createHistogramBuckets(\n displayPairs,\n { min: computedRange.min, max: computedRange.max },\n config.toNumber,\n config.fromNumber,\n );\n }, [showHistogram, displayPairs, computedRange, config]);\n\n const maxBucketCount = useMemo(() => getMaxBucketCount(buckets), [buckets]);\n\n const handleMinChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setLocalMin(newValue);\n debouncedMinChange(newValue);\n },\n [debouncedMinChange],\n );\n\n const handleMaxChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setLocalMax(newValue);\n debouncedMaxChange(newValue);\n },\n [debouncedMaxChange],\n );\n\n return (\n <div\n className={classnames(styles.rangeInput, className)}\n style={style}\n data-loading={isLoading}\n >\n {showHistogram && (\n <div\n className={styles.histogramContainer}\n data-empty={buckets.length === 0}\n >\n {buckets.map((bucket, index) => {\n const height = (bucket.count / maxBucketCount) * 100;\n const isInRange = (minValue === undefined\n || config.toNumber(bucket.max) >= config.toNumber(minValue))\n && (maxValue === undefined\n || config.toNumber(bucket.min) <= config.toNumber(maxValue));\n\n return (\n <div\n key={index}\n className={styles.histogramBar}\n data-in-range={isInRange}\n style={{ height: `${Math.max(height, 2)}%` }}\n title={config.formatTooltip(\n bucket.min,\n bucket.max,\n bucket.count,\n )}\n />\n );\n })}\n </div>\n )}\n\n <div className={styles.rangeInputs}>\n <div className={styles.inputWrapper}>\n <label htmlFor={minInputId} className={styles.inputLabel}>\n {config.minLabel}\n </label>\n <Input\n id={minInputId}\n type={config.inputType}\n className={styles.input}\n value={localMin}\n onChange={handleMinChange}\n placeholder={dataRange.dataMin !== undefined\n && config.formatPlaceholder\n ? config.formatPlaceholder(dataRange.dataMin)\n : undefined}\n {...config.inputProps}\n />\n </div>\n\n <span className={styles.separator} aria-hidden=\"true\">\n –\n </span>\n\n <div className={styles.inputWrapper}>\n <label htmlFor={maxInputId} className={styles.inputLabel}>\n {config.maxLabel}\n </label>\n <Input\n id={maxInputId}\n type={config.inputType}\n className={styles.input}\n value={localMax}\n onChange={handleMaxChange}\n placeholder={dataRange.dataMax !== undefined\n && config.formatPlaceholder\n ? config.formatPlaceholder(dataRange.dataMax)\n : undefined}\n {...config.inputProps}\n />\n </div>\n </div>\n </div>\n );\n}\n\nexport const RangeInput = memo(RangeInputInner) as typeof RangeInputInner;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"RangeInput.js","names":["Input","classnames","debounce","React","memo","useCallback","useEffect","useId","useMemo","useRef","useState","createHistogramBuckets","getMaxBucketCount","styles","useStableData","DEBOUNCE_MS","RangeInputInner","valueCountPairs","isLoading","minValue","maxValue","onChange","showHistogram","className","style","config","minInputId","maxInputId","localMin","setLocalMin","formatValue","localMax","setLocalMax","onChangeRef","current","minValueRef","maxValueRef","debouncedMinChange","newValue","parsed","parseValue","debouncedMaxChange","cancel","displayPairs","computedRange","length","min","undefined","max","reduce","acc","p","Math","toNumber","value","Infinity","fromNumber","dataRange","dataMin","dataMax","buckets","maxBucketCount","handleMinChange","e","target","handleMaxChange","createElement","rangeInput","histogramContainer","map","bucket","index","height","count","isInRange","key","histogramBar","title","formatTooltip","rangeInputs","inputWrapper","htmlFor","inputLabel","minLabel","_extends","id","type","inputType","input","placeholder","formatPlaceholder","inputProps","separator","maxLabel","RangeInput"],"sources":["RangeInput.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 { Input } from \"@base-ui/react/input\";\nimport classnames from \"classnames\";\nimport { debounce } from \"lodash-es\";\nimport React, {\n memo,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n createHistogramBuckets,\n getMaxBucketCount,\n type HistogramBucket,\n} from \"./createHistogramBuckets.js\";\nimport styles from \"./RangeInput.module.css\";\nimport { useStableData } from \"./useStableData.js\";\n\nconst DEBOUNCE_MS = 300;\n\nexport interface RangeInputConfig<T> {\n inputType: \"number\" | \"date\";\n formatValue: (value: T | undefined) => string;\n parseValue: (value: string) => T | undefined;\n toNumber: (value: T) => number;\n fromNumber: (value: number) => T;\n minLabel: string;\n maxLabel: string;\n formatTooltip: (min: T, max: T, count: number) => string;\n formatPlaceholder?: (value: T) => string;\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n}\n\nexport interface RangeInputProps<T> {\n valueCountPairs: Array<{ value: T; count: number }>;\n isLoading: boolean;\n minValue: T | undefined;\n maxValue: T | undefined;\n onChange: (min: T | undefined, max: T | undefined) => void;\n showHistogram?: boolean;\n className?: string;\n style?: React.CSSProperties;\n config: RangeInputConfig<T>;\n}\n\nfunction RangeInputInner<T>({\n valueCountPairs,\n isLoading,\n minValue,\n maxValue,\n onChange,\n showHistogram = true,\n className,\n style,\n config,\n}: RangeInputProps<T>): React.ReactElement {\n const minInputId = useId();\n const maxInputId = useId();\n\n const [localMin, setLocalMin] = useState<string>(\n config.formatValue(minValue),\n );\n const [localMax, setLocalMax] = useState<string>(\n config.formatValue(maxValue),\n );\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const minValueRef = useRef(minValue);\n minValueRef.current = minValue;\n const maxValueRef = useRef(maxValue);\n maxValueRef.current = maxValue;\n\n const debouncedMinChange = useMemo(\n () =>\n debounce((newValue: string) => {\n const parsed = config.parseValue(newValue);\n onChangeRef.current(parsed, maxValueRef.current);\n }, DEBOUNCE_MS),\n [config],\n );\n\n const debouncedMaxChange = useMemo(\n () =>\n debounce((newValue: string) => {\n const parsed = config.parseValue(newValue);\n onChangeRef.current(minValueRef.current, parsed);\n }, DEBOUNCE_MS),\n [config],\n );\n\n useEffect(() => {\n setLocalMin(config.formatValue(minValue));\n debouncedMinChange.cancel();\n }, [minValue, config, debouncedMinChange]);\n\n useEffect(() => {\n setLocalMax(config.formatValue(maxValue));\n debouncedMaxChange.cancel();\n }, [maxValue, config, debouncedMaxChange]);\n\n useEffect(() => {\n return () => {\n debouncedMinChange.cancel();\n debouncedMaxChange.cancel();\n };\n }, [debouncedMinChange, debouncedMaxChange]);\n\n const displayPairs = useStableData(valueCountPairs, isLoading);\n\n const computedRange = useMemo(() => {\n if (displayPairs.length === 0) return { min: undefined, max: undefined };\n const min = displayPairs.reduce(\n (acc, p) => Math.min(acc, config.toNumber(p.value)),\n Infinity,\n );\n const max = displayPairs.reduce(\n (acc, p) => Math.max(acc, config.toNumber(p.value)),\n -Infinity,\n );\n return {\n min: config.fromNumber(min),\n max: config.fromNumber(max),\n };\n }, [displayPairs, config]);\n\n const dataRange = useMemo(() => ({\n dataMin: computedRange.min,\n dataMax: computedRange.max,\n }), [computedRange.min, computedRange.max]);\n\n const buckets = useMemo<Array<HistogramBucket<T>>>(() => {\n if (\n !showHistogram\n || displayPairs.length === 0\n || computedRange.min === undefined\n || computedRange.max === undefined\n ) {\n return [];\n }\n\n return createHistogramBuckets(\n displayPairs,\n { min: computedRange.min, max: computedRange.max },\n config.toNumber,\n config.fromNumber,\n );\n }, [showHistogram, displayPairs, computedRange, config]);\n\n const maxBucketCount = useMemo(() => getMaxBucketCount(buckets), [buckets]);\n\n const handleMinChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setLocalMin(newValue);\n debouncedMinChange(newValue);\n },\n [debouncedMinChange],\n );\n\n const handleMaxChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setLocalMax(newValue);\n debouncedMaxChange(newValue);\n },\n [debouncedMaxChange],\n );\n\n return (\n <div\n className={classnames(styles.rangeInput, className)}\n style={style}\n data-loading={isLoading}\n >\n {showHistogram && (\n <div\n className={styles.histogramContainer}\n data-empty={buckets.length === 0}\n >\n {buckets.map((bucket, index) => {\n const height = (bucket.count / maxBucketCount) * 100;\n const isInRange = (minValue === undefined\n || config.toNumber(bucket.max) >= config.toNumber(minValue))\n && (maxValue === undefined\n || config.toNumber(bucket.min) <= config.toNumber(maxValue));\n\n return (\n <div\n key={index}\n className={styles.histogramBar}\n data-in-range={isInRange}\n style={{ height: `${Math.max(height, 2)}%` }}\n title={config.formatTooltip(\n bucket.min,\n bucket.max,\n bucket.count,\n )}\n />\n );\n })}\n </div>\n )}\n\n <div className={styles.rangeInputs}>\n <div className={styles.inputWrapper}>\n <label htmlFor={minInputId} className={styles.inputLabel}>\n {config.minLabel}\n </label>\n <Input\n id={minInputId}\n type={config.inputType}\n className={styles.input}\n value={localMin}\n onChange={handleMinChange}\n placeholder={dataRange.dataMin !== undefined\n && config.formatPlaceholder\n ? config.formatPlaceholder(dataRange.dataMin)\n : undefined}\n {...config.inputProps}\n />\n </div>\n\n <span className={styles.separator} aria-hidden=\"true\">\n –\n </span>\n\n <div className={styles.inputWrapper}>\n <label htmlFor={maxInputId} className={styles.inputLabel}>\n {config.maxLabel}\n </label>\n <Input\n id={maxInputId}\n type={config.inputType}\n className={styles.input}\n value={localMax}\n onChange={handleMaxChange}\n placeholder={dataRange.dataMax !== undefined\n && config.formatPlaceholder\n ? config.formatPlaceholder(dataRange.dataMax)\n : undefined}\n {...config.inputProps}\n />\n </div>\n </div>\n </div>\n );\n}\n\nexport const RangeInput = memo(RangeInputInner) as typeof RangeInputInner;\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,KAAK,QAAQ,sBAAsB;AAC5C,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,QAAQ,QAAQ,WAAW;AACpC,OAAOC,KAAK,IACVC,IAAI,EACJC,WAAW,EACXC,SAAS,EACTC,KAAK,EACLC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SACEC,sBAAsB,EACtBC,iBAAiB,QAEZ,6BAA6B;AACpC,OAAOC,MAAM,MAAM,yBAAyB;AAC5C,SAASC,aAAa,QAAQ,oBAAoB;AAElD,MAAMC,WAAW,GAAG,GAAG;AA2BvB,SAASC,eAAeA,CAAI;EAC1BC,eAAe;EACfC,SAAS;EACTC,QAAQ;EACRC,QAAQ;EACRC,QAAQ;EACRC,aAAa,GAAG,IAAI;EACpBC,SAAS;EACTC,KAAK;EACLC;AACkB,CAAC,EAAsB;EACzC,MAAMC,UAAU,GAAGnB,KAAK,CAAC,CAAC;EAC1B,MAAMoB,UAAU,GAAGpB,KAAK,CAAC,CAAC;EAE1B,MAAM,CAACqB,QAAQ,EAAEC,WAAW,CAAC,GAAGnB,QAAQ,CACtCe,MAAM,CAACK,WAAW,CAACX,QAAQ,CAC7B,CAAC;EACD,MAAM,CAACY,QAAQ,EAAEC,WAAW,CAAC,GAAGtB,QAAQ,CACtCe,MAAM,CAACK,WAAW,CAACV,QAAQ,CAC7B,CAAC;EACD,MAAMa,WAAW,GAAGxB,MAAM,CAACY,QAAQ,CAAC;EACpCY,WAAW,CAACC,OAAO,GAAGb,QAAQ;EAC9B,MAAMc,WAAW,GAAG1B,MAAM,CAACU,QAAQ,CAAC;EACpCgB,WAAW,CAACD,OAAO,GAAGf,QAAQ;EAC9B,MAAMiB,WAAW,GAAG3B,MAAM,CAACW,QAAQ,CAAC;EACpCgB,WAAW,CAACF,OAAO,GAAGd,QAAQ;EAE9B,MAAMiB,kBAAkB,GAAG7B,OAAO,CAChC,MACEN,QAAQ,CAAEoC,QAAgB,IAAK;IAC7B,MAAMC,MAAM,GAAGd,MAAM,CAACe,UAAU,CAACF,QAAQ,CAAC;IAC1CL,WAAW,CAACC,OAAO,CAACK,MAAM,EAAEH,WAAW,CAACF,OAAO,CAAC;EAClD,CAAC,EAAEnB,WAAW,CAAC,EACjB,CAACU,MAAM,CACT,CAAC;EAED,MAAMgB,kBAAkB,GAAGjC,OAAO,CAChC,MACEN,QAAQ,CAAEoC,QAAgB,IAAK;IAC7B,MAAMC,MAAM,GAAGd,MAAM,CAACe,UAAU,CAACF,QAAQ,CAAC;IAC1CL,WAAW,CAACC,OAAO,CAACC,WAAW,CAACD,OAAO,EAAEK,MAAM,CAAC;EAClD,CAAC,EAAExB,WAAW,CAAC,EACjB,CAACU,MAAM,CACT,CAAC;EAEDnB,SAAS,CAAC,MAAM;IACduB,WAAW,CAACJ,MAAM,CAACK,WAAW,CAACX,QAAQ,CAAC,CAAC;IACzCkB,kBAAkB,CAACK,MAAM,CAAC,CAAC;EAC7B,CAAC,EAAE,CAACvB,QAAQ,EAAEM,MAAM,EAAEY,kBAAkB,CAAC,CAAC;EAE1C/B,SAAS,CAAC,MAAM;IACd0B,WAAW,CAACP,MAAM,CAACK,WAAW,CAACV,QAAQ,CAAC,CAAC;IACzCqB,kBAAkB,CAACC,MAAM,CAAC,CAAC;EAC7B,CAAC,EAAE,CAACtB,QAAQ,EAAEK,MAAM,EAAEgB,kBAAkB,CAAC,CAAC;EAE1CnC,SAAS,CAAC,MAAM;IACd,OAAO,MAAM;MACX+B,kBAAkB,CAACK,MAAM,CAAC,CAAC;MAC3BD,kBAAkB,CAACC,MAAM,CAAC,CAAC;IAC7B,CAAC;EACH,CAAC,EAAE,CAACL,kBAAkB,EAAEI,kBAAkB,CAAC,CAAC;EAE5C,MAAME,YAAY,GAAG7B,aAAa,CAACG,eAAe,EAAEC,SAAS,CAAC;EAE9D,MAAM0B,aAAa,GAAGpC,OAAO,CAAC,MAAM;IAClC,IAAImC,YAAY,CAACE,MAAM,KAAK,CAAC,EAAE,OAAO;MAAEC,GAAG,EAAEC,SAAS;MAAEC,GAAG,EAAED;IAAU,CAAC;IACxE,MAAMD,GAAG,GAAGH,YAAY,CAACM,MAAM,CAC7B,CAACC,GAAG,EAAEC,CAAC,KAAKC,IAAI,CAACN,GAAG,CAACI,GAAG,EAAEzB,MAAM,CAAC4B,QAAQ,CAACF,CAAC,CAACG,KAAK,CAAC,CAAC,EACnDC,QACF,CAAC;IACD,MAAMP,GAAG,GAAGL,YAAY,CAACM,MAAM,CAC7B,CAACC,GAAG,EAAEC,CAAC,KAAKC,IAAI,CAACJ,GAAG,CAACE,GAAG,EAAEzB,MAAM,CAAC4B,QAAQ,CAACF,CAAC,CAACG,KAAK,CAAC,CAAC,EACnD,CAACC,QACH,CAAC;IACD,OAAO;MACLT,GAAG,EAAErB,MAAM,CAAC+B,UAAU,CAACV,GAAG,CAAC;MAC3BE,GAAG,EAAEvB,MAAM,CAAC+B,UAAU,CAACR,GAAG;IAC5B,CAAC;EACH,CAAC,EAAE,CAACL,YAAY,EAAElB,MAAM,CAAC,CAAC;EAE1B,MAAMgC,SAAS,GAAGjD,OAAO,CAAC,OAAO;IAC/BkD,OAAO,EAAEd,aAAa,CAACE,GAAG;IAC1Ba,OAAO,EAAEf,aAAa,CAACI;EACzB,CAAC,CAAC,EAAE,CAACJ,aAAa,CAACE,GAAG,EAAEF,aAAa,CAACI,GAAG,CAAC,CAAC;EAE3C,MAAMY,OAAO,GAAGpD,OAAO,CAA4B,MAAM;IACvD,IACE,CAACc,aAAa,IACXqB,YAAY,CAACE,MAAM,KAAK,CAAC,IACzBD,aAAa,CAACE,GAAG,KAAKC,SAAS,IAC/BH,aAAa,CAACI,GAAG,KAAKD,SAAS,EAClC;MACA,OAAO,EAAE;IACX;IAEA,OAAOpC,sBAAsB,CAC3BgC,YAAY,EACZ;MAAEG,GAAG,EAAEF,aAAa,CAACE,GAAG;MAAEE,GAAG,EAAEJ,aAAa,CAACI;IAAI,CAAC,EAClDvB,MAAM,CAAC4B,QAAQ,EACf5B,MAAM,CAAC+B,UACT,CAAC;EACH,CAAC,EAAE,CAAClC,aAAa,EAAEqB,YAAY,EAAEC,aAAa,EAAEnB,MAAM,CAAC,CAAC;EAExD,MAAMoC,cAAc,GAAGrD,OAAO,CAAC,MAAMI,iBAAiB,CAACgD,OAAO,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAE3E,MAAME,eAAe,GAAGzD,WAAW,CAChC0D,CAAsC,IAAK;IAC1C,MAAMzB,QAAQ,GAAGyB,CAAC,CAACC,MAAM,CAACV,KAAK;IAC/BzB,WAAW,CAACS,QAAQ,CAAC;IACrBD,kBAAkB,CAACC,QAAQ,CAAC;EAC9B,CAAC,EACD,CAACD,kBAAkB,CACrB,CAAC;EAED,MAAM4B,eAAe,GAAG5D,WAAW,CAChC0D,CAAsC,IAAK;IAC1C,MAAMzB,QAAQ,GAAGyB,CAAC,CAACC,MAAM,CAACV,KAAK;IAC/BtB,WAAW,CAACM,QAAQ,CAAC;IACrBG,kBAAkB,CAACH,QAAQ,CAAC;EAC9B,CAAC,EACD,CAACG,kBAAkB,CACrB,CAAC;EAED,oBACEtC,KAAA,CAAA+D,aAAA;IACE3C,SAAS,EAAEtB,UAAU,CAACY,MAAM,CAACsD,UAAU,EAAE5C,SAAS,CAAE;IACpDC,KAAK,EAAEA,KAAM;IACb,gBAAcN;EAAU,GAEvBI,aAAa,iBACZnB,KAAA,CAAA+D,aAAA;IACE3C,SAAS,EAAEV,MAAM,CAACuD,kBAAmB;IACrC,cAAYR,OAAO,CAACf,MAAM,KAAK;EAAE,GAEhCe,OAAO,CAACS,GAAG,CAAC,CAACC,MAAM,EAAEC,KAAK,KAAK;IAC9B,MAAMC,MAAM,GAAIF,MAAM,CAACG,KAAK,GAAGZ,cAAc,GAAI,GAAG;IACpD,MAAMa,SAAS,GAAG,CAACvD,QAAQ,KAAK4B,SAAS,IACpCtB,MAAM,CAAC4B,QAAQ,CAACiB,MAAM,CAACtB,GAAG,CAAC,IAAIvB,MAAM,CAAC4B,QAAQ,CAAClC,QAAQ,CAAC,MACvDC,QAAQ,KAAK2B,SAAS,IACrBtB,MAAM,CAAC4B,QAAQ,CAACiB,MAAM,CAACxB,GAAG,CAAC,IAAIrB,MAAM,CAAC4B,QAAQ,CAACjC,QAAQ,CAAC,CAAC;IAEhE,oBACEjB,KAAA,CAAA+D,aAAA;MACES,GAAG,EAAEJ,KAAM;MACXhD,SAAS,EAAEV,MAAM,CAAC+D,YAAa;MAC/B,iBAAeF,SAAU;MACzBlD,KAAK,EAAE;QAAEgD,MAAM,EAAE,GAAGpB,IAAI,CAACJ,GAAG,CAACwB,MAAM,EAAE,CAAC,CAAC;MAAI,CAAE;MAC7CK,KAAK,EAAEpD,MAAM,CAACqD,aAAa,CACzBR,MAAM,CAACxB,GAAG,EACVwB,MAAM,CAACtB,GAAG,EACVsB,MAAM,CAACG,KACT;IAAE,CACH,CAAC;EAEN,CAAC,CACE,CACN,eAEDtE,KAAA,CAAA+D,aAAA;IAAK3C,SAAS,EAAEV,MAAM,CAACkE;EAAY,gBACjC5E,KAAA,CAAA+D,aAAA;IAAK3C,SAAS,EAAEV,MAAM,CAACmE;EAAa,gBAClC7E,KAAA,CAAA+D,aAAA;IAAOe,OAAO,EAAEvD,UAAW;IAACH,SAAS,EAAEV,MAAM,CAACqE;EAAW,GACtDzD,MAAM,CAAC0D,QACH,CAAC,eACRhF,KAAA,CAAA+D,aAAA,CAAClE,KAAK,EAAAoF,QAAA;IACJC,EAAE,EAAE3D,UAAW;IACf4D,IAAI,EAAE7D,MAAM,CAAC8D,SAAU;IACvBhE,SAAS,EAAEV,MAAM,CAAC2E,KAAM;IACxBlC,KAAK,EAAE1B,QAAS;IAChBP,QAAQ,EAAEyC,eAAgB;IAC1B2B,WAAW,EAAEhC,SAAS,CAACC,OAAO,KAAKX,SAAS,IACrCtB,MAAM,CAACiE,iBAAiB,GAC3BjE,MAAM,CAACiE,iBAAiB,CAACjC,SAAS,CAACC,OAAO,CAAC,GAC3CX;EAAU,GACVtB,MAAM,CAACkE,UAAU,CACtB,CACE,CAAC,eAENxF,KAAA,CAAA+D,aAAA;IAAM3C,SAAS,EAAEV,MAAM,CAAC+E,SAAU;IAAC,eAAY;EAAM,GAAC,QAEhD,CAAC,eAEPzF,KAAA,CAAA+D,aAAA;IAAK3C,SAAS,EAAEV,MAAM,CAACmE;EAAa,gBAClC7E,KAAA,CAAA+D,aAAA;IAAOe,OAAO,EAAEtD,UAAW;IAACJ,SAAS,EAAEV,MAAM,CAACqE;EAAW,GACtDzD,MAAM,CAACoE,QACH,CAAC,eACR1F,KAAA,CAAA+D,aAAA,CAAClE,KAAK,EAAAoF,QAAA;IACJC,EAAE,EAAE1D,UAAW;IACf2D,IAAI,EAAE7D,MAAM,CAAC8D,SAAU;IACvBhE,SAAS,EAAEV,MAAM,CAAC2E,KAAM;IACxBlC,KAAK,EAAEvB,QAAS;IAChBV,QAAQ,EAAE4C,eAAgB;IAC1BwB,WAAW,EAAEhC,SAAS,CAACE,OAAO,KAAKZ,SAAS,IACrCtB,MAAM,CAACiE,iBAAiB,GAC3BjE,MAAM,CAACiE,iBAAiB,CAACjC,SAAS,CAACE,OAAO,CAAC,GAC3CZ;EAAU,GACVtB,MAAM,CAACkE,UAAU,CACtB,CACE,CACF,CACF,CAAC;AAEV;AAEA,OAAO,MAAMG,UAAU,gBAAG1F,IAAI,CAACY,eAAe,CAA2B","ignoreList":[]}
@@ -80,9 +80,7 @@ function SingleSelectInputInner({
80
80
  className: styles.clearButton,
81
81
  onClick: handleClear,
82
82
  "aria-label": "Clear selection"
83
- }, /*#__PURE__*/React.createElement(Cross, {
84
- color: "currentColor"
85
- }))));
83
+ }, /*#__PURE__*/React.createElement(Cross, null))));
86
84
  }
87
85
  export const SingleSelectInput = /*#__PURE__*/memo(SingleSelectInputInner);
88
86
  //# sourceMappingURL=SingleSelectInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SingleSelectInput.js","names":["Button","Cross","classnames","React","memo","useCallback","useMemo","Select","sharedStyles","styles","SingleSelectInputInner","values","isLoading","error","selectedValue","onChange","className","style","placeholder","showClearButton","showCounts","ariaLabel","handleValueChange","value","undefined","handleClear","items","result","count","toLocaleString","createElement","singleSelect","loadingMessage","errorMessage","message","length","emptyMessage","selectContainer","Root","onValueChange","Trigger","Portal","Positioner","Popup","map","Item","key","type","clearButton","onClick","color","SingleSelectInput"],"sources":["SingleSelectInput.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 { Cross } from \"@blueprintjs/icons\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport { Select } from \"../../../base-components/select/Select.js\";\nimport type { PropertyAggregationValue } from \"../../types/AggregationTypes.js\";\nimport sharedStyles from \"./shared.module.css\";\nimport styles from \"./SingleSelectInput.module.css\";\n\ninterface SingleSelectInputProps {\n values: PropertyAggregationValue[];\n isLoading: boolean;\n error: Error | null;\n selectedValue: string | undefined;\n onChange: (value: string | undefined) => void;\n className?: string;\n style?: React.CSSProperties;\n placeholder?: string;\n showClearButton?: boolean;\n showCounts?: boolean;\n ariaLabel?: string;\n}\n\nfunction SingleSelectInputInner({\n values,\n isLoading,\n error,\n selectedValue,\n onChange,\n className,\n style,\n placeholder = \"Select a value...\",\n showClearButton = true,\n showCounts = false,\n ariaLabel = \"Select value\",\n}: SingleSelectInputProps): React.ReactElement {\n const handleValueChange = useCallback(\n (value: string | null) => {\n onChange(value ?? undefined);\n },\n [onChange],\n );\n\n const handleClear = useCallback(() => {\n onChange(undefined);\n }, [onChange]);\n\n const items = useMemo(() => {\n const result: Record<string, string> = {};\n for (const { value, count } of values) {\n result[value] = showCounts\n ? `${value} (${count.toLocaleString()})`\n : value;\n }\n return result;\n }, [values, showCounts]);\n\n return (\n <div\n className={classnames(styles.singleSelect, className)}\n style={style}\n data-loading={isLoading}\n >\n {isLoading && (\n <div className={sharedStyles.loadingMessage}>\n Loading options...\n </div>\n )}\n\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading options: {error.message}\n </div>\n )}\n\n {!isLoading && !error && values.length === 0 && (\n <div className={sharedStyles.emptyMessage}>\n No options available\n </div>\n )}\n\n {(values.length > 0 || isLoading) && (\n <div className={styles.selectContainer}>\n <Select.Root<string>\n value={selectedValue ?? null}\n onValueChange={handleValueChange}\n items={items}\n >\n <Select.Trigger\n placeholder={placeholder}\n aria-label={ariaLabel}\n />\n <Select.Portal>\n <Select.Positioner>\n <Select.Popup>\n {values.map(({ value, count }) => (\n <Select.Item key={value} value={value}>\n {showCounts\n ? `${value} (${count.toLocaleString()})`\n : value}\n </Select.Item>\n ))}\n </Select.Popup>\n </Select.Positioner>\n </Select.Portal>\n </Select.Root>\n {showClearButton && selectedValue !== undefined && (\n <Button\n type=\"button\"\n className={styles.clearButton}\n onClick={handleClear}\n aria-label=\"Clear selection\"\n >\n <Cross color=\"currentColor\" />\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport const SingleSelectInput = memo(\n SingleSelectInputInner,\n) as typeof SingleSelectInputInner;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SingleSelectInput.js","names":["Button","Cross","classnames","React","memo","useCallback","useMemo","Select","sharedStyles","styles","SingleSelectInputInner","values","isLoading","error","selectedValue","onChange","className","style","placeholder","showClearButton","showCounts","ariaLabel","handleValueChange","value","undefined","handleClear","items","result","count","toLocaleString","createElement","singleSelect","loadingMessage","errorMessage","message","length","emptyMessage","selectContainer","Root","onValueChange","Trigger","Portal","Positioner","Popup","map","Item","key","type","clearButton","onClick","SingleSelectInput"],"sources":["SingleSelectInput.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 { Cross } from \"@blueprintjs/icons\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport { Select } from \"../../../base-components/select/Select.js\";\nimport type { PropertyAggregationValue } from \"../../types/AggregationTypes.js\";\nimport sharedStyles from \"./shared.module.css\";\nimport styles from \"./SingleSelectInput.module.css\";\n\ninterface SingleSelectInputProps {\n values: PropertyAggregationValue[];\n isLoading: boolean;\n error: Error | null;\n selectedValue: string | undefined;\n onChange: (value: string | undefined) => void;\n className?: string;\n style?: React.CSSProperties;\n placeholder?: string;\n showClearButton?: boolean;\n showCounts?: boolean;\n ariaLabel?: string;\n}\n\nfunction SingleSelectInputInner({\n values,\n isLoading,\n error,\n selectedValue,\n onChange,\n className,\n style,\n placeholder = \"Select a value...\",\n showClearButton = true,\n showCounts = false,\n ariaLabel = \"Select value\",\n}: SingleSelectInputProps): React.ReactElement {\n const handleValueChange = useCallback(\n (value: string | null) => {\n onChange(value ?? undefined);\n },\n [onChange],\n );\n\n const handleClear = useCallback(() => {\n onChange(undefined);\n }, [onChange]);\n\n const items = useMemo(() => {\n const result: Record<string, string> = {};\n for (const { value, count } of values) {\n result[value] = showCounts\n ? `${value} (${count.toLocaleString()})`\n : value;\n }\n return result;\n }, [values, showCounts]);\n\n return (\n <div\n className={classnames(styles.singleSelect, className)}\n style={style}\n data-loading={isLoading}\n >\n {isLoading && (\n <div className={sharedStyles.loadingMessage}>\n Loading options...\n </div>\n )}\n\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading options: {error.message}\n </div>\n )}\n\n {!isLoading && !error && values.length === 0 && (\n <div className={sharedStyles.emptyMessage}>\n No options available\n </div>\n )}\n\n {(values.length > 0 || isLoading) && (\n <div className={styles.selectContainer}>\n <Select.Root<string>\n value={selectedValue ?? null}\n onValueChange={handleValueChange}\n items={items}\n >\n <Select.Trigger\n placeholder={placeholder}\n aria-label={ariaLabel}\n />\n <Select.Portal>\n <Select.Positioner>\n <Select.Popup>\n {values.map(({ value, count }) => (\n <Select.Item key={value} value={value}>\n {showCounts\n ? `${value} (${count.toLocaleString()})`\n : value}\n </Select.Item>\n ))}\n </Select.Popup>\n </Select.Positioner>\n </Select.Portal>\n </Select.Root>\n {showClearButton && selectedValue !== undefined && (\n <Button\n type=\"button\"\n className={styles.clearButton}\n onClick={handleClear}\n aria-label=\"Clear selection\"\n >\n <Cross />\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport const SingleSelectInput = memo(\n SingleSelectInputInner,\n) as typeof SingleSelectInputInner;\n"],"mappings":"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","ignoreList":[]}
@@ -16,14 +16,14 @@
16
16
 
17
17
  import { useRef } from "react";
18
18
 
19
- // TODO: revisit whether this hook is necessary. It may be possible to handle
20
- // loading states inline (render data if present, show skeleton if loading)
21
- // instead of preserving stale data in a ref.
22
- export function useStaleData(data, isLoading) {
19
+ // Preserves the last non-loading data value so filter inputs don't flash
20
+ // blank during revalidation. @osdk/react hooks don't provide stale-while-
21
+ // revalidate behavior natively, so this bridges the gap at the UI layer.
22
+ export function useStableData(data, isLoading) {
23
23
  const ref = useRef(data);
24
24
  if (!isLoading) {
25
25
  ref.current = data;
26
26
  }
27
27
  return ref.current;
28
28
  }
29
- //# sourceMappingURL=useStaleData.js.map
29
+ //# sourceMappingURL=useStableData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStableData.js","names":["useRef","useStableData","data","isLoading","ref","current"],"sources":["useStableData.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 { useRef } from \"react\";\n\n// Preserves the last non-loading data value so filter inputs don't flash\n// blank during revalidation. @osdk/react hooks don't provide stale-while-\n// revalidate behavior natively, so this bridges the gap at the UI layer.\nexport function useStableData<T>(data: T, isLoading: boolean): T {\n const ref = useRef(data);\n if (!isLoading) {\n ref.current = data;\n }\n return ref.current;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,OAAO;;AAE9B;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAAIC,IAAO,EAAEC,SAAkB,EAAK;EAC/D,MAAMC,GAAG,GAAGJ,MAAM,CAACE,IAAI,CAAC;EACxB,IAAI,CAACC,SAAS,EAAE;IACdC,GAAG,CAACC,OAAO,GAAGH,IAAI;EACpB;EACA,OAAOE,GAAG,CAACC,OAAO;AACpB","ignoreList":[]}
@@ -16,7 +16,7 @@
16
16
 
17
17
  import { useOsdkAggregation } from "@osdk/react/experimental";
18
18
  import { useMemo } from "react";
19
- export function usePropertyAggregation(objectType, propertyKey, options) {
19
+ export function usePropertyAggregation(objectType, propertyKey, objectSet, options) {
20
20
  // AggregateOpts requires specific property keys from Q, but we're dynamically
21
21
  // using propertyKey. The cast is unavoidable for this dynamic filter pattern.
22
22
  const aggregateOptions = useMemo(() => ({
@@ -37,7 +37,8 @@ export function usePropertyAggregation(objectType, propertyKey, options) {
37
37
  error
38
38
  } = useOsdkAggregation(objectType, {
39
39
  aggregate: aggregateOptions,
40
- where: options?.where
40
+ where: options?.where,
41
+ objectSet
41
42
  });
42
43
  const result = useMemo(() => {
43
44
  if (!countData) {
@@ -1 +1 @@
1
- {"version":3,"file":"usePropertyAggregation.js","names":["useOsdkAggregation","useMemo","usePropertyAggregation","objectType","propertyKey","options","aggregateOptions","$select","$count","$groupBy","$exact","$includeNullValue","data","countData","isLoading","error","aggregate","where","result","maxCount","values","item","rawValue","$group","count","push","value","isNull","String","Math","max","sort","a","b","limit","length","slice"],"sources":["usePropertyAggregation.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 AggregateOpts,\n ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport { useOsdkAggregation } from \"@osdk/react/experimental\";\nimport { useMemo } from \"react\";\nimport type { AggregationGroupResult } from \"../utils/aggregationHelpers.js\";\n\nexport type { PropertyAggregationValue } from \"../types/AggregationTypes.js\";\n\nimport type { PropertyAggregationValue } from \"../types/AggregationTypes.js\";\n\nexport interface UsePropertyAggregationResult {\n data: PropertyAggregationValue[];\n maxCount: number;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport interface UsePropertyAggregationOptions<\n Q extends ObjectTypeDefinition = ObjectTypeDefinition,\n> {\n limit?: number;\n where?: WhereClause<Q>;\n}\n\nexport function usePropertyAggregation<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n>(\n objectType: Q,\n propertyKey: K,\n options?: UsePropertyAggregationOptions<Q>,\n): UsePropertyAggregationResult {\n // AggregateOpts requires specific property keys from Q, but we're dynamically\n // using propertyKey. The cast is unavoidable for this dynamic filter pattern.\n const aggregateOptions = useMemo(\n () =>\n ({\n $select: { $count: \"unordered\" as const },\n $groupBy: {\n [propertyKey as string]: {\n $exact: { $includeNullValue: true },\n },\n },\n }) as AggregateOpts<Q>,\n [propertyKey],\n );\n\n const { data: countData, isLoading, error } = useOsdkAggregation(objectType, {\n aggregate: aggregateOptions,\n where: options?.where,\n });\n\n const result = useMemo(\n (): { data: PropertyAggregationValue[]; maxCount: number } => {\n if (!countData) {\n return { data: [], maxCount: 0 };\n }\n\n const values: PropertyAggregationValue[] = [];\n let maxCount = 0;\n\n // The aggregation result type varies by query structure. Since we're building\n // the query dynamically based on propertyKey, we cast to a known shape that\n // matches the $groupBy + $count aggregation pattern.\n const dataArray = countData as AggregationGroupResult;\n\n for (const item of dataArray) {\n const rawValue = item.$group[propertyKey as string];\n const count = item.$count ?? 0;\n\n if (rawValue == null) {\n values.push({ value: \"\", count, isNull: true });\n } else {\n values.push({ value: String(rawValue), count });\n }\n maxCount = Math.max(maxCount, count);\n }\n\n values.sort((a, b) => b.count - a.count);\n\n if (options?.limit && values.length > options.limit) {\n return { data: values.slice(0, options.limit), maxCount };\n }\n\n return { data: values, maxCount };\n },\n [countData, propertyKey, options?.limit],\n );\n\n return {\n data: result.data,\n maxCount: result.maxCount,\n isLoading,\n error: error ?? null,\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA,SAASA,kBAAkB,QAAQ,0BAA0B;AAC7D,SAASC,OAAO,QAAQ,OAAO;AAqB/B,OAAO,SAASC,sBAAsBA,CAIpCC,UAAa,EACbC,WAAc,EACdC,OAA0C,EACZ;EAC9B;EACA;EACA,MAAMC,gBAAgB,GAAGL,OAAO,CAC9B,OACG;IACCM,OAAO,EAAE;MAAEC,MAAM,EAAE;IAAqB,CAAC;IACzCC,QAAQ,EAAE;MACR,CAACL,WAAW,GAAa;QACvBM,MAAM,EAAE;UAAEC,iBAAiB,EAAE;QAAK;MACpC;IACF;EACF,CAAC,CAAqB,EACxB,CAACP,WAAW,CACd,CAAC;EAED,MAAM;IAAEQ,IAAI,EAAEC,SAAS;IAAEC,SAAS;IAAEC;EAAM,CAAC,GAAGf,kBAAkB,CAACG,UAAU,EAAE;IAC3Ea,SAAS,EAAEV,gBAAgB;IAC3BW,KAAK,EAAEZ,OAAO,EAAEY;EAClB,CAAC,CAAC;EAEF,MAAMC,MAAM,GAAGjB,OAAO,CACpB,MAA8D;IAC5D,IAAI,CAACY,SAAS,EAAE;MACd,OAAO;QAAED,IAAI,EAAE,EAAE;QAAEO,QAAQ,EAAE;MAAE,CAAC;IAClC;IAEA,MAAMC,MAAkC,GAAG,EAAE;IAC7C,IAAID,QAAQ,GAAG,CAAC;;IAEhB;IACA;IACA;;IAGA,KAAK,MAAME,IAAI,IAFGR,SAAS,EAEG;MAC5B,MAAMS,QAAQ,GAAGD,IAAI,CAACE,MAAM,CAACnB,WAAW,CAAW;MACnD,MAAMoB,KAAK,GAAGH,IAAI,CAACb,MAAM,IAAI,CAAC;MAE9B,IAAIc,QAAQ,IAAI,IAAI,EAAE;QACpBF,MAAM,CAACK,IAAI,CAAC;UAAEC,KAAK,EAAE,EAAE;UAAEF,KAAK;UAAEG,MAAM,EAAE;QAAK,CAAC,CAAC;MACjD,CAAC,MAAM;QACLP,MAAM,CAACK,IAAI,CAAC;UAAEC,KAAK,EAAEE,MAAM,CAACN,QAAQ,CAAC;UAAEE;QAAM,CAAC,CAAC;MACjD;MACAL,QAAQ,GAAGU,IAAI,CAACC,GAAG,CAACX,QAAQ,EAAEK,KAAK,CAAC;IACtC;IAEAJ,MAAM,CAACW,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACT,KAAK,GAAGQ,CAAC,CAACR,KAAK,CAAC;IAExC,IAAInB,OAAO,EAAE6B,KAAK,IAAId,MAAM,CAACe,MAAM,GAAG9B,OAAO,CAAC6B,KAAK,EAAE;MACnD,OAAO;QAAEtB,IAAI,EAAEQ,MAAM,CAACgB,KAAK,CAAC,CAAC,EAAE/B,OAAO,CAAC6B,KAAK,CAAC;QAAEf;MAAS,CAAC;IAC3D;IAEA,OAAO;MAAEP,IAAI,EAAEQ,MAAM;MAAED;IAAS,CAAC;EACnC,CAAC,EACD,CAACN,SAAS,EAAET,WAAW,EAAEC,OAAO,EAAE6B,KAAK,CACzC,CAAC;EAED,OAAO;IACLtB,IAAI,EAAEM,MAAM,CAACN,IAAI;IACjBO,QAAQ,EAAED,MAAM,CAACC,QAAQ;IACzBL,SAAS;IACTC,KAAK,EAAEA,KAAK,IAAI;EAClB,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"usePropertyAggregation.js","names":["useOsdkAggregation","useMemo","usePropertyAggregation","objectType","propertyKey","objectSet","options","aggregateOptions","$select","$count","$groupBy","$exact","$includeNullValue","data","countData","isLoading","error","aggregate","where","result","maxCount","values","item","rawValue","$group","count","push","value","isNull","String","Math","max","sort","a","b","limit","length","slice"],"sources":["usePropertyAggregation.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 AggregateOpts,\n ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport { useOsdkAggregation } from \"@osdk/react/experimental\";\nimport { useMemo } from \"react\";\nimport type { AggregationGroupResult } from \"../utils/aggregationHelpers.js\";\n\nexport type { PropertyAggregationValue } from \"../types/AggregationTypes.js\";\n\nimport type { PropertyAggregationValue } from \"../types/AggregationTypes.js\";\n\nexport interface UsePropertyAggregationResult {\n data: PropertyAggregationValue[];\n maxCount: number;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport interface UsePropertyAggregationOptions<\n Q extends ObjectTypeDefinition = ObjectTypeDefinition,\n> {\n limit?: number;\n where?: WhereClause<Q>;\n}\n\nexport function usePropertyAggregation<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n>(\n objectType: Q,\n propertyKey: K,\n objectSet: ObjectSet<Q>,\n options?: UsePropertyAggregationOptions<Q>,\n): UsePropertyAggregationResult {\n // AggregateOpts requires specific property keys from Q, but we're dynamically\n // using propertyKey. The cast is unavoidable for this dynamic filter pattern.\n const aggregateOptions = useMemo(\n () =>\n ({\n $select: { $count: \"unordered\" as const },\n $groupBy: {\n [propertyKey as string]: {\n $exact: { $includeNullValue: true },\n },\n },\n }) as AggregateOpts<Q>,\n [propertyKey],\n );\n\n const { data: countData, isLoading, error } = useOsdkAggregation(objectType, {\n aggregate: aggregateOptions,\n where: options?.where,\n objectSet,\n });\n\n const result = useMemo(\n (): { data: PropertyAggregationValue[]; maxCount: number } => {\n if (!countData) {\n return { data: [], maxCount: 0 };\n }\n\n const values: PropertyAggregationValue[] = [];\n let maxCount = 0;\n\n // The aggregation result type varies by query structure. Since we're building\n // the query dynamically based on propertyKey, we cast to a known shape that\n // matches the $groupBy + $count aggregation pattern.\n const dataArray = countData as AggregationGroupResult;\n\n for (const item of dataArray) {\n const rawValue = item.$group[propertyKey as string];\n const count = item.$count ?? 0;\n\n if (rawValue == null) {\n values.push({ value: \"\", count, isNull: true });\n } else {\n values.push({ value: String(rawValue), count });\n }\n maxCount = Math.max(maxCount, count);\n }\n\n values.sort((a, b) => b.count - a.count);\n\n if (options?.limit && values.length > options.limit) {\n return { data: values.slice(0, options.limit), maxCount };\n }\n\n return { data: values, maxCount };\n },\n [countData, propertyKey, options?.limit],\n );\n\n return {\n data: result.data,\n maxCount: result.maxCount,\n isLoading,\n error: error ?? null,\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA,SAASA,kBAAkB,QAAQ,0BAA0B;AAC7D,SAASC,OAAO,QAAQ,OAAO;AAqB/B,OAAO,SAASC,sBAAsBA,CAIpCC,UAAa,EACbC,WAAc,EACdC,SAAuB,EACvBC,OAA0C,EACZ;EAC9B;EACA;EACA,MAAMC,gBAAgB,GAAGN,OAAO,CAC9B,OACG;IACCO,OAAO,EAAE;MAAEC,MAAM,EAAE;IAAqB,CAAC;IACzCC,QAAQ,EAAE;MACR,CAACN,WAAW,GAAa;QACvBO,MAAM,EAAE;UAAEC,iBAAiB,EAAE;QAAK;MACpC;IACF;EACF,CAAC,CAAqB,EACxB,CAACR,WAAW,CACd,CAAC;EAED,MAAM;IAAES,IAAI,EAAEC,SAAS;IAAEC,SAAS;IAAEC;EAAM,CAAC,GAAGhB,kBAAkB,CAACG,UAAU,EAAE;IAC3Ec,SAAS,EAAEV,gBAAgB;IAC3BW,KAAK,EAAEZ,OAAO,EAAEY,KAAK;IACrBb;EACF,CAAC,CAAC;EAEF,MAAMc,MAAM,GAAGlB,OAAO,CACpB,MAA8D;IAC5D,IAAI,CAACa,SAAS,EAAE;MACd,OAAO;QAAED,IAAI,EAAE,EAAE;QAAEO,QAAQ,EAAE;MAAE,CAAC;IAClC;IAEA,MAAMC,MAAkC,GAAG,EAAE;IAC7C,IAAID,QAAQ,GAAG,CAAC;;IAEhB;IACA;IACA;;IAGA,KAAK,MAAME,IAAI,IAFGR,SAAS,EAEG;MAC5B,MAAMS,QAAQ,GAAGD,IAAI,CAACE,MAAM,CAACpB,WAAW,CAAW;MACnD,MAAMqB,KAAK,GAAGH,IAAI,CAACb,MAAM,IAAI,CAAC;MAE9B,IAAIc,QAAQ,IAAI,IAAI,EAAE;QACpBF,MAAM,CAACK,IAAI,CAAC;UAAEC,KAAK,EAAE,EAAE;UAAEF,KAAK;UAAEG,MAAM,EAAE;QAAK,CAAC,CAAC;MACjD,CAAC,MAAM;QACLP,MAAM,CAACK,IAAI,CAAC;UAAEC,KAAK,EAAEE,MAAM,CAACN,QAAQ,CAAC;UAAEE;QAAM,CAAC,CAAC;MACjD;MACAL,QAAQ,GAAGU,IAAI,CAACC,GAAG,CAACX,QAAQ,EAAEK,KAAK,CAAC;IACtC;IAEAJ,MAAM,CAACW,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACT,KAAK,GAAGQ,CAAC,CAACR,KAAK,CAAC;IAExC,IAAInB,OAAO,EAAE6B,KAAK,IAAId,MAAM,CAACe,MAAM,GAAG9B,OAAO,CAAC6B,KAAK,EAAE;MACnD,OAAO;QAAEtB,IAAI,EAAEQ,MAAM,CAACgB,KAAK,CAAC,CAAC,EAAE/B,OAAO,CAAC6B,KAAK,CAAC;QAAEf;MAAS,CAAC;IAC3D;IAEA,OAAO;MAAEP,IAAI,EAAEQ,MAAM;MAAED;IAAS,CAAC;EACnC,CAAC,EACD,CAACN,SAAS,EAAEV,WAAW,EAAEE,OAAO,EAAE6B,KAAK,CACzC,CAAC;EAED,OAAO;IACLtB,IAAI,EAAEM,MAAM,CAACN,IAAI;IACjBO,QAAQ,EAAED,MAAM,CAACC,QAAQ;IACzBL,SAAS;IACTC,KAAK,EAAEA,KAAK,IAAI;EAClB,CAAC;AACH","ignoreList":[]}
@@ -15,16 +15,20 @@
15
15
  */
16
16
 
17
17
  import React, { memo, useCallback, useMemo } from "react";
18
+ import { FilterInputExcludeRow } from "../base/FilterInputExcludeRow.js";
18
19
  import { CheckboxListInput } from "../base/inputs/CheckboxListInput.js";
19
20
  import { usePropertyAggregation } from "../hooks/usePropertyAggregation.js";
20
21
  import { coerceToStringArray } from "../utils/coerceFilterValue.js";
21
22
  function CheckboxListFilterInputInner({
22
23
  objectType,
24
+ objectSet,
23
25
  propertyKey,
24
26
  filterState,
25
27
  onFilterStateChanged,
26
28
  whereClause,
27
- colorMap
29
+ colorMap,
30
+ searchQuery,
31
+ excludeRowOpen
28
32
  }) {
29
33
  const selectedValues = useMemo(() => filterState?.type === "SELECT" ? coerceToStringArray(filterState.selectedValues) : [], [filterState]);
30
34
  const isExcluding = filterState?.isExcluding ?? false;
@@ -42,15 +46,21 @@ function CheckboxListFilterInputInner({
42
46
  data,
43
47
  isLoading,
44
48
  error
45
- } = usePropertyAggregation(objectType, propertyKey, aggregationOptions);
46
- return /*#__PURE__*/React.createElement(CheckboxListInput, {
49
+ } = usePropertyAggregation(objectType, propertyKey, objectSet, aggregationOptions);
50
+ return /*#__PURE__*/React.createElement(FilterInputExcludeRow, {
51
+ excludeRowOpen: excludeRowOpen,
52
+ filterState: filterState,
53
+ onFilterStateChanged: onFilterStateChanged,
54
+ totalValueCount: data.length
55
+ }, /*#__PURE__*/React.createElement(CheckboxListInput, {
47
56
  values: data,
48
57
  isLoading: isLoading,
49
58
  error: error,
50
59
  selectedValues: selectedValues,
51
60
  onChange: handleChange,
52
- colorMap: colorMap
53
- });
61
+ colorMap: colorMap,
62
+ searchQuery: searchQuery
63
+ }));
54
64
  }
55
65
  export const CheckboxListFilterInput = /*#__PURE__*/memo(CheckboxListFilterInputInner);
56
66
  //# sourceMappingURL=CheckboxListFilterInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CheckboxListFilterInput.js","names":["React","memo","useCallback","useMemo","CheckboxListInput","usePropertyAggregation","coerceToStringArray","CheckboxListFilterInputInner","objectType","propertyKey","filterState","onFilterStateChanged","whereClause","colorMap","selectedValues","type","isExcluding","handleChange","newSelectedValues","aggregationOptions","where","data","isLoading","error","createElement","values","onChange","CheckboxListFilterInput"],"sources":["CheckboxListFilterInput.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 ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport { CheckboxListInput } from \"../base/inputs/CheckboxListInput.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { usePropertyAggregation } from \"../hooks/usePropertyAggregation.js\";\nimport { coerceToStringArray } from \"../utils/coerceFilterValue.js\";\n\ninterface CheckboxListFilterInputProps<Q extends ObjectTypeDefinition> {\n objectType: Q;\n propertyKey: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n whereClause: WhereClause<Q>;\n colorMap?: Record<string, string>;\n}\n\nfunction CheckboxListFilterInputInner<Q extends ObjectTypeDefinition>({\n objectType,\n propertyKey,\n filterState,\n onFilterStateChanged,\n whereClause,\n colorMap,\n}: CheckboxListFilterInputProps<Q>): React.ReactElement {\n const selectedValues = useMemo(\n () =>\n filterState?.type === \"SELECT\"\n ? coerceToStringArray(filterState.selectedValues)\n : [],\n [filterState],\n );\n const isExcluding = filterState?.isExcluding ?? false;\n\n const handleChange = useCallback(\n (newSelectedValues: string[]) => {\n onFilterStateChanged({\n type: \"SELECT\",\n selectedValues: newSelectedValues,\n isExcluding,\n });\n },\n [onFilterStateChanged, isExcluding],\n );\n\n const aggregationOptions = useMemo(\n () => ({ where: whereClause }),\n [whereClause],\n );\n\n const { data, isLoading, error } = usePropertyAggregation(\n objectType,\n propertyKey as PropertyKeys<Q>,\n aggregationOptions,\n );\n\n return (\n <CheckboxListInput\n values={data}\n isLoading={isLoading}\n error={error}\n selectedValues={selectedValues}\n onChange={handleChange}\n colorMap={colorMap}\n />\n );\n}\n\nexport const CheckboxListFilterInput: typeof CheckboxListFilterInputInner =\n memo(CheckboxListFilterInputInner) as typeof CheckboxListFilterInputInner;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA,OAAOA,KAAK,IAAIC,IAAI,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACzD,SAASC,iBAAiB,QAAQ,qCAAqC;AAEvE,SAASC,sBAAsB,QAAQ,oCAAoC;AAC3E,SAASC,mBAAmB,QAAQ,+BAA+B;AAWnE,SAASC,4BAA4BA,CAAiC;EACpEC,UAAU;EACVC,WAAW;EACXC,WAAW;EACXC,oBAAoB;EACpBC,WAAW;EACXC;AAC+B,CAAC,EAAsB;EACtD,MAAMC,cAAc,GAAGX,OAAO,CAC5B,MACEO,WAAW,EAAEK,IAAI,KAAK,QAAQ,GAC1BT,mBAAmB,CAACI,WAAW,CAACI,cAAc,CAAC,GAC/C,EAAE,EACR,CAACJ,WAAW,CACd,CAAC;EACD,MAAMM,WAAW,GAAGN,WAAW,EAAEM,WAAW,IAAI,KAAK;EAErD,MAAMC,YAAY,GAAGf,WAAW,CAC7BgB,iBAA2B,IAAK;IAC/BP,oBAAoB,CAAC;MACnBI,IAAI,EAAE,QAAQ;MACdD,cAAc,EAAEI,iBAAiB;MACjCF;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACL,oBAAoB,EAAEK,WAAW,CACpC,CAAC;EAED,MAAMG,kBAAkB,GAAGhB,OAAO,CAChC,OAAO;IAAEiB,KAAK,EAAER;EAAY,CAAC,CAAC,EAC9B,CAACA,WAAW,CACd,CAAC;EAED,MAAM;IAAES,IAAI;IAAEC,SAAS;IAAEC;EAAM,CAAC,GAAGlB,sBAAsB,CACvDG,UAAU,EACVC,WAAW,EACXU,kBACF,CAAC;EAED,oBACEnB,KAAA,CAAAwB,aAAA,CAACpB,iBAAiB;IAChBqB,MAAM,EAAEJ,IAAK;IACbC,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA,KAAM;IACbT,cAAc,EAAEA,cAAe;IAC/BY,QAAQ,EAAET,YAAa;IACvBJ,QAAQ,EAAEA;EAAS,CACpB,CAAC;AAEN;AAEA,OAAO,MAAMc,uBAA4D,gBACvE1B,IAAI,CAACM,4BAA4B,CAAwC","ignoreList":[]}
1
+ {"version":3,"file":"CheckboxListFilterInput.js","names":["React","memo","useCallback","useMemo","FilterInputExcludeRow","CheckboxListInput","usePropertyAggregation","coerceToStringArray","CheckboxListFilterInputInner","objectType","objectSet","propertyKey","filterState","onFilterStateChanged","whereClause","colorMap","searchQuery","excludeRowOpen","selectedValues","type","isExcluding","handleChange","newSelectedValues","aggregationOptions","where","data","isLoading","error","createElement","totalValueCount","length","values","onChange","CheckboxListFilterInput"],"sources":["CheckboxListFilterInput.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 ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport { FilterInputExcludeRow } from \"../base/FilterInputExcludeRow.js\";\nimport { CheckboxListInput } from \"../base/inputs/CheckboxListInput.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { usePropertyAggregation } from \"../hooks/usePropertyAggregation.js\";\nimport { coerceToStringArray } from \"../utils/coerceFilterValue.js\";\n\ninterface CheckboxListFilterInputProps<Q extends ObjectTypeDefinition> {\n objectType: Q;\n objectSet: ObjectSet<Q>;\n propertyKey: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n whereClause: WhereClause<Q>;\n colorMap?: Record<string, string>;\n searchQuery?: string;\n excludeRowOpen?: boolean;\n}\n\nfunction CheckboxListFilterInputInner<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n propertyKey,\n filterState,\n onFilterStateChanged,\n whereClause,\n colorMap,\n searchQuery,\n excludeRowOpen,\n}: CheckboxListFilterInputProps<Q>): React.ReactElement {\n const selectedValues = useMemo(\n () =>\n filterState?.type === \"SELECT\"\n ? coerceToStringArray(filterState.selectedValues)\n : [],\n [filterState],\n );\n const isExcluding = filterState?.isExcluding ?? false;\n\n const handleChange = useCallback(\n (newSelectedValues: string[]) => {\n onFilterStateChanged({\n type: \"SELECT\",\n selectedValues: newSelectedValues,\n isExcluding,\n });\n },\n [onFilterStateChanged, isExcluding],\n );\n\n const aggregationOptions = useMemo(\n () => ({ where: whereClause }),\n [whereClause],\n );\n\n const { data, isLoading, error } = usePropertyAggregation(\n objectType,\n propertyKey as PropertyKeys<Q>,\n objectSet,\n aggregationOptions,\n );\n\n return (\n <FilterInputExcludeRow\n excludeRowOpen={excludeRowOpen}\n filterState={filterState}\n onFilterStateChanged={onFilterStateChanged}\n totalValueCount={data.length}\n >\n <CheckboxListInput\n values={data}\n isLoading={isLoading}\n error={error}\n selectedValues={selectedValues}\n onChange={handleChange}\n colorMap={colorMap}\n searchQuery={searchQuery}\n />\n </FilterInputExcludeRow>\n );\n}\n\nexport const CheckboxListFilterInput: typeof CheckboxListFilterInputInner =\n memo(CheckboxListFilterInputInner) as typeof CheckboxListFilterInputInner;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA,OAAOA,KAAK,IAAIC,IAAI,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACzD,SAASC,qBAAqB,QAAQ,kCAAkC;AACxE,SAASC,iBAAiB,QAAQ,qCAAqC;AAEvE,SAASC,sBAAsB,QAAQ,oCAAoC;AAC3E,SAASC,mBAAmB,QAAQ,+BAA+B;AAcnE,SAASC,4BAA4BA,CAAiC;EACpEC,UAAU;EACVC,SAAS;EACTC,WAAW;EACXC,WAAW;EACXC,oBAAoB;EACpBC,WAAW;EACXC,QAAQ;EACRC,WAAW;EACXC;AAC+B,CAAC,EAAsB;EACtD,MAAMC,cAAc,GAAGf,OAAO,CAC5B,MACES,WAAW,EAAEO,IAAI,KAAK,QAAQ,GAC1BZ,mBAAmB,CAACK,WAAW,CAACM,cAAc,CAAC,GAC/C,EAAE,EACR,CAACN,WAAW,CACd,CAAC;EACD,MAAMQ,WAAW,GAAGR,WAAW,EAAEQ,WAAW,IAAI,KAAK;EAErD,MAAMC,YAAY,GAAGnB,WAAW,CAC7BoB,iBAA2B,IAAK;IAC/BT,oBAAoB,CAAC;MACnBM,IAAI,EAAE,QAAQ;MACdD,cAAc,EAAEI,iBAAiB;MACjCF;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACP,oBAAoB,EAAEO,WAAW,CACpC,CAAC;EAED,MAAMG,kBAAkB,GAAGpB,OAAO,CAChC,OAAO;IAAEqB,KAAK,EAAEV;EAAY,CAAC,CAAC,EAC9B,CAACA,WAAW,CACd,CAAC;EAED,MAAM;IAAEW,IAAI;IAAEC,SAAS;IAAEC;EAAM,CAAC,GAAGrB,sBAAsB,CACvDG,UAAU,EACVE,WAAW,EACXD,SAAS,EACTa,kBACF,CAAC;EAED,oBACEvB,KAAA,CAAA4B,aAAA,CAACxB,qBAAqB;IACpBa,cAAc,EAAEA,cAAe;IAC/BL,WAAW,EAAEA,WAAY;IACzBC,oBAAoB,EAAEA,oBAAqB;IAC3CgB,eAAe,EAAEJ,IAAI,CAACK;EAAO,gBAE7B9B,KAAA,CAAA4B,aAAA,CAACvB,iBAAiB;IAChB0B,MAAM,EAAEN,IAAK;IACbC,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA,KAAM;IACbT,cAAc,EAAEA,cAAe;IAC/Bc,QAAQ,EAAEX,YAAa;IACvBN,QAAQ,EAAEA,QAAS;IACnBC,WAAW,EAAEA;EAAY,CAC1B,CACoB,CAAC;AAE5B;AAEA,OAAO,MAAMiB,uBAA4D,gBACvEhC,IAAI,CAACO,4BAA4B,CAAwC","ignoreList":[]}
@@ -21,6 +21,7 @@ import { NullValueWrapper } from "../base/inputs/NullValueWrapper.js";
21
21
  import { createGroupByAggregateOptions, createNullCountAggregateOptions, createNullWhereClause } from "../utils/aggregationHelpers.js";
22
22
  function DateRangeFilterInputInner({
23
23
  objectType,
24
+ objectSet,
24
25
  propertyKey,
25
26
  filterState,
26
27
  onFilterStateChanged
@@ -45,8 +46,9 @@ function DateRangeFilterInputInner({
45
46
  }, [onFilterStateChanged, includeNull]);
46
47
  const aggregateOptions = useMemo(() => createGroupByAggregateOptions(propertyKey), [propertyKey]);
47
48
  const histogramArgs = useMemo(() => ({
48
- aggregate: aggregateOptions
49
- }), [aggregateOptions]);
49
+ aggregate: aggregateOptions,
50
+ objectSet
51
+ }), [aggregateOptions, objectSet]);
50
52
  const {
51
53
  data: aggregateData,
52
54
  isLoading: histLoading
@@ -72,8 +74,9 @@ function DateRangeFilterInputInner({
72
74
  const nullWhereClause = useMemo(() => createNullWhereClause(propertyKey), [propertyKey]);
73
75
  const nullCountArgs = useMemo(() => ({
74
76
  where: nullWhereClause,
75
- aggregate: nullCountAggregateOptions
76
- }), [nullWhereClause, nullCountAggregateOptions]);
77
+ aggregate: nullCountAggregateOptions,
78
+ objectSet
79
+ }), [nullWhereClause, nullCountAggregateOptions, objectSet]);
77
80
  const {
78
81
  data: nullCountData,
79
82
  isLoading: nullLoading,
@@ -87,15 +90,16 @@ function DateRangeFilterInputInner({
87
90
  }
88
91
  return 0;
89
92
  }, [nullCountData]);
93
+ const isLoading = histLoading || nullLoading;
90
94
  return /*#__PURE__*/React.createElement(NullValueWrapper, {
91
95
  nullCount: nullCount,
92
- isLoading: nullLoading,
96
+ isLoading: isLoading,
93
97
  error: nullError,
94
98
  includeNull: includeNull,
95
99
  onIncludeNullChange: handleNullChange
96
100
  }, /*#__PURE__*/React.createElement(DateRangeInput, {
97
101
  valueCountPairs: valueCountPairs,
98
- isLoading: histLoading,
102
+ isLoading: isLoading,
99
103
  minValue: dateRangeState?.minValue,
100
104
  maxValue: dateRangeState?.maxValue,
101
105
  onChange: handleRangeChange
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangeFilterInput.js","names":["useOsdkAggregation","React","memo","useCallback","useMemo","DateRangeInput","NullValueWrapper","createGroupByAggregateOptions","createNullCountAggregateOptions","createNullWhereClause","DateRangeFilterInputInner","objectType","propertyKey","filterState","onFilterStateChanged","dateRangeState","type","undefined","includeNull","handleNullChange","minValue","maxValue","handleRangeChange","aggregateOptions","histogramArgs","aggregate","data","aggregateData","isLoading","histLoading","valueCountPairs","pairs","item","rawValue","$group","date","Date","String","isNaN","getTime","push","value","count","$count","nullCountAggregateOptions","nullWhereClause","nullCountArgs","where","nullCountData","nullLoading","error","nullError","nullCount","result","createElement","onIncludeNullChange","onChange","DateRangeFilterInput"],"sources":["DateRangeFilterInput.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectTypeDefinition } from \"@osdk/api\";\nimport { useOsdkAggregation } from \"@osdk/react/experimental\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport { DateRangeInput } from \"../base/inputs/DateRangeInput.js\";\nimport { NullValueWrapper } from \"../base/inputs/NullValueWrapper.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport {\n createGroupByAggregateOptions,\n createNullCountAggregateOptions,\n createNullWhereClause,\n} from \"../utils/aggregationHelpers.js\";\n\ninterface DateRangeFilterInputProps<Q extends ObjectTypeDefinition> {\n objectType: Q;\n propertyKey: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n}\n\nfunction DateRangeFilterInputInner<Q extends ObjectTypeDefinition>({\n objectType,\n propertyKey,\n filterState,\n onFilterStateChanged,\n}: DateRangeFilterInputProps<Q>): React.ReactElement {\n const dateRangeState = filterState?.type === \"DATE_RANGE\"\n ? filterState\n : undefined;\n const includeNull = filterState?.includeNull;\n\n const handleNullChange = useCallback(\n (includeNull: boolean) => {\n onFilterStateChanged({\n type: \"DATE_RANGE\",\n minValue: dateRangeState?.minValue,\n maxValue: dateRangeState?.maxValue,\n includeNull,\n });\n },\n [onFilterStateChanged, dateRangeState?.minValue, dateRangeState?.maxValue],\n );\n\n const handleRangeChange = useCallback(\n (minValue: Date | undefined, maxValue: Date | undefined) => {\n onFilterStateChanged({\n type: \"DATE_RANGE\",\n minValue,\n maxValue,\n includeNull,\n });\n },\n [onFilterStateChanged, includeNull],\n );\n\n const aggregateOptions = useMemo(\n () => createGroupByAggregateOptions<Q>(propertyKey),\n [propertyKey],\n );\n\n const histogramArgs = useMemo(\n () => ({ aggregate: aggregateOptions }),\n [aggregateOptions],\n );\n\n const { data: aggregateData, isLoading: histLoading } = useOsdkAggregation(\n objectType,\n histogramArgs,\n );\n\n const valueCountPairs = useMemo<Array<{ value: Date; count: number }>>(\n () => {\n if (!aggregateData) return [];\n const dataArray = aggregateData as Iterable<{\n $group: Record<string, unknown>;\n $count?: number;\n }>;\n const pairs: Array<{ value: Date; count: number }> = [];\n for (const item of dataArray) {\n const rawValue = item.$group[propertyKey];\n if (rawValue != null) {\n const date = new Date(String(rawValue));\n if (!isNaN(date.getTime())) {\n pairs.push({ value: date, count: item.$count ?? 0 });\n }\n }\n }\n return pairs;\n },\n [aggregateData, propertyKey],\n );\n\n const nullCountAggregateOptions = useMemo(\n () => createNullCountAggregateOptions<Q>(),\n [],\n );\n\n const nullWhereClause = useMemo(\n () => createNullWhereClause<Q>(propertyKey),\n [propertyKey],\n );\n\n const nullCountArgs = useMemo(\n () => ({ where: nullWhereClause, aggregate: nullCountAggregateOptions }),\n [nullWhereClause, nullCountAggregateOptions],\n );\n\n const {\n data: nullCountData,\n isLoading: nullLoading,\n error: nullError,\n } = useOsdkAggregation(\n objectType,\n nullCountArgs,\n );\n\n const nullCount = useMemo(() => {\n if (!nullCountData) return 0;\n const result = nullCountData as { $count?: number } | Iterable<unknown>;\n if (\"$count\" in result && typeof result.$count === \"number\") {\n return result.$count;\n }\n return 0;\n }, [nullCountData]);\n\n return (\n <NullValueWrapper\n nullCount={nullCount}\n isLoading={nullLoading}\n error={nullError}\n includeNull={includeNull}\n onIncludeNullChange={handleNullChange}\n >\n <DateRangeInput\n valueCountPairs={valueCountPairs}\n isLoading={histLoading}\n minValue={dateRangeState?.minValue}\n maxValue={dateRangeState?.maxValue}\n onChange={handleRangeChange}\n />\n </NullValueWrapper>\n );\n}\n\nexport const DateRangeFilterInput: typeof DateRangeFilterInputInner = memo(\n DateRangeFilterInputInner,\n) as typeof DateRangeFilterInputInner;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"DateRangeFilterInput.js","names":["useOsdkAggregation","React","memo","useCallback","useMemo","DateRangeInput","NullValueWrapper","createGroupByAggregateOptions","createNullCountAggregateOptions","createNullWhereClause","DateRangeFilterInputInner","objectType","objectSet","propertyKey","filterState","onFilterStateChanged","dateRangeState","type","undefined","includeNull","handleNullChange","minValue","maxValue","handleRangeChange","aggregateOptions","histogramArgs","aggregate","data","aggregateData","isLoading","histLoading","valueCountPairs","pairs","item","rawValue","$group","date","Date","String","isNaN","getTime","push","value","count","$count","nullCountAggregateOptions","nullWhereClause","nullCountArgs","where","nullCountData","nullLoading","error","nullError","nullCount","result","createElement","onIncludeNullChange","onChange","DateRangeFilterInput"],"sources":["DateRangeFilterInput.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 { ObjectSet, ObjectTypeDefinition } from \"@osdk/api\";\nimport { useOsdkAggregation } from \"@osdk/react/experimental\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport { DateRangeInput } from \"../base/inputs/DateRangeInput.js\";\nimport { NullValueWrapper } from \"../base/inputs/NullValueWrapper.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport {\n createGroupByAggregateOptions,\n createNullCountAggregateOptions,\n createNullWhereClause,\n} from \"../utils/aggregationHelpers.js\";\n\ninterface DateRangeFilterInputProps<Q extends ObjectTypeDefinition> {\n objectType: Q;\n objectSet: ObjectSet<Q>;\n propertyKey: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n}\n\nfunction DateRangeFilterInputInner<Q extends ObjectTypeDefinition>({\n objectType,\n objectSet,\n propertyKey,\n filterState,\n onFilterStateChanged,\n}: DateRangeFilterInputProps<Q>): React.ReactElement {\n const dateRangeState = filterState?.type === \"DATE_RANGE\"\n ? filterState\n : undefined;\n const includeNull = filterState?.includeNull;\n\n const handleNullChange = useCallback(\n (includeNull: boolean) => {\n onFilterStateChanged({\n type: \"DATE_RANGE\",\n minValue: dateRangeState?.minValue,\n maxValue: dateRangeState?.maxValue,\n includeNull,\n });\n },\n [onFilterStateChanged, dateRangeState?.minValue, dateRangeState?.maxValue],\n );\n\n const handleRangeChange = useCallback(\n (minValue: Date | undefined, maxValue: Date | undefined) => {\n onFilterStateChanged({\n type: \"DATE_RANGE\",\n minValue,\n maxValue,\n includeNull,\n });\n },\n [onFilterStateChanged, includeNull],\n );\n\n const aggregateOptions = useMemo(\n () => createGroupByAggregateOptions<Q>(propertyKey),\n [propertyKey],\n );\n\n const histogramArgs = useMemo(\n () => ({ aggregate: aggregateOptions, objectSet }),\n [aggregateOptions, objectSet],\n );\n\n const { data: aggregateData, isLoading: histLoading } = useOsdkAggregation(\n objectType,\n histogramArgs,\n );\n\n const valueCountPairs = useMemo<Array<{ value: Date; count: number }>>(\n () => {\n if (!aggregateData) return [];\n const dataArray = aggregateData as Iterable<{\n $group: Record<string, unknown>;\n $count?: number;\n }>;\n const pairs: Array<{ value: Date; count: number }> = [];\n for (const item of dataArray) {\n const rawValue = item.$group[propertyKey];\n if (rawValue != null) {\n const date = new Date(String(rawValue));\n if (!isNaN(date.getTime())) {\n pairs.push({ value: date, count: item.$count ?? 0 });\n }\n }\n }\n return pairs;\n },\n [aggregateData, propertyKey],\n );\n\n const nullCountAggregateOptions = useMemo(\n () => createNullCountAggregateOptions<Q>(),\n [],\n );\n\n const nullWhereClause = useMemo(\n () => createNullWhereClause<Q>(propertyKey),\n [propertyKey],\n );\n\n const nullCountArgs = useMemo(\n () => ({\n where: nullWhereClause,\n aggregate: nullCountAggregateOptions,\n objectSet,\n }),\n [nullWhereClause, nullCountAggregateOptions, objectSet],\n );\n\n const {\n data: nullCountData,\n isLoading: nullLoading,\n error: nullError,\n } = useOsdkAggregation(\n objectType,\n nullCountArgs,\n );\n\n const nullCount = useMemo(() => {\n if (!nullCountData) return 0;\n const result = nullCountData as { $count?: number } | Iterable<unknown>;\n if (\"$count\" in result && typeof result.$count === \"number\") {\n return result.$count;\n }\n return 0;\n }, [nullCountData]);\n\n const isLoading = histLoading || nullLoading;\n\n return (\n <NullValueWrapper\n nullCount={nullCount}\n isLoading={isLoading}\n error={nullError}\n includeNull={includeNull}\n onIncludeNullChange={handleNullChange}\n >\n <DateRangeInput\n valueCountPairs={valueCountPairs}\n isLoading={isLoading}\n minValue={dateRangeState?.minValue}\n maxValue={dateRangeState?.maxValue}\n onChange={handleRangeChange}\n />\n </NullValueWrapper>\n );\n}\n\nexport const DateRangeFilterInput: typeof DateRangeFilterInputInner = memo(\n DateRangeFilterInputInner,\n) as typeof DateRangeFilterInputInner;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,kBAAkB,QAAQ,0BAA0B;AAC7D,OAAOC,KAAK,IAAIC,IAAI,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACzD,SAASC,cAAc,QAAQ,kCAAkC;AACjE,SAASC,gBAAgB,QAAQ,oCAAoC;AAErE,SACEC,6BAA6B,EAC7BC,+BAA+B,EAC/BC,qBAAqB,QAChB,gCAAgC;AAUvC,SAASC,yBAAyBA,CAAiC;EACjEC,UAAU;EACVC,SAAS;EACTC,WAAW;EACXC,WAAW;EACXC;AAC4B,CAAC,EAAsB;EACnD,MAAMC,cAAc,GAAGF,WAAW,EAAEG,IAAI,KAAK,YAAY,GACrDH,WAAW,GACXI,SAAS;EACb,MAAMC,WAAW,GAAGL,WAAW,EAAEK,WAAW;EAE5C,MAAMC,gBAAgB,GAAGjB,WAAW,CACjCgB,WAAoB,IAAK;IACxBJ,oBAAoB,CAAC;MACnBE,IAAI,EAAE,YAAY;MAClBI,QAAQ,EAAEL,cAAc,EAAEK,QAAQ;MAClCC,QAAQ,EAAEN,cAAc,EAAEM,QAAQ;MAClCH;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACJ,oBAAoB,EAAEC,cAAc,EAAEK,QAAQ,EAAEL,cAAc,EAAEM,QAAQ,CAC3E,CAAC;EAED,MAAMC,iBAAiB,GAAGpB,WAAW,CACnC,CAACkB,QAA0B,EAAEC,QAA0B,KAAK;IAC1DP,oBAAoB,CAAC;MACnBE,IAAI,EAAE,YAAY;MAClBI,QAAQ;MACRC,QAAQ;MACRH;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACJ,oBAAoB,EAAEI,WAAW,CACpC,CAAC;EAED,MAAMK,gBAAgB,GAAGpB,OAAO,CAC9B,MAAMG,6BAA6B,CAAIM,WAAW,CAAC,EACnD,CAACA,WAAW,CACd,CAAC;EAED,MAAMY,aAAa,GAAGrB,OAAO,CAC3B,OAAO;IAAEsB,SAAS,EAAEF,gBAAgB;IAAEZ;EAAU,CAAC,CAAC,EAClD,CAACY,gBAAgB,EAAEZ,SAAS,CAC9B,CAAC;EAED,MAAM;IAAEe,IAAI,EAAEC,aAAa;IAAEC,SAAS,EAAEC;EAAY,CAAC,GAAG9B,kBAAkB,CACxEW,UAAU,EACVc,aACF,CAAC;EAED,MAAMM,eAAe,GAAG3B,OAAO,CAC7B,MAAM;IACJ,IAAI,CAACwB,aAAa,EAAE,OAAO,EAAE;IAK7B,MAAMI,KAA4C,GAAG,EAAE;IACvD,KAAK,MAAMC,IAAI,IALGL,aAAa,EAKD;MAC5B,MAAMM,QAAQ,GAAGD,IAAI,CAACE,MAAM,CAACtB,WAAW,CAAC;MACzC,IAAIqB,QAAQ,IAAI,IAAI,EAAE;QACpB,MAAME,IAAI,GAAG,IAAIC,IAAI,CAACC,MAAM,CAACJ,QAAQ,CAAC,CAAC;QACvC,IAAI,CAACK,KAAK,CAACH,IAAI,CAACI,OAAO,CAAC,CAAC,CAAC,EAAE;UAC1BR,KAAK,CAACS,IAAI,CAAC;YAAEC,KAAK,EAAEN,IAAI;YAAEO,KAAK,EAAEV,IAAI,CAACW,MAAM,IAAI;UAAE,CAAC,CAAC;QACtD;MACF;IACF;IACA,OAAOZ,KAAK;EACd,CAAC,EACD,CAACJ,aAAa,EAAEf,WAAW,CAC7B,CAAC;EAED,MAAMgC,yBAAyB,GAAGzC,OAAO,CACvC,MAAMI,+BAA+B,CAAI,CAAC,EAC1C,EACF,CAAC;EAED,MAAMsC,eAAe,GAAG1C,OAAO,CAC7B,MAAMK,qBAAqB,CAAII,WAAW,CAAC,EAC3C,CAACA,WAAW,CACd,CAAC;EAED,MAAMkC,aAAa,GAAG3C,OAAO,CAC3B,OAAO;IACL4C,KAAK,EAAEF,eAAe;IACtBpB,SAAS,EAAEmB,yBAAyB;IACpCjC;EACF,CAAC,CAAC,EACF,CAACkC,eAAe,EAAED,yBAAyB,EAAEjC,SAAS,CACxD,CAAC;EAED,MAAM;IACJe,IAAI,EAAEsB,aAAa;IACnBpB,SAAS,EAAEqB,WAAW;IACtBC,KAAK,EAAEC;EACT,CAAC,GAAGpD,kBAAkB,CACpBW,UAAU,EACVoC,aACF,CAAC;EAED,MAAMM,SAAS,GAAGjD,OAAO,CAAC,MAAM;IAC9B,IAAI,CAAC6C,aAAa,EAAE,OAAO,CAAC;IAC5B,MAAMK,MAAM,GAAGL,aAAwD;IACvE,IAAI,QAAQ,IAAIK,MAAM,IAAI,OAAOA,MAAM,CAACV,MAAM,KAAK,QAAQ,EAAE;MAC3D,OAAOU,MAAM,CAACV,MAAM;IACtB;IACA,OAAO,CAAC;EACV,CAAC,EAAE,CAACK,aAAa,CAAC,CAAC;EAEnB,MAAMpB,SAAS,GAAGC,WAAW,IAAIoB,WAAW;EAE5C,oBACEjD,KAAA,CAAAsD,aAAA,CAACjD,gBAAgB;IACf+C,SAAS,EAAEA,SAAU;IACrBxB,SAAS,EAAEA,SAAU;IACrBsB,KAAK,EAAEC,SAAU;IACjBjC,WAAW,EAAEA,WAAY;IACzBqC,mBAAmB,EAAEpC;EAAiB,gBAEtCnB,KAAA,CAAAsD,aAAA,CAAClD,cAAc;IACb0B,eAAe,EAAEA,eAAgB;IACjCF,SAAS,EAAEA,SAAU;IACrBR,QAAQ,EAAEL,cAAc,EAAEK,QAAS;IACnCC,QAAQ,EAAEN,cAAc,EAAEM,QAAS;IACnCmC,QAAQ,EAAElC;EAAkB,CAC7B,CACe,CAAC;AAEvB;AAEA,OAAO,MAAMmC,oBAAsD,gBAAGxD,IAAI,CACxEQ,yBACF,CAAqC","ignoreList":[]}
@@ -40,6 +40,7 @@ function LinkedPropertyInputInner({
40
40
  definition,
41
41
  filterState,
42
42
  onFilterStateChanged,
43
+ searchQuery,
43
44
  className,
44
45
  style
45
46
  }) {
@@ -152,9 +153,11 @@ function LinkedPropertyInputInner({
152
153
  const selectedValues = innerState?.type === "SELECT" ? coerceToStringArray(innerState.selectedValues) : [];
153
154
  return /*#__PURE__*/React.createElement(LinkedCheckboxListInput, {
154
155
  objectType: linkedObjectType,
156
+ objectSet: linkedObjectSet,
155
157
  propertyKey: linkedPropertyKey,
156
158
  selectedValues: selectedValues,
157
- onChange: onSelectChange
159
+ onChange: onSelectChange,
160
+ searchQuery: searchQuery
158
161
  });
159
162
  }
160
163
  case "MULTI_SELECT":
@@ -162,6 +165,7 @@ function LinkedPropertyInputInner({
162
165
  const values = innerState?.type === "SELECT" ? coerceToStringArray(innerState.selectedValues) : [];
163
166
  return /*#__PURE__*/React.createElement(LinkedMultiSelectInput, {
164
167
  objectType: linkedObjectType,
168
+ objectSet: linkedObjectSet,
165
169
  propertyKey: linkedPropertyKey,
166
170
  selectedValues: values,
167
171
  onChange: onSelectChange
@@ -172,6 +176,7 @@ function LinkedPropertyInputInner({
172
176
  const value = innerState?.type === "SELECT" ? coerceToString(innerState.selectedValues[0]) : undefined;
173
177
  return /*#__PURE__*/React.createElement(LinkedSingleSelectInput, {
174
178
  objectType: linkedObjectType,
179
+ objectSet: linkedObjectSet,
175
180
  propertyKey: linkedPropertyKey,
176
181
  selectedValue: value,
177
182
  onChange: onSingleSelectChange
@@ -199,6 +204,7 @@ function LinkedPropertyInputInner({
199
204
  const nr = innerState?.type === "NUMBER_RANGE" ? innerState : undefined;
200
205
  return /*#__PURE__*/React.createElement(LinkedNumberRangeInput, {
201
206
  objectType: linkedObjectType,
207
+ objectSet: linkedObjectSet,
202
208
  propertyKey: linkedPropertyKey,
203
209
  minValue: nr?.minValue,
204
210
  maxValue: nr?.maxValue,
@@ -212,6 +218,7 @@ function LinkedPropertyInputInner({
212
218
  const dr = innerState?.type === "DATE_RANGE" ? innerState : undefined;
213
219
  return /*#__PURE__*/React.createElement(LinkedDateRangeInput, {
214
220
  objectType: linkedObjectType,
221
+ objectSet: linkedObjectSet,
215
222
  propertyKey: linkedPropertyKey,
216
223
  minValue: dr?.minValue,
217
224
  maxValue: dr?.maxValue,
@@ -226,9 +233,11 @@ function LinkedPropertyInputInner({
226
233
  const selectedValues = exactState ? coerceToStringArray(exactState.values) : [];
227
234
  return /*#__PURE__*/React.createElement(LinkedListogramInput, {
228
235
  objectType: linkedObjectType,
236
+ objectSet: linkedObjectSet,
229
237
  propertyKey: linkedPropertyKey,
230
238
  selectedValues: selectedValues,
231
- onChange: onExactMatchChange
239
+ onChange: onExactMatchChange,
240
+ searchQuery: searchQuery
232
241
  });
233
242
  }
234
243
  case "TEXT_TAGS":
@@ -237,6 +246,7 @@ function LinkedPropertyInputInner({
237
246
  const tags = exactState ? coerceToStringArray(exactState.values) : [];
238
247
  return /*#__PURE__*/React.createElement(LinkedTextTagsInput, {
239
248
  objectType: linkedObjectType,
249
+ objectSet: linkedObjectSet,
240
250
  propertyKey: linkedPropertyKey,
241
251
  tags: tags,
242
252
  onChange: onExactMatchChange
@@ -281,25 +291,29 @@ function LinkedPropertyInputInner({
281
291
  export const LinkedPropertyInput = /*#__PURE__*/memo(LinkedPropertyInputInner);
282
292
  function LinkedCheckboxListInput({
283
293
  objectType,
294
+ objectSet,
284
295
  propertyKey,
285
296
  selectedValues,
286
- onChange
297
+ onChange,
298
+ searchQuery
287
299
  }) {
288
300
  const {
289
301
  data,
290
302
  isLoading,
291
303
  error
292
- } = usePropertyAggregation(objectType, propertyKey);
304
+ } = usePropertyAggregation(objectType, propertyKey, objectSet);
293
305
  return /*#__PURE__*/React.createElement(CheckboxListInput, {
294
306
  values: data,
295
307
  isLoading: isLoading,
296
308
  error: error,
297
309
  selectedValues: selectedValues,
298
- onChange: onChange
310
+ onChange: onChange,
311
+ searchQuery: searchQuery
299
312
  });
300
313
  }
301
314
  function LinkedMultiSelectInput({
302
315
  objectType,
316
+ objectSet,
303
317
  propertyKey,
304
318
  selectedValues,
305
319
  onChange
@@ -308,7 +322,7 @@ function LinkedMultiSelectInput({
308
322
  data,
309
323
  isLoading,
310
324
  error
311
- } = usePropertyAggregation(objectType, propertyKey);
325
+ } = usePropertyAggregation(objectType, propertyKey, objectSet);
312
326
  return /*#__PURE__*/React.createElement(MultiSelectInput, {
313
327
  values: data,
314
328
  isLoading: isLoading,
@@ -319,6 +333,7 @@ function LinkedMultiSelectInput({
319
333
  }
320
334
  function LinkedSingleSelectInput({
321
335
  objectType,
336
+ objectSet,
322
337
  propertyKey,
323
338
  selectedValue,
324
339
  onChange
@@ -327,7 +342,7 @@ function LinkedSingleSelectInput({
327
342
  data,
328
343
  isLoading,
329
344
  error
330
- } = usePropertyAggregation(objectType, propertyKey);
345
+ } = usePropertyAggregation(objectType, propertyKey, objectSet);
331
346
  return /*#__PURE__*/React.createElement(SingleSelectInput, {
332
347
  values: data,
333
348
  isLoading: isLoading,
@@ -339,27 +354,31 @@ function LinkedSingleSelectInput({
339
354
  }
340
355
  function LinkedListogramInput({
341
356
  objectType,
357
+ objectSet,
342
358
  propertyKey,
343
359
  selectedValues,
344
- onChange
360
+ onChange,
361
+ searchQuery
345
362
  }) {
346
363
  const {
347
364
  data,
348
365
  maxCount,
349
366
  isLoading,
350
367
  error
351
- } = usePropertyAggregation(objectType, propertyKey);
368
+ } = usePropertyAggregation(objectType, propertyKey, objectSet);
352
369
  return /*#__PURE__*/React.createElement(ListogramInput, {
353
370
  values: data,
354
371
  maxCount: maxCount,
355
372
  isLoading: isLoading,
356
373
  error: error,
357
374
  selectedValues: selectedValues,
358
- onChange: onChange
375
+ onChange: onChange,
376
+ searchQuery: searchQuery
359
377
  });
360
378
  }
361
379
  function LinkedTextTagsInput({
362
380
  objectType,
381
+ objectSet,
363
382
  propertyKey,
364
383
  tags,
365
384
  onChange
@@ -371,7 +390,7 @@ function LinkedTextTagsInput({
371
390
  data,
372
391
  isLoading,
373
392
  error
374
- } = usePropertyAggregation(objectType, propertyKey, aggregationOptions);
393
+ } = usePropertyAggregation(objectType, propertyKey, objectSet, aggregationOptions);
375
394
  return /*#__PURE__*/React.createElement(TextTagsInput, {
376
395
  suggestions: data,
377
396
  isLoading: isLoading,
@@ -381,11 +400,12 @@ function LinkedTextTagsInput({
381
400
  suggestionLimit: 10
382
401
  });
383
402
  }
384
- function useLinkedRangeData(objectType, propertyKey) {
403
+ function useLinkedRangeData(objectType, propertyKey, objectSet) {
385
404
  const aggregateOptions = useMemo(() => createGroupByAggregateOptions(propertyKey), [propertyKey]);
386
405
  const histogramArgs = useMemo(() => ({
387
- aggregate: aggregateOptions
388
- }), [aggregateOptions]);
406
+ aggregate: aggregateOptions,
407
+ objectSet
408
+ }), [aggregateOptions, objectSet]);
389
409
  const {
390
410
  data: aggregateData,
391
411
  isLoading: histLoading
@@ -394,8 +414,9 @@ function useLinkedRangeData(objectType, propertyKey) {
394
414
  const nullWhereClause = useMemo(() => createNullWhereClause(propertyKey), [propertyKey]);
395
415
  const nullCountArgs = useMemo(() => ({
396
416
  where: nullWhereClause,
397
- aggregate: nullCountAggregateOptions
398
- }), [nullWhereClause, nullCountAggregateOptions]);
417
+ aggregate: nullCountAggregateOptions,
418
+ objectSet
419
+ }), [nullWhereClause, nullCountAggregateOptions, objectSet]);
399
420
  const {
400
421
  data: nullCountData,
401
422
  isLoading: nullLoading
@@ -417,6 +438,7 @@ function useLinkedRangeData(objectType, propertyKey) {
417
438
  }
418
439
  function LinkedNumberRangeInput({
419
440
  objectType,
441
+ objectSet,
420
442
  propertyKey,
421
443
  minValue,
422
444
  maxValue,
@@ -429,7 +451,7 @@ function LinkedNumberRangeInput({
429
451
  histLoading,
430
452
  nullCount,
431
453
  nullLoading
432
- } = useLinkedRangeData(objectType, propertyKey);
454
+ } = useLinkedRangeData(objectType, propertyKey, objectSet);
433
455
  const valueCountPairs = useMemo(() => {
434
456
  if (!aggregateData) return [];
435
457
  const pairs = [];
@@ -462,6 +484,7 @@ function LinkedNumberRangeInput({
462
484
  }
463
485
  function LinkedDateRangeInput({
464
486
  objectType,
487
+ objectSet,
465
488
  propertyKey,
466
489
  minValue,
467
490
  maxValue,
@@ -474,7 +497,7 @@ function LinkedDateRangeInput({
474
497
  histLoading,
475
498
  nullCount,
476
499
  nullLoading
477
- } = useLinkedRangeData(objectType, propertyKey);
500
+ } = useLinkedRangeData(objectType, propertyKey, objectSet);
478
501
  const valueCountPairs = useMemo(() => {
479
502
  if (!aggregateData) return [];
480
503
  const pairs = [];