@osdk/react-components 0.2.0-beta.1 → 0.2.0-beta.3

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 (330) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +21 -5
  3. package/build/browser/base-components/action-button/ActionButton.js +31 -0
  4. package/build/browser/base-components/action-button/ActionButton.js.map +1 -0
  5. package/build/browser/base-components/action-button/ActionButton.module.css +70 -0
  6. package/build/browser/base-components/action-button/ActionButton.module.css.js +8 -0
  7. package/build/browser/base-components/checkbox/Checkbox.js +27 -32
  8. package/build/browser/base-components/checkbox/Checkbox.module.css +79 -0
  9. package/build/browser/base-components/checkbox/Checkbox.module.css.js +7 -0
  10. package/build/browser/base-components/combobox/Combobox.js +124 -0
  11. package/build/browser/base-components/combobox/Combobox.js.map +1 -0
  12. package/build/browser/base-components/combobox/Combobox.module.css +177 -0
  13. package/build/browser/base-components/combobox/Combobox.module.css.js +16 -0
  14. package/build/browser/base-components/dialog/Dialog.js +52 -0
  15. package/build/browser/base-components/dialog/Dialog.js.map +1 -0
  16. package/build/browser/base-components/dialog/Dialog.module.css +101 -0
  17. package/build/browser/base-components/dialog/Dialog.module.css.js +13 -0
  18. package/build/browser/base-components/draggable-list/DraggableList.js +155 -0
  19. package/build/browser/base-components/draggable-list/DraggableList.js.map +1 -0
  20. package/build/browser/base-components/draggable-list/DraggableList.module.css +108 -0
  21. package/build/browser/base-components/draggable-list/DraggableList.module.css.js +11 -0
  22. package/build/browser/base-components/search-bar/SearchBar.js +44 -0
  23. package/build/browser/base-components/search-bar/SearchBar.js.map +1 -0
  24. package/build/browser/base-components/search-bar/SearchBar.module.css +53 -0
  25. package/build/browser/base-components/search-bar/SearchBar.module.css.js +8 -0
  26. package/build/browser/base-components/select/Select.js +89 -0
  27. package/build/browser/base-components/select/Select.js.map +1 -0
  28. package/build/browser/base-components/select/Select.module.css +138 -0
  29. package/build/browser/base-components/select/Select.module.css.js +11 -0
  30. package/build/browser/base-components/switch/Switch.js +33 -0
  31. package/build/browser/base-components/switch/Switch.js.map +1 -0
  32. package/build/browser/base-components/switch/Switch.module.css +91 -0
  33. package/build/browser/base-components/switch/Switch.module.css.js +7 -0
  34. package/build/browser/filter-list/FilterListApi.js.map +1 -1
  35. package/build/browser/filter-list/FilterListItemApi.js.map +1 -1
  36. package/build/browser/filter-list/__tests__/filterStateToWhereClause.test.js +296 -0
  37. package/build/browser/filter-list/__tests__/filterStateToWhereClause.test.js.map +1 -0
  38. package/build/browser/filter-list/__tests__/getFilterKey.test.js +53 -0
  39. package/build/browser/filter-list/__tests__/getFilterKey.test.js.map +1 -0
  40. package/build/browser/filter-list/__tests__/testUtils.js +192 -0
  41. package/build/browser/filter-list/__tests__/testUtils.js.map +1 -0
  42. package/build/browser/filter-list/hooks/__tests__/useFilterListState.test.js +128 -0
  43. package/build/browser/filter-list/hooks/__tests__/useFilterListState.test.js.map +1 -0
  44. package/build/browser/filter-list/hooks/useDebouncedValue.js +52 -0
  45. package/build/browser/filter-list/hooks/useDebouncedValue.js.map +1 -0
  46. package/build/browser/filter-list/hooks/useFilterListState.js +119 -0
  47. package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -0
  48. package/build/browser/filter-list/hooks/usePropertyAggregation.js +92 -0
  49. package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -0
  50. package/build/browser/filter-list/types/AddFilterMenuTypes.js +2 -0
  51. package/build/browser/filter-list/types/AddFilterMenuTypes.js.map +1 -0
  52. package/build/browser/filter-list/types/CustomRendererTypes.js +2 -0
  53. package/build/browser/filter-list/types/CustomRendererTypes.js.map +1 -0
  54. package/build/browser/filter-list/types/KeywordSearchTypes.js +2 -0
  55. package/build/browser/filter-list/types/KeywordSearchTypes.js.map +1 -0
  56. package/build/browser/filter-list/types/LinkedFilterTypes.js +2 -0
  57. package/build/browser/filter-list/types/LinkedFilterTypes.js.map +1 -0
  58. package/build/browser/filter-list/types/index.js +21 -0
  59. package/build/browser/filter-list/types/index.js.map +1 -0
  60. package/build/browser/filter-list/utils/assertUnreachable.js +25 -0
  61. package/build/browser/filter-list/utils/assertUnreachable.js.map +1 -0
  62. package/build/browser/filter-list/utils/coerceFilterValue.js +33 -0
  63. package/build/browser/filter-list/utils/coerceFilterValue.js.map +1 -0
  64. package/build/browser/filter-list/utils/filterStateToWhereClause.js +337 -0
  65. package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -0
  66. package/build/browser/filter-list/utils/filterValues.js +55 -0
  67. package/build/browser/filter-list/utils/filterValues.js.map +1 -0
  68. package/build/browser/filter-list/utils/getFilterKey.js +34 -0
  69. package/build/browser/filter-list/utils/getFilterKey.js.map +1 -0
  70. package/build/browser/object-table/CellContextMenu.js +23 -20
  71. package/build/browser/object-table/CellContextMenu.module.css +20 -0
  72. package/build/browser/object-table/CellContextMenu.module.css.js +6 -0
  73. package/build/browser/object-table/ColumnConfigDialog.js +259 -0
  74. package/build/browser/object-table/ColumnConfigDialog.js.map +1 -0
  75. package/build/browser/object-table/ColumnConfigDialog.module.css +247 -0
  76. package/build/browser/object-table/ColumnConfigDialog.module.css.js +29 -0
  77. package/build/browser/object-table/LoadingCell.js +24 -29
  78. package/build/browser/object-table/LoadingCell.module.css +48 -0
  79. package/build/browser/object-table/LoadingCell.module.css.js +8 -0
  80. package/build/browser/object-table/LoadingRow.js +24 -50
  81. package/build/browser/object-table/LoadingStateTable.js +49 -343
  82. package/build/browser/object-table/LoadingStateTable.js.map +1 -1
  83. package/build/browser/object-table/MultiColumnSortDialog.js +178 -0
  84. package/build/browser/object-table/MultiColumnSortDialog.js.map +1 -0
  85. package/build/browser/object-table/MultiColumnSortDialog.module.css +195 -0
  86. package/build/browser/object-table/MultiColumnSortDialog.module.css.js +22 -0
  87. package/build/browser/object-table/NonIdealState.js +23 -20
  88. package/build/browser/object-table/NonIdealState.module.css +27 -0
  89. package/build/browser/object-table/NonIdealState.module.css.js +7 -0
  90. package/build/browser/object-table/ObjectTable.js +43 -13
  91. package/build/browser/object-table/ObjectTable.js.map +1 -1
  92. package/build/browser/object-table/ObjectTableApi.js.map +1 -1
  93. package/build/browser/object-table/SortableItemsList.js +35 -0
  94. package/build/browser/object-table/SortableItemsList.js.map +1 -0
  95. package/build/browser/object-table/Table.js +54 -934
  96. package/build/browser/object-table/Table.js.map +1 -1
  97. package/build/browser/object-table/Table.module.css +29 -0
  98. package/build/browser/object-table/Table.module.css.js +6 -0
  99. package/build/browser/object-table/TableBody.js +36 -260
  100. package/build/browser/object-table/TableBody.module.css +20 -0
  101. package/build/browser/object-table/TableBody.module.css.js +6 -0
  102. package/build/browser/object-table/TableCell.js +31 -111
  103. package/build/browser/object-table/TableCell.module.css +73 -0
  104. package/build/browser/object-table/TableCell.module.css.js +8 -0
  105. package/build/browser/object-table/TableHeader.js +126 -216
  106. package/build/browser/object-table/TableHeader.js.map +1 -1
  107. package/build/browser/object-table/TableHeader.module.css +106 -0
  108. package/build/browser/object-table/TableHeader.module.css.js +10 -0
  109. package/build/browser/object-table/TableHeaderContent.js +21 -18
  110. package/build/browser/object-table/TableHeaderContent.module.css +30 -0
  111. package/build/browser/object-table/TableHeaderContent.module.css.js +6 -0
  112. package/build/browser/object-table/TableHeaderWithPopover.js +110 -93
  113. package/build/browser/object-table/TableHeaderWithPopover.js.map +1 -1
  114. package/build/browser/object-table/TableHeaderWithPopover.module.css +141 -0
  115. package/build/browser/object-table/TableHeaderWithPopover.module.css.js +17 -0
  116. package/build/browser/object-table/TableRow.js +26 -144
  117. package/build/browser/object-table/TableRow.module.css +60 -0
  118. package/build/browser/object-table/TableRow.module.css.js +6 -0
  119. package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js +160 -138
  120. package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js.map +1 -1
  121. package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js +3 -0
  122. package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js.map +1 -1
  123. package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js +27 -82
  124. package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -1
  125. package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js +290 -0
  126. package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js.map +1 -1
  127. package/build/browser/object-table/hooks/useColumnDefs.js +7 -2
  128. package/build/browser/object-table/hooks/useColumnDefs.js.map +1 -1
  129. package/build/browser/object-table/hooks/useColumnResize.js +45 -0
  130. package/build/browser/object-table/hooks/useColumnResize.js.map +1 -0
  131. package/build/browser/object-table/hooks/useColumnVisibility.js +52 -20
  132. package/build/browser/object-table/hooks/useColumnVisibility.js.map +1 -1
  133. package/build/browser/object-table/hooks/useRowSelection.js +8 -7
  134. package/build/browser/object-table/hooks/useRowSelection.js.map +1 -1
  135. package/build/browser/object-table/hooks/useSelectionColumn.js +15 -6
  136. package/build/browser/object-table/hooks/useSelectionColumn.js.map +1 -1
  137. package/build/browser/object-table/utils/types.js +2 -0
  138. package/build/browser/object-table/utils/types.js.map +1 -0
  139. package/build/browser/public/experimental.js +1 -0
  140. package/build/browser/public/experimental.js.map +1 -1
  141. package/build/browser/styles.css +1875 -0
  142. package/build/cjs/public/experimental.cjs +1036 -197
  143. package/build/cjs/public/experimental.cjs.map +1 -1
  144. package/build/cjs/public/experimental.css +659 -29
  145. package/build/cjs/public/experimental.css.map +1 -1
  146. package/build/cjs/public/experimental.d.cts +435 -44
  147. package/build/esm/base-components/action-button/ActionButton.js +31 -0
  148. package/build/esm/base-components/action-button/ActionButton.js.map +1 -0
  149. package/build/esm/base-components/action-button/ActionButton.module.css +70 -0
  150. package/build/esm/base-components/checkbox/Checkbox.module.css +1 -1
  151. package/build/esm/base-components/combobox/Combobox.js +124 -0
  152. package/build/esm/base-components/combobox/Combobox.js.map +1 -0
  153. package/build/esm/base-components/combobox/Combobox.module.css +177 -0
  154. package/build/esm/base-components/dialog/Dialog.js +52 -0
  155. package/build/esm/base-components/dialog/Dialog.js.map +1 -0
  156. package/build/esm/base-components/dialog/Dialog.module.css +101 -0
  157. package/build/esm/base-components/draggable-list/DraggableList.js +155 -0
  158. package/build/esm/base-components/draggable-list/DraggableList.js.map +1 -0
  159. package/build/esm/base-components/draggable-list/DraggableList.module.css +108 -0
  160. package/build/esm/base-components/search-bar/SearchBar.js +44 -0
  161. package/build/esm/base-components/search-bar/SearchBar.js.map +1 -0
  162. package/build/esm/base-components/search-bar/SearchBar.module.css +53 -0
  163. package/build/esm/base-components/select/Select.js +89 -0
  164. package/build/esm/base-components/select/Select.js.map +1 -0
  165. package/build/esm/base-components/select/Select.module.css +138 -0
  166. package/build/esm/base-components/switch/Switch.js +33 -0
  167. package/build/esm/base-components/switch/Switch.js.map +1 -0
  168. package/build/esm/base-components/switch/Switch.module.css +91 -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/__tests__/filterStateToWhereClause.test.js +296 -0
  172. package/build/esm/filter-list/__tests__/filterStateToWhereClause.test.js.map +1 -0
  173. package/build/esm/filter-list/__tests__/getFilterKey.test.js +53 -0
  174. package/build/esm/filter-list/__tests__/getFilterKey.test.js.map +1 -0
  175. package/build/esm/filter-list/__tests__/testUtils.js +192 -0
  176. package/build/esm/filter-list/__tests__/testUtils.js.map +1 -0
  177. package/build/esm/filter-list/hooks/__tests__/useFilterListState.test.js +128 -0
  178. package/build/esm/filter-list/hooks/__tests__/useFilterListState.test.js.map +1 -0
  179. package/build/esm/filter-list/hooks/useDebouncedValue.js +52 -0
  180. package/build/esm/filter-list/hooks/useDebouncedValue.js.map +1 -0
  181. package/build/esm/filter-list/hooks/useFilterListState.js +119 -0
  182. package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -0
  183. package/build/esm/filter-list/hooks/usePropertyAggregation.js +92 -0
  184. package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -0
  185. package/build/esm/filter-list/types/AddFilterMenuTypes.js +2 -0
  186. package/build/esm/filter-list/types/AddFilterMenuTypes.js.map +1 -0
  187. package/build/esm/filter-list/types/CustomRendererTypes.js +2 -0
  188. package/build/esm/filter-list/types/CustomRendererTypes.js.map +1 -0
  189. package/build/esm/filter-list/types/KeywordSearchTypes.js +2 -0
  190. package/build/esm/filter-list/types/KeywordSearchTypes.js.map +1 -0
  191. package/build/esm/filter-list/types/LinkedFilterTypes.js +2 -0
  192. package/build/esm/filter-list/types/LinkedFilterTypes.js.map +1 -0
  193. package/build/esm/filter-list/types/index.js +21 -0
  194. package/build/esm/filter-list/types/index.js.map +1 -0
  195. package/build/esm/filter-list/utils/assertUnreachable.js +25 -0
  196. package/build/esm/filter-list/utils/assertUnreachable.js.map +1 -0
  197. package/build/esm/filter-list/utils/coerceFilterValue.js +33 -0
  198. package/build/esm/filter-list/utils/coerceFilterValue.js.map +1 -0
  199. package/build/esm/filter-list/utils/filterStateToWhereClause.js +337 -0
  200. package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -0
  201. package/build/esm/filter-list/utils/filterValues.js +55 -0
  202. package/build/esm/filter-list/utils/filterValues.js.map +1 -0
  203. package/build/esm/filter-list/utils/getFilterKey.js +34 -0
  204. package/build/esm/filter-list/utils/getFilterKey.js.map +1 -0
  205. package/build/esm/object-table/ColumnConfigDialog.js +259 -0
  206. package/build/esm/object-table/ColumnConfigDialog.js.map +1 -0
  207. package/build/esm/object-table/ColumnConfigDialog.module.css +247 -0
  208. package/build/esm/object-table/LoadingStateTable.js +4 -4
  209. package/build/esm/object-table/LoadingStateTable.js.map +1 -1
  210. package/build/esm/object-table/MultiColumnSortDialog.js +178 -0
  211. package/build/esm/object-table/MultiColumnSortDialog.js.map +1 -0
  212. package/build/esm/object-table/MultiColumnSortDialog.module.css +195 -0
  213. package/build/esm/object-table/NonIdealState.module.css +2 -3
  214. package/build/esm/object-table/ObjectTable.js +43 -13
  215. package/build/esm/object-table/ObjectTable.js.map +1 -1
  216. package/build/esm/object-table/ObjectTableApi.js.map +1 -1
  217. package/build/esm/object-table/SortableItemsList.js +35 -0
  218. package/build/esm/object-table/SortableItemsList.js.map +1 -0
  219. package/build/esm/object-table/Table.js +9 -7
  220. package/build/esm/object-table/Table.js.map +1 -1
  221. package/build/esm/object-table/Table.module.css +9 -2
  222. package/build/esm/object-table/TableCell.module.css +11 -0
  223. package/build/esm/object-table/TableHeader.js +93 -6
  224. package/build/esm/object-table/TableHeader.js.map +1 -1
  225. package/build/esm/object-table/TableHeader.module.css +7 -2
  226. package/build/esm/object-table/TableHeaderWithPopover.js +53 -22
  227. package/build/esm/object-table/TableHeaderWithPopover.js.map +1 -1
  228. package/build/esm/object-table/TableHeaderWithPopover.module.css +54 -23
  229. package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js +160 -138
  230. package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js.map +1 -1
  231. package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js +3 -0
  232. package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js.map +1 -1
  233. package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js +27 -82
  234. package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -1
  235. package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js +290 -0
  236. package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js.map +1 -1
  237. package/build/esm/object-table/hooks/useColumnDefs.js +7 -2
  238. package/build/esm/object-table/hooks/useColumnDefs.js.map +1 -1
  239. package/build/esm/object-table/hooks/useColumnResize.js +45 -0
  240. package/build/esm/object-table/hooks/useColumnResize.js.map +1 -0
  241. package/build/esm/object-table/hooks/useColumnVisibility.js +52 -20
  242. package/build/esm/object-table/hooks/useColumnVisibility.js.map +1 -1
  243. package/build/esm/object-table/hooks/useRowSelection.js +8 -7
  244. package/build/esm/object-table/hooks/useRowSelection.js.map +1 -1
  245. package/build/esm/object-table/hooks/useSelectionColumn.js +15 -6
  246. package/build/esm/object-table/hooks/useSelectionColumn.js.map +1 -1
  247. package/build/esm/object-table/utils/types.js +2 -0
  248. package/build/esm/object-table/utils/types.js.map +1 -0
  249. package/build/esm/public/experimental.js +1 -0
  250. package/build/esm/public/experimental.js.map +1 -1
  251. package/build/types/base-components/action-button/ActionButton.d.ts +5 -0
  252. package/build/types/base-components/action-button/ActionButton.d.ts.map +1 -0
  253. package/build/types/base-components/combobox/Combobox.d.ts +52 -0
  254. package/build/types/base-components/combobox/Combobox.d.ts.map +1 -0
  255. package/build/types/base-components/dialog/Dialog.d.ts +10 -0
  256. package/build/types/base-components/dialog/Dialog.d.ts.map +1 -0
  257. package/build/types/base-components/draggable-list/DraggableList.d.ts +17 -0
  258. package/build/types/base-components/draggable-list/DraggableList.d.ts.map +1 -0
  259. package/build/types/base-components/search-bar/SearchBar.d.ts +11 -0
  260. package/build/types/base-components/search-bar/SearchBar.d.ts.map +1 -0
  261. package/build/types/base-components/select/Select.d.ts +34 -0
  262. package/build/types/base-components/select/Select.d.ts.map +1 -0
  263. package/build/types/base-components/switch/Switch.d.ts +10 -0
  264. package/build/types/base-components/switch/Switch.d.ts.map +1 -0
  265. package/build/types/filter-list/FilterListApi.d.ts +63 -12
  266. package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
  267. package/build/types/filter-list/FilterListItemApi.d.ts +101 -53
  268. package/build/types/filter-list/FilterListItemApi.d.ts.map +1 -1
  269. package/build/types/filter-list/__tests__/filterStateToWhereClause.test.d.ts +1 -0
  270. package/build/types/filter-list/__tests__/filterStateToWhereClause.test.d.ts.map +1 -0
  271. package/build/types/filter-list/__tests__/getFilterKey.test.d.ts +1 -0
  272. package/build/types/filter-list/__tests__/getFilterKey.test.d.ts.map +1 -0
  273. package/build/types/filter-list/__tests__/testUtils.d.ts +59 -0
  274. package/build/types/filter-list/__tests__/testUtils.d.ts.map +1 -0
  275. package/build/types/filter-list/hooks/__tests__/useFilterListState.test.d.ts +1 -0
  276. package/build/types/filter-list/hooks/__tests__/useFilterListState.test.d.ts.map +1 -0
  277. package/build/types/filter-list/hooks/useDebouncedValue.d.ts +11 -0
  278. package/build/types/filter-list/hooks/useDebouncedValue.d.ts.map +1 -0
  279. package/build/types/filter-list/hooks/useFilterListState.d.ts +11 -0
  280. package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -0
  281. package/build/types/filter-list/hooks/usePropertyAggregation.d.ts +20 -0
  282. package/build/types/filter-list/hooks/usePropertyAggregation.d.ts.map +1 -0
  283. package/build/types/filter-list/types/AddFilterMenuTypes.d.ts +61 -0
  284. package/build/types/filter-list/types/AddFilterMenuTypes.d.ts.map +1 -0
  285. package/build/types/filter-list/types/CustomRendererTypes.d.ts +76 -0
  286. package/build/types/filter-list/types/CustomRendererTypes.d.ts.map +1 -0
  287. package/build/types/filter-list/types/KeywordSearchTypes.d.ts +56 -0
  288. package/build/types/filter-list/types/KeywordSearchTypes.d.ts.map +1 -0
  289. package/build/types/filter-list/types/LinkedFilterTypes.d.ts +70 -0
  290. package/build/types/filter-list/types/LinkedFilterTypes.d.ts.map +1 -0
  291. package/build/types/filter-list/types/index.d.ts +4 -0
  292. package/build/types/filter-list/types/index.d.ts.map +1 -0
  293. package/build/types/filter-list/utils/assertUnreachable.d.ts +6 -0
  294. package/build/types/filter-list/utils/assertUnreachable.d.ts.map +1 -0
  295. package/build/types/filter-list/utils/coerceFilterValue.d.ts +11 -0
  296. package/build/types/filter-list/utils/coerceFilterValue.d.ts.map +1 -0
  297. package/build/types/filter-list/utils/filterStateToWhereClause.d.ts +16 -0
  298. package/build/types/filter-list/utils/filterStateToWhereClause.d.ts.map +1 -0
  299. package/build/types/filter-list/utils/filterValues.d.ts +5 -0
  300. package/build/types/filter-list/utils/filterValues.d.ts.map +1 -0
  301. package/build/types/filter-list/utils/getFilterKey.d.ts +3 -0
  302. package/build/types/filter-list/utils/getFilterKey.d.ts.map +1 -0
  303. package/build/types/object-table/ColumnConfigDialog.d.ts +18 -0
  304. package/build/types/object-table/ColumnConfigDialog.d.ts.map +1 -0
  305. package/build/types/object-table/LoadingStateTable.d.ts.map +1 -1
  306. package/build/types/object-table/MultiColumnSortDialog.d.ts +15 -0
  307. package/build/types/object-table/MultiColumnSortDialog.d.ts.map +1 -0
  308. package/build/types/object-table/ObjectTable.d.ts +1 -1
  309. package/build/types/object-table/ObjectTable.d.ts.map +1 -1
  310. package/build/types/object-table/ObjectTableApi.d.ts +41 -6
  311. package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
  312. package/build/types/object-table/SortableItemsList.d.ts +13 -0
  313. package/build/types/object-table/SortableItemsList.d.ts.map +1 -0
  314. package/build/types/object-table/Table.d.ts +12 -1
  315. package/build/types/object-table/Table.d.ts.map +1 -1
  316. package/build/types/object-table/TableHeader.d.ts +3 -1
  317. package/build/types/object-table/TableHeader.d.ts.map +1 -1
  318. package/build/types/object-table/TableHeaderWithPopover.d.ts +30 -6
  319. package/build/types/object-table/TableHeaderWithPopover.d.ts.map +1 -1
  320. package/build/types/object-table/hooks/useColumnResize.d.ts +10 -0
  321. package/build/types/object-table/hooks/useColumnResize.d.ts.map +1 -0
  322. package/build/types/object-table/hooks/useColumnVisibility.d.ts +18 -7
  323. package/build/types/object-table/hooks/useColumnVisibility.d.ts.map +1 -1
  324. package/build/types/object-table/hooks/useRowSelection.d.ts +5 -4
  325. package/build/types/object-table/hooks/useRowSelection.d.ts.map +1 -1
  326. package/build/types/object-table/utils/types.d.ts +5 -0
  327. package/build/types/object-table/utils/types.d.ts.map +1 -0
  328. package/build/types/public/experimental.d.ts +2 -0
  329. package/build/types/public/experimental.d.ts.map +1 -1
  330. package/package.json +16 -8
