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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/build/browser/base-components/action-button/ActionButton.module.css +0 -4
  3. package/build/browser/base-components/checkbox/Checkbox.module.css +0 -4
  4. package/build/browser/base-components/dialog/Dialog.module.css +0 -8
  5. package/build/browser/base-components/draggable-list/DraggableList.js +4 -2
  6. package/build/browser/base-components/draggable-list/DraggableList.js.map +1 -1
  7. package/build/browser/base-components/draggable-list/DraggableList.module.css +0 -8
  8. package/build/browser/filter-list/FilterInput.js +132 -0
  9. package/build/browser/filter-list/FilterInput.js.map +1 -0
  10. package/build/browser/filter-list/FilterList.js +91 -0
  11. package/build/browser/filter-list/FilterList.js.map +1 -0
  12. package/build/browser/filter-list/FilterListApi.js.map +1 -1
  13. package/build/browser/filter-list/FilterListItemApi.js.map +1 -1
  14. package/build/browser/filter-list/base/{FilterList.js → BaseFilterList.js} +30 -31
  15. package/build/browser/filter-list/base/BaseFilterList.js.map +1 -0
  16. package/build/browser/filter-list/base/BaseFilterListApi.js +2 -0
  17. package/build/browser/filter-list/base/BaseFilterListApi.js.map +1 -0
  18. package/build/browser/filter-list/base/FilterIcons.js +63 -0
  19. package/build/browser/filter-list/base/FilterIcons.js.map +1 -0
  20. package/build/browser/filter-list/base/FilterList.module.css +22 -1
  21. package/build/browser/filter-list/base/FilterList.module.css.js +2 -0
  22. package/build/browser/filter-list/base/FilterListContent.js +21 -20
  23. package/build/browser/filter-list/base/FilterListContent.js.map +1 -1
  24. package/build/browser/filter-list/base/FilterListHeader.js +8 -3
  25. package/build/browser/filter-list/base/FilterListHeader.js.map +1 -1
  26. package/build/browser/filter-list/base/FilterListHeader.module.css +25 -1
  27. package/build/browser/filter-list/base/FilterListHeader.module.css.js +3 -0
  28. package/build/browser/filter-list/base/FilterListItem.js +36 -17
  29. package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
  30. package/build/browser/filter-list/base/FilterListItem.module.css +58 -2
  31. package/build/browser/filter-list/base/FilterListItem.module.css.js +2 -0
  32. package/build/browser/filter-list/base/SortableFilterListItem.js +6 -6
  33. package/build/browser/filter-list/base/SortableFilterListItem.js.map +1 -1
  34. package/build/browser/filter-list/base/index.js +1 -2
  35. package/build/browser/filter-list/base/index.js.map +1 -1
  36. package/build/browser/filter-list/base/inputs/CheckboxListInput.js +34 -15
  37. package/build/browser/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
  38. package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css +13 -0
  39. package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css.js +2 -1
  40. package/build/browser/filter-list/base/inputs/DateRangeInput.js.map +1 -1
  41. package/build/browser/filter-list/base/inputs/ListogramInput.js +17 -21
  42. package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
  43. package/build/browser/filter-list/base/inputs/ListogramInput.module.css +25 -19
  44. package/build/browser/filter-list/base/inputs/MultiDateInput.module.css +6 -4
  45. package/build/browser/filter-list/base/inputs/MultiSelectInput.js +7 -14
  46. package/build/browser/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
  47. package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css +4 -1
  48. package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css.js +1 -1
  49. package/build/browser/filter-list/base/inputs/NullValueWrapper.js +4 -23
  50. package/build/browser/filter-list/base/inputs/NullValueWrapper.js.map +1 -1
  51. package/build/browser/filter-list/base/inputs/NullValueWrapper.module.css +3 -2
  52. package/build/browser/filter-list/base/inputs/NumberRangeInput.js.map +1 -1
  53. package/build/browser/filter-list/base/inputs/RangeInput.js +2 -32
  54. package/build/browser/filter-list/base/inputs/RangeInput.js.map +1 -1
  55. package/build/browser/filter-list/base/inputs/RangeInput.module.css +16 -14
  56. package/build/browser/filter-list/base/inputs/SingleDateInput.module.css +2 -1
  57. package/build/browser/filter-list/base/inputs/SingleSelectInput.js +6 -13
  58. package/build/browser/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
  59. package/build/browser/filter-list/base/inputs/TextTagsInput.js +6 -14
  60. package/build/browser/filter-list/base/inputs/TextTagsInput.js.map +1 -1
  61. package/build/browser/filter-list/base/inputs/TimelineInput.js +2 -2
  62. package/build/browser/filter-list/base/inputs/TimelineInput.js.map +1 -1
  63. package/build/browser/filter-list/base/inputs/TimelineInput.module.css +14 -12
  64. package/build/browser/filter-list/base/inputs/shared.module.css +5 -4
  65. package/build/browser/filter-list/hooks/useFilterListState.js +24 -3
  66. package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
  67. package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -1
  68. package/build/browser/filter-list/inputs/CheckboxListFilterInput.js +56 -0
  69. package/build/browser/filter-list/inputs/CheckboxListFilterInput.js.map +1 -0
  70. package/build/browser/filter-list/inputs/ContainsTextFilterInput.js +38 -0
  71. package/build/browser/filter-list/inputs/ContainsTextFilterInput.js.map +1 -0
  72. package/build/browser/filter-list/inputs/DateRangeFilterInput.js +105 -0
  73. package/build/browser/filter-list/inputs/DateRangeFilterInput.js.map +1 -0
  74. package/build/browser/filter-list/inputs/LinkedPropertyInput.js +508 -0
  75. package/build/browser/filter-list/inputs/LinkedPropertyInput.js.map +1 -0
  76. package/build/browser/filter-list/inputs/ListogramFilterInput.js +62 -0
  77. package/build/browser/filter-list/inputs/ListogramFilterInput.js.map +1 -0
  78. package/build/browser/filter-list/inputs/MultiDateFilterInput.js +38 -0
  79. package/build/browser/filter-list/inputs/MultiDateFilterInput.js.map +1 -0
  80. package/build/browser/filter-list/inputs/MultiSelectFilterInput.js +55 -0
  81. package/build/browser/filter-list/inputs/MultiSelectFilterInput.js.map +1 -0
  82. package/build/browser/filter-list/inputs/NumberRangeFilterInput.js +105 -0
  83. package/build/browser/filter-list/inputs/NumberRangeFilterInput.js.map +1 -0
  84. package/build/browser/filter-list/inputs/PropertyFilterInput.js +129 -0
  85. package/build/browser/filter-list/inputs/PropertyFilterInput.js.map +1 -0
  86. package/build/browser/filter-list/inputs/SingleDateFilterInput.js +38 -0
  87. package/build/browser/filter-list/inputs/SingleDateFilterInput.js.map +1 -0
  88. package/build/browser/filter-list/inputs/SingleSelectFilterInput.js +55 -0
  89. package/build/browser/filter-list/inputs/SingleSelectFilterInput.js.map +1 -0
  90. package/build/browser/filter-list/inputs/TextTagsFilterInput.js +54 -0
  91. package/build/browser/filter-list/inputs/TextTagsFilterInput.js.map +1 -0
  92. package/build/browser/filter-list/inputs/TimelineFilterInput.js +49 -0
  93. package/build/browser/filter-list/inputs/TimelineFilterInput.js.map +1 -0
  94. package/build/browser/filter-list/inputs/ToggleFilterInput.js +36 -0
  95. package/build/browser/filter-list/inputs/ToggleFilterInput.js.map +1 -0
  96. package/build/browser/filter-list/types/AggregationTypes.js +2 -0
  97. package/build/browser/filter-list/types/AggregationTypes.js.map +1 -0
  98. package/build/browser/filter-list/types/LinkedFilterTypes.js.map +1 -1
  99. package/build/browser/filter-list/types/index.js +0 -2
  100. package/build/browser/filter-list/types/index.js.map +1 -1
  101. package/build/browser/filter-list/utils/filterStateSerialization.js +42 -0
  102. package/build/browser/filter-list/utils/filterStateSerialization.js.map +1 -0
  103. package/build/browser/filter-list/utils/filterStateToWhereClause.js +19 -11
  104. package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  105. package/build/browser/filter-list/utils/filterValues.js +26 -0
  106. package/build/browser/filter-list/utils/filterValues.js.map +1 -1
  107. package/build/browser/object-table/ColumnConfigDialog.module.css +0 -9
  108. package/build/browser/object-table/MultiColumnSortDialog.module.css +0 -4
  109. package/build/browser/object-table/TableHeaderWithPopover.module.css +0 -12
  110. package/build/browser/public/experimental.js +4 -1
  111. package/build/browser/public/experimental.js.map +1 -1
  112. package/build/browser/shared/ErrorBoundary.module.css +14 -14
  113. package/build/browser/styles.css +207 -124
  114. package/build/cjs/public/experimental.cjs +3144 -2551
  115. package/build/cjs/public/experimental.cjs.map +1 -1
  116. package/build/cjs/public/experimental.css +591 -513
  117. package/build/cjs/public/experimental.css.map +1 -1
  118. package/build/cjs/public/experimental.d.cts +62 -2
  119. package/build/esm/base-components/action-button/ActionButton.module.css +0 -4
  120. package/build/esm/base-components/checkbox/Checkbox.module.css +0 -4
  121. package/build/esm/base-components/dialog/Dialog.module.css +0 -8
  122. package/build/esm/base-components/draggable-list/DraggableList.js +4 -2
  123. package/build/esm/base-components/draggable-list/DraggableList.js.map +1 -1
  124. package/build/esm/base-components/draggable-list/DraggableList.module.css +0 -8
  125. package/build/esm/filter-list/FilterInput.js +132 -0
  126. package/build/esm/filter-list/FilterInput.js.map +1 -0
  127. package/build/esm/filter-list/FilterList.js +91 -0
  128. package/build/esm/filter-list/FilterList.js.map +1 -0
  129. package/build/esm/filter-list/FilterListApi.js.map +1 -1
  130. package/build/esm/filter-list/FilterListItemApi.js.map +1 -1
  131. package/build/esm/filter-list/base/{FilterList.js → BaseFilterList.js} +30 -31
  132. package/build/esm/filter-list/base/BaseFilterList.js.map +1 -0
  133. package/build/esm/filter-list/base/BaseFilterListApi.js +2 -0
  134. package/build/esm/filter-list/base/BaseFilterListApi.js.map +1 -0
  135. package/build/esm/filter-list/base/FilterIcons.js +63 -0
  136. package/build/esm/filter-list/base/FilterIcons.js.map +1 -0
  137. package/build/esm/filter-list/base/FilterList.module.css +22 -1
  138. package/build/esm/filter-list/base/FilterListContent.js +21 -20
  139. package/build/esm/filter-list/base/FilterListContent.js.map +1 -1
  140. package/build/esm/filter-list/base/FilterListHeader.js +8 -3
  141. package/build/esm/filter-list/base/FilterListHeader.js.map +1 -1
  142. package/build/esm/filter-list/base/FilterListHeader.module.css +25 -1
  143. package/build/esm/filter-list/base/FilterListItem.js +36 -17
  144. package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
  145. package/build/esm/filter-list/base/FilterListItem.module.css +58 -2
  146. package/build/esm/filter-list/base/SortableFilterListItem.js +6 -6
  147. package/build/esm/filter-list/base/SortableFilterListItem.js.map +1 -1
  148. package/build/esm/filter-list/base/index.js +1 -2
  149. package/build/esm/filter-list/base/index.js.map +1 -1
  150. package/build/esm/filter-list/base/inputs/CheckboxListInput.js +34 -15
  151. package/build/esm/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
  152. package/build/esm/filter-list/base/inputs/CheckboxListInput.module.css +13 -0
  153. package/build/esm/filter-list/base/inputs/DateRangeInput.js.map +1 -1
  154. package/build/esm/filter-list/base/inputs/ListogramInput.js +17 -21
  155. package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
  156. package/build/esm/filter-list/base/inputs/ListogramInput.module.css +25 -19
  157. package/build/esm/filter-list/base/inputs/MultiDateInput.module.css +6 -4
  158. package/build/esm/filter-list/base/inputs/MultiSelectInput.js +7 -14
  159. package/build/esm/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
  160. package/build/esm/filter-list/base/inputs/MultiSelectInput.module.css +4 -1
  161. package/build/esm/filter-list/base/inputs/NullValueWrapper.js +4 -23
  162. package/build/esm/filter-list/base/inputs/NullValueWrapper.js.map +1 -1
  163. package/build/esm/filter-list/base/inputs/NullValueWrapper.module.css +3 -2
  164. package/build/esm/filter-list/base/inputs/NumberRangeInput.js.map +1 -1
  165. package/build/esm/filter-list/base/inputs/RangeInput.js +2 -32
  166. package/build/esm/filter-list/base/inputs/RangeInput.js.map +1 -1
  167. package/build/esm/filter-list/base/inputs/RangeInput.module.css +16 -14
  168. package/build/esm/filter-list/base/inputs/SingleDateInput.module.css +2 -1
  169. package/build/esm/filter-list/base/inputs/SingleSelectInput.js +6 -13
  170. package/build/esm/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
  171. package/build/esm/filter-list/base/inputs/TextTagsInput.js +6 -14
  172. package/build/esm/filter-list/base/inputs/TextTagsInput.js.map +1 -1
  173. package/build/esm/filter-list/base/inputs/TimelineInput.js +2 -2
  174. package/build/esm/filter-list/base/inputs/TimelineInput.js.map +1 -1
  175. package/build/esm/filter-list/base/inputs/TimelineInput.module.css +14 -12
  176. package/build/esm/filter-list/base/inputs/shared.module.css +5 -4
  177. package/build/esm/filter-list/hooks/useFilterListState.js +24 -3
  178. package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
  179. package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -1
  180. package/build/esm/filter-list/inputs/CheckboxListFilterInput.js +56 -0
  181. package/build/esm/filter-list/inputs/CheckboxListFilterInput.js.map +1 -0
  182. package/build/esm/filter-list/inputs/ContainsTextFilterInput.js +38 -0
  183. package/build/esm/filter-list/inputs/ContainsTextFilterInput.js.map +1 -0
  184. package/build/esm/filter-list/inputs/DateRangeFilterInput.js +105 -0
  185. package/build/esm/filter-list/inputs/DateRangeFilterInput.js.map +1 -0
  186. package/build/esm/filter-list/inputs/LinkedPropertyInput.js +508 -0
  187. package/build/esm/filter-list/inputs/LinkedPropertyInput.js.map +1 -0
  188. package/build/esm/filter-list/inputs/ListogramFilterInput.js +62 -0
  189. package/build/esm/filter-list/inputs/ListogramFilterInput.js.map +1 -0
  190. package/build/esm/filter-list/inputs/MultiDateFilterInput.js +38 -0
  191. package/build/esm/filter-list/inputs/MultiDateFilterInput.js.map +1 -0
  192. package/build/esm/filter-list/inputs/MultiSelectFilterInput.js +55 -0
  193. package/build/esm/filter-list/inputs/MultiSelectFilterInput.js.map +1 -0
  194. package/build/esm/filter-list/inputs/NumberRangeFilterInput.js +105 -0
  195. package/build/esm/filter-list/inputs/NumberRangeFilterInput.js.map +1 -0
  196. package/build/esm/filter-list/inputs/PropertyFilterInput.js +129 -0
  197. package/build/esm/filter-list/inputs/PropertyFilterInput.js.map +1 -0
  198. package/build/esm/filter-list/inputs/SingleDateFilterInput.js +38 -0
  199. package/build/esm/filter-list/inputs/SingleDateFilterInput.js.map +1 -0
  200. package/build/esm/filter-list/inputs/SingleSelectFilterInput.js +55 -0
  201. package/build/esm/filter-list/inputs/SingleSelectFilterInput.js.map +1 -0
  202. package/build/esm/filter-list/inputs/TextTagsFilterInput.js +54 -0
  203. package/build/esm/filter-list/inputs/TextTagsFilterInput.js.map +1 -0
  204. package/build/esm/filter-list/inputs/TimelineFilterInput.js +49 -0
  205. package/build/esm/filter-list/inputs/TimelineFilterInput.js.map +1 -0
  206. package/build/esm/filter-list/inputs/ToggleFilterInput.js +36 -0
  207. package/build/esm/filter-list/inputs/ToggleFilterInput.js.map +1 -0
  208. package/build/esm/filter-list/types/AggregationTypes.js +2 -0
  209. package/build/esm/filter-list/types/AggregationTypes.js.map +1 -0
  210. package/build/esm/filter-list/types/LinkedFilterTypes.js.map +1 -1
  211. package/build/esm/filter-list/types/index.js +0 -2
  212. package/build/esm/filter-list/types/index.js.map +1 -1
  213. package/build/esm/filter-list/utils/filterStateSerialization.js +42 -0
  214. package/build/esm/filter-list/utils/filterStateSerialization.js.map +1 -0
  215. package/build/esm/filter-list/utils/filterStateToWhereClause.js +19 -11
  216. package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  217. package/build/esm/filter-list/utils/filterValues.js +26 -0
  218. package/build/esm/filter-list/utils/filterValues.js.map +1 -1
  219. package/build/esm/object-table/ColumnConfigDialog.module.css +0 -9
  220. package/build/esm/object-table/MultiColumnSortDialog.module.css +0 -4
  221. package/build/esm/object-table/TableHeaderWithPopover.module.css +0 -12
  222. package/build/esm/public/experimental.js +4 -1
  223. package/build/esm/public/experimental.js.map +1 -1
  224. package/build/esm/shared/ErrorBoundary.module.css +14 -14
  225. package/build/types/filter-list/{base/FilterInput.d.ts → FilterInput.d.ts} +2 -2
  226. package/build/types/filter-list/FilterInput.d.ts.map +1 -0
  227. package/build/types/filter-list/{base/FilterList.d.ts → FilterList.d.ts} +1 -1
  228. package/build/types/filter-list/FilterList.d.ts.map +1 -0
  229. package/build/types/filter-list/FilterListApi.d.ts +14 -0
  230. package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
  231. package/build/types/filter-list/FilterListItemApi.d.ts +13 -0
  232. package/build/types/filter-list/FilterListItemApi.d.ts.map +1 -1
  233. package/build/types/filter-list/base/BaseFilterList.d.ts +3 -0
  234. package/build/types/filter-list/base/BaseFilterList.d.ts.map +1 -0
  235. package/build/types/filter-list/base/BaseFilterListApi.d.ts +29 -0
  236. package/build/types/filter-list/base/BaseFilterListApi.d.ts.map +1 -0
  237. package/build/types/filter-list/base/FilterIcons.d.ts +4 -0
  238. package/build/types/filter-list/base/FilterIcons.d.ts.map +1 -0
  239. package/build/types/filter-list/base/FilterListContent.d.ts +8 -8
  240. package/build/types/filter-list/base/FilterListContent.d.ts.map +1 -1
  241. package/build/types/filter-list/base/FilterListHeader.d.ts.map +1 -1
  242. package/build/types/filter-list/base/FilterListItem.d.ts +7 -8
  243. package/build/types/filter-list/base/FilterListItem.d.ts.map +1 -1
  244. package/build/types/filter-list/base/SortableFilterListItem.d.ts +7 -8
  245. package/build/types/filter-list/base/SortableFilterListItem.d.ts.map +1 -1
  246. package/build/types/filter-list/base/index.d.ts +2 -2
  247. package/build/types/filter-list/base/index.d.ts.map +1 -1
  248. package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts +7 -13
  249. package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts.map +1 -1
  250. package/build/types/filter-list/base/inputs/DateRangeInput.d.ts +7 -12
  251. package/build/types/filter-list/base/inputs/DateRangeInput.d.ts.map +1 -1
  252. package/build/types/filter-list/base/inputs/ListogramInput.d.ts +10 -13
  253. package/build/types/filter-list/base/inputs/ListogramInput.d.ts.map +1 -1
  254. package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts +7 -13
  255. package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts.map +1 -1
  256. package/build/types/filter-list/base/inputs/NullValueWrapper.d.ts +5 -11
  257. package/build/types/filter-list/base/inputs/NullValueWrapper.d.ts.map +1 -1
  258. package/build/types/filter-list/base/inputs/NumberRangeInput.d.ts +7 -12
  259. package/build/types/filter-list/base/inputs/NumberRangeInput.d.ts.map +1 -1
  260. package/build/types/filter-list/base/inputs/RangeInput.d.ts +7 -14
  261. package/build/types/filter-list/base/inputs/RangeInput.d.ts.map +1 -1
  262. package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts +7 -13
  263. package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts.map +1 -1
  264. package/build/types/filter-list/base/inputs/TextTagsInput.d.ts +7 -13
  265. package/build/types/filter-list/base/inputs/TextTagsInput.d.ts.map +1 -1
  266. package/build/types/filter-list/hooks/useFilterListState.d.ts +1 -0
  267. package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -1
  268. package/build/types/filter-list/hooks/usePropertyAggregation.d.ts +2 -5
  269. package/build/types/filter-list/hooks/usePropertyAggregation.d.ts.map +1 -1
  270. package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts +14 -0
  271. package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts.map +1 -0
  272. package/build/types/filter-list/inputs/ContainsTextFilterInput.d.ts +10 -0
  273. package/build/types/filter-list/inputs/ContainsTextFilterInput.d.ts.map +1 -0
  274. package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts +12 -0
  275. package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts.map +1 -0
  276. package/build/types/filter-list/{base/inputs → inputs}/LinkedPropertyInput.d.ts +2 -2
  277. package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts.map +1 -0
  278. package/build/types/filter-list/inputs/ListogramFilterInput.d.ts +16 -0
  279. package/build/types/filter-list/inputs/ListogramFilterInput.d.ts.map +1 -0
  280. package/build/types/filter-list/inputs/MultiDateFilterInput.d.ts +9 -0
  281. package/build/types/filter-list/inputs/MultiDateFilterInput.d.ts.map +1 -0
  282. package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts +13 -0
  283. package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts.map +1 -0
  284. package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts +12 -0
  285. package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts.map +1 -0
  286. package/build/types/filter-list/inputs/PropertyFilterInput.d.ts +17 -0
  287. package/build/types/filter-list/inputs/PropertyFilterInput.d.ts.map +1 -0
  288. package/build/types/filter-list/inputs/SingleDateFilterInput.d.ts +9 -0
  289. package/build/types/filter-list/inputs/SingleDateFilterInput.d.ts.map +1 -0
  290. package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts +13 -0
  291. package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts.map +1 -0
  292. package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts +13 -0
  293. package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts.map +1 -0
  294. package/build/types/filter-list/inputs/TimelineFilterInput.d.ts +9 -0
  295. package/build/types/filter-list/inputs/TimelineFilterInput.d.ts.map +1 -0
  296. package/build/types/filter-list/inputs/ToggleFilterInput.d.ts +9 -0
  297. package/build/types/filter-list/inputs/ToggleFilterInput.d.ts.map +1 -0
  298. package/build/types/filter-list/types/AggregationTypes.d.ts +5 -0
  299. package/build/types/filter-list/types/AggregationTypes.d.ts.map +1 -0
  300. package/build/types/filter-list/types/LinkedFilterTypes.d.ts +0 -19
  301. package/build/types/filter-list/types/LinkedFilterTypes.d.ts.map +1 -1
  302. package/build/types/filter-list/types/index.d.ts +0 -2
  303. package/build/types/filter-list/types/index.d.ts.map +1 -1
  304. package/build/types/filter-list/utils/filterStateSerialization.d.ts +3 -0
  305. package/build/types/filter-list/utils/filterStateSerialization.d.ts.map +1 -0
  306. package/build/types/filter-list/utils/filterStateToWhereClause.d.ts +1 -1
  307. package/build/types/filter-list/utils/filterStateToWhereClause.d.ts.map +1 -1
  308. package/build/types/filter-list/utils/filterValues.d.ts +2 -0
  309. package/build/types/filter-list/utils/filterValues.d.ts.map +1 -1
  310. package/build/types/public/experimental.d.ts +4 -1
  311. package/build/types/public/experimental.d.ts.map +1 -1
  312. package/package.json +3 -3
  313. package/build/browser/filter-list/base/FilterInput.js +0 -542
  314. package/build/browser/filter-list/base/FilterInput.js.map +0 -1
  315. package/build/browser/filter-list/base/FilterList.js.map +0 -1
  316. package/build/browser/filter-list/base/inputs/LinkedPropertyInput.js +0 -237
  317. package/build/browser/filter-list/base/inputs/LinkedPropertyInput.js.map +0 -1
  318. package/build/browser/filter-list/types/AddFilterMenuTypes.js +0 -2
  319. package/build/browser/filter-list/types/AddFilterMenuTypes.js.map +0 -1
  320. package/build/browser/filter-list/types/FilterPanelTypes.js +0 -2
  321. package/build/browser/filter-list/types/FilterPanelTypes.js.map +0 -1
  322. package/build/esm/filter-list/base/FilterInput.js +0 -542
  323. package/build/esm/filter-list/base/FilterInput.js.map +0 -1
  324. package/build/esm/filter-list/base/FilterList.js.map +0 -1
  325. package/build/esm/filter-list/base/inputs/LinkedPropertyInput.js +0 -237
  326. package/build/esm/filter-list/base/inputs/LinkedPropertyInput.js.map +0 -1
  327. package/build/esm/filter-list/types/AddFilterMenuTypes.js +0 -2
  328. package/build/esm/filter-list/types/AddFilterMenuTypes.js.map +0 -1
  329. package/build/esm/filter-list/types/FilterPanelTypes.js +0 -2
  330. package/build/esm/filter-list/types/FilterPanelTypes.js.map +0 -1
  331. package/build/types/filter-list/base/FilterInput.d.ts.map +0 -1
  332. package/build/types/filter-list/base/FilterList.d.ts.map +0 -1
  333. package/build/types/filter-list/base/inputs/LinkedPropertyInput.d.ts.map +0 -1
  334. package/build/types/filter-list/types/AddFilterMenuTypes.d.ts +0 -56
  335. package/build/types/filter-list/types/AddFilterMenuTypes.d.ts.map +0 -1
  336. package/build/types/filter-list/types/FilterPanelTypes.d.ts +0 -18
  337. package/build/types/filter-list/types/FilterPanelTypes.d.ts.map +0 -1
