@osdk/react-components 0.2.0-beta.19 → 0.2.0-beta.20

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 (316) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/build/browser/action-form/ActionForm.js +5 -1
  3. package/build/browser/action-form/ActionForm.js.map +1 -1
  4. package/build/browser/action-form/BaseForm.js +4 -8
  5. package/build/browser/action-form/BaseForm.js.map +1 -1
  6. package/build/browser/action-form/FormFieldApi.js.map +1 -1
  7. package/build/browser/action-form/fields/DropdownField.js +104 -0
  8. package/build/browser/action-form/fields/DropdownField.js.map +1 -0
  9. package/build/browser/action-form/fields/FormFieldRenderer.js +23 -12
  10. package/build/browser/action-form/fields/FormFieldRenderer.js.map +1 -1
  11. package/build/browser/action-form/fields/TextInputField.js +8 -9
  12. package/build/browser/action-form/fields/TextInputField.js.map +1 -1
  13. package/build/browser/base-components/combobox/Combobox.js +25 -3
  14. package/build/browser/base-components/combobox/Combobox.js.map +1 -1
  15. package/build/browser/base-components/combobox/Combobox.module.css +226 -46
  16. package/build/browser/base-components/combobox/Combobox.module.css.js +1 -0
  17. package/build/browser/base-components/select/Select.js +7 -1
  18. package/build/browser/base-components/select/Select.js.map +1 -1
  19. package/build/browser/base-components/select/Select.module.css +132 -35
  20. package/build/browser/base-components/select/Select.module.css.js +2 -0
  21. package/build/browser/base-components/skeleton/SkeletonBar.js +36 -0
  22. package/build/browser/base-components/skeleton/SkeletonBar.js.map +1 -0
  23. package/build/browser/base-components/skeleton/SkeletonBar.module.css +39 -0
  24. package/build/browser/base-components/skeleton/SkeletonBar.module.css.js +7 -0
  25. package/build/browser/filter-list/FilterList.js +42 -5
  26. package/build/browser/filter-list/FilterList.js.map +1 -1
  27. package/build/browser/filter-list/FilterListApi.js.map +1 -1
  28. package/build/browser/filter-list/base/AddFilterPopover.js +45 -0
  29. package/build/browser/filter-list/base/AddFilterPopover.js.map +1 -0
  30. package/build/browser/filter-list/base/AddFilterPopover.module.css +83 -0
  31. package/build/browser/filter-list/base/AddFilterPopover.module.css.js +9 -0
  32. package/build/browser/filter-list/base/inputs/CheckboxListInput.js +16 -27
  33. package/build/browser/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
  34. package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css +15 -5
  35. package/build/browser/filter-list/base/inputs/CheckboxListSkeleton.js +46 -0
  36. package/build/browser/filter-list/base/inputs/CheckboxListSkeleton.js.map +1 -0
  37. package/build/browser/filter-list/base/inputs/CheckboxListSkeleton.module.css +32 -0
  38. package/build/browser/filter-list/base/inputs/CheckboxListSkeleton.module.css.js +8 -0
  39. package/build/browser/filter-list/base/inputs/ListogramInput.js +21 -12
  40. package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
  41. package/build/browser/filter-list/base/inputs/ListogramInput.module.css +13 -1
  42. package/build/browser/filter-list/base/inputs/ListogramSkeleton.js +45 -0
  43. package/build/browser/filter-list/base/inputs/ListogramSkeleton.js.map +1 -0
  44. package/build/browser/filter-list/base/inputs/ListogramSkeleton.module.css +32 -0
  45. package/build/browser/filter-list/base/inputs/ListogramSkeleton.module.css.js +8 -0
  46. package/build/browser/filter-list/base/inputs/MultiSelectInput.js +1 -1
  47. package/build/browser/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
  48. package/build/browser/filter-list/base/inputs/RangeInput.js +13 -13
  49. package/build/browser/filter-list/base/inputs/RangeInput.js.map +1 -1
  50. package/build/browser/filter-list/base/inputs/RangeInput.module.css +23 -0
  51. package/build/browser/filter-list/base/inputs/TextTagsInput.js +1 -1
  52. package/build/browser/filter-list/base/inputs/TextTagsInput.js.map +1 -1
  53. package/build/browser/filter-list/base/inputs/useStaleData.js +29 -0
  54. package/build/browser/filter-list/base/inputs/useStaleData.js.map +1 -0
  55. package/build/browser/filter-list/hooks/useFilterVisibility.js +68 -0
  56. package/build/browser/filter-list/hooks/useFilterVisibility.js.map +1 -0
  57. package/build/browser/object-table/DefaultCellRenderer.js +13 -3
  58. package/build/browser/object-table/DefaultCellRenderer.js.map +1 -1
  59. package/build/browser/object-table/EditableCell.js +7 -6
  60. package/build/browser/object-table/EditableCell.js.map +1 -1
  61. package/build/browser/object-table/LoadingCell.js +6 -3
  62. package/build/browser/object-table/LoadingCell.js.map +1 -1
  63. package/build/browser/object-table/LoadingRow.js +2 -1
  64. package/build/browser/object-table/LoadingRow.js.map +1 -1
  65. package/build/browser/object-table/ObjectTableApi.js.map +1 -1
  66. package/build/browser/object-table/Table.js.map +1 -1
  67. package/build/browser/object-table/TableCell.module.css +1 -0
  68. package/build/browser/object-table/components/AsyncValueCell.js +35 -0
  69. package/build/browser/object-table/components/AsyncValueCell.js.map +1 -0
  70. package/build/browser/object-table/hooks/useColumnDefs.js +3 -1
  71. package/build/browser/object-table/hooks/useColumnDefs.js.map +1 -1
  72. package/build/browser/object-table/hooks/useFunctionColumnsData.js +270 -0
  73. package/build/browser/object-table/hooks/useFunctionColumnsData.js.map +1 -0
  74. package/build/browser/object-table/hooks/useObjectTableData.js +34 -13
  75. package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
  76. package/build/browser/object-table/utils/AsyncCellData.js +30 -0
  77. package/build/browser/object-table/utils/AsyncCellData.js.map +1 -0
  78. package/build/browser/object-table/utils/constants.js +1 -0
  79. package/build/browser/object-table/utils/constants.js.map +1 -1
  80. package/build/browser/pdf-viewer/PdfRenderer.js +88 -0
  81. package/build/browser/pdf-viewer/PdfRenderer.js.map +1 -0
  82. package/build/browser/pdf-viewer/PdfViewer.js +197 -0
  83. package/build/browser/pdf-viewer/PdfViewer.js.map +1 -0
  84. package/build/browser/pdf-viewer/PdfViewer.module.css +95 -0
  85. package/build/browser/pdf-viewer/PdfViewer.module.css.js +16 -0
  86. package/build/browser/pdf-viewer/PdfViewerAnnotationLayer.js +74 -0
  87. package/build/browser/pdf-viewer/PdfViewerAnnotationLayer.js.map +1 -0
  88. package/build/browser/pdf-viewer/PdfViewerAnnotationLayer.module.css +65 -0
  89. package/build/browser/pdf-viewer/PdfViewerAnnotationLayer.module.css.js +11 -0
  90. package/build/browser/pdf-viewer/PdfViewerSearchBar.js +84 -0
  91. package/build/browser/pdf-viewer/PdfViewerSearchBar.js.map +1 -0
  92. package/build/browser/pdf-viewer/PdfViewerSearchBar.module.css +65 -0
  93. package/build/browser/pdf-viewer/PdfViewerSearchBar.module.css.js +10 -0
  94. package/build/browser/pdf-viewer/PdfViewerSidebar.js +74 -0
  95. package/build/browser/pdf-viewer/PdfViewerSidebar.js.map +1 -0
  96. package/build/browser/pdf-viewer/PdfViewerSidebar.module.css +46 -0
  97. package/build/browser/pdf-viewer/PdfViewerSidebar.module.css.js +11 -0
  98. package/build/browser/pdf-viewer/PdfViewerThumbnail.js +100 -0
  99. package/build/browser/pdf-viewer/PdfViewerThumbnail.js.map +1 -0
  100. package/build/browser/pdf-viewer/PdfViewerThumbnail.module.css +26 -0
  101. package/build/browser/pdf-viewer/PdfViewerThumbnail.module.css.js +8 -0
  102. package/build/browser/pdf-viewer/PdfViewerToolbar.js +167 -0
  103. package/build/browser/pdf-viewer/PdfViewerToolbar.js.map +1 -0
  104. package/build/browser/pdf-viewer/PdfViewerToolbar.module.css +86 -0
  105. package/build/browser/pdf-viewer/PdfViewerToolbar.module.css.js +12 -0
  106. package/build/browser/pdf-viewer/constants.js +43 -0
  107. package/build/browser/pdf-viewer/constants.js.map +1 -0
  108. package/build/browser/pdf-viewer/hooks/usePdfAnnotationPortals.js +54 -0
  109. package/build/browser/pdf-viewer/hooks/usePdfAnnotationPortals.js.map +1 -0
  110. package/build/browser/pdf-viewer/hooks/usePdfDocument.js +67 -0
  111. package/build/browser/pdf-viewer/hooks/usePdfDocument.js.map +1 -0
  112. package/build/browser/pdf-viewer/hooks/usePdfViewer.js +69 -0
  113. package/build/browser/pdf-viewer/hooks/usePdfViewer.js.map +1 -0
  114. package/build/browser/pdf-viewer/hooks/usePdfViewerSearch.js +106 -0
  115. package/build/browser/pdf-viewer/hooks/usePdfViewerSearch.js.map +1 -0
  116. package/build/browser/pdf-viewer/hooks/usePdfViewerSync.js +71 -0
  117. package/build/browser/pdf-viewer/hooks/usePdfViewerSync.js.map +1 -0
  118. package/build/browser/pdf-viewer/types.js +2 -0
  119. package/build/browser/pdf-viewer/types.js.map +1 -0
  120. package/build/browser/public/experimental.js +4 -0
  121. package/build/browser/public/experimental.js.map +1 -1
  122. package/build/browser/styles.css +1008 -87
  123. package/build/cjs/public/experimental.cjs +2311 -895
  124. package/build/cjs/public/experimental.cjs.map +1 -1
  125. package/build/cjs/public/experimental.css +678 -153
  126. package/build/cjs/public/experimental.css.map +1 -1
  127. package/build/cjs/public/experimental.d.cts +114 -13
  128. package/build/esm/action-form/ActionForm.js +5 -1
  129. package/build/esm/action-form/ActionForm.js.map +1 -1
  130. package/build/esm/action-form/BaseForm.js +4 -8
  131. package/build/esm/action-form/BaseForm.js.map +1 -1
  132. package/build/esm/action-form/FormFieldApi.js.map +1 -1
  133. package/build/esm/action-form/fields/DropdownField.js +104 -0
  134. package/build/esm/action-form/fields/DropdownField.js.map +1 -0
  135. package/build/esm/action-form/fields/FormFieldRenderer.js +23 -12
  136. package/build/esm/action-form/fields/FormFieldRenderer.js.map +1 -1
  137. package/build/esm/action-form/fields/TextInputField.js +8 -9
  138. package/build/esm/action-form/fields/TextInputField.js.map +1 -1
  139. package/build/esm/base-components/combobox/Combobox.js +25 -3
  140. package/build/esm/base-components/combobox/Combobox.js.map +1 -1
  141. package/build/esm/base-components/combobox/Combobox.module.css +226 -46
  142. package/build/esm/base-components/select/Select.js +7 -1
  143. package/build/esm/base-components/select/Select.js.map +1 -1
  144. package/build/esm/base-components/select/Select.module.css +132 -35
  145. package/build/esm/base-components/skeleton/SkeletonBar.js +36 -0
  146. package/build/esm/base-components/skeleton/SkeletonBar.js.map +1 -0
  147. package/build/esm/base-components/skeleton/SkeletonBar.module.css +39 -0
  148. package/build/esm/filter-list/FilterList.js +42 -5
  149. package/build/esm/filter-list/FilterList.js.map +1 -1
  150. package/build/esm/filter-list/FilterListApi.js.map +1 -1
  151. package/build/esm/filter-list/base/AddFilterPopover.js +45 -0
  152. package/build/esm/filter-list/base/AddFilterPopover.js.map +1 -0
  153. package/build/esm/filter-list/base/AddFilterPopover.module.css +83 -0
  154. package/build/esm/filter-list/base/inputs/CheckboxListInput.js +16 -27
  155. package/build/esm/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
  156. package/build/esm/filter-list/base/inputs/CheckboxListInput.module.css +15 -5
  157. package/build/esm/filter-list/base/inputs/CheckboxListSkeleton.js +46 -0
  158. package/build/esm/filter-list/base/inputs/CheckboxListSkeleton.js.map +1 -0
  159. package/build/esm/filter-list/base/inputs/CheckboxListSkeleton.module.css +32 -0
  160. package/build/esm/filter-list/base/inputs/ListogramInput.js +21 -12
  161. package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
  162. package/build/esm/filter-list/base/inputs/ListogramInput.module.css +13 -1
  163. package/build/esm/filter-list/base/inputs/ListogramSkeleton.js +45 -0
  164. package/build/esm/filter-list/base/inputs/ListogramSkeleton.js.map +1 -0
  165. package/build/esm/filter-list/base/inputs/ListogramSkeleton.module.css +32 -0
  166. package/build/esm/filter-list/base/inputs/MultiSelectInput.js +1 -1
  167. package/build/esm/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
  168. package/build/esm/filter-list/base/inputs/RangeInput.js +13 -13
  169. package/build/esm/filter-list/base/inputs/RangeInput.js.map +1 -1
  170. package/build/esm/filter-list/base/inputs/RangeInput.module.css +23 -0
  171. package/build/esm/filter-list/base/inputs/TextTagsInput.js +1 -1
  172. package/build/esm/filter-list/base/inputs/TextTagsInput.js.map +1 -1
  173. package/build/esm/filter-list/base/inputs/useStaleData.js +29 -0
  174. package/build/esm/filter-list/base/inputs/useStaleData.js.map +1 -0
  175. package/build/esm/filter-list/hooks/useFilterVisibility.js +68 -0
  176. package/build/esm/filter-list/hooks/useFilterVisibility.js.map +1 -0
  177. package/build/esm/object-table/DefaultCellRenderer.js +13 -3
  178. package/build/esm/object-table/DefaultCellRenderer.js.map +1 -1
  179. package/build/esm/object-table/EditableCell.js +7 -6
  180. package/build/esm/object-table/EditableCell.js.map +1 -1
  181. package/build/esm/object-table/LoadingCell.js +6 -3
  182. package/build/esm/object-table/LoadingCell.js.map +1 -1
  183. package/build/esm/object-table/LoadingRow.js +2 -1
  184. package/build/esm/object-table/LoadingRow.js.map +1 -1
  185. package/build/esm/object-table/ObjectTableApi.js.map +1 -1
  186. package/build/esm/object-table/Table.js.map +1 -1
  187. package/build/esm/object-table/TableCell.module.css +1 -0
  188. package/build/esm/object-table/components/AsyncValueCell.js +35 -0
  189. package/build/esm/object-table/components/AsyncValueCell.js.map +1 -0
  190. package/build/esm/object-table/hooks/useColumnDefs.js +3 -1
  191. package/build/esm/object-table/hooks/useColumnDefs.js.map +1 -1
  192. package/build/esm/object-table/hooks/useFunctionColumnsData.js +270 -0
  193. package/build/esm/object-table/hooks/useFunctionColumnsData.js.map +1 -0
  194. package/build/esm/object-table/hooks/useObjectTableData.js +34 -13
  195. package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
  196. package/build/esm/object-table/utils/AsyncCellData.js +30 -0
  197. package/build/esm/object-table/utils/AsyncCellData.js.map +1 -0
  198. package/build/esm/object-table/utils/constants.js +1 -0
  199. package/build/esm/object-table/utils/constants.js.map +1 -1
  200. package/build/esm/pdf-viewer/PdfRenderer.js +88 -0
  201. package/build/esm/pdf-viewer/PdfRenderer.js.map +1 -0
  202. package/build/esm/pdf-viewer/PdfViewer.js +197 -0
  203. package/build/esm/pdf-viewer/PdfViewer.js.map +1 -0
  204. package/build/esm/pdf-viewer/PdfViewer.module.css +95 -0
  205. package/build/esm/pdf-viewer/PdfViewerAnnotationLayer.js +74 -0
  206. package/build/esm/pdf-viewer/PdfViewerAnnotationLayer.js.map +1 -0
  207. package/build/esm/pdf-viewer/PdfViewerAnnotationLayer.module.css +65 -0
  208. package/build/esm/pdf-viewer/PdfViewerSearchBar.js +84 -0
  209. package/build/esm/pdf-viewer/PdfViewerSearchBar.js.map +1 -0
  210. package/build/esm/pdf-viewer/PdfViewerSearchBar.module.css +65 -0
  211. package/build/esm/pdf-viewer/PdfViewerSidebar.js +74 -0
  212. package/build/esm/pdf-viewer/PdfViewerSidebar.js.map +1 -0
  213. package/build/esm/pdf-viewer/PdfViewerSidebar.module.css +46 -0
  214. package/build/esm/pdf-viewer/PdfViewerThumbnail.js +100 -0
  215. package/build/esm/pdf-viewer/PdfViewerThumbnail.js.map +1 -0
  216. package/build/esm/pdf-viewer/PdfViewerThumbnail.module.css +26 -0
  217. package/build/esm/pdf-viewer/PdfViewerToolbar.js +167 -0
  218. package/build/esm/pdf-viewer/PdfViewerToolbar.js.map +1 -0
  219. package/build/esm/pdf-viewer/PdfViewerToolbar.module.css +86 -0
  220. package/build/esm/pdf-viewer/constants.js +43 -0
  221. package/build/esm/pdf-viewer/constants.js.map +1 -0
  222. package/build/esm/pdf-viewer/hooks/usePdfAnnotationPortals.js +54 -0
  223. package/build/esm/pdf-viewer/hooks/usePdfAnnotationPortals.js.map +1 -0
  224. package/build/esm/pdf-viewer/hooks/usePdfDocument.js +67 -0
  225. package/build/esm/pdf-viewer/hooks/usePdfDocument.js.map +1 -0
  226. package/build/esm/pdf-viewer/hooks/usePdfViewer.js +69 -0
  227. package/build/esm/pdf-viewer/hooks/usePdfViewer.js.map +1 -0
  228. package/build/esm/pdf-viewer/hooks/usePdfViewerSearch.js +106 -0
  229. package/build/esm/pdf-viewer/hooks/usePdfViewerSearch.js.map +1 -0
  230. package/build/esm/pdf-viewer/hooks/usePdfViewerSync.js +71 -0
  231. package/build/esm/pdf-viewer/hooks/usePdfViewerSync.js.map +1 -0
  232. package/build/esm/pdf-viewer/types.js +2 -0
  233. package/build/esm/pdf-viewer/types.js.map +1 -0
  234. package/build/esm/public/experimental.js +4 -0
  235. package/build/esm/public/experimental.js.map +1 -1
  236. package/build/types/action-form/FormFieldApi.d.ts +48 -37
  237. package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
  238. package/build/types/action-form/fields/DropdownField.d.ts +6 -0
  239. package/build/types/action-form/fields/DropdownField.d.ts.map +1 -0
  240. package/build/types/action-form/fields/FormFieldRenderer.d.ts.map +1 -1
  241. package/build/types/action-form/fields/TextInputField.d.ts +3 -1
  242. package/build/types/action-form/fields/TextInputField.d.ts.map +1 -1
  243. package/build/types/base-components/combobox/Combobox.d.ts +9 -1
  244. package/build/types/base-components/combobox/Combobox.d.ts.map +1 -1
  245. package/build/types/base-components/select/Select.d.ts +8 -2
  246. package/build/types/base-components/select/Select.d.ts.map +1 -1
  247. package/build/types/base-components/skeleton/SkeletonBar.d.ts +9 -0
  248. package/build/types/base-components/skeleton/SkeletonBar.d.ts.map +1 -0
  249. package/build/types/filter-list/FilterList.d.ts.map +1 -1
  250. package/build/types/filter-list/FilterListApi.d.ts +24 -6
  251. package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
  252. package/build/types/filter-list/base/AddFilterPopover.d.ts +12 -0
  253. package/build/types/filter-list/base/AddFilterPopover.d.ts.map +1 -0
  254. package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts +2 -1
  255. package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts.map +1 -1
  256. package/build/types/filter-list/base/inputs/CheckboxListSkeleton.d.ts +2 -0
  257. package/build/types/filter-list/base/inputs/CheckboxListSkeleton.d.ts.map +1 -0
  258. package/build/types/filter-list/base/inputs/ListogramInput.d.ts +2 -1
  259. package/build/types/filter-list/base/inputs/ListogramInput.d.ts.map +1 -1
  260. package/build/types/filter-list/base/inputs/ListogramSkeleton.d.ts +2 -0
  261. package/build/types/filter-list/base/inputs/ListogramSkeleton.d.ts.map +1 -0
  262. package/build/types/filter-list/base/inputs/RangeInput.d.ts.map +1 -1
  263. package/build/types/filter-list/base/inputs/useStaleData.d.ts +1 -0
  264. package/build/types/filter-list/base/inputs/useStaleData.d.ts.map +1 -0
  265. package/build/types/filter-list/hooks/useFilterVisibility.d.ts +8 -0
  266. package/build/types/filter-list/hooks/useFilterVisibility.d.ts.map +1 -0
  267. package/build/types/object-table/DefaultCellRenderer.d.ts.map +1 -1
  268. package/build/types/object-table/EditableCell.d.ts.map +1 -1
  269. package/build/types/object-table/LoadingCell.d.ts +1 -0
  270. package/build/types/object-table/LoadingCell.d.ts.map +1 -1
  271. package/build/types/object-table/LoadingRow.d.ts.map +1 -1
  272. package/build/types/object-table/ObjectTableApi.d.ts +51 -15
  273. package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
  274. package/build/types/object-table/Table.d.ts +1 -0
  275. package/build/types/object-table/Table.d.ts.map +1 -1
  276. package/build/types/object-table/components/AsyncValueCell.d.ts +5 -0
  277. package/build/types/object-table/components/AsyncValueCell.d.ts.map +1 -0
  278. package/build/types/object-table/hooks/useFunctionColumnsData.d.ts +13 -0
  279. package/build/types/object-table/hooks/useFunctionColumnsData.d.ts.map +1 -0
  280. package/build/types/object-table/hooks/useObjectTableData.d.ts +8 -1
  281. package/build/types/object-table/hooks/useObjectTableData.d.ts.map +1 -1
  282. package/build/types/object-table/utils/AsyncCellData.d.ts +8 -0
  283. package/build/types/object-table/utils/AsyncCellData.d.ts.map +1 -0
  284. package/build/types/object-table/utils/constants.d.ts +1 -0
  285. package/build/types/object-table/utils/constants.d.ts.map +1 -1
  286. package/build/types/pdf-viewer/PdfRenderer.d.ts +8 -0
  287. package/build/types/pdf-viewer/PdfRenderer.d.ts.map +1 -0
  288. package/build/types/pdf-viewer/PdfViewer.d.ts +4 -0
  289. package/build/types/pdf-viewer/PdfViewer.d.ts.map +1 -0
  290. package/build/types/pdf-viewer/PdfViewerAnnotationLayer.d.ts +10 -0
  291. package/build/types/pdf-viewer/PdfViewerAnnotationLayer.d.ts.map +1 -0
  292. package/build/types/pdf-viewer/PdfViewerSearchBar.d.ts +12 -0
  293. package/build/types/pdf-viewer/PdfViewerSearchBar.d.ts.map +1 -0
  294. package/build/types/pdf-viewer/PdfViewerSidebar.d.ts +10 -0
  295. package/build/types/pdf-viewer/PdfViewerSidebar.d.ts.map +1 -0
  296. package/build/types/pdf-viewer/PdfViewerThumbnail.d.ts +10 -0
  297. package/build/types/pdf-viewer/PdfViewerThumbnail.d.ts.map +1 -0
  298. package/build/types/pdf-viewer/PdfViewerToolbar.d.ts +14 -0
  299. package/build/types/pdf-viewer/PdfViewerToolbar.d.ts.map +1 -0
  300. package/build/types/pdf-viewer/constants.d.ts +17 -0
  301. package/build/types/pdf-viewer/constants.d.ts.map +1 -0
  302. package/build/types/pdf-viewer/hooks/usePdfAnnotationPortals.d.ts +10 -0
  303. package/build/types/pdf-viewer/hooks/usePdfAnnotationPortals.d.ts.map +1 -0
  304. package/build/types/pdf-viewer/hooks/usePdfDocument.d.ts +9 -0
  305. package/build/types/pdf-viewer/hooks/usePdfDocument.d.ts.map +1 -0
  306. package/build/types/pdf-viewer/hooks/usePdfViewer.d.ts +9 -0
  307. package/build/types/pdf-viewer/hooks/usePdfViewer.d.ts.map +1 -0
  308. package/build/types/pdf-viewer/hooks/usePdfViewerSearch.d.ts +15 -0
  309. package/build/types/pdf-viewer/hooks/usePdfViewerSearch.d.ts.map +1 -0
  310. package/build/types/pdf-viewer/hooks/usePdfViewerSync.d.ts +15 -0
  311. package/build/types/pdf-viewer/hooks/usePdfViewerSync.d.ts.map +1 -0
  312. package/build/types/pdf-viewer/types.d.ts +44 -0
  313. package/build/types/pdf-viewer/types.d.ts.map +1 -0
  314. package/build/types/public/experimental.d.ts +4 -1
  315. package/build/types/public/experimental.d.ts.map +1 -1
  316. package/package.json +5 -4