@@ -1,20 +1,27 @@
1
1
  'use strict';
2
2
 
3
3
  var reactTable = require('@tanstack/react-table');
4
- var React7 = require('react');
4
+ var React10 = require('react');
5
5
  var react = require('@osdk/react');
6
6
  var experimental = require('@osdk/react/experimental');
7
7
  var checkbox = require('@base-ui/react/checkbox');
8
8
  var icons = require('@blueprintjs/icons');
9
- var classNames2 = require('classnames');
9
+ var classNames7 = require('classnames');
10
+ var button = require('@base-ui/react/button');
11
+ var collapsible = require('@base-ui/react/collapsible');
12
+ var sortable = require('@dnd-kit/sortable');
13
+ var dialog = require('@base-ui/react/dialog');
14
+ var core = require('@dnd-kit/core');
15
+ var utilities = require('@dnd-kit/utilities');
16
+ var input = require('@base-ui/react/input');
10
17
  var menu = require('@base-ui/react/menu');
11
18
  var reactVirtual = require('@tanstack/react-virtual');
12
19
  var reactDom = require('react-dom');
13
20
 
14
21
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
15
22
 
16
- var React7__default = /*#__PURE__*/_interopDefault(React7);
17
- var classNames2__default = /*#__PURE__*/_interopDefault(classNames2);
23
+ var React10__default = /*#__PURE__*/_interopDefault(React10);
24
+ var classNames7__default = /*#__PURE__*/_interopDefault(classNames7);
18
25
 
19
26
  // src/object-table/ObjectTable.tsx
