@galaxy-io/dls 1.2.6 → 1.3.0

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 (297) hide show
  1. package/README.md +2 -0
  2. package/dist/avatar/Avatar.d.ts +2 -1
  3. package/dist/avatar/Avatar.js +103 -14
  4. package/dist/buttons/Button.d.ts +6 -1
  5. package/dist/buttons/Button.js +8 -4
  6. package/dist/charts/BarChart.d.ts +30 -20
  7. package/dist/charts/BarChart.js +216 -250
  8. package/dist/charts/ChartAxis.d.ts +47 -22
  9. package/dist/charts/ChartAxis.js +81 -60
  10. package/dist/charts/ChartEmptyState.d.ts +17 -0
  11. package/dist/charts/ChartEmptyState.js +29 -0
  12. package/dist/charts/ChartFrame.d.ts +82 -0
  13. package/dist/charts/ChartFrame.js +86 -0
  14. package/dist/charts/ChartLegend.d.ts +27 -4
  15. package/dist/charts/ChartLegend.js +46 -23
  16. package/dist/charts/ChartPrimitives.d.ts +195 -0
  17. package/dist/charts/ChartPrimitives.js +268 -0
  18. package/dist/charts/ChartTooltip.d.ts +27 -6
  19. package/dist/charts/ChartTooltip.js +56 -50
  20. package/dist/charts/LineChart.d.ts +42 -20
  21. package/dist/charts/LineChart.js +186 -237
  22. package/dist/charts/PieChart.d.ts +48 -32
  23. package/dist/charts/PieChart.js +159 -171
  24. package/dist/charts/barChartGeometry.d.ts +87 -0
  25. package/dist/charts/barChartGeometry.js +218 -0
  26. package/dist/charts/chartFormat.d.ts +19 -0
  27. package/dist/charts/chartFormat.js +59 -0
  28. package/dist/charts/chartScales.d.ts +84 -0
  29. package/dist/charts/chartScales.js +111 -0
  30. package/dist/charts/chartTheme.d.ts +18 -0
  31. package/dist/charts/chartTheme.js +26 -0
  32. package/dist/charts/constants.d.ts +225 -18
  33. package/dist/charts/constants.js +240 -32
  34. package/dist/charts/lineChartGeometry.d.ts +54 -0
  35. package/dist/charts/lineChartGeometry.js +143 -0
  36. package/dist/charts/pieChartGeometry.d.ts +48 -0
  37. package/dist/charts/pieChartGeometry.js +89 -0
  38. package/dist/charts/types.d.ts +522 -54
  39. package/dist/charts/types.js +136 -0
  40. package/dist/charts/useChartDimensions.d.ts +40 -0
  41. package/dist/charts/useChartDimensions.js +53 -0
  42. package/dist/charts/useChartFormatters.d.ts +19 -0
  43. package/dist/charts/useChartFormatters.js +20 -0
  44. package/dist/charts/useChartInteraction.d.ts +71 -0
  45. package/dist/charts/useChartInteraction.js +130 -0
  46. package/dist/charts/useChartTooltipPosition.d.ts +53 -0
  47. package/dist/charts/useChartTooltipPosition.js +39 -0
  48. package/dist/hooks/useElementClientSize.d.ts +20 -0
  49. package/dist/hooks/useElementClientSize.js +43 -0
  50. package/dist/inputs/CheckboxInput.d.ts +7 -2
  51. package/dist/inputs/CheckboxInput.js +30 -14
  52. package/dist/inputs/Input.d.ts +5 -2
  53. package/dist/inputs/Input.js +20 -17
  54. package/dist/inputs/MultiSelectInput.js +1 -1
  55. package/dist/inputs/RadioInput.js +7 -2
  56. package/dist/styles.css +68 -75
  57. package/dist/table/InfiniteSpreadsheet.d.ts +6 -0
  58. package/dist/table/InfiniteSpreadsheet.js +235 -0
  59. package/dist/table/InfiniteTable.d.ts +7 -88
  60. package/dist/table/InfiniteTable.js +366 -577
  61. package/dist/{spreadsheet → table}/SpreadsheetCell.d.ts +6 -4
  62. package/dist/table/SpreadsheetCell.js +71 -0
  63. package/dist/{spreadsheet → table}/SpreadsheetCellEditor.js +27 -21
  64. package/dist/table/SpreadsheetHeaderCell.d.ts +23 -0
  65. package/dist/table/SpreadsheetHeaderCell.js +91 -0
  66. package/dist/table/SpreadsheetMenuItem.d.ts +14 -0
  67. package/dist/table/SpreadsheetMenuItem.js +33 -0
  68. package/dist/table/SpreadsheetPrimitives.d.ts +172 -0
  69. package/dist/table/SpreadsheetPrimitives.js +105 -0
  70. package/dist/table/SpreadsheetRow.d.ts +33 -0
  71. package/dist/table/SpreadsheetRow.js +73 -0
  72. package/dist/{spreadsheet → table}/SpreadsheetRowActionCell.d.ts +5 -7
  73. package/dist/table/SpreadsheetRowActionCell.js +51 -0
  74. package/dist/table/TableExpandCell.d.ts +11 -0
  75. package/dist/table/TableExpandCell.js +24 -0
  76. package/dist/table/TableExpandedRow.d.ts +16 -0
  77. package/dist/table/TableExpandedRow.js +77 -0
  78. package/dist/table/TableHeaderCellContent.d.ts +30 -0
  79. package/dist/table/TableHeaderCellContent.js +48 -0
  80. package/dist/table/TablePrimitives.d.ts +307 -0
  81. package/dist/table/TablePrimitives.js +298 -0
  82. package/dist/table/TableSelectCell.d.ts +18 -0
  83. package/dist/table/TableSelectCell.js +26 -0
  84. package/dist/table/TableStatusRow.d.ts +18 -0
  85. package/dist/table/TableStatusRow.js +50 -0
  86. package/dist/table/VirtualizedInfiniteTable.d.ts +11 -27
  87. package/dist/table/VirtualizedInfiniteTable.js +182 -317
  88. package/dist/table/types.d.ts +249 -0
  89. package/dist/table/types.js +51 -0
  90. package/dist/table/useInfiniteScrollSentinel.d.ts +24 -0
  91. package/dist/table/useInfiniteScrollSentinel.js +53 -0
  92. package/dist/{spreadsheet/hooks → table}/useSpreadsheetEditing.d.ts +1 -1
  93. package/dist/{spreadsheet/hooks → table}/useSpreadsheetEditing.js +1 -1
  94. package/dist/table/useTableColumnLayout.d.ts +28 -0
  95. package/dist/table/useTableColumnLayout.js +63 -0
  96. package/dist/table/useTableColumnResize.d.ts +38 -0
  97. package/dist/table/useTableColumnResize.js +155 -0
  98. package/dist/table/useTableKeyboardNavigation.d.ts +25 -0
  99. package/dist/table/useTableKeyboardNavigation.js +83 -0
  100. package/dist/table/useTableRowExpansion.d.ts +24 -0
  101. package/dist/table/useTableRowExpansion.js +62 -0
  102. package/dist/table/useTableRowSelection.d.ts +27 -0
  103. package/dist/table/useTableRowSelection.js +94 -0
  104. package/dist/table/utils.d.ts +50 -0
  105. package/dist/table/utils.js +78 -0
  106. package/dist/text/MarkdownText.js +45 -27
  107. package/dist/theme/variants/dark.js +1 -1
  108. package/dist/widget/Widget.d.ts +2 -0
  109. package/dist/widget/Widget.js +14 -7
  110. package/package.json +1 -5
  111. package/dist/assets/components/enrichment/PerplexityIcon.d.ts +0 -3
  112. package/dist/assets/components/enrichment/PerplexityIcon.js +0 -35
  113. package/dist/assets/components/enrichment/TavilyIcon.d.ts +0 -3
  114. package/dist/assets/components/enrichment/TavilyIcon.js +0 -15
  115. package/dist/assets/components/onboarding/TenantSetupDark.d.ts +0 -3
  116. package/dist/assets/components/onboarding/TenantSetupDark.js +0 -498
  117. package/dist/assets/components/onboarding/TenantSetupLight.d.ts +0 -3
  118. package/dist/assets/components/onboarding/TenantSetupLight.js +0 -482
  119. package/dist/assets/components/onboarding/UserSetupDark.d.ts +0 -3
  120. package/dist/assets/components/onboarding/UserSetupDark.js +0 -1086
  121. package/dist/assets/components/onboarding/UserSetupLight.d.ts +0 -3
  122. package/dist/assets/components/onboarding/UserSetupLight.js +0 -1024
  123. package/dist/assets/components/onboarding/WorkspaceSetupBuildDark.d.ts +0 -3
  124. package/dist/assets/components/onboarding/WorkspaceSetupBuildDark.js +0 -466
  125. package/dist/assets/components/onboarding/WorkspaceSetupBuildLight.d.ts +0 -3
  126. package/dist/assets/components/onboarding/WorkspaceSetupBuildLight.js +0 -460
  127. package/dist/assets/components/onboarding/WorkspaceSetupConnectDark.d.ts +0 -3
  128. package/dist/assets/components/onboarding/WorkspaceSetupConnectDark.js +0 -336
  129. package/dist/assets/components/onboarding/WorkspaceSetupConnectLight.d.ts +0 -3
  130. package/dist/assets/components/onboarding/WorkspaceSetupConnectLight.js +0 -336
  131. package/dist/assets/components/onboarding/WorkspaceSetupIntegrateDark.d.ts +0 -3
  132. package/dist/assets/components/onboarding/WorkspaceSetupIntegrateDark.js +0 -153
  133. package/dist/assets/components/onboarding/WorkspaceSetupIntegrateLight.d.ts +0 -3
  134. package/dist/assets/components/onboarding/WorkspaceSetupIntegrateLight.js +0 -153
  135. package/dist/assets/components/projects/MappingMethodAutoIntrospectDark.d.ts +0 -3
  136. package/dist/assets/components/projects/MappingMethodAutoIntrospectDark.js +0 -117
  137. package/dist/assets/components/projects/MappingMethodAutoIntrospectLight.d.ts +0 -3
  138. package/dist/assets/components/projects/MappingMethodAutoIntrospectLight.js +0 -117
  139. package/dist/assets/components/projects/MappingMethodBlankDark.d.ts +0 -3
  140. package/dist/assets/components/projects/MappingMethodBlankDark.js +0 -150
  141. package/dist/assets/components/projects/MappingMethodBlankDarkHovered.d.ts +0 -3
  142. package/dist/assets/components/projects/MappingMethodBlankDarkHovered.js +0 -150
  143. package/dist/assets/components/projects/MappingMethodBlankLight.d.ts +0 -3
  144. package/dist/assets/components/projects/MappingMethodBlankLight.js +0 -150
  145. package/dist/assets/components/projects/MappingMethodBlankLightHovered.d.ts +0 -3
  146. package/dist/assets/components/projects/MappingMethodBlankLightHovered.js +0 -150
  147. package/dist/assets/components/projects/MappingMethodJsonDark.d.ts +0 -3
  148. package/dist/assets/components/projects/MappingMethodJsonDark.js +0 -90
  149. package/dist/assets/components/projects/MappingMethodJsonDarkHovered.d.ts +0 -3
  150. package/dist/assets/components/projects/MappingMethodJsonDarkHovered.js +0 -90
  151. package/dist/assets/components/projects/MappingMethodJsonLight.d.ts +0 -3
  152. package/dist/assets/components/projects/MappingMethodJsonLight.js +0 -90
  153. package/dist/assets/components/projects/MappingMethodJsonLightHovered.d.ts +0 -3
  154. package/dist/assets/components/projects/MappingMethodJsonLightHovered.js +0 -90
  155. package/dist/assets/components/projects/ProjectsEmptyStateDark.d.ts +0 -3
  156. package/dist/assets/components/projects/ProjectsEmptyStateDark.js +0 -454
  157. package/dist/assets/components/projects/ProjectsEmptyStateLight.d.ts +0 -3
  158. package/dist/assets/components/projects/ProjectsEmptyStateLight.js +0 -456
  159. package/dist/assets/components/root/CreateProjectActionCardDark.d.ts +0 -3
  160. package/dist/assets/components/root/CreateProjectActionCardDark.js +0 -1796
  161. package/dist/assets/components/root/CreateProjectActionCardDarkHovered.d.ts +0 -3
  162. package/dist/assets/components/root/CreateProjectActionCardDarkHovered.js +0 -1796
  163. package/dist/assets/components/root/CreateProjectActionCardLight.d.ts +0 -3
  164. package/dist/assets/components/root/CreateProjectActionCardLight.js +0 -1786
  165. package/dist/assets/components/root/CreateProjectActionCardLightHovered.d.ts +0 -3
  166. package/dist/assets/components/root/CreateProjectActionCardLightHovered.js +0 -1786
  167. package/dist/assets/components/root/CreateSourceActionCardDark.d.ts +0 -3
  168. package/dist/assets/components/root/CreateSourceActionCardDark.js +0 -879
  169. package/dist/assets/components/root/CreateSourceActionCardDarkHovered.d.ts +0 -3
  170. package/dist/assets/components/root/CreateSourceActionCardDarkHovered.js +0 -879
  171. package/dist/assets/components/root/CreateSourceActionCardLight.d.ts +0 -3
  172. package/dist/assets/components/root/CreateSourceActionCardLight.js +0 -889
  173. package/dist/assets/components/root/CreateSourceActionCardLightHovered.d.ts +0 -3
  174. package/dist/assets/components/root/CreateSourceActionCardLightHovered.js +0 -889
  175. package/dist/assets/components/sources/AttioIcon.d.ts +0 -3
  176. package/dist/assets/components/sources/AttioIcon.js +0 -11
  177. package/dist/assets/components/sources/BigquerySourceIcon.d.ts +0 -3
  178. package/dist/assets/components/sources/BigquerySourceIcon.js +0 -39
  179. package/dist/assets/components/sources/BrowserbaseSourceIcon.d.ts +0 -3
  180. package/dist/assets/components/sources/BrowserbaseSourceIcon.js +0 -35
  181. package/dist/assets/components/sources/ClickhouseLogoSourceIconDark.d.ts +0 -3
  182. package/dist/assets/components/sources/ClickhouseLogoSourceIconDark.js +0 -13
  183. package/dist/assets/components/sources/ClickhouseLogoSourceIconLight.d.ts +0 -3
  184. package/dist/assets/components/sources/ClickhouseLogoSourceIconLight.js +0 -13
  185. package/dist/assets/components/sources/ConfluenceSourceIcon.d.ts +0 -3
  186. package/dist/assets/components/sources/ConfluenceSourceIcon.js +0 -30
  187. package/dist/assets/components/sources/GithubSourceIcon.d.ts +0 -3
  188. package/dist/assets/components/sources/GithubSourceIcon.js +0 -27
  189. package/dist/assets/components/sources/GoogleDriveIcon.d.ts +0 -3
  190. package/dist/assets/components/sources/GoogleDriveIcon.js +0 -45
  191. package/dist/assets/components/sources/HubspotSourceIcon.d.ts +0 -3
  192. package/dist/assets/components/sources/HubspotSourceIcon.js +0 -14
  193. package/dist/assets/components/sources/JiraSourceIcon.d.ts +0 -3
  194. package/dist/assets/components/sources/JiraSourceIcon.js +0 -54
  195. package/dist/assets/components/sources/LinearSourceIcon.d.ts +0 -3
  196. package/dist/assets/components/sources/LinearSourceIcon.js +0 -14
  197. package/dist/assets/components/sources/MysqlLogoSourceIconDark.d.ts +0 -3
  198. package/dist/assets/components/sources/MysqlLogoSourceIconDark.js +0 -17
  199. package/dist/assets/components/sources/NetsuiteSourceIcon.d.ts +0 -3
  200. package/dist/assets/components/sources/NetsuiteSourceIcon.js +0 -32
  201. package/dist/assets/components/sources/NotionIcon.d.ts +0 -3
  202. package/dist/assets/components/sources/NotionIcon.js +0 -20
  203. package/dist/assets/components/sources/PostgresqlIcon.d.ts +0 -3
  204. package/dist/assets/components/sources/PostgresqlIcon.js +0 -61
  205. package/dist/assets/components/sources/S3Icon.d.ts +0 -3
  206. package/dist/assets/components/sources/S3Icon.js +0 -76
  207. package/dist/assets/components/sources/SalesforceSourceIcon.d.ts +0 -3
  208. package/dist/assets/components/sources/SalesforceSourceIcon.js +0 -23
  209. package/dist/assets/components/sources/SlackIcon.d.ts +0 -3
  210. package/dist/assets/components/sources/SlackIcon.js +0 -32
  211. package/dist/assets/components/sources/SnowflakeLogoSourceIconDark.d.ts +0 -3
  212. package/dist/assets/components/sources/SnowflakeLogoSourceIconDark.js +0 -14
  213. package/dist/assets/components/sources/SnowflakeLogoSourceIconLight.d.ts +0 -3
  214. package/dist/assets/components/sources/SnowflakeLogoSourceIconLight.js +0 -14
  215. package/dist/assets/components/sources/WikipediaSourceIcon.d.ts +0 -3
  216. package/dist/assets/components/sources/WikipediaSourceIcon.js +0 -1490
  217. package/dist/avatar/AvatarEmpty.d.ts +0 -7
  218. package/dist/avatar/AvatarEmpty.js +0 -99
  219. package/dist/avatar/types.d.ts +0 -5
  220. package/dist/avatar/types.js +0 -9
  221. package/dist/charts/utils.d.ts +0 -29
  222. package/dist/charts/utils.js +0 -62
  223. package/dist/icons/BackIcon.d.ts +0 -3
  224. package/dist/icons/BackIcon.js +0 -13
  225. package/dist/icons/CloseIcon.d.ts +0 -3
  226. package/dist/icons/CloseIcon.js +0 -13
  227. package/dist/icons/CreateIcon.d.ts +0 -3
  228. package/dist/icons/CreateIcon.js +0 -13
  229. package/dist/icons/ForwardIcon.d.ts +0 -3
  230. package/dist/icons/ForwardIcon.js +0 -13
  231. package/dist/icons/HelpIcon.d.ts +0 -3
  232. package/dist/icons/HelpIcon.js +0 -14
  233. package/dist/icons/ProjectsIcon.d.ts +0 -3
  234. package/dist/icons/ProjectsIcon.js +0 -12
  235. package/dist/icons/SearchIcon.d.ts +0 -3
  236. package/dist/icons/SearchIcon.js +0 -12
  237. package/dist/icons/SourcesIcon.d.ts +0 -3
  238. package/dist/icons/SourcesIcon.js +0 -12
  239. package/dist/icons/TextIcon.d.ts +0 -4
  240. package/dist/icons/TextIcon.js +0 -22
  241. package/dist/icons/WebScrapeIcon.d.ts +0 -4
  242. package/dist/icons/WebScrapeIcon.js +0 -22
  243. package/dist/icons/WebhookIcon.d.ts +0 -4
  244. package/dist/icons/WebhookIcon.js +0 -22
  245. package/dist/icons/sources/AttioLogomark.d.ts +0 -4
  246. package/dist/icons/sources/AttioLogomark.js +0 -8
  247. package/dist/icons/sources/BrowserbaseLogomark.d.ts +0 -4
  248. package/dist/icons/sources/BrowserbaseLogomark.js +0 -8
  249. package/dist/icons/sources/ClickhouseLogomark.d.ts +0 -4
  250. package/dist/icons/sources/ClickhouseLogomark.js +0 -16
  251. package/dist/icons/sources/ConfluenceLogomark.d.ts +0 -4
  252. package/dist/icons/sources/ConfluenceLogomark.js +0 -8
  253. package/dist/icons/sources/GithubLogomark.d.ts +0 -4
  254. package/dist/icons/sources/GithubLogomark.js +0 -8
  255. package/dist/icons/sources/GoogleBigqueryLogomark.d.ts +0 -4
  256. package/dist/icons/sources/GoogleBigqueryLogomark.js +0 -8
  257. package/dist/icons/sources/GoogleDriveLogomark.d.ts +0 -4
  258. package/dist/icons/sources/GoogleDriveLogomark.js +0 -8
  259. package/dist/icons/sources/HubspotLogomark.d.ts +0 -4
  260. package/dist/icons/sources/HubspotLogomark.js +0 -8
  261. package/dist/icons/sources/JiraLogomark.d.ts +0 -4
  262. package/dist/icons/sources/JiraLogomark.js +0 -8
  263. package/dist/icons/sources/LinearLogomark.d.ts +0 -4
  264. package/dist/icons/sources/LinearLogomark.js +0 -8
  265. package/dist/icons/sources/MySQLLogomark.d.ts +0 -4
  266. package/dist/icons/sources/MySQLLogomark.js +0 -8
  267. package/dist/icons/sources/NetsuiteLogomark.d.ts +0 -4
  268. package/dist/icons/sources/NetsuiteLogomark.js +0 -8
  269. package/dist/icons/sources/NotionLogomark.d.ts +0 -4
  270. package/dist/icons/sources/NotionLogomark.js +0 -8
  271. package/dist/icons/sources/PostgresLogomark.d.ts +0 -4
  272. package/dist/icons/sources/PostgresLogomark.js +0 -8
  273. package/dist/icons/sources/S3Logomark.d.ts +0 -4
  274. package/dist/icons/sources/S3Logomark.js +0 -8
  275. package/dist/icons/sources/SalesforceLogomark.d.ts +0 -4
  276. package/dist/icons/sources/SalesforceLogomark.js +0 -8
  277. package/dist/icons/sources/SlackLogoIconmark.d.ts +0 -4
  278. package/dist/icons/sources/SlackLogoIconmark.js +0 -8
  279. package/dist/icons/sources/SnowflakeLogomark.d.ts +0 -4
  280. package/dist/icons/sources/SnowflakeLogomark.js +0 -16
  281. package/dist/icons/sources/WikipediaLogomark.d.ts +0 -4
  282. package/dist/icons/sources/WikipediaLogomark.js +0 -8
  283. package/dist/spreadsheet/InfiniteSpreadsheet.d.ts +0 -3
  284. package/dist/spreadsheet/InfiniteSpreadsheet.js +0 -265
  285. package/dist/spreadsheet/SpreadsheetAddColumnButton.d.ts +0 -6
  286. package/dist/spreadsheet/SpreadsheetAddColumnButton.js +0 -32
  287. package/dist/spreadsheet/SpreadsheetCell.js +0 -115
  288. package/dist/spreadsheet/SpreadsheetHeaderCell.d.ts +0 -18
  289. package/dist/spreadsheet/SpreadsheetHeaderCell.js +0 -141
  290. package/dist/spreadsheet/SpreadsheetRow.d.ts +0 -21
  291. package/dist/spreadsheet/SpreadsheetRow.js +0 -68
  292. package/dist/spreadsheet/SpreadsheetRowActionCell.js +0 -78
  293. package/dist/spreadsheet/hooks/useColumnResize.d.ts +0 -6
  294. package/dist/spreadsheet/hooks/useColumnResize.js +0 -46
  295. package/dist/spreadsheet/types.d.ts +0 -92
  296. package/dist/spreadsheet/types.js +0 -21
  297. /package/dist/{spreadsheet → table}/SpreadsheetCellEditor.d.ts +0 -0