@@ -26,6 +26,7 @@
26
26
  }
27
27
 
28
28
  .itemLabel {
29
+ flex: 1;
29
30
  font-family: var(--osdk-filter-item-label-font-family);
30
31
  font-size: var(--osdk-filter-item-label-font-size);
31
32
  font-weight: var(--osdk-filter-item-label-font-weight);
@@ -60,11 +61,66 @@
60
61
  }
61
62
 
62
63
  &:focus-visible {
63
- outline: 2px solid var(--osdk-filter-item-drag-handle-focus-outline-color);
64
- outline-offset: 2px;
64
+ outline: var(--osdk-filter-input-focus-outline-width) solid var(--osdk-filter-item-drag-handle-focus-outline-color);
65
+ outline-offset: var(--osdk-filter-input-focus-outline-offset);
65
66
  }
66
67
  }
67
68
 
69
+ .excludeToggle {
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: center;
73
+ padding: var(--osdk-filter-item-exclude-toggle-padding);
74
+ margin-left: auto;
75
+ border: none;
76
+ background: transparent;
77
+ cursor: pointer;
78
+ border-radius: var(--osdk-filter-item-exclude-toggle-border-radius);
79
+ color: var(--osdk-filter-item-exclude-toggle-color);
80
+
81
+ &:hover {
82
+ color: var(--osdk-filter-item-exclude-toggle-color-hover);
83
+ background: var(--osdk-filter-item-exclude-toggle-bg-hover);
84
+ }
85
+
86
+ &:focus-visible {
87
+ outline: var(--osdk-filter-input-focus-outline-width) solid var(--osdk-filter-input-focus-outline-color);
88
+ outline-offset: var(--osdk-filter-input-focus-outline-offset);
89
+ }
90
+ }
91
+
92
+ .excludeToggle[aria-pressed="true"] {
93
+ color: var(--osdk-filter-item-exclude-toggle-color-active);
94
+ }
95
+
96
+ .removeButton {
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: center;
100
+ padding: var(--osdk-filter-item-exclude-toggle-padding);
101
+ margin-left: var(--osdk-surface-spacing);
102
+ border: none;
103
+ background: transparent;
104
+ cursor: pointer;
105
+ border-radius: var(--osdk-filter-item-exclude-toggle-border-radius);
106
+ color: var(--osdk-filter-item-exclude-toggle-color);
107
+
108
+ &:hover {
109
+ color: var(--osdk-filter-item-exclude-toggle-color-hover);
110
+ background: var(--osdk-filter-item-exclude-toggle-bg-hover);
111
+ }
112
+
113
+ &:focus-visible {
114
+ outline: var(--osdk-filter-input-focus-outline-width) solid var(--osdk-filter-input-focus-outline-color);
115
+ outline-offset: var(--osdk-filter-input-focus-outline-offset);
116
+ }
117
+ }
118
+
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);
122
+ }
123
+
68
124
  .dragging {
69
125
  opacity: var(--osdk-filter-item-dragging-opacity);
70
126
  }
