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

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 (510) hide show
  1. package/AGENTS.md +14 -97
  2. package/CHANGELOG.md +35 -0
  3. package/README.md +23 -7
  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/DateCalendar.js +70 -0
  19. package/build/browser/action-form/fields/DateCalendar.js.map +1 -0
  20. package/build/browser/action-form/fields/DateCalendar.module.css +136 -0
  21. package/build/browser/action-form/fields/DateCalendar.module.css.js +22 -0
  22. package/build/browser/action-form/fields/DatetimePickerField.js +98 -0
  23. package/build/browser/action-form/fields/DatetimePickerField.js.map +1 -0
  24. package/build/browser/action-form/fields/DatetimePickerField.module.css +66 -0
  25. package/build/browser/action-form/fields/DatetimePickerField.module.css.js +10 -0
  26. package/build/browser/action-form/fields/FormFieldRenderer.js +17 -6
  27. package/build/browser/action-form/fields/FormFieldRenderer.js.map +1 -1
  28. package/build/browser/action-form/fields/LazyDateCalendar.js +27 -0
  29. package/build/browser/action-form/fields/LazyDateCalendar.js.map +1 -0
  30. package/build/browser/action-form/fields/TextInputField.js +2 -0
  31. package/build/browser/action-form/fields/TextInputField.js.map +1 -1
  32. package/build/browser/action-form/fields/TextInputField.module.css +56 -0
  33. package/build/browser/action-form/fields/TextInputField.module.css.js +6 -0
  34. package/build/browser/base-components/checkbox/Checkbox.js +2 -2
  35. package/build/browser/base-components/checkbox/Checkbox.js.map +1 -1
  36. package/build/browser/base-components/checkbox/Checkbox.module.css +0 -4
  37. package/build/browser/base-components/combobox/Combobox.js +3 -8
  38. package/build/browser/base-components/combobox/Combobox.js.map +1 -1
  39. package/build/browser/base-components/combobox/Combobox.module.css +0 -3
  40. package/build/browser/base-components/draggable-list/DraggableList.js +2 -4
  41. package/build/browser/base-components/draggable-list/DraggableList.js.map +1 -1
  42. package/build/browser/base-components/search-bar/SearchBar.module.css +2 -2
  43. package/build/browser/base-components/select/Select.js +1 -3
  44. package/build/browser/base-components/select/Select.js.map +1 -1
  45. package/build/browser/base-components/select/Select.module.css +0 -2
  46. package/build/browser/base-components/switch/Switch.module.css +0 -1
  47. package/build/browser/filter-list/FilterInput.js +14 -5
  48. package/build/browser/filter-list/FilterInput.js.map +1 -1
  49. package/build/browser/filter-list/FilterList.js +22 -10
  50. package/build/browser/filter-list/FilterList.js.map +1 -1
  51. package/build/browser/filter-list/FilterListApi.js.map +1 -1
  52. package/build/browser/filter-list/base/AddFilterPopover.js +4 -3
  53. package/build/browser/filter-list/base/AddFilterPopover.js.map +1 -1
  54. package/build/browser/filter-list/base/BaseFilterList.js +3 -1
  55. package/build/browser/filter-list/base/BaseFilterList.js.map +1 -1
  56. package/build/browser/filter-list/base/BaseFilterListApi.js.map +1 -1
  57. package/build/browser/filter-list/base/ExcludeDropdown.js +61 -0
  58. package/build/browser/filter-list/base/ExcludeDropdown.js.map +1 -0
  59. package/build/browser/filter-list/base/ExcludeDropdown.module.css +94 -0
  60. package/build/browser/filter-list/base/ExcludeDropdown.module.css.js +12 -0
  61. package/build/browser/filter-list/base/FilterIcons.js +0 -39
  62. package/build/browser/filter-list/base/FilterIcons.js.map +1 -1
  63. package/build/browser/filter-list/base/FilterInputExcludeRow.js +55 -0
  64. package/build/browser/filter-list/base/FilterInputExcludeRow.js.map +1 -0
  65. package/build/browser/filter-list/base/FilterListHeader.js +3 -2
  66. package/build/browser/filter-list/base/FilterListHeader.js.map +1 -1
  67. package/build/browser/filter-list/base/FilterListItem.js +72 -23
  68. package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
  69. package/build/browser/filter-list/base/FilterListItem.module.css +96 -20
  70. package/build/browser/filter-list/base/FilterListItem.module.css.js +7 -2
  71. package/build/browser/filter-list/base/inputs/CheckboxListInput.js +2 -2
  72. package/build/browser/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
  73. package/build/browser/filter-list/base/inputs/ContainsTextInput.js +2 -6
  74. package/build/browser/filter-list/base/inputs/ContainsTextInput.js.map +1 -1
  75. package/build/browser/filter-list/base/inputs/DateRangeInput.js +1 -1
  76. package/build/browser/filter-list/base/inputs/DateRangeInput.js.map +1 -1
  77. package/build/browser/filter-list/base/inputs/ListogramInput.js +2 -2
  78. package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
  79. package/build/browser/filter-list/base/inputs/MultiDateInput.js +1 -1
  80. package/build/browser/filter-list/base/inputs/MultiDateInput.js.map +1 -1
  81. package/build/browser/filter-list/base/inputs/RangeInput.js +2 -2
  82. package/build/browser/filter-list/base/inputs/RangeInput.js.map +1 -1
  83. package/build/browser/filter-list/base/inputs/SingleDateInput.js +1 -1
  84. package/build/browser/filter-list/base/inputs/SingleDateInput.js.map +1 -1
  85. package/build/browser/filter-list/base/inputs/SingleSelectInput.js +1 -3
  86. package/build/browser/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
  87. package/build/browser/filter-list/base/inputs/TimelineInput.js +1 -1
  88. package/build/browser/filter-list/base/inputs/TimelineInput.js.map +1 -1
  89. package/build/browser/filter-list/base/inputs/index.js +1 -1
  90. package/build/browser/filter-list/base/inputs/index.js.map +1 -1
  91. package/build/{esm/filter-list/base/inputs/useStaleData.js → browser/filter-list/base/inputs/useStableData.js} +5 -5
  92. package/build/browser/filter-list/base/inputs/useStableData.js.map +1 -0
  93. package/build/browser/filter-list/hooks/useFilterListState.js +3 -0
  94. package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
  95. package/build/browser/filter-list/hooks/useFilterVisibility.js +7 -1
  96. package/build/browser/filter-list/hooks/useFilterVisibility.js.map +1 -1
  97. package/build/browser/filter-list/hooks/usePropertyAggregation.js +3 -2
  98. package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -1
  99. package/build/browser/filter-list/inputs/CheckboxListFilterInput.js +15 -5
  100. package/build/browser/filter-list/inputs/CheckboxListFilterInput.js.map +1 -1
  101. package/build/browser/filter-list/inputs/DateRangeFilterInput.js +10 -6
  102. package/build/browser/filter-list/inputs/DateRangeFilterInput.js.map +1 -1
  103. package/build/browser/filter-list/inputs/LinkedPropertyInput.js +41 -18
  104. package/build/browser/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
  105. package/build/browser/filter-list/inputs/ListogramFilterInput.js +15 -5
  106. package/build/browser/filter-list/inputs/ListogramFilterInput.js.map +1 -1
  107. package/build/browser/filter-list/inputs/MultiSelectFilterInput.js +12 -4
  108. package/build/browser/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
  109. package/build/browser/filter-list/inputs/NumberRangeFilterInput.js +10 -6
  110. package/build/browser/filter-list/inputs/NumberRangeFilterInput.js.map +1 -1
  111. package/build/browser/filter-list/inputs/PropertyFilterInput.js +36 -10
  112. package/build/browser/filter-list/inputs/PropertyFilterInput.js.map +1 -1
  113. package/build/browser/filter-list/inputs/SingleSelectFilterInput.js +12 -4
  114. package/build/browser/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
  115. package/build/browser/filter-list/inputs/TextTagsFilterInput.js +12 -4
  116. package/build/browser/filter-list/inputs/TextTagsFilterInput.js.map +1 -1
  117. package/build/browser/filter-list/utils/filterStateToWhereClause.js +1 -1
  118. package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  119. package/build/browser/filter-list/utils/filterValues.js +29 -1
  120. package/build/browser/filter-list/utils/filterValues.js.map +1 -1
  121. package/build/browser/object-table/LoadingCell.js +2 -1
  122. package/build/browser/object-table/LoadingCell.js.map +1 -1
  123. package/build/browser/object-table/LoadingCell.module.css +3 -21
  124. package/build/browser/object-table/LoadingCell.module.css.js +1 -2
  125. package/build/browser/object-table/LoadingStateTable.js +2 -1
  126. package/build/browser/object-table/LoadingStateTable.js.map +1 -1
  127. package/build/browser/object-table/MultiColumnSortDialog.js +1 -3
  128. package/build/browser/object-table/MultiColumnSortDialog.js.map +1 -1
  129. package/build/browser/object-table/MultiColumnSortDialog.module.css +0 -1
  130. package/build/browser/object-table/TableCell.module.css +1 -1
  131. package/build/browser/object-table/TableHeader.module.css +2 -2
  132. package/build/browser/object-table/TableHeaderWithPopover.js +2 -4
  133. package/build/browser/object-table/TableHeaderWithPopover.js.map +1 -1
  134. package/build/browser/object-table/TableHeaderWithPopover.module.css +1 -0
  135. package/build/browser/pdf-viewer/PdfRenderer.js +1 -1
  136. package/build/browser/pdf-viewer/PdfRenderer.js.map +1 -1
  137. package/build/browser/pdf-viewer/PdfViewer.js +59 -118
  138. package/build/browser/pdf-viewer/PdfViewer.js.map +1 -1
  139. package/build/browser/pdf-viewer/components/PdfViewerAnnotationLayer.js.map +1 -0
  140. package/build/{esm/pdf-viewer → browser/pdf-viewer/components}/PdfViewerAnnotationLayer.module.css +0 -1
  141. package/build/browser/pdf-viewer/components/PdfViewerAnnotationLayer.module.css.js +11 -0
  142. package/build/browser/pdf-viewer/components/PdfViewerContent.js +113 -0
  143. package/build/browser/pdf-viewer/components/PdfViewerContent.js.map +1 -0
  144. package/build/browser/pdf-viewer/components/PdfViewerOutlineSidebar.js +98 -0
  145. package/build/browser/pdf-viewer/components/PdfViewerOutlineSidebar.js.map +1 -0
  146. package/build/browser/pdf-viewer/components/PdfViewerOutlineSidebar.module.css +89 -0
  147. package/build/browser/pdf-viewer/components/PdfViewerOutlineSidebar.module.css.js +15 -0
  148. package/build/browser/pdf-viewer/components/PdfViewerSearchBar.js.map +1 -0
  149. package/build/browser/pdf-viewer/components/PdfViewerSearchBar.module.css.js +10 -0
  150. package/build/browser/pdf-viewer/{PdfViewerSidebar.js → components/PdfViewerSidebar.js} +9 -5
  151. package/build/browser/pdf-viewer/components/PdfViewerSidebar.js.map +1 -0
  152. package/build/{esm/pdf-viewer → browser/pdf-viewer/components}/PdfViewerSidebar.module.css +0 -9
  153. package/build/browser/pdf-viewer/{PdfViewerSidebar.module.css.js → components/PdfViewerSidebar.module.css.js} +5 -6
  154. package/build/browser/pdf-viewer/components/PdfViewerSidebarHeader.js +54 -0
  155. package/build/browser/pdf-viewer/components/PdfViewerSidebarHeader.js.map +1 -0
  156. package/build/browser/pdf-viewer/components/PdfViewerSidebarHeader.module.css +70 -0
  157. package/build/browser/pdf-viewer/components/PdfViewerSidebarHeader.module.css.js +8 -0
  158. package/build/browser/pdf-viewer/{PdfViewerThumbnail.js → components/PdfViewerThumbnail.js} +1 -1
  159. package/build/browser/pdf-viewer/components/PdfViewerThumbnail.js.map +1 -0
  160. package/build/browser/pdf-viewer/{PdfViewerThumbnail.module.css.js → components/PdfViewerThumbnail.module.css.js} +3 -3
  161. package/build/browser/pdf-viewer/{PdfViewerToolbar.js → components/PdfViewerToolbar.js} +39 -12
  162. package/build/browser/pdf-viewer/components/PdfViewerToolbar.js.map +1 -0
  163. package/build/browser/pdf-viewer/{PdfViewerToolbar.module.css → components/PdfViewerToolbar.module.css} +2 -2
  164. package/build/browser/pdf-viewer/components/PdfViewerToolbar.module.css.js +12 -0
  165. package/build/browser/pdf-viewer/constants.js +7 -5
  166. package/build/browser/pdf-viewer/constants.js.map +1 -1
  167. package/build/browser/pdf-viewer/hooks/usePdfDocument.js +2 -3
  168. package/build/browser/pdf-viewer/hooks/usePdfDocument.js.map +1 -1
  169. package/build/browser/pdf-viewer/hooks/usePdfOutline.js +268 -0
  170. package/build/browser/pdf-viewer/hooks/usePdfOutline.js.map +1 -0
  171. package/build/browser/pdf-viewer/hooks/usePdfViewer.js +12 -1
  172. package/build/browser/pdf-viewer/hooks/usePdfViewer.js.map +1 -1
  173. package/build/browser/pdf-viewer/hooks/usePdfViewerCore.js +80 -0
  174. package/build/browser/pdf-viewer/hooks/usePdfViewerCore.js.map +1 -0
  175. package/build/browser/pdf-viewer/hooks/usePdfViewerState.js +135 -0
  176. package/build/browser/pdf-viewer/hooks/usePdfViewerState.js.map +1 -0
  177. package/build/browser/pdf-viewer/types.js.map +1 -1
  178. package/build/browser/public/experimental.js +23 -2
  179. package/build/browser/public/experimental.js.map +1 -1
  180. package/build/browser/public/primitives.js +20 -0
  181. package/build/browser/public/primitives.js.map +1 -0
  182. package/build/browser/{filter-list/base/inputs → shared}/dateUtils.js +38 -2
  183. package/build/browser/shared/dateUtils.js.map +1 -0
  184. package/build/browser/styles.css +817 -136
  185. package/build/cjs/DateCalendar-QWGFKD6J.css +113 -0
  186. package/build/cjs/DateCalendar-QWGFKD6J.css.map +1 -0
  187. package/build/cjs/DateCalendar-R44GMN3O.cjs +67 -0
  188. package/build/cjs/DateCalendar-R44GMN3O.cjs.map +1 -0
  189. package/build/cjs/chunk-GT6IV6LV.cjs +163 -0
  190. package/build/cjs/chunk-GT6IV6LV.cjs.map +1 -0
  191. package/build/cjs/chunk-HMQTYQEX.cjs +9 -0
  192. package/build/cjs/chunk-HMQTYQEX.cjs.map +1 -0
  193. package/build/cjs/chunk-UZ2E5NRX.cjs +8 -0
  194. package/build/cjs/chunk-UZ2E5NRX.cjs.map +1 -0
  195. package/build/cjs/index.cjs +2 -0
  196. package/build/cjs/public/experimental.cjs +3227 -1848
  197. package/build/cjs/public/experimental.cjs.map +1 -1
  198. package/build/cjs/public/experimental.css +650 -172
  199. package/build/cjs/public/experimental.css.map +1 -1
  200. package/build/cjs/public/experimental.d.cts +685 -17
  201. package/build/cjs/public/primitives.cjs +25 -0
  202. package/build/cjs/public/primitives.cjs.map +1 -0
  203. package/build/cjs/public/primitives.css +154 -0
  204. package/build/cjs/public/primitives.css.map +1 -0
  205. package/build/cjs/public/primitives.d.cts +49 -0
  206. package/build/esm/action-form/ActionFormApi.js.map +1 -1
  207. package/build/esm/action-form/BaseForm.js +18 -5
  208. package/build/esm/action-form/BaseForm.js.map +1 -1
  209. package/build/esm/action-form/BaseForm.module.css +38 -0
  210. package/build/esm/action-form/FormField.js +42 -0
  211. package/build/esm/action-form/FormField.js.map +1 -0
  212. package/build/esm/action-form/FormField.module.css +41 -0
  213. package/build/esm/action-form/FormFieldApi.js.map +1 -1
  214. package/build/esm/action-form/FormHeader.js +26 -0
  215. package/build/esm/action-form/FormHeader.js.map +1 -0
  216. package/build/esm/action-form/FormHeader.module.css +26 -0
  217. package/build/esm/action-form/fields/DateCalendar.js +70 -0
  218. package/build/esm/action-form/fields/DateCalendar.js.map +1 -0
  219. package/build/esm/action-form/fields/DateCalendar.module.css +136 -0
  220. package/build/esm/action-form/fields/DatetimePickerField.js +98 -0
  221. package/build/esm/action-form/fields/DatetimePickerField.js.map +1 -0
  222. package/build/esm/action-form/fields/DatetimePickerField.module.css +66 -0
  223. package/build/esm/action-form/fields/FormFieldRenderer.js +17 -6
  224. package/build/esm/action-form/fields/FormFieldRenderer.js.map +1 -1
  225. package/build/esm/action-form/fields/LazyDateCalendar.js +27 -0
  226. package/build/esm/action-form/fields/LazyDateCalendar.js.map +1 -0
  227. package/build/esm/action-form/fields/TextInputField.js +2 -0
  228. package/build/esm/action-form/fields/TextInputField.js.map +1 -1
  229. package/build/esm/action-form/fields/TextInputField.module.css +56 -0
  230. package/build/esm/base-components/checkbox/Checkbox.js +2 -2
  231. package/build/esm/base-components/checkbox/Checkbox.js.map +1 -1
  232. package/build/esm/base-components/checkbox/Checkbox.module.css +0 -4
  233. package/build/esm/base-components/combobox/Combobox.js +3 -8
  234. package/build/esm/base-components/combobox/Combobox.js.map +1 -1
  235. package/build/esm/base-components/combobox/Combobox.module.css +0 -3
  236. package/build/esm/base-components/draggable-list/DraggableList.js +2 -4
  237. package/build/esm/base-components/draggable-list/DraggableList.js.map +1 -1
  238. package/build/esm/base-components/search-bar/SearchBar.module.css +2 -2
  239. package/build/esm/base-components/select/Select.js +1 -3
  240. package/build/esm/base-components/select/Select.js.map +1 -1
  241. package/build/esm/base-components/select/Select.module.css +0 -2
  242. package/build/esm/base-components/switch/Switch.module.css +0 -1
  243. package/build/esm/filter-list/FilterInput.js +14 -5
  244. package/build/esm/filter-list/FilterInput.js.map +1 -1
  245. package/build/esm/filter-list/FilterList.js +22 -10
  246. package/build/esm/filter-list/FilterList.js.map +1 -1
  247. package/build/esm/filter-list/FilterListApi.js.map +1 -1
  248. package/build/esm/filter-list/base/AddFilterPopover.js +4 -3
  249. package/build/esm/filter-list/base/AddFilterPopover.js.map +1 -1
  250. package/build/esm/filter-list/base/BaseFilterList.js +3 -1
  251. package/build/esm/filter-list/base/BaseFilterList.js.map +1 -1
  252. package/build/esm/filter-list/base/BaseFilterListApi.js.map +1 -1
  253. package/build/esm/filter-list/base/ExcludeDropdown.js +61 -0
  254. package/build/esm/filter-list/base/ExcludeDropdown.js.map +1 -0
  255. package/build/esm/filter-list/base/ExcludeDropdown.module.css +94 -0
  256. package/build/esm/filter-list/base/FilterIcons.js +0 -39
  257. package/build/esm/filter-list/base/FilterIcons.js.map +1 -1
  258. package/build/esm/filter-list/base/FilterInputExcludeRow.js +55 -0
  259. package/build/esm/filter-list/base/FilterInputExcludeRow.js.map +1 -0
  260. package/build/esm/filter-list/base/FilterListHeader.js +3 -2
  261. package/build/esm/filter-list/base/FilterListHeader.js.map +1 -1
  262. package/build/esm/filter-list/base/FilterListItem.js +72 -23
  263. package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
  264. package/build/esm/filter-list/base/FilterListItem.module.css +96 -20
  265. package/build/esm/filter-list/base/inputs/CheckboxListInput.js +2 -2
  266. package/build/esm/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
  267. package/build/esm/filter-list/base/inputs/ContainsTextInput.js +2 -6
  268. package/build/esm/filter-list/base/inputs/ContainsTextInput.js.map +1 -1
  269. package/build/esm/filter-list/base/inputs/DateRangeInput.js +1 -1
  270. package/build/esm/filter-list/base/inputs/DateRangeInput.js.map +1 -1
  271. package/build/esm/filter-list/base/inputs/ListogramInput.js +2 -2
  272. package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
  273. package/build/esm/filter-list/base/inputs/MultiDateInput.js +1 -1
  274. package/build/esm/filter-list/base/inputs/MultiDateInput.js.map +1 -1
  275. package/build/esm/filter-list/base/inputs/RangeInput.js +2 -2
  276. package/build/esm/filter-list/base/inputs/RangeInput.js.map +1 -1
  277. package/build/esm/filter-list/base/inputs/SingleDateInput.js +1 -1
  278. package/build/esm/filter-list/base/inputs/SingleDateInput.js.map +1 -1
  279. package/build/esm/filter-list/base/inputs/SingleSelectInput.js +1 -3
  280. package/build/esm/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
  281. package/build/esm/filter-list/base/inputs/TimelineInput.js +1 -1
  282. package/build/esm/filter-list/base/inputs/TimelineInput.js.map +1 -1
  283. package/build/esm/filter-list/base/inputs/index.js +1 -1
  284. package/build/esm/filter-list/base/inputs/index.js.map +1 -1
  285. package/build/{browser/filter-list/base/inputs/useStaleData.js → esm/filter-list/base/inputs/useStableData.js} +5 -5
  286. package/build/esm/filter-list/base/inputs/useStableData.js.map +1 -0
  287. package/build/esm/filter-list/hooks/useFilterListState.js +3 -0
  288. package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
  289. package/build/esm/filter-list/hooks/useFilterVisibility.js +7 -1
  290. package/build/esm/filter-list/hooks/useFilterVisibility.js.map +1 -1
  291. package/build/esm/filter-list/hooks/usePropertyAggregation.js +3 -2
  292. package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -1
  293. package/build/esm/filter-list/inputs/CheckboxListFilterInput.js +15 -5
  294. package/build/esm/filter-list/inputs/CheckboxListFilterInput.js.map +1 -1
  295. package/build/esm/filter-list/inputs/DateRangeFilterInput.js +10 -6
  296. package/build/esm/filter-list/inputs/DateRangeFilterInput.js.map +1 -1
  297. package/build/esm/filter-list/inputs/LinkedPropertyInput.js +41 -18
  298. package/build/esm/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
  299. package/build/esm/filter-list/inputs/ListogramFilterInput.js +15 -5
  300. package/build/esm/filter-list/inputs/ListogramFilterInput.js.map +1 -1
  301. package/build/esm/filter-list/inputs/MultiSelectFilterInput.js +12 -4
  302. package/build/esm/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
  303. package/build/esm/filter-list/inputs/NumberRangeFilterInput.js +10 -6
  304. package/build/esm/filter-list/inputs/NumberRangeFilterInput.js.map +1 -1
  305. package/build/esm/filter-list/inputs/PropertyFilterInput.js +36 -10
  306. package/build/esm/filter-list/inputs/PropertyFilterInput.js.map +1 -1
  307. package/build/esm/filter-list/inputs/SingleSelectFilterInput.js +12 -4
  308. package/build/esm/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
  309. package/build/esm/filter-list/inputs/TextTagsFilterInput.js +12 -4
  310. package/build/esm/filter-list/inputs/TextTagsFilterInput.js.map +1 -1
  311. package/build/esm/filter-list/utils/filterStateToWhereClause.js +1 -1
  312. package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  313. package/build/esm/filter-list/utils/filterValues.js +29 -1
  314. package/build/esm/filter-list/utils/filterValues.js.map +1 -1
  315. package/build/esm/object-table/LoadingCell.js +2 -1
  316. package/build/esm/object-table/LoadingCell.js.map +1 -1
  317. package/build/esm/object-table/LoadingCell.module.css +3 -21
  318. package/build/esm/object-table/LoadingStateTable.js +2 -1
  319. package/build/esm/object-table/LoadingStateTable.js.map +1 -1
  320. package/build/esm/object-table/MultiColumnSortDialog.js +1 -3
  321. package/build/esm/object-table/MultiColumnSortDialog.js.map +1 -1
  322. package/build/esm/object-table/MultiColumnSortDialog.module.css +0 -1
  323. package/build/esm/object-table/TableCell.module.css +1 -1
  324. package/build/esm/object-table/TableHeader.module.css +2 -2
  325. package/build/esm/object-table/TableHeaderWithPopover.js +2 -4
  326. package/build/esm/object-table/TableHeaderWithPopover.js.map +1 -1
  327. package/build/esm/object-table/TableHeaderWithPopover.module.css +1 -0
  328. package/build/esm/pdf-viewer/PdfRenderer.js +1 -1
  329. package/build/esm/pdf-viewer/PdfRenderer.js.map +1 -1
  330. package/build/esm/pdf-viewer/PdfViewer.js +59 -118
  331. package/build/esm/pdf-viewer/PdfViewer.js.map +1 -1
  332. package/build/esm/pdf-viewer/components/PdfViewerAnnotationLayer.js.map +1 -0
  333. package/build/{browser/pdf-viewer → esm/pdf-viewer/components}/PdfViewerAnnotationLayer.module.css +0 -1
  334. package/build/esm/pdf-viewer/components/PdfViewerContent.js +113 -0
  335. package/build/esm/pdf-viewer/components/PdfViewerContent.js.map +1 -0
  336. package/build/esm/pdf-viewer/components/PdfViewerOutlineSidebar.js +98 -0
  337. package/build/esm/pdf-viewer/components/PdfViewerOutlineSidebar.js.map +1 -0
  338. package/build/esm/pdf-viewer/components/PdfViewerOutlineSidebar.module.css +89 -0
  339. package/build/esm/pdf-viewer/components/PdfViewerSearchBar.js.map +1 -0
  340. package/build/esm/pdf-viewer/{PdfViewerSidebar.js → components/PdfViewerSidebar.js} +9 -5
  341. package/build/esm/pdf-viewer/components/PdfViewerSidebar.js.map +1 -0
  342. package/build/{browser/pdf-viewer → esm/pdf-viewer/components}/PdfViewerSidebar.module.css +0 -9
  343. package/build/esm/pdf-viewer/components/PdfViewerSidebarHeader.js +54 -0
  344. package/build/esm/pdf-viewer/components/PdfViewerSidebarHeader.js.map +1 -0
  345. package/build/esm/pdf-viewer/components/PdfViewerSidebarHeader.module.css +70 -0
  346. package/build/esm/pdf-viewer/{PdfViewerThumbnail.js → components/PdfViewerThumbnail.js} +1 -1
  347. package/build/esm/pdf-viewer/components/PdfViewerThumbnail.js.map +1 -0
  348. package/build/esm/pdf-viewer/{PdfViewerToolbar.js → components/PdfViewerToolbar.js} +39 -12
  349. package/build/esm/pdf-viewer/components/PdfViewerToolbar.js.map +1 -0
  350. package/build/esm/pdf-viewer/{PdfViewerToolbar.module.css → components/PdfViewerToolbar.module.css} +2 -2
  351. package/build/esm/pdf-viewer/constants.js +7 -5
  352. package/build/esm/pdf-viewer/constants.js.map +1 -1
  353. package/build/esm/pdf-viewer/hooks/usePdfDocument.js +2 -3
  354. package/build/esm/pdf-viewer/hooks/usePdfDocument.js.map +1 -1
  355. package/build/esm/pdf-viewer/hooks/usePdfOutline.js +268 -0
  356. package/build/esm/pdf-viewer/hooks/usePdfOutline.js.map +1 -0
  357. package/build/esm/pdf-viewer/hooks/usePdfViewer.js +12 -1
  358. package/build/esm/pdf-viewer/hooks/usePdfViewer.js.map +1 -1
  359. package/build/esm/pdf-viewer/hooks/usePdfViewerCore.js +80 -0
  360. package/build/esm/pdf-viewer/hooks/usePdfViewerCore.js.map +1 -0
  361. package/build/esm/pdf-viewer/hooks/usePdfViewerState.js +135 -0
  362. package/build/esm/pdf-viewer/hooks/usePdfViewerState.js.map +1 -0
  363. package/build/esm/pdf-viewer/types.js.map +1 -1
  364. package/build/esm/public/experimental.js +23 -2
  365. package/build/esm/public/experimental.js.map +1 -1
  366. package/build/esm/public/primitives.js +20 -0
  367. package/build/esm/public/primitives.js.map +1 -0
  368. package/build/esm/{filter-list/base/inputs → shared}/dateUtils.js +38 -2
  369. package/build/esm/shared/dateUtils.js.map +1 -0
  370. package/build/types/action-form/ActionFormApi.d.ts +1 -0
  371. package/build/types/action-form/ActionFormApi.d.ts.map +1 -1
  372. package/build/types/action-form/BaseForm.d.ts.map +1 -1
  373. package/build/types/action-form/FormField.d.ts +11 -0
  374. package/build/types/action-form/FormField.d.ts.map +1 -0
  375. package/build/types/action-form/FormFieldApi.d.ts +22 -8
  376. package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
  377. package/build/types/action-form/FormHeader.d.ts +6 -0
  378. package/build/types/action-form/FormHeader.d.ts.map +1 -0
  379. package/build/types/action-form/fields/DateCalendar.d.ts +9 -0
  380. package/build/types/action-form/fields/DateCalendar.d.ts.map +1 -0
  381. package/build/types/action-form/fields/DatetimePickerField.d.ts +3 -0
  382. package/build/types/action-form/fields/DatetimePickerField.d.ts.map +1 -0
  383. package/build/types/action-form/fields/FormFieldRenderer.d.ts.map +1 -1
  384. package/build/types/action-form/fields/LazyDateCalendar.d.ts +3 -0
  385. package/build/types/action-form/fields/LazyDateCalendar.d.ts.map +1 -0
  386. package/build/types/action-form/fields/TextInputField.d.ts.map +1 -1
  387. package/build/types/filter-list/FilterInput.d.ts +3 -1
  388. package/build/types/filter-list/FilterInput.d.ts.map +1 -1
  389. package/build/types/filter-list/FilterListApi.d.ts +14 -10
  390. package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
  391. package/build/types/filter-list/base/AddFilterPopover.d.ts +2 -1
  392. package/build/types/filter-list/base/AddFilterPopover.d.ts.map +1 -1
  393. package/build/types/filter-list/base/BaseFilterListApi.d.ts +4 -1
  394. package/build/types/filter-list/base/BaseFilterListApi.d.ts.map +1 -1
  395. package/build/types/filter-list/base/ExcludeDropdown.d.ts +8 -0
  396. package/build/types/filter-list/base/ExcludeDropdown.d.ts.map +1 -0
  397. package/build/types/filter-list/base/FilterIcons.d.ts +0 -2
  398. package/build/types/filter-list/base/FilterIcons.d.ts.map +1 -1
  399. package/build/types/filter-list/base/FilterInputExcludeRow.d.ts +12 -0
  400. package/build/types/filter-list/base/FilterInputExcludeRow.d.ts.map +1 -0
  401. package/build/types/filter-list/base/FilterListHeader.d.ts +3 -2
  402. package/build/types/filter-list/base/FilterListHeader.d.ts.map +1 -1
  403. package/build/types/filter-list/base/FilterListItem.d.ts.map +1 -1
  404. package/build/types/filter-list/base/inputs/DateRangeInput.d.ts.map +1 -1
  405. package/build/types/filter-list/base/inputs/SingleDateInput.d.ts.map +1 -1
  406. package/build/types/filter-list/base/inputs/index.d.ts +1 -1
  407. package/build/types/filter-list/base/inputs/index.d.ts.map +1 -1
  408. package/build/types/filter-list/base/inputs/useStableData.d.ts +1 -0
  409. package/build/types/filter-list/base/inputs/useStableData.d.ts.map +1 -0
  410. package/build/types/filter-list/hooks/useFilterVisibility.d.ts +2 -0
  411. package/build/types/filter-list/hooks/useFilterVisibility.d.ts.map +1 -1
  412. package/build/types/filter-list/hooks/usePropertyAggregation.d.ts +2 -2
  413. package/build/types/filter-list/hooks/usePropertyAggregation.d.ts.map +1 -1
  414. package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts +5 -2
  415. package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts.map +1 -1
  416. package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts +3 -2
  417. package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts.map +1 -1
  418. package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts +2 -1
  419. package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts.map +1 -1
  420. package/build/types/filter-list/inputs/ListogramFilterInput.d.ts +5 -2
  421. package/build/types/filter-list/inputs/ListogramFilterInput.d.ts.map +1 -1
  422. package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts +4 -2
  423. package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts.map +1 -1
  424. package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts +3 -2
  425. package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts.map +1 -1
  426. package/build/types/filter-list/inputs/PropertyFilterInput.d.ts +3 -1
  427. package/build/types/filter-list/inputs/PropertyFilterInput.d.ts.map +1 -1
  428. package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts +4 -2
  429. package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts.map +1 -1
  430. package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts +4 -2
  431. package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts.map +1 -1
  432. package/build/types/filter-list/utils/filterValues.d.ts +2 -0
  433. package/build/types/filter-list/utils/filterValues.d.ts.map +1 -1
  434. package/build/types/object-table/LoadingCell.d.ts.map +1 -1
  435. package/build/types/object-table/LoadingStateTable.d.ts.map +1 -1
  436. package/build/types/pdf-viewer/PdfRenderer.d.ts +2 -2
  437. package/build/types/pdf-viewer/PdfRenderer.d.ts.map +1 -1
  438. package/build/types/pdf-viewer/PdfViewer.d.ts +1 -1
  439. package/build/types/pdf-viewer/PdfViewer.d.ts.map +1 -1
  440. package/build/types/pdf-viewer/{PdfViewerAnnotationLayer.d.ts → components/PdfViewerAnnotationLayer.d.ts} +2 -3
  441. package/build/types/pdf-viewer/components/PdfViewerAnnotationLayer.d.ts.map +1 -0
  442. package/build/types/pdf-viewer/components/PdfViewerContent.d.ts +22 -0
  443. package/build/types/pdf-viewer/components/PdfViewerContent.d.ts.map +1 -0
  444. package/build/types/pdf-viewer/components/PdfViewerOutlineSidebar.d.ts +11 -0
  445. package/build/types/pdf-viewer/components/PdfViewerOutlineSidebar.d.ts.map +1 -0
  446. package/build/types/pdf-viewer/{PdfViewerSearchBar.d.ts → components/PdfViewerSearchBar.d.ts} +1 -2
  447. package/build/types/pdf-viewer/components/PdfViewerSearchBar.d.ts.map +1 -0
  448. package/build/types/pdf-viewer/components/PdfViewerSidebar.d.ts +12 -0
  449. package/build/types/pdf-viewer/components/PdfViewerSidebar.d.ts.map +1 -0
  450. package/build/types/pdf-viewer/components/PdfViewerSidebarHeader.d.ts +7 -0
  451. package/build/types/pdf-viewer/components/PdfViewerSidebarHeader.d.ts.map +1 -0
  452. package/build/types/pdf-viewer/{PdfViewerThumbnail.d.ts.map → components/PdfViewerThumbnail.d.ts.map} +1 -1
  453. package/build/types/pdf-viewer/{PdfViewerToolbar.d.ts → components/PdfViewerToolbar.d.ts} +5 -3
  454. package/build/types/pdf-viewer/components/PdfViewerToolbar.d.ts.map +1 -0
  455. package/build/types/pdf-viewer/constants.d.ts +5 -0
  456. package/build/types/pdf-viewer/constants.d.ts.map +1 -1
  457. package/build/types/pdf-viewer/hooks/usePdfDocument.d.ts.map +1 -1
  458. package/build/types/pdf-viewer/hooks/usePdfOutline.d.ts +3 -0
  459. package/build/types/pdf-viewer/hooks/usePdfOutline.d.ts.map +1 -0
  460. package/build/types/pdf-viewer/hooks/usePdfViewer.d.ts +1 -1
  461. package/build/types/pdf-viewer/hooks/usePdfViewer.d.ts.map +1 -1
  462. package/build/types/pdf-viewer/hooks/usePdfViewerCore.d.ts +43 -0
  463. package/build/types/pdf-viewer/hooks/usePdfViewerCore.d.ts.map +1 -0
  464. package/build/types/pdf-viewer/hooks/usePdfViewerState.d.ts +39 -0
  465. package/build/types/pdf-viewer/hooks/usePdfViewerState.d.ts.map +1 -0
  466. package/build/types/pdf-viewer/types.d.ts +42 -0
  467. package/build/types/pdf-viewer/types.d.ts.map +1 -1
  468. package/build/types/public/experimental.d.ts +21 -2
  469. package/build/types/public/experimental.d.ts.map +1 -1
  470. package/build/types/public/primitives.d.ts +3 -0
  471. package/build/types/public/primitives.d.ts.map +1 -0
  472. package/build/types/shared/dateUtils.d.ts +31 -0
  473. package/build/types/shared/dateUtils.d.ts.map +1 -0
  474. package/package.json +14 -4
  475. package/primitives.d.ts +17 -0
  476. package/build/browser/filter-list/base/inputs/dateUtils.js.map +0 -1
  477. package/build/browser/filter-list/base/inputs/useStaleData.js.map +0 -1
  478. package/build/browser/pdf-viewer/PdfViewerAnnotationLayer.js.map +0 -1
  479. package/build/browser/pdf-viewer/PdfViewerAnnotationLayer.module.css.js +0 -11
  480. package/build/browser/pdf-viewer/PdfViewerSearchBar.js.map +0 -1
  481. package/build/browser/pdf-viewer/PdfViewerSearchBar.module.css.js +0 -10
  482. package/build/browser/pdf-viewer/PdfViewerSidebar.js.map +0 -1
  483. package/build/browser/pdf-viewer/PdfViewerThumbnail.js.map +0 -1
  484. package/build/browser/pdf-viewer/PdfViewerToolbar.js.map +0 -1
  485. package/build/browser/pdf-viewer/PdfViewerToolbar.module.css.js +0 -12
  486. package/build/esm/filter-list/base/inputs/dateUtils.js.map +0 -1
  487. package/build/esm/filter-list/base/inputs/useStaleData.js.map +0 -1
  488. package/build/esm/pdf-viewer/PdfViewerAnnotationLayer.js.map +0 -1
  489. package/build/esm/pdf-viewer/PdfViewerSearchBar.js.map +0 -1
  490. package/build/esm/pdf-viewer/PdfViewerSidebar.js.map +0 -1
  491. package/build/esm/pdf-viewer/PdfViewerThumbnail.js.map +0 -1
  492. package/build/esm/pdf-viewer/PdfViewerToolbar.js.map +0 -1
  493. package/build/types/filter-list/base/inputs/dateUtils.d.ts +0 -17
  494. package/build/types/filter-list/base/inputs/dateUtils.d.ts.map +0 -1
  495. package/build/types/filter-list/base/inputs/useStaleData.d.ts +0 -1
  496. package/build/types/filter-list/base/inputs/useStaleData.d.ts.map +0 -1
  497. package/build/types/pdf-viewer/PdfViewerAnnotationLayer.d.ts.map +0 -1
  498. package/build/types/pdf-viewer/PdfViewerSearchBar.d.ts.map +0 -1
  499. package/build/types/pdf-viewer/PdfViewerSidebar.d.ts +0 -10
  500. package/build/types/pdf-viewer/PdfViewerSidebar.d.ts.map +0 -1
  501. package/build/types/pdf-viewer/PdfViewerToolbar.d.ts.map +0 -1
  502. /package/build/browser/pdf-viewer/{PdfViewerAnnotationLayer.js → components/PdfViewerAnnotationLayer.js} +0 -0
  503. /package/build/browser/pdf-viewer/{PdfViewerSearchBar.js → components/PdfViewerSearchBar.js} +0 -0
  504. /package/build/browser/pdf-viewer/{PdfViewerSearchBar.module.css → components/PdfViewerSearchBar.module.css} +0 -0
  505. /package/build/browser/pdf-viewer/{PdfViewerThumbnail.module.css → components/PdfViewerThumbnail.module.css} +0 -0
  506. /package/build/esm/pdf-viewer/{PdfViewerAnnotationLayer.js → components/PdfViewerAnnotationLayer.js} +0 -0
  507. /package/build/esm/pdf-viewer/{PdfViewerSearchBar.js → components/PdfViewerSearchBar.js} +0 -0
  508. /package/build/esm/pdf-viewer/{PdfViewerSearchBar.module.css → components/PdfViewerSearchBar.module.css} +0 -0
  509. /package/build/esm/pdf-viewer/{PdfViewerThumbnail.module.css → components/PdfViewerThumbnail.module.css} +0 -0
  510. /package/build/types/pdf-viewer/{PdfViewerThumbnail.d.ts → components/PdfViewerThumbnail.d.ts} +0 -0