@@ -1,403 +1,136 @@
1
- import { withTheme } from "../theme/GalaxyTheme.js";
2
- import { getCssSizeValue } from "../utils/linaria.js";
3
- import Text, { TextSize, TextVariant, TextWeight } from "../text/Text.js";
4
- import Icon, { IconVariant } from "../icons/Icon.js";
5
- import Button, { ButtonSize, ButtonVariant } from "../buttons/Button.js";
6
- /* empty css */
7
- import { styled } from "@linaria/react";
8
- import { match } from "ts-pattern";
9
- import React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
1
+ import Text, { TextSize, TextVariant } from "../text/Text.js";
2
+ import { ColumnAlign, ColumnPin, ColumnResizeMode, TableDensity, TableVariant } from "./types.js";
3
+ import { EXPAND_COLUMN_ID, SELECT_COLUMN_ID, estimateColumnWidth } from "./utils.js";
4
+ import { useTableRowSelection } from "./useTableRowSelection.js";
5
+ import { useTableRowExpansion } from "./useTableRowExpansion.js";
6
+ import { useTableKeyboardNavigation } from "./useTableKeyboardNavigation.js";
7
+ import { useTableColumnResize } from "./useTableColumnResize.js";
8
+ import { useTableColumnLayout } from "./useTableColumnLayout.js";
9
+ import { useInfiniteScrollSentinel } from "./useInfiniteScrollSentinel.js";
10
+ import { useElementClientSize } from "../hooks/useElementClientSize.js";
11
+ import { InfiniteScrollSentinel, StyledTable, TableBody, TableDataCell, TableHead, TableHeaderCell, TableHeaderRow, TableLoadingRow, TableOuterContainer, TableRow, TableScrollContainer } from "./TablePrimitives.js";
12
+ import TableHeaderCellContent from "./TableHeaderCellContent.js";
13
+ import TableStatusRow from "./TableStatusRow.js";
14
+ import TableSelectCell from "./TableSelectCell.js";
15
+ import TableExpandedRow from "./TableExpandedRow.js";
16
+ import TableExpandCell from "./TableExpandCell.js";
17
+ import React, { useCallback, useEffect, useId, useMemo, useRef } from "react";
10
18
  import { jsx, jsxs } from "react/jsx-runtime";
