@zendir/ui 0.4.1 → 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 +34 -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 -538
  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 +11 -5
  229. package/dist/react/core/navigation/SideNav.js +857 -602
  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":"theme.js","sources":["../../../../src/react/charts/unified/theme.ts"],"sourcesContent":["/**\n * @zendir/ui - ECharts Theme Adapter\n * \n * Converts Astro UX Design System tokens to ECharts theme configuration.\n * Supports dark/light modes and colorblind-accessible palettes.\n * \n * AstroUXD Compliance:\n * - Max 11 colors per dataset\n * - Colorblind-accessible palette\n * - Sentence-case labels\n * - 14pt minimum axis text\n * - WCAG contrast compliance\n * \n * @version 2.0.0 - Full Zendir Brand Color Migration\n */\n\nimport type { ThemeTokens, ThemeMode, ThemeVariant } from '../../theme';\n\n// =============================================================================\n// AstroUXD Data Visualization Color Palettes\n// =============================================================================\n\n/**\n * Zendir Brand Colors (from Brand Guide v2026)\n * Core: Electric (#3E3CFF), Purple (#9D70FF), Prussian Blue (#1B2DA0)\n * Shades derived using 10%, 20%, 35% white/black overlays per brand guide\n */\nexport const ZENDIR_BRAND_COLORS = {\n // === Core Brand Colors ===\n /** Electric - Primary accent (#3E3CFF) */\n electric: '#3E3CFF',\n /** Purple - Secondary accent (#9D70FF) */\n purple: '#9D70FF',\n /** Prussian Blue - Subsections (#1B2DA0) */\n prussianBlue: '#1B2DA0',\n /** Black */\n black: '#000000',\n /** White */\n white: '#FFFFFF',\n \n // === Electric Shades (10%, 20%, 35% overlays) ===\n electricLighter: '#9997FF', // 35% white overlay\n electricLight: '#6B69FF', // 20% white overlay \n electricSoft: '#5250FF', // 10% white overlay\n electricDark: '#3836E6', // 10% black overlay\n electricDarker: '#3230CC', // 20% black overlay\n electricDeep: '#2926A3', // 35% black overlay\n \n // === Purple Shades ===\n purpleLighter: '#C9A8FF', // 35% white overlay\n purpleLight: '#B48DFF', // 20% white overlay\n purpleSoft: '#A97FFF', // 10% white overlay\n purpleDark: '#8E64E6', // 10% black overlay\n purpleDarker: '#7E5ACC', // 20% black overlay\n purpleDeep: '#5F4499', // 35% black overlay\n \n // === Prussian Blue Shades ===\n prussianBlueLighter: '#4A5FD6', // 35% white overlay\n prussianBlueLight: '#3548C0', // 20% white overlay\n prussianBlueSoft: '#2838B0', // 10% white overlay\n prussianBlueDark: '#182890', // 10% black overlay\n prussianBlueDarker: '#142380', // 20% black overlay\n prussianBlueDeep: '#0F1A60', // 35% black overlay\n} as const;\n\n/**\n * Official AstroUXDS Data Visualization Color Palette\n * Per https://astrouxds.com/design-tokens/system/#data-viz\n * \n * These are the OFFICIAL AstroUXDS data visualization colors from the design system.\n * Use these for pure AstroUXDS compliance (e.g., 'astro' theme).\n * \n * @see https://astrouxds.com/design-tokens/system/\n */\nexport const OFFICIAL_ASTRO_DATA_VIZ_COLORS = {\n /** Official AstroUXDS data visualization palette (8 colors) */\n primary: [\n '#00c7cb', // color-data-visualization-1 - Teal 500\n '#938bdb', // color-data-visualization-2 - Purple 400\n '#4dacff', // color-data-visualization-3 - Brightblue 500\n '#70dde0', // color-data-visualization-4 - Teal 300\n '#c9c5ed', // color-data-visualization-5 - Purple 200\n '#92cbff', // color-data-visualization-6 - Brightblue 400\n '#a1e9eb', // color-data-visualization-7 - Teal 200\n '#b7dcff', // color-data-visualization-8 - Brightblue 300\n ],\n \n /** Extended palette - primary + additional derived colors for 11 max */\n extended: [\n '#00c7cb', // Teal 500 - Primary\n '#938bdb', // Purple 400 - Secondary\n '#4dacff', // Brightblue 500\n '#70dde0', // Teal 300\n '#c9c5ed', // Purple 200\n '#92cbff', // Brightblue 400\n '#a1e9eb', // Teal 200\n '#b7dcff', // Brightblue 300\n '#009a9d', // Teal 600 (darker)\n '#756bb8', // Purple 500 (darker)\n '#2b659b', // Brightblue 700 (darker)\n ],\n \n /** Sequential palettes for heatmaps using AstroUXDS colors */\n sequential: {\n /** Teal sequential */\n teal: ['#e5f9f9', '#a1e9eb', '#70dde0', '#00c7cb', '#009a9d', '#006e70'],\n /** Purple sequential */\n purple: ['#eceaf7', '#c9c5ed', '#a9a3dc', '#938bdb', '#756bb8', '#5b5299'],\n /** Brightblue sequential */\n brightblue: ['#e8f4ff', '#b7dcff', '#92cbff', '#4dacff', '#2b659b', '#1c3f5e'],\n /** Thermal - Status colors for temperature */\n thermal: ['#00c7cb', '#56f000', '#fce83a', '#ffb302', '#ff6b35', '#ff3838'],\n },\n} as const;\n\n/**\n * Zendir-branded Data Visualization Color Palette \n * Uses Zendir brand colors (Electric, Purple, Prussian Blue)\n * while maintaining AstroUXDS compliance (max 11 colors, colorblind-accessible)\n * \n * @see https://www.astrouxds.com/patterns/data-visualization/\n */\nexport const ASTRO_DATA_VIZ_COLORS = {\n /** \n * Primary data visualization palette - Pure Zendir Brand\n * Uses only Zendir brand colors and their derived shades\n * Max 11 colors per AstroUXDS compliance requirement 3.2.1\n * \n * NOTE: Status colors (green, yellow, red) reserved for status indication only\n */\n mixed: [\n ZENDIR_BRAND_COLORS.electric, // #3E3CFF - Primary\n ZENDIR_BRAND_COLORS.purple, // #9D70FF - Secondary\n ZENDIR_BRAND_COLORS.electricLight, // #6B69FF - Electric 20% lighter\n ZENDIR_BRAND_COLORS.purpleLight, // #B48DFF - Purple 20% lighter\n ZENDIR_BRAND_COLORS.prussianBlueLight, // #3548C0 - Prussian Blue lighter\n ZENDIR_BRAND_COLORS.electricLighter, // #9997FF - Electric 35% lighter\n ZENDIR_BRAND_COLORS.purpleLighter, // #C9A8FF - Purple 35% lighter\n ZENDIR_BRAND_COLORS.prussianBlue, // #1B2DA0 - Prussian Blue\n ZENDIR_BRAND_COLORS.electricDarker, // #3230CC - Electric 20% darker\n ZENDIR_BRAND_COLORS.purpleDarker, // #7E5ACC - Purple 20% darker\n ZENDIR_BRAND_COLORS.prussianBlueLighter, // #4A5FD6 - Prussian Blue lightest\n ],\n \n /** \n * Zendir Brand palette - Full brand spectrum\n * Complete set of Zendir brand colors for maximum brand expression\n */\n zendir: [\n ZENDIR_BRAND_COLORS.electric, // #3E3CFF - Primary\n ZENDIR_BRAND_COLORS.purple, // #9D70FF - Secondary\n ZENDIR_BRAND_COLORS.electricLight, // #6B69FF\n ZENDIR_BRAND_COLORS.purpleLight, // #B48DFF\n ZENDIR_BRAND_COLORS.prussianBlue, // #1B2DA0\n ZENDIR_BRAND_COLORS.electricLighter, // #9997FF\n ZENDIR_BRAND_COLORS.purpleLighter, // #C9A8FF\n ZENDIR_BRAND_COLORS.prussianBlueLight, // #3548C0\n ],\n \n /** \n * Extended Zendir palette - All shades for complex visualizations\n * Includes dark and light variants for maximum differentiation\n */\n zendirExtended: [\n ZENDIR_BRAND_COLORS.electric, // #3E3CFF\n ZENDIR_BRAND_COLORS.purple, // #9D70FF\n ZENDIR_BRAND_COLORS.prussianBlue, // #1B2DA0\n ZENDIR_BRAND_COLORS.electricLight, // #6B69FF\n ZENDIR_BRAND_COLORS.purpleLight, // #B48DFF\n ZENDIR_BRAND_COLORS.prussianBlueLight, // #3548C0\n ZENDIR_BRAND_COLORS.electricLighter, // #9997FF\n ZENDIR_BRAND_COLORS.purpleLighter, // #C9A8FF\n ZENDIR_BRAND_COLORS.electricDarker, // #3230CC\n ZENDIR_BRAND_COLORS.purpleDarker, // #7E5ACC\n ZENDIR_BRAND_COLORS.prussianBlueDarker, // #142380\n ],\n \n /** \n * Cool palette - Blues and purples\n * Professional Zendir-branded cool tones\n */\n cool: [\n ZENDIR_BRAND_COLORS.electric, // #3E3CFF\n ZENDIR_BRAND_COLORS.prussianBlue, // #1B2DA0\n ZENDIR_BRAND_COLORS.purple, // #9D70FF\n ZENDIR_BRAND_COLORS.electricLight, // #6B69FF\n ZENDIR_BRAND_COLORS.prussianBlueLight, // #3548C0\n ZENDIR_BRAND_COLORS.purpleLight, // #B48DFF\n ZENDIR_BRAND_COLORS.electricLighter, // #9997FF\n ZENDIR_BRAND_COLORS.prussianBlueLighter, // #4A5FD6\n ],\n \n /** \n * Warm accent palette - For charts needing warm tones\n * Use sparingly - not part of Zendir brand\n */\n warm: [\n '#ffb302', // Amber\n '#ff9966', // Coral\n '#fce83a', // Yellow\n '#ff6b6b', // Salmon\n '#f0a000', // Orange\n '#ffcc80', // Peach\n '#e0a86c', // Tan\n '#d4b896', // Sand\n ],\n \n /** \n * Electric-Purple gradient palette (Zendir brand gradient)\n * Matches the official brand gradient from Electric to Purple\n */\n electricPurple: [\n ZENDIR_BRAND_COLORS.electric, // #3E3CFF\n ZENDIR_BRAND_COLORS.electricSoft, // #5250FF\n ZENDIR_BRAND_COLORS.electricLight, // #6B69FF\n '#8070FF', // Blend E→P\n ZENDIR_BRAND_COLORS.purple, // #9D70FF\n ZENDIR_BRAND_COLORS.purpleLight, // #B48DFF\n ZENDIR_BRAND_COLORS.purpleLighter, // #C9A8FF\n '#DCC4FF', // Lightest\n ],\n \n /** \n * Prussian-Electric gradient palette\n * Deep to vibrant brand progression\n */\n prussianElectric: [\n ZENDIR_BRAND_COLORS.prussianBlueDarker, // #142380\n ZENDIR_BRAND_COLORS.prussianBlue, // #1B2DA0\n ZENDIR_BRAND_COLORS.prussianBlueLight, // #3548C0\n ZENDIR_BRAND_COLORS.electricDarker, // #3230CC\n ZENDIR_BRAND_COLORS.electric, // #3E3CFF\n ZENDIR_BRAND_COLORS.electricLight, // #6B69FF\n ],\n \n /** \n * Full Zendir spectrum gradient\n * Prussian Blue → Electric → Purple\n */\n zendirSpectrum: [\n ZENDIR_BRAND_COLORS.prussianBlue, // #1B2DA0\n ZENDIR_BRAND_COLORS.prussianBlueLight, // #3548C0\n ZENDIR_BRAND_COLORS.electric, // #3E3CFF\n ZENDIR_BRAND_COLORS.electricLight, // #6B69FF\n ZENDIR_BRAND_COLORS.purple, // #9D70FF\n ZENDIR_BRAND_COLORS.purpleLight, // #B48DFF\n ],\n \n /**\n * Sequential palettes for heatmaps and gradual data\n * Zendir brand-forward gradients\n */\n sequential: {\n /** Zendir Electric sequential - Primary brand gradient */\n electric: ['#E8E8FF', '#C9C8FF', '#9997FF', '#6B69FF', '#3E3CFF', '#3230CC', '#262499'],\n /** Zendir Purple sequential - Secondary brand gradient */\n purple: ['#F0E8FF', '#DCC4FF', '#C9A8FF', '#B48DFF', '#9D70FF', '#7E5ACC', '#5F4499'],\n /** Zendir Prussian Blue sequential - Deep brand gradient */\n prussianBlue: ['#E8ECFF', '#C5CFF0', '#8A9DD6', '#4A5FD6', '#3548C0', '#1B2DA0', '#0F1A60'],\n /** Zendir gradient - Electric → Purple blend */\n brand: ['#3E3CFF', '#5250FF', '#6B69FF', '#7E70FF', '#9D70FF', '#B48DFF', '#C9A8FF'],\n /** Thermal - Status colors for temperature (AstroUXDS compliant) */\n thermal: ['#00C7CB', '#56F000', '#FCE83A', '#FFB302', '#FF6B35', '#FF3838'],\n },\n};\n\n/**\n * AstroUXDS Status Colors (DO NOT MODIFY)\n * Per https://www.astrouxds.com/patterns/status-system/\n * \n * These colors are RESERVED for status indication only.\n * Per compliance requirement, do not use status colors for\n * non-status data visualization.\n * \n * @see https://www.astrouxds.com/compliance/astro-design-compliance/\n * Rule 3.1.2: Elements indicating state shall use only specified Status Colors\n */\nexport const STATUS_COLORS = {\n normal: '#56f000', // Green - System operating normally\n standby: '#2dccff', // Cyan - Awaiting/standby state\n caution: '#fce83a', // Yellow - Requires attention\n serious: '#ffb302', // Orange - Significant issue\n critical: '#ff3838', // Red - Immediate action required\n off: '#a4abb6', // Grey - Inactive/off state\n} as const;\n\n/**\n * Zendir Accent Colors for UI elements (non-status)\n * Use these for interactive elements, highlights, and branding\n */\nexport const ZENDIR_ACCENT_COLORS = {\n /** Primary accent - Zendir Electric */\n primary: ZENDIR_BRAND_COLORS.electric,\n /** Secondary accent - Zendir Purple */\n secondary: ZENDIR_BRAND_COLORS.purple,\n /** Tertiary accent - Zendir Prussian Blue */\n tertiary: ZENDIR_BRAND_COLORS.prussianBlue,\n /** Info accent - Prussian Blue Light */\n info: ZENDIR_BRAND_COLORS.prussianBlueLight,\n /** Highlight - Electric Light */\n highlight: ZENDIR_BRAND_COLORS.electricLight,\n} as const;\n\n// =============================================================================\n// Theme Generator\n// =============================================================================\n\nexport interface EChartsTheme {\n color: string[];\n backgroundColor: string;\n textStyle: {\n color: string;\n fontFamily: string;\n fontSize: number;\n textBorderWidth?: number;\n textBorderColor?: string;\n };\n title: {\n textStyle: { color: string; fontSize: number; fontWeight: string; textBorderWidth?: number; textBorderColor?: string };\n subtextStyle: { color: string; fontSize: number; textBorderWidth?: number; textBorderColor?: string };\n };\n legend: {\n textStyle: { color: string; fontSize: number; textBorderWidth?: number; textBorderColor?: string };\n inactiveColor: string;\n };\n tooltip: {\n backgroundColor: string;\n borderColor: string;\n borderWidth: number;\n textStyle: { color: string; fontSize: number; textBorderWidth?: number; textBorderColor?: string };\n extraCssText: string;\n };\n axisPointer: {\n lineStyle: { color: string; width: number };\n crossStyle: { color: string; width: number };\n };\n xAxis: {\n axisLine: { lineStyle: { color: string } };\n axisTick: { lineStyle: { color: string } };\n axisLabel: { color: string; fontSize: number; fontFamily: string; textBorderWidth?: number; textBorderColor?: string };\n splitLine: { lineStyle: { color: string; type: string } };\n nameTextStyle: { color: string; fontSize: number; textBorderWidth?: number; textBorderColor?: string };\n };\n yAxis: {\n axisLine: { lineStyle: { color: string } };\n axisTick: { lineStyle: { color: string } };\n axisLabel: { color: string; fontSize: number; fontFamily: string; textBorderWidth?: number; textBorderColor?: string };\n splitLine: { lineStyle: { color: string; type: string } };\n nameTextStyle: { color: string; fontSize: number; textBorderWidth?: number; textBorderColor?: string };\n };\n series: {\n line: { lineStyle: { width: number }; symbolSize: number };\n bar: { barMaxWidth: number; itemStyle: { borderRadius: number[] } };\n pie: {\n itemStyle: { borderColor: string; borderWidth: number };\n label?: { color: string; textBorderWidth: number; textBorderColor: string; fontSize: number };\n };\n scatter: { symbolSize: number };\n gauge: { axisLine: { lineStyle: { width: number } } };\n };\n dataZoom: {\n backgroundColor: string;\n borderColor: string;\n fillerColor: string;\n handleColor: string;\n textStyle: { color: string; textBorderWidth?: number; textBorderColor?: string };\n };\n visualMap: {\n textStyle: { color: string; textBorderWidth?: number; textBorderColor?: string };\n inRange: { color: string[] };\n };\n grid: {\n borderColor: string;\n };\n}\n\n/**\n * Generate ECharts theme from Astro tokens\n * \n * Creates a theme that:\n * - Uses official AstroUXDS colors for 'astro' theme variant\n * - Uses Zendir brand colors for all other theme variants\n * - Maintains AstroUXDS compliance (max 11 colors, 14pt min font)\n * - Preserves status colors for their reserved purposes\n * - Supports both dark and light modes\n * \n * @param tokens - Theme tokens from ThemeProvider\n * @param mode - Current theme mode ('dark' | 'light')\n * @param themeVariant - Optional theme variant to determine color palette\n * @returns ECharts theme configuration\n */\nexport function createAstroEChartsTheme(\n tokens: ThemeTokens,\n mode: ThemeMode,\n themeVariant?: ThemeVariant\n): EChartsTheme {\n const isDark = mode === 'dark';\n \n // Use official AstroUXDS colors for 'astro' theme, Zendir colors for others\n const isAstroTheme = themeVariant === 'astro';\n const dataVizColors = isAstroTheme \n ? [...OFFICIAL_ASTRO_DATA_VIZ_COLORS.extended] \n : ASTRO_DATA_VIZ_COLORS.mixed;\n \n return {\n // Data visualization color palette\n // - 'astro' theme: Official AstroUXDS colors (teal, purple, brightblue)\n // - Other themes: Zendir brand colors (electric, purple, prussian blue)\n color: dataVizColors,\n \n // Background\n backgroundColor: 'transparent',\n \n // Global text style - 14pt minimum per AstroUXDS; no white border on labels\n textStyle: {\n color: tokens.colors.text.primary,\n fontFamily: tokens.typography.fontFamily.primary,\n fontSize: 14, // AstroUXD minimum requirement\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n },\n \n // Title - Grey for readability, AstroUXDS compliant\n title: {\n textStyle: {\n color: tokens.colors.text.secondary, // Grey for headings\n fontSize: 14,\n fontWeight: 'bold',\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n },\n subtextStyle: {\n color: tokens.colors.text.tertiary,\n fontSize: 12,\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n },\n },\n \n // Legend\n legend: {\n textStyle: {\n color: tokens.colors.text.secondary,\n fontSize: 12,\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n },\n inactiveColor: tokens.colors.text.tertiary,\n },\n \n // Tooltip\n tooltip: {\n backgroundColor: isDark \n ? 'rgba(27, 45, 62, 0.95)' \n : 'rgba(255, 255, 255, 0.95)',\n borderColor: tokens.colors.border.default,\n borderWidth: 1,\n textStyle: {\n color: tokens.colors.text.primary,\n fontSize: 12,\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n },\n extraCssText: `\n border-radius: ${tokens.borderRadius.md};\n box-shadow: ${tokens.shadows.lg};\n backdrop-filter: blur(8px);\n `,\n },\n \n // Axis pointer / crosshair - Subtle grey for clarity\n axisPointer: {\n lineStyle: {\n color: tokens.colors.text.tertiary, // Subtle grey\n width: 1,\n },\n crossStyle: {\n color: tokens.colors.text.tertiary, // Subtle grey\n width: 1,\n },\n },\n \n // X Axis\n xAxis: {\n axisLine: {\n lineStyle: {\n color: tokens.colors.border.default,\n },\n },\n axisTick: {\n lineStyle: {\n color: tokens.colors.border.muted,\n },\n },\n axisLabel: {\n color: tokens.colors.text.secondary,\n fontSize: 12,\n fontFamily: tokens.typography.fontFamily.mono, // Tabular numbers\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n },\n splitLine: {\n lineStyle: {\n color: tokens.colors.border.muted,\n type: 'dashed',\n },\n },\n nameTextStyle: {\n color: tokens.colors.text.secondary,\n fontSize: 12,\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n },\n },\n \n // Y Axis\n yAxis: {\n axisLine: {\n lineStyle: {\n color: tokens.colors.border.default,\n },\n },\n axisTick: {\n lineStyle: {\n color: tokens.colors.border.muted,\n },\n },\n axisLabel: {\n color: tokens.colors.text.secondary,\n fontSize: 12,\n fontFamily: tokens.typography.fontFamily.mono, // Tabular numbers\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n },\n splitLine: {\n lineStyle: {\n color: tokens.colors.border.muted,\n type: 'dashed',\n },\n },\n nameTextStyle: {\n color: tokens.colors.text.secondary,\n fontSize: 12,\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n },\n },\n \n // Series defaults\n series: {\n line: {\n lineStyle: {\n width: 2,\n },\n symbolSize: 6,\n },\n bar: {\n barMaxWidth: 40,\n itemStyle: {\n borderRadius: [4, 4, 0, 0],\n },\n },\n pie: {\n itemStyle: {\n borderColor: tokens.colors.background.surface,\n borderWidth: 2,\n },\n label: {\n color: tokens.colors.text.primary,\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n fontSize: 12,\n },\n },\n scatter: {\n symbolSize: 10,\n },\n gauge: {\n axisLine: {\n lineStyle: {\n width: 10,\n },\n },\n },\n },\n \n // Data zoom - Theme-aware interactive controls\n dataZoom: {\n backgroundColor: isDark \n ? 'rgba(27, 45, 62, 0.5)' \n : 'rgba(234, 238, 244, 0.5)',\n borderColor: tokens.colors.border.muted,\n // Astro theme uses brightblue, others use Zendir Electric\n fillerColor: isAstroTheme \n ? 'rgba(77, 172, 255, 0.15)' // AstroUXDS Brightblue\n : 'rgba(62, 60, 255, 0.15)', // Zendir Electric\n handleColor: isAstroTheme \n ? '#4dacff' // AstroUXDS Brightblue 500\n : ZENDIR_BRAND_COLORS.electric, // Zendir Electric\n textStyle: {\n color: tokens.colors.text.secondary,\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n },\n },\n \n // Visual map (for heatmaps) - Theme-aware sequential palette\n visualMap: {\n textStyle: {\n color: tokens.colors.text.secondary,\n textBorderWidth: 0,\n textBorderColor: 'transparent',\n },\n inRange: {\n // Astro theme uses official teal gradient, others use Zendir Electric\n color: isAstroTheme \n ? [...OFFICIAL_ASTRO_DATA_VIZ_COLORS.sequential.teal]\n : ASTRO_DATA_VIZ_COLORS.sequential.electric,\n },\n },\n \n // Grid\n grid: {\n borderColor: tokens.colors.border.muted,\n },\n };\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Get status color from value and thresholds\n */\nexport function getStatusColor(\n value: number,\n thresholds: {\n critical?: number;\n serious?: number;\n caution?: number;\n normal?: number;\n }\n): string {\n if (thresholds.critical !== undefined && value >= thresholds.critical) {\n return STATUS_COLORS.critical;\n }\n if (thresholds.serious !== undefined && value >= thresholds.serious) {\n return STATUS_COLORS.serious;\n }\n if (thresholds.caution !== undefined && value >= thresholds.caution) {\n return STATUS_COLORS.caution;\n }\n return STATUS_COLORS.normal;\n}\n\n/**\n * Get color for series by index (wraps around palette)\n * \n * @param index - Series index\n * @param palette - Color palette to use (defaults to Zendir-Astro mixed)\n * @returns Hex color string\n * \n * @example\n * ```tsx\n * // Uses Zendir-Astro fusion palette\n * const color = getSeriesColor(0); // #3E3CFF (Zendir Electric)\n * \n * // Use Zendir-only palette\n * const brandColor = getSeriesColor(0, ASTRO_DATA_VIZ_COLORS.zendir);\n * ```\n */\nexport function getSeriesColor(index: number, palette = ASTRO_DATA_VIZ_COLORS.mixed): string {\n return palette[index % palette.length];\n}\n\n/**\n * Get Zendir brand color by role\n * Use for consistent branding across the application\n */\nexport function getZendirAccentColor(role: keyof typeof ZENDIR_ACCENT_COLORS): string {\n return ZENDIR_ACCENT_COLORS[role];\n}\n\n/**\n * Get appropriate palette based on data type and optional theme\n * \n * @param dataType - Type of data being visualized\n * @param useAstroTheme - If true, uses official AstroUXDS colors; otherwise Zendir colors\n * @returns Appropriate color palette\n * \n * @example\n * ```tsx\n * // For general multi-series data (Zendir brand - default)\n * const colors = getPaletteForDataType('categorical');\n * \n * // For official AstroUXDS colors\n * const astroColors = getPaletteForDataType('categorical', true);\n * \n * // For Zendir brand-forward charts\n * const brandColors = getPaletteForDataType('zendir');\n * \n * // For official AstroUXDS palette explicitly\n * const officialColors = getPaletteForDataType('astro-official');\n * \n * // For status-based data (uses reserved AstroUXDS status colors)\n * const statusColors = getPaletteForDataType('status');\n * ```\n */\nexport function getPaletteForDataType(\n dataType: 'categorical' | 'sequential' | 'diverging' | 'status' | 'zendir' | 'zendirExtended' | 'cool' | 'warm' | 'astro-official',\n useAstroTheme = false\n): string[] {\n // If useAstroTheme is true, default to official AstroUXDS colors\n if (useAstroTheme && (dataType === 'categorical' || dataType === 'sequential')) {\n return dataType === 'sequential' \n ? [...OFFICIAL_ASTRO_DATA_VIZ_COLORS.sequential.teal]\n : [...OFFICIAL_ASTRO_DATA_VIZ_COLORS.extended];\n }\n \n switch (dataType) {\n case 'astro-official':\n return [...OFFICIAL_ASTRO_DATA_VIZ_COLORS.extended]; // Official AstroUXDS colors\n case 'categorical':\n return ASTRO_DATA_VIZ_COLORS.mixed; // Pure Zendir brand palette\n case 'zendir':\n return ASTRO_DATA_VIZ_COLORS.zendir; // Core Zendir brand colors\n case 'zendirExtended':\n return ASTRO_DATA_VIZ_COLORS.zendirExtended; // All Zendir shades\n case 'sequential':\n return ASTRO_DATA_VIZ_COLORS.sequential.electric; // Zendir Electric gradient\n case 'diverging':\n return [...ASTRO_DATA_VIZ_COLORS.sequential.electric].reverse()\n .concat(ASTRO_DATA_VIZ_COLORS.sequential.purple);\n case 'status':\n // AstroUXDS status colors - RESERVED for status indication only\n return [\n STATUS_COLORS.normal,\n STATUS_COLORS.standby,\n STATUS_COLORS.caution,\n STATUS_COLORS.serious,\n STATUS_COLORS.critical,\n ];\n case 'cool':\n return ASTRO_DATA_VIZ_COLORS.cool;\n case 'warm':\n return ASTRO_DATA_VIZ_COLORS.warm;\n default:\n return ASTRO_DATA_VIZ_COLORS.mixed;\n }\n}\n\n/**\n * Create gradient for area charts\n */\nexport function createAreaGradient(\n color: string,\n direction: 'vertical' | 'horizontal' = 'vertical'\n): {\n type: 'linear';\n x: number;\n y: number;\n x2: number;\n y2: number;\n colorStops: Array<{ offset: number; color: string }>;\n} {\n return {\n type: 'linear',\n x: 0,\n y: direction === 'vertical' ? 0 : 0,\n x2: direction === 'horizontal' ? 1 : 0,\n y2: direction === 'vertical' ? 1 : 0,\n colorStops: [\n { offset: 0, color: `${color}40` },\n { offset: 1, color: `${color}05` },\n ],\n };\n}\n\n/**\n * Format time for axis labels\n */\nexport function formatTimeLabel(timestamp: number, format: 'short' | 'medium' | 'long' = 'short'): string {\n const date = new Date(timestamp);\n \n switch (format) {\n case 'short':\n return date.toLocaleTimeString([], { \n hour: '2-digit', \n minute: '2-digit',\n hour12: false,\n });\n case 'medium':\n return date.toLocaleTimeString([], { \n hour: '2-digit', \n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n });\n case 'long':\n return date.toLocaleString([], {\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n });\n }\n}\n\n/**\n * Format number with unit suffix\n */\nexport function formatValueWithUnit(value: number, unit?: string, precision = 2): string {\n const formatted = Number.isInteger(value) ? value.toString() : value.toFixed(precision);\n return unit ? `${formatted}${unit}` : formatted;\n}\n\n/**\n * Calculate nice axis bounds\n */\nexport function calculateAxisBounds(\n values: number[],\n padding = 0.1\n): { min: number; max: number } {\n if (values.length === 0) return { min: 0, max: 100 };\n \n const min = Math.min(...values);\n const max = Math.max(...values);\n const range = max - min || 1;\n \n return {\n min: min - range * padding,\n max: max + range * padding,\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theme.js","names":[],"sources":["../../../../src/react/charts/unified/theme.ts"],"sourcesContent":["/**\n * @zendir/ui - ECharts Theme Adapter\n *\n * Converts Astro UX Design System tokens to ECharts theme configuration.\n * Supports dark/light modes and colorblind-accessible palettes.\n *\n * AstroUXD Compliance:\n * - Max 11 colors per dataset\n * - Colorblind-accessible palette\n * - Sentence-case labels\n * - 14pt minimum axis text\n * - WCAG contrast compliance\n *\n * @version 2.0.0 - Full Zendir Brand Color Migration\n */\n\nimport type { ThemeTokens, ThemeMode, ThemeVariant } from \"../../theme\";\n\n// =============================================================================\n// AstroUXD Data Visualization Color Palettes\n// =============================================================================\n\n/**\n * Zendir Brand Colors (from Brand Guide v2026)\n * Core: Electric (#3E3CFF), Purple (#9D70FF), Prussian Blue (#1B2DA0)\n * Shades derived using 10%, 20%, 35% white/black overlays per brand guide\n */\nexport const ZENDIR_BRAND_COLORS = {\n // === Core Brand Colors ===\n /** Electric - Primary accent (#3E3CFF) */\n electric: \"#3E3CFF\",\n /** Purple - Secondary accent (#9D70FF) */\n purple: \"#9D70FF\",\n /** Prussian Blue - Subsections (#1B2DA0) */\n prussianBlue: \"#1B2DA0\",\n /** Black */\n black: \"#000000\",\n /** White */\n white: \"#FFFFFF\",\n\n // === Electric Shades (10%, 20%, 35% overlays) ===\n electricLighter: \"#9997FF\", // 35% white overlay\n electricLight: \"#6B69FF\", // 20% white overlay\n electricSoft: \"#5250FF\", // 10% white overlay\n electricDark: \"#3836E6\", // 10% black overlay\n electricDarker: \"#3230CC\", // 20% black overlay\n electricDeep: \"#2926A3\", // 35% black overlay\n\n // === Purple Shades ===\n purpleLighter: \"#C9A8FF\", // 35% white overlay\n purpleLight: \"#B48DFF\", // 20% white overlay\n purpleSoft: \"#A97FFF\", // 10% white overlay\n purpleDark: \"#8E64E6\", // 10% black overlay\n purpleDarker: \"#7E5ACC\", // 20% black overlay\n purpleDeep: \"#5F4499\", // 35% black overlay\n\n // === Prussian Blue Shades ===\n prussianBlueLighter: \"#4A5FD6\", // 35% white overlay\n prussianBlueLight: \"#3548C0\", // 20% white overlay\n prussianBlueSoft: \"#2838B0\", // 10% white overlay\n prussianBlueDark: \"#182890\", // 10% black overlay\n prussianBlueDarker: \"#142380\", // 20% black overlay\n prussianBlueDeep: \"#0F1A60\", // 35% black overlay\n} as const;\n\n/**\n * Official AstroUXDS Data Visualization Color Palette\n * Per https://astrouxds.com/design-tokens/system/#data-viz\n *\n * These are the OFFICIAL AstroUXDS data visualization colors from the design system.\n * Use these for pure AstroUXDS compliance (e.g., 'astro' theme).\n *\n * @see https://astrouxds.com/design-tokens/system/\n */\nexport const OFFICIAL_ASTRO_DATA_VIZ_COLORS = {\n /** Official AstroUXDS data visualization palette (8 colors) */\n primary: [\n \"#00c7cb\", // color-data-visualization-1 - Teal 500\n \"#938bdb\", // color-data-visualization-2 - Purple 400\n \"#4dacff\", // color-data-visualization-3 - Brightblue 500\n \"#70dde0\", // color-data-visualization-4 - Teal 300\n \"#c9c5ed\", // color-data-visualization-5 - Purple 200\n \"#92cbff\", // color-data-visualization-6 - Brightblue 400\n \"#a1e9eb\", // color-data-visualization-7 - Teal 200\n \"#b7dcff\", // color-data-visualization-8 - Brightblue 300\n ],\n\n /** Extended palette - primary + additional derived colors for 11 max */\n extended: [\n \"#00c7cb\", // Teal 500 - Primary\n \"#938bdb\", // Purple 400 - Secondary\n \"#4dacff\", // Brightblue 500\n \"#70dde0\", // Teal 300\n \"#c9c5ed\", // Purple 200\n \"#92cbff\", // Brightblue 400\n \"#a1e9eb\", // Teal 200\n \"#b7dcff\", // Brightblue 300\n \"#009a9d\", // Teal 600 (darker)\n \"#756bb8\", // Purple 500 (darker)\n \"#2b659b\", // Brightblue 700 (darker)\n ],\n\n /** Sequential palettes for heatmaps using AstroUXDS colors */\n sequential: {\n /** Teal sequential */\n teal: [\"#e5f9f9\", \"#a1e9eb\", \"#70dde0\", \"#00c7cb\", \"#009a9d\", \"#006e70\"],\n /** Purple sequential */\n purple: [\"#eceaf7\", \"#c9c5ed\", \"#a9a3dc\", \"#938bdb\", \"#756bb8\", \"#5b5299\"],\n /** Brightblue sequential */\n brightblue: [\n \"#e8f4ff\",\n \"#b7dcff\",\n \"#92cbff\",\n \"#4dacff\",\n \"#2b659b\",\n \"#1c3f5e\",\n ],\n /** Thermal - Status colors for temperature */\n thermal: [\"#00c7cb\", \"#56f000\", \"#fce83a\", \"#ffb302\", \"#ff6b35\", \"#ff3838\"],\n },\n} as const;\n\n/**\n * Zendir-branded Data Visualization Color Palette\n * Uses Zendir brand colors (Electric, Purple, Prussian Blue)\n * while maintaining AstroUXDS compliance (max 11 colors, colorblind-accessible)\n *\n * @see https://www.astrouxds.com/patterns/data-visualization/\n */\nexport const ASTRO_DATA_VIZ_COLORS = {\n /**\n * Primary data visualization palette - Pure Zendir Brand\n * Uses only Zendir brand colors and their derived shades\n * Max 11 colors per AstroUXDS compliance requirement 3.2.1\n *\n * NOTE: Status colors (green, yellow, red) reserved for status indication only\n */\n mixed: [\n ZENDIR_BRAND_COLORS.electric, // #3E3CFF - Primary\n ZENDIR_BRAND_COLORS.purple, // #9D70FF - Secondary\n ZENDIR_BRAND_COLORS.electricLight, // #6B69FF - Electric 20% lighter\n ZENDIR_BRAND_COLORS.purpleLight, // #B48DFF - Purple 20% lighter\n ZENDIR_BRAND_COLORS.prussianBlueLight, // #3548C0 - Prussian Blue lighter\n ZENDIR_BRAND_COLORS.electricLighter, // #9997FF - Electric 35% lighter\n ZENDIR_BRAND_COLORS.purpleLighter, // #C9A8FF - Purple 35% lighter\n ZENDIR_BRAND_COLORS.prussianBlue, // #1B2DA0 - Prussian Blue\n ZENDIR_BRAND_COLORS.electricDarker, // #3230CC - Electric 20% darker\n ZENDIR_BRAND_COLORS.purpleDarker, // #7E5ACC - Purple 20% darker\n ZENDIR_BRAND_COLORS.prussianBlueLighter, // #4A5FD6 - Prussian Blue lightest\n ],\n\n /**\n * Zendir Brand palette - Full brand spectrum\n * Complete set of Zendir brand colors for maximum brand expression\n */\n zendir: [\n ZENDIR_BRAND_COLORS.electric, // #3E3CFF - Primary\n ZENDIR_BRAND_COLORS.purple, // #9D70FF - Secondary\n ZENDIR_BRAND_COLORS.electricLight, // #6B69FF\n ZENDIR_BRAND_COLORS.purpleLight, // #B48DFF\n ZENDIR_BRAND_COLORS.prussianBlue, // #1B2DA0\n ZENDIR_BRAND_COLORS.electricLighter, // #9997FF\n ZENDIR_BRAND_COLORS.purpleLighter, // #C9A8FF\n ZENDIR_BRAND_COLORS.prussianBlueLight, // #3548C0\n ],\n\n /**\n * Extended Zendir palette - All shades for complex visualizations\n * Includes dark and light variants for maximum differentiation\n */\n zendirExtended: [\n ZENDIR_BRAND_COLORS.electric, // #3E3CFF\n ZENDIR_BRAND_COLORS.purple, // #9D70FF\n ZENDIR_BRAND_COLORS.prussianBlue, // #1B2DA0\n ZENDIR_BRAND_COLORS.electricLight, // #6B69FF\n ZENDIR_BRAND_COLORS.purpleLight, // #B48DFF\n ZENDIR_BRAND_COLORS.prussianBlueLight, // #3548C0\n ZENDIR_BRAND_COLORS.electricLighter, // #9997FF\n ZENDIR_BRAND_COLORS.purpleLighter, // #C9A8FF\n ZENDIR_BRAND_COLORS.electricDarker, // #3230CC\n ZENDIR_BRAND_COLORS.purpleDarker, // #7E5ACC\n ZENDIR_BRAND_COLORS.prussianBlueDarker, // #142380\n ],\n\n /**\n * Cool palette - Blues and purples\n * Professional Zendir-branded cool tones\n */\n cool: [\n ZENDIR_BRAND_COLORS.electric, // #3E3CFF\n ZENDIR_BRAND_COLORS.prussianBlue, // #1B2DA0\n ZENDIR_BRAND_COLORS.purple, // #9D70FF\n ZENDIR_BRAND_COLORS.electricLight, // #6B69FF\n ZENDIR_BRAND_COLORS.prussianBlueLight, // #3548C0\n ZENDIR_BRAND_COLORS.purpleLight, // #B48DFF\n ZENDIR_BRAND_COLORS.electricLighter, // #9997FF\n ZENDIR_BRAND_COLORS.prussianBlueLighter, // #4A5FD6\n ],\n\n /**\n * Warm accent palette - For charts needing warm tones\n * Use sparingly - not part of Zendir brand\n */\n warm: [\n \"#ffb302\", // Amber\n \"#ff9966\", // Coral\n \"#fce83a\", // Yellow\n \"#ff6b6b\", // Salmon\n \"#f0a000\", // Orange\n \"#ffcc80\", // Peach\n \"#e0a86c\", // Tan\n \"#d4b896\", // Sand\n ],\n\n /**\n * Electric-Purple gradient palette (Zendir brand gradient)\n * Matches the official brand gradient from Electric to Purple\n */\n electricPurple: [\n ZENDIR_BRAND_COLORS.electric, // #3E3CFF\n ZENDIR_BRAND_COLORS.electricSoft, // #5250FF\n ZENDIR_BRAND_COLORS.electricLight, // #6B69FF\n \"#8070FF\", // Blend E→P\n ZENDIR_BRAND_COLORS.purple, // #9D70FF\n ZENDIR_BRAND_COLORS.purpleLight, // #B48DFF\n ZENDIR_BRAND_COLORS.purpleLighter, // #C9A8FF\n \"#DCC4FF\", // Lightest\n ],\n\n /**\n * Prussian-Electric gradient palette\n * Deep to vibrant brand progression\n */\n prussianElectric: [\n ZENDIR_BRAND_COLORS.prussianBlueDarker, // #142380\n ZENDIR_BRAND_COLORS.prussianBlue, // #1B2DA0\n ZENDIR_BRAND_COLORS.prussianBlueLight, // #3548C0\n ZENDIR_BRAND_COLORS.electricDarker, // #3230CC\n ZENDIR_BRAND_COLORS.electric, // #3E3CFF\n ZENDIR_BRAND_COLORS.electricLight, // #6B69FF\n ],\n\n /**\n * Full Zendir spectrum gradient\n * Prussian Blue → Electric → Purple\n */\n zendirSpectrum: [\n ZENDIR_BRAND_COLORS.prussianBlue, // #1B2DA0\n ZENDIR_BRAND_COLORS.prussianBlueLight, // #3548C0\n ZENDIR_BRAND_COLORS.electric, // #3E3CFF\n ZENDIR_BRAND_COLORS.electricLight, // #6B69FF\n ZENDIR_BRAND_COLORS.purple, // #9D70FF\n ZENDIR_BRAND_COLORS.purpleLight, // #B48DFF\n ],\n\n /**\n * Sequential palettes for heatmaps and gradual data\n * Zendir brand-forward gradients\n */\n sequential: {\n /** Zendir Electric sequential - Primary brand gradient */\n electric: [\n \"#E8E8FF\",\n \"#C9C8FF\",\n \"#9997FF\",\n \"#6B69FF\",\n \"#3E3CFF\",\n \"#3230CC\",\n \"#262499\",\n ],\n /** Zendir Purple sequential - Secondary brand gradient */\n purple: [\n \"#F0E8FF\",\n \"#DCC4FF\",\n \"#C9A8FF\",\n \"#B48DFF\",\n \"#9D70FF\",\n \"#7E5ACC\",\n \"#5F4499\",\n ],\n /** Zendir Prussian Blue sequential - Deep brand gradient */\n prussianBlue: [\n \"#E8ECFF\",\n \"#C5CFF0\",\n \"#8A9DD6\",\n \"#4A5FD6\",\n \"#3548C0\",\n \"#1B2DA0\",\n \"#0F1A60\",\n ],\n /** Zendir gradient - Electric → Purple blend */\n brand: [\n \"#3E3CFF\",\n \"#5250FF\",\n \"#6B69FF\",\n \"#7E70FF\",\n \"#9D70FF\",\n \"#B48DFF\",\n \"#C9A8FF\",\n ],\n /** Thermal - Status colors for temperature (AstroUXDS compliant) */\n thermal: [\"#00C7CB\", \"#56F000\", \"#FCE83A\", \"#FFB302\", \"#FF6B35\", \"#FF3838\"],\n },\n};\n\n/**\n * AstroUXDS Status Colors (DO NOT MODIFY)\n * Per https://www.astrouxds.com/patterns/status-system/\n *\n * These colors are RESERVED for status indication only.\n * Per compliance requirement, do not use status colors for\n * non-status data visualization.\n *\n * @see https://www.astrouxds.com/compliance/astro-design-compliance/\n * Rule 3.1.2: Elements indicating state shall use only specified Status Colors\n */\nexport const STATUS_COLORS = {\n normal: \"#56f000\", // Green - System operating normally\n standby: \"#2dccff\", // Cyan - Awaiting/standby state\n caution: \"#fce83a\", // Yellow - Requires attention\n serious: \"#ffb302\", // Orange - Significant issue\n critical: \"#ff3838\", // Red - Immediate action required\n off: \"#a4abb6\", // Grey - Inactive/off state\n} as const;\n\n/**\n * Zendir Accent Colors for UI elements (non-status)\n * Use these for interactive elements, highlights, and branding\n */\nexport const ZENDIR_ACCENT_COLORS = {\n /** Primary accent - Zendir Electric */\n primary: ZENDIR_BRAND_COLORS.electric,\n /** Secondary accent - Zendir Purple */\n secondary: ZENDIR_BRAND_COLORS.purple,\n /** Tertiary accent - Zendir Prussian Blue */\n tertiary: ZENDIR_BRAND_COLORS.prussianBlue,\n /** Info accent - Prussian Blue Light */\n info: ZENDIR_BRAND_COLORS.prussianBlueLight,\n /** Highlight - Electric Light */\n highlight: ZENDIR_BRAND_COLORS.electricLight,\n} as const;\n\n// =============================================================================\n// Theme Generator\n// =============================================================================\n\nexport interface EChartsTheme {\n color: string[];\n backgroundColor: string;\n textStyle: {\n color: string;\n fontFamily: string;\n fontSize: number;\n textBorderWidth?: number;\n textBorderColor?: string;\n };\n title: {\n textStyle: {\n color: string;\n fontSize: number;\n fontWeight: string;\n textBorderWidth?: number;\n textBorderColor?: string;\n };\n subtextStyle: {\n color: string;\n fontSize: number;\n textBorderWidth?: number;\n textBorderColor?: string;\n };\n };\n legend: {\n textStyle: {\n color: string;\n fontSize: number;\n textBorderWidth?: number;\n textBorderColor?: string;\n };\n inactiveColor: string;\n };\n tooltip: {\n backgroundColor: string;\n borderColor: string;\n borderWidth: number;\n textStyle: {\n color: string;\n fontSize: number;\n textBorderWidth?: number;\n textBorderColor?: string;\n };\n extraCssText: string;\n };\n axisPointer: {\n lineStyle: { color: string; width: number };\n crossStyle: { color: string; width: number };\n };\n xAxis: {\n axisLine: { lineStyle: { color: string } };\n axisTick: { lineStyle: { color: string } };\n axisLabel: {\n color: string;\n fontSize: number;\n fontFamily: string;\n textBorderWidth?: number;\n textBorderColor?: string;\n };\n splitLine: { lineStyle: { color: string; type: string } };\n nameTextStyle: {\n color: string;\n fontSize: number;\n textBorderWidth?: number;\n textBorderColor?: string;\n };\n };\n yAxis: {\n axisLine: { lineStyle: { color: string } };\n axisTick: { lineStyle: { color: string } };\n axisLabel: {\n color: string;\n fontSize: number;\n fontFamily: string;\n textBorderWidth?: number;\n textBorderColor?: string;\n };\n splitLine: { lineStyle: { color: string; type: string } };\n nameTextStyle: {\n color: string;\n fontSize: number;\n textBorderWidth?: number;\n textBorderColor?: string;\n };\n };\n series: {\n line: { lineStyle: { width: number }; symbolSize: number };\n bar: { barMaxWidth: number; itemStyle: { borderRadius: number[] } };\n pie: {\n itemStyle: { borderColor: string; borderWidth: number };\n label?: {\n color: string;\n textBorderWidth: number;\n textBorderColor: string;\n fontSize: number;\n };\n };\n scatter: { symbolSize: number };\n gauge: { axisLine: { lineStyle: { width: number } } };\n };\n dataZoom: {\n backgroundColor: string;\n borderColor: string;\n fillerColor: string;\n handleColor: string;\n textStyle: {\n color: string;\n textBorderWidth?: number;\n textBorderColor?: string;\n };\n };\n visualMap: {\n textStyle: {\n color: string;\n textBorderWidth?: number;\n textBorderColor?: string;\n };\n inRange: { color: string[] };\n };\n grid: {\n borderColor: string;\n };\n}\n\n/**\n * Generate ECharts theme from Astro tokens\n *\n * Creates a theme that:\n * - Uses official AstroUXDS colors for 'astro' theme variant\n * - Uses Zendir brand colors for all other theme variants\n * - Maintains AstroUXDS compliance (max 11 colors, 14pt min font)\n * - Preserves status colors for their reserved purposes\n * - Supports both dark and light modes\n *\n * @param tokens - Theme tokens from ThemeProvider\n * @param mode - Current theme mode ('dark' | 'light')\n * @param themeVariant - Optional theme variant to determine color palette\n * @returns ECharts theme configuration\n */\nexport function createAstroEChartsTheme(\n tokens: ThemeTokens,\n mode: ThemeMode,\n themeVariant?: ThemeVariant,\n): EChartsTheme {\n const isDark = mode === \"dark\";\n\n // Use official AstroUXDS colors for 'astro' theme, Zendir colors for others\n const isAstroTheme = themeVariant === \"astro\";\n const dataVizColors = isAstroTheme\n ? [...OFFICIAL_ASTRO_DATA_VIZ_COLORS.extended]\n : ASTRO_DATA_VIZ_COLORS.mixed;\n\n return {\n // Data visualization color palette\n // - 'astro' theme: Official AstroUXDS colors (teal, purple, brightblue)\n // - Other themes: Zendir brand colors (electric, purple, prussian blue)\n color: dataVizColors,\n\n // Background\n backgroundColor: \"transparent\",\n\n // Global text style - 14pt minimum per AstroUXDS; no white border on labels\n textStyle: {\n color: tokens.colors.text.primary,\n fontFamily: tokens.typography.fontFamily.primary,\n fontSize: 14, // AstroUXD minimum requirement\n textBorderWidth: 0,\n textBorderColor: \"transparent\",\n },\n\n // Title - Grey for readability, AstroUXDS compliant\n title: {\n textStyle: {\n color: tokens.colors.text.secondary, // Grey for headings\n fontSize: 14,\n fontWeight: \"bold\",\n textBorderWidth: 0,\n textBorderColor: \"transparent\",\n },\n subtextStyle: {\n color: tokens.colors.text.tertiary,\n fontSize: 12,\n textBorderWidth: 0,\n textBorderColor: \"transparent\",\n },\n },\n\n // Legend\n legend: {\n textStyle: {\n color: tokens.colors.text.secondary,\n fontSize: 12,\n textBorderWidth: 0,\n textBorderColor: \"transparent\",\n },\n inactiveColor: tokens.colors.text.tertiary,\n },\n\n // Tooltip\n tooltip: {\n backgroundColor: isDark\n ? \"rgba(27, 45, 62, 0.95)\"\n : \"rgba(255, 255, 255, 0.95)\",\n borderColor: tokens.colors.border.default,\n borderWidth: 1,\n textStyle: {\n color: tokens.colors.text.primary,\n fontSize: 12,\n textBorderWidth: 0,\n textBorderColor: \"transparent\",\n },\n extraCssText: `\n border-radius: ${tokens.borderRadius.md};\n box-shadow: ${tokens.shadows.lg};\n backdrop-filter: blur(8px);\n `,\n },\n\n // Axis pointer / crosshair - Subtle grey for clarity\n axisPointer: {\n lineStyle: {\n color: tokens.colors.text.tertiary, // Subtle grey\n width: 1,\n },\n crossStyle: {\n color: tokens.colors.text.tertiary, // Subtle grey\n width: 1,\n },\n },\n\n // X Axis\n xAxis: {\n axisLine: {\n lineStyle: {\n color: tokens.colors.border.default,\n },\n },\n axisTick: {\n lineStyle: {\n color: tokens.colors.border.muted,\n },\n },\n axisLabel: {\n color: tokens.colors.text.secondary,\n fontSize: 12,\n fontFamily: tokens.typography.fontFamily.mono, // Tabular numbers\n textBorderWidth: 0,\n textBorderColor: \"transparent\",\n },\n splitLine: {\n lineStyle: {\n color: tokens.colors.border.muted,\n type: \"dashed\",\n },\n },\n nameTextStyle: {\n color: tokens.colors.text.secondary,\n fontSize: 12,\n textBorderWidth: 0,\n textBorderColor: \"transparent\",\n },\n },\n\n // Y Axis\n yAxis: {\n axisLine: {\n lineStyle: {\n color: tokens.colors.border.default,\n },\n },\n axisTick: {\n lineStyle: {\n color: tokens.colors.border.muted,\n },\n },\n axisLabel: {\n color: tokens.colors.text.secondary,\n fontSize: 12,\n fontFamily: tokens.typography.fontFamily.mono, // Tabular numbers\n textBorderWidth: 0,\n textBorderColor: \"transparent\",\n },\n splitLine: {\n lineStyle: {\n color: tokens.colors.border.muted,\n type: \"dashed\",\n },\n },\n nameTextStyle: {\n color: tokens.colors.text.secondary,\n fontSize: 12,\n textBorderWidth: 0,\n textBorderColor: \"transparent\",\n },\n },\n\n // Series defaults\n series: {\n line: {\n lineStyle: {\n width: 2,\n },\n symbolSize: 6,\n },\n bar: {\n barMaxWidth: 40,\n itemStyle: {\n borderRadius: [4, 4, 0, 0],\n },\n },\n pie: {\n itemStyle: {\n borderColor: tokens.colors.background.surface,\n borderWidth: 2,\n },\n label: {\n color: tokens.colors.text.primary,\n textBorderWidth: 0,\n textBorderColor: \"transparent\",\n fontSize: 12,\n },\n },\n scatter: {\n symbolSize: 10,\n },\n gauge: {\n axisLine: {\n lineStyle: {\n width: 10,\n },\n },\n },\n },\n\n // Data zoom - Theme-aware interactive controls\n dataZoom: {\n backgroundColor: isDark\n ? \"rgba(27, 45, 62, 0.5)\"\n : \"rgba(234, 238, 244, 0.5)\",\n borderColor: tokens.colors.border.muted,\n // Astro theme uses brightblue, others use Zendir Electric\n fillerColor: isAstroTheme\n ? \"rgba(77, 172, 255, 0.15)\" // AstroUXDS Brightblue\n : \"rgba(62, 60, 255, 0.15)\", // Zendir Electric\n handleColor: isAstroTheme\n ? \"#4dacff\" // AstroUXDS Brightblue 500\n : ZENDIR_BRAND_COLORS.electric, // Zendir Electric\n textStyle: {\n color: tokens.colors.text.secondary,\n textBorderWidth: 0,\n textBorderColor: \"transparent\",\n },\n },\n\n // Visual map (for heatmaps) - Theme-aware sequential palette\n visualMap: {\n textStyle: {\n color: tokens.colors.text.secondary,\n textBorderWidth: 0,\n textBorderColor: \"transparent\",\n },\n inRange: {\n // Astro theme uses official teal gradient, others use Zendir Electric\n color: isAstroTheme\n ? [...OFFICIAL_ASTRO_DATA_VIZ_COLORS.sequential.teal]\n : ASTRO_DATA_VIZ_COLORS.sequential.electric,\n },\n },\n\n // Grid\n grid: {\n borderColor: tokens.colors.border.muted,\n },\n };\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Get status color from value and thresholds\n */\nexport function getStatusColor(\n value: number,\n thresholds: {\n critical?: number;\n serious?: number;\n caution?: number;\n normal?: number;\n },\n): string {\n if (thresholds.critical !== undefined && value >= thresholds.critical) {\n return STATUS_COLORS.critical;\n }\n if (thresholds.serious !== undefined && value >= thresholds.serious) {\n return STATUS_COLORS.serious;\n }\n if (thresholds.caution !== undefined && value >= thresholds.caution) {\n return STATUS_COLORS.caution;\n }\n return STATUS_COLORS.normal;\n}\n\n/**\n * Get color for series by index (wraps around palette)\n *\n * @param index - Series index\n * @param palette - Color palette to use (defaults to Zendir-Astro mixed)\n * @returns Hex color string\n *\n * @example\n * ```tsx\n * // Uses Zendir-Astro fusion palette\n * const color = getSeriesColor(0); // #3E3CFF (Zendir Electric)\n *\n * // Use Zendir-only palette\n * const brandColor = getSeriesColor(0, ASTRO_DATA_VIZ_COLORS.zendir);\n * ```\n */\nexport function getSeriesColor(\n index: number,\n palette = ASTRO_DATA_VIZ_COLORS.mixed,\n): string {\n return palette[index % palette.length];\n}\n\n/**\n * Get Zendir brand color by role\n * Use for consistent branding across the application\n */\nexport function getZendirAccentColor(\n role: keyof typeof ZENDIR_ACCENT_COLORS,\n): string {\n return ZENDIR_ACCENT_COLORS[role];\n}\n\n/**\n * Get appropriate palette based on data type and optional theme\n *\n * @param dataType - Type of data being visualized\n * @param useAstroTheme - If true, uses official AstroUXDS colors; otherwise Zendir colors\n * @returns Appropriate color palette\n *\n * @example\n * ```tsx\n * // For general multi-series data (Zendir brand - default)\n * const colors = getPaletteForDataType('categorical');\n *\n * // For official AstroUXDS colors\n * const astroColors = getPaletteForDataType('categorical', true);\n *\n * // For Zendir brand-forward charts\n * const brandColors = getPaletteForDataType('zendir');\n *\n * // For official AstroUXDS palette explicitly\n * const officialColors = getPaletteForDataType('astro-official');\n *\n * // For status-based data (uses reserved AstroUXDS status colors)\n * const statusColors = getPaletteForDataType('status');\n * ```\n */\nexport function getPaletteForDataType(\n dataType:\n | \"categorical\"\n | \"sequential\"\n | \"diverging\"\n | \"status\"\n | \"zendir\"\n | \"zendirExtended\"\n | \"cool\"\n | \"warm\"\n | \"astro-official\",\n useAstroTheme = false,\n): string[] {\n // If useAstroTheme is true, default to official AstroUXDS colors\n if (\n useAstroTheme &&\n (dataType === \"categorical\" || dataType === \"sequential\")\n ) {\n return dataType === \"sequential\"\n ? [...OFFICIAL_ASTRO_DATA_VIZ_COLORS.sequential.teal]\n : [...OFFICIAL_ASTRO_DATA_VIZ_COLORS.extended];\n }\n\n switch (dataType) {\n case \"astro-official\":\n return [...OFFICIAL_ASTRO_DATA_VIZ_COLORS.extended]; // Official AstroUXDS colors\n case \"categorical\":\n return ASTRO_DATA_VIZ_COLORS.mixed; // Pure Zendir brand palette\n case \"zendir\":\n return ASTRO_DATA_VIZ_COLORS.zendir; // Core Zendir brand colors\n case \"zendirExtended\":\n return ASTRO_DATA_VIZ_COLORS.zendirExtended; // All Zendir shades\n case \"sequential\":\n return ASTRO_DATA_VIZ_COLORS.sequential.electric; // Zendir Electric gradient\n case \"diverging\":\n return [...ASTRO_DATA_VIZ_COLORS.sequential.electric]\n .reverse()\n .concat(ASTRO_DATA_VIZ_COLORS.sequential.purple);\n case \"status\":\n // AstroUXDS status colors - RESERVED for status indication only\n return [\n STATUS_COLORS.normal,\n STATUS_COLORS.standby,\n STATUS_COLORS.caution,\n STATUS_COLORS.serious,\n STATUS_COLORS.critical,\n ];\n case \"cool\":\n return ASTRO_DATA_VIZ_COLORS.cool;\n case \"warm\":\n return ASTRO_DATA_VIZ_COLORS.warm;\n default:\n return ASTRO_DATA_VIZ_COLORS.mixed;\n }\n}\n\n/**\n * Create gradient for area charts\n */\nexport function createAreaGradient(\n color: string,\n direction: \"vertical\" | \"horizontal\" = \"vertical\",\n): {\n type: \"linear\";\n x: number;\n y: number;\n x2: number;\n y2: number;\n colorStops: Array<{ offset: number; color: string }>;\n} {\n return {\n type: \"linear\",\n x: 0,\n y: direction === \"vertical\" ? 0 : 0,\n x2: direction === \"horizontal\" ? 1 : 0,\n y2: direction === \"vertical\" ? 1 : 0,\n colorStops: [\n { offset: 0, color: `${color}40` },\n { offset: 1, color: `${color}05` },\n ],\n };\n}\n\n/**\n * Format time for axis labels\n */\nexport function formatTimeLabel(\n timestamp: number,\n format: \"short\" | \"medium\" | \"long\" = \"short\",\n): string {\n const date = new Date(timestamp);\n\n switch (format) {\n case \"short\":\n return date.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n });\n case \"medium\":\n return date.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false,\n });\n case \"long\":\n return date.toLocaleString([], {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n });\n }\n}\n\n/**\n * Format number with unit suffix\n */\nexport function formatValueWithUnit(\n value: number,\n unit?: string,\n precision = 2,\n): string {\n const formatted = Number.isInteger(value)\n ? value.toString()\n : value.toFixed(precision);\n return unit ? `${formatted}${unit}` : formatted;\n}\n\n/**\n * Calculate nice axis bounds\n */\nexport function calculateAxisBounds(\n values: number[],\n padding = 0.1,\n): { min: number; max: number } {\n if (values.length === 0) return { min: 0, max: 100 };\n\n const min = Math.min(...values);\n const max = Math.max(...values);\n const range = max - min || 1;\n\n return {\n min: min - range * padding,\n max: max + range * padding,\n };\n}\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { EChartsOption } from 'echarts';
