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

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 (420) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +5 -3
  3. package/build/browser/base-components/action-button/ActionButton.module.css +0 -4
  4. package/build/browser/base-components/checkbox/Checkbox.module.css +0 -4
  5. package/build/browser/base-components/dialog/Dialog.module.css +0 -8
  6. package/build/browser/base-components/draggable-list/DraggableList.js +4 -2
  7. package/build/browser/base-components/draggable-list/DraggableList.js.map +1 -1
  8. package/build/browser/base-components/draggable-list/DraggableList.module.css +0 -8
  9. package/build/browser/base-components/tooltip/Tooltip.js +91 -0
  10. package/build/browser/base-components/tooltip/Tooltip.js.map +1 -0
  11. package/build/browser/base-components/tooltip/Tooltip.module.css +70 -0
  12. package/build/browser/base-components/tooltip/Tooltip.module.css.js +11 -0
  13. package/build/browser/base-components/tooltip/index.js +18 -0
  14. package/build/browser/base-components/tooltip/index.js.map +1 -0
  15. package/build/browser/filter-list/FilterInput.js +132 -0
  16. package/build/browser/filter-list/FilterInput.js.map +1 -0
  17. package/build/browser/filter-list/FilterList.js +91 -0
  18. package/build/browser/filter-list/FilterList.js.map +1 -0
  19. package/build/browser/filter-list/FilterListApi.js.map +1 -1
  20. package/build/browser/filter-list/FilterListItemApi.js.map +1 -1
  21. package/build/browser/filter-list/base/{FilterList.js → BaseFilterList.js} +30 -31
  22. package/build/browser/filter-list/base/BaseFilterList.js.map +1 -0
  23. package/build/browser/filter-list/base/BaseFilterListApi.js +2 -0
  24. package/build/browser/filter-list/base/BaseFilterListApi.js.map +1 -0
  25. package/build/browser/filter-list/base/FilterIcons.js +63 -0
  26. package/build/browser/filter-list/base/FilterIcons.js.map +1 -0
  27. package/build/browser/filter-list/base/FilterList.module.css +22 -1
  28. package/build/browser/filter-list/base/FilterList.module.css.js +2 -0
  29. package/build/browser/filter-list/base/FilterListContent.js +21 -20
  30. package/build/browser/filter-list/base/FilterListContent.js.map +1 -1
  31. package/build/browser/filter-list/base/FilterListHeader.js +8 -3
  32. package/build/browser/filter-list/base/FilterListHeader.js.map +1 -1
  33. package/build/browser/filter-list/base/FilterListHeader.module.css +25 -1
  34. package/build/browser/filter-list/base/FilterListHeader.module.css.js +3 -0
  35. package/build/browser/filter-list/base/FilterListItem.js +36 -17
  36. package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
  37. package/build/browser/filter-list/base/FilterListItem.module.css +58 -2
  38. package/build/browser/filter-list/base/FilterListItem.module.css.js +2 -0
  39. package/build/browser/filter-list/base/SortableFilterListItem.js +6 -6
  40. package/build/browser/filter-list/base/SortableFilterListItem.js.map +1 -1
  41. package/build/browser/filter-list/base/index.js +1 -2
  42. package/build/browser/filter-list/base/index.js.map +1 -1
  43. package/build/browser/filter-list/base/inputs/CheckboxListInput.js +34 -15
  44. package/build/browser/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
  45. package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css +13 -0
  46. package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css.js +2 -1
  47. package/build/browser/filter-list/base/inputs/DateRangeInput.js.map +1 -1
  48. package/build/browser/filter-list/base/inputs/ListogramInput.js +17 -21
  49. package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
  50. package/build/browser/filter-list/base/inputs/ListogramInput.module.css +25 -19
  51. package/build/browser/filter-list/base/inputs/MultiDateInput.module.css +6 -4
  52. package/build/browser/filter-list/base/inputs/MultiSelectInput.js +7 -14
  53. package/build/browser/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
  54. package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css +4 -1
  55. package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css.js +1 -1
  56. package/build/browser/filter-list/base/inputs/NullValueWrapper.js +4 -23
  57. package/build/browser/filter-list/base/inputs/NullValueWrapper.js.map +1 -1
  58. package/build/browser/filter-list/base/inputs/NullValueWrapper.module.css +3 -2
  59. package/build/browser/filter-list/base/inputs/NumberRangeInput.js.map +1 -1
  60. package/build/browser/filter-list/base/inputs/RangeInput.js +2 -32
  61. package/build/browser/filter-list/base/inputs/RangeInput.js.map +1 -1
  62. package/build/browser/filter-list/base/inputs/RangeInput.module.css +16 -14
  63. package/build/browser/filter-list/base/inputs/SingleDateInput.module.css +2 -1
  64. package/build/browser/filter-list/base/inputs/SingleSelectInput.js +6 -13
  65. package/build/browser/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
  66. package/build/browser/filter-list/base/inputs/TextTagsInput.js +6 -14
  67. package/build/browser/filter-list/base/inputs/TextTagsInput.js.map +1 -1
  68. package/build/browser/filter-list/base/inputs/TimelineInput.js +2 -2
  69. package/build/browser/filter-list/base/inputs/TimelineInput.js.map +1 -1
  70. package/build/browser/filter-list/base/inputs/TimelineInput.module.css +14 -12
  71. package/build/browser/filter-list/base/inputs/shared.module.css +5 -4
  72. package/build/browser/filter-list/hooks/useFilterListState.js +29 -9
  73. package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
  74. package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -1
  75. package/build/browser/filter-list/inputs/CheckboxListFilterInput.js +56 -0
  76. package/build/browser/filter-list/inputs/CheckboxListFilterInput.js.map +1 -0
  77. package/build/browser/filter-list/inputs/ContainsTextFilterInput.js +38 -0
  78. package/build/browser/filter-list/inputs/ContainsTextFilterInput.js.map +1 -0
  79. package/build/browser/filter-list/inputs/DateRangeFilterInput.js +105 -0
  80. package/build/browser/filter-list/inputs/DateRangeFilterInput.js.map +1 -0
  81. package/build/browser/filter-list/inputs/LinkedPropertyInput.js +508 -0
  82. package/build/browser/filter-list/inputs/LinkedPropertyInput.js.map +1 -0
  83. package/build/browser/filter-list/inputs/ListogramFilterInput.js +62 -0
  84. package/build/browser/filter-list/inputs/ListogramFilterInput.js.map +1 -0
  85. package/build/browser/filter-list/inputs/MultiDateFilterInput.js +38 -0
  86. package/build/browser/filter-list/inputs/MultiDateFilterInput.js.map +1 -0
  87. package/build/browser/filter-list/inputs/MultiSelectFilterInput.js +55 -0
  88. package/build/browser/filter-list/inputs/MultiSelectFilterInput.js.map +1 -0
  89. package/build/browser/filter-list/inputs/NumberRangeFilterInput.js +105 -0
  90. package/build/browser/filter-list/inputs/NumberRangeFilterInput.js.map +1 -0
  91. package/build/browser/filter-list/inputs/PropertyFilterInput.js +129 -0
  92. package/build/browser/filter-list/inputs/PropertyFilterInput.js.map +1 -0
  93. package/build/browser/filter-list/inputs/SingleDateFilterInput.js +38 -0
  94. package/build/browser/filter-list/inputs/SingleDateFilterInput.js.map +1 -0
  95. package/build/browser/filter-list/inputs/SingleSelectFilterInput.js +55 -0
  96. package/build/browser/filter-list/inputs/SingleSelectFilterInput.js.map +1 -0
  97. package/build/browser/filter-list/inputs/TextTagsFilterInput.js +54 -0
  98. package/build/browser/filter-list/inputs/TextTagsFilterInput.js.map +1 -0
  99. package/build/browser/filter-list/inputs/TimelineFilterInput.js +49 -0
  100. package/build/browser/filter-list/inputs/TimelineFilterInput.js.map +1 -0
  101. package/build/browser/filter-list/inputs/ToggleFilterInput.js +36 -0
  102. package/build/browser/filter-list/inputs/ToggleFilterInput.js.map +1 -0
  103. package/build/browser/filter-list/types/AggregationTypes.js +2 -0
  104. package/build/browser/filter-list/types/AggregationTypes.js.map +1 -0
  105. package/build/browser/filter-list/types/LinkedFilterTypes.js.map +1 -1
  106. package/build/browser/filter-list/types/index.js +0 -2
  107. package/build/browser/filter-list/types/index.js.map +1 -1
  108. package/build/browser/filter-list/utils/filterStateSerialization.js +42 -0
  109. package/build/browser/filter-list/utils/filterStateSerialization.js.map +1 -0
  110. package/build/browser/filter-list/utils/filterStateToWhereClause.js +36 -13
  111. package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  112. package/build/browser/filter-list/utils/filterValues.js +26 -0
  113. package/build/browser/filter-list/utils/filterValues.js.map +1 -1
  114. package/build/browser/object-table/ColumnConfigDialog.module.css +0 -9
  115. package/build/browser/object-table/DefaultCellRenderer.js +6 -1
  116. package/build/browser/object-table/DefaultCellRenderer.js.map +1 -1
  117. package/build/browser/object-table/EditableCell.js +76 -9
  118. package/build/browser/object-table/EditableCell.js.map +1 -1
  119. package/build/browser/object-table/EditableCell.module.css +47 -8
  120. package/build/browser/object-table/EditableCell.module.css.js +5 -1
  121. package/build/browser/object-table/MultiColumnSortDialog.js +4 -1
  122. package/build/browser/object-table/MultiColumnSortDialog.js.map +1 -1
  123. package/build/browser/object-table/MultiColumnSortDialog.module.css +0 -4
  124. package/build/browser/object-table/ObjectTable.js +4 -1
  125. package/build/browser/object-table/ObjectTable.js.map +1 -1
  126. package/build/browser/object-table/ObjectTableApi.js.map +1 -1
  127. package/build/browser/object-table/SelectionCells.js +1 -0
  128. package/build/browser/object-table/SelectionCells.js.map +1 -1
  129. package/build/browser/object-table/Table.js +2 -2
  130. package/build/browser/object-table/Table.js.map +1 -1
  131. package/build/browser/object-table/TableBody.js +1 -1
  132. package/build/browser/object-table/TableBody.js.map +1 -1
  133. package/build/browser/object-table/TableEditContainer.js +27 -16
  134. package/build/browser/object-table/TableEditContainer.js.map +1 -1
  135. package/build/browser/object-table/TableEditContainer.module.css +27 -0
  136. package/build/browser/object-table/TableEditContainer.module.css.js +5 -1
  137. package/build/browser/object-table/TableHeaderWithPopover.module.css +0 -12
  138. package/build/browser/object-table/TableRow.js +2 -2
  139. package/build/browser/object-table/TableRow.js.map +1 -1
  140. package/build/browser/object-table/hooks/useColumnDefs.js +2 -1
  141. package/build/browser/object-table/hooks/useColumnDefs.js.map +1 -1
  142. package/build/browser/object-table/hooks/useEditableTable.js +21 -2
  143. package/build/browser/object-table/hooks/useEditableTable.js.map +1 -1
  144. package/build/browser/object-table/utils/types.js.map +1 -1
  145. package/build/browser/public/experimental.js +4 -1
  146. package/build/browser/public/experimental.js.map +1 -1
  147. package/build/browser/shared/ErrorBoundary.module.css +14 -14
  148. package/build/browser/styles.css +354 -132
  149. package/build/cjs/public/experimental.cjs +2955 -2165
  150. package/build/cjs/public/experimental.cjs.map +1 -1
  151. package/build/cjs/public/experimental.css +669 -496
  152. package/build/cjs/public/experimental.css.map +1 -1
  153. package/build/cjs/public/experimental.d.cts +80 -6
  154. package/build/esm/base-components/action-button/ActionButton.module.css +0 -4
  155. package/build/esm/base-components/checkbox/Checkbox.module.css +0 -4
  156. package/build/esm/base-components/dialog/Dialog.module.css +0 -8
  157. package/build/esm/base-components/draggable-list/DraggableList.js +4 -2
  158. package/build/esm/base-components/draggable-list/DraggableList.js.map +1 -1
  159. package/build/esm/base-components/draggable-list/DraggableList.module.css +0 -8
  160. package/build/esm/base-components/tooltip/Tooltip.js +91 -0
  161. package/build/esm/base-components/tooltip/Tooltip.js.map +1 -0
  162. package/build/esm/base-components/tooltip/Tooltip.module.css +70 -0
  163. package/build/esm/base-components/tooltip/index.js +18 -0
  164. package/build/esm/base-components/tooltip/index.js.map +1 -0
  165. package/build/esm/filter-list/FilterInput.js +132 -0
  166. package/build/esm/filter-list/FilterInput.js.map +1 -0
  167. package/build/esm/filter-list/FilterList.js +91 -0
  168. package/build/esm/filter-list/FilterList.js.map +1 -0
  169. package/build/esm/filter-list/FilterListApi.js.map +1 -1
  170. package/build/esm/filter-list/FilterListItemApi.js.map +1 -1
  171. package/build/esm/filter-list/base/{FilterList.js → BaseFilterList.js} +30 -31
  172. package/build/esm/filter-list/base/BaseFilterList.js.map +1 -0
  173. package/build/esm/filter-list/base/BaseFilterListApi.js +2 -0
  174. package/build/esm/filter-list/base/BaseFilterListApi.js.map +1 -0
  175. package/build/esm/filter-list/base/FilterIcons.js +63 -0
  176. package/build/esm/filter-list/base/FilterIcons.js.map +1 -0
  177. package/build/esm/filter-list/base/FilterList.module.css +22 -1
  178. package/build/esm/filter-list/base/FilterListContent.js +21 -20
  179. package/build/esm/filter-list/base/FilterListContent.js.map +1 -1
  180. package/build/esm/filter-list/base/FilterListHeader.js +8 -3
  181. package/build/esm/filter-list/base/FilterListHeader.js.map +1 -1
  182. package/build/esm/filter-list/base/FilterListHeader.module.css +25 -1
  183. package/build/esm/filter-list/base/FilterListItem.js +36 -17
  184. package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
  185. package/build/esm/filter-list/base/FilterListItem.module.css +58 -2
  186. package/build/esm/filter-list/base/SortableFilterListItem.js +6 -6
  187. package/build/esm/filter-list/base/SortableFilterListItem.js.map +1 -1
  188. package/build/esm/filter-list/base/index.js +1 -2
  189. package/build/esm/filter-list/base/index.js.map +1 -1
  190. package/build/esm/filter-list/base/inputs/CheckboxListInput.js +34 -15
  191. package/build/esm/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
  192. package/build/esm/filter-list/base/inputs/CheckboxListInput.module.css +13 -0
  193. package/build/esm/filter-list/base/inputs/DateRangeInput.js.map +1 -1
  194. package/build/esm/filter-list/base/inputs/ListogramInput.js +17 -21
  195. package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
  196. package/build/esm/filter-list/base/inputs/ListogramInput.module.css +25 -19
  197. package/build/esm/filter-list/base/inputs/MultiDateInput.module.css +6 -4
  198. package/build/esm/filter-list/base/inputs/MultiSelectInput.js +7 -14
  199. package/build/esm/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
  200. package/build/esm/filter-list/base/inputs/MultiSelectInput.module.css +4 -1
  201. package/build/esm/filter-list/base/inputs/NullValueWrapper.js +4 -23
  202. package/build/esm/filter-list/base/inputs/NullValueWrapper.js.map +1 -1
  203. package/build/esm/filter-list/base/inputs/NullValueWrapper.module.css +3 -2
  204. package/build/esm/filter-list/base/inputs/NumberRangeInput.js.map +1 -1
  205. package/build/esm/filter-list/base/inputs/RangeInput.js +2 -32
  206. package/build/esm/filter-list/base/inputs/RangeInput.js.map +1 -1
  207. package/build/esm/filter-list/base/inputs/RangeInput.module.css +16 -14
  208. package/build/esm/filter-list/base/inputs/SingleDateInput.module.css +2 -1
  209. package/build/esm/filter-list/base/inputs/SingleSelectInput.js +6 -13
  210. package/build/esm/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
  211. package/build/esm/filter-list/base/inputs/TextTagsInput.js +6 -14
  212. package/build/esm/filter-list/base/inputs/TextTagsInput.js.map +1 -1
  213. package/build/esm/filter-list/base/inputs/TimelineInput.js +2 -2
  214. package/build/esm/filter-list/base/inputs/TimelineInput.js.map +1 -1
  215. package/build/esm/filter-list/base/inputs/TimelineInput.module.css +14 -12
  216. package/build/esm/filter-list/base/inputs/shared.module.css +5 -4
  217. package/build/esm/filter-list/hooks/useFilterListState.js +29 -9
  218. package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
  219. package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -1
  220. package/build/esm/filter-list/inputs/CheckboxListFilterInput.js +56 -0
  221. package/build/esm/filter-list/inputs/CheckboxListFilterInput.js.map +1 -0
  222. package/build/esm/filter-list/inputs/ContainsTextFilterInput.js +38 -0
  223. package/build/esm/filter-list/inputs/ContainsTextFilterInput.js.map +1 -0
  224. package/build/esm/filter-list/inputs/DateRangeFilterInput.js +105 -0
  225. package/build/esm/filter-list/inputs/DateRangeFilterInput.js.map +1 -0
  226. package/build/esm/filter-list/inputs/LinkedPropertyInput.js +508 -0
  227. package/build/esm/filter-list/inputs/LinkedPropertyInput.js.map +1 -0
  228. package/build/esm/filter-list/inputs/ListogramFilterInput.js +62 -0
  229. package/build/esm/filter-list/inputs/ListogramFilterInput.js.map +1 -0
  230. package/build/esm/filter-list/inputs/MultiDateFilterInput.js +38 -0
  231. package/build/esm/filter-list/inputs/MultiDateFilterInput.js.map +1 -0
  232. package/build/esm/filter-list/inputs/MultiSelectFilterInput.js +55 -0
  233. package/build/esm/filter-list/inputs/MultiSelectFilterInput.js.map +1 -0
  234. package/build/esm/filter-list/inputs/NumberRangeFilterInput.js +105 -0
  235. package/build/esm/filter-list/inputs/NumberRangeFilterInput.js.map +1 -0
  236. package/build/esm/filter-list/inputs/PropertyFilterInput.js +129 -0
  237. package/build/esm/filter-list/inputs/PropertyFilterInput.js.map +1 -0
  238. package/build/esm/filter-list/inputs/SingleDateFilterInput.js +38 -0
  239. package/build/esm/filter-list/inputs/SingleDateFilterInput.js.map +1 -0
  240. package/build/esm/filter-list/inputs/SingleSelectFilterInput.js +55 -0
  241. package/build/esm/filter-list/inputs/SingleSelectFilterInput.js.map +1 -0
  242. package/build/esm/filter-list/inputs/TextTagsFilterInput.js +54 -0
  243. package/build/esm/filter-list/inputs/TextTagsFilterInput.js.map +1 -0
  244. package/build/esm/filter-list/inputs/TimelineFilterInput.js +49 -0
  245. package/build/esm/filter-list/inputs/TimelineFilterInput.js.map +1 -0
  246. package/build/esm/filter-list/inputs/ToggleFilterInput.js +36 -0
  247. package/build/esm/filter-list/inputs/ToggleFilterInput.js.map +1 -0
  248. package/build/esm/filter-list/types/AggregationTypes.js +2 -0
  249. package/build/esm/filter-list/types/AggregationTypes.js.map +1 -0
  250. package/build/esm/filter-list/types/LinkedFilterTypes.js.map +1 -1
  251. package/build/esm/filter-list/types/index.js +0 -2
  252. package/build/esm/filter-list/types/index.js.map +1 -1
  253. package/build/esm/filter-list/utils/filterStateSerialization.js +42 -0
  254. package/build/esm/filter-list/utils/filterStateSerialization.js.map +1 -0
  255. package/build/esm/filter-list/utils/filterStateToWhereClause.js +36 -13
  256. package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  257. package/build/esm/filter-list/utils/filterValues.js +26 -0
  258. package/build/esm/filter-list/utils/filterValues.js.map +1 -1
  259. package/build/esm/object-table/ColumnConfigDialog.module.css +0 -9
  260. package/build/esm/object-table/DefaultCellRenderer.js +6 -1
  261. package/build/esm/object-table/DefaultCellRenderer.js.map +1 -1
  262. package/build/esm/object-table/EditableCell.js +76 -9
  263. package/build/esm/object-table/EditableCell.js.map +1 -1
  264. package/build/esm/object-table/EditableCell.module.css +47 -8
  265. package/build/esm/object-table/MultiColumnSortDialog.js +4 -1
  266. package/build/esm/object-table/MultiColumnSortDialog.js.map +1 -1
  267. package/build/esm/object-table/MultiColumnSortDialog.module.css +0 -4
  268. package/build/esm/object-table/ObjectTable.js +4 -1
  269. package/build/esm/object-table/ObjectTable.js.map +1 -1
  270. package/build/esm/object-table/ObjectTableApi.js.map +1 -1
  271. package/build/esm/object-table/SelectionCells.js +1 -0
  272. package/build/esm/object-table/SelectionCells.js.map +1 -1
  273. package/build/esm/object-table/Table.js +2 -2
  274. package/build/esm/object-table/Table.js.map +1 -1
  275. package/build/esm/object-table/TableBody.js +1 -1
  276. package/build/esm/object-table/TableBody.js.map +1 -1
  277. package/build/esm/object-table/TableEditContainer.js +27 -16
  278. package/build/esm/object-table/TableEditContainer.js.map +1 -1
  279. package/build/esm/object-table/TableEditContainer.module.css +27 -0
  280. package/build/esm/object-table/TableHeaderWithPopover.module.css +0 -12
  281. package/build/esm/object-table/TableRow.js +2 -2
  282. package/build/esm/object-table/TableRow.js.map +1 -1
  283. package/build/esm/object-table/hooks/useColumnDefs.js +2 -1
  284. package/build/esm/object-table/hooks/useColumnDefs.js.map +1 -1
  285. package/build/esm/object-table/hooks/useEditableTable.js +21 -2
  286. package/build/esm/object-table/hooks/useEditableTable.js.map +1 -1
  287. package/build/esm/object-table/utils/types.js.map +1 -1
  288. package/build/esm/public/experimental.js +4 -1
  289. package/build/esm/public/experimental.js.map +1 -1
  290. package/build/esm/shared/ErrorBoundary.module.css +14 -14
  291. package/build/types/base-components/tooltip/Tooltip.d.ts +31 -0
  292. package/build/types/base-components/tooltip/Tooltip.d.ts.map +1 -0
  293. package/build/types/base-components/tooltip/index.d.ts +1 -0
  294. package/build/types/base-components/tooltip/index.d.ts.map +1 -0
  295. package/build/types/filter-list/{base/FilterInput.d.ts → FilterInput.d.ts} +2 -2
  296. package/build/types/filter-list/FilterInput.d.ts.map +1 -0
  297. package/build/types/filter-list/{base/FilterList.d.ts → FilterList.d.ts} +1 -1
  298. package/build/types/filter-list/FilterList.d.ts.map +1 -0
  299. package/build/types/filter-list/FilterListApi.d.ts +14 -0
  300. package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
  301. package/build/types/filter-list/FilterListItemApi.d.ts +13 -0
  302. package/build/types/filter-list/FilterListItemApi.d.ts.map +1 -1
  303. package/build/types/filter-list/base/BaseFilterList.d.ts +3 -0
  304. package/build/types/filter-list/base/BaseFilterList.d.ts.map +1 -0
  305. package/build/types/filter-list/base/BaseFilterListApi.d.ts +29 -0
  306. package/build/types/filter-list/base/BaseFilterListApi.d.ts.map +1 -0
  307. package/build/types/filter-list/base/FilterIcons.d.ts +4 -0
  308. package/build/types/filter-list/base/FilterIcons.d.ts.map +1 -0
  309. package/build/types/filter-list/base/FilterListContent.d.ts +8 -8
  310. package/build/types/filter-list/base/FilterListContent.d.ts.map +1 -1
  311. package/build/types/filter-list/base/FilterListHeader.d.ts.map +1 -1
  312. package/build/types/filter-list/base/FilterListItem.d.ts +7 -8
  313. package/build/types/filter-list/base/FilterListItem.d.ts.map +1 -1
  314. package/build/types/filter-list/base/SortableFilterListItem.d.ts +7 -8
  315. package/build/types/filter-list/base/SortableFilterListItem.d.ts.map +1 -1
  316. package/build/types/filter-list/base/index.d.ts +2 -2
  317. package/build/types/filter-list/base/index.d.ts.map +1 -1
  318. package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts +7 -13
  319. package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts.map +1 -1
  320. package/build/types/filter-list/base/inputs/DateRangeInput.d.ts +7 -12
  321. package/build/types/filter-list/base/inputs/DateRangeInput.d.ts.map +1 -1
  322. package/build/types/filter-list/base/inputs/ListogramInput.d.ts +10 -13
  323. package/build/types/filter-list/base/inputs/ListogramInput.d.ts.map +1 -1
  324. package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts +7 -13
  325. package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts.map +1 -1
  326. package/build/types/filter-list/base/inputs/NullValueWrapper.d.ts +5 -11
  327. package/build/types/filter-list/base/inputs/NullValueWrapper.d.ts.map +1 -1
  328. package/build/types/filter-list/base/inputs/NumberRangeInput.d.ts +7 -12
  329. package/build/types/filter-list/base/inputs/NumberRangeInput.d.ts.map +1 -1
  330. package/build/types/filter-list/base/inputs/RangeInput.d.ts +7 -14
  331. package/build/types/filter-list/base/inputs/RangeInput.d.ts.map +1 -1
  332. package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts +7 -13
  333. package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts.map +1 -1
  334. package/build/types/filter-list/base/inputs/TextTagsInput.d.ts +7 -13
  335. package/build/types/filter-list/base/inputs/TextTagsInput.d.ts.map +1 -1
  336. package/build/types/filter-list/hooks/useFilterListState.d.ts +1 -0
  337. package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -1
  338. package/build/types/filter-list/hooks/usePropertyAggregation.d.ts +2 -5
  339. package/build/types/filter-list/hooks/usePropertyAggregation.d.ts.map +1 -1
  340. package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts +14 -0
  341. package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts.map +1 -0
  342. package/build/types/filter-list/inputs/ContainsTextFilterInput.d.ts +10 -0
  343. package/build/types/filter-list/inputs/ContainsTextFilterInput.d.ts.map +1 -0
  344. package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts +12 -0
  345. package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts.map +1 -0
  346. package/build/types/filter-list/{base/inputs → inputs}/LinkedPropertyInput.d.ts +2 -2
  347. package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts.map +1 -0
  348. package/build/types/filter-list/inputs/ListogramFilterInput.d.ts +16 -0
  349. package/build/types/filter-list/inputs/ListogramFilterInput.d.ts.map +1 -0
  350. package/build/types/filter-list/inputs/MultiDateFilterInput.d.ts +9 -0
  351. package/build/types/filter-list/inputs/MultiDateFilterInput.d.ts.map +1 -0
  352. package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts +13 -0
  353. package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts.map +1 -0
  354. package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts +12 -0
  355. package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts.map +1 -0
  356. package/build/types/filter-list/inputs/PropertyFilterInput.d.ts +17 -0
  357. package/build/types/filter-list/inputs/PropertyFilterInput.d.ts.map +1 -0
  358. package/build/types/filter-list/inputs/SingleDateFilterInput.d.ts +9 -0
  359. package/build/types/filter-list/inputs/SingleDateFilterInput.d.ts.map +1 -0
  360. package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts +13 -0
  361. package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts.map +1 -0
  362. package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts +13 -0
  363. package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts.map +1 -0
  364. package/build/types/filter-list/inputs/TimelineFilterInput.d.ts +9 -0
  365. package/build/types/filter-list/inputs/TimelineFilterInput.d.ts.map +1 -0
  366. package/build/types/filter-list/inputs/ToggleFilterInput.d.ts +9 -0
  367. package/build/types/filter-list/inputs/ToggleFilterInput.d.ts.map +1 -0
  368. package/build/types/filter-list/types/AggregationTypes.d.ts +5 -0
  369. package/build/types/filter-list/types/AggregationTypes.d.ts.map +1 -0
  370. package/build/types/filter-list/types/LinkedFilterTypes.d.ts +0 -19
  371. package/build/types/filter-list/types/LinkedFilterTypes.d.ts.map +1 -1
  372. package/build/types/filter-list/types/index.d.ts +0 -2
  373. package/build/types/filter-list/types/index.d.ts.map +1 -1
  374. package/build/types/filter-list/utils/filterStateSerialization.d.ts +3 -0
  375. package/build/types/filter-list/utils/filterStateSerialization.d.ts.map +1 -0
  376. package/build/types/filter-list/utils/filterStateToWhereClause.d.ts +1 -1
  377. package/build/types/filter-list/utils/filterStateToWhereClause.d.ts.map +1 -1
  378. package/build/types/filter-list/utils/filterValues.d.ts +2 -0
  379. package/build/types/filter-list/utils/filterValues.d.ts.map +1 -1
  380. package/build/types/object-table/EditableCell.d.ts +8 -2
  381. package/build/types/object-table/EditableCell.d.ts.map +1 -1
  382. package/build/types/object-table/ObjectTableApi.d.ts +7 -0
  383. package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
  384. package/build/types/object-table/Table.d.ts +4 -0
  385. package/build/types/object-table/Table.d.ts.map +1 -1
  386. package/build/types/object-table/TableEditContainer.d.ts +1 -1
  387. package/build/types/object-table/TableEditContainer.d.ts.map +1 -1
  388. package/build/types/object-table/TableRow.d.ts +2 -2
  389. package/build/types/object-table/TableRow.d.ts.map +1 -1
  390. package/build/types/object-table/hooks/useEditableTable.d.ts.map +1 -1
  391. package/build/types/object-table/utils/types.d.ts +7 -4
  392. package/build/types/object-table/utils/types.d.ts.map +1 -1
  393. package/build/types/public/experimental.d.ts +4 -1
  394. package/build/types/public/experimental.d.ts.map +1 -1
  395. package/package.json +5 -5
  396. package/build/browser/filter-list/base/FilterInput.js +0 -542
  397. package/build/browser/filter-list/base/FilterInput.js.map +0 -1
  398. package/build/browser/filter-list/base/FilterList.js.map +0 -1
  399. package/build/browser/filter-list/base/inputs/LinkedPropertyInput.js +0 -237
  400. package/build/browser/filter-list/base/inputs/LinkedPropertyInput.js.map +0 -1
  401. package/build/browser/filter-list/types/AddFilterMenuTypes.js +0 -2
  402. package/build/browser/filter-list/types/AddFilterMenuTypes.js.map +0 -1
  403. package/build/browser/filter-list/types/FilterPanelTypes.js +0 -2
  404. package/build/browser/filter-list/types/FilterPanelTypes.js.map +0 -1
  405. package/build/esm/filter-list/base/FilterInput.js +0 -542
  406. package/build/esm/filter-list/base/FilterInput.js.map +0 -1
  407. package/build/esm/filter-list/base/FilterList.js.map +0 -1
  408. package/build/esm/filter-list/base/inputs/LinkedPropertyInput.js +0 -237
  409. package/build/esm/filter-list/base/inputs/LinkedPropertyInput.js.map +0 -1
  410. package/build/esm/filter-list/types/AddFilterMenuTypes.js +0 -2
  411. package/build/esm/filter-list/types/AddFilterMenuTypes.js.map +0 -1
  412. package/build/esm/filter-list/types/FilterPanelTypes.js +0 -2
  413. package/build/esm/filter-list/types/FilterPanelTypes.js.map +0 -1
  414. package/build/types/filter-list/base/FilterInput.d.ts.map +0 -1
  415. package/build/types/filter-list/base/FilterList.d.ts.map +0 -1
  416. package/build/types/filter-list/base/inputs/LinkedPropertyInput.d.ts.map +0 -1
  417. package/build/types/filter-list/types/AddFilterMenuTypes.d.ts +0 -56
  418. package/build/types/filter-list/types/AddFilterMenuTypes.d.ts.map +0 -1
  419. package/build/types/filter-list/types/FilterPanelTypes.d.ts +0 -18
  420. package/build/types/filter-list/types/FilterPanelTypes.d.ts.map +0 -1