11
- import { CaretDownIcon, CaretRightIcon, CaretUpDownIcon, SortAscendingIcon, SortDescendingIcon } from "@phosphor-icons/react";
12
- import { flexRender, getCoreRowModel, getSortedRowModel, useReactTable } from "@tanstack/react-table";
19
+ import { flexRender, getCoreRowModel, getExpandedRowModel, getSortedRowModel, useReactTable } from "@tanstack/react-table";
13
20
  //#region src/table/InfiniteTable.tsx
14
- var TableVariant = /* @__PURE__ */ function(TableVariant) {
15
- TableVariant["BASE"] = "BASE";
16
- TableVariant["PRIMARY"] = "PRIMARY";
17
- TableVariant["SECONDARY"] = "SECONDARY";
18
- TableVariant["TERTIARY"] = "TERTIARY";
19
- return TableVariant;
20
- }({});
21
- var TableDensity = /* @__PURE__ */ function(TableDensity) {
22
- TableDensity["SMALL"] = "SMALL";
23
- TableDensity["MEDIUM"] = "MEDIUM";
24
- TableDensity["LARGE"] = "LARGE";
25
- return TableDensity;
26
- }({});
27
- var ColumnPin = /* @__PURE__ */ function(ColumnPin) {
28
- ColumnPin["LEFT"] = "LEFT";
29
- ColumnPin["RIGHT"] = "RIGHT";
30
- return ColumnPin;
31
- }({});
32
- var ColumnAlign = /* @__PURE__ */ function(ColumnAlign) {
33
- ColumnAlign["LEFT"] = "LEFT";
34
- ColumnAlign["CENTER"] = "CENTER";
35
- ColumnAlign["RIGHT"] = "RIGHT";
36
- return ColumnAlign;
37
- }({});
38
- /**
39
- * Estimate column width based on header name and sample data values.
40
- * Useful for auto-sizing table columns based on content.
41
- */
42
- var estimateColumnWidth = (columnName, sampleValues, options = {}) => {
43
- const { minWidth = 80, maxWidth = 400, charWidth = 8, padding = 32 } = options;
44
- const headerLength = columnName.length;
45
- const maxValueLength = sampleValues.reduce((max, val) => Math.max(max, String(val).length), 0);
46
- const estimatedWidth = Math.max(headerLength, maxValueLength) * charWidth + padding;
47
- return Math.max(minWidth, Math.min(maxWidth, estimatedWidth));
48
- };
49
- var EXPAND_COLUMN_ID = "__expand__";
50
- var EXPAND_COLUMN_WIDTH = 44;
51
- var TABLE_DENSITY_TO_BUTTON_SIZE_MAP = {
52
- ["SMALL"]: ButtonSize.SMALL,
53
- ["MEDIUM"]: ButtonSize.SMALL,
54
- ["LARGE"]: ButtonSize.MEDIUM
55
- };
56
- function getVariantBackgroundColor(theme, variant) {
57
- return match(variant).with("BASE", () => theme.color.background.base).with("PRIMARY", () => theme.color.background.primary).with("SECONDARY", () => theme.color.background.secondary).with("TERTIARY", () => theme.color.background.tertiary).with(void 0, () => theme.color.background.primary).exhaustive();
58
- }
59
- function getVariantHoverBackgroundColor(theme, variant) {
60
- return match(variant).with("BASE", () => theme.color.background.tertiary).with("PRIMARY", () => theme.color.background.tertiary).with("SECONDARY", () => theme.color.background.tertiary).with("TERTIARY", () => theme.color.background.secondary).with(void 0, () => theme.color.background.tertiary).exhaustive();
61
- }
62
- function getVariantSelectedBackgroundColor(theme, variant) {
63
- return match(variant).with("BASE", () => theme.color.background.secondary).with("PRIMARY", () => theme.color.background.secondary).with("SECONDARY", () => theme.color.background.primary).with("TERTIARY", () => theme.color.background.primary).with(void 0, () => theme.color.background.secondary).exhaustive();
64
- }
65
- var _exp = () => ({ $width, $fillWidth }) => {
66
- if ($fillWidth) return "100%";
67
- if ($width) return getCssSizeValue($width);
68
- return "auto";
69
- };
70
- var _exp2 = () => ({ $height, $fillHeight }) => {
71
- if ($fillHeight) return "100%";
72
- if ($height) return getCssSizeValue($height);
73
- return "auto";
74
- };
75
- var TableOuterContainer = withTheme(/*#__PURE__*/ styled("div")({
76
- name: "TableOuterContainer",
77
- class: "t15fnb8v",
78
- propsAsIs: false,
79
- vars: {
80
- "t15fnb8v-0": [_exp()],
81
- "t15fnb8v-1": [_exp2()]
82
- }
83
- }));
84
- var _exp3 = () => ({ $noLastRowPadding }) => $noLastRowPadding ? "0" : "8px";
85
- var TableScrollContainer = /*#__PURE__*/ styled("div")({
86
- name: "TableScrollContainer",
87
- class: "t1xd4vnx",
88
- propsAsIs: false,
89
- vars: { "t1xd4vnx-0": [_exp3()] }
90
- });
91
- var StyledTable = /*#__PURE__*/ styled("table")({
92
- name: "StyledTable",
93
- class: "sk741d9",
94
- propsAsIs: false
95
- });
96
- var TableHead = /*#__PURE__*/ styled("thead")({
97
- name: "TableHead",
98
- class: "t7f6tk3",
99
- propsAsIs: false
100
- });
101
- var TableBody = /*#__PURE__*/ styled("tbody")({
102
- name: "TableBody",
103
- class: "tl0vwdj",
104
- propsAsIs: false
105
- });
106
- var _exp4 = () => ({ $isClickable }) => $isClickable ? "pointer" : "default";
107
- var _exp5 = () => ({ $density }) => match($density).with("SMALL", () => "32px").with("MEDIUM", () => "48px").with("LARGE", () => "56px").with(void 0, () => "48px").exhaustive();
108
- var _exp6 = () => ({ $isSelected, $variant, theme }) => $isSelected ? getVariantSelectedBackgroundColor(theme, $variant) : getVariantBackgroundColor(theme, $variant);
109
- var _exp7 = () => ({ $isExpanded, $isLastRow, theme }) => {
110
- if ($isExpanded || $isLastRow) return "none";
111
- return `0.5px solid ${theme.color.border.primary}`;
112
- };
113
- var _exp8 = () => ({ $isClickable, $isSelected, $variant, theme }) => {
114
- if ($isSelected) return getVariantSelectedBackgroundColor(theme, $variant);
115
- if ($isClickable) return getVariantHoverBackgroundColor(theme, $variant);
116
- return getVariantBackgroundColor(theme, $variant);
117
- };
118
- var TableRow = withTheme(/*#__PURE__*/ styled("tr")({
119
- name: "TableRow",
120
- class: "t1ikcerv",
121
- propsAsIs: false,
122
- vars: {
123
- "t1ikcerv-0": [_exp4()],
124
- "t1ikcerv-1": [_exp5()],
125
- "t1ikcerv-2": [_exp6()],
126
- "t1ikcerv-3": [_exp7()],
127
- "t1ikcerv-4": [_exp8()]
128
- }
129
- }));
130
- var TableHeaderRow = withTheme(/*#__PURE__*/ styled("tr")({
131
- name: "TableHeaderRow",
132
- class: "tswwjja",
133
- propsAsIs: false
134
- }));
135
- var _exp9 = () => ({ $density, $isExpandCell }) => {
136
- if ($isExpandCell) return "4px 6px";
137
- return `8px ${match($density).with("SMALL", () => "12px").with("MEDIUM", () => "16px").with("LARGE", () => "20px").with(void 0, () => "16px").exhaustive()}`;
138
- };
139
- var _exp0 = () => ({ $width }) => {
140
- if ($width) return `0 0 ${$width}px`;
141
- return "1 1 0";
142
- };
143
- var _exp1 = () => ({ $minWidth }) => {
144
- if ($minWidth) return `${$minWidth}px`;
145
- return "0";
146
- };
147
- var _exp10 = () => ({ $maxWidth }) => {
148
- if ($maxWidth) return `${$maxWidth}px`;
149
- return "none";
150
- };
151
- var _exp11 = () => ({ $align }) => match($align).with("LEFT", () => "left").with("CENTER", () => "center").with("RIGHT", () => "right").with(void 0, () => "left").exhaustive();
152
- var _exp12 = () => ({ theme }) => theme.color.border.primary;
153
- var _exp13 = () => ({ $variant, theme }) => getVariantBackgroundColor(theme, $variant);
154
- var _exp14 = () => ({ $align }) => match($align).with("LEFT", () => "flex-start").with("CENTER", () => "center").with("RIGHT", () => "flex-end").with(void 0, () => "flex-start").exhaustive();
155
- var _exp15 = () => ({ $isSortable }) => {
156
- if ($isSortable) return "pointer";
157
- return "default";
158
- };
159
- var _exp16 = () => ({ $pin }) => {
160
- if ($pin) return 25;
161
- return 20;
162
- };
163
- var _exp17 = () => ({ $pin, $pinnedOffset }) => {
164
- if ($pin === "LEFT" && $pinnedOffset !== void 0) return `${$pinnedOffset}px`;
165
- return "auto";
166
- };
167
- var _exp18 = () => ({ $pin, $pinnedOffset }) => {
168
- if ($pin === "RIGHT" && $pinnedOffset !== void 0) return `${$pinnedOffset}px`;
169
- return "auto";
170
- };
171
- var _exp19 = () => ({ $pin, theme }) => {
172
- if ($pin === "LEFT") return `0.5px solid ${theme.color.border.primary}`;
173
- return "none";
174
- };
175
- var _exp20 = () => ({ $pin, theme }) => {
176
- if ($pin === "RIGHT") return `0.5px solid ${theme.color.border.primary}`;
177
- return "none";
178
- };
179
- var TableHeaderCell = withTheme(/*#__PURE__*/ styled("th")({
180
- name: "TableHeaderCell",
181
- class: "t9wn1rd",
182
- propsAsIs: false,
183
- vars: {
184
- "t9wn1rd-0": [_exp9()],
185
- "t9wn1rd-1": [_exp0()],
186
- "t9wn1rd-2": [_exp1()],
187
- "t9wn1rd-3": [_exp10()],
188
- "t9wn1rd-4": [_exp11()],
189
- "t9wn1rd-5": [_exp12()],
190
- "t9wn1rd-6": [_exp13()],
191
- "t9wn1rd-7": [_exp14()],
192
- "t9wn1rd-8": [_exp15()],
193
- "t9wn1rd-9": [_exp16()],
194
- "t9wn1rd-10": [_exp17()],
195
- "t9wn1rd-11": [_exp18()],
196
- "t9wn1rd-12": [_exp19()],
197
- "t9wn1rd-13": [_exp20()]
198
- }
199
- }));
200
- var _exp21 = () => ({ $density, $isExpandCell }) => {
201
- if ($isExpandCell) return "4px 6px";
202
- return `8px ${match($density).with("SMALL", () => "12px").with("MEDIUM", () => "16px").with("LARGE", () => "20px").with(void 0, () => "16px").exhaustive()}`;
203
- };
204
- var _exp22 = () => ({ theme }) => theme.color.text.primary;
205
- var _exp23 = () => ({ $width }) => {
206
- if ($width) return `0 0 ${$width}px`;
207
- return "1 1 0";
208
- };
209
- var _exp24 = () => ({ $minWidth }) => {
210
- if ($minWidth) return `${$minWidth}px`;
211
- return "0";
212
- };
213
- var _exp25 = () => ({ $maxWidth }) => {
214
- if ($maxWidth) return `${$maxWidth}px`;
215
- return "none";
216
- };
217
- var _exp26 = () => ({ $align }) => match($align).with("LEFT", () => "left").with("CENTER", () => "center").with("RIGHT", () => "right").with(void 0, () => "left").exhaustive();
218
- var _exp27 = () => ({ $align }) => match($align).with("LEFT", () => "flex-start").with("CENTER", () => "center").with("RIGHT", () => "flex-end").with(void 0, () => "flex-start").exhaustive();
219
- var _exp28 = () => ({ $pin, $variant, theme }) => {
220
- if ($pin) return getVariantBackgroundColor(theme, $variant);
221
- return "transparent";
222
- };
223
- var _exp29 = () => ({ $pin }) => {
224
- if ($pin) return "sticky";
225
- return "static";
226
- };
227
- var _exp30 = () => ({ $pin }) => {
228
- if ($pin) return 5;
229
- return "auto";
230
- };
231
- var _exp31 = () => ({ $pin, $pinnedOffset }) => {
232
- if ($pin === "LEFT" && $pinnedOffset !== void 0) return `${$pinnedOffset}px`;
233
- return "auto";
234
- };
235
- var _exp32 = () => ({ $pin, $pinnedOffset }) => {
236
- if ($pin === "RIGHT" && $pinnedOffset !== void 0) return `${$pinnedOffset}px`;
237
- return "auto";
238
- };
239
- var _exp33 = () => ({ $pin, theme }) => {
240
- if ($pin === "LEFT") return `0.5px solid ${theme.color.border.primary}`;
241
- return "none";
242
- };
243
- var _exp34 = () => ({ $pin, theme }) => {
244
- if ($pin === "RIGHT") return `0.5px solid ${theme.color.border.primary}`;
245
- return "none";
246
- };
247
- var TableDataCell = withTheme(/*#__PURE__*/ styled("td")({
248
- name: "TableDataCell",
249
- class: "thlukz9",
250
- propsAsIs: false,
251
- vars: {
252
- "thlukz9-0": [_exp21()],
253
- "thlukz9-1": [_exp22()],
254
- "thlukz9-2": [_exp23()],
255
- "thlukz9-3": [_exp24()],
256
- "thlukz9-4": [_exp25()],
257
- "thlukz9-5": [_exp26()],
258
- "thlukz9-6": [_exp27()],
259
- "thlukz9-7": [_exp28()],
260
- "thlukz9-8": [_exp29()],
261
- "thlukz9-9": [_exp30()],
262
- "thlukz9-10": [_exp31()],
263
- "thlukz9-11": [_exp32()],
264
- "thlukz9-12": [_exp33()],
265
- "thlukz9-13": [_exp34()]
266
- }
267
- }));
268
- var HeaderContentWrapper = /*#__PURE__*/ styled("div")({
269
- name: "HeaderContentWrapper",
270
- class: "h1oppwyt",
271
- propsAsIs: false
272
- });
273
- var SortIconWrapper = /*#__PURE__*/ styled("div")({
274
- name: "SortIconWrapper",
275
- class: "s1we9pi1",
276
- propsAsIs: false
277
- });
278
- var EmptyContentWrapper = /*#__PURE__*/ styled("div")({
279
- name: "EmptyContentWrapper",
280
- class: "ezfy353",
281
- propsAsIs: false
282
- });
283
- var _exp35 = () => ({ $density }) => match($density).with("SMALL", () => "32px").with("MEDIUM", () => "48px").with("LARGE", () => "56px").with(void 0, () => "48px").exhaustive();
284
- var _exp36 = () => ({ theme }) => theme.color.border.primary;
285
- var _exp37 = () => ({ $variant, theme }) => getVariantBackgroundColor(theme, $variant);
286
- var LoadingRowWrapper = withTheme(/*#__PURE__*/ styled("tr")({
287
- name: "LoadingRowWrapper",
288
- class: "l1pcw3m6",
289
- propsAsIs: false,
290
- vars: {
291
- "l1pcw3m6-0": [_exp35()],
292
- "l1pcw3m6-1": [_exp36()],
293
- "l1pcw3m6-2": [_exp37()]
294
- }
295
- }));
296
- var _exp38 = () => ({ $minWidth }) => `${$minWidth}px`;
297
- var ExpandedRow = /*#__PURE__*/ styled("tr")({
298
- name: "ExpandedRow",
299
- class: "eo1carc",
300
- propsAsIs: false,
301
- vars: { "eo1carc-0": [_exp38()] }
302
- });
303
- var _exp39 = () => ({ $variant, theme }) => getVariantBackgroundColor(theme, $variant);
304
- var _exp40 = () => ({ $isLastRow, theme }) => $isLastRow ? "none" : `0.5px solid ${theme.color.border.primary}`;
305
- var ExpandedRowCell = withTheme(/*#__PURE__*/ styled("td")({
306
- name: "ExpandedRowCell",
307
- class: "e8l9d05",
308
- propsAsIs: false,
309
- vars: {
310
- "e8l9d05-0": [_exp39()],
311
- "e8l9d05-1": [_exp40()]
312
- }
313
- }));
314
- var _exp41 = () => ({ $width }) => $width !== void 0 ? `${$width}px` : "100%";
315
- var ExpandedViewport = /*#__PURE__*/ styled("div")({
316
- name: "ExpandedViewport",
317
- class: "e12m9dma",
318
- propsAsIs: false,
319
- vars: { "e12m9dma-0": [_exp41()] }
320
- });
321
- var _exp43 = () => ({ $variant, theme }) => getVariantBackgroundColor(theme, $variant);
322
- var _exp44 = () => ({ theme }) => theme.color.border.primary;
323
- var ExpandedGutter = withTheme(/*#__PURE__*/ styled("div")({
324
- name: "ExpandedGutter",
325
- class: "e1birhg7",
326
- propsAsIs: false,
327
- vars: {
328
- "e1birhg7-0": [_exp43()],
329
- "e1birhg7-1": [_exp44()]
330
- }
331
- }));
332
- var _exp46 = () => ({ theme }) => theme.color.border.primary;
333
- var ExpandedBody = withTheme(/*#__PURE__*/ styled("div")({
334
- name: "ExpandedBody",
335
- class: "e2tyxoq",
336
- propsAsIs: false,
337
- vars: { "e2tyxoq-0": [_exp46()] }
338
- }));
339
- var ExpandedContent = /*#__PURE__*/ styled("div")({
340
- name: "ExpandedContent",
341
- class: "ew9y6zt",
342
- propsAsIs: false
343
- });
344
21
  function InfiniteTable(props) {
345
- const { columns, data, getRowId, height, width, fillWidth, fillHeight, density = "MEDIUM", variant = "PRIMARY", hasNextPage, isFetchingNextPage, fetchNextPage, enableRowSelection, enableMultiRowSelection, rowSelection, onRowSelectionChange, enableSorting = false, enableMultiSort = false, sorting, onSortingChange, manualSorting = false, isLoading = false, isError = false, loadingRowCount = 5, contentWhenEmpty, contentWhenError, noHeader = false, noLastRowBorder = false, noLastRowPadding = false, onRowClick, onRowDoubleClick, onRowExpand, onTableReady } = props;
22
+ const { columns, data, getRowId, height, width, fillWidth, fillHeight, density = TableDensity.MEDIUM, variant = TableVariant.PRIMARY, hasNextPage, isFetchingNextPage, fetchNextPage, enableRowSelection, enableMultiRowSelection = true, rowSelection, defaultRowSelection, onRowSelectionChange, onSelectedRowsChange, showSelectionColumn = false, selectionColumnPin = ColumnPin.LEFT, enableSelectAll, enableSelectionRange = true, selectAllAriaLabel = "Select all rows", getRowSelectAriaLabel, enableSorting = false, enableMultiSort = false, sorting, onSortingChange, manualSorting = false, isLoading = false, isError = false, error, loadingRowCount = 5, contentWhenEmpty, contentWhenError, noHeader = false, noLastRowBorder = false, noLastRowPadding = false, onRowClick, onRowDoubleClick, onRowActivate, onRowExpand, expandedRowIds, defaultExpandedRowIds, onExpandedChange, getRowCanExpand, enableMultiRowExpansion = true, showExpandColumn = true, expandColumnPin = ColumnPin.LEFT, enableColumnResizing = false, columnSizing, defaultColumnSizing, onColumnSizingChange, columnResizeMode = ColumnResizeMode.ON_CHANGE, ariaLabel, ariaLabelledBy, getRowAriaLabel, enableRowFocus, onTableReady } = props;
23
+ const instanceId = useId();
346
24
  const scrollContainerRef = useRef(null);
347
- const [expandedRowId, setExpandedRowId] = useState(null);
348
- const [scrollContainerClientWidth, setScrollContainerClientWidth] = useState(null);
25
+ const headerRef = useRef(null);
26
+ const bodyRef = useRef(null);
27
+ const { width: viewportWidth, height: viewportHeight } = useElementClientSize(scrollContainerRef);
28
+ const { height: headerHeight } = useElementClientSize(headerRef);
29
+ const hasExpansion = onRowExpand !== void 0;
30
+ const hasExpandColumn = hasExpansion && showExpandColumn;
31
+ const isSelectable = showSelectionColumn || enableRowSelection !== void 0;
32
+ const resolvedEnableRowSelection = enableRowSelection ?? (showSelectionColumn ? true : void 0);
33
+ const canSelectAll = (enableSelectAll ?? enableMultiRowSelection) && enableMultiRowSelection;
34
+ const selection = useTableRowSelection({
35
+ rowSelection,
36
+ defaultRowSelection,
37
+ onRowSelectionChange,
38
+ enableMultiRowSelection,
39
+ enableSelectionRange,
40
+ onSelectedRowsChange
41
+ });
42
+ const expansion = useTableRowExpansion({
43
+ expandedRowIds,
44
+ defaultExpandedRowIds,
45
+ onExpandedChange,
46
+ enableMultiRowExpansion
47
+ });
48
+ const resize = useTableColumnResize({
49
+ columns,
50
+ enabled: enableColumnResizing,
51
+ columnSizing,
52
+ defaultColumnSizing,
53
+ onColumnSizingChange,
54
+ mode: columnResizeMode
55
+ });
56
+ const { canResizeColumn } = resize;
57
+ const rowsRef = useRef([]);
58
+ const { toggleRow, toggleAll, notifySelectedRows } = selection;
59
+ const toggleRowSelection = useCallback((row, isShiftKey) => {
60
+ toggleRow(row, rowsRef.current, isShiftKey);
61
+ }, [toggleRow]);
349
62
  const resolvedColumns = useMemo(() => {
350
- if (!onRowExpand) return columns;
351
- return [{
63
+ if (!hasExpandColumn && !showSelectionColumn) return columns;
64
+ const syntheticColumns = [];
65
+ if (showSelectionColumn) syntheticColumns.push({
66
+ id: SELECT_COLUMN_ID,
67
+ size: 44,
68
+ minSize: 44,
69
+ maxSize: 44,
70
+ pin: selectionColumnPin,
71
+ align: ColumnAlign.CENTER,
72
+ enableResizing: false,
73
+ header: canSelectAll ? ({ table }) => {
74
+ const rows = table.getRowModel().rows;
75
+ const selectableRows = rows.filter((row) => row.getCanSelect());
76
+ const selectedCount = selectableRows.filter((row) => row.getIsSelected()).length;
77
+ return /* @__PURE__ */ jsx(TableSelectCell, {
78
+ isChecked: selectableRows.length > 0 && selectedCount === selectableRows.length,
79
+ isIndeterminate: selectedCount > 0 && selectedCount < selectableRows.length,
80
+ isDisabled: selectableRows.length === 0,
81
+ density,
82
+ ariaLabel: selectAllAriaLabel,
83
+ onChange: (isChecked) => toggleAll(rows, isChecked)
84
+ });
85
+ } : () => null,
86
+ cell: ({ row }) => /* @__PURE__ */ jsx(TableSelectCell, {
87
+ isChecked: row.getIsSelected(),
88
+ isDisabled: !row.getCanSelect(),
89
+ density,
90
+ ariaLabel: getRowSelectAriaLabel?.(row) ?? `Select row ${row.index + 1}`,
91
+ onChange: (_isChecked, isShiftKey) => toggleRowSelection(row, isShiftKey)
92
+ }),
93
+ cellLoading: () => null
94
+ });
95
+ if (hasExpandColumn) syntheticColumns.push({
352
96
  id: EXPAND_COLUMN_ID,
97
+ size: 44,
98
+ minSize: 44,
99
+ maxSize: 44,
100
+ pin: expandColumnPin,
101
+ align: ColumnAlign.CENTER,
102
+ enableResizing: false,
353
103
  header: () => null,
354
- size: EXPAND_COLUMN_WIDTH,
355
- minSize: EXPAND_COLUMN_WIDTH,
356
- maxSize: EXPAND_COLUMN_WIDTH,
357
- pin: "LEFT",
358
- align: "CENTER",
359
104
  cell: ({ row }) => {
360
- const isExpanded = expandedRowId === row.id;
361
- const buttonSize = TABLE_DENSITY_TO_BUTTON_SIZE_MAP[density];
362
- return /* @__PURE__ */ jsx(Button, {
363
- "aria-expanded": isExpanded,
364
- "aria-label": isExpanded ? "Collapse row" : "Expand row",
365
- icon: isExpanded ? CaretDownIcon : CaretRightIcon,
366
- onClick: (event) => {
367
- event.stopPropagation();
368
- setExpandedRowId((currentRowId) => currentRowId === row.id ? null : row.id);
369
- },
370
- variant: ButtonVariant.TERTIARY,
371
- size: buttonSize
105
+ if (!row.getCanExpand()) return null;
106
+ return /* @__PURE__ */ jsx(TableExpandCell, {
107
+ isExpanded: row.getIsExpanded(),
108
+ density,
109
+ expandedPanelId: `${instanceId}-expanded-${row.id}`,
110
+ onToggle: () => row.toggleExpanded()
372
111
  });
373
112
  },
374
113
  cellLoading: () => null
375
- }, ...columns];
114
+ });
115
+ return [...syntheticColumns, ...columns];
376
116
  }, [
377
117
  columns,
378
118
  density,
379
- expandedRowId,
380
- onRowExpand
119
+ instanceId,
120
+ hasExpandColumn,
121
+ expandColumnPin,
122
+ showSelectionColumn,
123
+ selectionColumnPin,
124
+ canSelectAll,
125
+ selectAllAriaLabel,
126
+ getRowSelectAriaLabel,
127
+ toggleAll,
128
+ toggleRowSelection
381
129
  ]);
382
- const pinnedOffsets = useMemo(() => {
383
- const offsets = /* @__PURE__ */ new Map();
384
- let leftOffset = 0;
385
- let rightOffset = 0;
386
- resolvedColumns.forEach((col) => {
387
- if (col.pin === "LEFT") {
388
- offsets.set(col.id, leftOffset);
389
- leftOffset += col.size ?? 150;
390
- }
391
- });
392
- [...resolvedColumns].reverse().forEach((col) => {
393
- if (col.pin === "RIGHT") {
394
- offsets.set(col.id, rightOffset);
395
- rightOffset += col.size ?? 150;
396
- }
397
- });
398
- return offsets;
399
- }, [resolvedColumns]);
400
- const totalColumnMinWidth = useMemo(() => resolvedColumns.reduce((sum, col) => sum + (col.size ?? col.minSize ?? 0), 0), [resolvedColumns]);
130
+ const { getColumnWidth, pinnedOffsets, rowMinWidth } = useTableColumnLayout({
131
+ columns: resolvedColumns,
132
+ columnSizing: resize.columnSizing
133
+ });
401
134
  const table = useReactTable({
402
135
  data,
403
136
  columns: useMemo(() => resolvedColumns.map((col) => ({
@@ -405,12 +138,7 @@ function InfiniteTable(props) {
405
138
  accessorFn: col.accessorFn,
406
139
  header: ({ table }) => {
407
140
  if (typeof col.header === "function") return col.header({ table });
408
- return /* @__PURE__ */ jsx(HeaderContentWrapper, { children: /* @__PURE__ */ jsx(Text, {
409
- variant: TextVariant.TERTIARY,
410
- weight: TextWeight.MEDIUM,
411
- size: TextSize.BODY_SM,
412
- children: col.header ?? col.id
413
- }) });
141
+ return col.header ?? col.id;
414
142
  },
415
143
  cell: (info) => {
416
144
  if (col.cell) return col.cell({
@@ -418,11 +146,7 @@ function InfiniteTable(props) {
418
146
  row: info.row
419
147
  });
420
148
  const value = info.getValue();
421
- if (typeof value === "string") return /* @__PURE__ */ jsx(Text, {
422
- size: TextSize.BODY_SM,
423
- children: value
424
- });
425
- if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") return /* @__PURE__ */ jsx(Text, {
149
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") return /* @__PURE__ */ jsx(Text, {
426
150
  size: TextSize.BODY_SM,
427
151
  children: String(value)
428
152
  });
@@ -434,217 +158,282 @@ function InfiniteTable(props) {
434
158
  size: col.size,
435
159
  minSize: col.minSize,
436
160
  maxSize: col.maxSize,
437
- enableSorting: col.enableSorting ?? false,
161
+ enableSorting: col.enableSorting ?? enableSorting,
438
162
  sortDescFirst: col.sortDescFirst,
439
163
  meta: {
440
164
  pin: col.pin,
441
165
  align: col.align,
442
- cellLoading: col.cellLoading
166
+ cellLoading: col.cellLoading,
167
+ isCompact: col.id === "__expand__" || col.id === "__select__",
168
+ isResizable: canResizeColumn(col),
169
+ label: typeof col.header === "string" ? col.header : col.id
443
170
  }
444
- })), [resolvedColumns]),
445
- getRowId: getRowId ? (row, index) => getRowId(row, index) : void 0,
171
+ })), [
172
+ resolvedColumns,
173
+ enableSorting,
174
+ canResizeColumn
175
+ ]),
176
+ getRowId,
446
177
  getCoreRowModel: getCoreRowModel(),
447
178
  getSortedRowModel: enableSorting && !manualSorting ? getSortedRowModel() : void 0,
179
+ getExpandedRowModel: hasExpansion ? getExpandedRowModel() : void 0,
180
+ getRowCanExpand: hasExpansion ? (row) => getRowCanExpand?.(row) ?? true : () => false,
448
181
  state: {
449
- ...sorting !== void 0 && { sorting },
450
- ...rowSelection !== void 0 && { rowSelection }
182
+ rowSelection: selection.rowSelection,
183
+ expanded: expansion.expanded,
184
+ columnSizing: resize.columnSizing,
185
+ ...sorting !== void 0 && { sorting }
451
186
  },
187
+ onRowSelectionChange: selection.onRowSelectionChange,
188
+ onExpandedChange: expansion.onExpandedChange,
189
+ onColumnSizingChange: resize.onColumnSizingChange,
452
190
  ...onSortingChange !== void 0 && { onSortingChange },
453
- ...onRowSelectionChange !== void 0 && { onRowSelectionChange },
454
- enableRowSelection,
191
+ enableRowSelection: resolvedEnableRowSelection,
455
192
  enableMultiRowSelection,
456
193
  enableSorting,
457
194
  enableMultiSort,
458
195
  manualSorting
459
196
  });
460
- useEffect(() => {
461
- onTableReady?.(table);
462
- }, [table, onTableReady]);
463
197
  const { rows } = table.getRowModel();
464
198
  useEffect(() => {
465
- if (!onRowExpand && expandedRowId !== null) setExpandedRowId(null);
466
- }, [expandedRowId, onRowExpand]);
199
+ rowsRef.current = rows;
200
+ });
201
+ const onTableReadyRef = useRef(onTableReady);
467
202
  useEffect(() => {
468
- if (expandedRowId === null) return;
469
- if (!rows.some((row) => row.id === expandedRowId)) setExpandedRowId(null);
470
- }, [expandedRowId, rows]);
471
- useLayoutEffect(() => {
472
- const container = scrollContainerRef.current;
473
- if (!container) return;
474
- const measure = () => {
475
- setScrollContainerClientWidth((currentWidth) => currentWidth === container.clientWidth ? currentWidth : container.clientWidth);
476
- };
477
- measure();
478
- if (typeof ResizeObserver === "undefined") {
479
- window.addEventListener("resize", measure);
480
- return () => window.removeEventListener("resize", measure);
481
- }
482
- const resizeObserver = new ResizeObserver(measure);
483
- resizeObserver.observe(container);
484
- return () => resizeObserver.disconnect();
485
- }, []);
203
+ onTableReadyRef.current = onTableReady;
204
+ });
486
205
  useEffect(() => {
487
- const container = scrollContainerRef.current;
488
- if (!container || !fetchNextPage) return;
489
- const onScroll = () => {
490
- const { scrollHeight, scrollTop, clientHeight } = container;
491
- if (scrollHeight - scrollTop - clientHeight < 500 && hasNextPage && !isFetchingNextPage) fetchNextPage();
492
- };
493
- container.addEventListener("scroll", onScroll);
494
- return () => container.removeEventListener("scroll", onScroll);
206
+ onTableReadyRef.current?.(table);
207
+ }, [table]);
208
+ const selectedRowIds = selection.rowSelection;
209
+ const hasSelectedRowsListener = onSelectedRowsChange !== void 0;
210
+ useEffect(() => {
211
+ if (!hasSelectedRowsListener) return;
212
+ notifySelectedRows(rowsRef.current.filter((row) => row.getIsSelected()));
495
213
  }, [
496
- hasNextPage,
497
- isFetchingNextPage,
498
- fetchNextPage
214
+ selectedRowIds,
215
+ hasSelectedRowsListener,
216
+ notifySelectedRows
499
217
  ]);
