@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":"Skeleton.js","sources":["../../../src/react/shared/Skeleton.tsx"],"sourcesContent":["/**\r\n * @zendir/ui - Skeleton Components\r\n * \r\n * Loading skeleton components with Apple-style shimmer animation.\r\n * Used for loading states before data arrives.\r\n * \r\n * Features:\r\n * - Smooth shimmer animation\r\n * - Multiple variants (text, card, chart, circle)\r\n * - Respects reduced-motion preferences\r\n * - Matches component sizes for seamless transition\r\n */\r\n\r\nimport React, { memo } from 'react';\r\nimport { classNames } from '../utils';\r\n\r\n// ============================================================================\r\n// Shared Styles\r\n// ============================================================================\r\n\r\nconst SHIMMER_KEYFRAMES = `\r\n@keyframes skeletonShimmer {\r\n 0% {\r\n background-position: -200% 0;\r\n }\r\n 100% {\r\n background-position: 200% 0;\r\n }\r\n}\r\n`;\r\n\r\nconst getShimmerStyle = (width?: string | number, height?: string | number): React.CSSProperties => ({\r\n width: width ?? '100%',\r\n height: height ?? 16,\r\n backgroundColor: 'var(--color-background-interactive-default, rgba(255,255,255,0.1))',\r\n backgroundImage: 'linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.08) 50%, transparent 100%)',\r\n backgroundSize: '200% 100%',\r\n backgroundRepeat: 'no-repeat',\r\n animation: 'skeletonShimmer 1.5s ease-in-out infinite',\r\n borderRadius: 4,\r\n});\r\n\r\n// ============================================================================\r\n// SkeletonText\r\n// ============================================================================\r\n\r\nexport interface SkeletonTextProps {\r\n /** Number of lines to render */\r\n lines?: number;\r\n /** Width of the last line (as percentage or px) */\r\n lastLineWidth?: string | number;\r\n /** Height of each line */\r\n lineHeight?: number;\r\n /** Gap between lines */\r\n gap?: number;\r\n /** Custom className */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * SkeletonText - Placeholder for text content\r\n * \r\n * @example\r\n * ```tsx\r\n * <SkeletonText lines={3} lastLineWidth=\"60%\" />\r\n * ```\r\n */\r\nexport const SkeletonText = memo(function SkeletonText({\r\n lines = 1,\r\n lastLineWidth = '80%',\r\n lineHeight = 14,\r\n gap = 8,\r\n className = '',\r\n}: SkeletonTextProps): React.ReactElement {\r\n return (\r\n <div\r\n className={classNames('zendir-skeleton-text', className)}\r\n role=\"presentation\"\r\n aria-hidden=\"true\"\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap,\r\n }}\r\n >\r\n {Array.from({ length: lines }).map((_, i) => (\r\n <div\r\n key={i}\r\n style={{\r\n ...getShimmerStyle(i === lines - 1 ? lastLineWidth : '100%', lineHeight),\r\n }}\r\n />\r\n ))}\r\n <style>{SHIMMER_KEYFRAMES}</style>\r\n </div>\r\n );\r\n});\r\n\r\n// ============================================================================\r\n// SkeletonBox\r\n// ============================================================================\r\n\r\nexport interface SkeletonBoxProps {\r\n /** Width of the box */\r\n width?: string | number;\r\n /** Height of the box */\r\n height?: string | number;\r\n /** Border radius */\r\n borderRadius?: number;\r\n /** Custom className */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * SkeletonBox - Generic rectangular placeholder\r\n * \r\n * @example\r\n * ```tsx\r\n * <SkeletonBox width={200} height={100} />\r\n * ```\r\n */\r\nexport const SkeletonBox = memo(function SkeletonBox({\r\n width = '100%',\r\n height = 100,\r\n borderRadius = 4,\r\n className = '',\r\n}: SkeletonBoxProps): React.ReactElement {\r\n return (\r\n <div\r\n className={classNames('zendir-skeleton-box', className)}\r\n role=\"presentation\"\r\n aria-hidden=\"true\"\r\n style={{\r\n ...getShimmerStyle(width, height),\r\n borderRadius,\r\n }}\r\n >\r\n <style>{SHIMMER_KEYFRAMES}</style>\r\n </div>\r\n );\r\n});\r\n\r\n// ============================================================================\r\n// SkeletonCircle\r\n// ============================================================================\r\n\r\nexport interface SkeletonCircleProps {\r\n /** Diameter of the circle */\r\n size?: number;\r\n /** Custom className */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * SkeletonCircle - Circular placeholder (avatars, icons)\r\n * \r\n * @example\r\n * ```tsx\r\n * <SkeletonCircle size={48} />\r\n * ```\r\n */\r\nexport const SkeletonCircle = memo(function SkeletonCircle({\r\n size = 40,\r\n className = '',\r\n}: SkeletonCircleProps): React.ReactElement {\r\n return (\r\n <div\r\n className={classNames('zendir-skeleton-circle', className)}\r\n role=\"presentation\"\r\n aria-hidden=\"true\"\r\n style={{\r\n ...getShimmerStyle(size, size),\r\n borderRadius: '50%',\r\n flexShrink: 0,\r\n }}\r\n >\r\n <style>{SHIMMER_KEYFRAMES}</style>\r\n </div>\r\n );\r\n});\r\n\r\n// ============================================================================\r\n// SkeletonCard\r\n// ============================================================================\r\n\r\nexport interface SkeletonCardProps {\r\n /** Card height */\r\n height?: number;\r\n /** Show header placeholder */\r\n showHeader?: boolean;\r\n /** Show content lines */\r\n showContent?: boolean;\r\n /** Number of content lines */\r\n contentLines?: number;\r\n /** Custom className */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * SkeletonCard - Card-shaped placeholder matching component cards\r\n * \r\n * @example\r\n * ```tsx\r\n * <SkeletonCard showHeader showContent contentLines={4} />\r\n * ```\r\n */\r\nexport const SkeletonCard = memo(function SkeletonCard({\r\n height,\r\n showHeader = true,\r\n showContent = true,\r\n contentLines = 3,\r\n className = '',\r\n}: SkeletonCardProps): React.ReactElement {\r\n return (\r\n <div\r\n className={classNames('zendir-skeleton-card', className)}\r\n role=\"presentation\"\r\n aria-label=\"Loading...\"\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 16,\r\n padding: 16,\r\n minHeight: height,\r\n backgroundColor: 'var(--color-background-surface, #1b2d3e)',\r\n borderRadius: 8,\r\n border: '1px solid var(--color-border, rgba(255,255,255,0.1))',\r\n }}\r\n >\r\n {/* Header */}\r\n {showHeader && (\r\n <div style={{ display: 'flex', alignItems: 'center', gap: 12 }}>\r\n <SkeletonCircle size={32} />\r\n <div style={{ flex: 1 }}>\r\n <SkeletonText lines={1} lineHeight={16} />\r\n <div style={{ height: 6 }} />\r\n <SkeletonText lines={1} lineHeight={12} lastLineWidth=\"50%\" />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Content */}\r\n {showContent && (\r\n <div style={{ flex: 1 }}>\r\n <SkeletonText lines={contentLines} gap={10} lineHeight={12} />\r\n </div>\r\n )}\r\n\r\n <style>{SHIMMER_KEYFRAMES}</style>\r\n </div>\r\n );\r\n});\r\n\r\n// ============================================================================\r\n// SkeletonChart\r\n// ============================================================================\r\n\r\nexport interface SkeletonChartProps {\r\n /** Chart height */\r\n height?: number;\r\n /** Chart type visualization */\r\n type?: 'line' | 'bar' | 'area';\r\n /** Custom className */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * SkeletonChart - Chart placeholder with visualization hint\r\n * \r\n * @example\r\n * ```tsx\r\n * <SkeletonChart height={200} type=\"line\" />\r\n * ```\r\n */\r\nexport const SkeletonChart = memo(function SkeletonChart({\r\n height = 200,\r\n type = 'line',\r\n className = '',\r\n}: SkeletonChartProps): React.ReactElement {\r\n return (\r\n <div\r\n className={classNames('zendir-skeleton-chart', className)}\r\n role=\"presentation\"\r\n aria-label=\"Loading chart...\"\r\n style={{\r\n position: 'relative',\r\n height,\r\n backgroundColor: 'var(--color-background-surface, #1b2d3e)',\r\n borderRadius: 8,\r\n border: '1px solid var(--color-border, rgba(255,255,255,0.1))',\r\n overflow: 'hidden',\r\n }}\r\n >\r\n {/* Chart area */}\r\n <div\r\n style={{\r\n position: 'absolute',\r\n inset: 16,\r\n display: 'flex',\r\n alignItems: 'flex-end',\r\n justifyContent: 'space-between',\r\n gap: type === 'bar' ? 8 : 0,\r\n }}\r\n >\r\n {type === 'bar' ? (\r\n // Bar chart skeleton\r\n Array.from({ length: 8 }).map((_, i) => (\r\n <div\r\n key={i}\r\n style={{\r\n ...getShimmerStyle(undefined, `${30 + Math.random() * 50}%`),\r\n flex: 1,\r\n borderRadius: '4px 4px 0 0',\r\n }}\r\n />\r\n ))\r\n ) : (\r\n // Line/Area chart skeleton\r\n <svg\r\n viewBox=\"0 0 100 50\"\r\n preserveAspectRatio=\"none\"\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n }}\r\n >\r\n <defs>\r\n <linearGradient id=\"skeletonGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\r\n <stop offset=\"0%\" stopColor=\"rgba(255,255,255,0.05)\">\r\n <animate\r\n attributeName=\"offset\"\r\n values=\"-0.5;1.5\"\r\n dur=\"1.5s\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </stop>\r\n <stop offset=\"50%\" stopColor=\"rgba(255,255,255,0.1)\">\r\n <animate\r\n attributeName=\"offset\"\r\n values=\"0;2\"\r\n dur=\"1.5s\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </stop>\r\n <stop offset=\"100%\" stopColor=\"rgba(255,255,255,0.05)\">\r\n <animate\r\n attributeName=\"offset\"\r\n values=\"0.5;2.5\"\r\n dur=\"1.5s\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </stop>\r\n </linearGradient>\r\n </defs>\r\n <path\r\n d=\"M0,40 Q15,35 25,30 T50,25 T75,20 T100,15 L100,50 L0,50 Z\"\r\n fill={type === 'area' ? 'url(#skeletonGradient)' : 'none'}\r\n stroke=\"url(#skeletonGradient)\"\r\n strokeWidth=\"2\"\r\n />\r\n </svg>\r\n )}\r\n </div>\r\n\r\n {/* Axis labels */}\r\n <div\r\n style={{\r\n position: 'absolute',\r\n left: 4,\r\n top: 16,\r\n bottom: 16,\r\n width: 24,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n }}\r\n >\r\n {Array.from({ length: 4 }).map((_, i) => (\r\n <SkeletonBox key={i} width={24} height={8} />\r\n ))}\r\n </div>\r\n\r\n <style>{SHIMMER_KEYFRAMES}</style>\r\n </div>\r\n );\r\n});\r\n\r\n// ============================================================================\r\n// Skeleton3D\r\n// ============================================================================\r\n\r\nexport interface Skeleton3DProps {\r\n /** Container height */\r\n height?: number;\r\n /** Custom className */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Skeleton3D - 3D viewer placeholder with sphere hint\r\n * \r\n * @example\r\n * ```tsx\r\n * <Skeleton3D height={400} />\r\n * ```\r\n */\r\nexport const Skeleton3D = memo(function Skeleton3D({\r\n height = 400,\r\n className = '',\r\n}: Skeleton3DProps): React.ReactElement {\r\n return (\r\n <div\r\n className={classNames('zendir-skeleton-3d', className)}\r\n role=\"presentation\"\r\n aria-label=\"Loading 3D view...\"\r\n style={{\r\n position: 'relative',\r\n height,\r\n backgroundColor: 'var(--color-background-base, #101923)',\r\n borderRadius: 8,\r\n overflow: 'hidden',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n {/* Spinning sphere hint */}\r\n <div\r\n style={{\r\n width: Math.min(height * 0.5, 200),\r\n height: Math.min(height * 0.5, 200),\r\n borderRadius: '50%',\r\n border: '2px solid rgba(255,255,255,0.1)',\r\n backgroundImage: 'linear-gradient(135deg, transparent 40%, rgba(77,172,255,0.1) 50%, transparent 60%)',\r\n backgroundSize: '200% 200%',\r\n animation: 'skeleton3DSpin 3s linear infinite, skeletonShimmer 1.5s ease-in-out infinite',\r\n }}\r\n />\r\n\r\n {/* Loading text */}\r\n <div\r\n style={{\r\n position: 'absolute',\r\n bottom: 16,\r\n left: 0,\r\n right: 0,\r\n textAlign: 'center',\r\n fontSize: 12,\r\n color: 'rgba(255,255,255,0.4)',\r\n }}\r\n >\r\n Loading 3D Scene...\r\n </div>\r\n\r\n <style>{`\r\n ${SHIMMER_KEYFRAMES}\r\n @keyframes skeleton3DSpin {\r\n from { transform: rotate(0deg); }\r\n to { transform: rotate(360deg); }\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n});\r\n"],"names":["SkeletonText","SkeletonBox","SkeletonCircle","SkeletonCard","SkeletonChart","Skeleton3D"],"mappings":"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"}
1
+ {"version":3,"file":"Skeleton.js","names":[],"sources":["../../../src/react/shared/Skeleton.tsx"],"sourcesContent":["/**\n * @zendir/ui - Skeleton Components\n *\n * Loading skeleton components with Apple-style shimmer animation.\n * Used for loading states before data arrives.\n *\n * Features:\n * - Smooth shimmer animation\n * - Multiple variants (text, card, chart, circle)\n * - Respects reduced-motion preferences\n * - Matches component sizes for seamless transition\n */\n\nimport React, { memo } from \"react\";\nimport { classNames } from \"../utils\";\n\n// ============================================================================\n// Shared Styles\n// ============================================================================\n\nconst SHIMMER_KEYFRAMES = `\n@keyframes skeletonShimmer {\n 0% {\n background-position: -200% 0;\n }\n 100% {\n background-position: 200% 0;\n }\n}\n`;\n\nconst getShimmerStyle = (\n width?: string | number,\n height?: string | number,\n): React.CSSProperties => ({\n width: width ?? \"100%\",\n height: height ?? 16,\n backgroundColor:\n \"var(--color-background-interactive-default, rgba(255,255,255,0.1))\",\n backgroundImage:\n \"linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.08) 50%, transparent 100%)\",\n backgroundSize: \"200% 100%\",\n backgroundRepeat: \"no-repeat\",\n animation: \"skeletonShimmer 1.5s ease-in-out infinite\",\n borderRadius: 4,\n});\n\n// ============================================================================\n// SkeletonText\n// ============================================================================\n\nexport interface SkeletonTextProps {\n /** Number of lines to render */\n lines?: number;\n /** Width of the last line (as percentage or px) */\n lastLineWidth?: string | number;\n /** Height of each line */\n lineHeight?: number;\n /** Gap between lines */\n gap?: number;\n /** Custom className */\n className?: string;\n}\n\n/**\n * SkeletonText - Placeholder for text content\n *\n * @example\n * ```tsx\n * <SkeletonText lines={3} lastLineWidth=\"60%\" />\n * ```\n */\nexport const SkeletonText = memo(function SkeletonText({\n lines = 1,\n lastLineWidth = \"80%\",\n lineHeight = 14,\n gap = 8,\n className = \"\",\n}: SkeletonTextProps): React.ReactElement {\n return (\n <div\n className={classNames(\"zendir-skeleton-text\", className)}\n role=\"presentation\"\n aria-hidden=\"true\"\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap,\n }}\n >\n {Array.from({ length: lines }).map((_, i) => (\n <div\n key={i}\n style={{\n ...getShimmerStyle(\n i === lines - 1 ? lastLineWidth : \"100%\",\n lineHeight,\n ),\n }}\n />\n ))}\n <style>{SHIMMER_KEYFRAMES}</style>\n </div>\n );\n});\n\n// ============================================================================\n// SkeletonBox\n// ============================================================================\n\nexport interface SkeletonBoxProps {\n /** Width of the box */\n width?: string | number;\n /** Height of the box */\n height?: string | number;\n /** Border radius */\n borderRadius?: number;\n /** Custom className */\n className?: string;\n}\n\n/**\n * SkeletonBox - Generic rectangular placeholder\n *\n * @example\n * ```tsx\n * <SkeletonBox width={200} height={100} />\n * ```\n */\nexport const SkeletonBox = memo(function SkeletonBox({\n width = \"100%\",\n height = 100,\n borderRadius = 4,\n className = \"\",\n}: SkeletonBoxProps): React.ReactElement {\n return (\n <div\n className={classNames(\"zendir-skeleton-box\", className)}\n role=\"presentation\"\n aria-hidden=\"true\"\n style={{\n ...getShimmerStyle(width, height),\n borderRadius,\n }}\n >\n <style>{SHIMMER_KEYFRAMES}</style>\n </div>\n );\n});\n\n// ============================================================================\n// SkeletonCircle\n// ============================================================================\n\nexport interface SkeletonCircleProps {\n /** Diameter of the circle */\n size?: number;\n /** Custom className */\n className?: string;\n}\n\n/**\n * SkeletonCircle - Circular placeholder (avatars, icons)\n *\n * @example\n * ```tsx\n * <SkeletonCircle size={48} />\n * ```\n */\nexport const SkeletonCircle = memo(function SkeletonCircle({\n size = 40,\n className = \"\",\n}: SkeletonCircleProps): React.ReactElement {\n return (\n <div\n className={classNames(\"zendir-skeleton-circle\", className)}\n role=\"presentation\"\n aria-hidden=\"true\"\n style={{\n ...getShimmerStyle(size, size),\n borderRadius: \"50%\",\n flexShrink: 0,\n }}\n >\n <style>{SHIMMER_KEYFRAMES}</style>\n </div>\n );\n});\n\n// ============================================================================\n// SkeletonCard\n// ============================================================================\n\nexport interface SkeletonCardProps {\n /** Card height */\n height?: number;\n /** Show header placeholder */\n showHeader?: boolean;\n /** Show content lines */\n showContent?: boolean;\n /** Number of content lines */\n contentLines?: number;\n /** Custom className */\n className?: string;\n}\n\n/**\n * SkeletonCard - Card-shaped placeholder matching component cards\n *\n * @example\n * ```tsx\n * <SkeletonCard showHeader showContent contentLines={4} />\n * ```\n */\nexport const SkeletonCard = memo(function SkeletonCard({\n height,\n showHeader = true,\n showContent = true,\n contentLines = 3,\n className = \"\",\n}: SkeletonCardProps): React.ReactElement {\n return (\n <div\n className={classNames(\"zendir-skeleton-card\", className)}\n role=\"presentation\"\n aria-label=\"Loading...\"\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 16,\n padding: 16,\n minHeight: height,\n backgroundColor: \"var(--zendir-bg-surface, #1b2d3e)\",\n borderRadius: 8,\n border: \"1px solid var(--zendir-border-default, rgba(255,255,255,0.1))\",\n }}\n >\n {/* Header */}\n {showHeader && (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12 }}>\n <SkeletonCircle size={32} />\n <div style={{ flex: 1 }}>\n <SkeletonText lines={1} lineHeight={16} />\n <div style={{ height: 6 }} />\n <SkeletonText lines={1} lineHeight={12} lastLineWidth=\"50%\" />\n </div>\n </div>\n )}\n\n {/* Content */}\n {showContent && (\n <div style={{ flex: 1 }}>\n <SkeletonText lines={contentLines} gap={10} lineHeight={12} />\n </div>\n )}\n\n <style>{SHIMMER_KEYFRAMES}</style>\n </div>\n );\n});\n\n// ============================================================================\n// SkeletonChart\n// ============================================================================\n\nexport interface SkeletonChartProps {\n /** Chart height */\n height?: number;\n /** Chart type visualization */\n type?: \"line\" | \"bar\" | \"area\";\n /** Custom className */\n className?: string;\n}\n\n/**\n * SkeletonChart - Chart placeholder with visualization hint\n *\n * @example\n * ```tsx\n * <SkeletonChart height={200} type=\"line\" />\n * ```\n */\nexport const SkeletonChart = memo(function SkeletonChart({\n height = 200,\n type = \"line\",\n className = \"\",\n}: SkeletonChartProps): React.ReactElement {\n return (\n <div\n className={classNames(\"zendir-skeleton-chart\", className)}\n role=\"presentation\"\n aria-label=\"Loading chart...\"\n style={{\n position: \"relative\",\n height,\n backgroundColor: \"var(--zendir-bg-surface, #1b2d3e)\",\n borderRadius: 8,\n border: \"1px solid var(--zendir-border-default, rgba(255,255,255,0.1))\",\n overflow: \"hidden\",\n }}\n >\n {/* Chart area */}\n <div\n style={{\n position: \"absolute\",\n inset: 16,\n display: \"flex\",\n alignItems: \"flex-end\",\n justifyContent: \"space-between\",\n gap: type === \"bar\" ? 8 : 0,\n }}\n >\n {type === \"bar\" ? (\n // Bar chart skeleton\n Array.from({ length: 8 }).map((_, i) => (\n <div\n key={i}\n style={{\n ...getShimmerStyle(undefined, `${30 + Math.random() * 50}%`),\n flex: 1,\n borderRadius: \"4px 4px 0 0\",\n }}\n />\n ))\n ) : (\n // Line/Area chart skeleton\n <svg\n viewBox=\"0 0 100 50\"\n preserveAspectRatio=\"none\"\n style={{\n width: \"100%\",\n height: \"100%\",\n }}\n >\n <defs>\n <linearGradient\n id=\"skeletonGradient\"\n x1=\"0%\"\n y1=\"0%\"\n x2=\"100%\"\n y2=\"0%\"\n >\n <stop offset=\"0%\" stopColor=\"rgba(255,255,255,0.05)\">\n <animate\n attributeName=\"offset\"\n values=\"-0.5;1.5\"\n dur=\"1.5s\"\n repeatCount=\"indefinite\"\n />\n </stop>\n <stop offset=\"50%\" stopColor=\"rgba(255,255,255,0.1)\">\n <animate\n attributeName=\"offset\"\n values=\"0;2\"\n dur=\"1.5s\"\n repeatCount=\"indefinite\"\n />\n </stop>\n <stop offset=\"100%\" stopColor=\"rgba(255,255,255,0.05)\">\n <animate\n attributeName=\"offset\"\n values=\"0.5;2.5\"\n dur=\"1.5s\"\n repeatCount=\"indefinite\"\n />\n </stop>\n </linearGradient>\n </defs>\n <path\n d=\"M0,40 Q15,35 25,30 T50,25 T75,20 T100,15 L100,50 L0,50 Z\"\n fill={type === \"area\" ? \"url(#skeletonGradient)\" : \"none\"}\n stroke=\"url(#skeletonGradient)\"\n strokeWidth=\"2\"\n />\n </svg>\n )}\n </div>\n\n {/* Axis labels */}\n <div\n style={{\n position: \"absolute\",\n left: 4,\n top: 16,\n bottom: 16,\n width: 24,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n }}\n >\n {Array.from({ length: 4 }).map((_, i) => (\n <SkeletonBox key={i} width={24} height={8} />\n ))}\n </div>\n\n <style>{SHIMMER_KEYFRAMES}</style>\n </div>\n );\n});\n\n// ============================================================================\n// Skeleton3D\n// ============================================================================\n\nexport interface Skeleton3DProps {\n /** Container height */\n height?: number;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Skeleton3D - 3D viewer placeholder with sphere hint\n *\n * @example\n * ```tsx\n * <Skeleton3D height={400} />\n * ```\n */\nexport const Skeleton3D = memo(function Skeleton3D({\n height = 400,\n className = \"\",\n}: Skeleton3DProps): React.ReactElement {\n return (\n <div\n className={classNames(\"zendir-skeleton-3d\", className)}\n role=\"presentation\"\n aria-label=\"Loading 3D view...\"\n style={{\n position: \"relative\",\n height,\n backgroundColor: \"var(--zendir-bg-base, #101923)\",\n borderRadius: 8,\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {/* Spinning sphere hint */}\n <div\n style={{\n width: Math.min(height * 0.5, 200),\n height: Math.min(height * 0.5, 200),\n borderRadius: \"50%\",\n border: \"2px solid rgba(255,255,255,0.1)\",\n backgroundImage:\n \"linear-gradient(135deg, transparent 40%, rgba(77,172,255,0.1) 50%, transparent 60%)\",\n backgroundSize: \"200% 200%\",\n animation:\n \"skeleton3DSpin 3s linear infinite, skeletonShimmer 1.5s ease-in-out infinite\",\n }}\n />\n\n {/* Loading text */}\n <div\n style={{\n position: \"absolute\",\n bottom: 16,\n left: 0,\n right: 0,\n textAlign: \"center\",\n fontSize: 12,\n color: \"rgba(255,255,255,0.4)\",\n }}\n >\n Loading 3D Scene...\n </div>\n\n <style>{`\n ${SHIMMER_KEYFRAMES}\n @keyframes skeleton3DSpin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n});\n"],"mappings":"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"}
@@ -1,325 +1,6 @@
1
1
  import { default as React, ReactNode } from 'react';