@@ -0,0 +1,36 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import React, { memo, useCallback } from "react";
18
+ import { ToggleInput } from "../base/inputs/ToggleInput.js";
19
+ function ToggleFilterInputInner({
20
+ filterState,
21
+ onFilterStateChanged
22
+ }) {
23
+ const enabled = filterState?.type === "TOGGLE" ? filterState.enabled : false;
24
+ const handleChange = useCallback(enabled => {
25
+ onFilterStateChanged({
26
+ type: "TOGGLE",
27
+ enabled
28
+ });
29
+ }, [onFilterStateChanged]);
30
+ return /*#__PURE__*/React.createElement(ToggleInput, {
31
+ enabled: enabled,
32
+ onChange: handleChange
33
+ });
34
+ }
35
+ export const ToggleFilterInput = /*#__PURE__*/memo(ToggleFilterInputInner);
36
+ //# sourceMappingURL=ToggleFilterInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleFilterInput.js","names":["React","memo","useCallback","ToggleInput","ToggleFilterInputInner","filterState","onFilterStateChanged","enabled","type","handleChange","createElement","onChange","ToggleFilterInput"],"sources":["ToggleFilterInput.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, useCallback } from \"react\";\nimport { ToggleInput } from \"../base/inputs/ToggleInput.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\n\ninterface ToggleFilterInputProps {\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n}\n\nfunction ToggleFilterInputInner({\n filterState,\n onFilterStateChanged,\n}: ToggleFilterInputProps): React.ReactElement {\n const enabled = filterState?.type === \"TOGGLE\" ? filterState.enabled : false;\n\n const handleChange = useCallback(\n (enabled: boolean) => {\n onFilterStateChanged({ type: \"TOGGLE\", enabled });\n },\n [onFilterStateChanged],\n );\n\n return <ToggleInput enabled={enabled} onChange={handleChange} />;\n}\n\nexport const ToggleFilterInput: React.MemoExoticComponent<\n typeof ToggleFilterInputInner\n> = memo(ToggleFilterInputInner);\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAIC,IAAI,EAAEC,WAAW,QAAQ,OAAO;AAChD,SAASC,WAAW,QAAQ,+BAA+B;AAQ3D,SAASC,sBAAsBA,CAAC;EAC9BC,WAAW;EACXC;AACsB,CAAC,EAAsB;EAC7C,MAAMC,OAAO,GAAGF,WAAW,EAAEG,IAAI,KAAK,QAAQ,GAAGH,WAAW,CAACE,OAAO,GAAG,KAAK;EAE5E,MAAME,YAAY,GAAGP,WAAW,CAC7BK,OAAgB,IAAK;IACpBD,oBAAoB,CAAC;MAAEE,IAAI,EAAE,QAAQ;MAAED;IAAQ,CAAC,CAAC;EACnD,CAAC,EACD,CAACD,oBAAoB,CACvB,CAAC;EAED,oBAAON,KAAA,CAAAU,aAAA,CAACP,WAAW;IAACI,OAAO,EAAEA,OAAQ;IAACI,QAAQ,EAAEF;EAAa,CAAE,CAAC;AAClE;AAEA,OAAO,MAAMG,iBAEZ,gBAAGX,IAAI,CAACG,sBAAsB,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AggregationTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AggregationTypes.js","names":[],"sources":["AggregationTypes.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 interface PropertyAggregationValue {\n value: string;\n count: number;\n isNull?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"LinkedFilterTypes.js","names":[],"sources":["LinkedFilterTypes.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n LinkedType,\n LinkNames,\n ObjectTypeDefinition,\n PropertyKeys,\n} from \"@osdk/api\";\nimport type {\n BaseFilterState,\n FilterState,\n FilterStateByComponentType,\n PropertyTypeFromKey,\n ValidComponentsForPropertyType,\n} from \"../FilterListItemApi.js\";\n\n/**\n * State for \"has link\" filter\n */\nexport interface HasLinkFilterState extends BaseFilterState {\n type: \"hasLink\";\n hasLink: boolean;\n}\n\n/**\n * State for linked property filter\n * Wraps the filter state of the linked property\n */\nexport interface LinkedPropertyFilterState<S extends FilterState = FilterState>\n extends BaseFilterState\n{\n type: \"linkedProperty\";\n linkedFilterState: S;\n}\n\n/**\n * Filter definition for \"Has Link\" filter\n * Filters objects based on whether they have any linked objects of the specified type\n */\nexport interface HasLinkFilterDefinition<\n Q extends ObjectTypeDefinition,\n L extends LinkNames<Q> = LinkNames<Q>,\n> {\n type: \"HAS_LINK\";\n /**\n * Optional unique identifier for stable keying across filter reorders.\n */\n id?: string;\n linkName: L;\n label?: string;\n filterState: HasLinkFilterState;\n defaultFilterState?: HasLinkFilterState;\n /**\n * Controls whether this filter is rendered.\n * When false, the filter is hidden but its state is preserved.\n * @default true\n */\n isVisible?: boolean;\n}\n\n/**\n * Filter definition for filtering on a property of linked objects\n */\nexport interface LinkedPropertyFilterDefinition<\n Q extends ObjectTypeDefinition,\n L extends LinkNames<Q>,\n LinkedQ extends ObjectTypeDefinition = LinkedType<Q, L>,\n LinkedK extends PropertyKeys<LinkedQ> = PropertyKeys<LinkedQ>,\n LinkedC extends ValidComponentsForPropertyType<\n PropertyTypeFromKey<LinkedQ, LinkedK>\n > = ValidComponentsForPropertyType<PropertyTypeFromKey<LinkedQ, LinkedK>>,\n> {\n type: \"LINKED_PROPERTY\";\n /**\n * Optional unique identifier for stable keying across filter reorders.\n */\n id?: string;\n linkName: L;\n linkedPropertyKey: LinkedK;\n linkedFilterComponent: LinkedC;\n linkedFilterState: FilterStateByComponentType[LinkedC];\n defaultLinkedFilterState?: FilterStateByComponentType[LinkedC];\n filterState: LinkedPropertyFilterState<FilterStateByComponentType[LinkedC]>;\n label?: string;\n /**\n * Controls whether this filter is rendered.\n * When false, the filter is hidden but its state is preserved.\n * @default true\n */\n isVisible?: boolean;\n}\n\n/**\n * Display mode for linked filters\n *\n * - \"inline\": Show alongside non-linked filters in the main list\n * - \"grouped\": Group by link type with collapsible sections\n */\nexport type LinkedFilterDisplayMode = \"inline\" | \"grouped\";\n\n/**\n * Configuration for a group of linked filters\n */\nexport interface LinkedFilterGroupConfig<\n Q extends ObjectTypeDefinition,\n L extends LinkNames<Q> = LinkNames<Q>,\n> {\n linkName: L;\n displayMode: LinkedFilterDisplayMode;\n collapsedByDefault?: boolean;\n groupLabel?: string;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"LinkedFilterTypes.js","names":[],"sources":["LinkedFilterTypes.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n LinkedType,\n LinkNames,\n ObjectTypeDefinition,\n PropertyKeys,\n} from \"@osdk/api\";\nimport type {\n BaseFilterState,\n FilterState,\n FilterStateByComponentType,\n PropertyTypeFromKey,\n ValidComponentsForPropertyType,\n} from \"../FilterListItemApi.js\";\n\n/**\n * State for \"has link\" filter\n */\nexport interface HasLinkFilterState extends BaseFilterState {\n type: \"hasLink\";\n hasLink: boolean;\n}\n\n/**\n * State for linked property filter\n * Wraps the filter state of the linked property\n */\nexport interface LinkedPropertyFilterState<S extends FilterState = FilterState>\n extends BaseFilterState\n{\n type: \"linkedProperty\";\n linkedFilterState: S;\n}\n\n/**\n * Filter definition for \"Has Link\" filter\n * Filters objects based on whether they have any linked objects of the specified type\n */\nexport interface HasLinkFilterDefinition<\n Q extends ObjectTypeDefinition,\n L extends LinkNames<Q> = LinkNames<Q>,\n> {\n type: \"HAS_LINK\";\n /**\n * Optional unique identifier for stable keying across filter reorders.\n */\n id?: string;\n linkName: L;\n label?: string;\n filterState: HasLinkFilterState;\n defaultFilterState?: HasLinkFilterState;\n /**\n * Controls whether this filter is rendered.\n * When false, the filter is hidden but its state is preserved.\n * @default true\n */\n isVisible?: boolean;\n}\n\n/**\n * Filter definition for filtering on a property of linked objects\n */\nexport interface LinkedPropertyFilterDefinition<\n Q extends ObjectTypeDefinition,\n L extends LinkNames<Q>,\n LinkedQ extends ObjectTypeDefinition = LinkedType<Q, L>,\n LinkedK extends PropertyKeys<LinkedQ> = PropertyKeys<LinkedQ>,\n LinkedC extends ValidComponentsForPropertyType<\n PropertyTypeFromKey<LinkedQ, LinkedK>\n > = ValidComponentsForPropertyType<PropertyTypeFromKey<LinkedQ, LinkedK>>,\n> {\n type: \"LINKED_PROPERTY\";\n /**\n * Optional unique identifier for stable keying across filter reorders.\n */\n id?: string;\n linkName: L;\n linkedPropertyKey: LinkedK;\n linkedFilterComponent: LinkedC;\n linkedFilterState: FilterStateByComponentType[LinkedC];\n defaultLinkedFilterState?: FilterStateByComponentType[LinkedC];\n filterState: LinkedPropertyFilterState<FilterStateByComponentType[LinkedC]>;\n label?: string;\n /**\n * Controls whether this filter is rendered.\n * When false, the filter is hidden but its state is preserved.\n * @default true\n */\n isVisible?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
@@ -14,9 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- export * from "./AddFilterMenuTypes.js";
18
17
  export * from "./CustomRendererTypes.js";
