@zendir/ui 0.5.0 → 0.6.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 (391) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +640 -631
  3. package/dist/_virtual/_rolldown/runtime.js +13 -0
  4. package/dist/index.js +17 -221
  5. package/dist/react/3d/CesiumCaptureSource.d.ts +0 -1
  6. package/dist/react/3d/CesiumCaptureSource.js +364 -283
  7. package/dist/react/3d/CesiumCaptureSource.js.map +1 -1
  8. package/dist/react/3d/ZenSpace3D.d.ts +2 -3
  9. package/dist/react/3d/ZenSpace3D.js +1681 -1237
  10. package/dist/react/3d/ZenSpace3D.js.map +1 -1
  11. package/dist/react/3d/ZenSpace3DCesium.d.ts +0 -1
  12. package/dist/react/3d/ZenSpace3DCesium.js +513 -560
  13. package/dist/react/3d/ZenSpace3DCesium.js.map +1 -1
  14. package/dist/react/3d/ZenSpace3DShaders.js +61 -66
  15. package/dist/react/3d/ZenSpace3DShaders.js.map +1 -1
  16. package/dist/react/3d/ZenSpace3DTypes.d.ts +19 -20
  17. package/dist/react/3d/ZenSpace3DUtils.d.ts +0 -1
  18. package/dist/react/3d/ZenSpace3DUtils.js +37 -24
  19. package/dist/react/3d/ZenSpace3DUtils.js.map +1 -1
  20. package/dist/react/3d/capturePngAnalysis.js +42 -36
  21. package/dist/react/3d/capturePngAnalysis.js.map +1 -1
  22. package/dist/react/3d/index.d.ts +3 -3
  23. package/dist/react/3d/index.js +5 -53
  24. package/dist/react/3d/threeLoader.d.ts +1 -1
  25. package/dist/react/3d/threeLoader.js +23 -18
  26. package/dist/react/3d/threeLoader.js.map +1 -1
  27. package/dist/react/astro/ClassificationBanner.d.ts +2 -3
  28. package/dist/react/astro/ClassificationBanner.js +95 -79
  29. package/dist/react/astro/ClassificationBanner.js.map +1 -1
  30. package/dist/react/astro/GlobalStatusBar.d.ts +0 -1
  31. package/dist/react/astro/GlobalStatusBar.js +157 -163
  32. package/dist/react/astro/GlobalStatusBar.js.map +1 -1
  33. package/dist/react/astro/MissionClock.d.ts +7 -8
  34. package/dist/react/astro/MissionClock.js +377 -400
  35. package/dist/react/astro/MissionClock.js.map +1 -1
  36. package/dist/react/astro/MonitoringIcon.d.ts +1 -2
  37. package/dist/react/astro/MonitoringIcon.js +422 -358
  38. package/dist/react/astro/MonitoringIcon.js.map +1 -1
  39. package/dist/react/astro/Notification.d.ts +1 -2
  40. package/dist/react/astro/Notification.js +229 -126
  41. package/dist/react/astro/Notification.js.map +1 -1
  42. package/dist/react/astro/Progress.d.ts +0 -1
  43. package/dist/react/astro/Progress.js +199 -141
  44. package/dist/react/astro/Progress.js.map +1 -1
  45. package/dist/react/astro/SimulationControls.d.ts +3 -4
  46. package/dist/react/astro/SimulationControls.js +596 -650
  47. package/dist/react/astro/SimulationControls.js.map +1 -1
  48. package/dist/react/astro/StatusIndicator.d.ts +0 -1
  49. package/dist/react/astro/StatusIndicator.js +236 -170
  50. package/dist/react/astro/StatusIndicator.js.map +1 -1
  51. package/dist/react/astro/UnifiedTimeline.d.ts +9 -10
  52. package/dist/react/astro/UnifiedTimeline.js +2345 -2392
  53. package/dist/react/astro/UnifiedTimeline.js.map +1 -1
  54. package/dist/react/astro/index.d.ts +5 -5
  55. package/dist/react/astro/index.js +1 -25
  56. package/dist/react/cards/AccessCard.d.ts +0 -1
  57. package/dist/react/cards/AccessCard.js +471 -405
  58. package/dist/react/cards/AccessCard.js.map +1 -1
  59. package/dist/react/cards/OrbitCard.d.ts +0 -1
  60. package/dist/react/cards/OrbitCard.js +487 -364
  61. package/dist/react/cards/OrbitCard.js.map +1 -1
  62. package/dist/react/cards/SpacecraftCard.d.ts +0 -1
  63. package/dist/react/cards/SpacecraftCard.js +813 -925
  64. package/dist/react/cards/SpacecraftCard.js.map +1 -1
  65. package/dist/react/cards/TelemetryCard.d.ts +0 -1
  66. package/dist/react/cards/TelemetryCard.js +1055 -732
  67. package/dist/react/cards/TelemetryCard.js.map +1 -1
  68. package/dist/react/cards/TelemetryStreamCard.d.ts +0 -1
  69. package/dist/react/cards/TelemetryStreamCard.js +323 -297
  70. package/dist/react/cards/TelemetryStreamCard.js.map +1 -1
  71. package/dist/react/cards/index.d.ts +1 -1
  72. package/dist/react/cards/index.js +1 -8
  73. package/dist/react/charts/GroundTrackMap.d.ts +6 -7
  74. package/dist/react/charts/GroundTrackMap.js +1377 -1256
  75. package/dist/react/charts/GroundTrackMap.js.map +1 -1
  76. package/dist/react/charts/GroundTrackMapLeaflet.d.ts +1 -2
  77. package/dist/react/charts/GroundTrackMapLeaflet.js +1065 -987
  78. package/dist/react/charts/GroundTrackMapLeaflet.js.map +1 -1
  79. package/dist/react/charts/groundTrackMapLeafletTiles.js +34 -25
  80. package/dist/react/charts/groundTrackMapLeafletTiles.js.map +1 -1
  81. package/dist/react/charts/groundTrackMapLeafletUtils.js +70 -61
  82. package/dist/react/charts/groundTrackMapLeafletUtils.js.map +1 -1
  83. package/dist/react/charts/index.d.ts +1 -1
  84. package/dist/react/charts/index.js +7 -100
  85. package/dist/react/charts/unified/AstroChart.d.ts +1 -2
  86. package/dist/react/charts/unified/AstroChart.js +1331 -1411
  87. package/dist/react/charts/unified/AstroChart.js.map +1 -1
  88. package/dist/react/charts/unified/PowerOverviewChart.d.ts +3 -3
  89. package/dist/react/charts/unified/PowerOverviewChart.js +495 -478
  90. package/dist/react/charts/unified/PowerOverviewChart.js.map +1 -1
  91. package/dist/react/charts/unified/domain.d.ts +12 -13
  92. package/dist/react/charts/unified/domain.js +3999 -3145
  93. package/dist/react/charts/unified/domain.js.map +1 -1
  94. package/dist/react/charts/unified/generators.d.ts +3 -4
  95. package/dist/react/charts/unified/generators.js +561 -498
  96. package/dist/react/charts/unified/generators.js.map +1 -1
  97. package/dist/react/charts/unified/index.d.ts +1 -1
  98. package/dist/react/charts/unified/presets.d.ts +14 -15
  99. package/dist/react/charts/unified/presets.js +857 -994
  100. package/dist/react/charts/unified/presets.js.map +1 -1
  101. package/dist/react/charts/unified/sync.d.ts +2 -3
  102. package/dist/react/charts/unified/sync.js +229 -195
  103. package/dist/react/charts/unified/sync.js.map +1 -1
  104. package/dist/react/charts/unified/theme.d.ts +11 -12
  105. package/dist/react/charts/unified/theme.js +606 -642
  106. package/dist/react/charts/unified/theme.js.map +1 -1
  107. package/dist/react/charts/unified/types.d.ts +32 -33
  108. package/dist/react/charts/unified/useChartStream.d.ts +1 -2
  109. package/dist/react/charts/unified/useChartStream.js +203 -216
  110. package/dist/react/charts/unified/useChartStream.js.map +1 -1
  111. package/dist/react/chatgpt/AppCard.d.ts +1 -2
  112. package/dist/react/chatgpt/index.d.ts +7 -7
  113. package/dist/react/chatgpt/index.js +160 -139
  114. package/dist/react/chatgpt/index.js.map +1 -1
  115. package/dist/react/context/CategoryContext.d.ts +0 -1
  116. package/dist/react/context/CategoryContext.js +78 -29
  117. package/dist/react/context/CategoryContext.js.map +1 -1
  118. package/dist/react/context/DisplaySettingsContext.d.ts +1 -2
  119. package/dist/react/context/DisplaySettingsContext.js +205 -156
  120. package/dist/react/context/DisplaySettingsContext.js.map +1 -1
  121. package/dist/react/context/SpatialSelectionContext.d.ts +0 -1
  122. package/dist/react/context/SpatialSelectionContext.js +36 -7
  123. package/dist/react/context/SpatialSelectionContext.js.map +1 -1
  124. package/dist/react/core/data/DataTable.d.ts +3 -4
  125. package/dist/react/core/data/DataTable.js +473 -440
  126. package/dist/react/core/data/DataTable.js.map +1 -1
  127. package/dist/react/core/data/DataValue.d.ts +4 -5
  128. package/dist/react/core/data/DataValue.js +605 -571
  129. package/dist/react/core/data/DataValue.js.map +1 -1
  130. package/dist/react/core/data/propertyConfig.d.ts +1 -2
  131. package/dist/react/core/data/propertyConfig.js +446 -382
  132. package/dist/react/core/data/propertyConfig.js.map +1 -1
  133. package/dist/react/core/display/AstroIcon.d.ts +4 -5
  134. package/dist/react/core/display/AstroIcon.js +339 -429
  135. package/dist/react/core/display/AstroIcon.js.map +1 -1
  136. package/dist/react/core/display/Badge.d.ts +2 -3
  137. package/dist/react/core/display/Badge.js +131 -131
  138. package/dist/react/core/display/Badge.js.map +1 -1
  139. package/dist/react/core/display/CardHeader.d.ts +0 -1
  140. package/dist/react/core/display/CardHeader.js +398 -311
  141. package/dist/react/core/display/CardHeader.js.map +1 -1
  142. package/dist/react/core/display/Container.d.ts +2 -3
  143. package/dist/react/core/display/Container.js +640 -668
  144. package/dist/react/core/display/Container.js.map +1 -1
  145. package/dist/react/core/display/CopyButton.d.ts +1 -2
  146. package/dist/react/core/display/CopyButton.js +158 -101
  147. package/dist/react/core/display/CopyButton.js.map +1 -1
  148. package/dist/react/core/display/GlassCard.d.ts +3 -4
  149. package/dist/react/core/display/GlassCard.js +416 -369
  150. package/dist/react/core/display/GlassCard.js.map +1 -1
  151. package/dist/react/core/display/HeaderIconWithStatus.d.ts +0 -1
  152. package/dist/react/core/display/HeaderIconWithStatus.js +152 -152
  153. package/dist/react/core/display/HeaderIconWithStatus.js.map +1 -1
  154. package/dist/react/core/display/Icon.d.ts +2 -3
  155. package/dist/react/core/display/Icon.js +172 -143
  156. package/dist/react/core/display/Icon.js.map +1 -1
  157. package/dist/react/core/display/Typography.d.ts +24 -25
  158. package/dist/react/core/display/Typography.js +360 -178
  159. package/dist/react/core/display/Typography.js.map +1 -1
  160. package/dist/react/core/feedback/ConfirmDialog.d.ts +1 -2
  161. package/dist/react/core/feedback/ConfirmDialog.js +343 -304
  162. package/dist/react/core/feedback/ConfirmDialog.js.map +1 -1
  163. package/dist/react/core/feedback/Dialog.d.ts +2 -3
  164. package/dist/react/core/feedback/Dialog.js +189 -197
  165. package/dist/react/core/feedback/Dialog.js.map +1 -1
  166. package/dist/react/core/feedback/Toast.d.ts +2 -3
  167. package/dist/react/core/feedback/Toast.js +346 -207
  168. package/dist/react/core/feedback/Toast.js.map +1 -1
  169. package/dist/react/core/index.d.ts +26 -26
  170. package/dist/react/core/index.js +7 -119
  171. package/dist/react/core/inputs/Button.d.ts +2 -3
  172. package/dist/react/core/inputs/Button.js +281 -304
  173. package/dist/react/core/inputs/Button.js.map +1 -1
  174. package/dist/react/core/inputs/Checkbox.d.ts +2 -3
  175. package/dist/react/core/inputs/Checkbox.js +139 -127
  176. package/dist/react/core/inputs/Checkbox.js.map +1 -1
  177. package/dist/react/core/inputs/Input.d.ts +3 -4
  178. package/dist/react/core/inputs/Input.js +277 -285
  179. package/dist/react/core/inputs/Input.js.map +1 -1
  180. package/dist/react/core/inputs/LimitsBar.d.ts +1 -2
  181. package/dist/react/core/inputs/LimitsBar.js +271 -196
  182. package/dist/react/core/inputs/LimitsBar.js.map +1 -1
  183. package/dist/react/core/inputs/NumberInput.d.ts +2 -3
  184. package/dist/react/core/inputs/NumberInput.js +531 -503
  185. package/dist/react/core/inputs/NumberInput.js.map +1 -1
  186. package/dist/react/core/inputs/PinInput.d.ts +2 -3
  187. package/dist/react/core/inputs/PinInput.js +224 -207
  188. package/dist/react/core/inputs/PinInput.js.map +1 -1
  189. package/dist/react/core/inputs/Select.d.ts +1 -2
  190. package/dist/react/core/inputs/Select.js +298 -299
  191. package/dist/react/core/inputs/Select.js.map +1 -1
  192. package/dist/react/core/inputs/Toggle.d.ts +2 -3
  193. package/dist/react/core/inputs/Toggle.js +142 -148
  194. package/dist/react/core/inputs/Toggle.js.map +1 -1
  195. package/dist/react/core/layout/Box.d.ts +3 -4
  196. package/dist/react/core/layout/Box.js +118 -122
  197. package/dist/react/core/layout/Box.js.map +1 -1
  198. package/dist/react/core/layout/Center.d.ts +0 -1
  199. package/dist/react/core/layout/Center.js +45 -32
  200. package/dist/react/core/layout/Center.js.map +1 -1
  201. package/dist/react/core/layout/Divider.d.ts +1 -2
  202. package/dist/react/core/layout/Divider.js +112 -106
  203. package/dist/react/core/layout/Divider.js.map +1 -1
  204. package/dist/react/core/layout/Flex.d.ts +4 -5
  205. package/dist/react/core/layout/Flex.js +120 -124
  206. package/dist/react/core/layout/Flex.js.map +1 -1
  207. package/dist/react/core/layout/Grid.d.ts +5 -6
  208. package/dist/react/core/layout/Grid.js +131 -138
  209. package/dist/react/core/layout/Grid.js.map +1 -1
  210. package/dist/react/core/layout/Spacer.d.ts +0 -1
  211. package/dist/react/core/layout/Spacer.js +36 -29
  212. package/dist/react/core/layout/Spacer.js.map +1 -1
  213. package/dist/react/core/layout/Stack.d.ts +4 -5
  214. package/dist/react/core/layout/Stack.js +127 -70
  215. package/dist/react/core/layout/Stack.js.map +1 -1
  216. package/dist/react/core/layout/responsive.d.ts +1 -2
  217. package/dist/react/core/layout/responsive.js +25 -19
  218. package/dist/react/core/layout/responsive.js.map +1 -1
  219. package/dist/react/core/layout/useBreakpoint.d.ts +1 -1
  220. package/dist/react/core/layout/useBreakpoint.js +119 -66
  221. package/dist/react/core/layout/useBreakpoint.js.map +1 -1
  222. package/dist/react/core/navigation/AppBar.d.ts +1 -2
  223. package/dist/react/core/navigation/AppBar.js +827 -805
  224. package/dist/react/core/navigation/AppBar.js.map +1 -1
  225. package/dist/react/core/navigation/Pagination.d.ts +2 -3
  226. package/dist/react/core/navigation/Pagination.js +207 -187
  227. package/dist/react/core/navigation/Pagination.js.map +1 -1
  228. package/dist/react/core/navigation/SideNav.d.ts +5 -6
  229. package/dist/react/core/navigation/SideNav.js +855 -629
  230. package/dist/react/core/navigation/SideNav.js.map +1 -1
  231. package/dist/react/core/navigation/Tabs.d.ts +0 -1
  232. package/dist/react/core/navigation/Tabs.js +113 -119
  233. package/dist/react/core/navigation/Tabs.js.map +1 -1
  234. package/dist/react/core/overlays/Popover.d.ts +2 -3
  235. package/dist/react/core/overlays/Popover.js +303 -282
  236. package/dist/react/core/overlays/Popover.js.map +1 -1
  237. package/dist/react/core/overlays/SidePanel.d.ts +1 -2
  238. package/dist/react/core/overlays/SidePanel.js +217 -212
  239. package/dist/react/core/overlays/SidePanel.js.map +1 -1
  240. package/dist/react/core/overlays/Tooltip.d.ts +1 -2
  241. package/dist/react/core/overlays/Tooltip.js +170 -176
  242. package/dist/react/core/overlays/Tooltip.js.map +1 -1
  243. package/dist/react/core/widgets/ActivityPlanner.d.ts +0 -1
  244. package/dist/react/core/widgets/ActivityPlanner.js +855 -517
  245. package/dist/react/core/widgets/ActivityPlanner.js.map +1 -1
  246. package/dist/react/core/widgets/Capture.d.ts +2 -3
  247. package/dist/react/core/widgets/Capture.js +965 -779
  248. package/dist/react/core/widgets/Capture.js.map +1 -1
  249. package/dist/react/core/widgets/ChatPanel.d.ts +16 -17
  250. package/dist/react/core/widgets/ChatPanel.js +1734 -1034
  251. package/dist/react/core/widgets/ChatPanel.js.map +1 -1
  252. package/dist/react/core/widgets/ColorPickerPanel.d.ts +0 -1
  253. package/dist/react/core/widgets/ColorPickerPanel.js +298 -287
  254. package/dist/react/core/widgets/ColorPickerPanel.js.map +1 -1
  255. package/dist/react/core/widgets/CommandBuilder.d.ts +2 -3
  256. package/dist/react/core/widgets/CommandBuilder.js +624 -516
  257. package/dist/react/core/widgets/CommandBuilder.js.map +1 -1
  258. package/dist/react/core/widgets/ConnectionForm.d.ts +2 -3
  259. package/dist/react/core/widgets/ConnectionForm.js +528 -492
  260. package/dist/react/core/widgets/ConnectionForm.js.map +1 -1
  261. package/dist/react/core/widgets/FileExplorer.d.ts +3 -4
  262. package/dist/react/core/widgets/FileExplorer.js +617 -505
  263. package/dist/react/core/widgets/FileExplorer.js.map +1 -1
  264. package/dist/react/core/widgets/HexViewer.d.ts +2 -3
  265. package/dist/react/core/widgets/HexViewer.js +1353 -1091
  266. package/dist/react/core/widgets/HexViewer.js.map +1 -1
  267. package/dist/react/core/widgets/ImageFrame.d.ts +1 -2
  268. package/dist/react/core/widgets/ImageFrame.js +230 -193
  269. package/dist/react/core/widgets/ImageFrame.js.map +1 -1
  270. package/dist/react/core/widgets/ImageGallery.d.ts +2 -1
  271. package/dist/react/core/widgets/ImageGallery.js +380 -314
  272. package/dist/react/core/widgets/ImageGallery.js.map +1 -1
  273. package/dist/react/core/widgets/ImagePanel.d.ts +0 -1
  274. package/dist/react/core/widgets/ImagePanel.js +110 -101
  275. package/dist/react/core/widgets/ImagePanel.js.map +1 -1
  276. package/dist/react/core/widgets/LogViewer.d.ts +2 -3
  277. package/dist/react/core/widgets/LogViewer.js +711 -607
  278. package/dist/react/core/widgets/LogViewer.js.map +1 -1
  279. package/dist/react/core/widgets/MessageStream.d.ts +3 -4
  280. package/dist/react/core/widgets/MessageStream.js +514 -444
  281. package/dist/react/core/widgets/MessageStream.js.map +1 -1
  282. package/dist/react/core/widgets/MissionCalendar.d.ts +3 -4
  283. package/dist/react/core/widgets/MissionCalendar.js +1488 -1020
  284. package/dist/react/core/widgets/MissionCalendar.js.map +1 -1
  285. package/dist/react/core/widgets/PacketViewer.d.ts +2 -3
  286. package/dist/react/core/widgets/PacketViewer.js +550 -421
  287. package/dist/react/core/widgets/PacketViewer.js.map +1 -1
  288. package/dist/react/core/widgets/capture-placeholder.png.js +6 -5
  289. package/dist/react/core/widgets/capture-placeholder.png.js.map +1 -1
  290. package/dist/react/hooks/index.d.ts +5 -5
  291. package/dist/react/hooks/useAccessWindows.d.ts +0 -1
  292. package/dist/react/hooks/useCompactMode.d.ts +1 -1
  293. package/dist/react/hooks/useCompactMode.js +104 -58
  294. package/dist/react/hooks/useCompactMode.js.map +1 -1
  295. package/dist/react/hooks/useGroundTrackHistory.d.ts +0 -1
  296. package/dist/react/hooks/useSimulationScene.d.ts +1 -2
  297. package/dist/react/hooks/useSimulationScene.js +481 -374
  298. package/dist/react/hooks/useSimulationScene.js.map +1 -1
  299. package/dist/react/index.d.ts +3 -3
  300. package/dist/react/panels/LayerControlPanel.d.ts +1 -2
  301. package/dist/react/panels/LayerControlPanel.js +223 -180
  302. package/dist/react/panels/LayerControlPanel.js.map +1 -1
  303. package/dist/react/panels/ObjectInventoryPanel.d.ts +2 -3
  304. package/dist/react/panels/ObjectInventoryPanel.js +315 -250
  305. package/dist/react/panels/ObjectInventoryPanel.js.map +1 -1
  306. package/dist/react/panels/index.d.ts +1 -1
  307. package/dist/react/panels/index.js +1 -6
  308. package/dist/react/shared/ErrorBoundary.d.ts +1 -2
  309. package/dist/react/shared/ErrorBoundary.js +170 -139
  310. package/dist/react/shared/ErrorBoundary.js.map +1 -1
  311. package/dist/react/shared/Skeleton.d.ts +1 -2
  312. package/dist/react/shared/Skeleton.js +300 -301
  313. package/dist/react/shared/Skeleton.js.map +1 -1
  314. package/dist/react/theme/ThemeProvider.d.ts +2 -321
  315. package/dist/react/theme/ThemeProvider.js +312 -939
  316. package/dist/react/theme/ThemeProvider.js.map +1 -1
  317. package/dist/react/theme/cardAccent.d.ts +1 -2
  318. package/dist/react/theme/cardAccent.js +196 -126
  319. package/dist/react/theme/cardAccent.js.map +1 -1
  320. package/dist/react/theme/config.d.ts +0 -1
  321. package/dist/react/theme/config.js +47 -25
  322. package/dist/react/theme/config.js.map +1 -1
  323. package/dist/react/theme/index.d.ts +2 -2
  324. package/dist/react/theme/index.js +1 -16
  325. package/dist/react/theme/types.d.ts +332 -0
  326. package/dist/react/theme/types.js +39 -0
  327. package/dist/react/theme/types.js.map +1 -0
  328. package/dist/react/types.d.ts +8 -8
  329. package/dist/react/types.js +147 -47
  330. package/dist/react/types.js.map +1 -1
  331. package/dist/react/utils/categoryPalette.d.ts +0 -1
  332. package/dist/react/utils/categoryPalette.js +91 -102
  333. package/dist/react/utils/categoryPalette.js.map +1 -1
  334. package/dist/react/utils/index.d.ts +5 -5
  335. package/dist/react/utils/index.js +457 -371
  336. package/dist/react/utils/index.js.map +1 -1
  337. package/dist/react/visualizations/EclipseTimerCard.d.ts +0 -1
  338. package/dist/react/visualizations/LinkBudgetCard.d.ts +0 -1
  339. package/dist/react/visualizations/NavBallCard.d.ts +0 -1
  340. package/dist/react/visualizations/PropulsionCard.d.ts +1 -2
  341. package/dist/react/visualizations/SensorFootprintCard.d.ts +1 -2
  342. package/dist/react/visualizations/ThermalHeatmapCard.d.ts +0 -1
  343. package/dist/react/visualizations/index.d.ts +3 -3
  344. package/dist/react.d.ts +2 -1
  345. package/dist/react.js +17 -221
  346. package/dist/shaders/atmosphere.frag.js +6 -5
  347. package/dist/shaders/atmosphere.frag.js.map +1 -1
  348. package/dist/shaders/atmosphere.vert.js +6 -5
  349. package/dist/shaders/atmosphere.vert.js.map +1 -1
  350. package/dist/shaders/stars.frag.js +6 -5
  351. package/dist/shaders/stars.frag.js.map +1 -1
  352. package/dist/shaders/stars.vert.js +6 -5
  353. package/dist/shaders/stars.vert.js.map +1 -1
  354. package/dist/style.css +217 -194
  355. package/dist/tokens/core.d.ts +159 -0
  356. package/dist/tokens/core.js +144 -0
  357. package/dist/tokens/core.js.map +1 -0
  358. package/dist/tokens/css-vars.d.ts +213 -2
  359. package/dist/tokens/css-vars.js +590 -227
  360. package/dist/tokens/css-vars.js.map +1 -1
  361. package/dist/tokens/index.d.ts +31 -228
  362. package/dist/tokens/index.js +281 -366
  363. package/dist/tokens/index.js.map +1 -1
  364. package/dist/tokens/palettes/astro.d.ts +129 -0
  365. package/dist/tokens/palettes/astro.js +112 -0
  366. package/dist/tokens/palettes/astro.js.map +1 -0
  367. package/dist/tokens/palettes/index.d.ts +288 -0
  368. package/dist/tokens/palettes/index.js +35 -0
  369. package/dist/tokens/palettes/index.js.map +1 -0
  370. package/dist/tokens/palettes/tailwind.d.ts +324 -0
  371. package/dist/tokens/palettes/tailwind.js +201 -0
  372. package/dist/tokens/palettes/tailwind.js.map +1 -0
  373. package/dist/tokens/palettes/zendir.d.ts +126 -0
  374. package/dist/tokens/palettes/zendir.js +92 -0
  375. package/dist/tokens/palettes/zendir.js.map +1 -0
  376. package/dist/tokens/themes.d.ts +30 -0
  377. package/dist/tokens/themes.js +704 -0
  378. package/dist/tokens/themes.js.map +1 -0
  379. package/dist/tokens/tokens.css +419 -41
  380. package/dist/types/index.d.ts +2 -2
  381. package/package.json +310 -313
  382. package/dist/index.js.map +0 -1
  383. package/dist/react/3d/index.js.map +0 -1
  384. package/dist/react/astro/index.js.map +0 -1
  385. package/dist/react/cards/index.js.map +0 -1
  386. package/dist/react/charts/index.js.map +0 -1
  387. package/dist/react/core/index.js.map +0 -1
  388. package/dist/react/panels/index.js.map +0 -1
  389. package/dist/react/theme/astro-tokens.d.ts +0 -153
  390. package/dist/react/theme/index.js.map +0 -1
  391. package/dist/react.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.js","sources":["../../../../src/react/core/data/DataTable.tsx"],"sourcesContent":["/**\r\n * @zendir/ui - DataTable Component\r\n * \r\n * Structured data display with expandable groups, responsive columns,\r\n * and theme-aware styling. Designed for telemetry parameter grids,\r\n * link budget displays, spacecraft information panels.\r\n * \r\n * Astro UX Compliance:\r\n * - Tabular monospace numbers for value columns\r\n * - Status-based row coloring\r\n * - Compact mode support\r\n * - Accessible table semantics\r\n * \r\n * Enhanced Tooltip System:\r\n * - Row-level tooltips (string or rich ReactNode via rowTooltipContent)\r\n * - Cell-level tooltips per column definition\r\n * - Header tooltips for column descriptions\r\n * - Built-in DataTableRowDetail component for structured detail views\r\n * - Portal-rendered, WCAG-compliant, animated tooltips\r\n * \r\n * @example\r\n * ```tsx\r\n * <DataTable\r\n * columns={[\r\n * { key: 'label', header: 'Parameter', width: '40%', headerTooltip: 'Telemetry parameter name' },\r\n * { key: 'value', header: 'Value', align: 'right', mono: true, cellTooltip: (v, row) => `Raw: ${v}` },\r\n * { key: 'unit', header: 'Unit', width: 80 },\r\n * ]}\r\n * data={[\r\n * { label: 'Frequency', value: '437.500', unit: 'MHz' },\r\n * { label: 'Bandwidth', value: '25.000', unit: 'kHz' },\r\n * ]}\r\n * rowTooltipContent={(row) => (\r\n * <DataTableRowDetail\r\n * title={row.label}\r\n * fields={[\r\n * { label: 'Value', value: `${row.value} ${row.unit}` },\r\n * ]}\r\n * />\r\n * )}\r\n * />\r\n * ```\r\n */\r\n\r\nimport React, { memo, useState, useCallback, useMemo } from 'react';\r\nimport { useTheme } from '../../theme';\r\nimport { useBreakpoint } from '../layout/useBreakpoint';\r\nimport { Tooltip } from '../overlays/Tooltip';\r\nimport type { TooltipPlacement } from '../overlays/Tooltip';\r\nimport { addAlpha } from '../../utils';\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface DataTableColumn<T = Record<string, unknown>> {\r\n /** Key in data object */\r\n key: string;\r\n /** Column header text */\r\n header: string;\r\n /** Column width (CSS value or number for px) */\r\n width?: string | number;\r\n /** Text alignment */\r\n align?: 'left' | 'center' | 'right';\r\n /** Use monospace font (good for numbers) */\r\n mono?: boolean;\r\n /** Custom cell renderer */\r\n render?: (value: unknown, row: T, index: number) => React.ReactNode;\r\n /** Hide column on mobile */\r\n hideOnMobile?: boolean;\r\n /** Tooltip for the column header (explains what this column represents) */\r\n headerTooltip?: string;\r\n /** Per-cell tooltip — return string or ReactNode, or undefined to skip */\r\n cellTooltip?: (value: unknown, row: T, index: number) => React.ReactNode | undefined;\r\n}\r\n\r\nexport interface DataTableProps<T = Record<string, unknown>> {\r\n /** Column definitions */\r\n columns: DataTableColumn<T>[];\r\n /** Data rows */\r\n data: T[];\r\n /** Key field for React keys (default: index) */\r\n keyField?: string;\r\n /** Group rows by this field */\r\n groupBy?: string;\r\n /** Allow expanding/collapsing groups */\r\n expandable?: boolean;\r\n /** Default expanded state for groups */\r\n defaultExpanded?: boolean;\r\n /** Striped rows */\r\n striped?: boolean;\r\n /** Compact row padding */\r\n compact?: boolean;\r\n /** Show header row */\r\n showHeader?: boolean;\r\n /** Empty state message */\r\n emptyMessage?: string;\r\n /** Row click handler */\r\n onRowClick?: (row: T, index: number) => void;\r\n /** Simple string tooltip for each row (legacy — uses native title) */\r\n rowTooltip?: (row: T) => string | undefined;\r\n /** Rich tooltip content for each row — renders in a portal-based Tooltip */\r\n rowTooltipContent?: (row: T, index: number) => React.ReactNode | undefined;\r\n /** Placement for row and cell tooltips (default: 'top') */\r\n tooltipPlacement?: TooltipPlacement;\r\n /** Delay before tooltips appear in ms (default: 300) */\r\n tooltipDelay?: number;\r\n /** Max height with scroll */\r\n maxHeight?: string | number;\r\n /** Color for boolean ✓/✗ values (e.g. '#fff' for white). Defaults to text.primary or row status. */\r\n booleanColor?: string;\r\n /** Optional row status key or getter — boolean cells use this row's status color when set (matches white/status design). */\r\n getRowStatus?: (row: T, index: number) => 'normal' | 'caution' | 'serious' | 'critical' | 'standby' | 'off' | undefined;\r\n /** Custom style */\r\n style?: React.CSSProperties;\r\n}\r\n\r\n// ─── DataTableRowDetail ──────────────────────────────────────────────────────\r\n\r\nexport interface DataTableRowDetailField {\r\n /** Field label */\r\n label: string;\r\n /** Field value (string, number, or ReactNode for custom rendering) */\r\n value: React.ReactNode;\r\n /** Optional status color for the value */\r\n status?: 'normal' | 'caution' | 'serious' | 'critical' | 'standby' | 'off';\r\n /** Use monospace font for this value */\r\n mono?: boolean;\r\n}\r\n\r\nexport interface DataTableRowDetailProps {\r\n /** Title shown at the top of the tooltip */\r\n title?: React.ReactNode;\r\n /** Optional subtitle / secondary info */\r\n subtitle?: React.ReactNode;\r\n /** Structured key-value fields to display */\r\n fields?: DataTableRowDetailField[];\r\n /** Optional footer content (timestamps, actions, etc.) */\r\n footer?: React.ReactNode;\r\n /** Optional icon or status indicator beside the title */\r\n icon?: React.ReactNode;\r\n /** Maximum width of the tooltip (default: 320) */\r\n maxWidth?: number;\r\n}\r\n\r\nconst STATUS_DOT_COLORS: Record<string, string> = {\r\n normal: '#56F000',\r\n caution: '#FCE83A',\r\n serious: '#FFB302',\r\n critical: '#FF3838',\r\n standby: '#2DCCFF',\r\n off: '#9EA7AD',\r\n};\r\n\r\n/**\r\n * Pre-built tooltip content renderer for DataTable rows.\r\n * Provides a structured layout: title, key-value fields, and optional footer.\r\n * \r\n * @example\r\n * ```tsx\r\n * <DataTable\r\n * columns={columns}\r\n * data={data}\r\n * rowTooltipContent={(row) => (\r\n * <DataTableRowDetail\r\n * title={row.parameter}\r\n * subtitle={row.category}\r\n * fields={[\r\n * { label: 'Value', value: row.value, mono: true },\r\n * { label: 'Status', value: row.status, status: row.status },\r\n * ]}\r\n * footer={`Last updated: ${row.timestamp}`}\r\n * />\r\n * )}\r\n * />\r\n * ```\r\n */\r\nexport const DataTableRowDetail = memo(function DataTableRowDetail({\r\n title,\r\n subtitle,\r\n fields,\r\n footer,\r\n icon,\r\n maxWidth = 320,\r\n}: DataTableRowDetailProps): React.ReactElement {\r\n const { tokens } = useTheme();\r\n\r\n return (\r\n <div style={{ maxWidth, minWidth: 180 }}>\r\n {/* Header */}\r\n {(title || icon) && (\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.spacing.sm,\r\n marginBottom: fields?.length || subtitle ? tokens.spacing.sm : 0,\r\n }}>\r\n {icon}\r\n <div style={{ flex: 1, minWidth: 0 }}>\r\n {title && (\r\n <div style={{\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n fontSize: tokens.typography.fontSize.sm,\r\n color: tokens.colors.text.primary,\r\n lineHeight: 1.3,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n }}>\r\n {title}\r\n </div>\r\n )}\r\n {subtitle && (\r\n <div style={{\r\n fontSize: tokens.typography.fontSize.xxs,\r\n color: tokens.colors.text.tertiary,\r\n marginTop: 2,\r\n }}>\r\n {subtitle}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Fields */}\r\n {fields && fields.length > 0 && (\r\n <div style={{\r\n display: 'grid',\r\n gridTemplateColumns: 'auto 1fr',\r\n gap: `${tokens.spacing.xs} ${tokens.spacing.md}`,\r\n fontSize: tokens.typography.fontSize.xs,\r\n lineHeight: 1.5,\r\n }}>\r\n {fields.map((field, i) => (\r\n <React.Fragment key={i}>\r\n <span style={{\r\n color: tokens.colors.text.tertiary,\r\n whiteSpace: 'nowrap',\r\n }}>\r\n {field.label}\r\n </span>\r\n <span style={{\r\n color: field.status\r\n ? STATUS_DOT_COLORS[field.status] || tokens.colors.text.primary\r\n : tokens.colors.text.primary,\r\n fontFamily: field.mono ? tokens.typography.fontFamily.mono : 'inherit',\r\n fontVariantNumeric: field.mono ? 'tabular-nums' : 'normal',\r\n textAlign: 'right',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n }}>\r\n {field.value}\r\n </span>\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* Footer */}\r\n {footer && (\r\n <div style={{\r\n marginTop: tokens.spacing.sm,\r\n paddingTop: tokens.spacing.xs,\r\n borderTop: `1px solid ${addAlpha(tokens.colors.border.muted, 0.19)}`,\r\n fontSize: tokens.typography.fontSize.xxs,\r\n color: tokens.colors.text.tertiary,\r\n }}>\r\n {footer}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n});\r\n\r\n// ─── Cell Tooltip Wrapper ────────────────────────────────────────────────────\r\n\r\ninterface CellTooltipWrapperProps {\r\n content: React.ReactNode;\r\n placement: TooltipPlacement;\r\n delay: number;\r\n children: React.ReactElement;\r\n}\r\n\r\nconst CellTooltipWrapper = memo(function CellTooltipWrapper({\r\n content,\r\n placement,\r\n delay,\r\n children,\r\n}: CellTooltipWrapperProps): React.ReactElement {\r\n if (!content) return children;\r\n return (\r\n <Tooltip content={content} placement={placement} delay={delay}>\r\n {children}\r\n </Tooltip>\r\n );\r\n});\r\n\r\n// ─── DataTable ───────────────────────────────────────────────────────────────\r\n\r\nexport const DataTable = memo(function DataTable<T extends Record<string, unknown>>({\r\n columns,\r\n data,\r\n keyField,\r\n groupBy,\r\n expandable = false,\r\n defaultExpanded = true,\r\n striped = false,\r\n compact = false,\r\n showHeader = true,\r\n emptyMessage = 'No data available',\r\n onRowClick,\r\n rowTooltip,\r\n rowTooltipContent,\r\n tooltipPlacement = 'top',\r\n tooltipDelay = 300,\r\n maxHeight,\r\n booleanColor,\r\n getRowStatus,\r\n style,\r\n}: DataTableProps<T>): React.ReactElement {\r\n const { tokens } = useTheme();\r\n const { isMobile: isMobileView } = useBreakpoint();\r\n const statusColorMap = useMemo(() => ({\r\n normal: tokens.colors.status.normal,\r\n caution: tokens.colors.status.caution,\r\n serious: tokens.colors.status.serious,\r\n critical: tokens.colors.status.critical,\r\n standby: tokens.colors.status.standby,\r\n off: tokens.colors.status.off,\r\n }), [tokens.colors.status]);\r\n const visibleColumns = isMobileView ? columns.filter(col => !col.hideOnMobile) : columns;\r\n \r\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(\r\n defaultExpanded ? new Set(['__all__']) : new Set()\r\n );\r\n const [hoveredRow, setHoveredRow] = useState<number | null>(null);\r\n const visibleColumnCount = Math.max(1, visibleColumns.length);\r\n \r\n const cellPadding = compact ? `${tokens.spacing.xs} ${tokens.spacing.sm}` : `${tokens.spacing.sm} ${tokens.spacing.md}`;\r\n \r\n const toggleGroup = useCallback((group: string) => {\r\n setExpandedGroups(prev => {\r\n const next = new Set(prev);\r\n if (next.has(group)) next.delete(group);\r\n else next.add(group);\r\n return next;\r\n });\r\n }, []);\r\n \r\n const isGroupExpanded = useCallback((group: string) => {\r\n return expandedGroups.has('__all__') || expandedGroups.has(group);\r\n }, [expandedGroups]);\r\n \r\n const groups = useMemo(() => {\r\n if (!groupBy) return [{ key: '__default__', label: '', rows: data }];\r\n \r\n const map = new Map<string, T[]>();\r\n data.forEach(row => {\r\n const key = String((row as Record<string, unknown>)[groupBy] ?? 'Other');\r\n if (!map.has(key)) map.set(key, []);\r\n map.get(key)!.push(row);\r\n });\r\n \r\n return Array.from(map.entries()).map(([key, rows]) => ({\r\n key,\r\n label: key,\r\n rows,\r\n }));\r\n }, [data, groupBy]);\r\n \r\n const resolveWidth = (w: string | number | undefined): string | undefined => {\r\n if (w === undefined) return undefined;\r\n if (typeof w === 'number') return `${w}px`;\r\n return w;\r\n };\r\n \r\n const renderCell = (col: DataTableColumn<T>, row: T, rowIndex: number) => {\r\n const value = row[col.key];\r\n if (col.render) return col.render(value, row, rowIndex);\r\n if (value === null || value === undefined) return '—';\r\n if (typeof value === 'boolean') {\r\n const label = value ? '✓' : '✗';\r\n const color = booleanColor\r\n ?? (getRowStatus ? (() => { const s = getRowStatus(row, rowIndex); return s ? statusColorMap[s] : undefined; })() : undefined)\r\n ?? tokens.colors.text.primary;\r\n return <span style={{ color }}>{label}</span>;\r\n }\r\n return String(value);\r\n };\r\n\r\n const renderCellWithTooltip = (col: DataTableColumn<T>, row: T, rowIndex: number) => {\r\n const cellContent = renderCell(col, row, rowIndex);\r\n if (!col.cellTooltip) return cellContent;\r\n\r\n const tooltipContent = col.cellTooltip(row[col.key], row, rowIndex);\r\n if (!tooltipContent) return cellContent;\r\n\r\n return (\r\n <CellTooltipWrapper\r\n content={tooltipContent}\r\n placement={tooltipPlacement}\r\n delay={tooltipDelay}\r\n >\r\n <span style={{ cursor: 'help' }}>{cellContent}</span>\r\n </CellTooltipWrapper>\r\n );\r\n };\r\n\r\n const renderHeaderCell = (col: DataTableColumn<T>) => {\r\n const headerContent = (\r\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 4 }}>\r\n {col.header}\r\n {col.headerTooltip && (\r\n <svg\r\n width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\"\r\n style={{ opacity: 0.5, flexShrink: 0 }}\r\n >\r\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\r\n <path d=\"M8 7v4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n <circle cx=\"8\" cy=\"5\" r=\"0.75\" fill=\"currentColor\" />\r\n </svg>\r\n )}\r\n </span>\r\n );\r\n \r\n if (!col.headerTooltip) return headerContent;\r\n \r\n return (\r\n <Tooltip content={col.headerTooltip} placement=\"bottom\" delay={tooltipDelay}>\r\n {headerContent}\r\n </Tooltip>\r\n );\r\n };\r\n \r\n const chevron = (expanded: boolean) => (\r\n <svg\r\n width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\"\r\n style={{\r\n transition: tokens.animation.fast,\r\n transform: expanded ? 'rotate(90deg)' : 'rotate(0deg)',\r\n flexShrink: 0,\r\n }}\r\n >\r\n <polyline points=\"9 18 15 12 9 6\" />\r\n </svg>\r\n );\r\n\r\n const hasRichRowTooltip = !!rowTooltipContent;\r\n \r\n const renderRowContent = (row: T, rowIdx: number, localIndex: number) => {\r\n const isHovered = hoveredRow === rowIdx;\r\n const rowKey = keyField ? String(row[keyField]) : rowIdx;\r\n const useNativeTitle = !hasRichRowTooltip && rowTooltip;\r\n\r\n const tr = (\r\n <tr\r\n key={rowKey}\r\n tabIndex={onRowClick ? 0 : undefined}\r\n onClick={onRowClick ? () => onRowClick(row, rowIdx) : undefined}\r\n onKeyDown={onRowClick ? (e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onRowClick(row, rowIdx); } } : undefined}\r\n onMouseEnter={() => setHoveredRow(rowIdx)}\r\n onMouseLeave={() => setHoveredRow(null)}\r\n title={useNativeTitle ? rowTooltip(row) : undefined}\r\n style={{\r\n cursor: onRowClick ? 'pointer' : 'default',\r\n backgroundColor: isHovered\r\n ? addAlpha(tokens.colors.accent.primary, 0.08)\r\n : striped && localIndex % 2 === 1\r\n ? addAlpha(tokens.colors.background.surface, 0.5)\r\n : 'transparent',\r\n transition: 'background-color 150ms ease',\r\n }}\r\n >\r\n {visibleColumns.map(col => (\r\n <td\r\n key={col.key}\r\n style={{\r\n padding: cellPadding,\r\n textAlign: col.align || 'left',\r\n color: tokens.colors.text.primary,\r\n borderBottom: `1px solid ${addAlpha(tokens.colors.border.muted, 0.08)}`,\r\n fontFamily: col.mono ? tokens.typography.fontFamily.mono : 'inherit',\r\n fontVariantNumeric: col.mono ? 'tabular-nums' : 'normal',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n maxWidth: resolveWidth(col.width) || '300px',\r\n }}\r\n >\r\n {renderCellWithTooltip(col, row, rowIdx)}\r\n </td>\r\n ))}\r\n </tr>\r\n );\r\n\r\n if (hasRichRowTooltip) {\r\n const tooltipContent = rowTooltipContent(row, rowIdx);\r\n if (tooltipContent) {\r\n return (\r\n <Tooltip\r\n key={rowKey}\r\n content={tooltipContent}\r\n placement={tooltipPlacement}\r\n delay={tooltipDelay}\r\n >\r\n {tr}\r\n </Tooltip>\r\n );\r\n }\r\n }\r\n\r\n return tr;\r\n };\r\n \r\n let globalRowIndex = 0;\r\n \r\n return (\r\n <div\r\n style={{\r\n fontFamily: tokens.typography.fontFamily.primary,\r\n overflow: 'auto',\r\n WebkitOverflowScrolling: 'touch',\r\n maxHeight: typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight,\r\n borderRadius: tokens.borderRadius.md,\r\n border: tokens.borders.divider,\r\n ...style,\r\n }}\r\n >\r\n <table\r\n style={{\r\n width: '100%',\r\n borderCollapse: 'collapse',\r\n fontSize: compact ? tokens.typography.fontSize.xs : tokens.typography.fontSize.sm,\r\n }}\r\n >\r\n {showHeader && (\r\n <thead>\r\n <tr>\r\n {visibleColumns.map(col => (\r\n <th\r\n key={col.key}\r\n style={{\r\n padding: cellPadding,\r\n textAlign: col.align || 'left',\r\n fontSize: tokens.typography.fontSize.xxs,\r\n fontWeight: tokens.typography.fontWeight.bold,\r\n color: tokens.colors.text.tertiary,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.06em',\r\n backgroundColor: tokens.colors.background.surface,\r\n borderBottom: tokens.borders.divider,\r\n width: resolveWidth(col.width),\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 1,\r\n whiteSpace: 'nowrap',\r\n }}\r\n >\r\n {renderHeaderCell(col)}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n )}\r\n \r\n <tbody>\r\n {data.length === 0 && (\r\n <tr>\r\n <td\r\n colSpan={visibleColumnCount}\r\n style={{\r\n padding: tokens.spacing.xl,\r\n textAlign: 'center',\r\n color: tokens.colors.text.tertiary,\r\n fontSize: tokens.typography.fontSize.sm,\r\n }}\r\n >\r\n {emptyMessage}\r\n </td>\r\n </tr>\r\n )}\r\n \r\n {groups.map(group => {\r\n const isExpanded = !groupBy || isGroupExpanded(group.key);\r\n \r\n return (\r\n <React.Fragment key={group.key}>\r\n {groupBy && group.label && (\r\n <tr\r\n style={{\r\n backgroundColor: addAlpha(tokens.colors.accent.primary, 0.08),\r\n }}\r\n >\r\n <td\r\n colSpan={visibleColumnCount}\r\n style={{\r\n padding: 0,\r\n borderBottom: tokens.borders.divider,\r\n }}\r\n >\r\n {expandable ? (\r\n <button\r\n type=\"button\"\r\n aria-expanded={isExpanded}\r\n onClick={() => toggleGroup(group.key)}\r\n style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.spacing.xs,\r\n width: '100%',\r\n padding: cellPadding,\r\n margin: 0,\r\n border: 'none',\r\n background: 'none',\r\n cursor: 'pointer',\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.colors.text.primary,\r\n fontSize: compact ? tokens.typography.fontSize.xs : tokens.typography.fontSize.sm,\r\n fontFamily: 'inherit',\r\n textAlign: 'left',\r\n }}\r\n >\r\n {chevron(isExpanded)}\r\n {group.label}\r\n <span style={{\r\n fontSize: tokens.typography.fontSize.xxs,\r\n color: tokens.colors.text.tertiary,\r\n fontWeight: tokens.typography.fontWeight.normal,\r\n }}>\r\n ({group.rows.length})\r\n </span>\r\n </button>\r\n ) : (\r\n <div\r\n style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.spacing.xs,\r\n padding: cellPadding,\r\n fontWeight: tokens.typography.fontWeight.semibold,\r\n color: tokens.colors.text.primary,\r\n fontSize: compact ? tokens.typography.fontSize.xs : tokens.typography.fontSize.sm,\r\n }}\r\n >\r\n {group.label}\r\n <span style={{\r\n fontSize: tokens.typography.fontSize.xxs,\r\n color: tokens.colors.text.tertiary,\r\n fontWeight: tokens.typography.fontWeight.normal,\r\n }}>\r\n ({group.rows.length})\r\n </span>\r\n </div>\r\n )}\r\n </td>\r\n </tr>\r\n )}\r\n \r\n {isExpanded && group.rows.map((row, localIndex) => {\r\n const rowIdx = globalRowIndex++;\r\n return renderRowContent(row, rowIdx, localIndex);\r\n })}\r\n </React.Fragment>\r\n );\r\n })}\r\n </tbody>\r\n </table>\r\n </div>\r\n );\r\n}) as <T extends Record<string, unknown>>(props: DataTableProps<T>) => React.ReactElement;\r\n\r\nexport default DataTable;\r\n"],"names":["DataTableRowDetail","CellTooltipWrapper","DataTable"],"mappings":";;;;;;AA+IA,MAAM,oBAA4C;AAAA,EAChD,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,KAAK;AACP;AAyBO,MAAM,qBAAqB,KAAK,SAASA,oBAAmB;AAAA,EACjE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAgD;AAC9C,QAAM,EAAE,OAAA,IAAW,SAAA;AAEnB,8BACG,OAAA,EAAI,OAAO,EAAE,UAAU,UAAU,OAE9B,UAAA;AAAA,KAAA,SAAS,SACT,qBAAC,OAAA,EAAI,OAAO;AAAA,MACV,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,KAAK,OAAO,QAAQ;AAAA,MACpB,eAAc,iCAAQ,WAAU,WAAW,OAAO,QAAQ,KAAK;AAAA,IAAA,GAE9D,UAAA;AAAA,MAAA;AAAA,MACD,qBAAC,SAAI,OAAO,EAAE,MAAM,GAAG,UAAU,KAC9B,UAAA;AAAA,QAAA,SACC,oBAAC,SAAI,OAAO;AAAA,UACV,YAAY,OAAO,WAAW,WAAW;AAAA,UACzC,UAAU,OAAO,WAAW,SAAS;AAAA,UACrC,OAAO,OAAO,OAAO,KAAK;AAAA,UAC1B,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,cAAc;AAAA,QAAA,GAEb,UAAA,OACH;AAAA,QAED,YACC,oBAAC,OAAA,EAAI,OAAO;AAAA,UACV,UAAU,OAAO,WAAW,SAAS;AAAA,UACrC,OAAO,OAAO,OAAO,KAAK;AAAA,UAC1B,WAAW;AAAA,QAAA,GAEV,UAAA,SAAA,CACH;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,GACF;AAAA,IAID,UAAU,OAAO,SAAS,KACzB,oBAAC,SAAI,OAAO;AAAA,MACV,SAAS;AAAA,MACT,qBAAqB;AAAA,MACrB,KAAK,GAAG,OAAO,QAAQ,EAAE,IAAI,OAAO,QAAQ,EAAE;AAAA,MAC9C,UAAU,OAAO,WAAW,SAAS;AAAA,MACrC,YAAY;AAAA,IAAA,GAEX,iBAAO,IAAI,CAAC,OAAO,MAClB,qBAAC,MAAM,UAAN,EACC,UAAA;AAAA,MAAA,oBAAC,UAAK,OAAO;AAAA,QACX,OAAO,OAAO,OAAO,KAAK;AAAA,QAC1B,YAAY;AAAA,MAAA,GAEX,gBAAM,OACT;AAAA,MACA,oBAAC,UAAK,OAAO;AAAA,QACX,OAAO,MAAM,SACT,kBAAkB,MAAM,MAAM,KAAK,OAAO,OAAO,KAAK,UACtD,OAAO,OAAO,KAAK;AAAA,QACvB,YAAY,MAAM,OAAO,OAAO,WAAW,WAAW,OAAO;AAAA,QAC7D,oBAAoB,MAAM,OAAO,iBAAiB;AAAA,QAClD,WAAW;AAAA,QACX,UAAU;AAAA,QACV,cAAc;AAAA,QACd,YAAY;AAAA,MAAA,GAEX,gBAAM,MAAA,CACT;AAAA,IAAA,KAnBmB,CAoBrB,CACD,GACH;AAAA,IAID,UACC,oBAAC,OAAA,EAAI,OAAO;AAAA,MACV,WAAW,OAAO,QAAQ;AAAA,MAC1B,YAAY,OAAO,QAAQ;AAAA,MAC3B,WAAW,aAAa,SAAS,OAAO,OAAO,OAAO,OAAO,IAAI,CAAC;AAAA,MAClE,UAAU,OAAO,WAAW,SAAS;AAAA,MACrC,OAAO,OAAO,OAAO,KAAK;AAAA,IAAA,GAEzB,UAAA,OAAA,CACH;AAAA,EAAA,GAEJ;AAEJ,CAAC;AAWD,MAAM,qBAAqB,KAAK,SAASC,oBAAmB;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgD;AAC9C,MAAI,CAAC,QAAS,QAAO;AACrB,SACE,oBAAC,SAAA,EAAQ,SAAkB,WAAsB,OAC9C,UACH;AAEJ,CAAC;AAIM,MAAM,YAAY,KAAK,SAASC,WAA6C;AAAA,EAClF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,aAAa;AAAA,EACb,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0C;AACxC,QAAM,EAAE,OAAA,IAAW,SAAA;AACnB,QAAM,EAAE,UAAU,aAAA,IAAiB,cAAA;AACnC,QAAM,iBAAiB,QAAQ,OAAO;AAAA,IACpC,QAAQ,OAAO,OAAO,OAAO;AAAA,IAC7B,SAAS,OAAO,OAAO,OAAO;AAAA,IAC9B,SAAS,OAAO,OAAO,OAAO;AAAA,IAC9B,UAAU,OAAO,OAAO,OAAO;AAAA,IAC/B,SAAS,OAAO,OAAO,OAAO;AAAA,IAC9B,KAAK,OAAO,OAAO,OAAO;AAAA,EAAA,IACxB,CAAC,OAAO,OAAO,MAAM,CAAC;AAC1B,QAAM,iBAAiB,eAAe,QAAQ,OAAO,SAAO,CAAC,IAAI,YAAY,IAAI;AAEjF,QAAM,CAAC,gBAAgB,iBAAiB,IAAI;AAAA,IAC1C,sCAAsB,IAAI,CAAC,SAAS,CAAC,wBAAQ,IAAA;AAAA,EAAI;AAEnD,QAAM,CAAC,YAAY,aAAa,IAAI,SAAwB,IAAI;AAChE,QAAM,qBAAqB,KAAK,IAAI,GAAG,eAAe,MAAM;AAE5D,QAAM,cAAc,UAAU,GAAG,OAAO,QAAQ,EAAE,IAAI,OAAO,QAAQ,EAAE,KAAK,GAAG,OAAO,QAAQ,EAAE,IAAI,OAAO,QAAQ,EAAE;AAErH,QAAM,cAAc,YAAY,CAAC,UAAkB;AACjD,sBAAkB,CAAA,SAAQ;AACxB,YAAM,OAAO,IAAI,IAAI,IAAI;AACzB,UAAI,KAAK,IAAI,KAAK,EAAG,MAAK,OAAO,KAAK;AAAA,UACjC,MAAK,IAAI,KAAK;AACnB,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAA,CAAE;AAEL,QAAM,kBAAkB,YAAY,CAAC,UAAkB;AACrD,WAAO,eAAe,IAAI,SAAS,KAAK,eAAe,IAAI,KAAK;AAAA,EAClE,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,SAAS,QAAQ,MAAM;AAC3B,QAAI,CAAC,QAAS,QAAO,CAAC,EAAE,KAAK,eAAe,OAAO,IAAI,MAAM,MAAM;AAEnE,UAAM,0BAAU,IAAA;AAChB,SAAK,QAAQ,CAAA,QAAO;AAClB,YAAM,MAAM,OAAQ,IAAgC,OAAO,KAAK,OAAO;AACvE,UAAI,CAAC,IAAI,IAAI,GAAG,EAAG,KAAI,IAAI,KAAK,EAAE;AAClC,UAAI,IAAI,GAAG,EAAG,KAAK,GAAG;AAAA,IACxB,CAAC;AAED,WAAO,MAAM,KAAK,IAAI,QAAA,CAAS,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO;AAAA,MACrD;AAAA,MACA,OAAO;AAAA,MACP;AAAA,IAAA,EACA;AAAA,EACJ,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,QAAM,eAAe,CAAC,MAAuD;AAC3E,QAAI,MAAM,OAAW,QAAO;AAC5B,QAAI,OAAO,MAAM,SAAU,QAAO,GAAG,CAAC;AACtC,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,CAAC,KAAyB,KAAQ,aAAqB;AACxE,UAAM,QAAQ,IAAI,IAAI,GAAG;AACzB,QAAI,IAAI,OAAQ,QAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;AACtD,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,QAAI,OAAO,UAAU,WAAW;AAC9B,YAAM,QAAQ,QAAQ,MAAM;AAC5B,YAAM,QAAQ,iBACR,gBAAgB,MAAM;AAAE,cAAM,IAAI,aAAa,KAAK,QAAQ;AAAG,eAAO,IAAI,eAAe,CAAC,IAAI;AAAA,MAAW,GAAA,IAAO,WACjH,OAAO,OAAO,KAAK;AACxB,iCAAQ,QAAA,EAAK,OAAO,EAAE,SAAU,UAAA,OAAM;AAAA,IACxC;AACA,WAAO,OAAO,KAAK;AAAA,EACrB;AAEA,QAAM,wBAAwB,CAAC,KAAyB,KAAQ,aAAqB;AACnF,UAAM,cAAc,WAAW,KAAK,KAAK,QAAQ;AACjD,QAAI,CAAC,IAAI,YAAa,QAAO;AAE7B,UAAM,iBAAiB,IAAI,YAAY,IAAI,IAAI,GAAG,GAAG,KAAK,QAAQ;AAClE,QAAI,CAAC,eAAgB,QAAO;AAE5B,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAW;AAAA,QACX,OAAO;AAAA,QAEP,8BAAC,QAAA,EAAK,OAAO,EAAE,QAAQ,OAAA,GAAW,UAAA,YAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EAGpD;AAEA,QAAM,mBAAmB,CAAC,QAA4B;AACpD,UAAM,gBACJ,qBAAC,QAAA,EAAK,OAAO,EAAE,SAAS,eAAe,YAAY,UAAU,KAAK,EAAA,GAC/D,UAAA;AAAA,MAAA,IAAI;AAAA,MACJ,IAAI,iBACH;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UAAK,QAAO;AAAA,UAAK,SAAQ;AAAA,UAAY,MAAK;AAAA,UAChD,OAAO,EAAE,SAAS,KAAK,YAAY,EAAA;AAAA,UAEnC,UAAA;AAAA,YAAA,oBAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,KAAI,QAAO,gBAAe,aAAY,MAAA,CAAM;AAAA,YACpE,oBAAC,UAAK,GAAE,UAAS,QAAO,gBAAe,aAAY,OAAM,eAAc,QAAA,CAAQ;AAAA,YAC/E,oBAAC,YAAO,IAAG,KAAI,IAAG,KAAI,GAAE,QAAO,MAAK,eAAA,CAAe;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACrD,GAEJ;AAGF,QAAI,CAAC,IAAI,cAAe,QAAO;AAE/B,WACE,oBAAC,WAAQ,SAAS,IAAI,eAAe,WAAU,UAAS,OAAO,cAC5D,UAAA,cAAA,CACH;AAAA,EAEJ;AAEA,QAAM,UAAU,CAAC,aACf;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MAAK,QAAO;AAAA,MAAK,SAAQ;AAAA,MAAY,MAAK;AAAA,MAChD,QAAO;AAAA,MAAe,aAAY;AAAA,MAAI,eAAc;AAAA,MACpD,OAAO;AAAA,QACL,YAAY,OAAO,UAAU;AAAA,QAC7B,WAAW,WAAW,kBAAkB;AAAA,QACxC,YAAY;AAAA,MAAA;AAAA,MAGd,UAAA,oBAAC,YAAA,EAAS,QAAO,iBAAA,CAAiB;AAAA,IAAA;AAAA,EAAA;AAItC,QAAM,oBAAoB,CAAC,CAAC;AAE5B,QAAM,mBAAmB,CAAC,KAAQ,QAAgB,eAAuB;AACvE,UAAM,YAAY,eAAe;AACjC,UAAM,SAAS,WAAW,OAAO,IAAI,QAAQ,CAAC,IAAI;AAClD,UAAM,iBAAiB,CAAC,qBAAqB;AAE7C,UAAM,KACJ;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,UAAU,aAAa,IAAI;AAAA,QAC3B,SAAS,aAAa,MAAM,WAAW,KAAK,MAAM,IAAI;AAAA,QACtD,WAAW,aAAa,CAAC,MAAM;AAAE,cAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AAAE,cAAE,eAAA;AAAkB,uBAAW,KAAK,MAAM;AAAA,UAAG;AAAA,QAAE,IAAI;AAAA,QAC9H,cAAc,MAAM,cAAc,MAAM;AAAA,QACxC,cAAc,MAAM,cAAc,IAAI;AAAA,QACtC,OAAO,iBAAiB,WAAW,GAAG,IAAI;AAAA,QAC1C,OAAO;AAAA,UACL,QAAQ,aAAa,YAAY;AAAA,UACjC,iBAAiB,YACb,SAAS,OAAO,OAAO,OAAO,SAAS,IAAI,IAC3C,WAAW,aAAa,MAAM,IAC5B,SAAS,OAAO,OAAO,WAAW,SAAS,GAAG,IAC9C;AAAA,UACN,YAAY;AAAA,QAAA;AAAA,QAGb,UAAA,eAAe,IAAI,CAAA,QAClB;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,WAAW,IAAI,SAAS;AAAA,cACxB,OAAO,OAAO,OAAO,KAAK;AAAA,cAC1B,cAAc,aAAa,SAAS,OAAO,OAAO,OAAO,OAAO,IAAI,CAAC;AAAA,cACrE,YAAY,IAAI,OAAO,OAAO,WAAW,WAAW,OAAO;AAAA,cAC3D,oBAAoB,IAAI,OAAO,iBAAiB;AAAA,cAChD,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,cAAc;AAAA,cACd,UAAU,aAAa,IAAI,KAAK,KAAK;AAAA,YAAA;AAAA,YAGtC,UAAA,sBAAsB,KAAK,KAAK,MAAM;AAAA,UAAA;AAAA,UAdlC,IAAI;AAAA,QAAA,CAgBZ;AAAA,MAAA;AAAA,MAnCI;AAAA,IAAA;AAuCT,QAAI,mBAAmB;AACrB,YAAM,iBAAiB,kBAAkB,KAAK,MAAM;AACpD,UAAI,gBAAgB;AAClB,eACE;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,SAAS;AAAA,YACT,WAAW;AAAA,YACX,OAAO;AAAA,YAEN,UAAA;AAAA,UAAA;AAAA,UALI;AAAA,QAAA;AAAA,MAQX;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB;AAErB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,YAAY,OAAO,WAAW,WAAW;AAAA,QACzC,UAAU;AAAA,QACV,yBAAyB;AAAA,QACzB,WAAW,OAAO,cAAc,WAAW,GAAG,SAAS,OAAO;AAAA,QAC9D,cAAc,OAAO,aAAa;AAAA,QAClC,QAAQ,OAAO,QAAQ;AAAA,QACvB,GAAG;AAAA,MAAA;AAAA,MAGL,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,OAAO;AAAA,YACP,gBAAgB;AAAA,YAChB,UAAU,UAAU,OAAO,WAAW,SAAS,KAAK,OAAO,WAAW,SAAS;AAAA,UAAA;AAAA,UAGhF,UAAA;AAAA,YAAA,kCACE,SAAA,EACC,UAAA,oBAAC,MAAA,EACE,UAAA,eAAe,IAAI,CAAA,QAClB;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,OAAO;AAAA,kBACL,SAAS;AAAA,kBACT,WAAW,IAAI,SAAS;AAAA,kBACxB,UAAU,OAAO,WAAW,SAAS;AAAA,kBACrC,YAAY,OAAO,WAAW,WAAW;AAAA,kBACzC,OAAO,OAAO,OAAO,KAAK;AAAA,kBAC1B,eAAe;AAAA,kBACf,eAAe;AAAA,kBACf,iBAAiB,OAAO,OAAO,WAAW;AAAA,kBAC1C,cAAc,OAAO,QAAQ;AAAA,kBAC7B,OAAO,aAAa,IAAI,KAAK;AAAA,kBAC7B,UAAU;AAAA,kBACV,KAAK;AAAA,kBACL,QAAQ;AAAA,kBACR,YAAY;AAAA,gBAAA;AAAA,gBAGb,2BAAiB,GAAG;AAAA,cAAA;AAAA,cAlBhB,IAAI;AAAA,YAAA,CAoBZ,GACH,EAAA,CACF;AAAA,iCAGD,SAAA,EACE,UAAA;AAAA,cAAA,KAAK,WAAW,KACf,oBAAC,MAAA,EACC,UAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS;AAAA,kBACT,OAAO;AAAA,oBACL,SAAS,OAAO,QAAQ;AAAA,oBACxB,WAAW;AAAA,oBACX,OAAO,OAAO,OAAO,KAAK;AAAA,oBAC1B,UAAU,OAAO,WAAW,SAAS;AAAA,kBAAA;AAAA,kBAGtC,UAAA;AAAA,gBAAA;AAAA,cAAA,GAEL;AAAA,cAGD,OAAO,IAAI,CAAA,UAAS;AACnB,sBAAM,aAAa,CAAC,WAAW,gBAAgB,MAAM,GAAG;AAExD,uBACE,qBAAC,MAAM,UAAN,EACE,UAAA;AAAA,kBAAA,WAAW,MAAM,SAChB;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,OAAO;AAAA,wBACL,iBAAiB,SAAS,OAAO,OAAO,OAAO,SAAS,IAAI;AAAA,sBAAA;AAAA,sBAG9D,UAAA;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,SAAS;AAAA,0BACT,OAAO;AAAA,4BACL,SAAS;AAAA,4BACT,cAAc,OAAO,QAAQ;AAAA,0BAAA;AAAA,0BAG9B,UAAA,aACC;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,MAAK;AAAA,8BACL,iBAAe;AAAA,8BACf,SAAS,MAAM,YAAY,MAAM,GAAG;AAAA,8BACpC,OAAO;AAAA,gCACL,SAAS;AAAA,gCACT,YAAY;AAAA,gCACZ,KAAK,OAAO,QAAQ;AAAA,gCACpB,OAAO;AAAA,gCACP,SAAS;AAAA,gCACT,QAAQ;AAAA,gCACR,QAAQ;AAAA,gCACR,YAAY;AAAA,gCACZ,QAAQ;AAAA,gCACR,YAAY,OAAO,WAAW,WAAW;AAAA,gCACzC,OAAO,OAAO,OAAO,KAAK;AAAA,gCAC1B,UAAU,UAAU,OAAO,WAAW,SAAS,KAAK,OAAO,WAAW,SAAS;AAAA,gCAC/E,YAAY;AAAA,gCACZ,WAAW;AAAA,8BAAA;AAAA,8BAGZ,UAAA;AAAA,gCAAA,QAAQ,UAAU;AAAA,gCAClB,MAAM;AAAA,gCACP,qBAAC,UAAK,OAAO;AAAA,kCACX,UAAU,OAAO,WAAW,SAAS;AAAA,kCACrC,OAAO,OAAO,OAAO,KAAK;AAAA,kCAC1B,YAAY,OAAO,WAAW,WAAW;AAAA,gCAAA,GACxC,UAAA;AAAA,kCAAA;AAAA,kCACC,MAAM,KAAK;AAAA,kCAAO;AAAA,gCAAA,EAAA,CACtB;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BAAA,IAGF;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,OAAO;AAAA,gCACL,SAAS;AAAA,gCACT,YAAY;AAAA,gCACZ,KAAK,OAAO,QAAQ;AAAA,gCACpB,SAAS;AAAA,gCACT,YAAY,OAAO,WAAW,WAAW;AAAA,gCACzC,OAAO,OAAO,OAAO,KAAK;AAAA,gCAC1B,UAAU,UAAU,OAAO,WAAW,SAAS,KAAK,OAAO,WAAW,SAAS;AAAA,8BAAA;AAAA,8BAGhF,UAAA;AAAA,gCAAA,MAAM;AAAA,gCACP,qBAAC,UAAK,OAAO;AAAA,kCACX,UAAU,OAAO,WAAW,SAAS;AAAA,kCACrC,OAAO,OAAO,OAAO,KAAK;AAAA,kCAC1B,YAAY,OAAO,WAAW,WAAW;AAAA,gCAAA,GACxC,UAAA;AAAA,kCAAA;AAAA,kCACC,MAAM,KAAK;AAAA,kCAAO;AAAA,gCAAA,EAAA,CACtB;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACF;AAAA,sBAAA;AAAA,oBAEJ;AAAA,kBAAA;AAAA,kBAIH,cAAc,MAAM,KAAK,IAAI,CAAC,KAAK,eAAe;AACjD,0BAAM,SAAS;AACf,2BAAO,iBAAiB,KAAK,QAAQ,UAAU;AAAA,kBACjD,CAAC;AAAA,gBAAA,EAAA,GA3EkB,MAAM,GA4E3B;AAAA,cAEJ,CAAC;AAAA,YAAA,EAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN,CAAC;"}