2
-
3
- export type ThemeVariant = 'astro' | 'purple-hue' | 'hybrid' | 'transparent' | 'transparent-bold' | 'transparent-minimal';
4
- export type ThemeMode = 'light' | 'dark';
5
- export interface ThemeColors {
6
- background: {
7
- base: string;
8
- surface: string;
9
- elevated: string;
10
- overlay: string;
11
- };
12
- border: {
13
- default: string;
14
- muted: string;
15
- focus: string;
16
- /** Transparent theme: thin faded top-to-bottom border (box-shadow, use with border: 'none') */
17
- fadedBoxShadow?: string;
18
- /** Card border style (computed from theme – solid or transparent faded). Use ...tokens.colors.border.cardStyle */
19
- cardStyle?: React.CSSProperties;
20
- /** Card border for dashed/empty state. Use ...tokens.colors.border.cardStyleDashed */
21
- cardStyleDashed?: React.CSSProperties;
22
- /** Card border using default color (e.g. NavBall, EclipseTimer). Use ...tokens.colors.border.cardStyleDefault */
23
- cardStyleDefault?: React.CSSProperties;
24
- };
25
- text: {
26
- primary: string;
27
- secondary: string;
28
- tertiary: string;
29
- /** Muted/placeholder text (alias for tertiary when not set) */
30
- muted?: string;
31
- inverse: string;
32
- };
33
- status: {
34
- normal: string;
35
- standby: string;
36
- caution: string;
37
- serious: string;
38
- critical: string;
39
- off: string;
40
- };
41
- semantic: {
42
- success: string;
43
- warning: string;
44
- error: string;
45
- info: string;
46
- };
47
- accent: {
48
- primary: string;
49
- secondary: string;
50
- tertiary: string;
51
- };
52
- interactive: {
53
- default: string;
54
- hover: string;
55
- active: string;
56
- disabled: string;
57
- /** Transparent theme: button/control bg (low opacity purple) when not hovered */
58
- transparentDefault?: string;
59
- /** Transparent theme: button/control bg on hover (higher opacity purple) */
60
- transparentHover?: string;
61
- /** Transparent theme: input field bg (semi-transparent purple tint) */
62
- transparentInputBg?: string;
63
- };
64
- }
65
- export interface ThemeAnimation {
66
- /** Fast transitions (hover states) - 150ms */
67
- fast: string;
68
- /** Normal transitions (most interactions) - 250ms */
69
- normal: string;
70
- /** Slow transitions (page/mode changes) - 400ms */
71
- slow: string;
72
- /** Spring animation for playful interactions */
73
- spring: string;
74
- /** Easing function */
75
- easing: {
76
- default: string;
77
- in: string;
78
- out: string;
79
- inOut: string;
80
- };
81
- /** Duration values in milliseconds */
82
- duration: {
83
- instant: number;
84
- fast: number;
85
- normal: number;
86
- slow: number;
87
- };
88
- }
89
- export interface ThemeFocus {
90
- /** Focus ring color */
91
- color: string;
92
- /** Focus ring width */
93
- width: string;
94
- /** Focus ring offset */
95
- offset: string;
96
- /** Full focus ring CSS */
97
- ring: string;
98
- /** Focus ring style object */
99
- style: React.CSSProperties;
100
- }
101
- /**
102
- * Astro UX Typography Style Token
103
- * Based on https://www.astrouxds.com/foundations/typography/
104
- */
105
- export interface TypographyStyle {
106
- fontSize: string;
107
- fontWeight: number;
108
- letterSpacing: string;
109
- lineHeight: string;
110
- }
111
- export interface ThemeTokens {
112
- colors: ThemeColors;
113
- spacing: {
114
- /** 2px — micro adjustments, decorative offsets */
115
- xxs: string;
116
- /** 4px — tight gaps, icon padding */
117
- xs: string;
118
- /** 8px — compact spacing, small gaps */
119
- sm: string;
120
- /** 12px — form fields, compact cards (between sm and md) */
121
- smd: string;
122
- /** 16px — default card padding, section gaps */
123
- md: string;
124
- /** 20px — slightly generous spacing */
125
- mdl: string;
126
- /** 24px — generous spacing, content area padding */
127
- lg: string;
128
- /** 32px — large section gaps */
129
- xl: string;
130
- /** 48px — extra large spacing */
131
- xxl: string;
132
- };
133
- borderRadius: {
134
- none: string;
135
- /** 1px — very subtle rounding */
136
- xs: string;
137
- /** 2px — small elements, badges, tooltips */
138
- sm: string;
139
- /** 4px — inputs, selects, standard controls */
140
- md: string;
141
- /** 8px — cards, containers */
142
- lg: string;
143
- /** 12px — prominent surfaces, modals */
144
- xl: string;
145
- /** 9999px — pills, fully rounded */
146
- full: string;
147
- };
148
- /** Standardised element heights for interactive controls */
149
- elementSize: {
150
- /** 28px — compact controls */
151
- sm: string;
152
- /** 36px — default controls */
153
- md: string;
154
- /** 44px — prominent controls, touch targets */
155
- lg: string;
156
- };
157
- typography: {
158
- fontFamily: {
159
- primary: string;
160
- /** Optional heading face. Defaults to Sora, falls back to primary. */
161
- heading?: string;
162
- mono: string;
163
- };
164
- display: {
165
- 1: TypographyStyle;
166
- 2: TypographyStyle;
167
- };
168
- heading: {
169
- 1: TypographyStyle;
170
- '1Bold': TypographyStyle;
171
- 2: TypographyStyle;
172
- 3: TypographyStyle;
173
- 4: TypographyStyle;
174
- 5: TypographyStyle;
175
- 6: TypographyStyle;
176
- };
177
- body: {
178
- 1: TypographyStyle;
179
- '1Bold': TypographyStyle;
180
- 2: TypographyStyle;
181
- '2Bold': TypographyStyle;
182
- 3: TypographyStyle;
183
- '3Bold': TypographyStyle;
184
- };
185
- control: {
186
- 1: TypographyStyle;
187
- '1Bold': TypographyStyle;
188
- };
189
- fontSize: {
190
- micro: string;
191
- xxs: string;
192
- xs: string;
193
- sm: string;
194
- base: string;
195
- md: string;
196
- lg: string;
197
- xl: string;
198
- xxl: string;
199
- xxxl: string;
200
- };
201
- fontWeight: {
202
- light: number;
203
- normal: number;
204
- medium: number;
205
- semibold: number;
206
- bold: number;
207
- };
208
- lineHeight: {
209
- tight: string;
210
- normal: string;
211
- relaxed: string;
212
- };
213
- letterSpacing: {
214
- tight: string;
215
- normal: string;
216
- wide: string;
217
- };
218
- };
219
- shadows: {
220
- none: string;
221
- sm: string;
222
- md: string;
223
- lg: string;
224
- xl: string;
225
- glow: (color: string) => string;
226
- };
227
- animation: ThemeAnimation;
228
- focus: ThemeFocus;
229
- /** Semantic layout tokens for consistent spacing across cards, forms, and sections */
230
- layout: LayoutTokens;
231
- /** Semantic border tokens for consistent element styling (derived from theme colors) */
232
- borders: BorderTokens;
233
- }
234
- export interface LayoutTokens {
235
- /** Card / panel container spacing */
236
- card: {
237
- /** Internal padding of card containers */
238
- padding: string;
239
- /** Gap between cards in grid layouts (desktop) */
240
- gap: string;
241
- /** Gap between cards in grid layouts (mobile / compact) */
242
- gapCompact: string;
243
- /** Card heading: icon size, title typography, gap — single system for all cards/charts */
244
- heading: {
245
- iconSize: number;
246
- iconSizeCompact: number;
247
- titleFontSize: string;
248
- /** Smaller title for chart headers (e.g. Power Trends) so they match card visual weight */
249
- titleFontSizeChart: string;
250
- titleFontWeight: number;
251
- gap: number;
252
- };
253
- };
254
- /** Section heading spacing (heading + divider + content) */
255
- section: {
256
- /** Padding below heading text, above the divider border */
257
- headerPaddingBottom: string;
258
- /** Margin below the divider border, before content */
259
- headerMarginBottom: string;
260
- /** Padding above the first content element after heading */
261
- contentPaddingTop: string;
262
- };
263
- /** Form and input field spacing */
264
- form: {
265
- /** Vertical gap between stacked form fields */
266
- fieldGap: string;
267
- /** Horizontal gap between side-by-side inline fields */
268
- inlineGap: string;
269
- /** Padding inside grouped / nested field containers */
270
- groupPadding: string;
271
- /** Gap between items within a field group */
272
- groupGap: string;
273
- /** Gap between label text and helper icons (e.g. tooltip) */
274
- labelGap: string;
275
- };
276
- /** Nested surface / panel spacing (e.g. grouped fields within a card) */
277
- surface: {
278
- /** Internal padding of nested surfaces */
279
- padding: string;
280
- /** Border radius of nested surfaces */
281
- borderRadius: string;
282
- /** Gap between items in compact nested surfaces */
283
- gap: string;
284
- };
285
- }
286
- export interface BorderTokens {
287
- /** Border widths — standardised across all interactive elements */
288
- width: {
289
- /** Thin (1px) — inputs, cards, dividers, dropdowns */
290
- thin: string;
291
- /** Medium (1.5px) — secondary buttons, emphasised inputs */
292
- medium: string;
293
- /** Thick (2px) — checkboxes, accent borders, active tabs */
294
- thick: string;
295
- };
296
- /** Pre-computed input / control borders (width + style + color) */
297
- input: {
298
- /** Default resting state */
299
- default: string;
300
- /** Hover state (accent at 50% opacity) */
301
- hover: string;
302
- /** Focused state (full accent) */
303
- focus: string;
304
- /** Error / critical state */
305
- error: string;
306
- };
307
- /** Focus ring box-shadow values for interactive elements */
308
- focusRing: {
309
- /** Standard ring for inputs and selects */
310
- default: string;
311
- /** Ring for buttons (double-ring pattern) */
312
- button: string;
313
- /** Subtle ring for checkboxes, tabs, toggles */
314
- subtle: string;
315
- };
316
- /** Section divider border (headings, dialog headers/footers, tab bars) */
317
- divider: string;
318
- /** Dropdown / popover container border */
319
- dropdown: string;
320
- /** Separator line inside elements (unit separators, table rows) */
321
- separator: string;
322
- }
2
+ import { ThemeVariant, ThemeMode, ThemeColors, ThemeTokens, ThemeAnimation, ThemeFocus, LayoutTokens, BorderTokens } from './types';
3
+ export type { ThemeVariant, ThemeMode, ThemeColors, ThemeTokens, ThemeAnimation, ThemeFocus, LayoutTokens, BorderTokens, };
323
4
  export interface ThemeContextValue {
324
5
  theme: ThemeVariant;
325
6
  mode: ThemeMode;