2
-
3
- export type ChartType = 'line' | 'area' | 'bar' | 'scatter' | 'bubble' | 'pie' | 'donut' | 'gauge' | 'radar' | 'heatmap' | 'histogram' | 'gantt' | 'candlestick' | 'boxplot' | 'treemap' | 'sunburst' | 'funnel' | 'sankey' | 'waterfall' | 'rose';
4
- export type ChartTheme = 'astro-dark' | 'astro-light' | 'purple-hue';
2
+ export type ChartType = "line" | "area" | "bar" | "scatter" | "bubble" | "pie" | "donut" | "gauge" | "radar" | "heatmap" | "histogram" | "gantt" | "candlestick" | "boxplot" | "treemap" | "sunburst" | "funnel" | "sankey" | "waterfall" | "rose";
3
+ export type ChartTheme = "astro-dark" | "astro-light" | "purple-hue";
5
4
  export interface DataPoint {
6
5
  /** X-axis value (time, category, or number) */
7
6
  x: number | string | Date;
@@ -83,11 +82,11 @@ export interface SeriesData {
83
82
  /**
84
83
  * Override status (bypasses auto-derivation)
85
84
  */
86
- status?: 'off' | 'standby' | 'normal' | 'caution' | 'serious' | 'critical';
85
+ status?: "off" | "standby" | "normal" | "caution" | "serious" | "critical";
87
86
  }
88
87
  export interface LineStyleOptions {
89
88
  width?: number;
90
- type?: 'solid' | 'dashed' | 'dotted';
89
+ type?: "solid" | "dashed" | "dotted";
91
90
  opacity?: number;
92
91
  dashOffset?: number;
93
92
  }
@@ -96,15 +95,15 @@ export interface AreaStyleOptions {
96
95
  color?: string | GradientOptions;
97
96
  }
98
97
  export interface GradientOptions {
99
- type: 'linear' | 'radial';
98
+ type: "linear" | "radial";
100
99
  colorStops: Array<{
101
100
  offset: number;
102
101
  color: string;
103
102
  }>;
104
- direction?: 'vertical' | 'horizontal';
103
+ direction?: "vertical" | "horizontal";
105
104
  }
106
105
  export interface SymbolOptions {
107
- type?: 'circle' | 'rect' | 'roundRect' | 'triangle' | 'diamond' | 'pin' | 'arrow' | 'none';
106
+ type?: "circle" | "rect" | "roundRect" | "triangle" | "diamond" | "pin" | "arrow" | "none";
108
107
  size?: number | [number, number];
109
108
  color?: string;
110
109
  borderColor?: string;
@@ -112,17 +111,17 @@ export interface SymbolOptions {
112
111
  }
113
112
  export interface AxisOptions {
114
113
  /** Axis type */
115
- type?: 'value' | 'category' | 'time' | 'log';
114
+ type?: "value" | "category" | "time" | "log";
116
115
  /** Axis name/label */
117
116
  name?: string;
118
117
  /** Name location */
119
- nameLocation?: 'start' | 'middle' | 'end';
118
+ nameLocation?: "start" | "middle" | "end";
120
119
  /** Minimum value (auto if not specified) */
121
- min?: number | 'auto' | 'dataMin';
120
+ min?: number | "auto" | "dataMin";
122
121
  /** Maximum value (auto if not specified) */
123
- max?: number | 'auto' | 'dataMax';
122
+ max?: number | "auto" | "dataMax";
124
123
  /** Axis position */
125
- position?: 'left' | 'right' | 'top' | 'bottom';
124
+ position?: "left" | "right" | "top" | "bottom";
126
125
  /** Show grid lines */
127
126
  showGrid?: boolean;
128
127
  /** Show axis line */
@@ -146,9 +145,9 @@ export interface ZoomOptions {
146
145
  /** Enable zoom */
147
146
  enabled?: boolean;
148
147
  /** Zoom type */
149
- type?: 'inside' | 'slider' | 'both';
148
+ type?: "inside" | "slider" | "both";
150
149
  /** Zoom axis */
151
- axis?: 'x' | 'y' | 'both';
150
+ axis?: "x" | "y" | "both";
152
151
  /** Initial zoom range (0-100) */
153
152
  start?: number;
154
153
  end?: number;
@@ -161,9 +160,9 @@ export interface TooltipOptions {
161
160
  /** Enable tooltip */
162
161
  enabled?: boolean;
163
162
  /** Trigger type */
164
- trigger?: 'item' | 'axis' | 'none';
163
+ trigger?: "item" | "axis" | "none";
165
164
  /** Show crosshair */
166
- crosshair?: boolean | 'x' | 'y' | 'both';
165
+ crosshair?: boolean | "x" | "y" | "both";
167
166
  /** Custom formatter */
168
167
  formatter?: (params: unknown) => string;
169
168
  /** Confine tooltip to chart area */
@@ -173,9 +172,9 @@ export interface LegendOptions {
173
172
  /** Show legend */
174
173
  show?: boolean;
175
174
  /** Legend position */
176
- position?: 'top' | 'bottom' | 'left' | 'right';
175
+ position?: "top" | "bottom" | "left" | "right";
177
176
  /** Legend orientation */
178
- orient?: 'horizontal' | 'vertical';
177
+ orient?: "horizontal" | "vertical";
179
178
  /** Allow clicking to toggle series */
180
179
  interactive?: boolean;
181
180
  /** Maximum items per row/column */
@@ -185,15 +184,15 @@ export interface BrushOptions {
185
184
  /** Enable brush selection */
186
185
  enabled?: boolean;
187
186
  /** Brush type */
188
- type?: 'rect' | 'polygon' | 'lineX' | 'lineY';
187
+ type?: "rect" | "polygon" | "lineX" | "lineY";
189
188
  /** Brush mode */
190
- mode?: 'single' | 'multiple';
189
+ mode?: "single" | "multiple";
191
190
  }
192
191
  export interface MarkLineOptions {
193
192
  /** Mark line data */
194
193
  data: Array<{
195
194
  /** Line type */
196
- type?: 'min' | 'max' | 'average' | 'median';
195
+ type?: "min" | "max" | "average" | "median";
197
196
  /** Fixed Y value */
198
197
  yAxis?: number;
199
198
  /** Fixed X value */
@@ -268,7 +267,7 @@ export interface ExportOptions {
268
267
  /** Enable export button */
269
268
  enabled?: boolean;
270
269
  /** Export formats (png, jpeg, svg for image; csv, json for data) */
271
- formats?: ('png' | 'jpeg' | 'jpg' | 'svg' | 'csv' | 'json')[];
270
+ formats?: ("png" | "jpeg" | "jpg" | "svg" | "csv" | "json")[];
272
271
  /** Static file name prefix (overridden by getExportFileName if provided) */
273
272
  fileName?: string;
274
273
  /** Dynamic filename from chart title, series names, and type */
@@ -288,12 +287,12 @@ export interface InfoTooltipOptions {
288
287
  /** Custom icon (defaults to info circle) */
289
288
  icon?: React.ReactNode;
290
289
  /** Tooltip position */
291
- position?: 'top' | 'bottom' | 'left' | 'right';
290
+ position?: "top" | "bottom" | "left" | "right";
292
291
  /** Maximum width of tooltip content */
293
292
  maxWidth?: number;
294
293
  }
295
294
  /** Status types for chart header icon */
296
- export type ChartStatus = 'off' | 'standby' | 'normal' | 'caution' | 'serious' | 'critical';
295
+ export type ChartStatus = "off" | "standby" | "normal" | "caution" | "serious" | "critical";
297
296
  export interface AstroChartProps {
298
297
  /** Chart type */
299
298
  type: ChartType;
@@ -374,7 +373,7 @@ export interface AstroChartProps {
374
373
  * ECharts renderer: 'svg' gives sharper text (recommended); 'canvas' can be faster for very large datasets.
375
374
  * @default 'svg'
376
375
  */
377
- renderer?: 'canvas' | 'svg';
376
+ renderer?: "canvas" | "svg";
378
377
  /** Chart instance ref callback */
379
378
  onChartReady?: (chart: unknown) => void;
380
379
  /** Click handler */
@@ -482,7 +481,7 @@ export interface TelemetryStreamPoint {
482
481
  value: number;
483
482
  unit?: string;
484
483
  /** Status using AstroUXDS terminology */
485
- status?: 'normal' | 'caution' | 'serious' | 'critical';
484
+ status?: "normal" | "caution" | "serious" | "critical";
486
485
  }
487
486
  /** Contact window / pass data (Gantt-style) */
488
487
  export interface ContactWindowData {
@@ -495,7 +494,7 @@ export interface ContactWindowData {
495
494
  start: number;
496
495
  end: number;
497
496
  elevation?: number;
498
- signalQuality?: 'good' | 'marginal' | 'poor';
497
+ signalQuality?: "good" | "marginal" | "poor";
499
498
  label?: string;
500
499
  }[];
501
500
  }
@@ -515,7 +514,7 @@ export interface ManeuverBudgetData {
515
514
  /** Delta-V (m/s) */
516
515
  deltaV: number;
517
516
  /** Type category */
518
- type: 'planned' | 'executed' | 'remaining' | 'margin';
517
+ type: "planned" | "executed" | "remaining" | "margin";
519
518
  /** Optional date */
520
519
  date?: number;
521
520
  }
@@ -526,7 +525,7 @@ export interface EclipseTimelineData {
526
525
  /** End time (ms) */
527
526
  end: number;
528
527
  /** Eclipse type */
529
- type: 'umbra' | 'penumbra' | 'sunlight';
528
+ type: "umbra" | "penumbra" | "sunlight";
530
529
  /** Orbit number */
531
530
  orbitNumber?: number;
532
531
  }
@@ -569,7 +568,7 @@ export interface HeliocentricOrbitData {
569
568
  z?: number;
570
569
  }[];
571
570
  /** Body type */
572
- type?: 'planet' | 'spacecraft' | 'comet' | 'asteroid' | 'satellite' | 'station' | 'probe' | 'debris';
571
+ type?: "planet" | "spacecraft" | "comet" | "asteroid" | "satellite" | "station" | "probe" | "debris";
573
572
  /** Optional color */
574
573
  color?: string;
575
574
  /** Optional size */
@@ -641,7 +640,7 @@ export interface Surface3DData {
641
640
  /** Y-axis range [min, max] */
642
641
  yRange?: [number, number];
643
642
  /** Color map name */
644
- colorMap?: 'jet' | 'viridis' | 'plasma' | 'inferno' | 'magma' | 'thermal' | 'custom';
643
+ colorMap?: "jet" | "viridis" | "plasma" | "inferno" | "magma" | "thermal" | "custom";
645
644
  /** Custom color stops for 'custom' colorMap */
646
645
  colorStops?: Array<{
647
646
  offset: number;
@@ -726,7 +725,7 @@ export interface Lines3DData {
726
725
  /** Line width */
727
726
  lineWidth?: number;
728
727
  /** Line style */
729
- lineStyle?: 'solid' | 'dashed' | 'dotted';
728
+ lineStyle?: "solid" | "dashed" | "dotted";
730
729
  /** Show endpoints */
731
730
  showEndpoints?: boolean;
732
731
  /** Category for grouping */
@@ -1,6 +1,5 @@
1
1
  import { AstroChartHandle } from './AstroChart';
2
2
  import { TimeSeriesPoint, DataPoint } from './types';
3
-
4
3
  export interface StreamOptions {
5
4
  /** Maximum data points to keep */
6
5
  maxPoints?: number;
@@ -49,7 +48,7 @@ export interface WebSocketStreamOptions extends StreamOptions {
49
48
  }
50
49
  export interface WebSocketStreamController extends StreamController {
51
50
  /** WebSocket connection state */
52
- connectionState: 'connecting' | 'connected' | 'disconnected' | 'error';
51
+ connectionState: "connecting" | "connected" | "disconnected" | "error";
53
52
  /** Manually connect */
54
53
  connect: () => void;
55
54
  /** Manually disconnect */