@zendir/ui 0.5.0 → 0.6.1

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 +419 -386
  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 +313 -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 +26 -3
  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 +533 -155
  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":"Notification.js","sources":["../../../src/react/astro/Notification.tsx"],"sourcesContent":["/**\n * @zendir/ui - Notification Component (Pure React)\n * \n * Toast notification following Astro UX Design System patterns.\n * \n * Features:\n * - Theme-integrated via useTheme()\n * - Status-based styling (standby, normal, caution, critical)\n * - Auto-dismiss support\n * - Close button\n * - Entrance/exit animations\n * - Accessible (live region for screen readers)\n */\n\nimport React, { memo, useEffect, useState, useCallback, useRef } from 'react';\nimport { useTheme } from '../theme';\nimport { classNames } from '../utils';\n\nexport type NotificationStatus = 'standby' | 'normal' | 'caution' | 'serious' | 'critical';\n\nexport interface NotificationProps {\n /** Notification message */\n message: string;\n /** Status/severity of the notification */\n status?: NotificationStatus;\n /** Whether the notification is open/visible */\n open?: boolean;\n /** Auto-close after this many milliseconds */\n closeAfter?: number;\n /** Show close button */\n closeable?: boolean;\n /** Callback when notification is closed */\n onClose?: () => void;\n /** Custom className */\n className?: string;\n /** Child content (alternative to message prop) */\n children?: React.ReactNode;\n}\n\n/**\n * AstroUXDS Status Symbol Icons with Dual-Coding\n * \n * Each status has a unique shape for accessibility:\n * - standby: Ring (info)\n * - normal: Circle (checkmark)\n * - caution: Square (warning)\n * - serious: Diamond (warning)\n * - critical: Triangle (error)\n */\nconst STATUS_ICONS: Record<NotificationStatus, React.ReactNode> = {\n // Standby - Blue ring with info symbol\n standby: (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"20\" height=\"20\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" opacity=\"0.2\" />\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <path d=\"M11 11h2v6h-2v-6zm0-4h2v2h-2V7z\" />\n </svg>\n ),\n // Normal - Green Circle with checkmark\n normal: (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"20\" height=\"20\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9 12.5l2 2 4-4\" fill=\"none\" stroke=\"#fff\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ),\n // Caution - Yellow Square with warning\n caution: (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"20\" height=\"20\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <path d=\"M11 7h2v6h-2V7zm0 8h2v2h-2v-2z\" fill=\"#000\" />\n </svg>\n ),\n // Serious - Orange Diamond with warning\n serious: (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"20\" height=\"20\">\n <path d=\"M12 2l10 10-10 10L2 12z\" />\n <path d=\"M11 8h2v6h-2V8zm0 8h2v2h-2v-2z\" fill=\"#000\" />\n </svg>\n ),\n // Critical - Red Triangle with exclamation\n critical: (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"20\" height=\"20\">\n <path d=\"M12 2L2 20h20L12 2z\" />\n <path d=\"M11 9h2v6h-2V9zm0 8h2v2h-2v-2z\" fill=\"#fff\" />\n </svg>\n ),\n};\n\n/**\n * Notification - Pure React toast notification\n * \n * Displays alerts with status-based coloring and optional auto-dismiss.\n * \n * @example\n * ```tsx\n * <Notification \n * message=\"Telemetry received\" \n * status=\"normal\" \n * open={true}\n * />\n * <Notification \n * message=\"Link quality degraded\" \n * status=\"caution\" \n * closeAfter={5000}\n * onClose={() => {}}\n * />\n * ```\n */\nexport const Notification = memo(function Notification({\n message,\n status = 'standby',\n open = true,\n closeAfter,\n closeable = true,\n onClose,\n className = '',\n children,\n}: NotificationProps): React.ReactElement | null {\n const { tokens, theme } = useTheme();\n const isTransparentTheme = theme === 'transparent' || theme === 'transparent-bold' || theme === 'transparent-minimal';\n const [isVisible, setIsVisible] = useState(open);\n const [isExiting, setIsExiting] = useState(false);\n const closeTimeoutRef = useRef<ReturnType<typeof setTimeout>>();\n const color = tokens.colors.status[status] || tokens.colors.status.standby;\n\n // Cleanup on unmount\n useEffect(() => {\n return () => { clearTimeout(closeTimeoutRef.current); };\n }, []);\n\n const handleClose = useCallback(() => {\n setIsExiting(true);\n closeTimeoutRef.current = setTimeout(() => {\n setIsVisible(false);\n onClose?.();\n }, 200);\n }, [onClose]);\n\n useEffect(() => {\n setIsVisible(open);\n setIsExiting(false);\n }, [open]);\n\n useEffect(() => {\n if (closeAfter && isVisible) {\n const timer = setTimeout(handleClose, closeAfter);\n return () => clearTimeout(timer);\n }\n }, [closeAfter, isVisible, handleClose]);\n\n if (!isVisible) return null;\n\n return (\n <div\n className={classNames('zendir-notification', className)}\n role=\"alert\"\n aria-live=\"polite\"\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: tokens.spacing.md,\n padding: `${tokens.spacing.md} ${tokens.spacing.lg}`,\n backgroundColor: isTransparentTheme ? 'transparent' : tokens.colors.background.surface,\n ...(isTransparentTheme && { backdropFilter: 'blur(12px)', WebkitBackdropFilter: 'blur(12px)' as const }),\n borderLeft: `4px solid ${color}`,\n borderRadius: tokens.borderRadius.md,\n boxShadow: tokens.shadows.lg,\n maxWidth: 400,\n animation: isExiting\n ? 'notificationExit 200ms ease-out forwards'\n : 'notificationEnter 200ms ease-out',\n }}\n >\n {/* Status icon */}\n <span style={{ color, flexShrink: 0, marginTop: 2 }}>\n {STATUS_ICONS[status]}\n </span>\n\n {/* Content */}\n <div style={{ \n flex: 1, \n fontSize: tokens.typography.fontSize.base, \n lineHeight: tokens.typography.lineHeight.normal,\n color: tokens.colors.text.primary,\n }}>\n {children ?? message}\n </div>\n\n {/* Close button */}\n {closeable && (\n <button\n onClick={handleClose}\n aria-label=\"Close notification\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 24,\n height: 24,\n padding: 0,\n background: 'transparent',\n border: 'none',\n borderRadius: tokens.borderRadius.sm,\n color: tokens.colors.text.secondary,\n cursor: 'pointer',\n transition: tokens.animation.fast,\n flexShrink: 0,\n }}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n </button>\n )}\n\n {/* Animations — respects prefers-reduced-motion (WCAG 2.3.3) */}\n <style>{`\n @keyframes notificationEnter {\n from {\n opacity: 0;\n transform: translateX(20px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n }\n @keyframes notificationExit {\n from {\n opacity: 1;\n transform: translateX(0);\n }\n to {\n opacity: 0;\n transform: translateX(20px);\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .zendir-notification {\n animation: none !important;\n }\n }\n `}</style>\n </div>\n );\n});\n"],"names":["Notification"],"mappings":"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"}
1
+ {"version":3,"file":"Notification.js","names":[],"sources":["../../../src/react/astro/Notification.tsx"],"sourcesContent":["/**\r\n * @zendir/ui - Notification Component (Pure React)\r\n *\r\n * Toast notification following Astro UX Design System patterns.\r\n *\r\n * Features:\r\n * - Theme-integrated via useTheme()\r\n * - Status-based styling (standby, normal, caution, critical)\r\n * - Auto-dismiss support\r\n * - Close button\r\n * - Entrance/exit animations\r\n * - Accessible (live region for screen readers)\r\n */\r\n\r\nimport React, { memo, useEffect, useState, useCallback, useRef } from \"react\";\r\nimport { useTheme } from \"../theme\";\r\nimport { classNames } from \"../utils\";\r\n\r\nexport type NotificationStatus =\r\n | \"standby\"\r\n | \"normal\"\r\n | \"caution\"\r\n | \"serious\"\r\n | \"critical\";\r\n\r\nexport interface NotificationProps {\r\n /** Notification message */\r\n message: string;\r\n /** Status/severity of the notification */\r\n status?: NotificationStatus;\r\n /** Whether the notification is open/visible */\r\n open?: boolean;\r\n /** Auto-close after this many milliseconds */\r\n closeAfter?: number;\r\n /** Show close button */\r\n closeable?: boolean;\r\n /** Callback when notification is closed */\r\n onClose?: () => void;\r\n /** Custom className */\r\n className?: string;\r\n /** Child content (alternative to message prop) */\r\n children?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * AstroUXDS Status Symbol Icons with Dual-Coding\r\n *\r\n * Each status has a unique shape for accessibility:\r\n * - standby: Ring (info)\r\n * - normal: Circle (checkmark)\r\n * - caution: Square (warning)\r\n * - serious: Diamond (warning)\r\n * - critical: Triangle (error)\r\n */\r\nconst STATUS_ICONS: Record<NotificationStatus, React.ReactNode> = {\r\n // Standby - Blue ring with info symbol\r\n standby: (\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"20\" height=\"20\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" opacity=\"0.2\" />\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"10\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n />\r\n <path d=\"M11 11h2v6h-2v-6zm0-4h2v2h-2V7z\" />\r\n </svg>\r\n ),\r\n // Normal - Green Circle with checkmark\r\n normal: (\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"20\" height=\"20\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <path\r\n d=\"M9 12.5l2 2 4-4\"\r\n fill=\"none\"\r\n stroke=\"#fff\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </svg>\r\n ),\r\n // Caution - Yellow Square with warning\r\n caution: (\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"20\" height=\"20\">\r\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\r\n <path d=\"M11 7h2v6h-2V7zm0 8h2v2h-2v-2z\" fill=\"#000\" />\r\n </svg>\r\n ),\r\n // Serious - Orange Diamond with warning\r\n serious: (\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"20\" height=\"20\">\r\n <path d=\"M12 2l10 10-10 10L2 12z\" />\r\n <path d=\"M11 8h2v6h-2V8zm0 8h2v2h-2v-2z\" fill=\"#000\" />\r\n </svg>\r\n ),\r\n // Critical - Red Triangle with exclamation\r\n critical: (\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"20\" height=\"20\">\r\n <path d=\"M12 2L2 20h20L12 2z\" />\r\n <path d=\"M11 9h2v6h-2V9zm0 8h2v2h-2v-2z\" fill=\"#fff\" />\r\n </svg>\r\n ),\r\n};\r\n\r\n/**\r\n * Notification - Pure React toast notification\r\n *\r\n * Displays alerts with status-based coloring and optional auto-dismiss.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Notification\r\n * message=\"Telemetry received\"\r\n * status=\"normal\"\r\n * open={true}\r\n * />\r\n * <Notification\r\n * message=\"Link quality degraded\"\r\n * status=\"caution\"\r\n * closeAfter={5000}\r\n * onClose={() => {}}\r\n * />\r\n * ```\r\n */\r\nexport const Notification = memo(function Notification({\r\n message,\r\n status = \"standby\",\r\n open = true,\r\n closeAfter,\r\n closeable = true,\r\n onClose,\r\n className = \"\",\r\n children,\r\n}: NotificationProps): React.ReactElement | null {\r\n const { tokens, theme } = useTheme();\r\n const isTransparentTheme =\r\n theme === \"transparent\" ||\r\n theme === \"transparent-bold\" ||\r\n theme === \"transparent-minimal\";\r\n const [isVisible, setIsVisible] = useState(open);\r\n const [isExiting, setIsExiting] = useState(false);\r\n const closeTimeoutRef = useRef<ReturnType<typeof setTimeout>>();\r\n const color = tokens.colors.status[status] || tokens.colors.status.standby;\r\n\r\n // Cleanup on unmount\r\n useEffect(() => {\r\n return () => {\r\n clearTimeout(closeTimeoutRef.current);\r\n };\r\n }, []);\r\n\r\n const handleClose = useCallback(() => {\r\n setIsExiting(true);\r\n closeTimeoutRef.current = setTimeout(() => {\r\n setIsVisible(false);\r\n onClose?.();\r\n }, 200);\r\n }, [onClose]);\r\n\r\n useEffect(() => {\r\n setIsVisible(open);\r\n setIsExiting(false);\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n if (closeAfter && isVisible) {\r\n const timer = setTimeout(handleClose, closeAfter);\r\n return () => clearTimeout(timer);\r\n }\r\n }, [closeAfter, isVisible, handleClose]);\r\n\r\n if (!isVisible) return null;\r\n\r\n return (\r\n <div\r\n className={classNames(\"zendir-notification\", className)}\r\n role=\"alert\"\r\n aria-live=\"polite\"\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"flex-start\",\r\n gap: tokens.spacing.md,\r\n padding: `${tokens.spacing.md} ${tokens.spacing.lg}`,\r\n backgroundColor: isTransparentTheme\r\n ? \"transparent\"\r\n : tokens.colors.background.surface,\r\n ...(isTransparentTheme && {\r\n backdropFilter: \"blur(12px)\",\r\n WebkitBackdropFilter: \"blur(12px)\" as const,\r\n }),\r\n borderLeft: `4px solid ${color}`,\r\n borderRadius: tokens.borderRadius.md,\r\n boxShadow: tokens.shadows.lg,\r\n maxWidth: 400,\r\n animation: isExiting\r\n ? \"notificationExit 200ms ease-out forwards\"\r\n : \"notificationEnter 200ms ease-out\",\r\n }}\r\n >\r\n {/* Status icon */}\r\n <span style={{ color, flexShrink: 0, marginTop: 2 }}>\r\n {STATUS_ICONS[status]}\r\n </span>\r\n\r\n {/* Content */}\r\n <div\r\n style={{\r\n flex: 1,\r\n fontSize: tokens.typography.fontSize.base,\r\n lineHeight: tokens.typography.lineHeight.normal,\r\n color: tokens.colors.text.primary,\r\n }}\r\n >\r\n {children ?? message}\r\n </div>\r\n\r\n {/* Close button */}\r\n {closeable && (\r\n <button\r\n onClick={handleClose}\r\n aria-label=\"Close notification\"\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n width: 24,\r\n height: 24,\r\n padding: 0,\r\n background: \"transparent\",\r\n border: \"none\",\r\n borderRadius: tokens.borderRadius.sm,\r\n color: tokens.colors.text.secondary,\r\n cursor: \"pointer\",\r\n transition: tokens.animation.fast,\r\n flexShrink: 0,\r\n }}\r\n >\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"16\" height=\"16\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n </svg>\r\n </button>\r\n )}\r\n\r\n {/* Animations — respects prefers-reduced-motion (WCAG 2.3.3) */}\r\n <style>{`\r\n @keyframes notificationEnter {\r\n from {\r\n opacity: 0;\r\n transform: translateX(20px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateX(0);\r\n }\r\n }\r\n @keyframes notificationExit {\r\n from {\r\n opacity: 1;\r\n transform: translateX(0);\r\n }\r\n to {\r\n opacity: 0;\r\n transform: translateX(20px);\r\n }\r\n }\r\n @media (prefers-reduced-motion: reduce) {\r\n .zendir-notification {\r\n animation: none !important;\r\n }\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n});\r\n"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import { default as React } from 'react';
2
2
  import { StatusLevel } from '../utils';
3
-
4
3
  export interface ProgressProps {
5
4
  /** Current value (0-max) */
6
5
  value?: number;
@@ -1,149 +1,207 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { memo } from "react";
3
1
  import { useTheme } from "../theme/ThemeProvider.js";
4
- import { formatPercentage, classNames } from "../utils/index.js";
5
- function ProgressStatusShape({
6
- status,
7
- color,
8
- size = 10
9
- }) {
10
- const glow = `${color}50`;
11
- switch (status) {
12
- case "caution":
13
- return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("rect", { x: "1", y: "1", width: "10", height: "10", fill: color }) });
14
- case "serious":
15
- return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("polygon", { points: "6,1 11,6 6,11 1,6", fill: color }) });
16
- case "critical":
17
- return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("polygon", { points: "6,11 1,2 11,2", fill: color }) });
18
- case "standby":
19
- return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "3.5", fill: "none", stroke: color, strokeWidth: "2" }) });
20
- case "off":
21
- return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "3", fill: color }) });
22
- case "normal":
23
- default:
24
- return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "5", fill: color }) });
25
- }
2
+ import { classNames, formatPercentage } from "../utils/index.js";
3
+ import { memo } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/react/astro/Progress.tsx
6
+ /**
7
+ * @zendir/ui - Progress Component (Pure React)
8
+ *
9
+ * Progress bar following Astro UX Design System patterns.
10
+ *
11
+ * Features:
12
+ * - Theme-integrated via useTheme()
13
+ * - Determinate and indeterminate modes
14
+ * - Optional label and value display
15
+ * - Status-based coloring
16
+ * - Smooth animations
17
+ * - Accessible (progress role with aria attributes)
18
+ */
19
+ /** Astro UX status shape per official spec: filled circle (normal), ring (standby), small circle (off), square (caution), diamond (serious), triangle (critical) */
20
+ function ProgressStatusShape({ status, color, size = 10 }) {
21
+ const glow = `${color}50`;
22
+ switch (status) {
23
+ case "caution": return /* @__PURE__ */ jsx("svg", {
24
+ viewBox: "0 0 12 12",
25
+ width: size,
26
+ height: size,
27
+ style: { filter: `drop-shadow(0 0 3px ${glow})` },
28
+ children: /* @__PURE__ */ jsx("rect", {
29
+ x: "1",
30
+ y: "1",
31
+ width: "10",
32
+ height: "10",
33
+ fill: color
34
+ })
35
+ });
36
+ case "serious": return /* @__PURE__ */ jsx("svg", {
37
+ viewBox: "0 0 12 12",
38
+ width: size,
39
+ height: size,
40
+ style: { filter: `drop-shadow(0 0 3px ${glow})` },
41
+ children: /* @__PURE__ */ jsx("polygon", {
42
+ points: "6,1 11,6 6,11 1,6",
43
+ fill: color
44
+ })
45
+ });
46
+ case "critical": return /* @__PURE__ */ jsx("svg", {
47
+ viewBox: "0 0 12 12",
48
+ width: size,
49
+ height: size,
50
+ style: { filter: `drop-shadow(0 0 3px ${glow})` },
51
+ children: /* @__PURE__ */ jsx("polygon", {
52
+ points: "6,11 1,2 11,2",
53
+ fill: color
54
+ })
55
+ });
56
+ case "standby": return /* @__PURE__ */ jsx("svg", {
57
+ viewBox: "0 0 12 12",
58
+ width: size,
59
+ height: size,
60
+ style: { filter: `drop-shadow(0 0 3px ${glow})` },
61
+ children: /* @__PURE__ */ jsx("circle", {
62
+ cx: "6",
63
+ cy: "6",
64
+ r: "3.5",
65
+ fill: "none",
66
+ stroke: color,
67
+ strokeWidth: "2"
68
+ })
69
+ });
70
+ case "off": return /* @__PURE__ */ jsx("svg", {
71
+ viewBox: "0 0 12 12",
72
+ width: size,
73
+ height: size,
74
+ style: { filter: `drop-shadow(0 0 3px ${glow})` },
75
+ children: /* @__PURE__ */ jsx("circle", {
76
+ cx: "6",
77
+ cy: "6",
78
+ r: "3",
79
+ fill: color
80
+ })
81
+ });
82
+ default: return /* @__PURE__ */ jsx("svg", {
83
+ viewBox: "0 0 12 12",
84
+ width: size,
85
+ height: size,
86
+ style: { filter: `drop-shadow(0 0 3px ${glow})` },
87
+ children: /* @__PURE__ */ jsx("circle", {
88
+ cx: "6",
89
+ cy: "6",
90
+ r: "5",
91
+ fill: color
92
+ })
93
+ });
94
+ }
26
95
  }