@@ -66,6 +66,7 @@ function getColumnsFromColumnDefinitions(columnDefinitions, objectProperties) {
66
66
  header: renderHeader ?? (columnName || propertyMetadata?.displayName),
67
67
  meta: {
68
68
  columnName: columnName || propertyMetadata?.displayName,
69
+ isAsyncColumn: locator.type === "function",
69
70
  isVisible: col.isVisible !== false,
70
71
  editable,
71
72
  dataType,
@@ -79,7 +80,8 @@ function getColumnsFromColumnDefinitions(columnDefinitions, objectProperties) {
79
80
  maxSize: maxWidth
80
81
  } : {}),
81
82
  enableResizing: resizable,
82
- enableSorting: orderable,
83
+ // Function-backed columns must be sorted on the frontend, so disable sorting for now
84
+ enableSorting: locator.type === "function" ? false : orderable,
83
85
  enableColumnFilter: filterable,
84
86
  cell: cellContext => {
85
87
  const object = cellContext.row.original;
@@ -1 +1 @@
1
- {"version":3,"file":"useColumnDefs.js","names":["useOsdkMetadata","useMemo","renderDefaultCell","useColumnDefs","objectType","columnDefinitions","metadata","loading","error","columns","objectProperties","properties","getColumnsFromColumnDefinitions","getDefaultColumns","map","col","locator","width","minWidth","maxWidth","resizable","orderable","filterable","editable","renderCell","renderHeader","columnName","propertyMetadata","type","id","undefined","colKey","dataType","colDef","accessorKey","header","displayName","meta","isVisible","validateEdit","size","minSize","maxSize","enableResizing","enableSorting","enableColumnFilter","cell","cellContext","object","row","original","Object","entries","key","property"],"sources":["useColumnDefs.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 ObjectMetadata,\n ObjectOrInterfaceDefinition,\n Osdk,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n} from \"@osdk/api\";\nimport { useOsdkMetadata } from \"@osdk/react\";\nimport type { AccessorColumnDef } from \"@tanstack/react-table\";\nimport { useMemo } from \"react\";\nimport { renderDefaultCell } from \"../DefaultCellRenderer.js\";\nimport type { ColumnDefinition } from \"../ObjectTableApi.js\";\n\ninterface UseColumnDefsResult<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n> {\n columns: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >[];\n\n loading: boolean;\n\n error: string | undefined;\n}\n\n/**\n * Hook which builds column definitions for tanstack-table given the objectSet\n */\nexport function useColumnDefs<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n objectType: Q,\n columnDefinitions?: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n): UseColumnDefsResult<Q, RDPs> {\n const { metadata, loading, error } = useOsdkMetadata(objectType);\n\n const columns: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >[] = useMemo(() => {\n const objectProperties = metadata?.properties;\n // If columnDefinitions is provided, construct colDefs with it\n if (columnDefinitions) {\n return getColumnsFromColumnDefinitions<Q, RDPs, FunctionColumns>(\n columnDefinitions,\n objectProperties,\n );\n }\n\n // If not, return the default columns from the object properties\n return getDefaultColumns<Q, RDPs>(objectProperties);\n }, [columnDefinitions, metadata?.properties]);\n\n return { columns, loading, error };\n}\n\nfunction getColumnsFromColumnDefinitions<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n columnDefinitions: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n objectProperties?: Record<any, ObjectMetadata.Property>,\n): Array<\n AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >\n> {\n return columnDefinitions.map((col) => {\n const {\n locator,\n width,\n minWidth,\n maxWidth,\n resizable,\n orderable,\n filterable,\n editable,\n renderCell,\n renderHeader,\n columnName,\n } = col;\n\n const propertyMetadata = locator.type === \"property\"\n ? objectProperties?.[locator.id]\n : undefined;\n\n const colKey = locator.id as string;\n\n const dataType =\n propertyMetadata?.type && typeof propertyMetadata.type === \"string\"\n ? propertyMetadata.type\n : undefined;\n\n const colDef: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n > = {\n id: colKey,\n accessorKey: colKey,\n header: renderHeader ?? (columnName || propertyMetadata?.displayName),\n meta: {\n columnName: columnName || propertyMetadata?.displayName,\n isVisible: col.isVisible !== false,\n editable,\n dataType,\n validateEdit: col.validateEdit,\n },\n size: width,\n ...(minWidth ? { minSize: minWidth } : {}),\n ...(maxWidth ? { maxSize: maxWidth } : {}),\n enableResizing: resizable,\n enableSorting: orderable,\n enableColumnFilter: filterable,\n cell: (cellContext) => {\n const object: Osdk.Instance<\n Q,\n \"$allBaseProperties\",\n PropertyKeys<Q>,\n RDPs\n > = cellContext.row.original;\n\n if (renderCell) {\n return renderCell(object, locator);\n }\n\n return renderDefaultCell(cellContext);\n },\n };\n\n return colDef;\n });\n}\n\nfunction getDefaultColumns<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n>(\n objectProperties?: Record<any, ObjectMetadata.Property>,\n): Array<\n AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >\n> {\n if (!objectProperties) return [];\n\n return Object.entries(objectProperties).map(([key, property]) => {\n const colDef: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n > = {\n accessorKey: key,\n header: property.displayName ?? key,\n };\n return colDef;\n });\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useColumnDefs.js","names":["useOsdkMetadata","useMemo","renderDefaultCell","useColumnDefs","objectType","columnDefinitions","metadata","loading","error","columns","objectProperties","properties","getColumnsFromColumnDefinitions","getDefaultColumns","map","col","locator","width","minWidth","maxWidth","resizable","orderable","filterable","editable","renderCell","renderHeader","columnName","propertyMetadata","type","id","undefined","colKey","dataType","colDef","accessorKey","header","displayName","meta","isAsyncColumn","isVisible","validateEdit","size","minSize","maxSize","enableResizing","enableSorting","enableColumnFilter","cell","cellContext","object","row","original","Object","entries","key","property"],"sources":["useColumnDefs.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 ObjectMetadata,\n ObjectOrInterfaceDefinition,\n Osdk,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n} from \"@osdk/api\";\nimport { useOsdkMetadata } from \"@osdk/react\";\nimport type { AccessorColumnDef } from \"@tanstack/react-table\";\nimport { useMemo } from \"react\";\nimport { renderDefaultCell } from \"../DefaultCellRenderer.js\";\nimport type { ColumnDefinition } from \"../ObjectTableApi.js\";\n\ninterface UseColumnDefsResult<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n> {\n columns: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >[];\n\n loading: boolean;\n\n error: string | undefined;\n}\n\n/**\n * Hook which builds column definitions for tanstack-table given the objectSet\n */\nexport function useColumnDefs<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n objectType: Q,\n columnDefinitions?: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n): UseColumnDefsResult<Q, RDPs> {\n const { metadata, loading, error } = useOsdkMetadata(objectType);\n\n const columns: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >[] = useMemo(() => {\n const objectProperties = metadata?.properties;\n // If columnDefinitions is provided, construct colDefs with it\n if (columnDefinitions) {\n return getColumnsFromColumnDefinitions<Q, RDPs, FunctionColumns>(\n columnDefinitions,\n objectProperties,\n );\n }\n\n // If not, return the default columns from the object properties\n return getDefaultColumns<Q, RDPs>(objectProperties);\n }, [columnDefinitions, metadata?.properties]);\n\n return { columns, loading, error };\n}\n\nfunction getColumnsFromColumnDefinitions<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n columnDefinitions: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n objectProperties?: Record<any, ObjectMetadata.Property>,\n): Array<\n AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >\n> {\n return columnDefinitions.map((col) => {\n const {\n locator,\n width,\n minWidth,\n maxWidth,\n resizable,\n orderable,\n filterable,\n editable,\n renderCell,\n renderHeader,\n columnName,\n } = col;\n\n const propertyMetadata = locator.type === \"property\"\n ? objectProperties?.[locator.id]\n : undefined;\n\n const colKey = locator.id as string;\n\n const dataType =\n propertyMetadata?.type && typeof propertyMetadata.type === \"string\"\n ? propertyMetadata.type\n : undefined;\n\n const colDef: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n > = {\n id: colKey,\n accessorKey: colKey,\n header: renderHeader ?? (columnName || propertyMetadata?.displayName),\n meta: {\n columnName: columnName || propertyMetadata?.displayName,\n isAsyncColumn: locator.type === \"function\",\n isVisible: col.isVisible !== false,\n editable,\n dataType,\n validateEdit: col.validateEdit,\n },\n size: width,\n ...(minWidth ? { minSize: minWidth } : {}),\n ...(maxWidth ? { maxSize: maxWidth } : {}),\n enableResizing: resizable,\n // Function-backed columns must be sorted on the frontend, so disable sorting for now\n enableSorting: locator.type === \"function\" ? false : orderable,\n enableColumnFilter: filterable,\n cell: (cellContext) => {\n const object: Osdk.Instance<\n Q,\n \"$allBaseProperties\",\n PropertyKeys<Q>,\n RDPs\n > = cellContext.row.original;\n\n if (renderCell) {\n return renderCell(object, locator);\n }\n\n return renderDefaultCell(cellContext);\n },\n };\n\n return colDef;\n });\n}\n\nfunction getDefaultColumns<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n>(\n objectProperties?: Record<any, ObjectMetadata.Property>,\n): Array<\n AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n >\n> {\n if (!objectProperties) return [];\n\n return Object.entries(objectProperties).map(([key, property]) => {\n const colDef: AccessorColumnDef<\n Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>\n > = {\n accessorKey: key,\n header: property.displayName ?? key,\n };\n return colDef;\n });\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,270 @@
1
+ /*
2
+ * Copyright 2026 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { useOsdkClient } from "@osdk/react";
18
+ import { useEffect, useMemo, useRef, useState } from "react";
19
+ import { createAsyncCellData } from "../utils/AsyncCellData.js";
20
+ export function useFunctionColumnsData(objectSet, objects, columnDefinitions) {
21
+ const client = useOsdkClient();
22
+ const [data, setData] = useState({});
23
+ const abortControllerRef = useRef(null);
24
+
25
+ // Function column configurations grouped by unique query definition
26
+ const functionColumnConfigs = useMemo(() => getFunctionColumnConfigs(columnDefinitions), [columnDefinitions]);
27
+ const stableObjects = useStableObjects(objects);
28
+
29
+ // eslint-disable-next-line react-hooks/exhaustive-deps
30
+ const stableObjectSet = useMemo(() => objectSet, [JSON.stringify(objectSet)]);
31
+ useEffect(() => {
32
+ if (!stableObjects || stableObjects.length === 0 || functionColumnConfigs.length === 0 || !stableObjectSet) {
33
+ return;
34
+ }
35
+
36
+ // Cancel previous requests
37
+ if (abortControllerRef.current) {
38
+ abortControllerRef.current.abort();
39
+ }
40
+ const abortController = new AbortController();
41
+ abortControllerRef.current = abortController;
42
+ void (async () => {
43
+ if (!stableObjectSet) {
44
+ return;
45
+ }
46
+ initializeFunctionColumnData(functionColumnConfigs, stableObjects, setData);
47
+
48
+ // Process query results as they complete
49
+ for await (const queryResult of executeQueriesGenerator(functionColumnConfigs, stableObjectSet, client, abortController.signal)) {
50
+ if (abortController.signal.aborted) {
51
+ break;
52
+ }
53
+ const {
54
+ config,
55
+ result,
56
+ error,
57
+ aborted
58
+ } = queryResult;
59
+ if (!aborted) {
60
+ processQueryResult(config, result, error, stableObjects, setData);
61
+ }
62
+ }
63
+ })();
64
+ return () => {
65
+ abortController.abort();
66
+ abortControllerRef.current = null;
67
+ };
68
+ }, [functionColumnConfigs, stableObjects, stableObjectSet, client]);
69
+ return data;
70
+ }
71
+ function getFunctionColumnConfigs(columnDefinitions) {
72
+ if (!columnDefinitions) return [];
73
+
74
+ // Group columns by their query definition apiName
75
+ const configsByApiName = new Map();
76
+ columnDefinitions.forEach(colDef => {
77
+ if (colDef.locator.type === "function") {
78
+ const locator = colDef.locator;
79
+ const apiName = locator.queryDefinition.apiName;
80
+ const existingConfig = configsByApiName.get(apiName);
81
+ if (existingConfig) {
82
+ // Add this column to the existing config
83
+ existingConfig.columnIds.push({
84
+ columnId: String(locator.id),
85
+ getValue: locator.getValue,
86
+ getKey: locator.getKey
87
+ });
88
+ } else {
89
+ // Create new config
90
+ configsByApiName.set(apiName, {
91
+ queryDefinition: locator.queryDefinition,
92
+ getParams: locator.getFunctionParams,
93
+ columnIds: [{
94
+ columnId: String(locator.id),
95
+ getValue: locator.getValue,
96
+ getKey: locator.getKey
97
+ }]
98
+ });
99
+ }
100
+ }
101
+ });
102
+ return Array.from(configsByApiName.values());
103
+ }
104
+ const useStableObjects = objects => {
105
+ // eslint-disable-next-line react-hooks/exhaustive-deps
106
+ return useMemo(() => objects, [
107
+ // eslint-disable-next-line react-hooks/exhaustive-deps
108
+ JSON.stringify((objects ?? []).map(item => ({
109
+ $apiName: item.$apiName,
110
+ $primaryKey: item.$primaryKey
111
+ })).sort((a, b) => {
112
+ if (a.$apiName !== b.$apiName) {
113
+ return a.$apiName.localeCompare(b.$apiName);
114
+ }
115
+ return String(a.$primaryKey).localeCompare(String(b.$primaryKey));
116
+ }))]);
117
+ };
118
+
119
+ /**
120
+ * Generator that yields query results as they complete
121
+ */
122
+ async function* executeQueriesGenerator(functionColumnConfigs, objectSet, client, signal) {
123
+ // Start all queries in parallel
124
+ const queryPromises = functionColumnConfigs.map(config => createQueryPromise(config, objectSet, client, signal));
125
+ const pendingPromises = [...queryPromises];
126
+
127
+ // Yield results as they complete using Promise.race
128
+ while (pendingPromises.length > 0) {
129
+ const result = await Promise.race(pendingPromises.map((promise, index) => promise.then(result => ({
130
+ result,
131
+ index
132
+ }))));
133
+ yield result.result;
134
+
135
+ // Remove the completed promise from the pending list
136
+ void pendingPromises.splice(result.index, 1);
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Create a promise that executes a function column query
142
+ */
143
+ function createQueryPromise(config, objectSet, client, signal) {
144
+ return new Promise(resolve => {
145
+ if (signal?.aborted) {
146
+ resolve({
147
+ config,
148
+ result: null,
149
+ error: null,
150
+ aborted: true
151
+ });
152
+ return;
153
+ }
154
+ const params = config.getParams(objectSet);
155
+ client(config.queryDefinition).executeFunction(params).then(result => {
156
+ // Check if aborted during execution
157
+ if (signal?.aborted) {
158
+ resolve({
159
+ config,
160
+ result: null,
161
+ error: null,
162
+ aborted: true
163
+ });
164
+ } else {
165
+ resolve({
166
+ config,
167
+ result,
168
+ error: null
169
+ });
170
+ }
171
+ }).catch(error => {
172
+ // Check if aborted during error handling
173
+ if (signal?.aborted) {
174
+ resolve({
175
+ config,
176
+ result: null,
177
+ error: null,
178
+ aborted: true
179
+ });
180
+ } else {
181
+ resolve({
182
+ config,
183
+ result: null,
184
+ error: error instanceof Error ? error : new Error(String(error))
185
+ });
186
+ }
187
+ });
188
+ });
189
+ }
190
+
191
+ /**
192
+ * Initialize function column data with isLoading state for all columns and objects
193
+ */
194
+ function initializeFunctionColumnData(functionColumnConfigs, objects, setData) {
195
+ setData(prev => {
196
+ const newData = {
197
+ ...prev
198
+ };
199
+ functionColumnConfigs.forEach(config => {
200
+ config.columnIds.forEach(({
201
+ columnId
202
+ }) => {
203
+ // Initialize column if it doesn't exist
204
+ if (!newData[columnId]) {
205
+ newData[columnId] = {};
206
+ }
207
+ objects.forEach(obj => {
208
+ const key = String(obj.$primaryKey);
209
+ // Only set isLoading state if this object's data doesn't already exist
210
+ if (!newData[columnId][key]) {
211
+ newData[columnId][key] = createAsyncCellData({
212
+ isLoading: true
213
+ });
214
+ }
215
+ });
216
+ });
217
+ });
218
+ return newData;
219
+ });
220
+ }
221
+ function processQueryResult(config, result, error, objects, setData) {
222
+ // Batch all updates into a single setState call
223
+ setData(prev => {
224
+ const newData = {
225
+ ...prev
226
+ };
227
+ if (error) {
228
+ // Set error for all objects in all columns that use this query
229
+ config.columnIds.forEach(({
230
+ columnId
231
+ }) => {
232
+ if (!newData[columnId]) {
233
+ newData[columnId] = {};
234
+ }
235
+ objects.forEach(obj => {
236
+ const key = String(obj.$primaryKey);
237
+ newData[columnId][key] = createAsyncCellData({
238
+ error: error instanceof Error ? error : new Error(String(error)),
239
+ isLoading: false
240
+ });
241
+ });
242
+ });
243
+ } else if (result) {
244
+ // Process the FunctionsMap result
245
+ objects.forEach(obj => {
246
+ const key = String(obj.$primaryKey);
247
+
248
+ // Process each column that uses this query result
249
+ config.columnIds.forEach(({
250
+ columnId,
251
+ getValue,
252
+ getKey: columnGetKey
253
+ }) => {
254
+ if (!newData[columnId]) {
255
+ newData[columnId] = {};
256
+ }
257
+ const customKey = columnGetKey(obj);
258
+ const rawData = result[customKey];
259
+ const cellData = getValue ? getValue(rawData) : rawData;
260
+ newData[columnId][key] = createAsyncCellData({
261
+ data: cellData,
262
+ isLoading: false
263
+ });
264
+ });
265
+ });
266
+ }
267
+ return newData;
268
+ });
269
+ }
270
+ //# sourceMappingURL=useFunctionColumnsData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFunctionColumnsData.js","names":["useOsdkClient","useEffect","useMemo","useRef","useState","createAsyncCellData","useFunctionColumnsData","objectSet","objects","columnDefinitions","client","data","setData","abortControllerRef","functionColumnConfigs","getFunctionColumnConfigs","stableObjects","useStableObjects","stableObjectSet","JSON","stringify","length","current","abort","abortController","AbortController","initializeFunctionColumnData","queryResult","executeQueriesGenerator","signal","aborted","config","result","error","processQueryResult","configsByApiName","Map","forEach","colDef","locator","type","apiName","queryDefinition","existingConfig","get","columnIds","push","columnId","String","id","getValue","getKey","set","getParams","getFunctionParams","Array","from","values","map","item","$apiName","$primaryKey","sort","a","b","localeCompare","queryPromises","createQueryPromise","pendingPromises","Promise","race","promise","index","then","splice","resolve","params","executeFunction","catch","Error","prev","newData","obj","key","isLoading","columnGetKey","customKey","rawData","cellData"],"sources":["useFunctionColumnsData.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ObjectOrInterfaceDefinition,\n ObjectSet,\n Osdk,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n} from \"@osdk/api\";\nimport { useOsdkClient } from \"@osdk/react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n ColumnDefinition,\n ExtractQueryParameters,\n FunctionColumnLocator,\n} from \"../ObjectTableApi.js\";\nimport {\n type AsyncCellData,\n createAsyncCellData,\n} from \"../utils/AsyncCellData.js\";\n\nexport interface FunctionColumnData {\n [columnId: string]: {\n [objectPrimaryKey: string]: AsyncCellData;\n };\n}\n\ntype FunctionColumnConfig<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n> = {\n queryDefinition: QueryDefinition<any>;\n getParams: (\n objectSet: ObjectSet<Q>,\n ) => ExtractQueryParameters<FunctionColumns[keyof FunctionColumns]>;\n columnIds: Array<{\n columnId: string;\n getValue?: (cellData: unknown) => unknown;\n getKey: (\n object: Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>,\n ) => string;\n }>;\n};\n\ntype QueryResult<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n> = {\n config: FunctionColumnConfig<Q, RDPs, FunctionColumns>;\n result: Record<string, unknown> | null;\n error: Error | null;\n aborted?: boolean;\n};\n\nexport function useFunctionColumnsData<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n objectSet: ObjectSet<Q, RDPs> | undefined,\n objects:\n | Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[]\n | undefined,\n columnDefinitions?: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n): FunctionColumnData {\n const client = useOsdkClient();\n const [data, setData] = useState<FunctionColumnData>({});\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // Function column configurations grouped by unique query definition\n const functionColumnConfigs = useMemo(\n () => getFunctionColumnConfigs(columnDefinitions),\n [columnDefinitions],\n );\n\n const stableObjects = useStableObjects(objects);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const stableObjectSet = useMemo(() => objectSet, [JSON.stringify(objectSet)]);\n\n useEffect(() => {\n if (\n !stableObjects || stableObjects.length === 0\n || functionColumnConfigs.length === 0 || !stableObjectSet\n ) {\n return;\n }\n\n // Cancel previous requests\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n\n const abortController = new AbortController();\n abortControllerRef.current = abortController;\n\n const executeQueries = async () => {\n if (!stableObjectSet) {\n return;\n }\n\n initializeFunctionColumnData(\n functionColumnConfigs,\n stableObjects,\n setData,\n );\n\n // Process query results as they complete\n for await (\n const queryResult of executeQueriesGenerator(\n functionColumnConfigs,\n stableObjectSet as ObjectSet<Q>,\n client,\n abortController.signal,\n )\n ) {\n if (abortController.signal.aborted) {\n break;\n }\n\n const { config, result, error, aborted } = queryResult;\n if (!aborted) {\n processQueryResult(config, result, error, stableObjects, setData);\n }\n }\n };\n\n void executeQueries();\n\n return () => {\n abortController.abort();\n abortControllerRef.current = null;\n };\n }, [functionColumnConfigs, stableObjects, stableObjectSet, client]);\n\n return data;\n}\n\nfunction getFunctionColumnConfigs<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n columnDefinitions?: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n): Array<FunctionColumnConfig<Q, RDPs, FunctionColumns>> {\n if (!columnDefinitions) return [];\n\n // Group columns by their query definition apiName\n const configsByApiName = new Map<\n string,\n FunctionColumnConfig<Q, RDPs, FunctionColumns>\n >();\n\n columnDefinitions.forEach((colDef) => {\n if (colDef.locator.type === \"function\") {\n const locator = colDef.locator as FunctionColumnLocator<\n Q,\n RDPs,\n FunctionColumns\n >;\n\n const apiName = locator.queryDefinition.apiName;\n const existingConfig = configsByApiName.get(apiName);\n\n if (existingConfig) {\n // Add this column to the existing config\n existingConfig.columnIds.push({\n columnId: String(locator.id),\n getValue: locator.getValue,\n getKey: locator.getKey,\n });\n } else {\n // Create new config\n configsByApiName.set(apiName, {\n queryDefinition: locator.queryDefinition,\n getParams: locator.getFunctionParams,\n columnIds: [{\n columnId: String(locator.id),\n getValue: locator.getValue,\n getKey: locator.getKey,\n }],\n });\n }\n }\n });\n\n return Array.from(configsByApiName.values());\n}\n\nconst useStableObjects = <\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n>(\n objects:\n | Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[]\n | undefined,\n):\n | Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[]\n | undefined =>\n{\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo(() => objects, [\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(\n (objects ?? []).map(item => ({\n $apiName: item.$apiName,\n $primaryKey: item.$primaryKey,\n })).sort((a, b) => {\n if (a.$apiName !== b.$apiName) {\n return a.$apiName.localeCompare(b.$apiName);\n }\n return String(a.$primaryKey).localeCompare(String(b.$primaryKey));\n }),\n ),\n ]);\n};\n\n/**\n * Generator that yields query results as they complete\n */\nasync function* executeQueriesGenerator<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n functionColumnConfigs: Array<FunctionColumnConfig<Q, RDPs, FunctionColumns>>,\n objectSet: ObjectSet<Q>,\n client: ReturnType<typeof useOsdkClient>,\n signal?: AbortSignal,\n): AsyncGenerator<QueryResult<Q, RDPs, FunctionColumns>, void, unknown> {\n // Start all queries in parallel\n const queryPromises = functionColumnConfigs.map(config =>\n createQueryPromise(config, objectSet, client, signal)\n ) as Array<Promise<QueryResult<Q, RDPs, FunctionColumns>>>;\n const pendingPromises = [...queryPromises];\n\n // Yield results as they complete using Promise.race\n while (pendingPromises.length > 0) {\n const result = await Promise.race(\n pendingPromises.map((promise, index) =>\n promise.then(result => ({ result, index }))\n ),\n );\n\n yield result.result;\n\n // Remove the completed promise from the pending list\n void pendingPromises.splice(result.index, 1);\n }\n}\n\n/**\n * Create a promise that executes a function column query\n */\nfunction createQueryPromise<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n config: FunctionColumnConfig<Q, RDPs, FunctionColumns>,\n objectSet: ObjectSet<Q>,\n client: ReturnType<typeof useOsdkClient>,\n signal?: AbortSignal,\n): Promise<QueryResult<Q, RDPs, FunctionColumns>> {\n return new Promise((resolve) => {\n if (signal?.aborted) {\n resolve({ config, result: null, error: null, aborted: true });\n return;\n }\n\n const params = config.getParams(objectSet as ObjectSet<Q>);\n\n client(config.queryDefinition)\n .executeFunction(params)\n .then((result: Record<string, unknown>) => {\n // Check if aborted during execution\n if (signal?.aborted) {\n resolve({ config, result: null, error: null, aborted: true });\n } else {\n resolve({ config, result, error: null });\n }\n })\n .catch((error: unknown) => {\n // Check if aborted during error handling\n if (signal?.aborted) {\n resolve({ config, result: null, error: null, aborted: true });\n } else {\n resolve({\n config,\n result: null,\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n });\n });\n}\n\n/**\n * Initialize function column data with isLoading state for all columns and objects\n */\nfunction initializeFunctionColumnData<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n functionColumnConfigs: Array<FunctionColumnConfig<Q, RDPs, FunctionColumns>>,\n objects: Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[],\n setData: React.Dispatch<React.SetStateAction<FunctionColumnData>>,\n): void {\n setData(prev => {\n const newData = { ...prev };\n\n functionColumnConfigs.forEach(config => {\n config.columnIds.forEach(({ columnId }) => {\n // Initialize column if it doesn't exist\n if (!newData[columnId]) {\n newData[columnId] = {};\n }\n\n objects.forEach(obj => {\n const key = String(obj.$primaryKey);\n // Only set isLoading state if this object's data doesn't already exist\n if (!newData[columnId][key]) {\n newData[columnId][key] = createAsyncCellData({\n isLoading: true,\n });\n }\n });\n });\n });\n\n return newData;\n });\n}\n\nfunction processQueryResult<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n config: FunctionColumnConfig<Q, RDPs, FunctionColumns>,\n result: Record<string, unknown> | null,\n error: Error | null,\n objects: Osdk.Instance<Q, \"$allBaseProperties\", PropertyKeys<Q>, RDPs>[],\n setData: React.Dispatch<React.SetStateAction<FunctionColumnData>>,\n): void {\n // Batch all updates into a single setState call\n setData(prev => {\n const newData = { ...prev };\n\n if (error) {\n // Set error for all objects in all columns that use this query\n config.columnIds.forEach(({ columnId }) => {\n if (!newData[columnId]) {\n newData[columnId] = {};\n }\n\n objects.forEach(obj => {\n const key = String(obj.$primaryKey);\n newData[columnId][key] = createAsyncCellData({\n error: error instanceof Error\n ? error\n : new Error(String(error)),\n isLoading: false,\n });\n });\n });\n } else if (result) {\n // Process the FunctionsMap result\n objects.forEach(obj => {\n const key = String(obj.$primaryKey);\n\n // Process each column that uses this query result\n config.columnIds.forEach(\n ({ columnId, getValue, getKey: columnGetKey }) => {\n if (!newData[columnId]) {\n newData[columnId] = {};\n }\n\n const customKey = columnGetKey(obj);\n const rawData = result[customKey];\n const cellData = getValue ? getValue(rawData) : rawData;\n\n newData[columnId][key] = createAsyncCellData({\n data: cellData,\n isLoading: false,\n });\n },\n );\n });\n }\n\n return newData;\n });\n}\n"],"mappings":"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","ignoreList":[]}
@@ -16,6 +16,7 @@
16
16
 
17
17
  import { useObjectSet, useOsdkObjects } from "@osdk/react/experimental";
18
18
  import { useMemo } from "react";
19
+ import { useFunctionColumnsData } from "./useFunctionColumnsData.js";
19
20
  const PAGE_SIZE = 50;
20
21
  /**
21
22
  * This hook is a wrapper that conditionally uses either useObjectSet or useOsdkObjects
@@ -75,18 +76,38 @@ export function useObjectTableData(objectOrInterfaceType, columnDefinitions, fil
75
76
  enabled: !shouldUseObjectSet
76
77
  });
77
78
 
78
- // Return the appropriate result based on which hook is enabled
79
- if (shouldUseObjectSet) {
80
- // Convert UseObjectSetResult to UseOsdkListResult format
81
- return {
82
- data: objectSetResult.data,
83
- fetchMore: objectSetResult.fetchMore,
84
- isLoading: objectSetResult.isLoading,
85
- error: objectSetResult.error,
86
- totalCount: objectSetResult.totalCount,
87
- isOptimistic: false // ObjectSet doesn't support optimistic updates
88
- };
89
- }
90
- return osdkObjectsResult;
79
+ // Get the result from the appropriate hook
80
+ const baseResult = shouldUseObjectSet ? objectSetResult : osdkObjectsResult;
81
+
82
+ // Call useFunctionColumnsData to get function column data
83
+ const functionColumnData = useFunctionColumnsData(objectSetResult.objectSet, baseResult.data, columnDefinitions);
84
+
85
+ // Merge function column data into each object
86
+ const mergedData = useMemo(() => {
87
+ if (!baseResult.data) return baseResult.data;
88
+ return baseResult.data.map(obj => {
89
+ const objKey = String(obj.$primaryKey);
90
+ const functionData = {};
91
+
92
+ // Collect all function column data for this object
93
+ Object.entries(functionColumnData).forEach(([columnId, columnData]) => {
94
+ if (columnData[objKey]) {
95
+ functionData[columnId] = columnData[objKey];
96
+ }
97
+ });
98
+
99
+ // Return object with function data merged in
100
+ return {
101
+ ...obj,
102
+ ...functionData
103
+ };
104
+ });
105
+ }, [baseResult.data, functionColumnData]);
106
+
107
+ // Return the result with merged data
108
+ return {
109
+ ...baseResult,
110
+ data: mergedData
111
+ };
91
112
  }
92
113
  //# sourceMappingURL=useObjectTableData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useObjectTableData.js","names":["useObjectSet","useOsdkObjects","useMemo","PAGE_SIZE","useObjectTableData","objectOrInterfaceType","columnDefinitions","filter","sorting","objectSet","objectSetOptions","orderBy","length","undefined","reduce","acc","sort","id","desc","withProperties","rdpColumns","map","colDef","locator","colLocator","type","cur","creator","isObjectType","shouldUseObjectSet","objectSetResult","where","pageSize","enabled","osdkObjectsResult","data","fetchMore","isLoading","error","totalCount","isOptimistic"],"sources":["useObjectTableData.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 DerivedProperty,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n WhereClause,\n} from \"@osdk/api\";\nimport type { UseOsdkListResult } from \"@osdk/react/experimental\";\nimport { useObjectSet, useOsdkObjects } from \"@osdk/react/experimental\";\nimport type { SortingState } from \"@tanstack/react-table\";\nimport { useMemo } from \"react\";\nimport type { ColumnDefinition, ObjectSetOptions } from \"../ObjectTableApi.js\";\n\nconst PAGE_SIZE = 50;\n\ntype WithProperties<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n> = {\n [K in keyof RDPs]: DerivedProperty.Creator<Q, RDPs[K]>;\n};\n/**\n * This hook is a wrapper that conditionally uses either useObjectSet or useOsdkObjects\n * based on whether an objectSet prop is provided.\n * It extracts RDP locators from columnDefinitions and applies withProperties\n * to return data containing the derived properties.\n */\nexport function useObjectTableData<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n objectOrInterfaceType: Q,\n columnDefinitions?: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n filter?: WhereClause<Q, RDPs>,\n sorting?: SortingState,\n objectSet?: ObjectSet<Q>,\n objectSetOptions?: ObjectSetOptions<Q>,\n): UseOsdkListResult<Q, RDPs> {\n const orderBy = useMemo(() => {\n if (!sorting || sorting.length === 0) {\n return undefined;\n }\n\n return sorting.reduce<{ [K in PropertyKeys<Q>]?: \"asc\" | \"desc\" }>(\n (acc, sort) => {\n acc[sort.id as PropertyKeys<Q>] = sort.desc ? \"desc\" : \"asc\";\n return acc;\n },\n {},\n );\n }, [sorting]);\n\n // Extract derived properties definition\n const withProperties = useMemo(() => {\n if (!columnDefinitions) {\n return;\n }\n\n const rdpColumns = columnDefinitions.map(colDef => colDef.locator).filter(\n (colLocator) => {\n return colLocator.type === \"rdp\";\n },\n );\n\n if (!rdpColumns.length) {\n return;\n }\n\n return rdpColumns.reduce<WithProperties<Q, RDPs>>(\n (acc, cur) => {\n return {\n ...acc,\n [cur.id]: cur.creator,\n };\n },\n {} as WithProperties<Q, RDPs>,\n );\n }, [columnDefinitions]);\n\n // When objectSet is provided and it's an object type, use useObjectSet. Otherwise, use useOsdkObjects.\n const isObjectType = objectOrInterfaceType.type === \"object\";\n const shouldUseObjectSet = !!objectSet && isObjectType;\n\n // When shouldUseObjectSet is true, we know objectSet is defined\n // and objectOrInterfaceType is an ObjectTypeDefinition\n const objectSetResult = useObjectSet(\n shouldUseObjectSet ? objectSet as ObjectSet<Q> : undefined as any,\n {\n ...(objectSetOptions as ObjectSetOptions<Q>),\n withProperties: withProperties as WithProperties<\n Q,\n RDPs\n >,\n where: filter,\n orderBy,\n pageSize: PAGE_SIZE,\n enabled: shouldUseObjectSet,\n },\n );\n\n const osdkObjectsResult = useOsdkObjects<\n Q,\n RDPs\n >(\n objectOrInterfaceType,\n {\n withProperties,\n pageSize: PAGE_SIZE,\n where: filter,\n orderBy,\n enabled: !shouldUseObjectSet,\n },\n );\n\n // Return the appropriate result based on which hook is enabled\n if (shouldUseObjectSet) {\n // Convert UseObjectSetResult to UseOsdkListResult format\n return {\n data: objectSetResult.data,\n fetchMore: objectSetResult.fetchMore,\n isLoading: objectSetResult.isLoading,\n error: objectSetResult.error,\n totalCount: objectSetResult.totalCount,\n isOptimistic: false, // ObjectSet doesn't support optimistic updates\n } as UseOsdkListResult<Q, RDPs>;\n }\n\n return osdkObjectsResult;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA,SAASA,YAAY,EAAEC,cAAc,QAAQ,0BAA0B;AAEvE,SAASC,OAAO,QAAQ,OAAO;AAG/B,MAAMC,SAAS,GAAG,EAAE;AAWpB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAWhCC,qBAAwB,EACxBC,iBAAqE,EACrEC,MAA6B,EAC7BC,OAAsB,EACtBC,SAAwB,EACxBC,gBAAsC,EACV;EAC5B,MAAMC,OAAO,GAAGT,OAAO,CAAC,MAAM;IAC5B,IAAI,CAACM,OAAO,IAAIA,OAAO,CAACI,MAAM,KAAK,CAAC,EAAE;MACpC,OAAOC,SAAS;IAClB;IAEA,OAAOL,OAAO,CAACM,MAAM,CACnB,CAACC,GAAG,EAAEC,IAAI,KAAK;MACbD,GAAG,CAACC,IAAI,CAACC,EAAE,CAAoB,GAAGD,IAAI,CAACE,IAAI,GAAG,MAAM,GAAG,KAAK;MAC5D,OAAOH,GAAG;IACZ,CAAC,EACD,CAAC,CACH,CAAC;EACH,CAAC,EAAE,CAACP,OAAO,CAAC,CAAC;;EAEb;EACA,MAAMW,cAAc,GAAGjB,OAAO,CAAC,MAAM;IACnC,IAAI,CAACI,iBAAiB,EAAE;MACtB;IACF;IAEA,MAAMc,UAAU,GAAGd,iBAAiB,CAACe,GAAG,CAACC,MAAM,IAAIA,MAAM,CAACC,OAAO,CAAC,CAAChB,MAAM,CACtEiB,UAAU,IAAK;MACd,OAAOA,UAAU,CAACC,IAAI,KAAK,KAAK;IAClC,CACF,CAAC;IAED,IAAI,CAACL,UAAU,CAACR,MAAM,EAAE;MACtB;IACF;IAEA,OAAOQ,UAAU,CAACN,MAAM,CACtB,CAACC,GAAG,EAAEW,GAAG,KAAK;MACZ,OAAO;QACL,GAAGX,GAAG;QACN,CAACW,GAAG,CAACT,EAAE,GAAGS,GAAG,CAACC;MAChB,CAAC;IACH,CAAC,EACD,CAAC,CACH,CAAC;EACH,CAAC,EAAE,CAACrB,iBAAiB,CAAC,CAAC;;EAEvB;EACA,MAAMsB,YAAY,GAAGvB,qBAAqB,CAACoB,IAAI,KAAK,QAAQ;EAC5D,MAAMI,kBAAkB,GAAG,CAAC,CAACpB,SAAS,IAAImB,YAAY;;EAEtD;EACA;EACA,MAAME,eAAe,GAAG9B,YAAY,CAClC6B,kBAAkB,GAAGpB,SAAS,GAAmBI,SAAgB,EACjE;IACE,GAAIH,gBAAwC;IAC5CS,cAAc,EAAEA,cAGf;IACDY,KAAK,EAAExB,MAAM;IACbI,OAAO;IACPqB,QAAQ,EAAE7B,SAAS;IACnB8B,OAAO,EAAEJ;EACX,CACF,CAAC;EAED,MAAMK,iBAAiB,GAAGjC,cAAc,CAItCI,qBAAqB,EACrB;IACEc,cAAc;IACda,QAAQ,EAAE7B,SAAS;IACnB4B,KAAK,EAAExB,MAAM;IACbI,OAAO;IACPsB,OAAO,EAAE,CAACJ;EACZ,CACF,CAAC;;EAED;EACA,IAAIA,kBAAkB,EAAE;IACtB;IACA,OAAO;MACLM,IAAI,EAAEL,eAAe,CAACK,IAAI;MAC1BC,SAAS,EAAEN,eAAe,CAACM,SAAS;MACpCC,SAAS,EAAEP,eAAe,CAACO,SAAS;MACpCC,KAAK,EAAER,eAAe,CAACQ,KAAK;MAC5BC,UAAU,EAAET,eAAe,CAACS,UAAU;MACtCC,YAAY,EAAE,KAAK,CAAE;IACvB,CAAC;EACH;EAEA,OAAON,iBAAiB;AAC1B","ignoreList":[]}
1
+ {"version":3,"file":"useObjectTableData.js","names":["useObjectSet","useOsdkObjects","useMemo","useFunctionColumnsData","PAGE_SIZE","useObjectTableData","objectOrInterfaceType","columnDefinitions","filter","sorting","objectSet","objectSetOptions","orderBy","length","undefined","reduce","acc","sort","id","desc","withProperties","rdpColumns","map","colDef","locator","colLocator","type","cur","creator","isObjectType","shouldUseObjectSet","objectSetResult","where","pageSize","enabled","osdkObjectsResult","baseResult","functionColumnData","data","mergedData","obj","objKey","String","$primaryKey","functionData","Object","entries","forEach","columnId","columnData"],"sources":["useObjectTableData.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 DerivedProperty,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n WhereClause,\n} from \"@osdk/api\";\nimport type { UseOsdkListResult } from \"@osdk/react/experimental\";\nimport { useObjectSet, useOsdkObjects } from \"@osdk/react/experimental\";\nimport type { SortingState } from \"@tanstack/react-table\";\nimport { useMemo } from \"react\";\nimport type { ColumnDefinition, ObjectSetOptions } from \"../ObjectTableApi.js\";\nimport type { AsyncCellData } from \"../utils/AsyncCellData.js\";\nimport { useFunctionColumnsData } from \"./useFunctionColumnsData.js\";\n\nconst PAGE_SIZE = 50;\n\ntype WithProperties<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n> = {\n [K in keyof RDPs]: DerivedProperty.Creator<Q, RDPs[K]>;\n};\n\ninterface UseObjectTableDataResult<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<string, never>,\n> extends Omit<UseOsdkListResult<Q, RDPs>, \"isOptimistic\"> {\n objectSet?: ObjectSet<Q>;\n}\n/**\n * This hook is a wrapper that conditionally uses either useObjectSet or useOsdkObjects\n * based on whether an objectSet prop is provided.\n * It extracts RDP locators from columnDefinitions and applies withProperties\n * to return data containing the derived properties.\n */\nexport function useObjectTableData<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = Record<\n string,\n never\n >,\n FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<\n string,\n never\n >,\n>(\n objectOrInterfaceType: Q,\n columnDefinitions?: Array<ColumnDefinition<Q, RDPs, FunctionColumns>>,\n filter?: WhereClause<Q, RDPs>,\n sorting?: SortingState,\n objectSet?: ObjectSet<Q>,\n objectSetOptions?: ObjectSetOptions<Q>,\n): UseObjectTableDataResult<Q, RDPs> {\n const orderBy = useMemo(() => {\n if (!sorting || sorting.length === 0) {\n return undefined;\n }\n\n return sorting.reduce<{ [K in PropertyKeys<Q>]?: \"asc\" | \"desc\" }>(\n (acc, sort) => {\n acc[sort.id as PropertyKeys<Q>] = sort.desc ? \"desc\" : \"asc\";\n return acc;\n },\n {},\n );\n }, [sorting]);\n\n // Extract derived properties definition\n const withProperties = useMemo(() => {\n if (!columnDefinitions) {\n return;\n }\n\n const rdpColumns = columnDefinitions.map(colDef => colDef.locator).filter(\n (colLocator) => {\n return colLocator.type === \"rdp\";\n },\n );\n\n if (!rdpColumns.length) {\n return;\n }\n\n return rdpColumns.reduce<WithProperties<Q, RDPs>>(\n (acc, cur) => {\n return {\n ...acc,\n [cur.id]: cur.creator,\n };\n },\n {} as WithProperties<Q, RDPs>,\n );\n }, [columnDefinitions]);\n\n // When objectSet is provided and it's an object type, use useObjectSet. Otherwise, use useOsdkObjects.\n const isObjectType = objectOrInterfaceType.type === \"object\";\n const shouldUseObjectSet = !!objectSet && isObjectType;\n\n // When shouldUseObjectSet is true, we know objectSet is defined\n // and objectOrInterfaceType is an ObjectTypeDefinition\n const objectSetResult = useObjectSet(\n shouldUseObjectSet ? objectSet as ObjectSet<Q, RDPs> : undefined as any,\n {\n ...(objectSetOptions as ObjectSetOptions<Q>),\n withProperties: withProperties as WithProperties<\n Q,\n RDPs\n >,\n where: filter,\n orderBy,\n pageSize: PAGE_SIZE,\n enabled: shouldUseObjectSet,\n },\n );\n\n const osdkObjectsResult = useOsdkObjects<\n Q,\n RDPs\n >(\n objectOrInterfaceType,\n {\n withProperties,\n pageSize: PAGE_SIZE,\n where: filter,\n orderBy,\n enabled: !shouldUseObjectSet,\n },\n );\n\n // Get the result from the appropriate hook\n const baseResult = shouldUseObjectSet ? objectSetResult : osdkObjectsResult;\n\n // Call useFunctionColumnsData to get function column data\n const functionColumnData = useFunctionColumnsData<Q, RDPs, FunctionColumns>(\n objectSetResult.objectSet,\n baseResult.data,\n columnDefinitions,\n );\n\n // Merge function column data into each object\n const mergedData = useMemo(() => {\n if (!baseResult.data) return baseResult.data;\n\n return baseResult.data.map(obj => {\n const objKey = String(obj.$primaryKey);\n const functionData: Record<string, AsyncCellData> = {};\n\n // Collect all function column data for this object\n Object.entries(functionColumnData).forEach(([columnId, columnData]) => {\n if (columnData[objKey]) {\n functionData[columnId] = columnData[objKey];\n }\n });\n\n // Return object with function data merged in\n return {\n ...obj,\n ...functionData,\n };\n });\n }, [baseResult.data, functionColumnData]);\n\n // Return the result with merged data\n return {\n ...baseResult,\n data: mergedData,\n } as UseObjectTableDataResult<Q, RDPs>;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,30 @@
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
+ export const isAsyncCellData = value => {
18
+ return value != null && typeof value === "object" && "__asyncCell" in value && value.__asyncCell === true;
19
+ };
20
+ export const createAsyncCellData = ({
21
+ data,
22
+ isLoading,
23
+ error
24
+ }) => ({
25
+ __asyncCell: true,
26
+ data,
27
+ isLoading,
28
+ error
29
+ });
30
+ //# sourceMappingURL=AsyncCellData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AsyncCellData.js","names":["isAsyncCellData","value","__asyncCell","createAsyncCellData","data","isLoading","error"],"sources":["AsyncCellData.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 AsyncCellData {\n readonly __asyncCell: true; // discriminant\n data?: unknown;\n isLoading: boolean;\n error?: unknown;\n}\n\nexport const isAsyncCellData = (value: unknown): value is AsyncCellData => {\n return (\n value != null\n && typeof value === \"object\"\n && \"__asyncCell\" in value\n && value.__asyncCell === true\n );\n};\n\nexport const createAsyncCellData = (\n { data, isLoading, error }: Omit<AsyncCellData, \"__asyncCell\">,\n): AsyncCellData => ({\n __asyncCell: true,\n data,\n isLoading,\n error,\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA,OAAO,MAAMA,eAAe,GAAIC,KAAc,IAA6B;EACzE,OACEA,KAAK,IAAI,IAAI,IACV,OAAOA,KAAK,KAAK,QAAQ,IACzB,aAAa,IAAIA,KAAK,IACtBA,KAAK,CAACC,WAAW,KAAK,IAAI;AAEjC,CAAC;AAED,OAAO,MAAMC,mBAAmB,GAAGA,CACjC;EAAEC,IAAI;EAAEC,SAAS;EAAEC;AAA0C,CAAC,MAC3C;EACnBJ,WAAW,EAAE,IAAI;EACjBE,IAAI;EACJC,SAAS;EACTC;AACF,CAAC,CAAC","ignoreList":[]}
@@ -15,4 +15,5 @@
15
15
  */
16
16
 
17
17
  export const SELECTION_COLUMN_ID = "__selection__";
18
+ export const DEFAULT_COLUMN_WIDTH = 80;
18
19
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["SELECTION_COLUMN_ID"],"sources":["constants.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 const SELECTION_COLUMN_ID = \"__selection__\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMA,mBAAmB,GAAG,eAAe","ignoreList":[]}
1
+ {"version":3,"file":"constants.js","names":["SELECTION_COLUMN_ID","DEFAULT_COLUMN_WIDTH"],"sources":["constants.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 const SELECTION_COLUMN_ID = \"__selection__\";\n\nexport const DEFAULT_COLUMN_WIDTH = 80;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMA,mBAAmB,GAAG,eAAe;AAElD,OAAO,MAAMC,oBAAoB,GAAG,EAAE","ignoreList":[]}
@@ -0,0 +1,88 @@
1
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
+ /*
3
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ import { Error as ErrorIcon, Spin } from "@blueprintjs/icons";
19
+ import classnames from "classnames";
20
+ import React, { useEffect, useState } from "react";
21
+ import { BasePdfViewer } from "./PdfViewer.js";
22
+ import styles from "./PdfViewer.module.css.js";
23
+ async function fetchMediaContents(media) {
24
+ const result = await media.fetchContents();
25
+ return result.arrayBuffer();
26
+ }
27
+ export function PdfRenderer({
28
+ media,
29
+ className,
30
+ ...pdfViewerProps
31
+ }) {
32
+ const [src, setSrc] = useState(undefined);
33
+ const [loading, setLoading] = useState(true);
34
+ const [error, setError] = useState(undefined);
35
+
36
+ // This is required until we either support React 19+ or a data fetching hook
37
+ useEffect(function () {
38
+ let cancelled = false;
39
+ setLoading(true);
40
+ setError(undefined);
41
+ setSrc(undefined);
42
+ fetchMediaContents(media).then(buffer => {
43
+ if (!cancelled) {
44
+ setSrc(buffer);
45
+ setLoading(false);
46
+ }
47
+ }).catch(err => {
48
+ if (!cancelled) {
49
+ setError(err instanceof Error ? err : new Error(String(err)));
50
+ setLoading(false);
51
+ }
52
+ });
53
+ return () => {
54
+ cancelled = true;
55
+ };
56
+ }, [media]);
57
+ const rootClassName = classnames(styles.pdfViewer, className);
58
+ if (loading) {
59
+ return /*#__PURE__*/React.createElement("div", {
60
+ className: rootClassName
61
+ }, /*#__PURE__*/React.createElement("div", {
62
+ className: styles.loadingContainer
63
+ }, /*#__PURE__*/React.createElement(Spin, {
64
+ className: styles.spinnerIcon
65
+ }), "Loading\u2026"));
66
+ }
67
+ if (error != null) {
68
+ return /*#__PURE__*/React.createElement("div", {
69
+ className: rootClassName
70
+ }, /*#__PURE__*/React.createElement("div", {
71
+ className: styles.errorContainer
72
+ }, /*#__PURE__*/React.createElement(ErrorIcon, {
73
+ className: styles.errorIcon
74
+ }), "Failed to load PDF: ", error.message));
75
+ }
76
+ if (src == null) {
77
+ return /*#__PURE__*/React.createElement("div", {
78
+ className: rootClassName
79
+ }, /*#__PURE__*/React.createElement("div", {
80
+ className: styles.loadingContainer
81
+ }, "No document"));
82
+ }
83
+ return /*#__PURE__*/React.createElement(BasePdfViewer, _extends({
84
+ src: src,
85
+ className: className
86
+ }, pdfViewerProps));
87
+ }
88
+ //# sourceMappingURL=PdfRenderer.js.map