@@ -5,6 +5,8 @@ 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
10
  "dragging": "FilterListItem-module__dragging___S5-LGyfS"
9
11
  };
10
12
 
@@ -22,13 +22,13 @@ import { FilterListItem } from "./FilterListItem.js";
22
22
  import styles from "./FilterListItem.module.css.js";
23
23
  export function SortableFilterListItem({
24
24
  id,
25
- objectType,
26
- objectSet,
27
25
  definition,
28
26
  filterKey,
27
+ label,
29
28
  filterState,
30
29
  onFilterStateChanged,
31
- whereClause
30
+ onFilterRemoved,
31
+ renderInput
32
32
  }) {
33
33
  const {
34
34
  attributes,
@@ -49,13 +49,13 @@ export function SortableFilterListItem({
49
49
  style: style,
50
50
  className: classnames(isDragging && styles.dragging)
51
51
  }, /*#__PURE__*/React.createElement(FilterListItem, {
52
- objectType: objectType,
53
- objectSet: objectSet,
54
52
  definition: definition,
55
53
  filterKey: filterKey,
54
+ label: label,
56
55
  filterState: filterState,
57
56
  onFilterStateChanged: onFilterStateChanged,
58
- whereClause: whereClause,
57
+ onFilterRemoved: onFilterRemoved,
58
+ renderInput: renderInput,
59
59
  dragHandleAttributes: attributes,
60
60
  dragHandleListeners: listeners
61
61
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"SortableFilterListItem.js","names":["useSortable","CSS","classnames","React","useMemo","FilterListItem","styles","SortableFilterListItem","id","objectType","objectSet","definition","filterKey","filterState","onFilterStateChanged","whereClause","attributes","listeners","setNodeRef","transform","transition","isDragging","style","Transform","toString","undefined","createElement","ref","className","dragging","dragHandleAttributes","dragHandleListeners"],"sources":["SortableFilterListItem.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 { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport type { ObjectSet, ObjectTypeDefinition, WhereClause } from \"@osdk/api\";\nimport classnames from \"classnames\";\nimport React, { useMemo } from \"react\";\nimport type { FilterDefinitionUnion } from \"../FilterListApi.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { FilterListItem } from \"./FilterListItem.js\";\nimport styles from \"./FilterListItem.module.css\";\n\ninterface SortableFilterListItemProps<Q extends ObjectTypeDefinition> {\n id: string;\n objectType: Q;\n objectSet: ObjectSet<Q>;\n definition: FilterDefinitionUnion<Q>;\n filterKey: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (\n filterKey: string,\n state: FilterState,\n ) => void;\n whereClause: WhereClause<Q>;\n}\n\nexport function SortableFilterListItem<Q extends ObjectTypeDefinition>({\n id,\n objectType,\n objectSet,\n definition,\n filterKey,\n filterState,\n onFilterStateChanged,\n whereClause,\n}: SortableFilterListItemProps<Q>): React.ReactElement {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id });\n\n const style = useMemo<React.CSSProperties>(() => ({\n transform: CSS.Transform.toString(transform),\n transition: transition ?? undefined,\n }), [transform, transition]);\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={classnames(isDragging && styles.dragging)}\n >\n <FilterListItem\n objectType={objectType}\n objectSet={objectSet}\n definition={definition}\n filterKey={filterKey}\n filterState={filterState}\n onFilterStateChanged={onFilterStateChanged}\n whereClause={whereClause}\n dragHandleAttributes={attributes}\n dragHandleListeners={listeners}\n />\n </div>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,GAAG,QAAQ,oBAAoB;AAExC,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,OAAO,QAAQ,OAAO;AAGtC,SAASC,cAAc,QAAQ,qBAAqB;AACpD,OAAOC,MAAM,MAAM,6BAA6B;AAgBhD,OAAO,SAASC,sBAAsBA,CAAiC;EACrEC,EAAE;EACFC,UAAU;EACVC,SAAS;EACTC,UAAU;EACVC,SAAS;EACTC,WAAW;EACXC,oBAAoB;EACpBC;AAC8B,CAAC,EAAsB;EACrD,MAAM;IACJC,UAAU;IACVC,SAAS;IACTC,UAAU;IACVC,SAAS;IACTC,UAAU;IACVC;EACF,CAAC,GAAGrB,WAAW,CAAC;IAAEQ;EAAG,CAAC,CAAC;EAEvB,MAAMc,KAAK,GAAGlB,OAAO,CAAsB,OAAO;IAChDe,SAAS,EAAElB,GAAG,CAACsB,SAAS,CAACC,QAAQ,CAACL,SAAS,CAAC;IAC5CC,UAAU,EAAEA,UAAU,IAAIK;EAC5B,CAAC,CAAC,EAAE,CAACN,SAAS,EAAEC,UAAU,CAAC,CAAC;EAE5B,oBACEjB,KAAA,CAAAuB,aAAA;IACEC,GAAG,EAAET,UAAW;IAChBI,KAAK,EAAEA,KAAM;IACbM,SAAS,EAAE1B,UAAU,CAACmB,UAAU,IAAIf,MAAM,CAACuB,QAAQ;EAAE,gBAErD1B,KAAA,CAAAuB,aAAA,CAACrB,cAAc;IACbI,UAAU,EAAEA,UAAW;IACvBC,SAAS,EAAEA,SAAU;IACrBC,UAAU,EAAEA,UAAW;IACvBC,SAAS,EAAEA,SAAU;IACrBC,WAAW,EAAEA,WAAY;IACzBC,oBAAoB,EAAEA,oBAAqB;IAC3CC,WAAW,EAAEA,WAAY;IACzBe,oBAAoB,EAAEd,UAAW;IACjCe,mBAAmB,EAAEd;EAAU,CAChC,CACE,CAAC;AAEV","ignoreList":[]}
1
+ {"version":3,"file":"SortableFilterListItem.js","names":["useSortable","CSS","classnames","React","useMemo","FilterListItem","styles","SortableFilterListItem","id","definition","filterKey","label","filterState","onFilterStateChanged","onFilterRemoved","renderInput","attributes","listeners","setNodeRef","transform","transition","isDragging","style","Transform","toString","undefined","createElement","ref","className","dragging","dragHandleAttributes","dragHandleListeners"],"sources":["SortableFilterListItem.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 { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport classnames from \"classnames\";\nimport React, { useMemo } from \"react\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport type { RenderFilterInput } from \"./BaseFilterListApi.js\";\nimport { FilterListItem } from \"./FilterListItem.js\";\nimport styles from \"./FilterListItem.module.css\";\n\ninterface SortableFilterListItemProps<D> {\n id: string;\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}\n\nexport function SortableFilterListItem<D>({\n id,\n definition,\n filterKey,\n label,\n filterState,\n onFilterStateChanged,\n onFilterRemoved,\n renderInput,\n}: SortableFilterListItemProps<D>): React.ReactElement {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id });\n\n const style = useMemo<React.CSSProperties>(() => ({\n transform: CSS.Transform.toString(transform),\n transition: transition ?? undefined,\n }), [transform, transition]);\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={classnames(isDragging && styles.dragging)}\n >\n <FilterListItem\n definition={definition}\n filterKey={filterKey}\n label={label}\n filterState={filterState}\n onFilterStateChanged={onFilterStateChanged}\n onFilterRemoved={onFilterRemoved}\n renderInput={renderInput}\n dragHandleAttributes={attributes}\n dragHandleListeners={listeners}\n />\n </div>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,GAAG,QAAQ,oBAAoB;AACxC,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,OAAO,QAAQ,OAAO;AAGtC,SAASC,cAAc,QAAQ,qBAAqB;AACpD,OAAOC,MAAM,MAAM,6BAA6B;AAgBhD,OAAO,SAASC,sBAAsBA,CAAI;EACxCC,EAAE;EACFC,UAAU;EACVC,SAAS;EACTC,KAAK;EACLC,WAAW;EACXC,oBAAoB;EACpBC,eAAe;EACfC;AAC8B,CAAC,EAAsB;EACrD,MAAM;IACJC,UAAU;IACVC,SAAS;IACTC,UAAU;IACVC,SAAS;IACTC,UAAU;IACVC;EACF,CAAC,GAAGrB,WAAW,CAAC;IAAEQ;EAAG,CAAC,CAAC;EAEvB,MAAMc,KAAK,GAAGlB,OAAO,CAAsB,OAAO;IAChDe,SAAS,EAAElB,GAAG,CAACsB,SAAS,CAACC,QAAQ,CAACL,SAAS,CAAC;IAC5CC,UAAU,EAAEA,UAAU,IAAIK;EAC5B,CAAC,CAAC,EAAE,CAACN,SAAS,EAAEC,UAAU,CAAC,CAAC;EAE5B,oBACEjB,KAAA,CAAAuB,aAAA;IACEC,GAAG,EAAET,UAAW;IAChBI,KAAK,EAAEA,KAAM;IACbM,SAAS,EAAE1B,UAAU,CAACmB,UAAU,IAAIf,MAAM,CAACuB,QAAQ;EAAE,gBAErD1B,KAAA,CAAAuB,aAAA,CAACrB,cAAc;IACbI,UAAU,EAAEA,UAAW;IACvBC,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA,KAAM;IACbC,WAAW,EAAEA,WAAY;IACzBC,oBAAoB,EAAEA,oBAAqB;IAC3CC,eAAe,EAAEA,eAAgB;IACjCC,WAAW,EAAEA,WAAY;IACzBe,oBAAoB,EAAEd,UAAW;IACjCe,mBAAmB,EAAEd;EAAU,CAChC,CACE,CAAC;AAEV","ignoreList":[]}
@@ -14,8 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- export { FilterInput } from "./FilterInput.js";
18
- export { FilterList } from "./FilterList.js";
17
+ export { BaseFilterList } from "./BaseFilterList.js";
19
18
  export { FilterListContent } from "./FilterListContent.js";
20
19
  export { FilterListHeader } from "./FilterListHeader.js";
21
20
  export { FilterListItem } from "./FilterListItem.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["FilterInput","FilterList","FilterListContent","FilterListHeader","FilterListItem"],"sources":["index.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport { FilterInput } from \"./FilterInput.js\";\nexport { FilterList } from \"./FilterList.js\";\nexport { FilterListContent } from \"./FilterListContent.js\";\nexport { FilterListHeader } from \"./FilterListHeader.js\";\nexport { FilterListItem } from \"./FilterListItem.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,WAAW,QAAQ,kBAAkB;AAC9C,SAASC,UAAU,QAAQ,iBAAiB;AAC5C,SAASC,iBAAiB,QAAQ,wBAAwB;AAC1D,SAASC,gBAAgB,QAAQ,uBAAuB;AACxD,SAASC,cAAc,QAAQ,qBAAqB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["BaseFilterList","FilterListContent","FilterListHeader","FilterListItem"],"sources":["index.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport { BaseFilterList } from \"./BaseFilterList.js\";\nexport type {\n BaseFilterListProps,\n RenderFilterInput,\n} from \"./BaseFilterListApi.js\";\nexport { FilterListContent } from \"./FilterListContent.js\";\nexport { FilterListHeader } from \"./FilterListHeader.js\";\nexport { FilterListItem } from \"./FilterListItem.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,cAAc,QAAQ,qBAAqB;AAKpD,SAASC,iBAAiB,QAAQ,wBAAwB;AAC1D,SAASC,gBAAgB,QAAQ,uBAAuB;AACxD,SAASC,cAAc,QAAQ,qBAAqB","ignoreList":[]}
@@ -17,26 +17,19 @@
17
17
  import classnames from "classnames";
18
18
  import React, { memo, useCallback, useMemo } from "react";
19
19
  import { Checkbox } from "../../../base-components/checkbox/Checkbox.js";
20
- import { usePropertyAggregation } from "../../hooks/usePropertyAggregation.js";
21
20
  import styles from "./CheckboxListInput.module.css.js";
22
21
  import sharedStyles from "./shared.module.css.js";
23
22
  function CheckboxListInputInner({
24
- objectType,
25
- propertyKey,
23
+ values,
24
+ isLoading,
25
+ error,
26
26
  selectedValues,
27
27
  onChange,
28
- whereClause,
28
+ colorMap,
29
29
  className,
30
30
  style
31
31
  }) {
32
- const {
33
- data,
34
- isLoading,
35
- error
36
- } = usePropertyAggregation(objectType, propertyKey, {
37
- where: whereClause
38
- });
39
- const values = useMemo(() => data.map(item => item.value), [data]);
32
+ const displayValues = useMemo(() => values.map(item => item.value), [values]);
40
33
  const selectedSet = useMemo(() => new Set(selectedValues), [selectedValues]);
41
34
  const toggleValue = useCallback(value => {
42
35
  if (selectedSet.has(value)) {
@@ -45,18 +38,39 @@ function CheckboxListInputInner({
45
38
  onChange([...selectedValues, value]);
46
39
  }
47
40
  }, [selectedValues, selectedSet, onChange]);
41
+ const allSelected = useMemo(() => displayValues.length > 0 && displayValues.every(v => selectedSet.has(v)), [displayValues, selectedSet]);
42
+ const areSomeValuesSelected = useMemo(() => !allSelected && selectedValues.some(v => selectedSet.has(v)), [allSelected, selectedValues, selectedSet]);
43
+ const handleSelectAll = useCallback(() => {
44
+ if (allSelected) {
45
+ onChange([]);
46
+ } else {
47
+ onChange([...displayValues]);
48
+ }
49
+ }, [allSelected, displayValues, onChange]);
48
50
  return /*#__PURE__*/React.createElement("div", {
49
51
  className: classnames(styles.checkboxList, className),
50
52
  style: style,
51
53
  "data-loading": isLoading
52
54
  }, error && /*#__PURE__*/React.createElement("div", {
53
55
  className: sharedStyles.errorMessage
54
- }, "Error loading values: ", error.message), !error && values.length === 0 && /*#__PURE__*/React.createElement("div", {
56
+ }, "Error loading values: ", error.message), !error && displayValues.length === 0 && /*#__PURE__*/React.createElement("div", {
55
57
  className: sharedStyles.emptyMessage
56
- }, isLoading ? "Loading values..." : "No values available"), (values.length > 0 || isLoading) && /*#__PURE__*/React.createElement(React.Fragment, null, isLoading && /*#__PURE__*/React.createElement("div", {
58
+ }, isLoading ? "Loading values..." : "No values available"), (displayValues.length > 0 || isLoading) && /*#__PURE__*/React.createElement(React.Fragment, null, isLoading && /*#__PURE__*/React.createElement("div", {
57
59
  className: sharedStyles.loadingMessage
58
- }, "Updating..."), values.map(value => {
60
+ }, "Updating..."), /*#__PURE__*/React.createElement("div", {
61
+ className: styles.checkboxRow,
62
+ "data-select-all": true
63
+ }, /*#__PURE__*/React.createElement("label", {
64
+ className: styles.checkboxLabel
65
+ }, /*#__PURE__*/React.createElement(Checkbox, {
66
+ checked: allSelected,
67
+ indeterminate: areSomeValuesSelected,
68
+ onCheckedChange: handleSelectAll
69
+ }), /*#__PURE__*/React.createElement("span", {
70
+ className: styles.valueText
71
+ }, "Select all"))), displayValues.map(value => {
59
72
  const isSelected = selectedSet.has(value);
73
+ const color = colorMap?.[value];
60
74
  return /*#__PURE__*/React.createElement("div", {
61
75
  key: value,
62
76
  className: styles.checkboxRow,
@@ -66,6 +80,11 @@ function CheckboxListInputInner({
66
80
  }, /*#__PURE__*/React.createElement(Checkbox, {
67
81
  checked: isSelected,
68
82
  onCheckedChange: () => toggleValue(value)
83
+ }), color && /*#__PURE__*/React.createElement("span", {
84
+ className: styles.colorDot,
85
+ style: {
86
+ backgroundColor: color
87
+ }
69
88
  }), /*#__PURE__*/React.createElement("span", {
70
89
  className: styles.valueText
71
90
  }, value)));
@@ -1 +1 @@
1
- {"version":3,"file":"CheckboxListInput.js","names":["classnames","React","memo","useCallback","useMemo","Checkbox","usePropertyAggregation","styles","sharedStyles","CheckboxListInputInner","objectType","propertyKey","selectedValues","onChange","whereClause","className","style","data","isLoading","error","where","values","map","item","value","selectedSet","Set","toggleValue","has","filter","v","createElement","checkboxList","errorMessage","message","length","emptyMessage","Fragment","loadingMessage","isSelected","key","checkboxRow","checkboxLabel","checked","onCheckedChange","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 type {\n ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport { Checkbox } from \"../../../base-components/checkbox/Checkbox.js\";\nimport { usePropertyAggregation } from \"../../hooks/usePropertyAggregation.js\";\nimport styles from \"./CheckboxListInput.module.css\";\nimport sharedStyles from \"./shared.module.css\";\n\ninterface CheckboxListInputProps<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n> {\n objectType: Q;\n propertyKey: K;\n selectedValues: string[];\n onChange: (selectedValues: string[]) => void;\n objectSet?: ObjectSet<Q>;\n whereClause?: WhereClause<Q>;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction CheckboxListInputInner<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n>({\n objectType,\n propertyKey,\n selectedValues,\n onChange,\n whereClause,\n className,\n style,\n}: CheckboxListInputProps<Q, K>): React.ReactElement {\n const { data, isLoading, error } = usePropertyAggregation(\n objectType,\n propertyKey,\n { where: whereClause },\n );\n\n const values = useMemo(\n () => data.map((item) => item.value),\n [data],\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}\n >\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading values: {error.message}\n </div>\n )}\n\n {!error && values.length === 0 && (\n <div className={sharedStyles.emptyMessage}>\n {isLoading ? \"Loading values...\" : \"No values available\"}\n </div>\n )}\n\n {(values.length > 0 || isLoading) && (\n <>\n {isLoading && (\n <div className={sharedStyles.loadingMessage}>\n Updating...\n </div>\n )}\n {values.map((value) => {\n const isSelected = selectedSet.has(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 <span className={styles.valueText}>\n {value}\n </span>\n </label>\n </div>\n );\n })}\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","styles","sharedStyles","CheckboxListInputInner","values","isLoading","error","selectedValues","onChange","colorMap","className","style","displayValues","map","item","value","selectedSet","Set","toggleValue","has","filter","v","allSelected","length","every","areSomeValuesSelected","some","handleSelectAll","createElement","checkboxList","errorMessage","message","emptyMessage","Fragment","loadingMessage","checkboxRow","checkboxLabel","checked","indeterminate","onCheckedChange","valueText","isSelected","color","key","colorDot","backgroundColor","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 styles from \"./CheckboxListInput.module.css\";\nimport sharedStyles from \"./shared.module.css\";\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 className?: string;\n style?: React.CSSProperties;\n}\n\nfunction CheckboxListInputInner({\n values,\n isLoading,\n error,\n selectedValues,\n onChange,\n colorMap,\n className,\n style,\n}: CheckboxListInputProps): React.ReactElement {\n const displayValues = useMemo(\n () => values.map((item) => item.value),\n [values],\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 const allSelected = useMemo(\n () =>\n displayValues.length > 0\n && displayValues.every((v) => selectedSet.has(v)),\n [displayValues, selectedSet],\n );\n const areSomeValuesSelected = useMemo(\n () => !allSelected && selectedValues.some((v) => selectedSet.has(v)),\n [allSelected, selectedValues, selectedSet],\n );\n\n const handleSelectAll = useCallback(\n () => {\n if (allSelected) {\n onChange([]);\n } else {\n onChange([...displayValues]);\n }\n },\n [allSelected, displayValues, onChange],\n );\n\n return (\n <div\n className={classnames(styles.checkboxList, className)}\n style={style}\n data-loading={isLoading}\n >\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading values: {error.message}\n </div>\n )}\n\n {!error && displayValues.length === 0 && (\n <div className={sharedStyles.emptyMessage}>\n {isLoading ? \"Loading values...\" : \"No values available\"}\n </div>\n )}\n\n {(displayValues.length > 0 || isLoading) && (\n <>\n {isLoading && (\n <div className={sharedStyles.loadingMessage}>\n Updating...\n </div>\n )}\n <div\n className={styles.checkboxRow}\n data-select-all\n >\n <label className={styles.checkboxLabel}>\n <Checkbox\n checked={allSelected}\n indeterminate={areSomeValuesSelected}\n onCheckedChange={handleSelectAll}\n />\n <span className={styles.valueText}>Select all</span>\n </label>\n </div>\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 </>\n )}\n </div>\n );\n}\n\nexport const CheckboxListInput = memo(\n CheckboxListInputInner,\n) as typeof CheckboxListInputInner;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,IAAI,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACzD,SAASC,QAAQ,QAAQ,+CAA+C;AAExE,OAAOC,MAAM,MAAM,gCAAgC;AACnD,OAAOC,YAAY,MAAM,qBAAqB;AAa9C,SAASC,sBAAsBA,CAAC;EAC9BC,MAAM;EACNC,SAAS;EACTC,KAAK;EACLC,cAAc;EACdC,QAAQ;EACRC,QAAQ;EACRC,SAAS;EACTC;AACsB,CAAC,EAAsB;EAC7C,MAAMC,aAAa,GAAGb,OAAO,CAC3B,MAAMK,MAAM,CAACS,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACC,KAAK,CAAC,EACtC,CAACX,MAAM,CACT,CAAC;EAED,MAAMY,WAAW,GAAGjB,OAAO,CACzB,MAAM,IAAIkB,GAAG,CAACV,cAAc,CAAC,EAC7B,CAACA,cAAc,CACjB,CAAC;EAED,MAAMW,WAAW,GAAGpB,WAAW,CAC5BiB,KAAa,IAAK;IACjB,IAAIC,WAAW,CAACG,GAAG,CAACJ,KAAK,CAAC,EAAE;MAC1BP,QAAQ,CAACD,cAAc,CAACa,MAAM,CAAEC,CAAC,IAAKA,CAAC,KAAKN,KAAK,CAAC,CAAC;IACrD,CAAC,MAAM;MACLP,QAAQ,CAAC,CAAC,GAAGD,cAAc,EAAEQ,KAAK,CAAC,CAAC;IACtC;EACF,CAAC,EACD,CAACR,cAAc,EAAES,WAAW,EAAER,QAAQ,CACxC,CAAC;EAED,MAAMc,WAAW,GAAGvB,OAAO,CACzB,MACEa,aAAa,CAACW,MAAM,GAAG,CAAC,IACrBX,aAAa,CAACY,KAAK,CAAEH,CAAC,IAAKL,WAAW,CAACG,GAAG,CAACE,CAAC,CAAC,CAAC,EACnD,CAACT,aAAa,EAAEI,WAAW,CAC7B,CAAC;EACD,MAAMS,qBAAqB,GAAG1B,OAAO,CACnC,MAAM,CAACuB,WAAW,IAAIf,cAAc,CAACmB,IAAI,CAAEL,CAAC,IAAKL,WAAW,CAACG,GAAG,CAACE,CAAC,CAAC,CAAC,EACpE,CAACC,WAAW,EAAEf,cAAc,EAAES,WAAW,CAC3C,CAAC;EAED,MAAMW,eAAe,GAAG7B,WAAW,CACjC,MAAM;IACJ,IAAIwB,WAAW,EAAE;MACfd,QAAQ,CAAC,EAAE,CAAC;IACd,CAAC,MAAM;MACLA,QAAQ,CAAC,CAAC,GAAGI,aAAa,CAAC,CAAC;IAC9B;EACF,CAAC,EACD,CAACU,WAAW,EAAEV,aAAa,EAAEJ,QAAQ,CACvC,CAAC;EAED,oBACEZ,KAAA,CAAAgC,aAAA;IACElB,SAAS,EAAEf,UAAU,CAACM,MAAM,CAAC4B,YAAY,EAAEnB,SAAS,CAAE;IACtDC,KAAK,EAAEA,KAAM;IACb,gBAAcN;EAAU,GAEvBC,KAAK,iBACJV,KAAA,CAAAgC,aAAA;IAAKlB,SAAS,EAAER,YAAY,CAAC4B;EAAa,GAAC,wBACnB,EAACxB,KAAK,CAACyB,OAC1B,CACN,EAEA,CAACzB,KAAK,IAAIM,aAAa,CAACW,MAAM,KAAK,CAAC,iBACnC3B,KAAA,CAAAgC,aAAA;IAAKlB,SAAS,EAAER,YAAY,CAAC8B;EAAa,GACvC3B,SAAS,GAAG,mBAAmB,GAAG,qBAChC,CACN,EAEA,CAACO,aAAa,CAACW,MAAM,GAAG,CAAC,IAAIlB,SAAS,kBACrCT,KAAA,CAAAgC,aAAA,CAAAhC,KAAA,CAAAqC,QAAA,QACG5B,SAAS,iBACRT,KAAA,CAAAgC,aAAA;IAAKlB,SAAS,EAAER,YAAY,CAACgC;EAAe,GAAC,aAExC,CACN,eACDtC,KAAA,CAAAgC,aAAA;IACElB,SAAS,EAAET,MAAM,CAACkC,WAAY;IAC9B;EAAe,gBAEfvC,KAAA,CAAAgC,aAAA;IAAOlB,SAAS,EAAET,MAAM,CAACmC;EAAc,gBACrCxC,KAAA,CAAAgC,aAAA,CAAC5B,QAAQ;IACPqC,OAAO,EAAEf,WAAY;IACrBgB,aAAa,EAAEb,qBAAsB;IACrCc,eAAe,EAAEZ;EAAgB,CAClC,CAAC,eACF/B,KAAA,CAAAgC,aAAA;IAAMlB,SAAS,EAAET,MAAM,CAACuC;EAAU,GAAC,YAAgB,CAC9C,CACJ,CAAC,EACL5B,aAAa,CAACC,GAAG,CAAEE,KAAK,IAAK;IAC5B,MAAM0B,UAAU,GAAGzB,WAAW,CAACG,GAAG,CAACJ,KAAK,CAAC;IACzC,MAAM2B,KAAK,GAAGjC,QAAQ,GAAGM,KAAK,CAAC;IAE/B,oBACEnB,KAAA,CAAAgC,aAAA;MACEe,GAAG,EAAE5B,KAAM;MACXL,SAAS,EAAET,MAAM,CAACkC,WAAY;MAC9B,iBAAeM;IAAW,gBAE1B7C,KAAA,CAAAgC,aAAA;MAAOlB,SAAS,EAAET,MAAM,CAACmC;IAAc,gBACrCxC,KAAA,CAAAgC,aAAA,CAAC5B,QAAQ;MACPqC,OAAO,EAAEI,UAAW;MACpBF,eAAe,EAAEA,CAAA,KAAMrB,WAAW,CAACH,KAAK;IAAE,CAC3C,CAAC,EACD2B,KAAK,iBACJ9C,KAAA,CAAAgC,aAAA;MACElB,SAAS,EAAET,MAAM,CAAC2C,QAAS;MAC3BjC,KAAK,EAAE;QAAEkC,eAAe,EAAEH;MAAM;IAAE,CACnC,CACF,eACD9C,KAAA,CAAAgC,aAAA;MAAMlB,SAAS,EAAET,MAAM,CAACuC;IAAU,GAC/BzB,KACG,CACD,CACJ,CAAC;EAEV,CAAC,CACD,CAED,CAAC;AAEV;AAEA,OAAO,MAAM+B,iBAAiB,gBAAGjD,IAAI,CACnCM,sBACF,CAAkC","ignoreList":[]}
@@ -24,6 +24,12 @@
24
24
  padding: var(--osdk-filter-checkbox-row-padding);
25
25
  }
26
26
 
27
+ .checkboxRow[data-select-all] {
28
+ border-bottom: var(--osdk-filter-checkbox-selectall-border-bottom);
29
+ padding-bottom: calc(var(--osdk-filter-checkbox-row-padding) + 2px);
30
+ margin-bottom: 2px;
31
+ }
32
+
27
33
  .checkboxLabel {
28
34
  display: flex;
29
35
  align-items: center;
@@ -40,3 +46,10 @@
40
46
  text-overflow: ellipsis;
41
47
  white-space: nowrap;
42
48
  }
49
+
50
+ .colorDot {
51
+ width: var(--osdk-filter-checkbox-color-dot-size);
52
+ height: var(--osdk-filter-checkbox-color-dot-size);
53
+ border-radius: 50%;
54
+ flex-shrink: 0;
55
+ }
@@ -3,7 +3,8 @@ const styles = {
3
3
  "checkboxList": "CheckboxListInput-module__checkboxList___NTBTd7DH",
4
4
  "checkboxRow": "CheckboxListInput-module__checkboxRow___ga-mvL9m",
5
5
  "checkboxLabel": "CheckboxListInput-module__checkboxLabel___iFH7C6-U",
6
- "valueText": "CheckboxListInput-module__valueText___ohfVO74D"
6
+ "valueText": "CheckboxListInput-module__valueText___ohfVO74D",
7
+ "colorDot": "CheckboxListInput-module__colorDot___AdQXW5K-"
7
8
  };
8
9
 
9
10
  export default styles;
@@ -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 type { ObjectSet, ObjectTypeDefinition, PropertyKeys } from \"@osdk/api\";\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 Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n> {\n objectType: Q;\n propertyKey: K;\n minValue: Date | undefined;\n maxValue: Date | undefined;\n onChange: (min: Date | undefined, max: Date | undefined) => void;\n objectSet?: ObjectSet<Q>;\n showHistogram?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction DateRangeInputInner<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n>(props: DateRangeInputProps<Q, K>): 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;;AAGA,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;AAiBD,SAASC,mBAAmBA,CAG1BC,KAAgC,EAAsB;EACtD,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 { 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":[]}
@@ -17,28 +17,22 @@
17
17
  import { Button } from "@base-ui/react/button";
18
18
  import classnames from "classnames";
19
19
  import React, { memo, useCallback, useMemo, useState } from "react";
20
- import { usePropertyAggregation } from "../../hooks/usePropertyAggregation.js";
21
20
  import styles from "./ListogramInput.module.css.js";
22
21
  import sharedStyles from "./shared.module.css.js";
23
22
  function ListogramInputInner({
24
- objectType,
25
- propertyKey,
23
+ values,
24
+ maxCount,
25
+ isLoading,
26
+ error,
26
27
  selectedValues,
27
28
  onChange,
28
- whereClause,
29
+ colorMap,
30
+ displayMode = "full",
29
31
  className,
30
32
  style,
31
33
  maxVisibleItems
32
34
  }) {
33
35
  const [isExpanded, setIsExpanded] = useState(false);
34
- const {
35
- data: values,
36
- maxCount,
37
- isLoading,
38
- error
39
- } = usePropertyAggregation(objectType, propertyKey, {
40
- where: whereClause
41
- });
42
36
  const selectedSet = useMemo(() => new Set(selectedValues), [selectedValues]);
43
37
  const toggleValue = useCallback(value => {
44
38
  if (selectedSet.has(value)) {
@@ -68,24 +62,26 @@ function ListogramInputInner({
68
62
  value,
69
63
  count
70
64
  }) => {
71
- const isSelected = selectedSet.has(value);
72
65
  const percentage = maxCount > 0 ? count / maxCount * 100 : 0;
66
+ const perRowColor = colorMap?.[value];
73
67
  return /*#__PURE__*/React.createElement(Button, {
74
68
  key: value,
75
- type: "button",
76
69
  className: styles.row,
77
70
  onClick: () => toggleValue(value),
78
- "aria-pressed": isSelected
71
+ "aria-pressed": selectedSet.has(value),
72
+ style: perRowColor || percentage > 0 ? {
73
+ "--osdk-filter-listogram-bar-fill-scale": percentage / 100,
74
+ ...(perRowColor ? {
75
+ "--osdk-filter-listogram-row-bar-color": perRowColor
76
+ } : undefined)
77
+ } : undefined
79
78
  }, /*#__PURE__*/React.createElement("span", {
80
79
  className: styles.label
81
- }, value), /*#__PURE__*/React.createElement("span", {
80
+ }, value), displayMode === "full" && /*#__PURE__*/React.createElement("span", {
82
81
  className: styles.bar
83
82
  }, /*#__PURE__*/React.createElement("span", {
84
- className: styles.barFill,
85
- style: {
86
- width: `${percentage}%`
87
- }
88
- })), /*#__PURE__*/React.createElement("span", {
83
+ className: styles.barFill
84
+ })), displayMode !== "minimal" && /*#__PURE__*/React.createElement("span", {
89
85
  className: styles.count
90
86
  }, count.toLocaleString()));
91
87
  }), hasMore && !isExpanded && /*#__PURE__*/React.createElement(Button, {
@@ -1 +1 @@
1
- {"version":3,"file":"ListogramInput.js","names":["Button","classnames","React","memo","useCallback","useMemo","useState","usePropertyAggregation","styles","sharedStyles","ListogramInputInner","objectType","propertyKey","selectedValues","onChange","whereClause","className","style","maxVisibleItems","isExpanded","setIsExpanded","data","values","maxCount","isLoading","error","where","selectedSet","Set","toggleValue","value","has","filter","v","displayValues","slice","hasMore","length","createElement","listogram","loadingMessage","errorMessage","message","emptyMessage","container","map","count","isSelected","percentage","key","type","row","onClick","label","bar","barFill","width","toLocaleString","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 type {\n ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo, useState } from \"react\";\nimport { usePropertyAggregation } from \"../../hooks/usePropertyAggregation.js\";\nimport styles from \"./ListogramInput.module.css\";\nimport sharedStyles from \"./shared.module.css\";\n\ninterface ListogramInputProps<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n> {\n objectType: Q;\n propertyKey: K;\n selectedValues: string[];\n onChange: (values: string[]) => void;\n objectSet?: ObjectSet<Q>;\n whereClause?: WhereClause<Q>;\n className?: string;\n style?: React.CSSProperties;\n maxVisibleItems?: number;\n}\n\nfunction ListogramInputInner<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n>({\n objectType,\n propertyKey,\n selectedValues,\n onChange,\n whereClause,\n className,\n style,\n maxVisibleItems,\n}: ListogramInputProps<Q, K>): React.ReactElement {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const { data: values, maxCount, isLoading, error } = usePropertyAggregation(\n objectType,\n propertyKey,\n { where: whereClause },\n );\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 displayValues = useMemo(() => {\n if (isExpanded || !maxVisibleItems) return values;\n return values.slice(0, maxVisibleItems);\n }, [values, maxVisibleItems, isExpanded]);\n\n const hasMore = maxVisibleItems != null && values.length > maxVisibleItems;\n\n return (\n <div\n className={classnames(styles.listogram, className)}\n style={style}\n data-loading={isLoading}\n >\n {isLoading && (\n <div className={sharedStyles.loadingMessage}>\n Loading values...\n </div>\n )}\n\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading values: {error.message}\n </div>\n )}\n\n {!isLoading && !error && values.length === 0 && (\n <div className={sharedStyles.emptyMessage}>\n No values available\n </div>\n )}\n\n {(values.length > 0 || isLoading) && (\n <div className={styles.container}>\n {displayValues.map(({ value, count }) => {\n const isSelected = selectedSet.has(value);\n const percentage = maxCount > 0 ? (count / maxCount) * 100 : 0;\n\n return (\n <Button\n key={value}\n type=\"button\"\n className={styles.row}\n onClick={() => toggleValue(value)}\n aria-pressed={isSelected}\n >\n <span className={styles.label}>{value}</span>\n <span className={styles.bar}>\n <span\n className={styles.barFill}\n style={{ width: `${percentage}%` }}\n />\n </span>\n <span className={styles.count}>\n {count.toLocaleString()}\n </span>\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 ({values.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":[]}
1
+ {"version":3,"file":"ListogramInput.js","names":["Button","classnames","React","memo","useCallback","useMemo","useState","styles","sharedStyles","ListogramInputInner","values","maxCount","isLoading","error","selectedValues","onChange","colorMap","displayMode","className","style","maxVisibleItems","isExpanded","setIsExpanded","selectedSet","Set","toggleValue","value","has","filter","v","displayValues","slice","hasMore","length","createElement","listogram","loadingMessage","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 styles from \"./ListogramInput.module.css\";\nimport sharedStyles from \"./shared.module.css\";\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}\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}: ListogramInputProps): React.ReactElement {\n const [isExpanded, setIsExpanded] = useState(false);\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 displayValues = useMemo(() => {\n if (isExpanded || !maxVisibleItems) return values;\n return values.slice(0, maxVisibleItems);\n }, [values, maxVisibleItems, isExpanded]);\n\n const hasMore = maxVisibleItems != null && values.length > maxVisibleItems;\n\n return (\n <div\n className={classnames(styles.listogram, className)}\n style={style}\n data-loading={isLoading}\n >\n {isLoading && (\n <div className={sharedStyles.loadingMessage}>\n Loading values...\n </div>\n )}\n\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading values: {error.message}\n </div>\n )}\n\n {!isLoading && !error && values.length === 0 && (\n <div className={sharedStyles.emptyMessage}>\n No values available\n </div>\n )}\n\n {(values.length > 0 || isLoading) && (\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 ({values.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":[]}
@@ -22,40 +22,41 @@
22
22
  .container {
23
23
  display: flex;
24
24
  flex-direction: column;
25
- gap: var(--osdk-filter-listogram-gap, calc(var(--osdk-surface-spacing) * 1));
25
+ gap: var(--osdk-filter-listogram-gap);
26
26
  }
27
27
 
28
28
  .row {
29
29
  display: flex;
30
30
  align-items: center;
31
- gap: var(--osdk-filter-listogram-row-gap, calc(var(--osdk-surface-spacing) * 2));
32
- padding: var(--osdk-filter-listogram-row-padding, calc(var(--osdk-surface-spacing) * 1));
31
+ gap: var(--osdk-filter-listogram-row-gap);
32
+ padding: var(--osdk-filter-listogram-row-padding);
33
33
  border: none;
34
34
  background: transparent;
35
35
  cursor: pointer;
36
- border-radius: var(--osdk-surface-border-radius);
36
+ border-radius: var(--osdk-filter-listogram-row-border-radius);
37
37
  text-align: left;
38
38
  width: 100%;
39
- transition: background-color var(--osdk-emphasis-transition-duration) var(--osdk-emphasis-ease-default);
39
+ transition: background-color var(--osdk-filter-listogram-row-transition);
40
40
 
41
41
  &:hover {
42
- background: var(--osdk-surface-background-color-default-hover);
42
+ background: var(--osdk-filter-listogram-row-bg-hover);
43
43
  }
44
44
 
45
45
  &:focus-visible {
46
- outline: var(--osdk-emphasis-focus-width) solid var(--osdk-emphasis-focus-color);
47
- outline-offset: var(--osdk-emphasis-focus-offset);
46
+ outline: var(--osdk-filter-listogram-row-focus-outline);
47
+ outline-offset: var(--osdk-filter-listogram-row-focus-offset);
48
48
  }
49
49
  }
50
50
 
51
51
  .row[aria-pressed="true"] {
52
- background: var(--osdk-surface-background-color-default-active);
52
+ background: var(--osdk-filter-listogram-row-bg-active);
53
53
  }
54
54
 
55
55
  .label {
56
56
  flex: 1;
57
- font-size: var(--osdk-typography-size-body-medium);
58
- color: var(--osdk-typography-color-default-rest);
57
+ font-family: var(--osdk-filter-listogram-label-font-family);
58
+ font-size: var(--osdk-filter-listogram-label-font-size);
59
+ color: var(--osdk-filter-listogram-label-color);
59
60
  overflow: hidden;
60
61
  text-overflow: ellipsis;
61
62
  white-space: nowrap;
@@ -63,26 +64,31 @@
63
64
 
64
65
  .bar {
65
66
  flex: 2;
66
- height: var(--osdk-filter-listogram-bar-height, 8px);
67
- background: var(--osdk-custom-color-gray-2);
68
- border-radius: var(--osdk-surface-border-radius);
67
+ height: var(--osdk-filter-listogram-bar-height);
68
+ background: var(--osdk-filter-listogram-bar-bg);
69
+ border-radius: var(--osdk-filter-listogram-bar-border-radius);
69
70
  overflow: hidden;
70
71
  }
71
72
 
72
73
  .barFill {
74
+ display: block;
73
75
  height: 100%;
74
- background: var(--osdk-filter-listogram-bar-color);
75
- transition: width var(--osdk-emphasis-transition-duration) var(--osdk-emphasis-ease-default);
76
+ width: 100%;
77
+ background: var(--osdk-filter-listogram-row-bar-color, var(--osdk-filter-listogram-bar-color));
78
+ transform-origin: left;
79
+ transform: scaleX(var(--osdk-filter-listogram-bar-fill-scale, 0));
80
+ transition: transform var(--osdk-filter-listogram-bar-fill-transition);
76
81
  }
77
82
 
78
83
  .row[aria-pressed="true"] .barFill {
79
- background: var(--osdk-filter-listogram-selected-color);
84
+ background: var(--osdk-filter-listogram-row-bar-color, var(--osdk-filter-listogram-selected-color));
80
85
  }
81
86
 
82
87
  .count {
83
- font-size: var(--osdk-typography-size-body-small);
88
+ font-family: var(--osdk-filter-listogram-count-font-family);
89
+ font-size: var(--osdk-filter-listogram-count-font-size);
84
90
  font-variant-numeric: tabular-nums;
85
- color: var(--osdk-typography-color-muted);
91
+ color: var(--osdk-filter-listogram-count-color);
86
92
  min-width: 3ch;
87
93
  text-align: right;
88
94
  }
@@ -21,12 +21,13 @@
21
21
  }
22
22
 
23
23
  .clearAll {
24
- font-size: var(--osdk-typography-size-body-small);
25
- color: var(--osdk-intent-primary-rest);
24
+ font-family: var(--osdk-filter-date-clear-font-family);
25
+ font-size: var(--osdk-filter-date-clear-font-size);
26
+ color: var(--osdk-filter-date-clear-color);
26
27
  background: transparent;
27
28
  border: none;
28
29
  cursor: pointer;
29
- padding: calc(var(--osdk-surface-spacing) * 0.5);
30
+ padding: var(--osdk-filter-date-clear-padding);
30
31
 
31
32
  &:hover {
32
33
  text-decoration: underline;
@@ -39,7 +40,8 @@
39
40
 
40
41
  .input {
41
42
  flex: 1;
42
- font-size: var(--osdk-typography-size-body-medium);
43
+ font-family: var(--osdk-filter-input-font-family);
44
+ font-size: var(--osdk-filter-timeline-input-font-size);
43
45
  padding: var(--osdk-filter-input-padding);
44
46
  border: var(--osdk-filter-input-border);
45
47
  border-radius: var(--osdk-filter-input-border-radius);