20
27
  function useColumnDefs(objectType, columnDefinitions) {
@@ -23,7 +30,7 @@ function useColumnDefs(objectType, columnDefinitions) {
23
30
  loading,
24
31
  error
25
32
  } = react.useOsdkMetadata(objectType);
26
- const columns = React7.useMemo(() => {
33
+ const columns = React10.useMemo(() => {
27
34
  const objectProperties = metadata?.properties;
28
35
  if (columnDefinitions) {
29
36
  return getColumnsFromColumnDefinitions(columnDefinitions, objectProperties);
@@ -47,14 +54,19 @@ function getColumnsFromColumnDefinitions(columnDefinitions, objectProperties) {
47
54
  orderable,
48
55
  filterable,
49
56
  renderCell,
50
- renderHeader
57
+ renderHeader,
58
+ columnName
51
59
  } = col;
52
60
  const propertyMetadata = locator.type === "property" ? objectProperties?.[locator.id] : void 0;
53
61
  const colKey = locator.id;
54
62
  const colDef = {
55
63
  id: colKey,
56
64
  accessorKey: colKey,
57
- header: renderHeader ?? propertyMetadata?.displayName,
65
+ header: renderHeader ?? (columnName || propertyMetadata?.displayName),
66
+ meta: {
67
+ columnName: columnName || propertyMetadata?.displayName,
68
+ isVisible: col.isVisible !== false
69
+ },
58
70
  size: width,
59
71
  ...minWidth ? {
60
72
  minSize: minWidth
@@ -93,11 +105,11 @@ var useColumnPinning = ({
93
105
  hasSelectionColumn,
94
106
  onColumnsPinnedChanged
95
107
  }) => {
96
- const [columnPinning, setColumnPinning] = React7.useState({
108
+ const [columnPinning, setColumnPinning] = React10.useState({
97
109
  left: [],
98
110
  right: []
99
111
  });
100
- React7.useEffect(() => {
112
+ React10.useEffect(() => {
101
113
  const defaultState = getColumnPinningStateFromColumnDefs(columnDefinitions);
102
114
  const selectionCol = hasSelectionColumn ? [SELECTION_COLUMN_ID] : [];
103
115
  setColumnPinning({
@@ -105,7 +117,7 @@ var useColumnPinning = ({
105
117
  right: [...defaultState.right ?? []]
106
118
  });
107
119
  }, [columnDefinitions, hasSelectionColumn]);
108
- const onColumnPinningChange = React7.useCallback((updater) => {
120
+ const onColumnPinningChange = React10.useCallback((updater) => {
109
121
  setColumnPinning((prev) => {
110
122
  const newPinning = typeof updater === "function" ? updater(prev) : updater;
111
123
  if (onColumnsPinnedChanged) {
@@ -159,32 +171,89 @@ function convertColumnPinningStateToArray(pinningState) {
159
171
  pinned: "right"
160
172
  }))];
161
173
  }
162
- var useColumnVisibility = ({
163
- columnDefinitions
174
+ var useColumnResize = ({
175
+ onColumnResize
164
176
  }) => {
165
- const columnVisibility = React7.useMemo(() => {
166
- if (columnDefinitions) {
167
- const colVisibility = columnDefinitions.reduce((acc, colDef) => {
168
- if (colDef.isVisible !== void 0) {
169
- const {
170
- locator
171
- } = colDef;
172
- const colKey = locator.id;
173
- return {
174
- ...acc,
175
- [colKey]: colDef.isVisible
176
- };
177
+ const [columnSizing, setColumnSizing] = React10.useState({});
178
+ const onColumnSizingChange = React10.useCallback((updater) => {
179
+ setColumnSizing((prev) => {
180
+ const newState = typeof updater === "function" ? updater(prev) : updater;
181
+ if (onColumnResize) {
182
+ for (const columnId of Object.keys(newState)) {
183
+ if (newState[columnId] !== prev[columnId]) {
184
+ onColumnResize(columnId, newState[columnId]);
185
+ }
186
+ }
187
+ for (const columnId of Object.keys(prev)) {
188
+ if (!(columnId in newState)) {
189
+ onColumnResize(columnId, null);
190
+ }
177
191
  }
178
- return acc;
179
- }, {});
180
- return colVisibility;
192
+ }
193
+ return newState;
194
+ });
195
+ }, [onColumnResize]);
196
+ return {
197
+ columnSizing,
198
+ onColumnSizingChange
199
+ };
200
+ };
201
+ var useColumnVisibility = ({
202
+ allColumns,
203
+ onColumnVisibilityChanged
204
+ }) => {
205
+ const [columnVisibility, setColumnVisibility] = React10.useState(() => getColumnVisibilityState(allColumns));
206
+ const [columnOrder, setColumnOrder] = React10.useState(() => getColumnOrder(allColumns));
207
+ React10.useEffect(() => {
208
+ setColumnVisibility(getColumnVisibilityState(allColumns));
209
+ }, [allColumns]);
210
+ React10.useEffect(() => {
211
+ setColumnOrder(getColumnOrder(allColumns));
212
+ }, [allColumns]);
213
+ const onColumnVisibilityChange = React10.useCallback((updaterOrValue) => {
214
+ setColumnVisibility((prev) => {
215
+ const newState = typeof updaterOrValue === "function" ? updaterOrValue(prev) : updaterOrValue;
216
+ if (onColumnVisibilityChanged) {
217
+ const changes = Object.entries(newState).map(([columnId, isVisible]) => ({
218
+ columnId,
219
+ isVisible
220
+ }));
221
+ onColumnVisibilityChanged(changes);
222
+ }
223
+ return newState;
224
+ });
225
+ }, [onColumnVisibilityChanged]);
226
+ const onColumnOrderChange = React10.useCallback((updaterOrValue) => {
227
+ setColumnOrder((prev) => {
228
+ const newState = typeof updaterOrValue === "function" ? updaterOrValue(prev) : updaterOrValue;
229
+ return newState;
230
+ });
231
+ }, []);
232
+ return {
233
+ columnVisibility,
234
+ onColumnVisibilityChange,
235
+ columnOrder,
236
+ onColumnOrderChange
237
+ };
238
+ };
239
+ var getColumnVisibilityState = (allColumns) => {
240
+ return allColumns.reduce((acc, col) => {
241
+ const colId = col.id ?? col.accessorKey;
242
+ if (colId) {
243
+ return {
244
+ ...acc,
245
+ [colId]: col.meta?.isVisible !== false
246
+ };
181
247
  }
182
- }, [columnDefinitions]);
183
- return columnVisibility;
248
+ return acc;
249
+ }, {});
250
+ };
251
+ var getColumnOrder = (allColumns) => {
252
+ return allColumns.map((col) => col.id ?? col.accessorKey).filter((id) => id != null);
184
253
  };
185
254
  var PAGE_SIZE = 50;
186
255
  function useObjectTableData(objectOrInterfaceType, columnDefinitions, filter, sorting) {
187
- const orderBy = React7.useMemo(() => {
256
+ const orderBy = React10.useMemo(() => {
188
257
  if (!sorting || sorting.length === 0) {
189
258
  return void 0;
190
259
  }
@@ -193,7 +262,7 @@ function useObjectTableData(objectOrInterfaceType, columnDefinitions, filter, so
193
262
  return acc;
194
263
  }, {});
195
264
  }, [sorting]);
196
- const withProperties = React7.useMemo(() => {
265
+ const withProperties = React10.useMemo(() => {
197
266
  if (!columnDefinitions) {
198
267
  return;
199
268
  }
@@ -231,31 +300,31 @@ function useRowSelection({
231
300
  onRowSelection,
232
301
  data
233
302
  }) {
234
- const [internalRowSelection, setInternalRowSelection] = React7.useState({});
235
- const [lastSelectedRowIndex, setLastSelectedRowIndex] = React7.useState(null);
303
+ const [internalRowSelection, setInternalRowSelection] = React10.useState({});
304
+ const [lastSelectedRowIndex, setLastSelectedRowIndex] = React10.useState(null);
236
305
  const isControlled = selectedRows !== void 0;
237
- const isSelectionEnabled = selectionMode !== "none";
238
- const rowSelectionState = React7.useMemo(() => {
239
- if (!isSelectionEnabled) return {};
306
+ const enableRowSelection = selectionMode !== "none";
307
+ const rowSelectionState = React10.useMemo(() => {
308
+ if (!enableRowSelection) return {};
240
309
  if (isControlled && selectedRows) {
241
310
  return getRowSelectionState(selectedRows);
242
311
  }
243
312
  return internalRowSelection;
244
- }, [isSelectionEnabled, isControlled, selectedRows, internalRowSelection]);
313
+ }, [enableRowSelection, isControlled, selectedRows, internalRowSelection]);
245
314
  const selectedCount = Object.values(rowSelectionState).filter(Boolean).length;
246
315
  const totalCount = data?.length ?? 0;
247
316
  const isAllSelected = totalCount > 0 && selectedCount === totalCount;
248
317
  const hasSelection = selectedCount > 0;
249
- const onToggleAll = React7.useCallback(() => {
250
- if (!isSelectionEnabled || !data) return;
318
+ const onToggleAll = React10.useCallback(() => {
319
+ if (!enableRowSelection || !data) return;
251
320
  const newSelectedRows = isAllSelected ? [] : data.map((item) => item.$primaryKey);
252
321
  if (!isControlled) {
253
322
  setInternalRowSelection(getRowSelectionState(newSelectedRows));
254
323
  }
255
324
  onRowSelection?.(newSelectedRows);
256
- }, [isSelectionEnabled, data, isAllSelected, isControlled, onRowSelection]);
257
- const onToggleRow = React7.useCallback((rowId, rowIndex, isShiftClick = false) => {
258
- if (!isSelectionEnabled || !data) return;
325
+ }, [enableRowSelection, data, isAllSelected, isControlled, onRowSelection]);
326
+ const onToggleRow = React10.useCallback((rowId, rowIndex, isShiftClick = false) => {
327
+ if (!enableRowSelection || !data) return;
259
328
  let newSelectedRows = [];
260
329
  if (selectionMode === "single") {
261
330
  newSelectedRows = getSingleSelectionRows({
@@ -286,10 +355,11 @@ function useRowSelection({
286
355
  setInternalRowSelection(getRowSelectionState(newSelectedRows));
287
356
  }
288
357
  onRowSelection?.(newSelectedRows);
289
- }, [isSelectionEnabled, data, selectionMode, lastSelectedRowIndex, isControlled, rowSelectionState, onRowSelection]);
358
+ }, [enableRowSelection, data, selectionMode, lastSelectedRowIndex, isControlled, rowSelectionState, onRowSelection]);
290
359
  return {
291
360
  rowSelection: rowSelectionState,
292
361
  isAllSelected,
362
+ enableRowSelection,
293
363
  hasSelection,
294
364
  onToggleAll,
295
365
  onToggleRow
@@ -376,14 +446,14 @@ function Checkbox({
376
446
  indicatorProps,
377
447
  ...rest
378
448
  }) {
379
- return /* @__PURE__ */ React7__default.default.createElement(checkbox.Checkbox.Root, _extends({
380
- className: classNames2__default.default(Checkbox_default.osdkCheckboxRoot, className),
449
+ return /* @__PURE__ */ React10__default.default.createElement(checkbox.Checkbox.Root, _extends({
450
+ className: classNames7__default.default(Checkbox_default.osdkCheckboxRoot, className),
381
451
  indeterminate
382
- }, rest), /* @__PURE__ */ React7__default.default.createElement(checkbox.Checkbox.Indicator, _extends({}, indicatorProps, {
383
- className: classNames2__default.default(Checkbox_default.osdkCheckboxIndicator, indicatorProps?.className)
384
- }), indeterminate ? /* @__PURE__ */ React7__default.default.createElement(icons.Minus, {
452
+ }, rest), /* @__PURE__ */ React10__default.default.createElement(checkbox.Checkbox.Indicator, _extends({}, indicatorProps, {
453
+ className: classNames7__default.default(Checkbox_default.osdkCheckboxIndicator, indicatorProps?.className)
454
+ }), indeterminate ? /* @__PURE__ */ React10__default.default.createElement(icons.Minus, {
385
455
  color: "currentColor"
386
- }) : /* @__PURE__ */ React7__default.default.createElement(icons.Tick, {
456
+ }) : /* @__PURE__ */ React10__default.default.createElement(icons.Tick, {
387
457
  color: "currentColor"
388
458
  })));
389
459
  }
@@ -394,7 +464,7 @@ function SelectionHeaderCell({
394
464
  hasSelection,
395
465
  onToggleAll
396
466
  }) {
397
- return /* @__PURE__ */ React7__default.default.createElement(Checkbox, {
467
+ return /* @__PURE__ */ React10__default.default.createElement(Checkbox, {
398
468
  indeterminate: hasSelection && !isAllSelected,
399
469
  checked: isAllSelected,
400
470
  onCheckedChange: onToggleAll,
@@ -405,11 +475,11 @@ function SelectionCell({
405
475
  row,
406
476
  onToggleRow
407
477
  }) {
408
- const handleClick = React7.useCallback((event) => {
478
+ const handleClick = React10.useCallback((event) => {
409
479
  const isShiftClick = event.shiftKey;
410
480
  onToggleRow(row.id, row.index, isShiftClick);
411
481
  }, [row, onToggleRow]);
412
- return /* @__PURE__ */ React7__default.default.createElement(Checkbox, {
482
+ return /* @__PURE__ */ React10__default.default.createElement(Checkbox, {
413
483
  checked: row.getIsSelected(),
414
484
  onClick: handleClick,
415
485
  "aria-label": `Select row ${row.index + 1}`
@@ -424,20 +494,28 @@ var useSelectionColumn = ({
424
494
  onToggleAll,
425
495
  onToggleRow
426
496
  }) => {
427
- const selectionColumn = React7.useMemo(() => {
497
+ const isAllSelectedRef = React10.useRef(isAllSelected);
498
+ isAllSelectedRef.current = isAllSelected;
499
+ const hasSelectionRef = React10.useRef(hasSelection);
500
+ hasSelectionRef.current = hasSelection;
501
+ const onToggleAllRef = React10.useRef(onToggleAll);
502
+ onToggleAllRef.current = onToggleAll;
503
+ const onToggleRowRef = React10.useRef(onToggleRow);
504
+ onToggleRowRef.current = onToggleRow;
505
+ const selectionColumn = React10.useMemo(() => {
428
506
  if (selectionMode === "none") return null;
429
507
  const colDef = {
430
508
  id: SELECTION_COLUMN_ID,
431
- header: () => selectionMode === "multiple" ? /* @__PURE__ */ React7__default.default.createElement(SelectionHeaderCell, {
432
- isAllSelected,
433
- hasSelection,
434
- onToggleAll
509
+ header: () => selectionMode === "multiple" ? /* @__PURE__ */ React10__default.default.createElement(SelectionHeaderCell, {
510
+ isAllSelected: isAllSelectedRef.current,
511
+ hasSelection: hasSelectionRef.current,
512
+ onToggleAll: onToggleAllRef.current
435
513
  }) : null,
436
514
  cell: ({
437
515
  row
438
- }) => /* @__PURE__ */ React7__default.default.createElement(SelectionCell, {
516
+ }) => /* @__PURE__ */ React10__default.default.createElement(SelectionCell, {
439
517
  row,
440
- onToggleRow
518
+ onToggleRow: onToggleRowRef.current
441
519
  }),
442
520
  size: 50,
443
521
  minSize: 50,
@@ -447,7 +525,7 @@ var useSelectionColumn = ({
447
525
  enablePinning: false
448
526
  };
449
527
  return colDef;
450
- }, [selectionMode, isAllSelected, hasSelection, onToggleAll, onToggleRow]);
528
+ }, [selectionMode]);
451
529
  return selectionColumn;
452
530
  };
453
531
  var useTableSorting = ({
@@ -455,10 +533,10 @@ var useTableSorting = ({
455
533
  defaultOrderBy,
456
534
  onOrderByChanged
457
535
  }) => {
458
- const [internalSorting, setInternalSorting] = React7.useState(() => defaultOrderBy ? convertOrderByToSortingState(defaultOrderBy) : []);
536
+ const [internalSorting, setInternalSorting] = React10.useState(() => defaultOrderBy ? convertOrderByToSortingState(defaultOrderBy) : []);
459
537
  const isControlled = orderBy !== void 0;
460
- const sortingState = React7.useMemo(() => orderBy ? convertOrderByToSortingState(orderBy) : internalSorting, [orderBy, internalSorting]);
461
- const onSortingChange = React7.useCallback((updater) => {
538
+ const sortingState = React10.useMemo(() => orderBy ? convertOrderByToSortingState(orderBy) : internalSorting, [orderBy, internalSorting]);
539
+ const onSortingChange = React10.useCallback((updater) => {
462
540
  const newSorting = typeof updater === "function" ? updater(sortingState) : updater;
463
541
  if (!isControlled) {
464
542
  setInternalSorting(newSorting);
@@ -502,13 +580,13 @@ var TableCell_default = {};
502
580
  function LoadingCell({
503
581
  width
504
582
  }) {
505
- return /* @__PURE__ */ React7__default.default.createElement("td", {
583
+ return /* @__PURE__ */ React10__default.default.createElement("td", {
506
584
  className: TableCell_default.osdkTableCell,
507
585
  style: {
508
586
  width
509
587
  }
510
- }, /* @__PURE__ */ React7__default.default.createElement("div", {
511
- className: classNames2__default.default(LoadingCell_default.osdkLoadingCell, LoadingCell_default.osdkCellSkeleton)
588
+ }, /* @__PURE__ */ React10__default.default.createElement("div", {
589
+ className: classNames7__default.default(LoadingCell_default.osdkLoadingCell, LoadingCell_default.osdkCellSkeleton)
512
590
  }));
513
591
  }
514
592
 
@@ -523,17 +601,17 @@ function LoadingRow({
523
601
  rowHeight = 40,
524
602
  columnWidth = 80
525
603
  }) {
526
- return /* @__PURE__ */ React7__default.default.createElement("tr", {
604
+ return /* @__PURE__ */ React10__default.default.createElement("tr", {
527
605
  className: TableRow_default.osdkTableRow,
528
606
  style: {
529
607
  height: `${rowHeight}px`,
530
608
  transform: `translateY(${translateY}px)`
531
609
  }
532
- }, /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, Array.from({
610
+ }, /* @__PURE__ */ React10__default.default.createElement(React10__default.default.Fragment, null, Array.from({
533
611
  length: columnCount
534
612
  }).map((_, index) => {
535
613
  const width = headers.length > index ? headers[index].getSize() : columnWidth;
536
- return /* @__PURE__ */ React7__default.default.createElement(LoadingCell, {
614
+ return /* @__PURE__ */ React10__default.default.createElement(LoadingCell, {
537
615
  key: `loading-cell-${index}`,
538
616
  width
539
617
  });
@@ -543,6 +621,620 @@ function LoadingRow({
543
621
  // src/object-table/TableBody.module.css
544
622
  var TableBody_default = {};
545
623
 
624
+ // src/base-components/action-button/ActionButton.module.css
625
+ var ActionButton_default = {};
626
+
627
+ // src/base-components/action-button/ActionButton.tsx
628
+ function _extends2() {
629
+ return _extends2 = Object.assign ? Object.assign.bind() : function(n) {
630
+ for (var e = 1; e < arguments.length; e++) {
631
+ var t = arguments[e];
632
+ for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
633
+ }
634
+ return n;
635
+ }, _extends2.apply(null, arguments);
636
+ }
637
+ function ActionButton({
638
+ variant = "secondary",
639
+ className,
640
+ ...rest
641
+ }) {
642
+ return /* @__PURE__ */ React10__default.default.createElement(button.Button, _extends2({
643
+ className: classNames7__default.default(ActionButton_default.button, variant === "primary" ? ActionButton_default.primaryButton : ActionButton_default.secondaryButton, className)
644
+ }, rest));
645
+ }
646
+
647
+ // src/base-components/dialog/Dialog.module.css
648
+ var Dialog_default = {};
649
+
650
+ // src/base-components/dialog/Dialog.tsx
651
+ function Dialog({
652
+ isOpen,
653
+ onOpenChange,
654
+ title,
655
+ children,
656
+ footer,
657
+ className
658
+ }) {
659
+ return /* @__PURE__ */ React10__default.default.createElement(dialog.Dialog.Root, {
660
+ open: isOpen,
661
+ onOpenChange
662
+ }, /* @__PURE__ */ React10__default.default.createElement(dialog.Dialog.Portal, null, /* @__PURE__ */ React10__default.default.createElement(dialog.Dialog.Backdrop, {
663
+ className: Dialog_default.backdrop
664
+ }), /* @__PURE__ */ React10__default.default.createElement(dialog.Dialog.Popup, {
665
+ className: classNames7__default.default(Dialog_default.popup, className)
666
+ }, /* @__PURE__ */ React10__default.default.createElement("div", {
667
+ className: Dialog_default.header
668
+ }, /* @__PURE__ */ React10__default.default.createElement(dialog.Dialog.Title, {
669
+ className: Dialog_default.title
670
+ }, title), /* @__PURE__ */ React10__default.default.createElement(dialog.Dialog.Close, {
671
+ className: Dialog_default.closeButton,
672
+ "aria-label": "Close dialog"
673
+ }, /* @__PURE__ */ React10__default.default.createElement(icons.Cross, {
674
+ className: Dialog_default.closeIcon
675
+ }))), /* @__PURE__ */ React10__default.default.createElement("div", {
676
+ className: Dialog_default.body
677
+ }, children), footer != null && /* @__PURE__ */ React10__default.default.createElement("div", {
678
+ className: Dialog_default.footer
679
+ }, footer))));
680
+ }
681
+
682
+ // src/base-components/draggable-list/DraggableList.module.css
683
+ var DraggableList_default = {};
684
+
685
+ // src/base-components/draggable-list/DraggableList.tsx
686
+ function _extends3() {
687
+ return _extends3 = Object.assign ? Object.assign.bind() : function(n) {
688
+ for (var e = 1; e < arguments.length; e++) {
689
+ var t = arguments[e];
690
+ for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
691
+ }
692
+ return n;
693
+ }, _extends3.apply(null, arguments);
694
+ }
695
+ function DraggableListItem({
696
+ item,
697
+ onRemove,
698
+ removeIconVariant = "trash",
699
+ renderContent
700
+ }) {
701
+ const {
702
+ attributes,
703
+ listeners,
704
+ setNodeRef,
705
+ transform,
706
+ transition,
707
+ isDragging
708
+ } = sortable.useSortable({
709
+ id: item.id
710
+ });
711
+ const style = {
712
+ transform: utilities.CSS.Transform.toString(transform),
713
+ transition
714
+ };
715
+ const handleRemove = React10.useCallback(() => {
716
+ onRemove?.(item.id);
717
+ }, [item.id, onRemove]);
718
+ const RemoveIcon = removeIconVariant === "trash" ? icons.Trash : icons.SmallCross;
719
+ return /* @__PURE__ */ React10__default.default.createElement("div", {
720
+ ref: setNodeRef,
721
+ style,
722
+ className: DraggableList_default.draggableItem,
723
+ "data-dragging": isDragging
724
+ }, /* @__PURE__ */ React10__default.default.createElement("div", _extends3({
725
+ className: DraggableList_default.dragHandle,
726
+ "aria-label": `Reorder ${item.label}`
727
+ }, attributes, listeners), /* @__PURE__ */ React10__default.default.createElement(icons.DragHandleVertical, {
728
+ className: DraggableList_default.icon
729
+ })), /* @__PURE__ */ React10__default.default.createElement("div", {
730
+ className: DraggableList_default.itemContent
731
+ }, renderContent ? renderContent(item) : item.label), onRemove && /* @__PURE__ */ React10__default.default.createElement(button.Button, {
732
+ className: DraggableList_default.removeButton,
733
+ onClick: handleRemove,
734
+ "aria-label": `Remove ${item.label}`
735
+ }, /* @__PURE__ */ React10__default.default.createElement(RemoveIcon, {
736
+ className: DraggableList_default.icon
737
+ })));
738
+ }
739
+ function DraggableList({
740
+ items,
741
+ onReorder,
742
+ onRemove,
743
+ removeIconVariant = "cross",
744
+ renderContent,
745
+ emptyMessage,
746
+ className
747
+ }) {
748
+ const itemIds = React10.useMemo(() => items.map((item) => item.id), [items]);
749
+ const sensors = core.useSensors(core.useSensor(core.PointerSensor, {
750
+ activationConstraint: {
751
+ distance: 5
752
+ }
753
+ }), core.useSensor(core.KeyboardSensor, {
754
+ coordinateGetter: sortable.sortableKeyboardCoordinates
755
+ }));
756
+ const handleDragEnd = React10.useCallback((event) => {
757
+ const {
758
+ active,
759
+ over
760
+ } = event;
761
+ if (over && active.id !== over.id) {
762
+ const oldIndex = items.findIndex((item) => item.id === active.id);
763
+ const newIndex = items.findIndex((item) => item.id === over.id);
764
+ onReorder(oldIndex, newIndex);
765
+ }
766
+ }, [items, onReorder]);
767
+ const containerRef = React10.useRef(null);
768
+ useKeyboardEvents(containerRef);
769
+ const DndContext = core.DndContext;
770
+ return /* @__PURE__ */ React10__default.default.createElement("div", {
771
+ ref: containerRef,
772
+ className: classNames7__default.default(DraggableList_default.draggableListContainer, className)
773
+ }, /* @__PURE__ */ React10__default.default.createElement(DndContext, {
774
+ sensors,
775
+ collisionDetection: core.closestCenter,
776
+ onDragEnd: handleDragEnd
777
+ }, /* @__PURE__ */ React10__default.default.createElement(sortable.SortableContext, {
778
+ items: itemIds,
779
+ strategy: sortable.verticalListSortingStrategy
780
+ }, items.map((item) => /* @__PURE__ */ React10__default.default.createElement(DraggableListItem, {
781
+ key: item.id,
782
+ item,
783
+ onRemove,
784
+ removeIconVariant,
785
+ renderContent
786
+ })))), items.length === 0 && emptyMessage && /* @__PURE__ */ React10__default.default.createElement("div", {
787
+ className: DraggableList_default.emptyState
788
+ }, emptyMessage));
789
+ }
790
+ var useKeyboardEvents = (containerRef) => {
791
+ React10.useEffect(() => {
792
+ const el = containerRef.current;
793
+ if (el == null) {
794
+ return;
795
+ }
796
+ const ARROW_KEYS = /* @__PURE__ */ new Set(["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"]);
797
+ function handleCapture(event) {
798
+ if (!ARROW_KEYS.has(event.key)) {
799
+ return;
800
+ }
801
+ if (el.querySelector('[data-dragging="true"]') == null) {
802
+ return;
803
+ }
804
+ event.stopPropagation();
805
+ document.dispatchEvent(new KeyboardEvent("keydown", {
806
+ key: event.key,
807
+ code: event.code,
808
+ bubbles: true
809
+ }));
810
+ }
811
+ el.addEventListener("keydown", handleCapture, true);
812
+ return () => el.removeEventListener("keydown", handleCapture, true);
813
+ }, [containerRef]);
814
+ };
815
+
816
+ // src/base-components/search-bar/SearchBar.module.css
817
+ var SearchBar_default = {};
818
+
819
+ // src/base-components/search-bar/SearchBar.tsx
820
+ function SearchBar({
821
+ value,
822
+ onChange,
823
+ placeholder = "Search",
824
+ "aria-label": ariaLabel,
825
+ className,
826
+ onKeyDown
827
+ }) {
828
+ return /* @__PURE__ */ React10__default.default.createElement("div", {
829
+ className: classNames7__default.default(SearchBar_default.searchBar, className)
830
+ }, /* @__PURE__ */ React10__default.default.createElement(icons.Search, {
831
+ className: SearchBar_default.searchIcon
832
+ }), /* @__PURE__ */ React10__default.default.createElement(input.Input, {
833
+ type: "text",
834
+ placeholder,
835
+ "aria-label": ariaLabel ?? placeholder,
836
+ value,
837
+ onChange,
838
+ className: SearchBar_default.searchInput,
839
+ onKeyDown
840
+ }));
841
+ }
842
+
843
+ // src/object-table/ColumnConfigDialog.module.css
844
+ var ColumnConfigDialog_default = {};
845
+
846
+ // src/object-table/ColumnConfigDialog.tsx
847
+ function ColumnConfigDialog({
848
+ isOpen,
849
+ onClose,
850
+ columnOptions,
851
+ currentVisibility,
852
+ currentColumnOrder,
853
+ onApply,
854
+ isValidConfig
855
+ }) {
856
+ const [visibleColumns, setVisibleColumns] = React10.useState([]);
857
+ const [searchQuery, setSearchQuery] = React10.useState("");
858
+ const allColumns = React10.useMemo(() => {
859
+ return columnOptions.map((opt) => {
860
+ const isVisible = currentVisibility ? currentVisibility[opt.id] : false;
861
+ return {
862
+ id: opt.id,
863
+ label: opt.name,
864
+ isVisible
865
+ };
866
+ });
867
+ }, [columnOptions, currentVisibility]);
868
+ React10.useEffect(() => {
869
+ if (isOpen) {
870
+ const visibleCols = allColumns.filter((col) => col.isVisible);
871
+ if (!!currentColumnOrder?.length) {
872
+ visibleCols.sort((a, b) => {
873
+ const indexA = currentColumnOrder.indexOf(a.id);
874
+ const indexB = currentColumnOrder.indexOf(b.id);
875
+ const orderA = indexA === -1 ? Infinity : indexA;
876
+ const orderB = indexB === -1 ? Infinity : indexB;
877
+ return orderA - orderB;
878
+ });
879
+ }
880
+ setVisibleColumns(visibleCols);
881
+ setSearchQuery("");
882
+ }
883
+ }, [isOpen, allColumns, currentColumnOrder]);
884
+ const handleApply = React10.useCallback(() => {
885
+ onApply(getColumnConfig(allColumns, visibleColumns));
886
+ onClose();
887
+ }, [allColumns, visibleColumns, onApply, onClose]);
888
+ const isValid = isValidConfig ? isValidConfig(getColumnConfig(allColumns, visibleColumns)) : true;
889
+ const isApplyDisabled = visibleColumns.length === 0 || !isValid;
890
+ const handleReorderColumns = React10.useCallback((fromIndex, toIndex) => {
891
+ setVisibleColumns((items) => sortable.arrayMove(items, fromIndex, toIndex));
892
+ }, []);
893
+ const handleRemoveColumn = React10.useCallback((columnId) => {
894
+ setVisibleColumns((prev) => prev.filter((col) => col.id !== columnId));
895
+ }, []);
896
+ const handleToggleColumn = React10.useCallback((column) => {
897
+ setVisibleColumns((prev) => {
898
+ const isCurrentlyVisible = prev.some((col) => col.id === column.id);
899
+ if (isCurrentlyVisible) {
900
+ return prev.filter((col) => col.id !== column.id);
901
+ } else {
902
+ return [...prev, column];
903
+ }
904
+ });
905
+ }, []);
906
+ const handleSearchChange = React10.useCallback((event) => {
907
+ setSearchQuery(event.target.value);
908
+ }, []);
909
+ const handleSelectAll = React10.useCallback((columns) => {
910
+ setVisibleColumns((prev) => {
911
+ const allSelected = columns.every((col) => prev.some((v) => v.id === col.id));
912
+ if (allSelected) {
913
+ return prev.filter((v) => !columns.some((col) => col.id === v.id));
914
+ } else {
915
+ const newColumns = columns.filter((col) => !prev.some((v) => v.id === col.id));
916
+ return [...prev, ...newColumns];
917
+ }
918
+ });
919
+ }, []);
920
+ const filteredAvailableColumns = React10.useMemo(() => {
921
+ const query = searchQuery.toLowerCase().trim();
922
+ if (!query) {
923
+ return allColumns;
924
+ }
925
+ return allColumns.filter((col) => (col.label?.toLowerCase().includes(query) ?? false) || col.id.toLowerCase().includes(query));
926
+ }, [allColumns, searchQuery]);
927
+ const footer = React10.useMemo(() => /* @__PURE__ */ React10__default.default.createElement(React10__default.default.Fragment, null, /* @__PURE__ */ React10__default.default.createElement(ActionButton, {
928
+ onClick: onClose
929
+ }, "Cancel"), /* @__PURE__ */ React10__default.default.createElement(ActionButton, {
930
+ variant: "primary",
931
+ onClick: handleApply,
932
+ disabled: isApplyDisabled
933
+ }, "Apply")), [onClose, handleApply, isApplyDisabled]);
934
+ return /* @__PURE__ */ React10__default.default.createElement(Dialog, {
935
+ isOpen,
936
+ onOpenChange: onClose,
937
+ title: DialogTitle,
938
+ footer,
939
+ className: ColumnConfigDialog_default.columnConfigDialog
940
+ }, /* @__PURE__ */ React10__default.default.createElement("div", {
941
+ className: ColumnConfigDialog_default.dialogLayout
942
+ }, /* @__PURE__ */ React10__default.default.createElement(VisibleColumnsList, {
943
+ columns: visibleColumns,
944
+ onReorder: handleReorderColumns,
945
+ onRemove: handleRemoveColumn
946
+ }), /* @__PURE__ */ React10__default.default.createElement(AvailableColumnsList, {
947
+ visibleColumns,
948
+ searchQuery,
949
+ onSearchChange: handleSearchChange,
950
+ onToggleColumn: handleToggleColumn,
951
+ onSelectAll: handleSelectAll,
952
+ filteredColumns: filteredAvailableColumns
953
+ })));
954
+ }
955
+ var DialogTitle = /* @__PURE__ */ React10__default.default.createElement("div", {
956
+ className: ColumnConfigDialog_default.title
957
+ }, /* @__PURE__ */ React10__default.default.createElement(icons.Cog, null), "Configure Table Columns");
958
+ var getColumnConfig = (allColumns, visibleColumns) => {
959
+ const hiddenColumns = allColumns.filter((col) => !visibleColumns.some((v) => v.id === col.id));
960
+ return [...visibleColumns.map((col) => ({
961
+ columnId: col.id,
962
+ isVisible: true
963
+ })), ...hiddenColumns.map((col) => ({
964
+ columnId: col.id,
965
+ isVisible: false
966
+ }))];
967
+ };
968
+ function VisibleColumnsList({
969
+ columns,
970
+ onReorder,
971
+ onRemove
972
+ }) {
973
+ return /* @__PURE__ */ React10__default.default.createElement("div", {
974
+ className: ColumnConfigDialog_default.visibleColumnsContainer
975
+ }, /* @__PURE__ */ React10__default.default.createElement("div", {
976
+ className: ColumnConfigDialog_default.sectionHeader
977
+ }, /* @__PURE__ */ React10__default.default.createElement("div", {
978
+ className: ColumnConfigDialog_default.sectionTitle
979
+ }, /* @__PURE__ */ React10__default.default.createElement("span", null, "Visible Columns"), /* @__PURE__ */ React10__default.default.createElement("span", {
980
+ className: ColumnConfigDialog_default.countTag
981
+ }, columns.length)), /* @__PURE__ */ React10__default.default.createElement("div", {
982
+ className: ColumnConfigDialog_default.sectionHint
983
+ }, "Drag to reorder")), /* @__PURE__ */ React10__default.default.createElement(DraggableList, {
984
+ items: columns,
985
+ onReorder,
986
+ onRemove,
987
+ removeIconVariant: "trash",
988
+ emptyMessage: "No visible columns",
989
+ className: ColumnConfigDialog_default.columnList
990
+ }));
991
+ }
992
+ function AvailableColumnsList({
993
+ visibleColumns,
994
+ searchQuery,
995
+ onSearchChange,
996
+ onToggleColumn,
997
+ onSelectAll,
998
+ filteredColumns
999
+ }) {
1000
+ const selectedCount = visibleColumns.length;
1001
+ const totalCount = filteredColumns.length;
1002
+ const allFilteredSelected = filteredColumns.every((col) => visibleColumns.some((v) => v.id === col.id));
1003
+ const someFilteredSelected = filteredColumns.some((col) => visibleColumns.some((v) => v.id === col.id));
1004
+ const handleSelectAllClick = React10.useCallback(() => {
1005
+ onSelectAll(filteredColumns);
1006
+ }, [filteredColumns, onSelectAll]);
1007
+ return /* @__PURE__ */ React10__default.default.createElement("div", {
1008
+ className: ColumnConfigDialog_default.availableColumnsContainer
1009
+ }, /* @__PURE__ */ React10__default.default.createElement("div", {
1010
+ className: classNames7__default.default(ColumnConfigDialog_default.sectionHeader, ColumnConfigDialog_default.sectionTitle)
1011
+ }, "Add or Remove Columns"), /* @__PURE__ */ React10__default.default.createElement(SearchBar, {
1012
+ value: searchQuery,
1013
+ onChange: onSearchChange,
1014
+ placeholder: "Search...",
1015
+ "aria-label": "Search available columns",
1016
+ className: ColumnConfigDialog_default.searchContainer
1017
+ }), /* @__PURE__ */ React10__default.default.createElement(collapsible.Collapsible.Root, {
1018
+ defaultOpen: true,
1019
+ className: ColumnConfigDialog_default.propertiesList
1020
+ }, /* @__PURE__ */ React10__default.default.createElement("div", {
1021
+ className: ColumnConfigDialog_default.categoryHeader
1022
+ }, /* @__PURE__ */ React10__default.default.createElement(Checkbox, {
1023
+ checked: allFilteredSelected,
1024
+ indeterminate: someFilteredSelected && !allFilteredSelected,
1025
+ onCheckedChange: handleSelectAllClick,
1026
+ className: ColumnConfigDialog_default.checkbox
1027
+ }), /* @__PURE__ */ React10__default.default.createElement(collapsible.Collapsible.Trigger, {
1028
+ className: ColumnConfigDialog_default.categoryTrigger
1029
+ }, /* @__PURE__ */ React10__default.default.createElement("span", {
1030
+ className: ColumnConfigDialog_default.categoryTitle
1031
+ }, "All Columns"), /* @__PURE__ */ React10__default.default.createElement("span", {
1032
+ className: ColumnConfigDialog_default.categoryCount
1033
+ }, selectedCount, "/", totalCount), /* @__PURE__ */ React10__default.default.createElement(icons.CaretDown, {
1034
+ className: ColumnConfigDialog_default.caretIcon
1035
+ }))), /* @__PURE__ */ React10__default.default.createElement(collapsible.Collapsible.Panel, {
1036
+ className: ColumnConfigDialog_default.propertyList
1037
+ }, filteredColumns.length === 0 ? /* @__PURE__ */ React10__default.default.createElement("div", {
1038
+ className: ColumnConfigDialog_default.emptyState
1039
+ }, "No matching columns found") : filteredColumns.map((column) => /* @__PURE__ */ React10__default.default.createElement(PropertyItem, {
1040
+ key: column.id,
1041
+ column,
1042
+ isSelected: visibleColumns.some((v) => v.id === column.id),
1043
+ onToggle: onToggleColumn
1044
+ })))));
1045
+ }
1046
+ function PropertyItem({
1047
+ column,
1048
+ isSelected,
1049
+ onToggle,
1050
+ showInfoIcon = false
1051
+ }) {
1052
+ const handleClick = React10.useCallback(() => {
1053
+ onToggle(column);
1054
+ }, [onToggle, column]);
1055
+ return /* @__PURE__ */ React10__default.default.createElement("div", {
1056
+ className: ColumnConfigDialog_default.propertyItem
1057
+ }, /* @__PURE__ */ React10__default.default.createElement(Checkbox, {
1058
+ checked: isSelected,
1059
+ onCheckedChange: handleClick,
1060
+ className: ColumnConfigDialog_default.checkbox
1061
+ }), /* @__PURE__ */ React10__default.default.createElement(button.Button, {
1062
+ onClick: handleClick,
1063
+ className: ColumnConfigDialog_default.propertyName
1064
+ }, column.label), showInfoIcon && /* @__PURE__ */ React10__default.default.createElement(icons.SmallInfoSign, {
1065
+ className: ColumnConfigDialog_default.infoIcon
1066
+ }));
1067
+ }
1068
+
1069
+ // src/object-table/MultiColumnSortDialog.module.css
1070
+ var MultiColumnSortDialog_default = {};
1071
+ function SortableItemsList({
1072
+ items,
1073
+ onReorder,
1074
+ onRemove,
1075
+ className
1076
+ }) {
1077
+ const renderContent = React10.useCallback((item) => item.content, []);
1078
+ return /* @__PURE__ */ React10__default.default.createElement(DraggableList, {
1079
+ items,
1080
+ onReorder,
1081
+ onRemove,
1082
+ removeIconVariant: "cross",
1083
+ renderContent,
1084
+ className
1085
+ });
1086
+ }
1087
+
1088
+ // src/object-table/MultiColumnSortDialog.tsx
1089
+ function MultiColumnSortDialog({
1090
+ isOpen,
1091
+ onClose,
1092
+ onApply,
1093
+ currentSorting,
1094
+ columnOptions
1095
+ }) {
1096
+ const [selectedSortColumns, setSelectedSortColumns] = React10.useState([]);
1097
+ const [menuSearchQuery, setMenuSearchQuery] = React10.useState("");
1098
+ React10.useEffect(() => {
1099
+ if (isOpen) {
1100
+ const selectedColumns = [];
1101
+ for (const sort of currentSorting) {
1102
+ const column = columnOptions.find((col) => col.id === sort.id);
1103
+ if (column) {
1104
+ selectedColumns.push({
1105
+ ...column,
1106
+ direction: sort.desc ? "desc" : "asc"
1107
+ });
1108
+ }
1109
+ }
1110
+ setSelectedSortColumns(selectedColumns);
1111
+ }
1112
+ }, [isOpen, currentSorting, columnOptions]);
1113
+ const handleAddColumn = React10.useCallback((column) => {
1114
+ setSelectedSortColumns((prev) => [...prev, {
1115
+ ...column,
1116
+ direction: "asc"
1117
+ }]);
1118
+ }, []);
1119
+ const handleRemoveSortColumn = React10.useCallback((id) => {
1120
+ setSelectedSortColumns((prev) => prev.filter((item) => item.id !== id));
1121
+ }, []);
1122
+ const handleReorderSortColumns = React10.useCallback((fromIndex, toIndex) => {
1123
+ setSelectedSortColumns((items) => sortable.arrayMove(items, fromIndex, toIndex));
1124
+ }, []);
1125
+ const handleToggleSortDirection = React10.useCallback((id) => {
1126
+ setSelectedSortColumns((prev) => prev.map((item) => item.id === id ? {
1127
+ ...item,
1128
+ direction: item.direction === "asc" ? "desc" : "asc"
1129
+ } : item));
1130
+ }, []);
1131
+ const handleApply = React10.useCallback(() => {
1132
+ const sortingState = selectedSortColumns.map((col) => ({
1133
+ id: col.id,
1134
+ desc: col.direction === "desc"
1135
+ }));
1136
+ onApply(sortingState);
1137
+ onClose();
1138
+ }, [selectedSortColumns, onApply, onClose]);
1139
+ const availableColumns = React10.useMemo(() => columnOptions.filter((col) => col.canSort && !selectedSortColumns.some((selected) => selected.id === col.id)), [columnOptions, selectedSortColumns]);
1140
+ const filteredAvailableColumns = React10.useMemo(() => {
1141
+ const query = menuSearchQuery.toLowerCase().trim();
1142
+ if (!query) {
1143
+ return availableColumns;
1144
+ }
1145
+ return availableColumns.filter((col) => col.name.toLowerCase().includes(query));
1146
+ }, [availableColumns, menuSearchQuery]);
1147
+ const handleMenuSearchChange = React10.useCallback((event) => {
1148
+ setMenuSearchQuery(event.target.value);
1149
+ }, []);
1150
+ const handleMenuOpenChange = React10.useCallback((open) => {
1151
+ if (open) {
1152
+ setMenuSearchQuery("");
1153
+ }
1154
+ }, []);
1155
+ const sortableItems = React10.useMemo(() => {
1156
+ return selectedSortColumns.map((item) => ({
1157
+ id: item.id,
1158
+ label: item.name,
1159
+ content: /* @__PURE__ */ React10__default.default.createElement("div", {
1160
+ className: MultiColumnSortDialog_default.sortColumnItem
1161
+ }, /* @__PURE__ */ React10__default.default.createElement("span", {
1162
+ className: classNames7__default.default(MultiColumnSortDialog_default.sortColumnName, MultiColumnSortDialog_default.truncate)
1163
+ }, item.name), /* @__PURE__ */ React10__default.default.createElement(button.Button, {
1164
+ className: MultiColumnSortDialog_default.sortDirectionButton,
1165
+ onClick: () => handleToggleSortDirection(item.id),
1166
+ "aria-label": `Toggle sort direction for ${item.name}`
1167
+ }, item.direction === "asc" ? /* @__PURE__ */ React10__default.default.createElement(icons.SortAlphabetical, {
1168
+ className: MultiColumnSortDialog_default.sortIcon
1169
+ }) : /* @__PURE__ */ React10__default.default.createElement(icons.SortAlphabeticalDesc, {
1170
+ className: MultiColumnSortDialog_default.sortIcon
1171
+ })))
1172
+ }));
1173
+ }, [selectedSortColumns, handleToggleSortDirection]);
1174
+ const footer = React10.useMemo(() => /* @__PURE__ */ React10__default.default.createElement(React10__default.default.Fragment, null, /* @__PURE__ */ React10__default.default.createElement(ActionButton, {
1175
+ onClick: onClose
1176
+ }, "Cancel"), /* @__PURE__ */ React10__default.default.createElement(ActionButton, {
1177
+ variant: "primary",
1178
+ onClick: handleApply
1179
+ }, "Apply")), [handleApply, onClose]);
1180
+ return /* @__PURE__ */ React10__default.default.createElement(Dialog, {
1181
+ isOpen,
1182
+ onOpenChange: onClose,
1183
+ title: DialogTitle2,
1184
+ footer
1185
+ }, /* @__PURE__ */ React10__default.default.createElement("div", {
1186
+ className: MultiColumnSortDialog_default.sortColumnsList
1187
+ }, /* @__PURE__ */ React10__default.default.createElement(SortableItemsList, {
1188
+ items: sortableItems,
1189
+ onReorder: handleReorderSortColumns,
1190
+ onRemove: handleRemoveSortColumn,
1191
+ className: MultiColumnSortDialog_default.sortableList
1192
+ }), /* @__PURE__ */ React10__default.default.createElement(menu.Menu.Root, {
1193
+ onOpenChange: handleMenuOpenChange
1194
+ }, /* @__PURE__ */ React10__default.default.createElement(menu.Menu.Trigger, {
1195
+ className: MultiColumnSortDialog_default.addColumnButton,
1196
+ disabled: availableColumns.length === 0,
1197
+ "aria-label": "Add column to sort"
1198
+ }, /* @__PURE__ */ React10__default.default.createElement(icons.Add, {
1199
+ className: MultiColumnSortDialog_default.addIcon
1200
+ }), /* @__PURE__ */ React10__default.default.createElement("span", {
1201
+ className: MultiColumnSortDialog_default.addColumnText
1202
+ }, "Add Column to Sort"), /* @__PURE__ */ React10__default.default.createElement(icons.CaretDown, {
1203
+ color: "currentColor"
1204
+ })), /* @__PURE__ */ React10__default.default.createElement(menu.Menu.Portal, null, /* @__PURE__ */ React10__default.default.createElement(menu.Menu.Positioner, {
1205
+ className: MultiColumnSortDialog_default.menuPositioner,
1206
+ sideOffset: 4
1207
+ }, /* @__PURE__ */ React10__default.default.createElement(menu.Menu.Popup, {
1208
+ className: MultiColumnSortDialog_default.dropdownMenu
1209
+ }, /* @__PURE__ */ React10__default.default.createElement(SearchBar, {
1210
+ value: menuSearchQuery,
1211
+ onChange: handleMenuSearchChange,
1212
+ placeholder: "Search columns",
1213
+ "aria-label": "Search columns to sort",
1214
+ className: MultiColumnSortDialog_default.menuSearchContainer,
1215
+ onKeyDown: (e) => e.stopPropagation()
1216
+ }), filteredAvailableColumns.map((column) => /* @__PURE__ */ React10__default.default.createElement(AvailableColumnMenuItem, {
1217
+ key: column.id,
1218
+ column,
1219
+ onAddColumn: handleAddColumn
1220
+ })), filteredAvailableColumns.length === 0 && /* @__PURE__ */ React10__default.default.createElement("div", {
1221
+ className: MultiColumnSortDialog_default.menuEmptyState
1222
+ }, "No matching columns")))))));
1223
+ }
1224
+ var DialogTitle2 = /* @__PURE__ */ React10__default.default.createElement("div", {
1225
+ className: MultiColumnSortDialog_default.title
1226
+ }, /* @__PURE__ */ React10__default.default.createElement(icons.Cog, null), "Sort on Multiple Columns");
1227
+ function AvailableColumnMenuItem({
1228
+ column,
1229
+ onAddColumn
1230
+ }) {
1231
+ const onClick = React10.useCallback(() => onAddColumn(column), [onAddColumn, column]);
1232
+ return /* @__PURE__ */ React10__default.default.createElement(menu.Menu.Item, {
1233
+ className: classNames7__default.default(MultiColumnSortDialog_default.dropdownItem, MultiColumnSortDialog_default.truncate),
1234
+ onClick
1235
+ }, column.name);
1236
+ }
1237
+
546
1238
  // src/object-table/TableHeader.module.css
547
1239
  var TableHeader_default = {};
548
1240
 
@@ -553,7 +1245,7 @@ var TableHeaderContent_default = {};
553
1245
  function TableHeaderContent({
554
1246
  header
555
1247
  }) {
556
- return /* @__PURE__ */ React7__default.default.createElement("div", {
1248
+ return /* @__PURE__ */ React10__default.default.createElement("div", {
557
1249
  className: TableHeaderContent_default.osdkHeaderContent
558
1250
  }, reactTable.flexRender(header.column.columnDef.header, header.getContext()));
559
1251
  }
@@ -568,24 +1260,38 @@ function HeaderMenuItem({
568
1260
  label,
569
1261
  active = false
570
1262
  }) {
571
- return /* @__PURE__ */ React7__default.default.createElement(menu.Menu.Item, {
1263
+ return /* @__PURE__ */ React10__default.default.createElement(menu.Menu.Item, {
572
1264
  closeOnClick: true,
573
- className: classNames2__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderMenuItem, active && TableHeaderWithPopover_default.osdkHeaderActiveMenuItem),
1265
+ className: classNames7__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderMenuItem, active && TableHeaderWithPopover_default.osdkHeaderActiveMenuItem),
574
1266
  onClick
575
- }, /* @__PURE__ */ React7__default.default.createElement(Icon, {
1267
+ }, /* @__PURE__ */ React10__default.default.createElement(Icon, {
576
1268
  className: TableHeaderWithPopover_default.osdkHeaderIcon,
577
1269
  color: "currentColor"
578
- }), /* @__PURE__ */ React7__default.default.createElement("span", null, label));
1270
+ }), /* @__PURE__ */ React10__default.default.createElement("span", null, label));
579
1271
  }
580
1272
  function TableHeaderWithPopover({
581
1273
  header,
1274
+ table,
582
1275
  isColumnPinned,
583
- setColumnPinning,
584
- onSortChange,
585
- onResetSize
1276
+ onResetSize,
1277
+ columnOptions,
1278
+ featureFlags,
1279
+ onOpenColumnConfig,
1280
+ onOpenMultiSort
586
1281
  }) {
587
- const [isOpen, setIsOpen] = React7.useState(false);
588
- const handlePinLeft = React7.useCallback(() => {
1282
+ const {
1283
+ showSortingItems = false,
1284
+ showPinningItems = false,
1285
+ showResizeItem = false,
1286
+ showConfigItem = false
1287
+ } = featureFlags ?? {};
1288
+ const {
1289
+ setColumnPinning,
1290
+ setSorting
1291
+ } = table;
1292
+ const currentSorting = table.getState().sorting;
1293
+ const [isOpen, setIsOpen] = React10.useState(false);
1294
+ const handlePinLeft = React10.useCallback(() => {
589
1295
  setColumnPinning((prev) => {
590
1296
  return {
591
1297
  left: [...prev.left || [], header.column.id],
@@ -593,7 +1299,7 @@ function TableHeaderWithPopover({
593
1299
  };
594
1300
  });
595
1301
  }, [header.column.id, setColumnPinning]);
596
- const handleUnpin = React7.useCallback(() => {
1302
+ const handleUnpin = React10.useCallback(() => {
597
1303
  setColumnPinning((prev) => {
598
1304
  return {
599
1305
  left: prev.left?.filter((id) => id !== header.column.id) || [],
@@ -601,98 +1307,116 @@ function TableHeaderWithPopover({
601
1307
  };
602
1308
  });
603
1309
  }, [header.column.id, setColumnPinning]);
604
- const handleSortAscending = React7.useCallback(() => {
1310
+ const handleSortAscending = React10.useCallback(() => {
605
1311
  header.column.toggleSorting(false);
606
- onSortChange?.([{
1312
+ setSorting?.([{
607
1313
  id: header.column.id,
608
1314
  desc: false
609
1315
  }]);
610
- }, [header.column, onSortChange]);
611
- const handleSortDescending = React7.useCallback(() => {
1316
+ }, [header.column, setSorting]);
1317
+ const handleSortDescending = React10.useCallback(() => {
612
1318
  header.column.toggleSorting(true);
613
- onSortChange?.([{
1319
+ setSorting?.([{
614
1320
  id: header.column.id,
615
1321
  desc: true
616
1322
  }]);
617
- }, [header.column, onSortChange]);
618
- const handleClearAllSorts = React7.useCallback(() => {
1323
+ }, [header.column, setSorting]);
1324
+ const handleClearAllSorts = React10.useCallback(() => {
619
1325
  header.column.clearSorting();
620
- onSortChange?.([]);
621
- }, [header.column, onSortChange]);
622
- const handleResetSize = React7.useCallback(() => {
1326
+ setSorting?.([]);
1327
+ }, [header.column, setSorting]);
1328
+ const handleResetSize = React10.useCallback(() => {
623
1329
  header.column.resetSize();
624
1330
  if (onResetSize) {
625
1331
  onResetSize();
626
1332
  }
627
1333
  }, [header.column, onResetSize]);
628
- const handleInteraction = React7.useCallback((e) => {
1334
+ const handleInteraction = React10.useCallback((e) => {
629
1335
  e.preventDefault();
630
1336
  setIsOpen((prev) => !prev);
631
1337
  }, []);
1338
+ const handleOpenColumnConfig = React10.useCallback(() => {
1339
+ onOpenColumnConfig?.();
1340
+ setIsOpen(false);
1341
+ }, [onOpenColumnConfig]);
1342
+ const handleOpenMultiSort = React10.useCallback(() => {
1343
+ onOpenMultiSort?.();
1344
+ setIsOpen(false);
1345
+ }, [onOpenMultiSort]);
632
1346
  const isSorted = header.column.getIsSorted();
633
1347
  const isSortable = header.column.getCanSort();
634
- return /* @__PURE__ */ React7__default.default.createElement(menu.Menu.Root, {
1348
+ const sortIndex = currentSorting?.findIndex((s) => s.id === header.column.id) ?? -1;
1349
+ const hasAnyMenuItems = showPinningItems || showSortingItems && isSortable || showResizeItem || showConfigItem;
1350
+ return /* @__PURE__ */ React10__default.default.createElement(React10__default.default.Fragment, null, /* @__PURE__ */ React10__default.default.createElement(menu.Menu.Root, {
635
1351
  open: isOpen,
636
1352
  onOpenChange: setIsOpen
637
- }, /* @__PURE__ */ React7__default.default.createElement("div", {
638
- className: classNames2__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContainer),
1353
+ }, /* @__PURE__ */ React10__default.default.createElement("div", {
1354
+ className: classNames7__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContainer),
639
1355
  onContextMenu: handleInteraction
640
- }, /* @__PURE__ */ React7__default.default.createElement("div", {
641
- className: classNames2__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentLeft)
642
- }, isColumnPinned && /* @__PURE__ */ React7__default.default.createElement(icons.Pin, {
1356
+ }, /* @__PURE__ */ React10__default.default.createElement("div", {
1357
+ className: classNames7__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentLeft)
1358
+ }, isColumnPinned && /* @__PURE__ */ React10__default.default.createElement(icons.Pin, {
643
1359
  className: TableHeaderWithPopover_default.osdkHeaderIcon,
644
1360
  color: "currentColor"
645
- }), /* @__PURE__ */ React7__default.default.createElement(TableHeaderContent, {
1361
+ }), /* @__PURE__ */ React10__default.default.createElement(TableHeaderContent, {
646
1362
  header
647
- })), /* @__PURE__ */ React7__default.default.createElement("div", {
648
- className: classNames2__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentRight)
649
- }, isSorted && /* @__PURE__ */ React7__default.default.createElement("div", {
1363
+ })), /* @__PURE__ */ React10__default.default.createElement("div", {
1364
+ className: classNames7__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentRight)
1365
+ }, isSorted && /* @__PURE__ */ React10__default.default.createElement("div", {
650
1366
  className: TableHeaderWithPopover_default.osdkCenterContainer
651
- }, isSorted === "asc" ? /* @__PURE__ */ React7__default.default.createElement(icons.SortAlphabetical, {
652
- className: TableHeaderWithPopover_default.osdkHeaderIcon,
653
- color: "currentColor"
654
- }) : /* @__PURE__ */ React7__default.default.createElement(icons.SortAlphabeticalDesc, {
655
- className: TableHeaderWithPopover_default.osdkHeaderIcon,
656
- color: "currentColor"
657
- })), /* @__PURE__ */ React7__default.default.createElement(menu.Menu.Trigger, {
1367
+ }, isSorted === "asc" ? /* @__PURE__ */ React10__default.default.createElement(icons.SortAlphabetical, {
1368
+ className: TableHeaderWithPopover_default.osdkHeaderIcon
1369
+ }) : /* @__PURE__ */ React10__default.default.createElement(icons.SortAlphabeticalDesc, {
1370
+ className: TableHeaderWithPopover_default.osdkHeaderIcon
1371
+ }), currentSorting.length > 1 && sortIndex >= 0 && /* @__PURE__ */ React10__default.default.createElement("span", {
1372
+ className: TableHeaderWithPopover_default.sortIndex
1373
+ }, sortIndex + 1)), hasAnyMenuItems && /* @__PURE__ */ React10__default.default.createElement(menu.Menu.Trigger, {
658
1374
  "aria-label": `Open header menu for column with id=${header.column.id}`,
659
- className: classNames2__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkHeaderPopoverTrigger)
660
- }, /* @__PURE__ */ React7__default.default.createElement(icons.ChevronDown, {
1375
+ className: classNames7__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkHeaderPopoverTrigger)
1376
+ }, /* @__PURE__ */ React10__default.default.createElement(icons.ChevronDown, {
661
1377
  className: TableHeaderWithPopover_default.osdkHeaderIcon
662
- }))), /* @__PURE__ */ React7__default.default.createElement(menu.Menu.Portal, {
1378
+ }))), /* @__PURE__ */ React10__default.default.createElement(menu.Menu.Portal, {
663
1379
  container: document.body
664
- }, /* @__PURE__ */ React7__default.default.createElement(menu.Menu.Positioner, {
1380
+ }, /* @__PURE__ */ React10__default.default.createElement(menu.Menu.Positioner, {
665
1381
  sideOffset: 4
666
- }, /* @__PURE__ */ React7__default.default.createElement(menu.Menu.Popup, {
1382
+ }, /* @__PURE__ */ React10__default.default.createElement(menu.Menu.Popup, {
667
1383
  className: TableHeaderWithPopover_default.osdkHeaderPopup
668
- }, !isColumnPinned && /* @__PURE__ */ React7__default.default.createElement(HeaderMenuItem, {
1384
+ }, showPinningItems && !isColumnPinned && /* @__PURE__ */ React10__default.default.createElement(HeaderMenuItem, {
669
1385
  onClick: handlePinLeft,
670
1386
  icon: icons.Pin,
671
1387
  label: "Pin column"
672
- }), isColumnPinned && /* @__PURE__ */ React7__default.default.createElement(HeaderMenuItem, {
1388
+ }), showPinningItems && isColumnPinned && /* @__PURE__ */ React10__default.default.createElement(HeaderMenuItem, {
673
1389
  onClick: handleUnpin,
674
1390
  icon: icons.Unpin,
675
1391
  label: "Unpin Column",
676
1392
  active: true
677
- }), isSortable && /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, /* @__PURE__ */ React7__default.default.createElement(HeaderMenuItem, {
1393
+ }), showSortingItems && isSortable && /* @__PURE__ */ React10__default.default.createElement(React10__default.default.Fragment, null, /* @__PURE__ */ React10__default.default.createElement(HeaderMenuItem, {
678
1394
  onClick: handleSortAscending,
679
1395
  icon: icons.SortAlphabetical,
680
1396
  label: "Sort ascending",
681
1397
  active: isSorted === "asc"
682
- }), /* @__PURE__ */ React7__default.default.createElement(HeaderMenuItem, {
1398
+ }), /* @__PURE__ */ React10__default.default.createElement(HeaderMenuItem, {
683
1399
  onClick: handleSortDescending,
684
1400
  icon: icons.SortAlphabeticalDesc,
685
1401
  label: "Sort descending",
686
1402
  active: isSorted === "desc"
687
- })), !!isSorted && /* @__PURE__ */ React7__default.default.createElement(HeaderMenuItem, {
1403
+ }), columnOptions?.some((col) => col.canSort) && /* @__PURE__ */ React10__default.default.createElement(HeaderMenuItem, {
1404
+ onClick: handleOpenMultiSort,
1405
+ icon: icons.Sort,
1406
+ label: "Sort on multiple columns"
1407
+ })), showSortingItems && !!currentSorting?.length && /* @__PURE__ */ React10__default.default.createElement(HeaderMenuItem, {
688
1408
  onClick: handleClearAllSorts,
689
1409
  icon: icons.Remove,
690
1410
  label: "Clear all sorts"
691
- }), /* @__PURE__ */ React7__default.default.createElement(HeaderMenuItem, {
1411
+ }), showResizeItem && /* @__PURE__ */ React10__default.default.createElement(HeaderMenuItem, {
692
1412
  onClick: handleResetSize,
693
1413
  icon: icons.VerticalDistribution,
694
1414
  label: "Reset Column Size"
695
- }))))));
1415
+ }), showConfigItem && /* @__PURE__ */ React10__default.default.createElement(HeaderMenuItem, {
1416
+ onClick: handleOpenColumnConfig,
1417
+ icon: icons.Settings,
1418
+ label: "Configure Columns"
1419
+ })))))));
696
1420
  }
697
1421
 
698
1422
  // src/object-table/utils/getColumnPinningStyles.ts
@@ -708,14 +1432,80 @@ function getColumnPinningStyles(column) {
708
1432
  }
709
1433
 
710
1434
  // src/object-table/TableHeader.tsx
1435
+ var getHeaderName = (column, allHeaders) => {
1436
+ const {
1437
+ id,
1438
+ columnDef
1439
+ } = column;
1440
+ const header = allHeaders.find((header2) => header2.id === id);
1441
+ const headerDef = columnDef.header;
1442
+ if (headerDef) {
1443
+ if (typeof headerDef === "string") {
1444
+ return headerDef;
1445
+ }
1446
+ if (header) {
1447
+ const displayedHeader = headerDef(header.getContext());
1448
+ if (typeof displayedHeader === "string") return displayedHeader;
1449
+ }
1450
+ }
1451
+ const {
1452
+ meta
1453
+ } = columnDef;
1454
+ return meta?.columnName ?? id;
1455
+ };
711
1456
  function TableHeader({
712
- table
1457
+ table,
1458
+ headerMenuFeatureFlags
713
1459
  }) {
1460
+ const {
1461
+ setColumnOrder,
1462
+ setColumnVisibility,
1463
+ setSorting
1464
+ } = table;
1465
+ const currentSorting = table.getState().sorting;
1466
+ const currentVisibility = table.getState().columnVisibility;
1467
+ const currentColumnOrder = table.getState().columnOrder;
714
1468
  const isResizing = !!table.getState().columnSizingInfo?.isResizingColumn;
715
- return /* @__PURE__ */ React7__default.default.createElement("thead", {
1469
+ const [configDialogOpen, setConfigDialogOpen] = React10.useState(false);
1470
+ const [multiSortDialogOpen, setMultiSortDialogOpen] = React10.useState(false);
1471
+ const handleOpenColumnConfig = React10.useCallback(() => {
1472
+ setConfigDialogOpen(true);
1473
+ }, []);
1474
+ const handleCloseColumnConfig = React10.useCallback(() => {
1475
+ setConfigDialogOpen(false);
1476
+ }, []);
1477
+ const handleOpenMultiSort = React10.useCallback(() => {
1478
+ setMultiSortDialogOpen(true);
1479
+ }, []);
1480
+ const handleCloseMultiSort = React10.useCallback(() => {
1481
+ setMultiSortDialogOpen(false);
1482
+ }, []);
1483
+ const handleApplyMultiSort = React10.useCallback((sortColumns) => {
1484
+ setMultiSortDialogOpen(false);
1485
+ setSorting?.(sortColumns);
1486
+ }, [setSorting]);
1487
+ const handleApplyColumnConfig = React10.useCallback((updates) => {
1488
+ const newVisibilityState = {};
1489
+ for (const update of updates) {
1490
+ newVisibilityState[update.columnId] = update.isVisible;
1491
+ }
1492
+ setColumnOrder(updates.map((col) => col.columnId));
1493
+ setColumnVisibility(newVisibilityState);
1494
+ }, [setColumnOrder, setColumnVisibility]);
1495
+ const columnOptions = React10.useMemo(() => {
1496
+ const allHeaders = table.getHeaderGroups().flatMap((headerGroup) => headerGroup.headers);
1497
+ return table.getAllColumns().filter((column) => column.id !== SELECTION_COLUMN_ID).map((column) => {
1498
+ return {
1499
+ id: column.id,
1500
+ name: getHeaderName(column, allHeaders),
1501
+ canSort: column.getCanSort()
1502
+ };
1503
+ });
1504
+ }, [table]);
1505
+ return /* @__PURE__ */ React10__default.default.createElement(React10__default.default.Fragment, null, /* @__PURE__ */ React10__default.default.createElement("thead", {
716
1506
  className: TableHeader_default.osdkTableHeader,
717
1507
  "data-resizing": isResizing
718
- }, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React7__default.default.createElement("tr", {
1508
+ }, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React10__default.default.createElement("tr", {
719
1509
  key: headerGroup.id,
720
1510
  className: TableHeader_default.osdkTableHeaderRow
721
1511
  }, headerGroup.headers.map((header) => {
@@ -724,24 +1514,41 @@ function TableHeader({
724
1514
  } = getColumnPinningStyles(header.column);
725
1515
  const isColumnPinned = header.column.getIsPinned();
726
1516
  const isSelectColumn = header.id === SELECTION_COLUMN_ID;
727
- return /* @__PURE__ */ React7__default.default.createElement("th", {
1517
+ return /* @__PURE__ */ React10__default.default.createElement("th", {
728
1518
  key: header.id,
729
1519
  "data-pinned": header.column.getIsPinned(),
730
1520
  className: TableHeader_default.osdkTableHeaderCell,
731
1521
  style: columnStyles
732
- }, header.isPlaceholder ? null : isSelectColumn ? /* @__PURE__ */ React7__default.default.createElement(TableHeaderContent, {
1522
+ }, header.isPlaceholder ? null : isSelectColumn ? /* @__PURE__ */ React10__default.default.createElement(TableHeaderContent, {
733
1523
  header
734
- }) : /* @__PURE__ */ React7__default.default.createElement(TableHeaderWithPopover, {
1524
+ }) : /* @__PURE__ */ React10__default.default.createElement(TableHeaderWithPopover, {
1525
+ table,
735
1526
  header,
736
1527
  isColumnPinned,
737
- setColumnPinning: table.setColumnPinning
738
- }), header.column.getCanResize() && /* @__PURE__ */ React7__default.default.createElement("div", {
1528
+ columnOptions,
1529
+ featureFlags: headerMenuFeatureFlags,
1530
+ onOpenColumnConfig: handleOpenColumnConfig,
1531
+ onOpenMultiSort: handleOpenMultiSort
1532
+ }), header.column.getCanResize() && headerMenuFeatureFlags?.showResizeItem !== false && /* @__PURE__ */ React10__default.default.createElement("div", {
739
1533
  className: TableHeader_default.osdkTableHeaderResizer,
740
1534
  onDoubleClick: () => header.column.resetSize(),
741
1535
  onMouseDown: header.getResizeHandler(),
742
1536
  onTouchStart: header.getResizeHandler()
743
1537
  }));
744
- }))));
1538
+ })))), !!columnOptions?.length && /* @__PURE__ */ React10__default.default.createElement(ColumnConfigDialog, {
1539
+ isOpen: configDialogOpen,
1540
+ onClose: handleCloseColumnConfig,
1541
+ columnOptions,
1542
+ currentVisibility,
1543
+ currentColumnOrder,
1544
+ onApply: handleApplyColumnConfig
1545
+ }), columnOptions?.some((col) => col.canSort) && /* @__PURE__ */ React10__default.default.createElement(MultiColumnSortDialog, {
1546
+ isOpen: multiSortDialogOpen,
1547
+ onClose: handleCloseMultiSort,
1548
+ columnOptions,
1549
+ currentSorting,
1550
+ onApply: handleApplyMultiSort
1551
+ }));
745
1552
  }
746
1553
 
747
1554
  // src/object-table/LoadingStateTable.tsx
@@ -753,15 +1560,15 @@ function LoadingStateTable({
753
1560
  rowHeight = 40,
754
1561
  columnWidth = 120
755
1562
  }) {
756
- const isSelectionEnabled = table.options.enableRowSelection;
757
- const minHeaderCount = isSelectionEnabled ? 1 : 0;
758
- const headers = headerGroups[0]?.headers ?? [];
1563
+ const enableRowSelection = table.options.enableRowSelection;
1564
+ const minHeaderCount = enableRowSelection ? 1 : 0;
1565
+ const headers = React10.useMemo(() => headerGroups.length > 0 ? headerGroups[0].headers : [], [headerGroups]);
759
1566
  const hasHeadersLoaded = headers.length > minHeaderCount;
760
- const headerRef = React7.useRef(null);
761
- const bodyRef = React7.useRef(null);
762
- const [loadingRowCount, setLoadingRowCount] = React7.useState(MIN_ROWS);
763
- const [loadingColumnCount, setLoadingColumnCount] = React7.useState(headers.length);
764
- React7.useEffect(() => {
1567
+ const headerRef = React10.useRef(null);
1568
+ const bodyRef = React10.useRef(null);
1569
+ const [loadingRowCount, setLoadingRowCount] = React10.useState(MIN_ROWS);
1570
+ const [loadingColumnCount, setLoadingColumnCount] = React10.useState(headers.length);
1571
+ React10.useEffect(() => {
765
1572
  if (hasHeadersLoaded) {
766
1573
  setLoadingColumnCount(headers.length);
767
1574
  } else {
@@ -774,7 +1581,7 @@ function LoadingStateTable({
774
1581
  }
775
1582
  }
776
1583
  }, [columnWidth, hasHeadersLoaded, headers, tableContainerRef]);
777
- React7.useEffect(() => {
1584
+ React10.useEffect(() => {
778
1585
  if (tableContainerRef.current) {
779
1586
  const containerHeight = tableContainerRef.current.clientHeight;
780
1587
  const availableHeight = containerHeight - rowHeight;
@@ -784,32 +1591,32 @@ function LoadingStateTable({
784
1591
  }
785
1592
  }
786
1593
  }, [tableContainerRef, rowHeight]);
787
- return /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, hasHeadersLoaded ? /* @__PURE__ */ React7__default.default.createElement(TableHeader, {
1594
+ return /* @__PURE__ */ React10__default.default.createElement(React10__default.default.Fragment, null, hasHeadersLoaded ? /* @__PURE__ */ React10__default.default.createElement(TableHeader, {
788
1595
  table
789
- }) : /* @__PURE__ */ React7__default.default.createElement("thead", {
1596
+ }) : /* @__PURE__ */ React10__default.default.createElement("thead", {
790
1597
  className: TableHeader_default.osdkTableHeader,
791
1598
  ref: headerRef
792
- }, /* @__PURE__ */ React7__default.default.createElement("tr", {
1599
+ }, /* @__PURE__ */ React10__default.default.createElement("tr", {
793
1600
  className: TableHeader_default.osdkTableHeaderRow
794
1601
  }, Array.from({
795
1602
  length: loadingColumnCount
796
1603
  }).map((_, index) => {
797
1604
  const width = headers.length > index ? headers[index].getSize() : columnWidth;
798
- return /* @__PURE__ */ React7__default.default.createElement("th", {
1605
+ return /* @__PURE__ */ React10__default.default.createElement("th", {
799
1606
  key: `loading-header-${index}`,
800
1607
  className: TableHeader_default.osdkTableHeaderCell,
801
1608
  style: {
802
1609
  width
803
1610
  }
804
- }, /* @__PURE__ */ React7__default.default.createElement("div", {
805
- className: classNames2__default.default(TableHeader_default.osdkLoadingHeaderCell, LoadingCell_default.osdkCellSkeleton)
1611
+ }, /* @__PURE__ */ React10__default.default.createElement("div", {
1612
+ className: classNames7__default.default(TableHeader_default.osdkLoadingHeaderCell, LoadingCell_default.osdkCellSkeleton)
806
1613
  }));
807
- }))), /* @__PURE__ */ React7__default.default.createElement("tbody", {
1614
+ }))), /* @__PURE__ */ React10__default.default.createElement("tbody", {
808
1615
  className: TableBody_default.osdkTableBody,
809
1616
  ref: bodyRef
810
1617
  }, Array.from({
811
1618
  length: loadingRowCount
812
- }).map((_, index) => /* @__PURE__ */ React7__default.default.createElement(LoadingRow, {
1619
+ }).map((_, index) => /* @__PURE__ */ React10__default.default.createElement(LoadingRow, {
813
1620
  key: `skeleton-${index}`,
814
1621
  columnCount: loadingColumnCount,
815
1622
  headers,
@@ -826,9 +1633,9 @@ var NonIdealState_default = {};
826
1633
  function NonIdealState({
827
1634
  message
828
1635
  }) {
829
- return /* @__PURE__ */ React7__default.default.createElement("div", {
1636
+ return /* @__PURE__ */ React10__default.default.createElement("div", {
830
1637
  className: NonIdealState_default.container
831
- }, /* @__PURE__ */ React7__default.default.createElement("div", {
1638
+ }, /* @__PURE__ */ React10__default.default.createElement("div", {
832
1639
  className: NonIdealState_default.message
833
1640
  }, message));
834
1641
  }
@@ -846,8 +1653,8 @@ function CellContextMenu({
846
1653
  onClose,
847
1654
  renderContent
848
1655
  }) {
849
- const ref = React7.useRef(null);
850
- React7.useEffect(() => {
1656
+ const ref = React10.useRef(null);
1657
+ React10.useEffect(() => {
851
1658
  const handleClickOutside = (event) => {
852
1659
  if (ref.current && !ref.current.contains(event.target)) {
853
1660
  onClose();
@@ -858,7 +1665,7 @@ function CellContextMenu({
858
1665
  document.removeEventListener("mousedown", handleClickOutside);
859
1666
  };
860
1667
  }, [onClose]);
861
- return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */ React7__default.default.createElement("div", {
1668
+ return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */ React10__default.default.createElement("div", {
862
1669
  ref,
863
1670
  className: CellContextMenu_default.osdkCellContextMenu,
864
1671
  style: {
@@ -871,9 +1678,9 @@ function CellContextMenu({
871
1678
  var useCellContextMenu = ({
872
1679
  tdRef
873
1680
  }) => {
874
- const [popoverPosition, setPopoverPosition] = React7.useState(null);
875
- const [isContextMenuOpen, setIsContextMenuOpen] = React7.useState(false);
876
- const handleOpenContextMenu = React7.useCallback((event) => {
1681
+ const [popoverPosition, setPopoverPosition] = React10.useState(null);
1682
+ const [isContextMenuOpen, setIsContextMenuOpen] = React10.useState(false);
1683
+ const handleOpenContextMenu = React10.useCallback((event) => {
877
1684
  event.preventDefault();
878
1685
  event.stopPropagation();
879
1686
  if (tdRef.current) {
@@ -887,7 +1694,7 @@ var useCellContextMenu = ({
887
1694
  setIsContextMenuOpen(true);
888
1695
  }
889
1696
  }, [tdRef]);
890
- const handleCloseContextMenu = React7.useCallback(() => {
1697
+ const handleCloseContextMenu = React10.useCallback(() => {
891
1698
  setIsContextMenuOpen(false);
892
1699
  setPopoverPosition(null);
893
1700
  }, []);
@@ -904,7 +1711,7 @@ function TableCell({
904
1711
  cell,
905
1712
  renderCellContextMenu
906
1713
  }) {
907
- const tdRef = React7.useRef(null);
1714
+ const tdRef = React10.useRef(null);
908
1715
  const isSelectColumn = cell.column.id === SELECTION_COLUMN_ID;
909
1716
  const {
910
1717
  isContextMenuOpen,
@@ -918,15 +1725,15 @@ function TableCell({
918
1725
  const {
919
1726
  columnStyles
920
1727
  } = getColumnPinningStyles(cell.column);
921
- return /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, /* @__PURE__ */ React7__default.default.createElement("td", {
1728
+ return /* @__PURE__ */ React10__default.default.createElement(React10__default.default.Fragment, null, /* @__PURE__ */ React10__default.default.createElement("td", {
922
1729
  ref: tdRef,
923
1730
  "data-pinned": cell.column.getIsPinned(),
924
1731
  className: TableCell_default.osdkTableCell,
925
1732
  style: columnStyles,
926
1733
  onContextMenu: handleOpenContextMenu
927
- }, /* @__PURE__ */ React7__default.default.createElement("div", {
1734
+ }, /* @__PURE__ */ React10__default.default.createElement("div", {
928
1735
  className: TableCell_default.osdkTableCellContent
929
- }, reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()))), shouldRenderContextMenu && /* @__PURE__ */ React7__default.default.createElement(CellContextMenu, {
1736
+ }, reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()))), shouldRenderContextMenu && /* @__PURE__ */ React10__default.default.createElement(CellContextMenu, {
930
1737
  cell,
931
1738
  position: popoverPosition,
932
1739
  onClose: handleCloseContextMenu,
@@ -941,10 +1748,10 @@ function TableRow({
941
1748
  onRowClick,
942
1749
  renderCellContextMenu
943
1750
  }) {
944
- const handleClick = React7.useCallback(() => {
1751
+ const handleClick = React10.useCallback(() => {
945
1752
  onRowClick?.(row.original);
946
1753
  }, [onRowClick, row.original]);
947
- return /* @__PURE__ */ React7__default.default.createElement("tr", {
1754
+ return /* @__PURE__ */ React10__default.default.createElement("tr", {
948
1755
  "data-selected": row.getIsSelected(),
949
1756
  className: TableRow_default.osdkTableRow,
950
1757
  style: {
@@ -952,7 +1759,7 @@ function TableRow({
952
1759
  transform: `translateY(${virtualRow.start}px)`
953
1760
  },
954
1761
  onClick: handleClick
955
- }, row.getVisibleCells().map((cell) => /* @__PURE__ */ React7__default.default.createElement(TableCell, {
1762
+ }, row.getVisibleCells().map((cell) => /* @__PURE__ */ React10__default.default.createElement(TableCell, {
956
1763
  key: cell.id,
957
1764
  cell,
958
1765
  renderCellContextMenu
@@ -975,27 +1782,27 @@ function TableBody({
975
1782
  getScrollElement: () => tableContainerRef.current,
976
1783
  overscan: 5
977
1784
  });
978
- React7.useLayoutEffect(() => {
1785
+ React10.useLayoutEffect(() => {
979
1786
  rowVirtualizer.measure();
980
1787
  }, [rowVirtualizer, rows.length]);
981
1788
  const totalSize = rowVirtualizer.getTotalSize();
982
1789
  const bodyHeight = isLoadingMore ? totalSize + rowHeight : totalSize;
983
1790
  const headers = headerGroups[0]?.headers ?? [];
984
- return /* @__PURE__ */ React7__default.default.createElement("tbody", {
1791
+ return /* @__PURE__ */ React10__default.default.createElement("tbody", {
985
1792
  className: TableBody_default.osdkTableBody,
986
1793
  style: {
987
1794
  height: `${bodyHeight}px`
988
1795
  }
989
1796
  }, rowVirtualizer.getVirtualItems().map((virtualRow) => {
990
1797
  const row = rows[virtualRow.index];
991
- return /* @__PURE__ */ React7__default.default.createElement(TableRow, {
1798
+ return /* @__PURE__ */ React10__default.default.createElement(TableRow, {
992
1799
  key: row.id,
993
1800
  row,
994
1801
  virtualRow,
995
1802
  onRowClick,
996
1803
  renderCellContextMenu
997
1804
  });
998
- }), isLoadingMore && /* @__PURE__ */ React7__default.default.createElement(LoadingRow, {
1805
+ }), isLoadingMore && /* @__PURE__ */ React10__default.default.createElement(LoadingRow, {
999
1806
  headers,
1000
1807
  translateY: totalSize,
1001
1808
  rowHeight,
@@ -1012,17 +1819,18 @@ function BaseTable({
1012
1819
  rowHeight,
1013
1820
  renderCellContextMenu,
1014
1821
  className,
1015
- error
1822
+ error,
1823
+ headerMenuFeatureFlags
1016
1824
  }) {
1017
- const tableContainerRef = React7.useRef(null);
1018
- const [isLoadingMore, setIsLoadingMore] = React7.useState(false);
1019
- const fetchingRef = React7.useRef(false);
1020
- React7.useEffect(() => {
1825
+ const tableContainerRef = React10.useRef(null);
1826
+ const [isLoadingMore, setIsLoadingMore] = React10.useState(false);
1827
+ const fetchingRef = React10.useRef(false);
1828
+ React10.useEffect(() => {
1021
1829
  if (!isLoading || fetchNextPage == null) {
1022
1830
  setIsLoadingMore(false);
1023
1831
  }
1024
1832
  }, [isLoading, fetchNextPage]);
1025
- const fetchMoreOnEndReached = React7.useCallback(async (containerRefElement) => {
1833
+ const fetchMoreOnEndReached = React10.useCallback(async (containerRefElement) => {
1026
1834
  if (containerRefElement && !fetchingRef.current && !isLoadingMore) {
1027
1835
  const {
1028
1836
  scrollHeight,
@@ -1040,26 +1848,25 @@ function BaseTable({
1040
1848
  }
1041
1849
  }
1042
1850
  }, [fetchNextPage, isLoading, isLoadingMore]);
1043
- const handleScroll = React7.useCallback(async (e) => {
1851
+ const handleScroll = React10.useCallback(async (e) => {
1044
1852
  await fetchMoreOnEndReached(e.currentTarget);
1045
1853
  }, [fetchMoreOnEndReached]);
1046
1854
  const rows = table.getRowModel().rows;
1047
1855
  const headerGroups = table.getHeaderGroups();
1048
1856
  const hasData = rows.length > 0;
1049
- return /* @__PURE__ */ React7__default.default.createElement("div", {
1857
+ return /* @__PURE__ */ React10__default.default.createElement("div", {
1050
1858
  ref: tableContainerRef,
1051
- className: classNames2__default.default(Table_default.osdkTableContainer, className),
1859
+ className: classNames7__default.default(Table_default.osdkTableContainer, className),
1052
1860
  onScroll: handleScroll
1053
- }, /* @__PURE__ */ React7__default.default.createElement("table", null, isLoading && !hasData ? /* @__PURE__ */ React7__default.default.createElement(LoadingStateTable, {
1861
+ }, /* @__PURE__ */ React10__default.default.createElement("table", null, isLoading && !hasData ? /* @__PURE__ */ React10__default.default.createElement(LoadingStateTable, {
1054
1862
  table,
1055
1863
  headerGroups,
1056
1864
  rowHeight,
1057
1865
  tableContainerRef
1058
- }) : /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, /* @__PURE__ */ React7__default.default.createElement(TableHeader, {
1059
- table
1060
- }), !hasData && error == null ? /* @__PURE__ */ React7__default.default.createElement(NonIdealState, {
1061
- message: "No Data"
1062
- }) : /* @__PURE__ */ React7__default.default.createElement(TableBody, {
1866
+ }) : /* @__PURE__ */ React10__default.default.createElement(React10__default.default.Fragment, null, /* @__PURE__ */ React10__default.default.createElement(TableHeader, {
1867
+ table,
1868
+ headerMenuFeatureFlags
1869
+ }), /* @__PURE__ */ React10__default.default.createElement(TableBody, {
1063
1870
  rows,
1064
1871
  tableContainerRef,
1065
1872
  onRowClick,
@@ -1067,9 +1874,11 @@ function BaseTable({
1067
1874
  renderCellContextMenu,
1068
1875
  isLoadingMore,
1069
1876
  headerGroups
1070
- })), error != null && /* @__PURE__ */ React7__default.default.createElement(NonIdealState, {
1877
+ }))), !hasData && error == null && /* @__PURE__ */ React10__default.default.createElement(NonIdealState, {
1878
+ message: "No Data"
1879
+ }), error != null && /* @__PURE__ */ React10__default.default.createElement(NonIdealState, {
1071
1880
  message: `Error Loading Data: ${error.message}`
1072
- })));
1881
+ }));
1073
1882
  }
1074
1883
 
1075
1884
  // src/object-table/ObjectTable.tsx
@@ -1081,13 +1890,24 @@ function ObjectTable({
1081
1890
  defaultOrderBy,
1082
1891
  onOrderByChanged,
1083
1892
  onColumnsPinnedChanged,
1893
+ onColumnResize,
1084
1894
  onRowSelection,
1085
1895
  renderCellContextMenu,
1086
1896
  selectionMode = "none",
1087
1897
  selectedRows,
1898
+ onColumnVisibilityChanged,
1899
+ enableOrdering = true,
1900
+ enableColumnPinning = true,
1901
+ enableColumnResizing = true,
1902
+ enableColumnConfig = true,
1088
1903
  ...props
1089
1904
  }) {
1090
- const [columnSizing, setColumnSizing] = React7.useState({});
1905
+ const {
1906
+ columnSizing,
1907
+ onColumnSizingChange
1908
+ } = useColumnResize({
1909
+ onColumnResize
1910
+ });
1091
1911
  const {
1092
1912
  sorting,
1093
1913
  onSortingChange
@@ -1106,15 +1926,13 @@ function ObjectTable({
1106
1926
  columns,
1107
1927
  loading: isColumnsLoading
1108
1928
  } = useColumnDefs(objectType, columnDefinitions);
1109
- const columnVisibility = useColumnVisibility({
1110
- columnDefinitions
1111
- });
1112
1929
  const {
1113
1930
  rowSelection,
1114
1931
  isAllSelected,
1115
1932
  hasSelection,
1116
1933
  onToggleAll,
1117
- onToggleRow
1934
+ onToggleRow,
1935
+ enableRowSelection
1118
1936
  } = useRowSelection({
1119
1937
  selectionMode,
1120
1938
  selectedRows,
@@ -1128,32 +1946,45 @@ function ObjectTable({
1128
1946
  onToggleAll,
1129
1947
  onToggleRow
1130
1948
  });
1131
- const allColumns = React7.useMemo(() => {
1132
- return selectionColumn ? [selectionColumn, ...columns] : columns;
1133
- }, [selectionColumn, columns]);
1949
+ const {
1950
+ columnVisibility,
1951
+ onColumnVisibilityChange,
1952
+ columnOrder,
1953
+ onColumnOrderChange
1954
+ } = useColumnVisibility({
1955
+ allColumns: columns,
1956
+ onColumnVisibilityChanged
1957
+ });
1134
1958
  const {
1135
1959
  columnPinning,
1136
1960
  onColumnPinningChange
1137
1961
  } = useColumnPinning({
1138
1962
  columnDefinitions,
1139
- hasSelectionColumn: selectionColumn != null,
1963
+ hasSelectionColumn: enableRowSelection,
1140
1964
  onColumnsPinnedChanged
1141
1965
  });
1966
+ const allColumns = React10.useMemo(() => {
1967
+ return selectionColumn ? [selectionColumn, ...columns] : columns;
1968
+ }, [selectionColumn, columns]);
1142
1969
  const table = reactTable.useReactTable({
1143
1970
  data: data ?? [],
1144
1971
  columns: allColumns,
1145
1972
  getCoreRowModel: reactTable.getCoreRowModel(),
1146
1973
  state: {
1147
1974
  columnVisibility,
1975
+ columnOrder,
1148
1976
  rowSelection,
1149
1977
  sorting,
1150
1978
  columnSizing,
1151
1979
  columnPinning
1152
1980
  },
1153
1981
  onSortingChange,
1154
- onColumnSizingChange: setColumnSizing,
1982
+ onColumnSizingChange,
1155
1983
  onColumnPinningChange,
1156
- enableRowSelection: selectionMode !== "none",
1984
+ onColumnVisibilityChange,
1985
+ onColumnOrderChange,
1986
+ enableRowSelection,
1987
+ enableSorting: enableOrdering,
1157
1988
  columnResizeMode: "onChange",
1158
1989
  columnResizeDirection: "ltr",
1159
1990
  manualSorting: true,
@@ -1163,11 +1994,17 @@ function ObjectTable({
1163
1994
  },
1164
1995
  getRowId
1165
1996
  });
1166
- const onRenderCellContextMenu = React7.useCallback((row, cell) => {
1997
+ const onRenderCellContextMenu = React10.useCallback((row, cell) => {
1167
1998
  return renderCellContextMenu?.(row, cell.getValue());
1168
1999
  }, [renderCellContextMenu]);
1169
2000
  const isTableLoading = isLoading || isColumnsLoading;
1170
- return /* @__PURE__ */ React7__default.default.createElement(BaseTable, {
2001
+ const headerMenuFeatureFlags = React10.useMemo(() => ({
2002
+ showSortingItems: enableOrdering,
2003
+ showPinningItems: enableColumnPinning,
2004
+ showResizeItem: enableColumnResizing,
2005
+ showConfigItem: enableColumnConfig
2006
+ }), [enableOrdering, enableColumnPinning, enableColumnResizing, enableColumnConfig]);
2007
+ return /* @__PURE__ */ React10__default.default.createElement(BaseTable, {
1171
2008
  table,
1172
2009
  isLoading: isTableLoading,
1173
2010
  fetchNextPage: fetchMore,
@@ -1175,11 +2012,13 @@ function ObjectTable({
1175
2012
  rowHeight: props.rowHeight,
1176
2013
  renderCellContextMenu: onRenderCellContextMenu,
1177
2014
  className: props.className,
1178
- error
2015
+ error,
2016
+ headerMenuFeatureFlags
1179
2017
  });
1180
2018
  }
1181
2019
 
1182
2020
  exports.BaseTable = BaseTable;
2021
+ exports.ColumnConfigDialog = ColumnConfigDialog;
1183
2022
  exports.ObjectTable = ObjectTable;
1184
2023
  //# sourceMappingURL=experimental.cjs.map
1185
2024
  //# sourceMappingURL=experimental.cjs.map