@@ -16,12 +16,13 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
16
16
  */
17
17
 
18
18
  import { Button } from "@base-ui/react/button";
19
+ import { Input } from "@base-ui/react/input";
19
20
  import classnames from "classnames";
20
- import React, { memo, useCallback } from "react";
21
+ import React, { memo, useCallback, useState } from "react";
21
22
  import { ErrorBoundary } from "../../shared/ErrorBoundary.js";
22
- import { supportsExcluding } from "../utils/filterValues.js";
23
+ import { supportsExcluding, supportsSearch } from "../utils/filterValues.js";
23
24
  import { DragHandleIcon } from "./DragHandleIcon.js";
24
- import { ExcludeIcon, IncludeIcon, RemoveIcon } from "./FilterIcons.js";
25
+ import { OverflowMenuIcon, RemoveIcon, SearchIcon } from "./FilterIcons.js";
25
26
  import styles from "./FilterListItem.module.css.js";
26
27
  function FilterListItemInner({
27
28
  definition,
@@ -36,26 +37,52 @@ function FilterListItemInner({
36
37
  className,
37
38
  style
38
39
  }) {
40
+ const [searchState, setSearchState] = useState({
41
+ type: "closed"
42
+ });
43
+ const [excludeRowOpen, setExcludeRowOpen] = useState(false);
39
44
  const handleFilterStateChanged = useCallback(newState => {
40
45
  onFilterStateChanged(filterKey, newState);
41
46
  }, [filterKey, onFilterStateChanged]);
42
- const handleToggleExclude = useCallback(() => {
43
- if (filterState) {
44
- onFilterStateChanged(filterKey, {
45
- ...filterState,
46
- isExcluding: !filterState.isExcluding
47
- });
48
- }
49
- }, [filterKey, filterState, onFilterStateChanged]);
47
+ const handleToggleSearch = useCallback(() => {
48
+ setSearchState(prev => prev.type === "closed" ? {
49
+ type: "open",
50
+ query: ""
51
+ } : {
52
+ type: "closed"
53
+ });
54
+ }, []);
55
+ const handleSearchChange = useCallback(e => {
56
+ setSearchState({
57
+ type: "open",
58
+ query: e.target.value
59
+ });
60
+ }, []);
61
+ const handleSearchClear = useCallback(() => {
62
+ setSearchState({
63
+ type: "open",
64
+ query: ""
65
+ });
66
+ }, []);
50
67
  const handleRemove = useCallback(() => {
51
68
  onFilterRemoved?.(filterKey);
52
69
  }, [filterKey, onFilterRemoved]);
53
- const isExcluding = filterState?.isExcluding ?? false;
54
- const showExcludeToggle = supportsExcluding(filterState);
70
+ const handleToggleExcludeRow = useCallback(() => {
71
+ setExcludeRowOpen(prev => !prev);
72
+ }, []);
73
+ const searchInputRef = useCallback(element => {
74
+ element?.focus({
75
+ preventScroll: true
76
+ });
77
+ }, []);
78
+ const showExcludeDropdown = supportsExcluding(filterState);
79
+ const showSearch = supportsSearch(filterState);
80
+ const searchOpen = searchState.type === "open";
81
+ const searchQuery = searchState.type === "open" ? searchState.query : "";
82
+ const searchQueryForInput = searchState.type === "open" ? searchState.query : undefined;
55
83
  return /*#__PURE__*/React.createElement("div", {
56
84
  className: classnames(styles.filterItem, className),
57
- style: style,
58
- "data-excluding": isExcluding || undefined
85
+ style: style
59
86
  }, /*#__PURE__*/React.createElement("div", {
60
87
  className: styles.itemHeader
61
88
  }, dragHandleAttributes && /*#__PURE__*/React.createElement(Button, _extends({
@@ -63,15 +90,35 @@ function FilterListItemInner({
63
90
  "aria-label": `Reorder ${label}`
64
91
  }, dragHandleAttributes, dragHandleListeners), /*#__PURE__*/React.createElement(DragHandleIcon, null)), /*#__PURE__*/React.createElement("span", {
65
92
  className: styles.itemLabel
66
- }, label), showExcludeToggle && /*#__PURE__*/React.createElement(Button, {
67
- className: styles.excludeToggle,
68
- onClick: handleToggleExclude,
69
- "aria-pressed": isExcluding,
70
- "aria-label": isExcluding ? "Switch to include mode" : "Switch to exclude mode"
71
- }, isExcluding ? /*#__PURE__*/React.createElement(ExcludeIcon, null) : /*#__PURE__*/React.createElement(IncludeIcon, null)), onFilterRemoved && /*#__PURE__*/React.createElement(Button, {
72
- className: styles.removeButton,
93
+ }, label), showSearch && /*#__PURE__*/React.createElement(Button, {
94
+ className: styles.headerActionButton,
95
+ onClick: handleToggleSearch,
96
+ "aria-label": "Search values",
97
+ "aria-pressed": searchOpen
98
+ }, /*#__PURE__*/React.createElement(SearchIcon, null)), onFilterRemoved && /*#__PURE__*/React.createElement(Button, {
99
+ className: styles.headerActionButton,
73
100
  onClick: handleRemove,
74
101
  "aria-label": `Remove ${label} filter`
102
+ }, /*#__PURE__*/React.createElement(RemoveIcon, null)), showExcludeDropdown && /*#__PURE__*/React.createElement(Button, {
103
+ className: styles.headerActionButton,
104
+ onClick: handleToggleExcludeRow,
105
+ "aria-label": "More actions",
106
+ "aria-pressed": excludeRowOpen
107
+ }, /*#__PURE__*/React.createElement(OverflowMenuIcon, null))), searchOpen && /*#__PURE__*/React.createElement("div", {
108
+ className: styles.searchRow
109
+ }, /*#__PURE__*/React.createElement(Input, {
110
+ type: "text",
111
+ className: styles.searchInput,
112
+ value: searchQuery,
113
+ onChange: handleSearchChange,
114
+ placeholder: "Search property values...",
115
+ "aria-label": "Search property values",
116
+ ref: searchInputRef
117
+ }), searchQuery && /*#__PURE__*/React.createElement(Button, {
118
+ type: "button",
119
+ className: styles.searchClearButton,
120
+ onClick: handleSearchClear,
121
+ "aria-label": "Clear search"
75
122
  }, /*#__PURE__*/React.createElement(RemoveIcon, null))), /*#__PURE__*/React.createElement("div", {
76
123
  className: styles.itemContent
77
124
  }, /*#__PURE__*/React.createElement(ErrorBoundary, {
@@ -80,7 +127,9 @@ function FilterListItemInner({
80
127
  definition,
81
128
  filterKey,
82
129
  filterState,
83
- onFilterStateChanged: handleFilterStateChanged
130
+ onFilterStateChanged: handleFilterStateChanged,
131
+ searchQuery: searchQueryForInput,
132
+ excludeRowOpen
84
133
  }))));
85
134
  }
86
135
  export const FilterListItem = /*#__PURE__*/memo(FilterListItemInner);
@@ -1 +1 @@
1
- {"version":3,"file":"FilterListItem.js","names":["Button","classnames","React","memo","useCallback","ErrorBoundary","supportsExcluding","DragHandleIcon","ExcludeIcon","IncludeIcon","RemoveIcon","styles","FilterListItemInner","definition","filterKey","label","filterState","onFilterStateChanged","onFilterRemoved","renderInput","dragHandleAttributes","dragHandleListeners","className","style","handleFilterStateChanged","newState","handleToggleExclude","isExcluding","handleRemove","showExcludeToggle","createElement","filterItem","undefined","itemHeader","_extends","dragHandle","itemLabel","excludeToggle","onClick","removeButton","itemContent","errorMessage","FilterListItem"],"sources":["FilterListItem.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport type {\n DraggableAttributes,\n DraggableSyntheticListeners,\n} from \"@dnd-kit/core\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback } from \"react\";\nimport { ErrorBoundary } from \"../../shared/ErrorBoundary.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { supportsExcluding } from \"../utils/filterValues.js\";\nimport type { RenderFilterInput } from \"./BaseFilterListApi.js\";\nimport { DragHandleIcon } from \"./DragHandleIcon.js\";\nimport { ExcludeIcon, IncludeIcon, RemoveIcon } from \"./FilterIcons.js\";\nimport styles from \"./FilterListItem.module.css\";\n\ninterface FilterListItemProps<D> {\n definition: D;\n filterKey: string;\n label: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (\n filterKey: string,\n state: FilterState,\n ) => void;\n onFilterRemoved?: (filterKey: string) => void;\n renderInput: RenderFilterInput<D>;\n dragHandleAttributes?: DraggableAttributes;\n dragHandleListeners?: DraggableSyntheticListeners;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction FilterListItemInner<D>({\n definition,\n filterKey,\n label,\n filterState,\n onFilterStateChanged,\n onFilterRemoved,\n renderInput,\n dragHandleAttributes,\n dragHandleListeners,\n className,\n style,\n}: FilterListItemProps<D>): React.ReactElement {\n const handleFilterStateChanged = useCallback(\n (newState: FilterState) => {\n onFilterStateChanged(filterKey, newState);\n },\n [filterKey, onFilterStateChanged],\n );\n\n const handleToggleExclude = useCallback(\n () => {\n if (filterState) {\n onFilterStateChanged(filterKey, {\n ...filterState,\n isExcluding: !filterState.isExcluding,\n });\n }\n },\n [filterKey, filterState, onFilterStateChanged],\n );\n\n const handleRemove = useCallback(\n () => {\n onFilterRemoved?.(filterKey);\n },\n [filterKey, onFilterRemoved],\n );\n\n const isExcluding = filterState?.isExcluding ?? false;\n const showExcludeToggle = supportsExcluding(filterState);\n\n return (\n <div\n className={classnames(styles.filterItem, className)}\n style={style}\n data-excluding={isExcluding || undefined}\n >\n <div className={styles.itemHeader}>\n {dragHandleAttributes && (\n <Button\n className={styles.dragHandle}\n aria-label={`Reorder ${label}`}\n {...dragHandleAttributes}\n {...dragHandleListeners}\n >\n <DragHandleIcon />\n </Button>\n )}\n <span className={styles.itemLabel}>{label}</span>\n {showExcludeToggle && (\n <Button\n className={styles.excludeToggle}\n onClick={handleToggleExclude}\n aria-pressed={isExcluding}\n aria-label={isExcluding\n ? \"Switch to include mode\"\n : \"Switch to exclude mode\"}\n >\n {isExcluding ? <ExcludeIcon /> : <IncludeIcon />}\n </Button>\n )}\n {onFilterRemoved && (\n <Button\n className={styles.removeButton}\n onClick={handleRemove}\n aria-label={`Remove ${label} filter`}\n >\n <RemoveIcon />\n </Button>\n )}\n </div>\n\n <div className={styles.itemContent}>\n <ErrorBoundary errorMessage=\"Error loading filter\">\n {renderInput({\n definition,\n filterKey,\n filterState,\n onFilterStateChanged: handleFilterStateChanged,\n })}\n </ErrorBoundary>\n </div>\n </div>\n );\n}\n\nexport const FilterListItem = memo(\n FilterListItemInner,\n) as typeof FilterListItemInner;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FilterListItem.js","names":["Button","Input","classnames","React","memo","useCallback","useState","ErrorBoundary","supportsExcluding","supportsSearch","DragHandleIcon","OverflowMenuIcon","RemoveIcon","SearchIcon","styles","FilterListItemInner","definition","filterKey","label","filterState","onFilterStateChanged","onFilterRemoved","renderInput","dragHandleAttributes","dragHandleListeners","className","style","searchState","setSearchState","type","excludeRowOpen","setExcludeRowOpen","handleFilterStateChanged","newState","handleToggleSearch","prev","query","handleSearchChange","e","target","value","handleSearchClear","handleRemove","handleToggleExcludeRow","searchInputRef","element","focus","preventScroll","showExcludeDropdown","showSearch","searchOpen","searchQuery","searchQueryForInput","undefined","createElement","filterItem","itemHeader","_extends","dragHandle","itemLabel","headerActionButton","onClick","searchRow","searchInput","onChange","placeholder","ref","searchClearButton","itemContent","errorMessage","FilterListItem"],"sources":["FilterListItem.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport { Input } from \"@base-ui/react/input\";\nimport type {\n DraggableAttributes,\n DraggableSyntheticListeners,\n} from \"@dnd-kit/core\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useState } from \"react\";\nimport { ErrorBoundary } from \"../../shared/ErrorBoundary.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { supportsExcluding, supportsSearch } from \"../utils/filterValues.js\";\nimport type { RenderFilterInput } from \"./BaseFilterListApi.js\";\nimport { DragHandleIcon } from \"./DragHandleIcon.js\";\nimport { OverflowMenuIcon, RemoveIcon, SearchIcon } from \"./FilterIcons.js\";\nimport styles from \"./FilterListItem.module.css\";\n\ninterface FilterListItemProps<D> {\n definition: D;\n filterKey: string;\n label: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (\n filterKey: string,\n state: FilterState,\n ) => void;\n onFilterRemoved?: (filterKey: string) => void;\n renderInput: RenderFilterInput<D>;\n dragHandleAttributes?: DraggableAttributes;\n dragHandleListeners?: DraggableSyntheticListeners;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction FilterListItemInner<D>({\n definition,\n filterKey,\n label,\n filterState,\n onFilterStateChanged,\n onFilterRemoved,\n renderInput,\n dragHandleAttributes,\n dragHandleListeners,\n className,\n style,\n}: FilterListItemProps<D>): React.ReactElement {\n const [searchState, setSearchState] = useState<\n { type: \"closed\" } | { type: \"open\"; query: string }\n >({ type: \"closed\" });\n const [excludeRowOpen, setExcludeRowOpen] = useState(false);\n\n const handleFilterStateChanged = useCallback(\n (newState: FilterState) => {\n onFilterStateChanged(filterKey, newState);\n },\n [filterKey, onFilterStateChanged],\n );\n\n const handleToggleSearch = useCallback(() => {\n setSearchState((prev) =>\n prev.type === \"closed\" ? { type: \"open\", query: \"\" } : { type: \"closed\" }\n );\n }, []);\n\n const handleSearchChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchState({ type: \"open\", query: e.target.value });\n },\n [],\n );\n\n const handleSearchClear = useCallback(() => {\n setSearchState({ type: \"open\", query: \"\" });\n }, []);\n\n const handleRemove = useCallback(() => {\n onFilterRemoved?.(filterKey);\n }, [filterKey, onFilterRemoved]);\n\n const handleToggleExcludeRow = useCallback(() => {\n setExcludeRowOpen((prev) => !prev);\n }, []);\n\n const searchInputRef = useCallback((element: HTMLInputElement | null) => {\n element?.focus({ preventScroll: true });\n }, []);\n\n const showExcludeDropdown = supportsExcluding(filterState);\n const showSearch = supportsSearch(filterState);\n const hasOverflowActions = showExcludeDropdown;\n\n const searchOpen = searchState.type === \"open\";\n const searchQuery = searchState.type === \"open\" ? searchState.query : \"\";\n const searchQueryForInput = searchState.type === \"open\"\n ? searchState.query\n : undefined;\n\n return (\n <div\n className={classnames(styles.filterItem, className)}\n style={style}\n >\n <div className={styles.itemHeader}>\n {dragHandleAttributes && (\n <Button\n className={styles.dragHandle}\n aria-label={`Reorder ${label}`}\n {...dragHandleAttributes}\n {...dragHandleListeners}\n >\n <DragHandleIcon />\n </Button>\n )}\n <span className={styles.itemLabel}>{label}</span>\n {showSearch && (\n <Button\n className={styles.headerActionButton}\n onClick={handleToggleSearch}\n aria-label=\"Search values\"\n aria-pressed={searchOpen}\n >\n <SearchIcon />\n </Button>\n )}\n {onFilterRemoved && (\n <Button\n className={styles.headerActionButton}\n onClick={handleRemove}\n aria-label={`Remove ${label} filter`}\n >\n <RemoveIcon />\n </Button>\n )}\n {hasOverflowActions && (\n <Button\n className={styles.headerActionButton}\n onClick={handleToggleExcludeRow}\n aria-label=\"More actions\"\n aria-pressed={excludeRowOpen}\n >\n <OverflowMenuIcon />\n </Button>\n )}\n </div>\n\n {searchOpen && (\n <div className={styles.searchRow}>\n <Input\n type=\"text\"\n className={styles.searchInput}\n value={searchQuery}\n onChange={handleSearchChange}\n placeholder=\"Search property values...\"\n aria-label=\"Search property values\"\n ref={searchInputRef}\n />\n {searchQuery && (\n <Button\n type=\"button\"\n className={styles.searchClearButton}\n onClick={handleSearchClear}\n aria-label=\"Clear search\"\n >\n <RemoveIcon />\n </Button>\n )}\n </div>\n )}\n\n <div className={styles.itemContent}>\n <ErrorBoundary errorMessage=\"Error loading filter\">\n {renderInput({\n definition,\n filterKey,\n filterState,\n onFilterStateChanged: handleFilterStateChanged,\n searchQuery: searchQueryForInput,\n excludeRowOpen,\n })}\n </ErrorBoundary>\n </div>\n </div>\n );\n}\n\nexport const FilterListItem = memo(\n FilterListItemInner,\n) as typeof FilterListItemInner;\n"],"mappings":"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","ignoreList":[]}
@@ -18,6 +18,8 @@
18
18
  display: flex;
19
19
  flex-direction: column;
20
20
  gap: var(--osdk-filter-item-gap);
21
+ border-radius: var(--osdk-filter-item-border-radius);
22
+ padding: var(--osdk-filter-item-padding);
21
23
  }
22
24
 
23
25
  .itemHeader {
@@ -36,6 +38,8 @@
36
38
  .itemContent {
37
39
  display: flex;
38
40
  flex-direction: column;
41
+ min-width: 0;
42
+ overflow: hidden;
39
43
  }
40
44
 
41
45
  .dragHandle {
@@ -66,59 +70,131 @@
66
70
  }
67
71
  }
68
72
 
69
- .excludeToggle {
73
+ .headerActionButton {
70
74
  display: flex;
71
75
  align-items: center;
72
76
  justify-content: center;
73
- padding: var(--osdk-filter-item-exclude-toggle-padding);
74
- margin-left: auto;
77
+ padding: var(--osdk-filter-item-header-action-padding);
78
+ margin-left: calc(var(--osdk-surface-spacing) * 0.5);
75
79
  border: none;
76
80
  background: transparent;
77
81
  cursor: pointer;
78
- border-radius: var(--osdk-filter-item-exclude-toggle-border-radius);
79
- color: var(--osdk-filter-item-exclude-toggle-color);
82
+ border-radius: var(--osdk-filter-item-header-action-border-radius);
83
+ color: var(--osdk-filter-item-header-action-color);
84
+ opacity: 0;
85
+ transition: opacity var(--osdk-filter-header-button-transition),
86
+ background-color var(--osdk-filter-header-button-transition);
80
87
 
81
88
  &:hover {
82
- color: var(--osdk-filter-item-exclude-toggle-color-hover);
83
- background: var(--osdk-filter-item-exclude-toggle-bg-hover);
89
+ color: var(--osdk-typography-color-default-rest);
90
+ background: var(--osdk-filter-item-header-action-bg-hover);
84
91
  }
85
92
 
86
93
  &:focus-visible {
94
+ opacity: 1;
87
95
  outline: var(--osdk-filter-input-focus-outline-width) solid var(--osdk-filter-input-focus-outline-color);
88
96
  outline-offset: var(--osdk-filter-input-focus-outline-offset);
89
97
  }
98
+
99
+ @media (prefers-reduced-motion: reduce) {
100
+ transition: none;
101
+ }
102
+ }
103
+
104
+ .filterItem:hover .headerActionButton {
105
+ opacity: 1;
90
106
  }
91
107
 
92
- .excludeToggle[aria-pressed="true"] {
93
- color: var(--osdk-filter-item-exclude-toggle-color-active);
108
+ .headerActionButton[data-popup-open],
109
+ .headerActionButton[aria-pressed="true"] {
110
+ opacity: 1;
94
111
  }
95
112
 
96
- .removeButton {
113
+ .searchRow {
97
114
  display: flex;
98
115
  align-items: center;
99
- justify-content: center;
100
- padding: var(--osdk-filter-item-exclude-toggle-padding);
101
- margin-left: var(--osdk-surface-spacing);
116
+ background: var(--osdk-filter-input-bg);
117
+ border: var(--osdk-filter-input-border);
118
+ border-radius: var(--osdk-filter-input-border-radius);
119
+ padding: var(--osdk-filter-input-padding);
120
+ gap: var(--osdk-filter-input-gap);
121
+
122
+ &:focus-within {
123
+ outline: var(--osdk-filter-input-focus-outline-width) solid var(--osdk-filter-input-focus-outline-color);
124
+ outline-offset: var(--osdk-filter-input-focus-outline-offset);
125
+ }
126
+ }
127
+
128
+ .searchInput {
129
+ flex: 1;
102
130
  border: none;
103
131
  background: transparent;
132
+ font-family: var(--osdk-filter-input-font-family);
133
+ font-size: var(--osdk-filter-input-font-size);
134
+ color: var(--osdk-filter-input-color);
135
+ outline: none;
136
+
137
+ &::placeholder {
138
+ color: var(--osdk-filter-input-placeholder-color);
139
+ }
140
+ }
141
+
142
+ .searchClearButton {
143
+ display: flex;
144
+ align-items: center;
145
+ justify-content: center;
146
+ padding: var(--osdk-filter-input-clear-padding);
147
+ border: none;
148
+ background: var(--osdk-filter-input-clear-bg);
149
+ color: var(--osdk-filter-input-icon-color);
104
150
  cursor: pointer;
105
- border-radius: var(--osdk-filter-item-exclude-toggle-border-radius);
106
- color: var(--osdk-filter-item-exclude-toggle-color);
151
+ border-radius: var(--osdk-filter-input-clear-border-radius);
152
+ transition: background-color var(--osdk-filter-input-transition);
107
153
 
108
154
  &:hover {
109
- color: var(--osdk-filter-item-exclude-toggle-color-hover);
110
- background: var(--osdk-filter-item-exclude-toggle-bg-hover);
155
+ background: var(--osdk-filter-input-clear-bg-hover);
156
+ }
157
+
158
+ &:active {
159
+ background: var(--osdk-filter-input-clear-bg-active);
111
160
  }
112
161
 
113
162
  &:focus-visible {
114
163
  outline: var(--osdk-filter-input-focus-outline-width) solid var(--osdk-filter-input-focus-outline-color);
115
164
  outline-offset: var(--osdk-filter-input-focus-outline-offset);
116
165
  }
166
+
167
+ @media (prefers-reduced-motion: reduce) {
168
+ transition: none;
169
+ }
170
+ }
171
+
172
+ .excludeRow {
173
+ display: flex;
174
+ align-items: center;
175
+ opacity: 0;
176
+ height: 0;
177
+ overflow: hidden;
178
+ transition: opacity var(--osdk-filter-header-button-transition),
179
+ height var(--osdk-filter-header-button-transition);
180
+
181
+ @media (prefers-reduced-motion: reduce) {
182
+ transition: none;
183
+ }
184
+ }
185
+
186
+ .filterItem:hover [data-exclude-row],
187
+ .excludeRowVisible {
188
+ opacity: 1;
189
+ height: auto;
190
+ overflow: visible;
117
191
  }
118
192
 
119
- .filterItem[data-excluding] {
120
- border-left: var(--osdk-filter-item-exclude-border-width) solid var(--osdk-filter-item-exclude-border-color);
121
- padding-left: var(--osdk-filter-item-gap);
193
+ .excludeCountLabel {
194
+ font-family: var(--osdk-filter-item-exclude-dropdown-font-family);
195
+ font-size: var(--osdk-filter-item-exclude-dropdown-font-size);
196
+ color: var(--osdk-filter-item-exclude-dropdown-color);
197
+ margin-left: calc(var(--osdk-surface-spacing) * 0.5);
122
198
  }
123
199
 
124
200
  .dragging {
@@ -5,8 +5,13 @@ const styles = {
5
5
  "itemLabel": "FilterListItem-module__itemLabel___cEnbqE59",
6
6
  "itemContent": "FilterListItem-module__itemContent___PfVHHhIy",
7
7
  "dragHandle": "FilterListItem-module__dragHandle___BwFrILWs",
8
- "excludeToggle": "FilterListItem-module__excludeToggle___nWNDvntP",
9
- "removeButton": "FilterListItem-module__removeButton___72cjHbqK",
8
+ "headerActionButton": "FilterListItem-module__headerActionButton___x10Z2Kx0",
9
+ "searchRow": "FilterListItem-module__searchRow___4fUrAgAm",
10
+ "searchInput": "FilterListItem-module__searchInput___v-qwznpk",
11
+ "searchClearButton": "FilterListItem-module__searchClearButton___HXHweIEa",
12
+ "excludeRow": "FilterListItem-module__excludeRow___6hctgE28",
13
+ "excludeRowVisible": "FilterListItem-module__excludeRowVisible___whT6lGyR",
14
+ "excludeCountLabel": "FilterListItem-module__excludeCountLabel___7IQFUJIY",
10
15
  "dragging": "FilterListItem-module__dragging___S5-LGyfS"
11
16
  };
12
17
 
@@ -21,7 +21,7 @@ import { filterValuesBySearch } from "../../utils/filterValues.js";
21
21
  import styles from "./CheckboxListInput.module.css.js";
22
22
  import { CheckboxListSkeleton } from "./CheckboxListSkeleton.js";
23
23
  import sharedStyles from "./shared.module.css.js";
24
- import { useStaleData } from "./useStaleData.js";
24
+ import { useStableData } from "./useStableData.js";
25
25
  function CheckboxListInputInner({
26
26
  values,
27
27
  isLoading,
@@ -33,7 +33,7 @@ function CheckboxListInputInner({
33
33
  className,
34
34
  style
35
35
  }) {
36
- const stableValues = useStaleData(values, isLoading);
36
+ const stableValues = useStableData(values, isLoading);
37
37
  const displayValues = useMemo(() => {
38
38
  const allValues = stableValues.map(item => item.value);
39
39
  if (searchQuery) {
@@ -1 +1 @@
1
- {"version":3,"file":"CheckboxListInput.js","names":["classnames","React","memo","useCallback","useMemo","Checkbox","filterValuesBySearch","styles","CheckboxListSkeleton","sharedStyles","useStaleData","CheckboxListInputInner","values","isLoading","error","selectedValues","onChange","colorMap","searchQuery","className","style","stableValues","displayValues","allValues","map","item","value","v","selectedSet","Set","toggleValue","has","filter","createElement","checkboxList","length","errorMessage","message","emptyMessage","isSelected","color","key","checkboxRow","checkboxLabel","checked","onCheckedChange","colorDot","backgroundColor","valueText","CheckboxListInput"],"sources":["CheckboxListInput.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport { Checkbox } from \"../../../base-components/checkbox/Checkbox.js\";\nimport type { PropertyAggregationValue } from \"../../types/AggregationTypes.js\";\nimport { filterValuesBySearch } from \"../../utils/filterValues.js\";\nimport styles from \"./CheckboxListInput.module.css\";\nimport { CheckboxListSkeleton } from \"./CheckboxListSkeleton.js\";\nimport sharedStyles from \"./shared.module.css\";\nimport { useStaleData } from \"./useStaleData.js\";\n\ninterface CheckboxListInputProps {\n values: PropertyAggregationValue[];\n isLoading: boolean;\n error: Error | null;\n selectedValues: string[];\n onChange: (selectedValues: string[]) => void;\n colorMap?: Record<string, string>;\n searchQuery?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction CheckboxListInputInner({\n values,\n isLoading,\n error,\n selectedValues,\n onChange,\n colorMap,\n searchQuery,\n className,\n style,\n}: CheckboxListInputProps): React.ReactElement {\n const stableValues = useStaleData(values, isLoading);\n\n const displayValues = useMemo(\n () => {\n const allValues = stableValues.map((item) => item.value);\n if (searchQuery) {\n return filterValuesBySearch(allValues, searchQuery, (v) => v);\n }\n return allValues;\n },\n [stableValues, searchQuery],\n );\n\n const selectedSet = useMemo(\n () => new Set(selectedValues),\n [selectedValues],\n );\n\n const toggleValue = useCallback(\n (value: string) => {\n if (selectedSet.has(value)) {\n onChange(selectedValues.filter((v) => v !== value));\n } else {\n onChange([...selectedValues, value]);\n }\n },\n [selectedValues, selectedSet, onChange],\n );\n\n return (\n <div\n className={classnames(styles.checkboxList, className)}\n style={style}\n data-loading={isLoading && displayValues.length > 0}\n >\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading values: {error.message}\n </div>\n )}\n\n {!error && displayValues.length === 0 && isLoading && (\n <CheckboxListSkeleton />\n )}\n {!error && displayValues.length === 0 && !isLoading && (\n <div className={sharedStyles.emptyMessage}>\n No values available\n </div>\n )}\n\n {displayValues.map((value) => {\n const isSelected = selectedSet.has(value);\n const color = colorMap?.[value];\n\n return (\n <div\n key={value}\n className={styles.checkboxRow}\n data-selected={isSelected}\n >\n <label className={styles.checkboxLabel}>\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => toggleValue(value)}\n />\n {color && (\n <span\n className={styles.colorDot}\n style={{ backgroundColor: color }}\n />\n )}\n <span className={styles.valueText}>\n {value}\n </span>\n </label>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport const CheckboxListInput = memo(\n CheckboxListInputInner,\n) as typeof CheckboxListInputInner;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"CheckboxListInput.js","names":["classnames","React","memo","useCallback","useMemo","Checkbox","filterValuesBySearch","styles","CheckboxListSkeleton","sharedStyles","useStableData","CheckboxListInputInner","values","isLoading","error","selectedValues","onChange","colorMap","searchQuery","className","style","stableValues","displayValues","allValues","map","item","value","v","selectedSet","Set","toggleValue","has","filter","createElement","checkboxList","length","errorMessage","message","emptyMessage","isSelected","color","key","checkboxRow","checkboxLabel","checked","onCheckedChange","colorDot","backgroundColor","valueText","CheckboxListInput"],"sources":["CheckboxListInput.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport { Checkbox } from \"../../../base-components/checkbox/Checkbox.js\";\nimport type { PropertyAggregationValue } from \"../../types/AggregationTypes.js\";\nimport { filterValuesBySearch } from \"../../utils/filterValues.js\";\nimport styles from \"./CheckboxListInput.module.css\";\nimport { CheckboxListSkeleton } from \"./CheckboxListSkeleton.js\";\nimport sharedStyles from \"./shared.module.css\";\nimport { useStableData } from \"./useStableData.js\";\n\ninterface CheckboxListInputProps {\n values: PropertyAggregationValue[];\n isLoading: boolean;\n error: Error | null;\n selectedValues: string[];\n onChange: (selectedValues: string[]) => void;\n colorMap?: Record<string, string>;\n searchQuery?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction CheckboxListInputInner({\n values,\n isLoading,\n error,\n selectedValues,\n onChange,\n colorMap,\n searchQuery,\n className,\n style,\n}: CheckboxListInputProps): React.ReactElement {\n const stableValues = useStableData(values, isLoading);\n\n const displayValues = useMemo(\n () => {\n const allValues = stableValues.map((item) => item.value);\n if (searchQuery) {\n return filterValuesBySearch(allValues, searchQuery, (v) => v);\n }\n return allValues;\n },\n [stableValues, searchQuery],\n );\n\n const selectedSet = useMemo(\n () => new Set(selectedValues),\n [selectedValues],\n );\n\n const toggleValue = useCallback(\n (value: string) => {\n if (selectedSet.has(value)) {\n onChange(selectedValues.filter((v) => v !== value));\n } else {\n onChange([...selectedValues, value]);\n }\n },\n [selectedValues, selectedSet, onChange],\n );\n\n return (\n <div\n className={classnames(styles.checkboxList, className)}\n style={style}\n data-loading={isLoading && displayValues.length > 0}\n >\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading values: {error.message}\n </div>\n )}\n\n {!error && displayValues.length === 0 && isLoading && (\n <CheckboxListSkeleton />\n )}\n {!error && displayValues.length === 0 && !isLoading && (\n <div className={sharedStyles.emptyMessage}>\n No values available\n </div>\n )}\n\n {displayValues.map((value) => {\n const isSelected = selectedSet.has(value);\n const color = colorMap?.[value];\n\n return (\n <div\n key={value}\n className={styles.checkboxRow}\n data-selected={isSelected}\n >\n <label className={styles.checkboxLabel}>\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => toggleValue(value)}\n />\n {color && (\n <span\n className={styles.colorDot}\n style={{ backgroundColor: color }}\n />\n )}\n <span className={styles.valueText}>\n {value}\n </span>\n </label>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport const CheckboxListInput = memo(\n CheckboxListInputInner,\n) as typeof CheckboxListInputInner;\n"],"mappings":"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","ignoreList":[]}
@@ -63,9 +63,7 @@ function ContainsTextInputInner({
63
63
  className: styles.inputGroup
64
64
  }, renderSearchIcon ? renderSearchIcon() : /*#__PURE__*/React.createElement("span", {
65
65
  className: styles.searchIcon
66
- }, /*#__PURE__*/React.createElement(Search, {
67
- color: "currentColor"
68
- })), /*#__PURE__*/React.createElement(Input, {
66
+ }, /*#__PURE__*/React.createElement(Search, null)), /*#__PURE__*/React.createElement(Input, {
69
67
  type: "text",
70
68
  className: styles.input,
71
69
  value: localValue,
@@ -77,9 +75,7 @@ function ContainsTextInputInner({
77
75
  className: styles.clearButton,
78
76
  onClick: handleClear,
79
77
  "aria-label": "Clear search"
80
- }, renderClearIcon ? renderClearIcon() : /*#__PURE__*/React.createElement(Cross, {
81
- color: "currentColor"
82
- }))));
78
+ }, renderClearIcon ? renderClearIcon() : /*#__PURE__*/React.createElement(Cross, null))));
83
79
  }
84
80
  export const ContainsTextInput = /*#__PURE__*/memo(ContainsTextInputInner);
85
81
  //# sourceMappingURL=ContainsTextInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContainsTextInput.js","names":["Button","Input","Cross","Search","classnames","debounce","React","memo","useCallback","useEffect","useMemo","useRef","useState","styles","ContainsTextInputInner","value","onChange","placeholder","debounceMs","className","style","renderSearchIcon","renderClearIcon","localValue","setLocalValue","onChangeRef","current","debouncedOnChange","newValue","length","undefined","cancel","handleInputChange","e","target","handleClear","createElement","textInput","inputGroup","searchIcon","color","type","input","clearButton","onClick","ContainsTextInput"],"sources":["ContainsTextInput.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 { Input } from \"@base-ui/react/input\";\nimport { Cross, Search } from \"@blueprintjs/icons\";\nimport classnames from \"classnames\";\nimport { debounce } from \"lodash-es\";\nimport React, {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport styles from \"./ContainsTextInput.module.css\";\n\ninterface ContainsTextInputProps {\n value: string | undefined;\n onChange: (value: string | undefined) => void;\n placeholder?: string;\n debounceMs?: number;\n className?: string;\n style?: React.CSSProperties;\n renderSearchIcon?: () => React.ReactNode;\n renderClearIcon?: () => React.ReactNode;\n}\n\nfunction ContainsTextInputInner({\n value,\n onChange,\n placeholder = \"Search...\",\n debounceMs = 300,\n className,\n style,\n renderSearchIcon,\n renderClearIcon,\n}: ContainsTextInputProps): React.ReactElement {\n const [localValue, setLocalValue] = useState(value ?? \"\");\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const debouncedOnChange = useMemo(\n () =>\n debounce((newValue: string) => {\n onChangeRef.current(newValue.length > 0 ? newValue : undefined);\n }, debounceMs),\n [debounceMs],\n );\n\n useEffect(() => {\n return () => {\n debouncedOnChange.cancel();\n };\n }, [debouncedOnChange]);\n\n useEffect(() => {\n setLocalValue(value ?? \"\");\n debouncedOnChange.cancel();\n }, [value, debouncedOnChange]);\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setLocalValue(e.target.value);\n debouncedOnChange(e.target.value);\n },\n [debouncedOnChange],\n );\n\n const handleClear = useCallback(() => {\n setLocalValue(\"\");\n debouncedOnChange.cancel();\n onChangeRef.current(undefined);\n }, [debouncedOnChange]);\n\n return (\n <div\n className={classnames(styles.textInput, className)}\n style={style}\n data-has-value={!!localValue}\n >\n <div className={styles.inputGroup}>\n {renderSearchIcon\n ? renderSearchIcon()\n : (\n <span className={styles.searchIcon}>\n <Search color=\"currentColor\" />\n </span>\n )}\n <Input\n type=\"text\"\n className={styles.input}\n value={localValue}\n onChange={handleInputChange}\n placeholder={placeholder}\n aria-label={placeholder}\n />\n {localValue && (\n <Button\n type=\"button\"\n className={styles.clearButton}\n onClick={handleClear}\n aria-label=\"Clear search\"\n >\n {renderClearIcon\n ? renderClearIcon()\n : <Cross color=\"currentColor\" />}\n </Button>\n )}\n </div>\n </div>\n );\n}\n\nexport const ContainsTextInput: React.NamedExoticComponent<\n ContainsTextInputProps\n> = memo(ContainsTextInputInner);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ContainsTextInput.js","names":["Button","Input","Cross","Search","classnames","debounce","React","memo","useCallback","useEffect","useMemo","useRef","useState","styles","ContainsTextInputInner","value","onChange","placeholder","debounceMs","className","style","renderSearchIcon","renderClearIcon","localValue","setLocalValue","onChangeRef","current","debouncedOnChange","newValue","length","undefined","cancel","handleInputChange","e","target","handleClear","createElement","textInput","inputGroup","searchIcon","type","input","clearButton","onClick","ContainsTextInput"],"sources":["ContainsTextInput.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 { Input } from \"@base-ui/react/input\";\nimport { Cross, Search } from \"@blueprintjs/icons\";\nimport classnames from \"classnames\";\nimport { debounce } from \"lodash-es\";\nimport React, {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport styles from \"./ContainsTextInput.module.css\";\n\ninterface ContainsTextInputProps {\n value: string | undefined;\n onChange: (value: string | undefined) => void;\n placeholder?: string;\n debounceMs?: number;\n className?: string;\n style?: React.CSSProperties;\n renderSearchIcon?: () => React.ReactNode;\n renderClearIcon?: () => React.ReactNode;\n}\n\nfunction ContainsTextInputInner({\n value,\n onChange,\n placeholder = \"Search...\",\n debounceMs = 300,\n className,\n style,\n renderSearchIcon,\n renderClearIcon,\n}: ContainsTextInputProps): React.ReactElement {\n const [localValue, setLocalValue] = useState(value ?? \"\");\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const debouncedOnChange = useMemo(\n () =>\n debounce((newValue: string) => {\n onChangeRef.current(newValue.length > 0 ? newValue : undefined);\n }, debounceMs),\n [debounceMs],\n );\n\n useEffect(() => {\n return () => {\n debouncedOnChange.cancel();\n };\n }, [debouncedOnChange]);\n\n useEffect(() => {\n setLocalValue(value ?? \"\");\n debouncedOnChange.cancel();\n }, [value, debouncedOnChange]);\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setLocalValue(e.target.value);\n debouncedOnChange(e.target.value);\n },\n [debouncedOnChange],\n );\n\n const handleClear = useCallback(() => {\n setLocalValue(\"\");\n debouncedOnChange.cancel();\n onChangeRef.current(undefined);\n }, [debouncedOnChange]);\n\n return (\n <div\n className={classnames(styles.textInput, className)}\n style={style}\n data-has-value={!!localValue}\n >\n <div className={styles.inputGroup}>\n {renderSearchIcon\n ? renderSearchIcon()\n : (\n <span className={styles.searchIcon}>\n <Search />\n </span>\n )}\n <Input\n type=\"text\"\n className={styles.input}\n value={localValue}\n onChange={handleInputChange}\n placeholder={placeholder}\n aria-label={placeholder}\n />\n {localValue && (\n <Button\n type=\"button\"\n className={styles.clearButton}\n onClick={handleClear}\n aria-label=\"Clear search\"\n >\n {renderClearIcon\n ? renderClearIcon()\n : <Cross />}\n </Button>\n )}\n </div>\n </div>\n );\n}\n\nexport const ContainsTextInput: React.NamedExoticComponent<\n ContainsTextInputProps\n> = memo(ContainsTextInputInner);\n"],"mappings":"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","ignoreList":[]}
@@ -16,7 +16,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
16
16
  */
17
17
 
18
18
  import React, { memo } from "react";
19
- import { formatDateForInput, parseDateFromInput } from "./dateUtils.js";
19
+ import { formatDateForInput, parseDateFromInput } from "../../../shared/dateUtils.js";
20
20
  import { RangeInput } from "./RangeInput.js";
21
21
  const dateConfig = {
22
22
  inputType: "date",
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangeInput.js","names":["React","memo","formatDateForInput","parseDateFromInput","RangeInput","dateConfig","inputType","formatValue","parseValue","toNumber","d","getTime","fromNumber","t","Date","minLabel","maxLabel","formatTooltip","min","max","count","toLocaleString","DateRangeInputInner","props","createElement","_extends","config","DateRangeInput"],"sources":["DateRangeInput.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { memo } from \"react\";\nimport { formatDateForInput, parseDateFromInput } from \"./dateUtils.js\";\nimport { RangeInput, type RangeInputConfig } from \"./RangeInput.js\";\n\nconst dateConfig: RangeInputConfig<Date> = {\n inputType: \"date\",\n formatValue: formatDateForInput,\n parseValue: parseDateFromInput,\n toNumber: (d) => d.getTime(),\n fromNumber: (t) => new Date(t),\n minLabel: \"From\",\n maxLabel: \"To\",\n formatTooltip: (min, max, count) =>\n `${formatDateForInput(min)} - ${\n formatDateForInput(max)\n }: ${count.toLocaleString()}`,\n};\n\ninterface DateRangeInputProps {\n valueCountPairs: Array<{ value: Date; count: number }>;\n isLoading: boolean;\n minValue: Date | undefined;\n maxValue: Date | undefined;\n onChange: (min: Date | undefined, max: Date | undefined) => void;\n showHistogram?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction DateRangeInputInner(\n props: DateRangeInputProps,\n): React.ReactElement {\n return <RangeInput {...props} config={dateConfig} />;\n}\n\nexport const DateRangeInput = memo(\n DateRangeInputInner,\n) as typeof DateRangeInputInner;\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAIC,IAAI,QAAQ,OAAO;AACnC,SAASC,kBAAkB,EAAEC,kBAAkB,QAAQ,gBAAgB;AACvE,SAASC,UAAU,QAA+B,iBAAiB;AAEnE,MAAMC,UAAkC,GAAG;EACzCC,SAAS,EAAE,MAAM;EACjBC,WAAW,EAAEL,kBAAkB;EAC/BM,UAAU,EAAEL,kBAAkB;EAC9BM,QAAQ,EAAGC,CAAC,IAAKA,CAAC,CAACC,OAAO,CAAC,CAAC;EAC5BC,UAAU,EAAGC,CAAC,IAAK,IAAIC,IAAI,CAACD,CAAC,CAAC;EAC9BE,QAAQ,EAAE,MAAM;EAChBC,QAAQ,EAAE,IAAI;EACdC,aAAa,EAAEA,CAACC,GAAG,EAAEC,GAAG,EAAEC,KAAK,KAC7B,GAAGlB,kBAAkB,CAACgB,GAAG,CAAC,MACxBhB,kBAAkB,CAACiB,GAAG,CAAC,KACpBC,KAAK,CAACC,cAAc,CAAC,CAAC;AAC/B,CAAC;AAaD,SAASC,mBAAmBA,CAC1BC,KAA0B,EACN;EACpB,oBAAOvB,KAAA,CAAAwB,aAAA,CAACpB,UAAU,EAAAqB,QAAA,KAAKF,KAAK;IAAEG,MAAM,EAAErB;EAAW,EAAE,CAAC;AACtD;AAEA,OAAO,MAAMsB,cAAc,gBAAG1B,IAAI,CAChCqB,mBACF,CAA+B","ignoreList":[]}
1
+ {"version":3,"file":"DateRangeInput.js","names":["React","memo","formatDateForInput","parseDateFromInput","RangeInput","dateConfig","inputType","formatValue","parseValue","toNumber","d","getTime","fromNumber","t","Date","minLabel","maxLabel","formatTooltip","min","max","count","toLocaleString","DateRangeInputInner","props","createElement","_extends","config","DateRangeInput"],"sources":["DateRangeInput.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { memo } from \"react\";\nimport {\n formatDateForInput,\n parseDateFromInput,\n} from \"../../../shared/dateUtils.js\";\nimport { RangeInput, type RangeInputConfig } from \"./RangeInput.js\";\n\nconst dateConfig: RangeInputConfig<Date> = {\n inputType: \"date\",\n formatValue: formatDateForInput,\n parseValue: parseDateFromInput,\n toNumber: (d) => d.getTime(),\n fromNumber: (t) => new Date(t),\n minLabel: \"From\",\n maxLabel: \"To\",\n formatTooltip: (min, max, count) =>\n `${formatDateForInput(min)} - ${\n formatDateForInput(max)\n }: ${count.toLocaleString()}`,\n};\n\ninterface DateRangeInputProps {\n valueCountPairs: Array<{ value: Date; count: number }>;\n isLoading: boolean;\n minValue: Date | undefined;\n maxValue: Date | undefined;\n onChange: (min: Date | undefined, max: Date | undefined) => void;\n showHistogram?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction DateRangeInputInner(\n props: DateRangeInputProps,\n): React.ReactElement {\n return <RangeInput {...props} config={dateConfig} />;\n}\n\nexport const DateRangeInput = memo(\n DateRangeInputInner,\n) as typeof DateRangeInputInner;\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAIC,IAAI,QAAQ,OAAO;AACnC,SACEC,kBAAkB,EAClBC,kBAAkB,QACb,8BAA8B;AACrC,SAASC,UAAU,QAA+B,iBAAiB;AAEnE,MAAMC,UAAkC,GAAG;EACzCC,SAAS,EAAE,MAAM;EACjBC,WAAW,EAAEL,kBAAkB;EAC/BM,UAAU,EAAEL,kBAAkB;EAC9BM,QAAQ,EAAGC,CAAC,IAAKA,CAAC,CAACC,OAAO,CAAC,CAAC;EAC5BC,UAAU,EAAGC,CAAC,IAAK,IAAIC,IAAI,CAACD,CAAC,CAAC;EAC9BE,QAAQ,EAAE,MAAM;EAChBC,QAAQ,EAAE,IAAI;EACdC,aAAa,EAAEA,CAACC,GAAG,EAAEC,GAAG,EAAEC,KAAK,KAC7B,GAAGlB,kBAAkB,CAACgB,GAAG,CAAC,MACxBhB,kBAAkB,CAACiB,GAAG,CAAC,KACpBC,KAAK,CAACC,cAAc,CAAC,CAAC;AAC/B,CAAC;AAaD,SAASC,mBAAmBA,CAC1BC,KAA0B,EACN;EACpB,oBAAOvB,KAAA,CAAAwB,aAAA,CAACpB,UAAU,EAAAqB,QAAA,KAAKF,KAAK;IAAEG,MAAM,EAAErB;EAAW,EAAE,CAAC;AACtD;AAEA,OAAO,MAAMsB,cAAc,gBAAG1B,IAAI,CAChCqB,mBACF,CAA+B","ignoreList":[]}
@@ -21,7 +21,7 @@ import { filterValuesBySearch } from "../../utils/filterValues.js";
21
21
  import styles from "./ListogramInput.module.css.js";
22
22
  import { ListogramSkeleton } from "./ListogramSkeleton.js";
23
23
  import sharedStyles from "./shared.module.css.js";
24
- import { useStaleData } from "./useStaleData.js";
24
+ import { useStableData } from "./useStableData.js";
25
25
  function ListogramInputInner({
26
26
  values,
27
27
  maxCount,
@@ -37,7 +37,7 @@ function ListogramInputInner({
37
37
  searchQuery
38
38
  }) {
39
39
  const [isExpanded, setIsExpanded] = useState(false);
40
- const stableValues = useStaleData(values, isLoading);
40
+ const stableValues = useStableData(values, isLoading);
41
41
  const selectedSet = useMemo(() => new Set(selectedValues), [selectedValues]);
42
42
  const toggleValue = useCallback(value => {
43
43
  if (selectedSet.has(value)) {
@@ -1 +1 @@
1
- {"version":3,"file":"ListogramInput.js","names":["Button","classnames","React","memo","useCallback","useMemo","useState","filterValuesBySearch","styles","ListogramSkeleton","sharedStyles","useStaleData","ListogramInputInner","values","maxCount","isLoading","error","selectedValues","onChange","colorMap","displayMode","className","style","maxVisibleItems","searchQuery","isExpanded","setIsExpanded","stableValues","selectedSet","Set","toggleValue","value","has","filter","v","filteredValues","displayValues","slice","hasMore","length","createElement","listogram","errorMessage","message","emptyMessage","container","map","count","percentage","perRowColor","key","row","onClick","undefined","label","bar","barFill","toLocaleString","type","ListogramInput"],"sources":["ListogramInput.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo, useState } from \"react\";\nimport type { PropertyAggregationValue } from \"../../types/AggregationTypes.js\";\nimport { filterValuesBySearch } from \"../../utils/filterValues.js\";\nimport styles from \"./ListogramInput.module.css\";\nimport { ListogramSkeleton } from \"./ListogramSkeleton.js\";\nimport sharedStyles from \"./shared.module.css\";\nimport { useStaleData } from \"./useStaleData.js\";\n\nexport type ListogramDisplayMode = \"full\" | \"count\" | \"minimal\";\n\ninterface ListogramInputProps {\n values: PropertyAggregationValue[];\n maxCount: number;\n isLoading: boolean;\n error: Error | null;\n selectedValues: string[];\n onChange: (values: string[]) => void;\n colorMap?: Record<string, string>;\n displayMode?: ListogramDisplayMode;\n className?: string;\n style?: React.CSSProperties;\n maxVisibleItems?: number;\n searchQuery?: string;\n}\n\nfunction ListogramInputInner({\n values,\n maxCount,\n isLoading,\n error,\n selectedValues,\n onChange,\n colorMap,\n displayMode = \"full\",\n className,\n style,\n maxVisibleItems,\n searchQuery,\n}: ListogramInputProps): React.ReactElement {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const stableValues = useStaleData(values, isLoading);\n\n const selectedSet = useMemo(() => new Set(selectedValues), [selectedValues]);\n\n const toggleValue = useCallback(\n (value: string) => {\n if (selectedSet.has(value)) {\n onChange(selectedValues.filter((v) => v !== value));\n } else {\n onChange([...selectedValues, value]);\n }\n },\n [selectedValues, selectedSet, onChange],\n );\n\n const filteredValues = useMemo(() => {\n if (searchQuery) {\n return filterValuesBySearch(stableValues, searchQuery, (v) => v.value);\n }\n return stableValues;\n }, [stableValues, searchQuery]);\n\n const displayValues = useMemo(() => {\n if (isExpanded || !maxVisibleItems) return filteredValues;\n return filteredValues.slice(0, maxVisibleItems);\n }, [filteredValues, maxVisibleItems, isExpanded]);\n\n const hasMore = maxVisibleItems != null\n && filteredValues.length > maxVisibleItems;\n\n return (\n <div\n className={classnames(styles.listogram, className)}\n style={style}\n data-loading={isLoading && filteredValues.length > 0}\n >\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading values: {error.message}\n </div>\n )}\n\n {!error && filteredValues.length === 0 && isLoading && (\n <ListogramSkeleton />\n )}\n {!error && filteredValues.length === 0 && !isLoading && (\n <div className={sharedStyles.emptyMessage}>\n No values available\n </div>\n )}\n\n {filteredValues.length > 0 && (\n <div className={styles.container}>\n {displayValues.map(({ value, count }) => {\n const percentage = maxCount > 0 ? (count / maxCount) * 100 : 0;\n const perRowColor = colorMap?.[value];\n\n return (\n <Button\n key={value}\n className={styles.row}\n onClick={() => toggleValue(value)}\n aria-pressed={selectedSet.has(value)}\n style={perRowColor || percentage > 0\n ? {\n \"--osdk-filter-listogram-bar-fill-scale\": percentage / 100,\n ...(perRowColor\n ? {\n \"--osdk-filter-listogram-row-bar-color\": perRowColor,\n }\n : undefined),\n } as React.CSSProperties\n : undefined}\n >\n <span className={styles.label}>{value}</span>\n {displayMode === \"full\" && (\n <span className={styles.bar}>\n <span className={styles.barFill} />\n </span>\n )}\n {displayMode !== \"minimal\" && (\n <span className={styles.count}>\n {count.toLocaleString()}\n </span>\n )}\n </Button>\n );\n })}\n\n {hasMore && !isExpanded && (\n <Button\n type=\"button\"\n className={styles.row}\n onClick={() => setIsExpanded(true)}\n >\n View all ({filteredValues.length})\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport const ListogramInput = memo(\n ListogramInputInner,\n) as typeof ListogramInputInner;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,uBAAuB;AAC9C,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,IAAI,EAAEC,WAAW,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAEnE,SAASC,oBAAoB,QAAQ,6BAA6B;AAClE,OAAOC,MAAM,MAAM,6BAA6B;AAChD,SAASC,iBAAiB,QAAQ,wBAAwB;AAC1D,OAAOC,YAAY,MAAM,qBAAqB;AAC9C,SAASC,YAAY,QAAQ,mBAAmB;AAmBhD,SAASC,mBAAmBA,CAAC;EAC3BC,MAAM;EACNC,QAAQ;EACRC,SAAS;EACTC,KAAK;EACLC,cAAc;EACdC,QAAQ;EACRC,QAAQ;EACRC,WAAW,GAAG,MAAM;EACpBC,SAAS;EACTC,KAAK;EACLC,eAAe;EACfC;AACmB,CAAC,EAAsB;EAC1C,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAGpB,QAAQ,CAAC,KAAK,CAAC;EAEnD,MAAMqB,YAAY,GAAGhB,YAAY,CAACE,MAAM,EAAEE,SAAS,CAAC;EAEpD,MAAMa,WAAW,GAAGvB,OAAO,CAAC,MAAM,IAAIwB,GAAG,CAACZ,cAAc,CAAC,EAAE,CAACA,cAAc,CAAC,CAAC;EAE5E,MAAMa,WAAW,GAAG1B,WAAW,CAC5B2B,KAAa,IAAK;IACjB,IAAIH,WAAW,CAACI,GAAG,CAACD,KAAK,CAAC,EAAE;MAC1Bb,QAAQ,CAACD,cAAc,CAACgB,MAAM,CAAEC,CAAC,IAAKA,CAAC,KAAKH,KAAK,CAAC,CAAC;IACrD,CAAC,MAAM;MACLb,QAAQ,CAAC,CAAC,GAAGD,cAAc,EAAEc,KAAK,CAAC,CAAC;IACtC;EACF,CAAC,EACD,CAACd,cAAc,EAAEW,WAAW,EAAEV,QAAQ,CACxC,CAAC;EAED,MAAMiB,cAAc,GAAG9B,OAAO,CAAC,MAAM;IACnC,IAAImB,WAAW,EAAE;MACf,OAAOjB,oBAAoB,CAACoB,YAAY,EAAEH,WAAW,EAAGU,CAAC,IAAKA,CAAC,CAACH,KAAK,CAAC;IACxE;IACA,OAAOJ,YAAY;EACrB,CAAC,EAAE,CAACA,YAAY,EAAEH,WAAW,CAAC,CAAC;EAE/B,MAAMY,aAAa,GAAG/B,OAAO,CAAC,MAAM;IAClC,IAAIoB,UAAU,IAAI,CAACF,eAAe,EAAE,OAAOY,cAAc;IACzD,OAAOA,cAAc,CAACE,KAAK,CAAC,CAAC,EAAEd,eAAe,CAAC;EACjD,CAAC,EAAE,CAACY,cAAc,EAAEZ,eAAe,EAAEE,UAAU,CAAC,CAAC;EAEjD,MAAMa,OAAO,GAAGf,eAAe,IAAI,IAAI,IAClCY,cAAc,CAACI,MAAM,GAAGhB,eAAe;EAE5C,oBACErB,KAAA,CAAAsC,aAAA;IACEnB,SAAS,EAAEpB,UAAU,CAACO,MAAM,CAACiC,SAAS,EAAEpB,SAAS,CAAE;IACnDC,KAAK,EAAEA,KAAM;IACb,gBAAcP,SAAS,IAAIoB,cAAc,CAACI,MAAM,GAAG;EAAE,GAEpDvB,KAAK,iBACJd,KAAA,CAAAsC,aAAA;IAAKnB,SAAS,EAAEX,YAAY,CAACgC;EAAa,GAAC,wBACnB,EAAC1B,KAAK,CAAC2B,OAC1B,CACN,EAEA,CAAC3B,KAAK,IAAImB,cAAc,CAACI,MAAM,KAAK,CAAC,IAAIxB,SAAS,iBACjDb,KAAA,CAAAsC,aAAA,CAAC/B,iBAAiB,MAAE,CACrB,EACA,CAACO,KAAK,IAAImB,cAAc,CAACI,MAAM,KAAK,CAAC,IAAI,CAACxB,SAAS,iBAClDb,KAAA,CAAAsC,aAAA;IAAKnB,SAAS,EAAEX,YAAY,CAACkC;EAAa,GAAC,qBAEtC,CACN,EAEAT,cAAc,CAACI,MAAM,GAAG,CAAC,iBACxBrC,KAAA,CAAAsC,aAAA;IAAKnB,SAAS,EAAEb,MAAM,CAACqC;EAAU,GAC9BT,aAAa,CAACU,GAAG,CAAC,CAAC;IAAEf,KAAK;IAAEgB;EAAM,CAAC,KAAK;IACvC,MAAMC,UAAU,GAAGlC,QAAQ,GAAG,CAAC,GAAIiC,KAAK,GAAGjC,QAAQ,GAAI,GAAG,GAAG,CAAC;IAC9D,MAAMmC,WAAW,GAAG9B,QAAQ,GAAGY,KAAK,CAAC;IAErC,oBACE7B,KAAA,CAAAsC,aAAA,CAACxC,MAAM;MACLkD,GAAG,EAAEnB,KAAM;MACXV,SAAS,EAAEb,MAAM,CAAC2C,GAAI;MACtBC,OAAO,EAAEA,CAAA,KAAMtB,WAAW,CAACC,KAAK,CAAE;MAClC,gBAAcH,WAAW,CAACI,GAAG,CAACD,KAAK,CAAE;MACrCT,KAAK,EAAE2B,WAAW,IAAID,UAAU,GAAG,CAAC,GAChC;QACA,wCAAwC,EAAEA,UAAU,GAAG,GAAG;QAC1D,IAAIC,WAAW,GACX;UACA,uCAAuC,EAAEA;QAC3C,CAAC,GACCI,SAAS;MACf,CAAC,GACCA;IAAU,gBAEdnD,KAAA,CAAAsC,aAAA;MAAMnB,SAAS,EAAEb,MAAM,CAAC8C;IAAM,GAAEvB,KAAY,CAAC,EAC5CX,WAAW,KAAK,MAAM,iBACrBlB,KAAA,CAAAsC,aAAA;MAAMnB,SAAS,EAAEb,MAAM,CAAC+C;IAAI,gBAC1BrD,KAAA,CAAAsC,aAAA;MAAMnB,SAAS,EAAEb,MAAM,CAACgD;IAAQ,CAAE,CAC9B,CACP,EACApC,WAAW,KAAK,SAAS,iBACxBlB,KAAA,CAAAsC,aAAA;MAAMnB,SAAS,EAAEb,MAAM,CAACuC;IAAM,GAC3BA,KAAK,CAACU,cAAc,CAAC,CAClB,CAEF,CAAC;EAEb,CAAC,CAAC,EAEDnB,OAAO,IAAI,CAACb,UAAU,iBACrBvB,KAAA,CAAAsC,aAAA,CAACxC,MAAM;IACL0D,IAAI,EAAC,QAAQ;IACbrC,SAAS,EAAEb,MAAM,CAAC2C,GAAI;IACtBC,OAAO,EAAEA,CAAA,KAAM1B,aAAa,CAAC,IAAI;EAAE,GACpC,YACW,EAACS,cAAc,CAACI,MAAM,EAAC,GAC3B,CAEP,CAEJ,CAAC;AAEV;AAEA,OAAO,MAAMoB,cAAc,gBAAGxD,IAAI,CAChCS,mBACF,CAA+B","ignoreList":[]}
1
+ {"version":3,"file":"ListogramInput.js","names":["Button","classnames","React","memo","useCallback","useMemo","useState","filterValuesBySearch","styles","ListogramSkeleton","sharedStyles","useStableData","ListogramInputInner","values","maxCount","isLoading","error","selectedValues","onChange","colorMap","displayMode","className","style","maxVisibleItems","searchQuery","isExpanded","setIsExpanded","stableValues","selectedSet","Set","toggleValue","value","has","filter","v","filteredValues","displayValues","slice","hasMore","length","createElement","listogram","errorMessage","message","emptyMessage","container","map","count","percentage","perRowColor","key","row","onClick","undefined","label","bar","barFill","toLocaleString","type","ListogramInput"],"sources":["ListogramInput.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo, useState } from \"react\";\nimport type { PropertyAggregationValue } from \"../../types/AggregationTypes.js\";\nimport { filterValuesBySearch } from \"../../utils/filterValues.js\";\nimport styles from \"./ListogramInput.module.css\";\nimport { ListogramSkeleton } from \"./ListogramSkeleton.js\";\nimport sharedStyles from \"./shared.module.css\";\nimport { useStableData } from \"./useStableData.js\";\n\nexport type ListogramDisplayMode = \"full\" | \"count\" | \"minimal\";\n\ninterface ListogramInputProps {\n values: PropertyAggregationValue[];\n maxCount: number;\n isLoading: boolean;\n error: Error | null;\n selectedValues: string[];\n onChange: (values: string[]) => void;\n colorMap?: Record<string, string>;\n displayMode?: ListogramDisplayMode;\n className?: string;\n style?: React.CSSProperties;\n maxVisibleItems?: number;\n searchQuery?: string;\n}\n\nfunction ListogramInputInner({\n values,\n maxCount,\n isLoading,\n error,\n selectedValues,\n onChange,\n colorMap,\n displayMode = \"full\",\n className,\n style,\n maxVisibleItems,\n searchQuery,\n}: ListogramInputProps): React.ReactElement {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const stableValues = useStableData(values, isLoading);\n\n const selectedSet = useMemo(() => new Set(selectedValues), [selectedValues]);\n\n const toggleValue = useCallback(\n (value: string) => {\n if (selectedSet.has(value)) {\n onChange(selectedValues.filter((v) => v !== value));\n } else {\n onChange([...selectedValues, value]);\n }\n },\n [selectedValues, selectedSet, onChange],\n );\n\n const filteredValues = useMemo(() => {\n if (searchQuery) {\n return filterValuesBySearch(stableValues, searchQuery, (v) => v.value);\n }\n return stableValues;\n }, [stableValues, searchQuery]);\n\n const displayValues = useMemo(() => {\n if (isExpanded || !maxVisibleItems) return filteredValues;\n return filteredValues.slice(0, maxVisibleItems);\n }, [filteredValues, maxVisibleItems, isExpanded]);\n\n const hasMore = maxVisibleItems != null\n && filteredValues.length > maxVisibleItems;\n\n return (\n <div\n className={classnames(styles.listogram, className)}\n style={style}\n data-loading={isLoading && filteredValues.length > 0}\n >\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading values: {error.message}\n </div>\n )}\n\n {!error && filteredValues.length === 0 && isLoading && (\n <ListogramSkeleton />\n )}\n {!error && filteredValues.length === 0 && !isLoading && (\n <div className={sharedStyles.emptyMessage}>\n No values available\n </div>\n )}\n\n {filteredValues.length > 0 && (\n <div className={styles.container}>\n {displayValues.map(({ value, count }) => {\n const percentage = maxCount > 0 ? (count / maxCount) * 100 : 0;\n const perRowColor = colorMap?.[value];\n\n return (\n <Button\n key={value}\n className={styles.row}\n onClick={() => toggleValue(value)}\n aria-pressed={selectedSet.has(value)}\n style={perRowColor || percentage > 0\n ? {\n \"--osdk-filter-listogram-bar-fill-scale\": percentage / 100,\n ...(perRowColor\n ? {\n \"--osdk-filter-listogram-row-bar-color\": perRowColor,\n }\n : undefined),\n } as React.CSSProperties\n : undefined}\n >\n <span className={styles.label}>{value}</span>\n {displayMode === \"full\" && (\n <span className={styles.bar}>\n <span className={styles.barFill} />\n </span>\n )}\n {displayMode !== \"minimal\" && (\n <span className={styles.count}>\n {count.toLocaleString()}\n </span>\n )}\n </Button>\n );\n })}\n\n {hasMore && !isExpanded && (\n <Button\n type=\"button\"\n className={styles.row}\n onClick={() => setIsExpanded(true)}\n >\n View all ({filteredValues.length})\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport const ListogramInput = memo(\n ListogramInputInner,\n) as typeof ListogramInputInner;\n"],"mappings":"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","ignoreList":[]}
@@ -18,7 +18,7 @@ import { Button } from "@base-ui/react/button";
18
18
  import { Input } from "@base-ui/react/input";
19
19
  import classnames from "classnames";
20
20
  import React, { memo, useCallback } from "react";
21
- import { formatDateForDisplay, formatDateForInput, parseDateFromInput } from "./dateUtils.js";
21
+ import { formatDateForDisplay, formatDateForInput, parseDateFromInput } from "../../../shared/dateUtils.js";
22
22
  import styles from "./MultiDateInput.module.css.js";
23
23
  import sharedStyles from "./shared.module.css.js";
24
24
  function MultiDateInputInner({