1
+ {"version":3,"file":"DataTable.js","names":[],"sources":["../../../../src/react/core/data/DataTable.tsx"],"sourcesContent":["/**\n * @zendir/ui - DataTable Component\n *\n * Structured data display with expandable groups, responsive columns,\n * and theme-aware styling. Designed for telemetry parameter grids,\n * link budget displays, spacecraft information panels.\n *\n * Astro UX Compliance:\n * - Tabular monospace numbers for value columns\n * - Status-based row coloring\n * - Compact mode support\n * - Accessible table semantics\n *\n * Enhanced Tooltip System:\n * - Row-level tooltips (string or rich ReactNode via rowTooltipContent)\n * - Cell-level tooltips per column definition\n * - Header tooltips for column descriptions\n * - Built-in DataTableRowDetail component for structured detail views\n * - Portal-rendered, WCAG-compliant, animated tooltips\n *\n * @example\n * ```tsx\n * <DataTable\n * columns={[\n * { key: 'label', header: 'Parameter', width: '40%', headerTooltip: 'Telemetry parameter name' },\n * { key: 'value', header: 'Value', align: 'right', mono: true, cellTooltip: (v, row) => `Raw: ${v}` },\n * { key: 'unit', header: 'Unit', width: 80 },\n * ]}\n * data={[\n * { label: 'Frequency', value: '437.500', unit: 'MHz' },\n * { label: 'Bandwidth', value: '25.000', unit: 'kHz' },\n * ]}\n * rowTooltipContent={(row) => (\n * <DataTableRowDetail\n * title={row.label}\n * fields={[\n * { label: 'Value', value: `${row.value} ${row.unit}` },\n * ]}\n * />\n * )}\n * />\n * ```\n */\n\nimport React, { memo, useState, useCallback, useMemo } from \"react\";\nimport { useTheme } from \"../../theme\";\nimport { useBreakpoint } from \"../layout/useBreakpoint\";\nimport { Tooltip } from \"../overlays/Tooltip\";\nimport type { TooltipPlacement } from \"../overlays/Tooltip\";\nimport { addAlpha } from \"../../utils\";\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface DataTableColumn<T = Record<string, unknown>> {\n /** Key in data object */\n key: string;\n /** Column header text */\n header: string;\n /** Column width (CSS value or number for px) */\n width?: string | number;\n /** Text alignment */\n align?: \"left\" | \"center\" | \"right\";\n /** Use monospace font (good for numbers) */\n mono?: boolean;\n /** Custom cell renderer */\n render?: (value: unknown, row: T, index: number) => React.ReactNode;\n /** Hide column on mobile */\n hideOnMobile?: boolean;\n /** Tooltip for the column header (explains what this column represents) */\n headerTooltip?: string;\n /** Per-cell tooltip — return string or ReactNode, or undefined to skip */\n cellTooltip?: (\n value: unknown,\n row: T,\n index: number,\n ) => React.ReactNode | undefined;\n}\n\nexport interface DataTableProps<T = Record<string, unknown>> {\n /** Column definitions */\n columns: DataTableColumn<T>[];\n /** Data rows */\n data: T[];\n /** Key field for React keys (default: index) */\n keyField?: string;\n /** Group rows by this field */\n groupBy?: string;\n /** Allow expanding/collapsing groups */\n expandable?: boolean;\n /** Default expanded state for groups */\n defaultExpanded?: boolean;\n /** Striped rows */\n striped?: boolean;\n /** Compact row padding */\n compact?: boolean;\n /** Show header row */\n showHeader?: boolean;\n /** Empty state message */\n emptyMessage?: string;\n /** Row click handler */\n onRowClick?: (row: T, index: number) => void;\n /** Simple string tooltip for each row (legacy — uses native title) */\n rowTooltip?: (row: T) => string | undefined;\n /** Rich tooltip content for each row — renders in a portal-based Tooltip */\n rowTooltipContent?: (row: T, index: number) => React.ReactNode | undefined;\n /** Placement for row and cell tooltips (default: 'top') */\n tooltipPlacement?: TooltipPlacement;\n /** Delay before tooltips appear in ms (default: 300) */\n tooltipDelay?: number;\n /** Max height with scroll */\n maxHeight?: string | number;\n /** Color for boolean ✓/✗ values (e.g. '#fff' for white). Defaults to text.primary or row status. */\n booleanColor?: string;\n /** Optional row status key or getter — boolean cells use this row's status color when set (matches white/status design). */\n getRowStatus?: (\n row: T,\n index: number,\n ) =>\n | \"normal\"\n | \"caution\"\n | \"serious\"\n | \"critical\"\n | \"standby\"\n | \"off\"\n | undefined;\n /** Custom style */\n style?: React.CSSProperties;\n}\n\n// ─── DataTableRowDetail ──────────────────────────────────────────────────────\n\nexport interface DataTableRowDetailField {\n /** Field label */\n label: string;\n /** Field value (string, number, or ReactNode for custom rendering) */\n value: React.ReactNode;\n /** Optional status color for the value */\n status?: \"normal\" | \"caution\" | \"serious\" | \"critical\" | \"standby\" | \"off\";\n /** Use monospace font for this value */\n mono?: boolean;\n}\n\nexport interface DataTableRowDetailProps {\n /** Title shown at the top of the tooltip */\n title?: React.ReactNode;\n /** Optional subtitle / secondary info */\n subtitle?: React.ReactNode;\n /** Structured key-value fields to display */\n fields?: DataTableRowDetailField[];\n /** Optional footer content (timestamps, actions, etc.) */\n footer?: React.ReactNode;\n /** Optional icon or status indicator beside the title */\n icon?: React.ReactNode;\n /** Maximum width of the tooltip (default: 320) */\n maxWidth?: number;\n}\n\n/**\n * Pre-built tooltip content renderer for DataTable rows.\n * Provides a structured layout: title, key-value fields, and optional footer.\n *\n * @example\n * ```tsx\n * <DataTable\n * columns={columns}\n * data={data}\n * rowTooltipContent={(row) => (\n * <DataTableRowDetail\n * title={row.parameter}\n * subtitle={row.category}\n * fields={[\n * { label: 'Value', value: row.value, mono: true },\n * { label: 'Status', value: row.status, status: row.status },\n * ]}\n * footer={`Last updated: ${row.timestamp}`}\n * />\n * )}\n * />\n * ```\n */\nexport const DataTableRowDetail = memo(function DataTableRowDetail({\n title,\n subtitle,\n fields,\n footer,\n icon,\n maxWidth = 320,\n}: DataTableRowDetailProps): React.ReactElement {\n const { tokens } = useTheme();\n\n return (\n <div style={{ maxWidth, minWidth: 180 }}>\n {/* Header */}\n {(title || icon) && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: tokens.spacing.sm,\n marginBottom: fields?.length || subtitle ? tokens.spacing.sm : 0,\n }}\n >\n {icon}\n <div style={{ flex: 1, minWidth: 0 }}>\n {title && (\n <div\n style={{\n fontWeight: tokens.typography.fontWeight.semibold,\n fontSize: tokens.typography.fontSize.sm,\n color: tokens.colors.text.primary,\n lineHeight: 1.3,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {title}\n </div>\n )}\n {subtitle && (\n <div\n style={{\n fontSize: tokens.typography.fontSize.xxs,\n color: tokens.colors.text.tertiary,\n marginTop: 2,\n }}\n >\n {subtitle}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Fields */}\n {fields && fields.length > 0 && (\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"auto 1fr\",\n gap: `${tokens.spacing.xs} ${tokens.spacing.md}`,\n fontSize: tokens.typography.fontSize.xs,\n lineHeight: 1.5,\n }}\n >\n {fields.map((field, i) => (\n <React.Fragment key={i}>\n <span\n style={{\n color: tokens.colors.text.tertiary,\n whiteSpace: \"nowrap\",\n }}\n >\n {field.label}\n </span>\n <span\n style={{\n color: field.status\n ? tokens.colors.status[field.status] ||\n tokens.colors.text.primary\n : tokens.colors.text.primary,\n fontFamily: field.mono\n ? tokens.typography.fontFamily.mono\n : \"inherit\",\n fontVariantNumeric: field.mono ? \"tabular-nums\" : \"normal\",\n textAlign: \"right\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {field.value}\n </span>\n </React.Fragment>\n ))}\n </div>\n )}\n\n {/* Footer */}\n {footer && (\n <div\n style={{\n marginTop: tokens.spacing.sm,\n paddingTop: tokens.spacing.xs,\n borderTop: `1px solid ${addAlpha(tokens.colors.border.muted, 0.19)}`,\n fontSize: tokens.typography.fontSize.xxs,\n color: tokens.colors.text.tertiary,\n }}\n >\n {footer}\n </div>\n )}\n </div>\n );\n});\n\n// ─── Cell Tooltip Wrapper ────────────────────────────────────────────────────\n\ninterface CellTooltipWrapperProps {\n content: React.ReactNode;\n placement: TooltipPlacement;\n delay: number;\n children: React.ReactElement;\n}\n\nconst CellTooltipWrapper = memo(function CellTooltipWrapper({\n content,\n placement,\n delay,\n children,\n}: CellTooltipWrapperProps): React.ReactElement {\n if (!content) return children;\n return (\n <Tooltip content={content} placement={placement} delay={delay}>\n {children}\n </Tooltip>\n );\n});\n\n// ─── DataTable ───────────────────────────────────────────────────────────────\n\nexport const DataTable = memo(function DataTable<\n T extends Record<string, unknown>,\n>({\n columns,\n data,\n keyField,\n groupBy,\n expandable = false,\n defaultExpanded = true,\n striped = false,\n compact = false,\n showHeader = true,\n emptyMessage = \"No data available\",\n onRowClick,\n rowTooltip,\n rowTooltipContent,\n tooltipPlacement = \"top\",\n tooltipDelay = 300,\n maxHeight,\n booleanColor,\n getRowStatus,\n style,\n}: DataTableProps<T>): React.ReactElement {\n const { tokens } = useTheme();\n const { isMobile: isMobileView } = useBreakpoint();\n const statusColorMap = useMemo(\n () => ({\n normal: tokens.colors.status.normal,\n caution: tokens.colors.status.caution,\n serious: tokens.colors.status.serious,\n critical: tokens.colors.status.critical,\n standby: tokens.colors.status.standby,\n off: tokens.colors.status.off,\n }),\n [tokens.colors.status],\n );\n const visibleColumns = isMobileView\n ? columns.filter((col) => !col.hideOnMobile)\n : columns;\n\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(\n defaultExpanded ? new Set([\"__all__\"]) : new Set(),\n );\n const [hoveredRow, setHoveredRow] = useState<number | null>(null);\n const visibleColumnCount = Math.max(1, visibleColumns.length);\n\n const cellPadding = compact\n ? `${tokens.spacing.xs} ${tokens.spacing.sm}`\n : `${tokens.spacing.sm} ${tokens.spacing.md}`;\n\n const toggleGroup = useCallback((group: string) => {\n setExpandedGroups((prev) => {\n const next = new Set(prev);\n if (next.has(group)) next.delete(group);\n else next.add(group);\n return next;\n });\n }, []);\n\n const isGroupExpanded = useCallback(\n (group: string) => {\n return expandedGroups.has(\"__all__\") || expandedGroups.has(group);\n },\n [expandedGroups],\n );\n\n const groups = useMemo(() => {\n if (!groupBy) return [{ key: \"__default__\", label: \"\", rows: data }];\n\n const map = new Map<string, T[]>();\n data.forEach((row) => {\n const key = String((row as Record<string, unknown>)[groupBy] ?? \"Other\");\n if (!map.has(key)) map.set(key, []);\n map.get(key)!.push(row);\n });\n\n return Array.from(map.entries()).map(([key, rows]) => ({\n key,\n label: key,\n rows,\n }));\n }, [data, groupBy]);\n\n const resolveWidth = (w: string | number | undefined): string | undefined => {\n if (w === undefined) return undefined;\n if (typeof w === \"number\") return `${w}px`;\n return w;\n };\n\n const renderCell = (col: DataTableColumn<T>, row: T, rowIndex: number) => {\n const value = row[col.key];\n if (col.render) return col.render(value, row, rowIndex);\n if (value === null || value === undefined) return \"—\";\n if (typeof value === \"boolean\") {\n const label = value ? \"✓\" : \"✗\";\n const color =\n booleanColor ??\n (getRowStatus\n ? (() => {\n const s = getRowStatus(row, rowIndex);\n return s ? statusColorMap[s] : undefined;\n })()\n : undefined) ??\n tokens.colors.text.primary;\n return <span style={{ color }}>{label}</span>;\n }\n return String(value);\n };\n\n const renderCellWithTooltip = (\n col: DataTableColumn<T>,\n row: T,\n rowIndex: number,\n ) => {\n const cellContent = renderCell(col, row, rowIndex);\n if (!col.cellTooltip) return cellContent;\n\n const tooltipContent = col.cellTooltip(row[col.key], row, rowIndex);\n if (!tooltipContent) return cellContent;\n\n return (\n <CellTooltipWrapper\n content={tooltipContent}\n placement={tooltipPlacement}\n delay={tooltipDelay}\n >\n <span style={{ cursor: \"help\" }}>{cellContent}</span>\n </CellTooltipWrapper>\n );\n };\n\n const renderHeaderCell = (col: DataTableColumn<T>) => {\n const headerContent = (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 4 }}>\n {col.header}\n {col.headerTooltip && (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n style={{ opacity: 0.5, flexShrink: 0 }}\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <path\n d=\"M8 7v4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <circle cx=\"8\" cy=\"5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n )}\n </span>\n );\n\n if (!col.headerTooltip) return headerContent;\n\n return (\n <Tooltip\n content={col.headerTooltip}\n placement=\"bottom\"\n delay={tooltipDelay}\n >\n {headerContent}\n </Tooltip>\n );\n };\n\n const chevron = (expanded: boolean) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n style={{\n transition: tokens.animation.fast,\n transform: expanded ? \"rotate(90deg)\" : \"rotate(0deg)\",\n flexShrink: 0,\n }}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n );\n\n const hasRichRowTooltip = !!rowTooltipContent;\n\n const renderRowContent = (row: T, rowIdx: number, localIndex: number) => {\n const isHovered = hoveredRow === rowIdx;\n const rowKey = keyField ? String(row[keyField]) : rowIdx;\n const useNativeTitle = !hasRichRowTooltip && rowTooltip;\n\n const tr = (\n <tr\n key={rowKey}\n tabIndex={onRowClick ? 0 : undefined}\n onClick={onRowClick ? () => onRowClick(row, rowIdx) : undefined}\n onKeyDown={\n onRowClick\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onRowClick(row, rowIdx);\n }\n }\n : undefined\n }\n onMouseEnter={() => setHoveredRow(rowIdx)}\n onMouseLeave={() => setHoveredRow(null)}\n title={useNativeTitle ? rowTooltip(row) : undefined}\n style={{\n cursor: onRowClick ? \"pointer\" : \"default\",\n backgroundColor: isHovered\n ? addAlpha(tokens.colors.accent.primary, 0.08)\n : striped && localIndex % 2 === 1\n ? addAlpha(tokens.colors.background.surface, 0.5)\n : \"transparent\",\n transition: \"background-color 150ms ease\",\n }}\n >\n {visibleColumns.map((col) => (\n <td\n key={col.key}\n style={{\n padding: cellPadding,\n textAlign: col.align || \"left\",\n color: tokens.colors.text.primary,\n borderBottom: `1px solid ${addAlpha(tokens.colors.border.muted, 0.08)}`,\n fontFamily: col.mono\n ? tokens.typography.fontFamily.mono\n : \"inherit\",\n fontVariantNumeric: col.mono ? \"tabular-nums\" : \"normal\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n maxWidth: resolveWidth(col.width) || \"300px\",\n }}\n >\n {renderCellWithTooltip(col, row, rowIdx)}\n </td>\n ))}\n </tr>\n );\n\n if (hasRichRowTooltip) {\n const tooltipContent = rowTooltipContent(row, rowIdx);\n if (tooltipContent) {\n return (\n <Tooltip\n key={rowKey}\n content={tooltipContent}\n placement={tooltipPlacement}\n delay={tooltipDelay}\n >\n {tr}\n </Tooltip>\n );\n }\n }\n\n return tr;\n };\n\n let globalRowIndex = 0;\n\n return (\n <div\n style={{\n fontFamily: tokens.typography.fontFamily.primary,\n overflow: \"auto\",\n WebkitOverflowScrolling: \"touch\",\n maxHeight: typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight,\n borderRadius: tokens.borderRadius.md,\n border: tokens.borders.divider,\n ...style,\n }}\n >\n <table\n style={{\n width: \"100%\",\n borderCollapse: \"collapse\",\n fontSize: compact\n ? tokens.typography.fontSize.xs\n : tokens.typography.fontSize.sm,\n }}\n >\n {showHeader && (\n <thead>\n <tr>\n {visibleColumns.map((col) => (\n <th\n key={col.key}\n style={{\n padding: cellPadding,\n textAlign: col.align || \"left\",\n fontSize: tokens.typography.fontSize.xxs,\n fontWeight: tokens.typography.fontWeight.bold,\n color: tokens.colors.text.tertiary,\n textTransform: \"uppercase\",\n letterSpacing: \"0.06em\",\n backgroundColor: tokens.colors.background.surface,\n borderBottom: tokens.borders.divider,\n width: resolveWidth(col.width),\n position: \"sticky\",\n top: 0,\n zIndex: 1,\n whiteSpace: \"nowrap\",\n }}\n >\n {renderHeaderCell(col)}\n </th>\n ))}\n </tr>\n </thead>\n )}\n\n <tbody>\n {data.length === 0 && (\n <tr>\n <td\n colSpan={visibleColumnCount}\n style={{\n padding: tokens.spacing.xl,\n textAlign: \"center\",\n color: tokens.colors.text.tertiary,\n fontSize: tokens.typography.fontSize.sm,\n }}\n >\n {emptyMessage}\n </td>\n </tr>\n )}\n\n {groups.map((group) => {\n const isExpanded = !groupBy || isGroupExpanded(group.key);\n\n return (\n <React.Fragment key={group.key}>\n {groupBy && group.label && (\n <tr\n style={{\n backgroundColor: addAlpha(\n tokens.colors.accent.primary,\n 0.08,\n ),\n }}\n >\n <td\n colSpan={visibleColumnCount}\n style={{\n padding: 0,\n borderBottom: tokens.borders.divider,\n }}\n >\n {expandable ? (\n <button\n type=\"button\"\n aria-expanded={isExpanded}\n onClick={() => toggleGroup(group.key)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: tokens.spacing.xs,\n width: \"100%\",\n padding: cellPadding,\n margin: 0,\n border: \"none\",\n background: \"none\",\n cursor: \"pointer\",\n fontWeight: tokens.typography.fontWeight.semibold,\n color: tokens.colors.text.primary,\n fontSize: compact\n ? tokens.typography.fontSize.xs\n : tokens.typography.fontSize.sm,\n fontFamily: \"inherit\",\n textAlign: \"left\",\n }}\n >\n {chevron(isExpanded)}\n {group.label}\n <span\n style={{\n fontSize: tokens.typography.fontSize.xxs,\n color: tokens.colors.text.tertiary,\n fontWeight: tokens.typography.fontWeight.normal,\n }}\n >\n ({group.rows.length})\n </span>\n </button>\n ) : (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: tokens.spacing.xs,\n padding: cellPadding,\n fontWeight: tokens.typography.fontWeight.semibold,\n color: tokens.colors.text.primary,\n fontSize: compact\n ? tokens.typography.fontSize.xs\n : tokens.typography.fontSize.sm,\n }}\n >\n {group.label}\n <span\n style={{\n fontSize: tokens.typography.fontSize.xxs,\n color: tokens.colors.text.tertiary,\n fontWeight: tokens.typography.fontWeight.normal,\n }}\n >\n ({group.rows.length})\n </span>\n </div>\n )}\n </td>\n </tr>\n )}\n\n {isExpanded &&\n group.rows.map((row, localIndex) => {\n const rowIdx = globalRowIndex++;\n return renderRowContent(row, rowIdx, localIndex);\n })}\n </React.Fragment>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}) as <T extends Record<string, unknown>>(\n props: DataTableProps<T>,\n) => React.ReactElement;\n\nexport default DataTable;\n"],"mappings":"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"}
@@ -2,9 +2,8 @@ import { default as React } from 'react';
2
2
  import { AstroIconName } from '../display/AstroIcon';