27
- const Progress = memo(function Progress2({
28
- value,
29
- max = 100,
30
- hideLabel = false,
31
- showValue = false,
32
- status,
33
- indeterminate = false,
34
- height = 8,
35
- label,
36
- showStatusIcon = true,
37
- className = ""
38
- }) {
39
- const { tokens } = useTheme();
40
- const percentage = value !== void 0 ? Math.min(100, Math.max(0, value / max * 100)) : 0;
41
- const effectiveStatus = status ?? (percentage >= 75 ? "normal" : percentage >= 50 ? "standby" : percentage >= 25 ? "caution" : percentage > 0 ? "serious" : "off");
42
- const color = tokens.colors.status[effectiveStatus];
43
- const displayLabel = label ?? (showValue && value !== void 0 ? `${value}/${max}` : formatPercentage(percentage, false, 0));
44
- const iconSize = Math.max(10, height + 2);
45
- return /* @__PURE__ */ jsxs(
46
- "div",
47
- {
48
- className: classNames("zendir-progress", className),
49
- role: "progressbar",
50
- "aria-valuenow": indeterminate ? void 0 : value,
51
- "aria-valuemin": 0,
52
- "aria-valuemax": max,
53
- "aria-label": label ?? `Progress: ${percentage.toFixed(0)}%`,
54
- style: {
55
- display: "flex",
56
- flexDirection: "column",
57
- gap: tokens.spacing.xs,
58
- width: "100%"
59
- },
60
- children: [
61
- !hideLabel && /* @__PURE__ */ jsxs(
62
- "div",
63
- {
64
- style: {
65
- display: "flex",
66
- justifyContent: "space-between",
67
- alignItems: "center",
68
- fontSize: tokens.typography.fontSize.sm,
69
- fontWeight: tokens.typography.fontWeight.medium,
70
- color: tokens.colors.text.secondary
71
- },
72
- children: [
73
- label && /* @__PURE__ */ jsx("span", { style: { color: tokens.colors.text.secondary }, children: label }),
74
- /* @__PURE__ */ jsx(
75
- "span",
76
- {
77
- style: {
78
- marginLeft: "auto",
79
- fontVariantNumeric: "tabular-nums",
80
- color: tokens.colors.text.primary
81
- },
82
- children: !indeterminate && displayLabel
83
- }
84
- )
85
- ]
86
- }
87
- ),
88
- /* @__PURE__ */ jsxs("div", { style: { position: "relative", width: "100%" }, children: [
89
- /* @__PURE__ */ jsx(
90
- "div",
91
- {
92
- style: {
93
- position: "relative",
94
- width: "100%",
95
- height,
96
- backgroundColor: tokens.colors.border.muted,
97
- borderRadius: height / 2,
98
- overflow: "hidden"
99
- },
100
- children: /* @__PURE__ */ jsx(
101
- "div",
102
- {
103
- style: {
104
- position: "absolute",
105
- top: 0,
106
- left: 0,
107
- height: "100%",
108
- width: indeterminate ? "30%" : `${percentage}%`,
109
- backgroundColor: color,
110
- borderRadius: height / 2,
111
- transition: indeterminate ? "none" : "width 300ms ease-out",
112
- animation: indeterminate ? "progressIndeterminate 1.5s ease-in-out infinite" : "none",
113
- boxShadow: `0 0 ${height}px ${color}40`
114
- }
115
- }
116
- )
117
- }
118
- ),
119
- showStatusIcon && !indeterminate && /* @__PURE__ */ jsx(
120
- "div",
121
- {
122
- style: {
123
- position: "absolute",
124
- top: height + 4,
125
- left: `${percentage}%`,
126
- transform: "translateX(-50%)",
127
- lineHeight: 0,
128
- transition: "left 300ms ease-out"
129
- },
130
- "aria-hidden": "true",
131
- children: /* @__PURE__ */ jsx(ProgressStatusShape, { status: effectiveStatus, color, size: iconSize })
132
- }
133
- )
134
- ] }),
135
- showStatusIcon && !indeterminate && /* @__PURE__ */ jsx("div", { style: { height: iconSize + 2 } }),
136
- /* @__PURE__ */ jsx("style", { children: `
96
+ /**
97
+ * Progress - Pure React progress bar component
98
+ *
99
+ * Displays progress with visual bar and optional label.
100
+ *
101
+ * @example
102
+ * ```tsx
103
+ * <Progress value={85} />
104
+ * <Progress value={42} max={50} hideLabel />
105
+ * <Progress indeterminate label="Loading..." />
106
+ * <Progress value={25} status="caution" />
107
+ * ```
108
+ */
109
+ var Progress = memo(function Progress({ value, max = 100, hideLabel = false, showValue = false, status, indeterminate = false, height = 8, label, showStatusIcon = true, className = "" }) {
110
+ const { tokens } = useTheme();
111
+ const percentage = value !== void 0 ? Math.min(100, Math.max(0, value / max * 100)) : 0;
112
+ const effectiveStatus = status ?? (percentage >= 75 ? "normal" : percentage >= 50 ? "standby" : percentage >= 25 ? "caution" : percentage > 0 ? "serious" : "off");
113
+ const color = tokens.colors.status[effectiveStatus];
114
+ const displayLabel = label ?? (showValue && value !== void 0 ? `${value}/${max}` : formatPercentage(percentage, false, 0));
115
+ const iconSize = Math.max(10, height + 2);
116
+ return /* @__PURE__ */ jsxs("div", {
117
+ className: classNames("zendir-progress", className),
118
+ role: "progressbar",
119
+ "aria-valuenow": indeterminate ? void 0 : value,
120
+ "aria-valuemin": 0,
121
+ "aria-valuemax": max,
122
+ "aria-label": label ?? `Progress: ${percentage.toFixed(0)}%`,
123
+ style: {
124
+ display: "flex",
125
+ flexDirection: "column",
126
+ gap: tokens.spacing.xs,
127
+ width: "100%"
128
+ },
129
+ children: [
130
+ !hideLabel && /* @__PURE__ */ jsxs("div", {
131
+ style: {
132
+ display: "flex",
133
+ justifyContent: "space-between",
134
+ alignItems: "center",
135
+ fontSize: tokens.typography.fontSize.sm,
136
+ fontWeight: tokens.typography.fontWeight.medium,
137
+ color: tokens.colors.text.secondary
138
+ },
139
+ children: [label && /* @__PURE__ */ jsx("span", {
140
+ style: { color: tokens.colors.text.secondary },
141
+ children: label
142
+ }), /* @__PURE__ */ jsx("span", {
143
+ style: {
144
+ marginLeft: "auto",
145
+ fontVariantNumeric: "tabular-nums",
146
+ color: tokens.colors.text.primary
147
+ },
148
+ children: !indeterminate && displayLabel
149
+ })]
150
+ }),
151
+ /* @__PURE__ */ jsxs("div", {
152
+ style: {
153
+ position: "relative",
154
+ width: "100%"
155
+ },
156
+ children: [/* @__PURE__ */ jsx("div", {
157
+ style: {
158
+ position: "relative",
159
+ width: "100%",
160
+ height,
161
+ backgroundColor: tokens.colors.border.muted,
162
+ borderRadius: height / 2,
163
+ overflow: "hidden"
164
+ },
165
+ children: /* @__PURE__ */ jsx("div", { style: {
166
+ position: "absolute",
167
+ top: 0,
168
+ left: 0,
169
+ height: "100%",
170
+ width: indeterminate ? "30%" : `${percentage}%`,
171
+ backgroundColor: color,
172
+ borderRadius: height / 2,
173
+ transition: indeterminate ? "none" : "width 300ms ease-out",
174
+ animation: indeterminate ? "progressIndeterminate 1.5s ease-in-out infinite" : "none",
175
+ boxShadow: `0 0 ${height}px ${color}40`
176
+ } })
177
+ }), showStatusIcon && !indeterminate && /* @__PURE__ */ jsx("div", {
178
+ style: {
179
+ position: "absolute",
180
+ top: height + 4,
181
+ left: `${percentage}%`,
182
+ transform: "translateX(-50%)",
183
+ lineHeight: 0,
184
+ transition: "left 300ms ease-out"
185
+ },
186
+ "aria-hidden": "true",
187
+ children: /* @__PURE__ */ jsx(ProgressStatusShape, {
188
+ status: effectiveStatus,
189
+ color,
190
+ size: iconSize
191
+ })
192
+ })]
193
+ }),
194
+ showStatusIcon && !indeterminate && /* @__PURE__ */ jsx("div", { style: { height: iconSize + 2 } }),
195
+ /* @__PURE__ */ jsx("style", { children: `
137
196
  @keyframes progressIndeterminate {
138
197
  0% { left: -30%; }
139
198
  100% { left: 100%; }
140
199
  }
141
200
  ` })
142
- ]
143
- }
144
- );
201
+ ]
202
+ });
145
203
  });
146
- export {
147
- Progress
148
- };
149
- //# sourceMappingURL=Progress.js.map
204
+ //#endregion
205
+ export { Progress };
206
+
207
+ //# sourceMappingURL=Progress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Progress.js","sources":["../../../src/react/astro/Progress.tsx"],"sourcesContent":["/**\n * @zendir/ui - Progress Component (Pure React)\n * \n * Progress bar following Astro UX Design System patterns.\n * \n * Features:\n * - Theme-integrated via useTheme()\n * - Determinate and indeterminate modes\n * - Optional label and value display\n * - Status-based coloring\n * - Smooth animations\n * - Accessible (progress role with aria attributes)\n */\n\nimport React, { memo } from 'react';\nimport { useTheme } from '../theme';\nimport { classNames, type StatusLevel, formatPercentage } from '../utils';\n\n/** Astro UX status shape per official spec: filled circle (normal), ring (standby), small circle (off), square (caution), diamond (serious), triangle (critical) */\nfunction ProgressStatusShape({\n status,\n color,\n size = 10,\n}: {\n status: StatusLevel;\n color: string;\n size?: number;\n}): React.ReactElement {\n const glow = `${color}50`;\n\n switch (status) {\n case 'caution':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <rect x=\"1\" y=\"1\" width=\"10\" height=\"10\" fill={color} />\n </svg>\n );\n case 'serious':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <polygon points=\"6,1 11,6 6,11 1,6\" fill={color} />\n </svg>\n );\n case 'critical':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <polygon points=\"6,11 1,2 11,2\" fill={color} />\n </svg>\n );\n case 'standby':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <circle cx=\"6\" cy=\"6\" r=\"3.5\" fill=\"none\" stroke={color} strokeWidth=\"2\" />\n </svg>\n );\n case 'off':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <circle cx=\"6\" cy=\"6\" r=\"3\" fill={color} />\n </svg>\n );\n case 'normal':\n default:\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <circle cx=\"6\" cy=\"6\" r=\"5\" fill={color} />\n </svg>\n );\n }\n}\n\nexport interface ProgressProps {\n /** Current value (0-max) */\n value?: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Hide the percentage label */\n hideLabel?: boolean;\n /** Show value as label instead of percentage */\n showValue?: boolean;\n /** Status-based coloring (overrides default) */\n status?: StatusLevel;\n /** Indeterminate mode (animated, no value) */\n indeterminate?: boolean;\n /** Height of the progress bar */\n height?: number;\n /** Custom label */\n label?: string;\n /** Show Astro UX status shape icon beneath the bar at the fill position (default: true) */\n showStatusIcon?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Progress - Pure React progress bar component\n * \n * Displays progress with visual bar and optional label.\n * \n * @example\n * ```tsx\n * <Progress value={85} />\n * <Progress value={42} max={50} hideLabel />\n * <Progress indeterminate label=\"Loading...\" />\n * <Progress value={25} status=\"caution\" />\n * ```\n */\nexport const Progress = memo(function Progress({\n value,\n max = 100,\n hideLabel = false,\n showValue = false,\n status,\n indeterminate = false,\n height = 8,\n label,\n showStatusIcon = true,\n className = '',\n}: ProgressProps): React.ReactElement {\n const { tokens } = useTheme();\n const percentage = value !== undefined ? Math.min(100, Math.max(0, (value / max) * 100)) : 0;\n \n // Auto-determine status based on value if not provided\n const effectiveStatus: StatusLevel = status ?? (\n percentage >= 75 ? 'normal' :\n percentage >= 50 ? 'standby' :\n percentage >= 25 ? 'caution' :\n percentage > 0 ? 'serious' : 'off'\n );\n \n // Get color from theme\n const color = tokens.colors.status[effectiveStatus];\n \n const displayLabel = label ?? (\n showValue && value !== undefined\n ? `${value}/${max}`\n : formatPercentage(percentage, false, 0)\n );\n\n const iconSize = Math.max(10, height + 2);\n\n return (\n <div\n className={classNames('zendir-progress', className)}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={label ?? `Progress: ${percentage.toFixed(0)}%`}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: tokens.spacing.xs,\n width: '100%',\n }}\n >\n {/* Label row */}\n {!hideLabel && (\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n fontSize: tokens.typography.fontSize.sm,\n fontWeight: tokens.typography.fontWeight.medium,\n color: tokens.colors.text.secondary,\n }}\n >\n {label && <span style={{ color: tokens.colors.text.secondary }}>{label}</span>}\n <span\n style={{\n marginLeft: 'auto',\n fontVariantNumeric: 'tabular-nums',\n color: tokens.colors.text.primary,\n }}\n >\n {!indeterminate && displayLabel}\n </span>\n </div>\n )}\n\n {/* Progress track (relative wrapper for icon positioning) */}\n <div style={{ position: 'relative', width: '100%' }}>\n <div\n style={{\n position: 'relative',\n width: '100%',\n height,\n backgroundColor: tokens.colors.border.muted,\n borderRadius: height / 2,\n overflow: 'hidden',\n }}\n >\n {/* Progress fill */}\n <div\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n height: '100%',\n width: indeterminate ? '30%' : `${percentage}%`,\n backgroundColor: color,\n borderRadius: height / 2,\n transition: indeterminate ? 'none' : 'width 300ms ease-out',\n animation: indeterminate ? 'progressIndeterminate 1.5s ease-in-out infinite' : 'none',\n boxShadow: `0 0 ${height}px ${color}40`,\n }}\n />\n </div>\n\n {/* Status shape icon positioned beneath the fill edge */}\n {showStatusIcon && !indeterminate && (\n <div\n style={{\n position: 'absolute',\n top: height + 4,\n left: `${percentage}%`,\n transform: 'translateX(-50%)',\n lineHeight: 0,\n transition: 'left 300ms ease-out',\n }}\n aria-hidden=\"true\"\n >\n <ProgressStatusShape status={effectiveStatus} color={color} size={iconSize} />\n </div>\n )}\n </div>\n\n {/* Reserve space for the icon so it doesn't overlap content below */}\n {showStatusIcon && !indeterminate && (\n <div style={{ height: iconSize + 2 }} />\n )}\n\n {/* Keyframe animation for indeterminate */}\n <style>{`\n @keyframes progressIndeterminate {\n 0% { left: -30%; }\n 100% { left: 100%; }\n }\n `}</style>\n </div>\n );\n});\n"],"names":["Progress"],"mappings":";;;;AAmBA,SAAS,oBAAoB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,OAAO;AACT,GAIuB;AACrB,QAAM,OAAO,GAAG,KAAK;AAErB,UAAQ,QAAA;AAAA,IACN,KAAK;AACH,aACE,oBAAC,OAAA,EAAI,SAAQ,aAAY,OAAO,MAAM,QAAQ,MAAM,OAAO,EAAE,QAAQ,uBAAuB,IAAI,IAAA,GAC9F,UAAA,oBAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MAAK,MAAM,MAAA,CAAO,GACxD;AAAA,IAEJ,KAAK;AACH,aACE,oBAAC,SAAI,SAAQ,aAAY,OAAO,MAAM,QAAQ,MAAM,OAAO,EAAE,QAAQ,uBAAuB,IAAI,OAC9F,UAAA,oBAAC,aAAQ,QAAO,qBAAoB,MAAM,MAAA,CAAO,EAAA,CACnD;AAAA,IAEJ,KAAK;AACH,aACE,oBAAC,SAAI,SAAQ,aAAY,OAAO,MAAM,QAAQ,MAAM,OAAO,EAAE,QAAQ,uBAAuB,IAAI,OAC9F,UAAA,oBAAC,aAAQ,QAAO,iBAAgB,MAAM,MAAA,CAAO,EAAA,CAC/C;AAAA,IAEJ,KAAK;AACH,aACE,oBAAC,OAAA,EAAI,SAAQ,aAAY,OAAO,MAAM,QAAQ,MAAM,OAAO,EAAE,QAAQ,uBAAuB,IAAI,IAAA,GAC9F,UAAA,oBAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,OAAM,MAAK,QAAO,QAAQ,OAAO,aAAY,KAAI,GAC3E;AAAA,IAEJ,KAAK;AACH,aACE,oBAAC,OAAA,EAAI,SAAQ,aAAY,OAAO,MAAM,QAAQ,MAAM,OAAO,EAAE,QAAQ,uBAAuB,IAAI,IAAA,GAC9F,UAAA,oBAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,KAAI,MAAM,MAAA,CAAO,EAAA,CAC3C;AAAA,IAEJ,KAAK;AAAA,IACL;AACE,aACE,oBAAC,OAAA,EAAI,SAAQ,aAAY,OAAO,MAAM,QAAQ,MAAM,OAAO,EAAE,QAAQ,uBAAuB,IAAI,IAAA,GAC9F,UAAA,oBAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,KAAI,MAAM,MAAA,CAAO,EAAA,CAC3C;AAAA,EAAA;AAGR;AAsCO,MAAM,WAAW,KAAK,SAASA,UAAS;AAAA,EAC7C;AAAA,EACA,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ;AAAA,EACA,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,EACjB,YAAY;AACd,GAAsC;AACpC,QAAM,EAAE,OAAA,IAAW,SAAA;AACnB,QAAM,aAAa,UAAU,SAAY,KAAK,IAAI,KAAK,KAAK,IAAI,GAAI,QAAQ,MAAO,GAAG,CAAC,IAAI;AAG3F,QAAM,kBAA+B,WACnC,cAAc,KAAK,WACnB,cAAc,KAAK,YACnB,cAAc,KAAK,YACnB,aAAa,IAAI,YAAY;AAI/B,QAAM,QAAQ,OAAO,OAAO,OAAO,eAAe;AAElD,QAAM,eAAe,UACnB,aAAa,UAAU,SACnB,GAAG,KAAK,IAAI,GAAG,KACf,iBAAiB,YAAY,OAAO,CAAC;AAG3C,QAAM,WAAW,KAAK,IAAI,IAAI,SAAS,CAAC;AAExC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,mBAAmB,SAAS;AAAA,MAClD,MAAK;AAAA,MACL,iBAAe,gBAAgB,SAAY;AAAA,MAC3C,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,cAAY,SAAS,aAAa,WAAW,QAAQ,CAAC,CAAC;AAAA,MACvD,OAAO;AAAA,QACL,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK,OAAO,QAAQ;AAAA,QACpB,OAAO;AAAA,MAAA;AAAA,MAIR,UAAA;AAAA,QAAA,CAAC,aACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,YAAY;AAAA,cACZ,UAAU,OAAO,WAAW,SAAS;AAAA,cACrC,YAAY,OAAO,WAAW,WAAW;AAAA,cACzC,OAAO,OAAO,OAAO,KAAK;AAAA,YAAA;AAAA,YAG3B,UAAA;AAAA,cAAA,SAAS,oBAAC,QAAA,EAAK,OAAO,EAAE,OAAO,OAAO,OAAO,KAAK,UAAA,GAAc,UAAA,MAAA,CAAM;AAAA,cACvE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,YAAY;AAAA,oBACZ,oBAAoB;AAAA,oBACpB,OAAO,OAAO,OAAO,KAAK;AAAA,kBAAA;AAAA,kBAG3B,WAAC,iBAAiB;AAAA,gBAAA;AAAA,cAAA;AAAA,YACrB;AAAA,UAAA;AAAA,QAAA;AAAA,QAKJ,qBAAC,SAAI,OAAO,EAAE,UAAU,YAAY,OAAO,UACzC,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,OAAO;AAAA,gBACP;AAAA,gBACA,iBAAiB,OAAO,OAAO,OAAO;AAAA,gBACtC,cAAc,SAAS;AAAA,gBACvB,UAAU;AAAA,cAAA;AAAA,cAIZ,UAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,UAAU;AAAA,oBACV,KAAK;AAAA,oBACL,MAAM;AAAA,oBACN,QAAQ;AAAA,oBACR,OAAO,gBAAgB,QAAQ,GAAG,UAAU;AAAA,oBAC5C,iBAAiB;AAAA,oBACjB,cAAc,SAAS;AAAA,oBACvB,YAAY,gBAAgB,SAAS;AAAA,oBACrC,WAAW,gBAAgB,oDAAoD;AAAA,oBAC/E,WAAW,OAAO,MAAM,MAAM,KAAK;AAAA,kBAAA;AAAA,gBACrC;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,UAID,kBAAkB,CAAC,iBAClB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,KAAK,SAAS;AAAA,gBACd,MAAM,GAAG,UAAU;AAAA,gBACnB,WAAW;AAAA,gBACX,YAAY;AAAA,gBACZ,YAAY;AAAA,cAAA;AAAA,cAEd,eAAY;AAAA,cAEZ,8BAAC,qBAAA,EAAoB,QAAQ,iBAAiB,OAAc,MAAM,SAAA,CAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QAC9E,GAEJ;AAAA,QAGC,kBAAkB,CAAC,iBAClB,oBAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,WAAW,EAAA,GAAK;AAAA,4BAIvC,SAAA,EAAO,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAKN;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGR,CAAC;"}
1
+ {"version":3,"file":"Progress.js","names":[],"sources":["../../../src/react/astro/Progress.tsx"],"sourcesContent":["/**\r\n * @zendir/ui - Progress Component (Pure React)\r\n *\r\n * Progress bar following Astro UX Design System patterns.\r\n *\r\n * Features:\r\n * - Theme-integrated via useTheme()\r\n * - Determinate and indeterminate modes\r\n * - Optional label and value display\r\n * - Status-based coloring\r\n * - Smooth animations\r\n * - Accessible (progress role with aria attributes)\r\n */\r\n\r\nimport React, { memo } from \"react\";\r\nimport { useTheme } from \"../theme\";\r\nimport { classNames, type StatusLevel, formatPercentage } from \"../utils\";\r\n\r\n/** Astro UX status shape per official spec: filled circle (normal), ring (standby), small circle (off), square (caution), diamond (serious), triangle (critical) */\r\nfunction ProgressStatusShape({\r\n status,\r\n color,\r\n size = 10,\r\n}: {\r\n status: StatusLevel;\r\n color: string;\r\n size?: number;\r\n}): React.ReactElement {\r\n const glow = `${color}50`;\r\n\r\n switch (status) {\r\n case \"caution\":\r\n return (\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n width={size}\r\n height={size}\r\n style={{ filter: `drop-shadow(0 0 3px ${glow})` }}\r\n >\r\n <rect x=\"1\" y=\"1\" width=\"10\" height=\"10\" fill={color} />\r\n </svg>\r\n );\r\n case \"serious\":\r\n return (\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n width={size}\r\n height={size}\r\n style={{ filter: `drop-shadow(0 0 3px ${glow})` }}\r\n >\r\n <polygon points=\"6,1 11,6 6,11 1,6\" fill={color} />\r\n </svg>\r\n );\r\n case \"critical\":\r\n return (\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n width={size}\r\n height={size}\r\n style={{ filter: `drop-shadow(0 0 3px ${glow})` }}\r\n >\r\n <polygon points=\"6,11 1,2 11,2\" fill={color} />\r\n </svg>\r\n );\r\n case \"standby\":\r\n return (\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n width={size}\r\n height={size}\r\n style={{ filter: `drop-shadow(0 0 3px ${glow})` }}\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3.5\"\r\n fill=\"none\"\r\n stroke={color}\r\n strokeWidth=\"2\"\r\n />\r\n </svg>\r\n );\r\n case \"off\":\r\n return (\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n width={size}\r\n height={size}\r\n style={{ filter: `drop-shadow(0 0 3px ${glow})` }}\r\n >\r\n <circle cx=\"6\" cy=\"6\" r=\"3\" fill={color} />\r\n </svg>\r\n );\r\n case \"normal\":\r\n default:\r\n return (\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n width={size}\r\n height={size}\r\n style={{ filter: `drop-shadow(0 0 3px ${glow})` }}\r\n >\r\n <circle cx=\"6\" cy=\"6\" r=\"5\" fill={color} />\r\n </svg>\r\n );\r\n }\r\n}\r\n\r\nexport interface ProgressProps {\r\n /** Current value (0-max) */\r\n value?: number;\r\n /** Maximum value (default: 100) */\r\n max?: number;\r\n /** Hide the percentage label */\r\n hideLabel?: boolean;\r\n /** Show value as label instead of percentage */\r\n showValue?: boolean;\r\n /** Status-based coloring (overrides default) */\r\n status?: StatusLevel;\r\n /** Indeterminate mode (animated, no value) */\r\n indeterminate?: boolean;\r\n /** Height of the progress bar */\r\n height?: number;\r\n /** Custom label */\r\n label?: string;\r\n /** Show Astro UX status shape icon beneath the bar at the fill position (default: true) */\r\n showStatusIcon?: boolean;\r\n /** Custom className */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Progress - Pure React progress bar component\r\n *\r\n * Displays progress with visual bar and optional label.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Progress value={85} />\r\n * <Progress value={42} max={50} hideLabel />\r\n * <Progress indeterminate label=\"Loading...\" />\r\n * <Progress value={25} status=\"caution\" />\r\n * ```\r\n */\r\nexport const Progress = memo(function Progress({\r\n value,\r\n max = 100,\r\n hideLabel = false,\r\n showValue = false,\r\n status,\r\n indeterminate = false,\r\n height = 8,\r\n label,\r\n showStatusIcon = true,\r\n className = \"\",\r\n}: ProgressProps): React.ReactElement {\r\n const { tokens } = useTheme();\r\n const percentage =\r\n value !== undefined ? Math.min(100, Math.max(0, (value / max) * 100)) : 0;\r\n\r\n // Auto-determine status based on value if not provided\r\n const effectiveStatus: StatusLevel =\r\n status ??\r\n (percentage >= 75\r\n ? \"normal\"\r\n : percentage >= 50\r\n ? \"standby\"\r\n : percentage >= 25\r\n ? \"caution\"\r\n : percentage > 0\r\n ? \"serious\"\r\n : \"off\");\r\n\r\n // Get color from theme\r\n const color = tokens.colors.status[effectiveStatus];\r\n\r\n const displayLabel =\r\n label ??\r\n (showValue && value !== undefined\r\n ? `${value}/${max}`\r\n : formatPercentage(percentage, false, 0));\r\n\r\n const iconSize = Math.max(10, height + 2);\r\n\r\n return (\r\n <div\r\n className={classNames(\"zendir-progress\", className)}\r\n role=\"progressbar\"\r\n aria-valuenow={indeterminate ? undefined : value}\r\n aria-valuemin={0}\r\n aria-valuemax={max}\r\n aria-label={label ?? `Progress: ${percentage.toFixed(0)}%`}\r\n style={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: tokens.spacing.xs,\r\n width: \"100%\",\r\n }}\r\n >\r\n {/* Label row */}\r\n {!hideLabel && (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n fontSize: tokens.typography.fontSize.sm,\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.colors.text.secondary,\r\n }}\r\n >\r\n {label && (\r\n <span style={{ color: tokens.colors.text.secondary }}>{label}</span>\r\n )}\r\n <span\r\n style={{\r\n marginLeft: \"auto\",\r\n fontVariantNumeric: \"tabular-nums\",\r\n color: tokens.colors.text.primary,\r\n }}\r\n >\r\n {!indeterminate && displayLabel}\r\n </span>\r\n </div>\r\n )}\r\n\r\n {/* Progress track (relative wrapper for icon positioning) */}\r\n <div style={{ position: \"relative\", width: \"100%\" }}>\r\n <div\r\n style={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n height,\r\n backgroundColor: tokens.colors.border.muted,\r\n borderRadius: height / 2,\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {/* Progress fill */}\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n height: \"100%\",\r\n width: indeterminate ? \"30%\" : `${percentage}%`,\r\n backgroundColor: color,\r\n borderRadius: height / 2,\r\n transition: indeterminate ? \"none\" : \"width 300ms ease-out\",\r\n animation: indeterminate\r\n ? \"progressIndeterminate 1.5s ease-in-out infinite\"\r\n : \"none\",\r\n boxShadow: `0 0 ${height}px ${color}40`,\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Status shape icon positioned beneath the fill edge */}\r\n {showStatusIcon && !indeterminate && (\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n top: height + 4,\r\n left: `${percentage}%`,\r\n transform: \"translateX(-50%)\",\r\n lineHeight: 0,\r\n transition: \"left 300ms ease-out\",\r\n }}\r\n aria-hidden=\"true\"\r\n >\r\n <ProgressStatusShape\r\n status={effectiveStatus}\r\n color={color}\r\n size={iconSize}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Reserve space for the icon so it doesn't overlap content below */}\r\n {showStatusIcon && !indeterminate && (\r\n <div style={{ height: iconSize + 2 }} />\r\n )}\r\n\r\n {/* Keyframe animation for indeterminate */}\r\n <style>{`\r\n @keyframes progressIndeterminate {\r\n 0% { left: -30%; }\r\n 100% { left: 100%; }\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n});\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,SAAS,oBAAoB,EAC3B,QACA,OACA,OAAO,MAKc;CACrB,MAAM,OAAO,GAAG,MAAM;CAEtB,QAAQ,QAAR;EACE,KAAK,WACH,OACE,oBAAC,OAAD;GACE,SAAQ;GACR,OAAO;GACP,QAAQ;GACR,OAAO,EAAE,QAAQ,uBAAuB,KAAK,GAAG;aAEhD,oBAAC,QAAD;IAAM,GAAE;IAAI,GAAE;IAAI,OAAM;IAAK,QAAO;IAAK,MAAM;GAAQ,CAAA;EACpD,CAAA;EAET,KAAK,WACH,OACE,oBAAC,OAAD;GACE,SAAQ;GACR,OAAO;GACP,QAAQ;GACR,OAAO,EAAE,QAAQ,uBAAuB,KAAK,GAAG;aAEhD,oBAAC,WAAD;IAAS,QAAO;IAAoB,MAAM;GAAQ,CAAA;EAC/C,CAAA;EAET,KAAK,YACH,OACE,oBAAC,OAAD;GACE,SAAQ;GACR,OAAO;GACP,QAAQ;GACR,OAAO,EAAE,QAAQ,uBAAuB,KAAK,GAAG;aAEhD,oBAAC,WAAD;IAAS,QAAO;IAAgB,MAAM;GAAQ,CAAA;EAC3C,CAAA;EAET,KAAK,WACH,OACE,oBAAC,OAAD;GACE,SAAQ;GACR,OAAO;GACP,QAAQ;GACR,OAAO,EAAE,QAAQ,uBAAuB,KAAK,GAAG;aAEhD,oBAAC,UAAD;IACE,IAAG;IACH,IAAG;IACH,GAAE;IACF,MAAK;IACL,QAAQ;IACR,aAAY;GACb,CAAA;EACE,CAAA;EAET,KAAK,OACH,OACE,oBAAC,OAAD;GACE,SAAQ;GACR,OAAO;GACP,QAAQ;GACR,OAAO,EAAE,QAAQ,uBAAuB,KAAK,GAAG;aAEhD,oBAAC,UAAD;IAAQ,IAAG;IAAI,IAAG;IAAI,GAAE;IAAI,MAAM;GAAQ,CAAA;EACvC,CAAA;EAGT,SACE,OACE,oBAAC,OAAD;GACE,SAAQ;GACR,OAAO;GACP,QAAQ;GACR,OAAO,EAAE,QAAQ,uBAAuB,KAAK,GAAG;aAEhD,oBAAC,UAAD;IAAQ,IAAG;IAAI,IAAG;IAAI,GAAE;IAAI,MAAM;GAAQ,CAAA;EACvC,CAAA;CAEX;AACF;;;;;;;;;;;;;;AAsCA,IAAa,WAAW,KAAK,SAAS,SAAS,EAC7C,OACA,MAAM,KACN,YAAY,OACZ,YAAY,OACZ,QACA,gBAAgB,OAChB,SAAS,GACT,OACA,iBAAiB,MACjB,YAAY,MACwB;CACpC,MAAM,EAAE,WAAW,SAAS;CAC5B,MAAM,aACJ,UAAU,KAAA,IAAY,KAAK,IAAI,KAAK,KAAK,IAAI,GAAI,QAAQ,MAAO,GAAG,CAAC,IAAI;CAG1E,MAAM,kBACJ,WACC,cAAc,KACX,WACA,cAAc,KACZ,YACA,cAAc,KACZ,YACA,aAAa,IACX,YACA;CAGZ,MAAM,QAAQ,OAAO,OAAO,OAAO;CAEnC,MAAM,eACJ,UACC,aAAa,UAAU,KAAA,IACpB,GAAG,MAAM,GAAG,QACZ,iBAAiB,YAAY,OAAO,CAAC;CAE3C,MAAM,WAAW,KAAK,IAAI,IAAI,SAAS,CAAC;CAExC,OACE,qBAAC,OAAD;EACE,WAAW,WAAW,mBAAmB,SAAS;EAClD,MAAK;EACL,iBAAe,gBAAgB,KAAA,IAAY;EAC3C,iBAAe;EACf,iBAAe;EACf,cAAY,SAAS,aAAa,WAAW,QAAQ,CAAC,EAAE;EACxD,OAAO;GACL,SAAS;GACT,eAAe;GACf,KAAK,OAAO,QAAQ;GACpB,OAAO;EACT;YAZF;GAeG,CAAC,aACA,qBAAC,OAAD;IACE,OAAO;KACL,SAAS;KACT,gBAAgB;KAChB,YAAY;KACZ,UAAU,OAAO,WAAW,SAAS;KACrC,YAAY,OAAO,WAAW,WAAW;KACzC,OAAO,OAAO,OAAO,KAAK;IAC5B;cARF,CAUG,SACC,oBAAC,QAAD;KAAM,OAAO,EAAE,OAAO,OAAO,OAAO,KAAK,UAAU;eAAI;IAAY,CAAA,GAErE,oBAAC,QAAD;KACE,OAAO;MACL,YAAY;MACZ,oBAAoB;MACpB,OAAO,OAAO,OAAO,KAAK;KAC5B;eAEC,CAAC,iBAAiB;IACf,CAAA,CACH;;GAIP,qBAAC,OAAD;IAAK,OAAO;KAAE,UAAU;KAAY,OAAO;IAAO;cAAlD,CACE,oBAAC,OAAD;KACE,OAAO;MACL,UAAU;MACV,OAAO;MACP;MACA,iBAAiB,OAAO,OAAO,OAAO;MACtC,cAAc,SAAS;MACvB,UAAU;KACZ;eAGA,oBAAC,OAAD,EACE,OAAO;MACL,UAAU;MACV,KAAK;MACL,MAAM;MACN,QAAQ;MACR,OAAO,gBAAgB,QAAQ,GAAG,WAAW;MAC7C,iBAAiB;MACjB,cAAc,SAAS;MACvB,YAAY,gBAAgB,SAAS;MACrC,WAAW,gBACP,oDACA;MACJ,WAAW,OAAO,OAAO,KAAK,MAAM;KACtC,EACD,CAAA;IACE,CAAA,GAGJ,kBAAkB,CAAC,iBAClB,oBAAC,OAAD;KACE,OAAO;MACL,UAAU;MACV,KAAK,SAAS;MACd,MAAM,GAAG,WAAW;MACpB,WAAW;MACX,YAAY;MACZ,YAAY;KACd;KACA,eAAY;eAEZ,oBAAC,qBAAD;MACE,QAAQ;MACD;MACP,MAAM;KACP,CAAA;IACE,CAAA,CAEJ;;GAGJ,kBAAkB,CAAC,iBAClB,oBAAC,OAAD,EAAK,OAAO,EAAE,QAAQ,WAAW,EAAE,EAAI,CAAA;GAIzC,oBAAC,SAAD,EAAA,UAAQ;;;;;QAKC,CAAA;EACN;;AAET,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import { default as React } from 'react';
2
-
3
- export type SimulationState = 'stopped' | 'playing' | 'paused';
2
+ export type SimulationState = "stopped" | "playing" | "paused";
4
3
  export interface SimulationControlsProps {
5
4
  /** Current simulation state */
6
5
  state?: SimulationState;
@@ -126,9 +125,9 @@ export declare const MiniSimulationControls: React.NamedExoticComponent<MiniSimu
126
125
  /**
127
126
  * SimulationControlsWithClock - Controls combined with MissionClock
128
127
  */
129
- export interface SimulationControlsWithClockProps extends Omit<SimulationControlsProps, 'showCurrentTime' | 'showElapsedTime'> {
128
+ export interface SimulationControlsWithClockProps extends Omit<SimulationControlsProps, "showCurrentTime" | "showElapsedTime"> {
130
129
  /** Clock format */
131
- clockFormat?: '12h' | '24h';
130
+ clockFormat?: "12h" | "24h";
132
131
  /** Timezone label */
133
132
  timezone?: string;
134
133
  }