19
- export * from "./FilterPanelTypes.js";
20
18
  export * from "./KeywordSearchTypes.js";
21
19
  export * from "./LinkedFilterTypes.js";
22
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"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 * from \"./AddFilterMenuTypes.js\";\nexport * from \"./CustomRendererTypes.js\";\nexport * from \"./FilterPanelTypes.js\";\nexport * from \"./KeywordSearchTypes.js\";\nexport * from \"./LinkedFilterTypes.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,yBAAyB;AACvC,cAAc,0BAA0B;AACxC,cAAc,uBAAuB;AACrC,cAAc,yBAAyB;AACvC,cAAc,wBAAwB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":[],"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 * from \"./CustomRendererTypes.js\";\nexport * from \"./KeywordSearchTypes.js\";\nexport * from \"./LinkedFilterTypes.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,0BAA0B;AACxC,cAAc,yBAAyB;AACvC,cAAc,wBAAwB","ignoreList":[]}
@@ -0,0 +1,42 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ const DATE_PREFIX = "__date__:";
18
+ function replacer(_key, value) {
19
+ if (value instanceof Date) {
20
+ return DATE_PREFIX + value.toISOString();
21
+ }
22
+ return value;
23
+ }
24
+ function reviver(_key, value) {
25
+ if (typeof value === "string" && value.startsWith(DATE_PREFIX)) {
26
+ return new Date(value.slice(DATE_PREFIX.length));
27
+ }
28
+ return value;
29
+ }
30
+ export function serializeFilterStates(states) {
31
+ const entries = Array.from(states.entries());
32
+ return JSON.stringify(entries, replacer);
33
+ }
34
+ export function deserializeFilterStates(json) {
35
+ try {
36
+ const entries = JSON.parse(json, reviver);
37
+ return new Map(entries);
38
+ } catch {
39
+ return new Map();
40
+ }
41
+ }
42
+ //# sourceMappingURL=filterStateSerialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterStateSerialization.js","names":["DATE_PREFIX","replacer","_key","value","Date","toISOString","reviver","startsWith","slice","length","serializeFilterStates","states","entries","Array","from","JSON","stringify","deserializeFilterStates","json","parse","Map"],"sources":["filterStateSerialization.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { FilterState } from \"../FilterListItemApi.js\";\n\nconst DATE_PREFIX = \"__date__:\";\n\nfunction replacer(_key: string, value: unknown): unknown {\n if (value instanceof Date) {\n return DATE_PREFIX + value.toISOString();\n }\n return value;\n}\n\nfunction reviver(_key: string, value: unknown): unknown {\n if (typeof value === \"string\" && value.startsWith(DATE_PREFIX)) {\n return new Date(value.slice(DATE_PREFIX.length));\n }\n return value;\n}\n\nexport function serializeFilterStates(\n states: Map<string, FilterState>,\n): string {\n const entries = Array.from(states.entries());\n return JSON.stringify(entries, replacer);\n}\n\nexport function deserializeFilterStates(\n json: string,\n): Map<string, FilterState> {\n try {\n const entries: Array<[string, FilterState]> = JSON.parse(json, reviver);\n return new Map(entries);\n } catch {\n return new Map();\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,MAAMA,WAAW,GAAG,WAAW;AAE/B,SAASC,QAAQA,CAACC,IAAY,EAAEC,KAAc,EAAW;EACvD,IAAIA,KAAK,YAAYC,IAAI,EAAE;IACzB,OAAOJ,WAAW,GAAGG,KAAK,CAACE,WAAW,CAAC,CAAC;EAC1C;EACA,OAAOF,KAAK;AACd;AAEA,SAASG,OAAOA,CAACJ,IAAY,EAAEC,KAAc,EAAW;EACtD,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACI,UAAU,CAACP,WAAW,CAAC,EAAE;IAC9D,OAAO,IAAII,IAAI,CAACD,KAAK,CAACK,KAAK,CAACR,WAAW,CAACS,MAAM,CAAC,CAAC;EAClD;EACA,OAAON,KAAK;AACd;AAEA,OAAO,SAASO,qBAAqBA,CACnCC,MAAgC,EACxB;EACR,MAAMC,OAAO,GAAGC,KAAK,CAACC,IAAI,CAACH,MAAM,CAACC,OAAO,CAAC,CAAC,CAAC;EAC5C,OAAOG,IAAI,CAACC,SAAS,CAACJ,OAAO,EAAEX,QAAQ,CAAC;AAC1C;AAEA,OAAO,SAASgB,uBAAuBA,CACrCC,IAAY,EACc;EAC1B,IAAI;IACF,MAAMN,OAAqC,GAAGG,IAAI,CAACI,KAAK,CAACD,IAAI,EAAEZ,OAAO,CAAC;IACvE,OAAO,IAAIc,GAAG,CAACR,OAAO,CAAC;EACzB,CAAC,CAAC,MAAM;IACN,OAAO,IAAIQ,GAAG,CAAC,CAAC;EAClB;AACF","ignoreList":[]}
@@ -16,8 +16,22 @@
16
16
 