3
3
  import { PropertyKey, StatusThresholds } from './propertyConfig';
4
4
  import { StatusLevel } from '../../utils';
5
-
6
- export type DataValueVariant = 'stacked' | 'inline' | 'compact' | 'minimal' | 'card' | 'banner' | 'stat';
7
- export type DataValueSize = 'sm' | 'md' | 'lg';
5
+ export type DataValueVariant = "stacked" | "inline" | "compact" | "minimal" | "card" | "banner" | "stat";
6
+ export type DataValueSize = "sm" | "md" | "lg";
8
7
  export interface DataValueProps {
9
8
  /** Property key for auto-configuration (e.g., 'temperature', 'battery') */
10
9
  property?: PropertyKey;
@@ -48,11 +47,11 @@ export interface DataValueGroupProps {
48
47
  /** Icon for the title */
49
48
  icon?: AstroIconName;
50
49
  /** Layout direction */
51
- direction?: 'row' | 'column' | 'grid';
50
+ direction?: "row" | "column" | "grid";
52
51
  /** Number of columns for grid layout */
53
52
  columns?: number;
54
53
  /** Gap between items */
55
- gap?: 'sm' | 'md' | 'lg';
54
+ gap?: "sm" | "md" | "lg";
56
55
  /** Children DataValue components */
57
56
  children: React.ReactNode;
58
57
  /** Additional CSS class */