218
+ const { pruneMissingRowIds } = expansion;
219
+ const rowIds = useMemo(() => rows.map((row) => row.id), [rows]);
500
220
  useEffect(() => {
501
- const container = scrollContainerRef.current;
502
- if (!container) return;
503
- let pendingScroll = {
504
- deltaX: 0,
505
- deltaY: 0
506
- };
507
- let rafId = null;
508
- const applyScroll = () => {
509
- if (pendingScroll.deltaY !== 0 || pendingScroll.deltaX !== 0) {
510
- container.scrollTop += pendingScroll.deltaY;
511
- container.scrollLeft += pendingScroll.deltaX;
512
- pendingScroll = {
513
- deltaX: 0,
514
- deltaY: 0
515
- };
516
- }
517
- rafId = null;
518
- };
519
- const queueWheelScroll = (deltaX, deltaY) => {
520
- if (isFetchingNextPage && deltaY > 0) {
521
- if (container.scrollHeight - container.scrollTop - container.clientHeight < 200) return false;
522
- }
523
- const canScrollY = deltaY > 0 && container.scrollTop < container.scrollHeight - container.clientHeight || deltaY < 0 && container.scrollTop > 0;
524
- const canScrollX = deltaX > 0 && container.scrollLeft < container.scrollWidth - container.clientWidth || deltaX < 0 && container.scrollLeft > 0;
525
- if (canScrollY || canScrollX) {
526
- pendingScroll.deltaY += deltaY;
527
- pendingScroll.deltaX += deltaX;
528
- if (rafId === null) rafId = requestAnimationFrame(applyScroll);
529
- return true;
221
+ pruneMissingRowIds(rowIds);
222
+ }, [rowIds, pruneMissingRowIds]);
223
+ const sentinelRef = useInfiniteScrollSentinel({
224
+ scrollRef: scrollContainerRef,
225
+ hasNextPage,
226
+ isFetchingNextPage,
227
+ fetchNextPage,
228
+ rowCount: rows.length
229
+ });
230
+ const isRowInteractive = Boolean(onRowClick || onRowActivate || showSelectionColumn);
231
+ const resolvedEnableRowFocus = enableRowFocus ?? isRowInteractive;
232
+ const keyboard = useTableKeyboardNavigation({
233
+ bodyRef,
234
+ rowCount: rows.length,
235
+ enabled: resolvedEnableRowFocus,
236
+ onActivate: (rowIndex, event) => {
237
+ const row = rowsRef.current[rowIndex];
238
+ if (!row) return;
239
+ if (onRowActivate) {
240
+ onRowActivate(row, event);
241
+ return;
530
242
  }
531
- return false;
532
- };
533
- const onWheel = (e) => {
534
- queueWheelScroll(e.deltaX, e.deltaY);
535
- };
536
- container.addEventListener("wheel", onWheel, { passive: true });
537
- return () => {
538
- container.removeEventListener("wheel", onWheel);
539
- if (rafId !== null) cancelAnimationFrame(rafId);
540
- };
541
- }, [isFetchingNextPage]);
542
- const renderLoadingRows = () => {
543
- return Array.from({ length: loadingRowCount }).map((_, rowIndex) => /* @__PURE__ */ jsx(LoadingRowWrapper, {
544
- $density: density,
545
- $variant: variant,
546
- children: resolvedColumns.map((col) => /* @__PURE__ */ jsx(TableDataCell, {
547
- $width: col.size,
548
- $minWidth: col.minSize,
549
- $maxWidth: col.maxSize,
550
- $pin: col.pin,
551
- $pinnedOffset: pinnedOffsets.get(col.id),
552
- $align: col.align,
553
- $density: density,
554
- $variant: variant,
555
- children: col.cellLoading ? col.cellLoading() : null
556
- }, col.id))
557
- }, `loading-${rowIndex}`));
558
- };
559
- const isEmpty = data.length === 0 && !isLoading;
560
- const showLoading = isLoading && data.length === 0;
561
- const showError = isError && data.length === 0;
562
- return /* @__PURE__ */ jsxs(TableOuterContainer, {
243
+ onRowClick?.(row, event);
244
+ },
245
+ onToggleSelect: (rowIndex) => {
246
+ const row = rowsRef.current[rowIndex];
247
+ if (!row || !isSelectable) return;
248
+ toggleRowSelection(row, false);
249
+ }
250
+ });
251
+ const columnCount = resolvedColumns.length;
252
+ const headerRowCount = noHeader ? 0 : 1;
253
+ const renderCellsForColumn = useCallback((col) => ({
254
+ $width: getColumnWidth(col),
255
+ $minWidth: col.minSize,
256
+ $maxWidth: col.maxSize,
257
+ $pin: col.pin,
258
+ $pinnedOffset: pinnedOffsets.get(col.id),
259
+ $align: col.align,
260
+ $density: density,
261
+ $variant: variant,
262
+ $isCompact: col.id === "__expand__" || col.id === "__select__"
263
+ }), [
264
+ getColumnWidth,
265
+ pinnedOffsets,
266
+ density,
267
+ variant
268
+ ]);
269
+ const renderLoadingRows = () => Array.from({ length: loadingRowCount }).map((_, rowIndex) => /* @__PURE__ */ jsx(TableLoadingRow, {
270
+ $density: density,
271
+ $variant: variant,
272
+ role: "row",
273
+ "aria-hidden": "true",
274
+ children: resolvedColumns.map((col) => /* @__PURE__ */ jsx(TableDataCell, {
275
+ ...renderCellsForColumn(col),
276
+ role: "cell",
277
+ children: col.cellLoading ? col.cellLoading() : null
278
+ }, col.id))
279
+ }, `loading-${rowIndex}`));
280
+ const showLoading = isLoading && rows.length === 0;
281
+ const showError = isError && rows.length === 0;
282
+ const showEmpty = rows.length === 0 && !isLoading && !isError && Boolean(contentWhenEmpty);
283
+ const statusAvailableHeight = viewportHeight !== void 0 ? Math.max(0, viewportHeight - (headerHeight ?? 0)) : void 0;
284
+ return /* @__PURE__ */ jsx(TableOuterContainer, {
563
285
  $width: width,
564
286
  $height: height,
565
287
  $fillWidth: fillWidth,
566
288
  $fillHeight: fillHeight,
567
- children: [/* @__PURE__ */ jsx(TableScrollContainer, {
289
+ children: /* @__PURE__ */ jsxs(TableScrollContainer, {
568
290
  ref: scrollContainerRef,
569
291
  $noLastRowPadding: noLastRowPadding,
570
- children: /* @__PURE__ */ jsxs(StyledTable, { children: [!noHeader && /* @__PURE__ */ jsx(TableHead, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx(TableHeaderRow, { children: headerGroup.headers.map((header) => {
571
- const columnMeta = header.column.columnDef.meta;
572
- const canSort = header.column.getCanSort();
573
- return /* @__PURE__ */ jsx(TableHeaderCell, {
574
- $width: header.column.columnDef.size,
575
- $minWidth: header.column.columnDef.minSize,
576
- $maxWidth: header.column.columnDef.maxSize,
577
- $pin: columnMeta?.pin,
578
- $pinnedOffset: pinnedOffsets.get(header.column.id),
579
- $align: columnMeta?.align,
580
- $isSortable: canSort,
581
- $density: density,
582
- $variant: variant,
583
- $isExpandCell: header.column.id === EXPAND_COLUMN_ID,
584
- onClick: canSort ? header.column.getToggleSortingHandler() : void 0,
585
- children: /* @__PURE__ */ jsxs(HeaderContentWrapper, { children: [flexRender(header.column.columnDef.header, header.getContext()), canSort && /* @__PURE__ */ jsx(SortIconWrapper, { children: header.column.getIsSorted() === "asc" ? /* @__PURE__ */ jsx(Icon, {
586
- component: SortAscendingIcon,
587
- size: 12,
588
- variant: IconVariant.TERTIARY
589
- }) : header.column.getIsSorted() === "desc" ? /* @__PURE__ */ jsx(Icon, {
590
- component: SortDescendingIcon,
591
- size: 12,
592
- variant: IconVariant.TERTIARY
593
- }) : /* @__PURE__ */ jsx(Icon, {
594
- component: CaretUpDownIcon,
595
- size: 12,
596
- variant: IconVariant.TERTIARY
597
- }) })] })
598
- }, header.id);
599
- }) }, headerGroup.id)) }), /* @__PURE__ */ jsxs(TableBody, { children: [showLoading ? renderLoadingRows() : showError ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", {
600
- colSpan: resolvedColumns.length,
601
- children: typeof contentWhenError === "function" ? contentWhenError() : contentWhenError ?? /* @__PURE__ */ jsx(Text, {
602
- variant: TextVariant.ERROR,
603
- children: "Error loading data"
604
- })
605
- }) }) : rows.map((row, index) => {
606
- const isSelected = row.getIsSelected();
607
- const isExpanded = onRowExpand !== void 0 && row.id === expandedRowId;
608
- const isLastRow = index === rows.length - 1;
609
- return /* @__PURE__ */ jsxs(React.Fragment, { children: [/* @__PURE__ */ jsx(TableRow, {
610
- $isClickable: !!onRowClick,
611
- $isSelected: isSelected,
612
- $density: density,
613
- $variant: variant,
614
- $isExpanded: isExpanded,
615
- $isLastRow: noLastRowBorder && isLastRow && !isExpanded,
616
- onClick: onRowClick ? (e) => onRowClick(row, e) : void 0,
617
- onDoubleClick: onRowDoubleClick ? (e) => onRowDoubleClick(row, e) : void 0,
618
- children: row.getVisibleCells().map((cell) => {
619
- const columnMeta = cell.column.columnDef.meta;
620
- return /* @__PURE__ */ jsx(TableDataCell, {
621
- $width: cell.column.columnDef.size,
622
- $minWidth: cell.column.columnDef.minSize,
623
- $maxWidth: cell.column.columnDef.maxSize,
624
- $pin: columnMeta?.pin,
625
- $pinnedOffset: pinnedOffsets.get(cell.column.id),
626
- $align: columnMeta?.align,
627
- $density: density,
628
- $variant: variant,
629
- $isExpandCell: cell.column.id === EXPAND_COLUMN_ID,
630
- children: flexRender(cell.column.columnDef.cell, cell.getContext())
631
- }, cell.id);
632
- })
633
- }), isExpanded && onRowExpand && /* @__PURE__ */ jsx(ExpandedRow, {
634
- $minWidth: totalColumnMinWidth,
635
- children: /* @__PURE__ */ jsx(ExpandedRowCell, {
636
- colSpan: resolvedColumns.length,
637
- $variant: variant,
638
- $isLastRow: noLastRowBorder && isLastRow,
639
- children: /* @__PURE__ */ jsxs(ExpandedViewport, {
640
- $width: scrollContainerClientWidth ?? void 0,
641
- children: [/* @__PURE__ */ jsx(ExpandedGutter, { $variant: variant }), /* @__PURE__ */ jsx(ExpandedBody, { children: /* @__PURE__ */ jsx(ExpandedContent, { children: onRowExpand(row) }) })]
292
+ children: [/* @__PURE__ */ jsxs(StyledTable, {
293
+ $rowMinWidth: rowMinWidth,
294
+ role: isRowInteractive ? "grid" : "table",
295
+ "aria-label": ariaLabel,
296
+ "aria-labelledby": ariaLabelledBy,
297
+ "aria-rowcount": rows.length + headerRowCount,
298
+ "aria-colcount": columnCount,
299
+ "aria-multiselectable": isSelectable && enableMultiRowSelection && isRowInteractive ? true : void 0,
300
+ children: [!noHeader && /* @__PURE__ */ jsx(TableHead, {
301
+ ref: headerRef,
302
+ role: "rowgroup",
303
+ children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx(TableHeaderRow, {
304
+ role: "row",
305
+ "aria-rowindex": 1,
306
+ children: headerGroup.headers.map((header, columnIndex) => {
307
+ const meta = header.column.columnDef.meta;
308
+ const canSort = header.column.getCanSort();
309
+ const sortDirection = header.column.getIsSorted();
310
+ const toggleSorting = header.column.getToggleSortingHandler();
311
+ const headerTemplate = header.column.columnDef.header;
312
+ const headerContent = typeof headerTemplate === "function" ? headerTemplate(header.getContext()) : headerTemplate;
313
+ return /* @__PURE__ */ jsx(TableHeaderCell, {
314
+ $width: getColumnWidth(resolvedColumns[columnIndex]),
315
+ $minWidth: header.column.columnDef.minSize,
316
+ $maxWidth: header.column.columnDef.maxSize,
317
+ $pin: meta?.pin,
318
+ $pinnedOffset: pinnedOffsets.get(header.column.id),
319
+ $align: meta?.align,
320
+ $isSortable: canSort,
321
+ $density: density,
322
+ $variant: variant,
323
+ $isCompact: meta?.isCompact,
324
+ role: "columnheader",
325
+ scope: "col",
326
+ "aria-colindex": columnIndex + 1,
327
+ "aria-label": resolvedColumns[columnIndex]?.headerAriaLabel,
328
+ "aria-sort": canSort ? sortDirection === "asc" ? "ascending" : sortDirection === "desc" ? "descending" : "none" : void 0,
329
+ tabIndex: canSort ? 0 : void 0,
330
+ onClick: canSort ? toggleSorting : void 0,
331
+ onKeyDown: canSort ? (event) => {
332
+ if (event.key !== "Enter" && event.key !== " ") return;
333
+ event.preventDefault();
334
+ toggleSorting?.(event);
335
+ } : void 0,
336
+ children: /* @__PURE__ */ jsx(TableHeaderCellContent, {
337
+ content: headerContent,
338
+ isSortable: canSort,
339
+ sortDirection,
340
+ resize: meta?.isResizable ? {
341
+ columnId: header.column.id,
342
+ columnLabel: meta.label ?? header.column.id,
343
+ isResizing: resize.resizingColumnId === header.column.id,
344
+ bounds: resize.getColumnResizeBounds(header.column.id),
345
+ onResizeStart: resize.startResize,
346
+ onResizeKeyDown: resize.resizeByKeyboard
347
+ } : void 0
348
+ })
349
+ }, header.id);
642
350
  })
643
- })
644
- })] }, row.id);
645
- }), isFetchingNextPage && renderLoadingRows()] })] })
646
- }), isEmpty && contentWhenEmpty && /* @__PURE__ */ jsx(EmptyContentWrapper, { children: contentWhenEmpty })]
351
+ }, headerGroup.id))
352
+ }), /* @__PURE__ */ jsxs(TableBody, {
353
+ ref: bodyRef,
354
+ role: "rowgroup",
355
+ children: [
356
+ showLoading && renderLoadingRows(),
357
+ showError && /* @__PURE__ */ jsx(TableStatusRow, {
358
+ colSpan: columnCount,
359
+ viewportWidth,
360
+ availableHeight: statusAvailableHeight,
361
+ role: "alert",
362
+ children: typeof contentWhenError === "function" ? contentWhenError(error) : contentWhenError ?? /* @__PURE__ */ jsx(Text, {
363
+ variant: TextVariant.ERROR,
364
+ children: error?.message ?? "Error loading data"
365
+ })
366
+ }),
367
+ showEmpty && /* @__PURE__ */ jsx(TableStatusRow, {
368
+ colSpan: columnCount,
369
+ viewportWidth,
370
+ availableHeight: statusAvailableHeight,
371
+ role: "status",
372
+ children: contentWhenEmpty
373
+ }),
374
+ !showLoading && !showError && rows.map((row, index) => {
375
+ const isSelected = row.getIsSelected();
376
+ const isExpanded = hasExpansion && row.getIsExpanded();
377
+ const isLastRow = index === rows.length - 1;
378
+ const expandedPanelId = `${instanceId}-expanded-${row.id}`;
379
+ return /* @__PURE__ */ jsxs(React.Fragment, { children: [/* @__PURE__ */ jsx(TableRow, {
380
+ $isClickable: Boolean(onRowClick || onRowActivate),
381
+ $isSelected: isSelected,
382
+ $density: density,
383
+ $variant: variant,
384
+ $isExpanded: isExpanded,
385
+ $isLastRow: noLastRowBorder && isLastRow && !isExpanded,
386
+ role: "row",
387
+ "aria-rowindex": index + 1 + headerRowCount,
388
+ "aria-selected": isSelectable ? isSelected : void 0,
389
+ "aria-expanded": row.getCanExpand() ? isExpanded : void 0,
390
+ "aria-label": getRowAriaLabel?.(row),
391
+ tabIndex: keyboard.getRowTabIndex(index),
392
+ onFocus: resolvedEnableRowFocus ? () => keyboard.onRowFocus(index) : void 0,
393
+ onKeyDown: resolvedEnableRowFocus ? (event) => keyboard.onRowKeyDown(index, event) : void 0,
394
+ onClick: onRowClick || onRowActivate ? (event) => {
395
+ onRowClick?.(row, event);
396
+ onRowActivate?.(row, event);
397
+ } : void 0,
398
+ onDoubleClick: onRowDoubleClick ? (event) => onRowDoubleClick(row, event) : void 0,
399
+ ["data-row-index"]: index,
400
+ children: row.getVisibleCells().map((cell, columnIndex) => {
401
+ const meta = cell.column.columnDef.meta;
402
+ return /* @__PURE__ */ jsx(TableDataCell, {
403
+ $width: getColumnWidth(resolvedColumns[columnIndex]),
404
+ $minWidth: cell.column.columnDef.minSize,
405
+ $maxWidth: cell.column.columnDef.maxSize,
406
+ $pin: meta?.pin,
407
+ $pinnedOffset: pinnedOffsets.get(cell.column.id),
408
+ $align: meta?.align,
409
+ $density: density,
410
+ $variant: variant,
411
+ $isCompact: meta?.isCompact,
412
+ role: isRowInteractive ? "gridcell" : "cell",
413
+ "aria-colindex": columnIndex + 1,
414
+ children: flexRender(cell.column.columnDef.cell, cell.getContext())
415
+ }, cell.id);
416
+ })
417
+ }), isExpanded && onRowExpand && /* @__PURE__ */ jsx(TableExpandedRow, {
418
+ panelId: expandedPanelId,
419
+ variant,
420
+ colSpan: columnCount,
421
+ rowMinWidth,
422
+ viewportWidth,
423
+ gutterWidth: hasExpandColumn ? 44 : 0,
424
+ isLastRow: noLastRowBorder && isLastRow,
425
+ children: onRowExpand(row)
426
+ })] }, row.id);
427
+ }),
428
+ isFetchingNextPage && renderLoadingRows()
429
+ ]
430
+ })]
431
+ }), /* @__PURE__ */ jsx(InfiniteScrollSentinel, {
432
+ ref: sentinelRef,
433
+ "aria-hidden": "true"
434
+ })]
435
+ })
647
436
  });
648
437
  }
649
438
  //#endregion
650
- export { ColumnAlign, ColumnPin, TableDensity, TableVariant, InfiniteTable as default, estimateColumnWidth };
439
+ export { ColumnAlign, ColumnPin, ColumnResizeMode, TableDensity, TableVariant, InfiniteTable as default, estimateColumnWidth };