17
17
  import { assertUnreachable } from "./assertUnreachable.js";
18
18
  import { getFilterKey } from "./getFilterKey.js";
19
- function isDate(value) {
20
- return value instanceof Date;
19
+ function liftCompoundPropertyFilter(propertyKey, filter) {
20
+ if (typeof filter === "object" && !Array.isArray(filter)) {
21
+ if ("$and" in filter && Array.isArray(filter.$and)) {
22
+ return {
23
+ $and: filter.$and.map(f => liftCompoundPropertyFilter(propertyKey, f))
24
+ };
25
+ }
26
+ if ("$or" in filter && Array.isArray(filter.$or)) {
27
+ return {
28
+ $or: filter.$or.map(f => liftCompoundPropertyFilter(propertyKey, f))
29
+ };
30
+ }
31
+ }
32
+ return {
33
+ [propertyKey]: filter
34
+ };
21
35
  }
22
36
  function filterStateToPropertyFilter(state) {
23
37
  switch (state.type) {
@@ -136,8 +150,7 @@ function filterStateToPropertyFilter(state) {
136
150
  if (state.selectedValues.length === 0) {
137
151
  return undefined;
138
152
  }
139
- const isDateValue = state.selectedValues[0] instanceof Date;
140
- const values = isDateValue ? state.selectedValues.map(v => v.toISOString()) : state.selectedValues;
153
+ const values = state.selectedValues.map(v => v instanceof Date ? v.toISOString() : v);
141
154
  const filter = values.length === 1 ? values[0] : {
142
155
  $in: values
143
156
  };
@@ -164,12 +177,20 @@ function filterStateToPropertyFilter(state) {
164
177
  if (conditions.length === 0) {
165
178
  return undefined;
166
179
  }
180
+ let rangeFilter;
167
181
  if (conditions.length === 1) {
168
- return conditions[0];
182
+ rangeFilter = conditions[0];
183
+ } else {
184
+ rangeFilter = {
185
+ $and: conditions
186
+ };
169
187
  }
170
- return {
171
- $and: conditions
172
- };
188
+ if (state.isExcluding) {
189
+ return {
190
+ $not: rangeFilter
191
+ };
192
+ }
193
+ return rangeFilter;
173
194
  }
174
195
 
175
196
  // These filter types are handled separately in buildWhereClause
@@ -196,13 +217,17 @@ function filterStateToPropertyFilter(state) {
196
217
  * cannot verify that the constructed clause structure matches the generic Q's
197
218
  * expected shape, but the structure is guaranteed to be valid by construction.
198
219
  */
199
- export function buildWhereClause(definitions, filterStates, operator, objectType) {
220
+ export function buildWhereClause(definitions, filterStates, operator, objectType, excludeFilterKey) {
200
221
  if (!definitions || definitions.length === 0) {
201
222
  return {};
202
223
  }
203
224
  const clauses = [];
204
225
  for (const definition of definitions) {
205
- const state = filterStates.get(getFilterKey(definition));
226
+ const key = getFilterKey(definition);
227
+ if (key === excludeFilterKey) {
228
+ continue;
229
+ }
230
+ const state = filterStates.get(key);
206
231
  if (!state) {
207
232
  continue;
208
233
  }
@@ -211,9 +236,7 @@ export function buildWhereClause(definitions, filterStates, operator, objectType
211
236
  {
212
237
  const filter = filterStateToPropertyFilter(state);
213
238
  if (filter !== undefined) {
214
- clauses.push({
215
- [definition.key]: filter
216
- });
239
+ clauses.push(liftCompoundPropertyFilter(definition.key, filter));
217
240
  }
218
241
  break;
219
242
  }
@@ -1 +1 @@
1
- {"version":3,"file":"filterStateToWhereClause.js","names":["assertUnreachable","getFilterKey","isDate","value","Date","filterStateToPropertyFilter","state","type","undefined","filter","$containsAnyTerm","isExcluding","$not","enabled","conditions","minValue","push","$gte","toISOString","maxValue","$lte","length","includeNull","rangeFilter","$and","$or","$isNull","values","$in","selectedValues","isDateValue","map","v","startDate","endDate","buildWhereClause","definitions","filterStates","operator","objectType","clauses","definition","get","key","process","env","NODE_ENV","console","warn","linkName","hasLink","$isNotNull","searchTerm","trim","properties","propertiesToSearch","__DefinitionMetadata","Object","entries","prop","multiplicity","containsOp","propertySearches","customClause","toWhereClause","keys"],"sources":["filterStateToWhereClause.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectTypeDefinition, WhereClause } from \"@osdk/api\";\nimport type { FilterDefinitionUnion } from \"../FilterListApi.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { assertUnreachable } from \"./assertUnreachable.js\";\nimport { getFilterKey } from \"./getFilterKey.js\";\n\ntype PropertyFilter = Record<string, unknown> | boolean | string | number;\n\nfunction isDate(value: unknown): value is Date {\n return value instanceof Date;\n}\n\nfunction filterStateToPropertyFilter(\n state: FilterState,\n): PropertyFilter | undefined {\n switch (state.type) {\n case \"CONTAINS_TEXT\": {\n if (!state.value) {\n return undefined;\n }\n const filter = { $containsAnyTerm: state.value };\n if (state.isExcluding) {\n return { $not: filter };\n }\n return filter;\n }\n\n case \"TOGGLE\": {\n return state.enabled;\n }\n\n case \"DATE_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({ $gte: state.minValue.toISOString() });\n }\n if (state.maxValue !== undefined) {\n conditions.push({ $lte: state.maxValue.toISOString() });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n let rangeFilter: PropertyFilter | undefined;\n if (conditions.length === 1) {\n rangeFilter = conditions[0];\n } else if (conditions.length > 1) {\n rangeFilter = { $and: conditions };\n }\n\n if (state.includeNull) {\n if (rangeFilter) {\n return { $or: [rangeFilter, { $isNull: true }] };\n }\n return { $isNull: true };\n }\n\n return rangeFilter;\n }\n\n case \"NUMBER_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({ $gte: state.minValue });\n }\n if (state.maxValue !== undefined) {\n conditions.push({ $lte: state.maxValue });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n let rangeFilter: PropertyFilter | undefined;\n if (conditions.length === 1) {\n rangeFilter = conditions[0];\n } else if (conditions.length > 1) {\n rangeFilter = { $and: conditions };\n }\n\n if (state.includeNull) {\n if (rangeFilter) {\n return { $or: [rangeFilter, { $isNull: true }] };\n }\n return { $isNull: true };\n }\n\n return rangeFilter;\n }\n\n case \"EXACT_MATCH\": {\n if (state.values.length === 0) {\n return undefined;\n }\n const filter = state.values.length === 1\n ? state.values[0]\n : { $in: state.values };\n if (state.isExcluding) {\n return { $not: filter };\n }\n return filter;\n }\n\n case \"SELECT\": {\n if (state.selectedValues.length === 0) {\n return undefined;\n }\n const isDateValue = state.selectedValues[0] instanceof Date;\n const values: (string | number | boolean)[] = isDateValue\n ? state.selectedValues.map((v) => (v as Date).toISOString())\n : state.selectedValues as (string | number | boolean)[];\n const filter = values.length === 1 ? values[0] : { $in: values };\n if (state.isExcluding) {\n return { $not: filter };\n }\n return filter;\n }\n\n case \"TIMELINE\": {\n const conditions: PropertyFilter[] = [];\n if (state.startDate !== undefined) {\n conditions.push({ $gte: state.startDate.toISOString() });\n }\n if (state.endDate !== undefined) {\n conditions.push({ $lte: state.endDate.toISOString() });\n }\n if (conditions.length === 0) {\n return undefined;\n }\n if (conditions.length === 1) {\n return conditions[0];\n }\n return { $and: conditions };\n }\n\n // These filter types are handled separately in buildWhereClause\n // since they need access to the full definition, not just state\n case \"hasLink\":\n case \"linkedProperty\":\n case \"keywordSearch\":\n case \"custom\":\n return undefined;\n\n default:\n return assertUnreachable(state);\n }\n}\n\n/**\n * Builds a WhereClause from filter definitions and their current states.\n *\n * The filterStates map uses string keys derived from filter definitions via\n * getFilterKey(). This ensures stable state lookups even when filters are\n * reordered or definition object references change.\n *\n * Note: The `as WhereClause<Q>` casts are necessary because we're building\n * clauses dynamically from property keys determined at runtime. TypeScript\n * cannot verify that the constructed clause structure matches the generic Q's\n * expected shape, but the structure is guaranteed to be valid by construction.\n */\nexport function buildWhereClause<Q extends ObjectTypeDefinition>(\n definitions: Array<FilterDefinitionUnion<Q>> | undefined,\n filterStates: Map<string, FilterState>,\n operator: \"and\" | \"or\",\n objectType?: Q,\n): WhereClause<Q> {\n if (!definitions || definitions.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n const clauses: Array<Record<string, unknown>> = [];\n\n for (const definition of definitions) {\n const state = filterStates.get(getFilterKey(definition));\n\n if (!state) {\n continue;\n }\n\n switch (definition.type) {\n case \"PROPERTY\": {\n const filter = filterStateToPropertyFilter(state);\n if (filter !== undefined) {\n clauses.push({ [definition.key]: filter });\n }\n break;\n }\n\n case \"HAS_LINK\": {\n if (state.type !== \"hasLink\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for hasLink filter \"${definition.linkName}\": expected hasLink, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.hasLink) {\n break;\n }\n clauses.push({ [definition.linkName]: { $isNotNull: true } });\n break;\n }\n\n case \"LINKED_PROPERTY\": {\n // OSDK WhereClause does not support filtering through links.\n // Link-based filtering requires ObjectSet operations (pivotTo/intersect).\n // LinkedProperty filters render UI for selection but cannot be included\n // in the where clause. Consumers needing linked property filtering must\n // implement it using ObjectSet.pivotTo() and intersect().\n break;\n }\n\n case \"KEYWORD_SEARCH\": {\n if (state.type !== \"keywordSearch\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for keywordSearch filter: expected keywordSearch, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.searchTerm) {\n break;\n }\n // TypeScript narrows state to KeywordSearchFilterState\n const searchTerm = state.searchTerm.trim();\n if (!searchTerm) {\n break;\n }\n\n const properties = definition.properties;\n let propertiesToSearch: string[];\n\n if (properties === \"all\") {\n if (objectType?.__DefinitionMetadata?.properties) {\n propertiesToSearch = Object.entries(\n objectType.__DefinitionMetadata.properties,\n )\n .filter(([, prop]) =>\n prop.type === \"string\" && !prop.multiplicity\n )\n .map(([key]) => key);\n } else {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n \"[FilterList] Keyword search with properties: 'all' requires objectType to be provided. Filter will be skipped.\",\n );\n }\n break;\n }\n } else {\n propertiesToSearch = properties;\n }\n\n if (propertiesToSearch.length === 0) {\n break;\n }\n\n const containsOp = state.operator === \"AND\"\n ? \"$containsAllTerms\"\n : \"$containsAnyTerm\";\n\n const propertySearches = propertiesToSearch.map((prop) => ({\n [prop]: state.isExcluding\n ? { $not: { [containsOp]: searchTerm } }\n : { [containsOp]: searchTerm },\n }));\n\n if (propertySearches.length === 1) {\n clauses.push(propertySearches[0]);\n } else {\n clauses.push({ $or: propertySearches });\n }\n break;\n }\n\n case \"CUSTOM\": {\n if (state.type !== \"custom\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for custom filter \"${definition.key}\": expected custom, got ${state.type}`,\n );\n }\n break;\n }\n // TypeScript narrows state to CustomFilterState\n const customClause = definition.toWhereClause(state);\n if (customClause && Object.keys(customClause).length > 0) {\n clauses.push(customClause as Record<string, unknown>);\n }\n break;\n }\n\n default:\n assertUnreachable(definition);\n }\n }\n\n if (clauses.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n if (clauses.length === 1) {\n return clauses[0] as WhereClause<Q>;\n }\n\n if (operator === \"and\") {\n return { $and: clauses } as WhereClause<Q>;\n }\n\n return { $or: clauses } as WhereClause<Q>;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"filterStateToWhereClause.js","names":["assertUnreachable","getFilterKey","liftCompoundPropertyFilter","propertyKey","filter","Array","isArray","$and","map","f","$or","filterStateToPropertyFilter","state","type","value","undefined","$containsAnyTerm","isExcluding","$not","enabled","conditions","minValue","push","$gte","toISOString","maxValue","$lte","length","includeNull","rangeFilter","$isNull","values","$in","selectedValues","v","Date","startDate","endDate","buildWhereClause","definitions","filterStates","operator","objectType","excludeFilterKey","clauses","definition","key","get","process","env","NODE_ENV","console","warn","linkName","hasLink","$isNotNull","searchTerm","trim","properties","propertiesToSearch","__DefinitionMetadata","Object","entries","prop","multiplicity","containsOp","propertySearches","customClause","toWhereClause","keys"],"sources":["filterStateToWhereClause.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectTypeDefinition, WhereClause } from \"@osdk/api\";\nimport type { FilterDefinitionUnion } from \"../FilterListApi.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { assertUnreachable } from \"./assertUnreachable.js\";\nimport { getFilterKey } from \"./getFilterKey.js\";\n\ntype PropertyFilter = Record<string, unknown> | boolean | string | number;\n\nfunction liftCompoundPropertyFilter(\n propertyKey: string,\n filter: PropertyFilter,\n): Record<string, unknown> {\n if (typeof filter === \"object\" && !Array.isArray(filter)) {\n if (\"$and\" in filter && Array.isArray(filter.$and)) {\n return {\n $and: (filter.$and as PropertyFilter[]).map((f) =>\n liftCompoundPropertyFilter(propertyKey, f)\n ),\n };\n }\n if (\"$or\" in filter && Array.isArray(filter.$or)) {\n return {\n $or: (filter.$or as PropertyFilter[]).map((f) =>\n liftCompoundPropertyFilter(propertyKey, f)\n ),\n };\n }\n }\n return { [propertyKey]: filter };\n}\n\nfunction filterStateToPropertyFilter(\n state: FilterState,\n): PropertyFilter | undefined {\n switch (state.type) {\n case \"CONTAINS_TEXT\": {\n if (!state.value) {\n return undefined;\n }\n const filter = { $containsAnyTerm: state.value };\n if (state.isExcluding) {\n return { $not: filter };\n }\n return filter;\n }\n\n case \"TOGGLE\": {\n return state.enabled;\n }\n\n case \"DATE_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({ $gte: state.minValue.toISOString() });\n }\n if (state.maxValue !== undefined) {\n conditions.push({ $lte: state.maxValue.toISOString() });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n let rangeFilter: PropertyFilter | undefined;\n if (conditions.length === 1) {\n rangeFilter = conditions[0];\n } else if (conditions.length > 1) {\n rangeFilter = { $and: conditions };\n }\n\n if (state.includeNull) {\n if (rangeFilter) {\n return { $or: [rangeFilter, { $isNull: true }] };\n }\n return { $isNull: true };\n }\n\n return rangeFilter;\n }\n\n case \"NUMBER_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({ $gte: state.minValue });\n }\n if (state.maxValue !== undefined) {\n conditions.push({ $lte: state.maxValue });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n let rangeFilter: PropertyFilter | undefined;\n if (conditions.length === 1) {\n rangeFilter = conditions[0];\n } else if (conditions.length > 1) {\n rangeFilter = { $and: conditions };\n }\n\n if (state.includeNull) {\n if (rangeFilter) {\n return { $or: [rangeFilter, { $isNull: true }] };\n }\n return { $isNull: true };\n }\n\n return rangeFilter;\n }\n\n case \"EXACT_MATCH\": {\n if (state.values.length === 0) {\n return undefined;\n }\n const filter = state.values.length === 1\n ? state.values[0]\n : { $in: state.values };\n if (state.isExcluding) {\n return { $not: filter };\n }\n return filter;\n }\n\n case \"SELECT\": {\n if (state.selectedValues.length === 0) {\n return undefined;\n }\n const values: (string | number | boolean)[] = state.selectedValues.map(\n (v) =>\n v instanceof Date ? v.toISOString() : v as string | number | boolean,\n );\n const filter = values.length === 1 ? values[0] : { $in: values };\n if (state.isExcluding) {\n return { $not: filter };\n }\n return filter;\n }\n\n case \"TIMELINE\": {\n const conditions: PropertyFilter[] = [];\n if (state.startDate !== undefined) {\n conditions.push({ $gte: state.startDate.toISOString() });\n }\n if (state.endDate !== undefined) {\n conditions.push({ $lte: state.endDate.toISOString() });\n }\n if (conditions.length === 0) {\n return undefined;\n }\n let rangeFilter: PropertyFilter;\n if (conditions.length === 1) {\n rangeFilter = conditions[0];\n } else {\n rangeFilter = { $and: conditions };\n }\n if (state.isExcluding) {\n return { $not: rangeFilter };\n }\n return rangeFilter;\n }\n\n // These filter types are handled separately in buildWhereClause\n // since they need access to the full definition, not just state\n case \"hasLink\":\n case \"linkedProperty\":\n case \"keywordSearch\":\n case \"custom\":\n return undefined;\n\n default:\n return assertUnreachable(state);\n }\n}\n\n/**\n * Builds a WhereClause from filter definitions and their current states.\n *\n * The filterStates map uses string keys derived from filter definitions via\n * getFilterKey(). This ensures stable state lookups even when filters are\n * reordered or definition object references change.\n *\n * Note: The `as WhereClause<Q>` casts are necessary because we're building\n * clauses dynamically from property keys determined at runtime. TypeScript\n * cannot verify that the constructed clause structure matches the generic Q's\n * expected shape, but the structure is guaranteed to be valid by construction.\n */\nexport function buildWhereClause<Q extends ObjectTypeDefinition>(\n definitions: Array<FilterDefinitionUnion<Q>> | undefined,\n filterStates: Map<string, FilterState>,\n operator: \"and\" | \"or\",\n objectType?: Q,\n excludeFilterKey?: string,\n): WhereClause<Q> {\n if (!definitions || definitions.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n const clauses: Array<Record<string, unknown>> = [];\n\n for (const definition of definitions) {\n const key = getFilterKey(definition);\n if (key === excludeFilterKey) {\n continue;\n }\n const state = filterStates.get(key);\n\n if (!state) {\n continue;\n }\n\n switch (definition.type) {\n case \"PROPERTY\": {\n const filter = filterStateToPropertyFilter(state);\n if (filter !== undefined) {\n clauses.push(\n liftCompoundPropertyFilter(definition.key as string, filter),\n );\n }\n break;\n }\n\n case \"HAS_LINK\": {\n if (state.type !== \"hasLink\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for hasLink filter \"${definition.linkName}\": expected hasLink, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.hasLink) {\n break;\n }\n clauses.push({ [definition.linkName]: { $isNotNull: true } });\n break;\n }\n\n case \"LINKED_PROPERTY\": {\n // OSDK WhereClause does not support filtering through links.\n // Link-based filtering requires ObjectSet operations (pivotTo/intersect).\n // LinkedProperty filters render UI for selection but cannot be included\n // in the where clause. Consumers needing linked property filtering must\n // implement it using ObjectSet.pivotTo() and intersect().\n break;\n }\n\n case \"KEYWORD_SEARCH\": {\n if (state.type !== \"keywordSearch\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for keywordSearch filter: expected keywordSearch, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.searchTerm) {\n break;\n }\n // TypeScript narrows state to KeywordSearchFilterState\n const searchTerm = state.searchTerm.trim();\n if (!searchTerm) {\n break;\n }\n\n const properties = definition.properties;\n let propertiesToSearch: string[];\n\n if (properties === \"all\") {\n if (objectType?.__DefinitionMetadata?.properties) {\n propertiesToSearch = Object.entries(\n objectType.__DefinitionMetadata.properties,\n )\n .filter(([, prop]) =>\n prop.type === \"string\" && !prop.multiplicity\n )\n .map(([key]) => key);\n } else {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n \"[FilterList] Keyword search with properties: 'all' requires objectType to be provided. Filter will be skipped.\",\n );\n }\n break;\n }\n } else {\n propertiesToSearch = properties;\n }\n\n if (propertiesToSearch.length === 0) {\n break;\n }\n\n const containsOp = state.operator === \"AND\"\n ? \"$containsAllTerms\"\n : \"$containsAnyTerm\";\n\n const propertySearches = propertiesToSearch.map((prop) => ({\n [prop]: state.isExcluding\n ? { $not: { [containsOp]: searchTerm } }\n : { [containsOp]: searchTerm },\n }));\n\n if (propertySearches.length === 1) {\n clauses.push(propertySearches[0]);\n } else {\n clauses.push({ $or: propertySearches });\n }\n break;\n }\n\n case \"CUSTOM\": {\n if (state.type !== \"custom\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for custom filter \"${definition.key}\": expected custom, got ${state.type}`,\n );\n }\n break;\n }\n // TypeScript narrows state to CustomFilterState\n const customClause = definition.toWhereClause(state);\n if (customClause && Object.keys(customClause).length > 0) {\n clauses.push(customClause as Record<string, unknown>);\n }\n break;\n }\n\n default:\n assertUnreachable(definition);\n }\n }\n\n if (clauses.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n if (clauses.length === 1) {\n return clauses[0] as WhereClause<Q>;\n }\n\n if (operator === \"and\") {\n return { $and: clauses } as WhereClause<Q>;\n }\n\n return { $or: clauses } as WhereClause<Q>;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -14,6 +14,32 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
+ /** Returns true for filter state types that support isExcluding. */
18
+ export function supportsExcluding(state) {
19
+ if (!state) {
20
+ return false;
21
+ }
22
+ switch (state.type) {
23
+ case "SELECT":
24
+ case "EXACT_MATCH":
25
+ case "CONTAINS_TEXT":
26
+ case "TIMELINE":
27
+ return true;
28
+ case "NUMBER_RANGE":
29
+ case "DATE_RANGE":
30
+ case "TOGGLE":
31
+ case "hasLink":
32
+ case "linkedProperty":
33
+ case "keywordSearch":
34
+ case "custom":
35
+ return false;
36
+ default:
37
+ {
38
+ return false;
39
+ }
40
+ }
41
+ }
42
+
17
43
  /** Case-insensitive substring filter for search functionality. */
18
44
  export function filterValuesBySearch(values, searchValue, getValue) {
19
45
  const trimmed = searchValue.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"filterValues.js","names":["filterValuesBySearch","values","searchValue","getValue","trimmed","trim","lowerSearch","toLowerCase","filter","v","includes","filterHasActiveState","state","type","selectedValues","length","value","undefined","minValue","maxValue","includeNull","enabled","hasLink","linkedFilterState","searchTerm","startDate","endDate"],"sources":["filterValues.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { FilterState } from \"../FilterListItemApi.js\";\n\n/** Case-insensitive substring filter for search functionality. */\nexport function filterValuesBySearch<T>(\n values: T[],\n searchValue: string,\n getValue: (item: T) => string,\n): T[] {\n const trimmed = searchValue.trim();\n if (!trimmed) return values;\n const lowerSearch = trimmed.toLowerCase();\n return values.filter((v) => getValue(v).toLowerCase().includes(lowerSearch));\n}\n\n/** Check if a filter state has an active (non-empty) value. */\nexport function filterHasActiveState(state: FilterState | undefined): boolean {\n if (!state) return false;\n\n switch (state.type) {\n case \"SELECT\":\n return state.selectedValues.length > 0;\n case \"EXACT_MATCH\":\n return state.values.length > 0;\n case \"CONTAINS_TEXT\":\n return state.value !== undefined && state.value !== \"\";\n case \"NUMBER_RANGE\":\n return state.minValue !== undefined || state.maxValue !== undefined\n || state.includeNull === true;\n case \"DATE_RANGE\":\n return state.minValue !== undefined || state.maxValue !== undefined\n || state.includeNull === true;\n case \"TOGGLE\":\n return state.enabled;\n case \"hasLink\":\n return state.hasLink;\n case \"linkedProperty\":\n return filterHasActiveState(state.linkedFilterState);\n case \"keywordSearch\":\n return state.searchTerm !== undefined && state.searchTerm !== \"\";\n case \"TIMELINE\":\n return state.startDate !== undefined || state.endDate !== undefined;\n case \"custom\":\n return true;\n default:\n return false;\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA,OAAO,SAASA,oBAAoBA,CAClCC,MAAW,EACXC,WAAmB,EACnBC,QAA6B,EACxB;EACL,MAAMC,OAAO,GAAGF,WAAW,CAACG,IAAI,CAAC,CAAC;EAClC,IAAI,CAACD,OAAO,EAAE,OAAOH,MAAM;EAC3B,MAAMK,WAAW,GAAGF,OAAO,CAACG,WAAW,CAAC,CAAC;EACzC,OAAON,MAAM,CAACO,MAAM,CAAEC,CAAC,IAAKN,QAAQ,CAACM,CAAC,CAAC,CAACF,WAAW,CAAC,CAAC,CAACG,QAAQ,CAACJ,WAAW,CAAC,CAAC;AAC9E;;AAEA;AACA,OAAO,SAASK,oBAAoBA,CAACC,KAA8B,EAAW;EAC5E,IAAI,CAACA,KAAK,EAAE,OAAO,KAAK;EAExB,QAAQA,KAAK,CAACC,IAAI;IAChB,KAAK,QAAQ;MACX,OAAOD,KAAK,CAACE,cAAc,CAACC,MAAM,GAAG,CAAC;IACxC,KAAK,aAAa;MAChB,OAAOH,KAAK,CAACX,MAAM,CAACc,MAAM,GAAG,CAAC;IAChC,KAAK,eAAe;MAClB,OAAOH,KAAK,CAACI,KAAK,KAAKC,SAAS,IAAIL,KAAK,CAACI,KAAK,KAAK,EAAE;IACxD,KAAK,cAAc;MACjB,OAAOJ,KAAK,CAACM,QAAQ,KAAKD,SAAS,IAAIL,KAAK,CAACO,QAAQ,KAAKF,SAAS,IAC9DL,KAAK,CAACQ,WAAW,KAAK,IAAI;IACjC,KAAK,YAAY;MACf,OAAOR,KAAK,CAACM,QAAQ,KAAKD,SAAS,IAAIL,KAAK,CAACO,QAAQ,KAAKF,SAAS,IAC9DL,KAAK,CAACQ,WAAW,KAAK,IAAI;IACjC,KAAK,QAAQ;MACX,OAAOR,KAAK,CAACS,OAAO;IACtB,KAAK,SAAS;MACZ,OAAOT,KAAK,CAACU,OAAO;IACtB,KAAK,gBAAgB;MACnB,OAAOX,oBAAoB,CAACC,KAAK,CAACW,iBAAiB,CAAC;IACtD,KAAK,eAAe;MAClB,OAAOX,KAAK,CAACY,UAAU,KAAKP,SAAS,IAAIL,KAAK,CAACY,UAAU,KAAK,EAAE;IAClE,KAAK,UAAU;MACb,OAAOZ,KAAK,CAACa,SAAS,KAAKR,SAAS,IAAIL,KAAK,CAACc,OAAO,KAAKT,SAAS;IACrE,KAAK,QAAQ;MACX,OAAO,IAAI;IACb;MACE,OAAO,KAAK;EAChB;AACF","ignoreList":[]}
1
+ {"version":3,"file":"filterValues.js","names":["supportsExcluding","state","type","filterValuesBySearch","values","searchValue","getValue","trimmed","trim","lowerSearch","toLowerCase","filter","v","includes","filterHasActiveState","selectedValues","length","value","undefined","minValue","maxValue","includeNull","enabled","hasLink","linkedFilterState","searchTerm","startDate","endDate"],"sources":["filterValues.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { FilterState } from \"../FilterListItemApi.js\";\n\n/** Returns true for filter state types that support isExcluding. */\nexport function supportsExcluding(state: FilterState | undefined): boolean {\n if (!state) {\n return false;\n }\n switch (state.type) {\n case \"SELECT\":\n case \"EXACT_MATCH\":\n case \"CONTAINS_TEXT\":\n case \"TIMELINE\":\n return true;\n case \"NUMBER_RANGE\":\n case \"DATE_RANGE\":\n case \"TOGGLE\":\n case \"hasLink\":\n case \"linkedProperty\":\n case \"keywordSearch\":\n case \"custom\":\n return false;\n default: {\n const _exhaustive: never = state;\n return false;\n }\n }\n}\n\n/** Case-insensitive substring filter for search functionality. */\nexport function filterValuesBySearch<T>(\n values: T[],\n searchValue: string,\n getValue: (item: T) => string,\n): T[] {\n const trimmed = searchValue.trim();\n if (!trimmed) return values;\n const lowerSearch = trimmed.toLowerCase();\n return values.filter((v) => getValue(v).toLowerCase().includes(lowerSearch));\n}\n\n/** Check if a filter state has an active (non-empty) value. */\nexport function filterHasActiveState(state: FilterState | undefined): boolean {\n if (!state) return false;\n\n switch (state.type) {\n case \"SELECT\":\n return state.selectedValues.length > 0;\n case \"EXACT_MATCH\":\n return state.values.length > 0;\n case \"CONTAINS_TEXT\":\n return state.value !== undefined && state.value !== \"\";\n case \"NUMBER_RANGE\":\n return state.minValue !== undefined || state.maxValue !== undefined\n || state.includeNull === true;\n case \"DATE_RANGE\":\n return state.minValue !== undefined || state.maxValue !== undefined\n || state.includeNull === true;\n case \"TOGGLE\":\n return state.enabled;\n case \"hasLink\":\n return state.hasLink;\n case \"linkedProperty\":\n return filterHasActiveState(state.linkedFilterState);\n case \"keywordSearch\":\n return state.searchTerm !== undefined && state.searchTerm !== \"\";\n case \"TIMELINE\":\n return state.startDate !== undefined || state.endDate !== undefined;\n case \"custom\":\n return true;\n default:\n return false;\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA,OAAO,SAASA,iBAAiBA,CAACC,KAA8B,EAAW;EACzE,IAAI,CAACA,KAAK,EAAE;IACV,OAAO,KAAK;EACd;EACA,QAAQA,KAAK,CAACC,IAAI;IAChB,KAAK,QAAQ;IACb,KAAK,aAAa;IAClB,KAAK,eAAe;IACpB,KAAK,UAAU;MACb,OAAO,IAAI;IACb,KAAK,cAAc;IACnB,KAAK,YAAY;IACjB,KAAK,QAAQ;IACb,KAAK,SAAS;IACd,KAAK,gBAAgB;IACrB,KAAK,eAAe;IACpB,KAAK,QAAQ;MACX,OAAO,KAAK;IACd;MAAS;QAEP,OAAO,KAAK;MACd;EACF;AACF;;AAEA;AACA,OAAO,SAASC,oBAAoBA,CAClCC,MAAW,EACXC,WAAmB,EACnBC,QAA6B,EACxB;EACL,MAAMC,OAAO,GAAGF,WAAW,CAACG,IAAI,CAAC,CAAC;EAClC,IAAI,CAACD,OAAO,EAAE,OAAOH,MAAM;EAC3B,MAAMK,WAAW,GAAGF,OAAO,CAACG,WAAW,CAAC,CAAC;EACzC,OAAON,MAAM,CAACO,MAAM,CAAEC,CAAC,IAAKN,QAAQ,CAACM,CAAC,CAAC,CAACF,WAAW,CAAC,CAAC,CAACG,QAAQ,CAACJ,WAAW,CAAC,CAAC;AAC9E;;AAEA;AACA,OAAO,SAASK,oBAAoBA,CAACb,KAA8B,EAAW;EAC5E,IAAI,CAACA,KAAK,EAAE,OAAO,KAAK;EAExB,QAAQA,KAAK,CAACC,IAAI;IAChB,KAAK,QAAQ;MACX,OAAOD,KAAK,CAACc,cAAc,CAACC,MAAM,GAAG,CAAC;IACxC,KAAK,aAAa;MAChB,OAAOf,KAAK,CAACG,MAAM,CAACY,MAAM,GAAG,CAAC;IAChC,KAAK,eAAe;MAClB,OAAOf,KAAK,CAACgB,KAAK,KAAKC,SAAS,IAAIjB,KAAK,CAACgB,KAAK,KAAK,EAAE;IACxD,KAAK,cAAc;MACjB,OAAOhB,KAAK,CAACkB,QAAQ,KAAKD,SAAS,IAAIjB,KAAK,CAACmB,QAAQ,KAAKF,SAAS,IAC9DjB,KAAK,CAACoB,WAAW,KAAK,IAAI;IACjC,KAAK,YAAY;MACf,OAAOpB,KAAK,CAACkB,QAAQ,KAAKD,SAAS,IAAIjB,KAAK,CAACmB,QAAQ,KAAKF,SAAS,IAC9DjB,KAAK,CAACoB,WAAW,KAAK,IAAI;IACjC,KAAK,QAAQ;MACX,OAAOpB,KAAK,CAACqB,OAAO;IACtB,KAAK,SAAS;MACZ,OAAOrB,KAAK,CAACsB,OAAO;IACtB,KAAK,gBAAgB;MACnB,OAAOT,oBAAoB,CAACb,KAAK,CAACuB,iBAAiB,CAAC;IACtD,KAAK,eAAe;MAClB,OAAOvB,KAAK,CAACwB,UAAU,KAAKP,SAAS,IAAIjB,KAAK,CAACwB,UAAU,KAAK,EAAE;IAClE,KAAK,UAAU;MACb,OAAOxB,KAAK,CAACyB,SAAS,KAAKR,SAAS,IAAIjB,KAAK,CAAC0B,OAAO,KAAKT,SAAS;IACrE,KAAK,QAAQ;MACX,OAAO,IAAI;IACb;MACE,OAAO,KAAK;EAChB;AACF","ignoreList":[]}
@@ -134,10 +134,6 @@
134
134
  cursor: pointer;
135
135
  padding: 0;
136
136
 
137
- &:focus {
138
- outline: none;
139
- }
140
-
141
137
  &:focus-visible {
142
138
  outline: var(--osdk-focus-outline);
143
139
  outline-offset: var(--osdk-focus-visible-outline-offset);
@@ -221,11 +217,6 @@
221
217
  white-space: nowrap;
222
218
  background: none;
223
219
  border: none;
224
-
225
- &:focus {
226
- outline: none;
227
- }
228
-
229
220
  &:focus-visible {
230
221
  outline: var(--osdk-focus-outline);
231
222
  outline-offset: var(--osdk-focus-visible-outline-offset);
@@ -32,15 +32,20 @@ export function renderDefaultCell(cellContext) {
32
32
  const cellEdits = meta.cellEdits;
33
33
  const editedValue = cellEdits?.[cellId];
34
34
  const currentValue = editedValue?.newValue ?? cellContext.getValue();
35
+ const validationError = meta.validationErrors?.get(cellId);
35
36
  return /*#__PURE__*/React.createElement(EditableCell, {
36
37
  initialValue: cellContext.getValue(),
37
38
  currentValue: currentValue,
38
39
  cellId: cellId,
39
40
  dataType: columnMeta?.dataType,
40
41
  onCellEdit: meta.onCellEdit,
42
+ onCellValidationError: meta.onCellValidationError,
43
+ clearCellValidationError: meta.clearCellValidationError,
41
44
  originalRowData: cellContext.row.original,
42
45
  rowId: rowId,
43
- columnId: columnId
46
+ columnId: columnId,
47
+ validateEdit: columnMeta?.validateEdit,
48
+ validationError: validationError
44
49
  });
45
50
  }
46
51
  //# sourceMappingURL=DefaultCellRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultCellRenderer.js","names":["React","EditableCell","getCellId","renderDefaultCell","cellContext","meta","table","options","columnMeta","column","columnDef","editable","onCellEdit","isInEditMode","createElement","Fragment","getValue","rowId","row","id","columnId","cellId","cellEdits","editedValue","currentValue","newValue","initialValue","dataType","originalRowData","original"],"sources":["DefaultCellRenderer.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 { CellContext, RowData } from \"@tanstack/react-table\";\nimport React from \"react\";\nimport { EditableCell } from \"./EditableCell.js\";\nimport { getCellId } from \"./utils/getCellId.js\";\n\nexport function renderDefaultCell<TData extends RowData>(\n cellContext: CellContext<TData, unknown>,\n): React.ReactNode {\n const meta = cellContext.table.options.meta;\n const columnMeta = cellContext.column.columnDef.meta;\n\n if (!columnMeta?.editable || !meta?.onCellEdit || !meta?.isInEditMode) {\n return <>{cellContext.getValue()}</>;\n }\n\n const rowId = cellContext.row.id;\n const columnId = cellContext.column.id;\n const cellId = getCellId({ rowId, columnId });\n\n const cellEdits = meta.cellEdits;\n const editedValue = cellEdits?.[cellId];\n const currentValue = editedValue?.newValue ?? cellContext.getValue();\n\n return (\n <EditableCell<TData>\n initialValue={cellContext.getValue()}\n currentValue={currentValue}\n cellId={cellId}\n dataType={columnMeta?.dataType}\n onCellEdit={meta.onCellEdit}\n originalRowData={cellContext.row.original}\n rowId={rowId}\n columnId={columnId}\n />\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,SAAS,QAAQ,sBAAsB;AAEhD,OAAO,SAASC,iBAAiBA,CAC/BC,WAAwC,EACvB;EACjB,MAAMC,IAAI,GAAGD,WAAW,CAACE,KAAK,CAACC,OAAO,CAACF,IAAI;EAC3C,MAAMG,UAAU,GAAGJ,WAAW,CAACK,MAAM,CAACC,SAAS,CAACL,IAAI;EAEpD,IAAI,CAACG,UAAU,EAAEG,QAAQ,IAAI,CAACN,IAAI,EAAEO,UAAU,IAAI,CAACP,IAAI,EAAEQ,YAAY,EAAE;IACrE,oBAAOb,KAAA,CAAAc,aAAA,CAAAd,KAAA,CAAAe,QAAA,QAAGX,WAAW,CAACY,QAAQ,CAAC,CAAI,CAAC;EACtC;EAEA,MAAMC,KAAK,GAAGb,WAAW,CAACc,GAAG,CAACC,EAAE;EAChC,MAAMC,QAAQ,GAAGhB,WAAW,CAACK,MAAM,CAACU,EAAE;EACtC,MAAME,MAAM,GAAGnB,SAAS,CAAC;IAAEe,KAAK;IAAEG;EAAS,CAAC,CAAC;EAE7C,MAAME,SAAS,GAAGjB,IAAI,CAACiB,SAAS;EAChC,MAAMC,WAAW,GAAGD,SAAS,GAAGD,MAAM,CAAC;EACvC,MAAMG,YAAY,GAAGD,WAAW,EAAEE,QAAQ,IAAIrB,WAAW,CAACY,QAAQ,CAAC,CAAC;EAEpE,oBACEhB,KAAA,CAAAc,aAAA,CAACb,YAAY;IACXyB,YAAY,EAAEtB,WAAW,CAACY,QAAQ,CAAC,CAAE;IACrCQ,YAAY,EAAEA,YAAa;IAC3BH,MAAM,EAAEA,MAAO;IACfM,QAAQ,EAAEnB,UAAU,EAAEmB,QAAS;IAC/Bf,UAAU,EAAEP,IAAI,CAACO,UAAW;IAC5BgB,eAAe,EAAExB,WAAW,CAACc,GAAG,CAACW,QAAS;IAC1CZ,KAAK,EAAEA,KAAM;IACbG,QAAQ,EAAEA;EAAS,CACpB,CAAC;AAEN","ignoreList":[]}
1
+ {"version":3,"file":"DefaultCellRenderer.js","names":["React","EditableCell","getCellId","renderDefaultCell","cellContext","meta","table","options","columnMeta","column","columnDef","editable","onCellEdit","isInEditMode","createElement","Fragment","getValue","rowId","row","id","columnId","cellId","cellEdits","editedValue","currentValue","newValue","validationError","validationErrors","get","initialValue","dataType","onCellValidationError","clearCellValidationError","originalRowData","original","validateEdit"],"sources":["DefaultCellRenderer.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 { CellContext, RowData } from \"@tanstack/react-table\";\nimport React from \"react\";\nimport { EditableCell } from \"./EditableCell.js\";\nimport { getCellId } from \"./utils/getCellId.js\";\n\nexport function renderDefaultCell<TData extends RowData>(\n cellContext: CellContext<TData, unknown>,\n): React.ReactNode {\n const meta = cellContext.table.options.meta;\n const columnMeta = cellContext.column.columnDef.meta;\n\n if (!columnMeta?.editable || !meta?.onCellEdit || !meta?.isInEditMode) {\n return <>{cellContext.getValue()}</>;\n }\n\n const rowId = cellContext.row.id;\n const columnId = cellContext.column.id;\n const cellId = getCellId({ rowId, columnId });\n\n const cellEdits = meta.cellEdits;\n const editedValue = cellEdits?.[cellId];\n const currentValue = editedValue?.newValue ?? cellContext.getValue();\n const validationError = meta.validationErrors?.get(cellId);\n\n return (\n <EditableCell<TData>\n initialValue={cellContext.getValue()}\n currentValue={currentValue}\n cellId={cellId}\n dataType={columnMeta?.dataType}\n onCellEdit={meta.onCellEdit}\n onCellValidationError={meta.onCellValidationError}\n clearCellValidationError={meta.clearCellValidationError}\n originalRowData={cellContext.row.original}\n rowId={rowId}\n columnId={columnId}\n validateEdit={columnMeta?.validateEdit}\n validationError={validationError}\n />\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,SAAS,QAAQ,sBAAsB;AAEhD,OAAO,SAASC,iBAAiBA,CAC/BC,WAAwC,EACvB;EACjB,MAAMC,IAAI,GAAGD,WAAW,CAACE,KAAK,CAACC,OAAO,CAACF,IAAI;EAC3C,MAAMG,UAAU,GAAGJ,WAAW,CAACK,MAAM,CAACC,SAAS,CAACL,IAAI;EAEpD,IAAI,CAACG,UAAU,EAAEG,QAAQ,IAAI,CAACN,IAAI,EAAEO,UAAU,IAAI,CAACP,IAAI,EAAEQ,YAAY,EAAE;IACrE,oBAAOb,KAAA,CAAAc,aAAA,CAAAd,KAAA,CAAAe,QAAA,QAAGX,WAAW,CAACY,QAAQ,CAAC,CAAI,CAAC;EACtC;EAEA,MAAMC,KAAK,GAAGb,WAAW,CAACc,GAAG,CAACC,EAAE;EAChC,MAAMC,QAAQ,GAAGhB,WAAW,CAACK,MAAM,CAACU,EAAE;EACtC,MAAME,MAAM,GAAGnB,SAAS,CAAC;IAAEe,KAAK;IAAEG;EAAS,CAAC,CAAC;EAE7C,MAAME,SAAS,GAAGjB,IAAI,CAACiB,SAAS;EAChC,MAAMC,WAAW,GAAGD,SAAS,GAAGD,MAAM,CAAC;EACvC,MAAMG,YAAY,GAAGD,WAAW,EAAEE,QAAQ,IAAIrB,WAAW,CAACY,QAAQ,CAAC,CAAC;EACpE,MAAMU,eAAe,GAAGrB,IAAI,CAACsB,gBAAgB,EAAEC,GAAG,CAACP,MAAM,CAAC;EAE1D,oBACErB,KAAA,CAAAc,aAAA,CAACb,YAAY;IACX4B,YAAY,EAAEzB,WAAW,CAACY,QAAQ,CAAC,CAAE;IACrCQ,YAAY,EAAEA,YAAa;IAC3BH,MAAM,EAAEA,MAAO;IACfS,QAAQ,EAAEtB,UAAU,EAAEsB,QAAS;IAC/BlB,UAAU,EAAEP,IAAI,CAACO,UAAW;IAC5BmB,qBAAqB,EAAE1B,IAAI,CAAC0B,qBAAsB;IAClDC,wBAAwB,EAAE3B,IAAI,CAAC2B,wBAAyB;IACxDC,eAAe,EAAE7B,WAAW,CAACc,GAAG,CAACgB,QAAS;IAC1CjB,KAAK,EAAEA,KAAM;IACbG,QAAQ,EAAEA,QAAS;IACnBe,YAAY,EAAE3B,UAAU,EAAE2B,YAAa;IACvCT,eAAe,EAAEA;EAAgB,CAClC,CAAC;AAEN","ignoreList":[]}
@@ -15,8 +15,10 @@
15
15
  */
16
16
 
17
17
  import { Input } from "@base-ui/react/input";
18
+ import { Error } from "@blueprintjs/icons";
18
19
  import classNames from "classnames";
19
20
  import React, { useCallback, useEffect, useRef, useState } from "react";
21
+ import { Tooltip } from "../base-components/tooltip/Tooltip.js";
20
22
  import styles from "./EditableCell.module.css.js";
21
23
  const NUMBER_TYPES = ["double", "integer", "long", "float", "decimal", "byte", "short"];
22
24
  function valueToString(value) {
@@ -42,27 +44,49 @@ function parseValueByType(value, dataType) {
42
44
  }
43
45
  return parsedNumber;
44
46
  }
45
- export function EditableCell({
47
+ const VALIDATION_ERROR_MESSAGE = "Validation error";
48
+ function EditableCellInner({
46
49
  initialValue,
47
50
  currentValue,
48
51
  cellId,
49
52
  dataType,
50
53
  onCellEdit,
54
+ onCellValidationError,
55
+ clearCellValidationError,
51
56
  originalRowData,
52
57
  rowId,
53
- columnId
58
+ columnId,
59
+ validateEdit,
60
+ validationError
54
61
  }) {
55
62
  const [inputValue, setInputValue] = useState(valueToString(currentValue));
56
63
  const isCancelled = useRef(false);
64
+ const validationAbortControllerRef = useRef(null);
65
+ const abortController = useCallback(() => {
66
+ if (validationAbortControllerRef.current) {
67
+ validationAbortControllerRef.current.abort();
68
+ validationAbortControllerRef.current = null;
69
+ }
70
+ }, []);
71
+ const hasValidationError = validationError != null;
57
72
  useEffect(() => {
58
73
  setInputValue(valueToString(currentValue));
59
74
  }, [currentValue]);
75
+ useEffect(() => {
76
+ // Cleanup abort controller on unmount
77
+ return () => {
78
+ abortController();
79
+ };
80
+ }, [abortController]);
60
81
  const handleBlur = useCallback(() => {
61
82
  // Do not commit the edit if it was cancelled with Escape key
62
83
  if (isCancelled.current) {
63
84
  isCancelled.current = false;
64
85
  return;
65
86
  }
87
+
88
+ // Cancel any in-flight validation
89
+ abortController();
66
90
  const parsedValue = parseValueByType(inputValue, dataType);
67
91
  onCellEdit(cellId, {
68
92
  rowId,
@@ -71,10 +95,37 @@ export function EditableCell({
71
95
  oldValue: initialValue,
72
96
  originalRowData
73
97
  });
74
- }, [inputValue, initialValue, onCellEdit, cellId, dataType, rowId, columnId, originalRowData]);
98
+ if (validateEdit) {
99
+ // Create new AbortController for this validation
100
+ const abortController = new AbortController();
101
+ validationAbortControllerRef.current = abortController;
102
+ const validationPromise = validateEdit(parsedValue);
103
+
104
+ // Race between validation and abort
105
+ Promise.race([validationPromise, new Promise((_, reject) => {
106
+ abortController.signal.addEventListener("abort", () => {
107
+ reject(new DOMException("Aborted", "AbortError"));
108
+ });
109
+ })]).then(errorMessage => {
110
+ if (!abortController.signal.aborted) {
111
+ if (errorMessage) {
112
+ onCellValidationError?.(cellId, errorMessage);
113
+ } else {
114
+ clearCellValidationError?.(cellId);
115
+ }
116
+ }
117
+ }, error => {
118
+ if (!abortController.signal.aborted && error.name !== "AbortError") {
119
+ onCellValidationError?.(cellId, VALIDATION_ERROR_MESSAGE);
120
+ }
121
+ });
122
+ }
123
+ }, [abortController, inputValue, dataType, onCellEdit, cellId, rowId, columnId, initialValue, originalRowData, validateEdit, onCellValidationError, clearCellValidationError]);
75
124
  const handleChange = useCallback(value => {
125
+ // Cancel any in-flight validation
126
+ abortController();
76
127
  setInputValue(value);
77
- }, []);
128
+ }, [abortController]);
78
129
  const handleKeyDown = useCallback(e => {
79
130
  if (e.key === "Enter") {
80
131
  e.currentTarget.blur();
@@ -86,15 +137,31 @@ export function EditableCell({
86
137
  }
87
138
  }, [currentValue]);
88
139
  const inputType = dataType && NUMBER_TYPES.includes(dataType) ? "number" : "text";
89
- return /*#__PURE__*/React.createElement(Input, {
90
- className: classNames(styles.osdkEditableInput, {
140
+ return /*#__PURE__*/React.createElement(Tooltip.Provider, null, /*#__PURE__*/React.createElement(Tooltip.Root, {
141
+ disabled: !hasValidationError
142
+ }, /*#__PURE__*/React.createElement(Tooltip.Trigger, null, /*#__PURE__*/React.createElement("div", {
143
+ className: classNames(styles.osdkEditableCell, {
144
+ [styles.error]: hasValidationError,
91
145
  [styles.osdkEditedInput]: currentValue !== initialValue
92
- }),
146
+ })
147
+ }, /*#__PURE__*/React.createElement(Input, {
93
148
  type: inputType,
94
149
  value: inputValue,
150
+ className: styles.osdkEditableInput,
95
151
  onValueChange: handleChange,
96
152
  onBlur: handleBlur,
97
- onKeyDown: handleKeyDown
98
- });
153
+ onKeyDown: handleKeyDown,
154
+ "aria-invalid": hasValidationError
155
+ }), hasValidationError && /*#__PURE__*/React.createElement(Error, {
156
+ className: styles.errorIcon
157
+ }))), /*#__PURE__*/React.createElement(Tooltip.Portal, null, /*#__PURE__*/React.createElement(Tooltip.Positioner, {
158
+ sideOffset: 4,
159
+ side: "bottom"
160
+ }, /*#__PURE__*/React.createElement(Tooltip.Popup, null, /*#__PURE__*/React.createElement("div", {
161
+ className: styles.validationError
162
+ }, /*#__PURE__*/React.createElement(Error, {
163
+ className: styles.errorIcon
164
+ }), validationError), /*#__PURE__*/React.createElement(Tooltip.Arrow, null))))));
99
165
  }
166
+ export const EditableCell = /*#__PURE__*/React.memo(EditableCellInner);
100
167
  //# sourceMappingURL=EditableCell.js.map