@zendir/ui 0.4.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +640 -631
  3. package/dist/_virtual/_rolldown/runtime.js +13 -0
  4. package/dist/index.js +17 -221
  5. package/dist/react/3d/CesiumCaptureSource.d.ts +0 -1
  6. package/dist/react/3d/CesiumCaptureSource.js +364 -283
  7. package/dist/react/3d/CesiumCaptureSource.js.map +1 -1
  8. package/dist/react/3d/ZenSpace3D.d.ts +2 -3
  9. package/dist/react/3d/ZenSpace3D.js +1681 -1237
  10. package/dist/react/3d/ZenSpace3D.js.map +1 -1
  11. package/dist/react/3d/ZenSpace3DCesium.d.ts +0 -1
  12. package/dist/react/3d/ZenSpace3DCesium.js +513 -560
  13. package/dist/react/3d/ZenSpace3DCesium.js.map +1 -1
  14. package/dist/react/3d/ZenSpace3DShaders.js +61 -66
  15. package/dist/react/3d/ZenSpace3DShaders.js.map +1 -1
  16. package/dist/react/3d/ZenSpace3DTypes.d.ts +19 -20
  17. package/dist/react/3d/ZenSpace3DUtils.d.ts +0 -1
  18. package/dist/react/3d/ZenSpace3DUtils.js +37 -24
  19. package/dist/react/3d/ZenSpace3DUtils.js.map +1 -1
  20. package/dist/react/3d/capturePngAnalysis.js +42 -36
  21. package/dist/react/3d/capturePngAnalysis.js.map +1 -1
  22. package/dist/react/3d/index.d.ts +3 -3
  23. package/dist/react/3d/index.js +5 -53
  24. package/dist/react/3d/threeLoader.d.ts +1 -1
  25. package/dist/react/3d/threeLoader.js +23 -18
  26. package/dist/react/3d/threeLoader.js.map +1 -1
  27. package/dist/react/astro/ClassificationBanner.d.ts +2 -3
  28. package/dist/react/astro/ClassificationBanner.js +95 -79
  29. package/dist/react/astro/ClassificationBanner.js.map +1 -1
  30. package/dist/react/astro/GlobalStatusBar.d.ts +0 -1
  31. package/dist/react/astro/GlobalStatusBar.js +157 -163
  32. package/dist/react/astro/GlobalStatusBar.js.map +1 -1
  33. package/dist/react/astro/MissionClock.d.ts +7 -8
  34. package/dist/react/astro/MissionClock.js +377 -400
  35. package/dist/react/astro/MissionClock.js.map +1 -1
  36. package/dist/react/astro/MonitoringIcon.d.ts +1 -2
  37. package/dist/react/astro/MonitoringIcon.js +422 -358
  38. package/dist/react/astro/MonitoringIcon.js.map +1 -1
  39. package/dist/react/astro/Notification.d.ts +1 -2
  40. package/dist/react/astro/Notification.js +229 -126
  41. package/dist/react/astro/Notification.js.map +1 -1
  42. package/dist/react/astro/Progress.d.ts +0 -1
  43. package/dist/react/astro/Progress.js +199 -141
  44. package/dist/react/astro/Progress.js.map +1 -1
  45. package/dist/react/astro/SimulationControls.d.ts +3 -4
  46. package/dist/react/astro/SimulationControls.js +596 -650
  47. package/dist/react/astro/SimulationControls.js.map +1 -1
  48. package/dist/react/astro/StatusIndicator.d.ts +0 -1
  49. package/dist/react/astro/StatusIndicator.js +236 -170
  50. package/dist/react/astro/StatusIndicator.js.map +1 -1
  51. package/dist/react/astro/UnifiedTimeline.d.ts +9 -10
  52. package/dist/react/astro/UnifiedTimeline.js +2345 -2392
  53. package/dist/react/astro/UnifiedTimeline.js.map +1 -1
  54. package/dist/react/astro/index.d.ts +5 -5
  55. package/dist/react/astro/index.js +1 -25
  56. package/dist/react/cards/AccessCard.d.ts +0 -1
  57. package/dist/react/cards/AccessCard.js +471 -405
  58. package/dist/react/cards/AccessCard.js.map +1 -1
  59. package/dist/react/cards/OrbitCard.d.ts +0 -1
  60. package/dist/react/cards/OrbitCard.js +487 -364
  61. package/dist/react/cards/OrbitCard.js.map +1 -1
  62. package/dist/react/cards/SpacecraftCard.d.ts +0 -1
  63. package/dist/react/cards/SpacecraftCard.js +813 -925
  64. package/dist/react/cards/SpacecraftCard.js.map +1 -1
  65. package/dist/react/cards/TelemetryCard.d.ts +0 -1
  66. package/dist/react/cards/TelemetryCard.js +1055 -732
  67. package/dist/react/cards/TelemetryCard.js.map +1 -1
  68. package/dist/react/cards/TelemetryStreamCard.d.ts +0 -1
  69. package/dist/react/cards/TelemetryStreamCard.js +323 -297
  70. package/dist/react/cards/TelemetryStreamCard.js.map +1 -1
  71. package/dist/react/cards/index.d.ts +1 -1
  72. package/dist/react/cards/index.js +1 -8
  73. package/dist/react/charts/GroundTrackMap.d.ts +6 -7
  74. package/dist/react/charts/GroundTrackMap.js +1377 -1256
  75. package/dist/react/charts/GroundTrackMap.js.map +1 -1
  76. package/dist/react/charts/GroundTrackMapLeaflet.d.ts +1 -2
  77. package/dist/react/charts/GroundTrackMapLeaflet.js +1065 -987
  78. package/dist/react/charts/GroundTrackMapLeaflet.js.map +1 -1
  79. package/dist/react/charts/groundTrackMapLeafletTiles.js +34 -25
  80. package/dist/react/charts/groundTrackMapLeafletTiles.js.map +1 -1
  81. package/dist/react/charts/groundTrackMapLeafletUtils.js +70 -61
  82. package/dist/react/charts/groundTrackMapLeafletUtils.js.map +1 -1
  83. package/dist/react/charts/index.d.ts +1 -1
  84. package/dist/react/charts/index.js +7 -100
  85. package/dist/react/charts/unified/AstroChart.d.ts +1 -2
  86. package/dist/react/charts/unified/AstroChart.js +1331 -1411
  87. package/dist/react/charts/unified/AstroChart.js.map +1 -1
  88. package/dist/react/charts/unified/PowerOverviewChart.d.ts +3 -3
  89. package/dist/react/charts/unified/PowerOverviewChart.js +495 -478
  90. package/dist/react/charts/unified/PowerOverviewChart.js.map +1 -1
  91. package/dist/react/charts/unified/domain.d.ts +12 -13
  92. package/dist/react/charts/unified/domain.js +3999 -3145
  93. package/dist/react/charts/unified/domain.js.map +1 -1
  94. package/dist/react/charts/unified/generators.d.ts +3 -4
  95. package/dist/react/charts/unified/generators.js +561 -498
  96. package/dist/react/charts/unified/generators.js.map +1 -1
  97. package/dist/react/charts/unified/index.d.ts +1 -1
  98. package/dist/react/charts/unified/presets.d.ts +14 -15
  99. package/dist/react/charts/unified/presets.js +857 -994
  100. package/dist/react/charts/unified/presets.js.map +1 -1
  101. package/dist/react/charts/unified/sync.d.ts +2 -3
  102. package/dist/react/charts/unified/sync.js +229 -195
  103. package/dist/react/charts/unified/sync.js.map +1 -1
  104. package/dist/react/charts/unified/theme.d.ts +11 -12
  105. package/dist/react/charts/unified/theme.js +606 -642
  106. package/dist/react/charts/unified/theme.js.map +1 -1
  107. package/dist/react/charts/unified/types.d.ts +32 -33
  108. package/dist/react/charts/unified/useChartStream.d.ts +1 -2
  109. package/dist/react/charts/unified/useChartStream.js +203 -216
  110. package/dist/react/charts/unified/useChartStream.js.map +1 -1
  111. package/dist/react/chatgpt/AppCard.d.ts +1 -2
  112. package/dist/react/chatgpt/index.d.ts +7 -7
  113. package/dist/react/chatgpt/index.js +160 -139
  114. package/dist/react/chatgpt/index.js.map +1 -1
  115. package/dist/react/context/CategoryContext.d.ts +0 -1
  116. package/dist/react/context/CategoryContext.js +78 -29
  117. package/dist/react/context/CategoryContext.js.map +1 -1
  118. package/dist/react/context/DisplaySettingsContext.d.ts +1 -2
  119. package/dist/react/context/DisplaySettingsContext.js +205 -156
  120. package/dist/react/context/DisplaySettingsContext.js.map +1 -1
  121. package/dist/react/context/SpatialSelectionContext.d.ts +0 -1
  122. package/dist/react/context/SpatialSelectionContext.js +36 -7
  123. package/dist/react/context/SpatialSelectionContext.js.map +1 -1
  124. package/dist/react/core/data/DataTable.d.ts +3 -4
  125. package/dist/react/core/data/DataTable.js +473 -440
  126. package/dist/react/core/data/DataTable.js.map +1 -1
  127. package/dist/react/core/data/DataValue.d.ts +4 -5
  128. package/dist/react/core/data/DataValue.js +605 -538
  129. package/dist/react/core/data/DataValue.js.map +1 -1
  130. package/dist/react/core/data/propertyConfig.d.ts +1 -2
  131. package/dist/react/core/data/propertyConfig.js +446 -382
  132. package/dist/react/core/data/propertyConfig.js.map +1 -1
  133. package/dist/react/core/display/AstroIcon.d.ts +4 -5
  134. package/dist/react/core/display/AstroIcon.js +339 -429
  135. package/dist/react/core/display/AstroIcon.js.map +1 -1
  136. package/dist/react/core/display/Badge.d.ts +2 -3
  137. package/dist/react/core/display/Badge.js +131 -131
  138. package/dist/react/core/display/Badge.js.map +1 -1
  139. package/dist/react/core/display/CardHeader.d.ts +0 -1
  140. package/dist/react/core/display/CardHeader.js +398 -311
  141. package/dist/react/core/display/CardHeader.js.map +1 -1
  142. package/dist/react/core/display/Container.d.ts +2 -3
  143. package/dist/react/core/display/Container.js +640 -668
  144. package/dist/react/core/display/Container.js.map +1 -1
  145. package/dist/react/core/display/CopyButton.d.ts +1 -2
  146. package/dist/react/core/display/CopyButton.js +158 -101
  147. package/dist/react/core/display/CopyButton.js.map +1 -1
  148. package/dist/react/core/display/GlassCard.d.ts +3 -4
  149. package/dist/react/core/display/GlassCard.js +416 -369
  150. package/dist/react/core/display/GlassCard.js.map +1 -1
  151. package/dist/react/core/display/HeaderIconWithStatus.d.ts +0 -1
  152. package/dist/react/core/display/HeaderIconWithStatus.js +152 -152
  153. package/dist/react/core/display/HeaderIconWithStatus.js.map +1 -1
  154. package/dist/react/core/display/Icon.d.ts +2 -3
  155. package/dist/react/core/display/Icon.js +172 -143
  156. package/dist/react/core/display/Icon.js.map +1 -1
  157. package/dist/react/core/display/Typography.d.ts +24 -25
  158. package/dist/react/core/display/Typography.js +360 -178
  159. package/dist/react/core/display/Typography.js.map +1 -1
  160. package/dist/react/core/feedback/ConfirmDialog.d.ts +1 -2
  161. package/dist/react/core/feedback/ConfirmDialog.js +343 -304
  162. package/dist/react/core/feedback/ConfirmDialog.js.map +1 -1
  163. package/dist/react/core/feedback/Dialog.d.ts +2 -3
  164. package/dist/react/core/feedback/Dialog.js +189 -197
  165. package/dist/react/core/feedback/Dialog.js.map +1 -1
  166. package/dist/react/core/feedback/Toast.d.ts +2 -3
  167. package/dist/react/core/feedback/Toast.js +346 -207
  168. package/dist/react/core/feedback/Toast.js.map +1 -1
  169. package/dist/react/core/index.d.ts +26 -26
  170. package/dist/react/core/index.js +7 -119
  171. package/dist/react/core/inputs/Button.d.ts +2 -3
  172. package/dist/react/core/inputs/Button.js +281 -304
  173. package/dist/react/core/inputs/Button.js.map +1 -1
  174. package/dist/react/core/inputs/Checkbox.d.ts +2 -3
  175. package/dist/react/core/inputs/Checkbox.js +139 -127
  176. package/dist/react/core/inputs/Checkbox.js.map +1 -1
  177. package/dist/react/core/inputs/Input.d.ts +3 -4
  178. package/dist/react/core/inputs/Input.js +277 -285
  179. package/dist/react/core/inputs/Input.js.map +1 -1
  180. package/dist/react/core/inputs/LimitsBar.d.ts +1 -2
  181. package/dist/react/core/inputs/LimitsBar.js +271 -196
  182. package/dist/react/core/inputs/LimitsBar.js.map +1 -1
  183. package/dist/react/core/inputs/NumberInput.d.ts +2 -3
  184. package/dist/react/core/inputs/NumberInput.js +531 -503
  185. package/dist/react/core/inputs/NumberInput.js.map +1 -1
  186. package/dist/react/core/inputs/PinInput.d.ts +2 -3
  187. package/dist/react/core/inputs/PinInput.js +224 -207
  188. package/dist/react/core/inputs/PinInput.js.map +1 -1
  189. package/dist/react/core/inputs/Select.d.ts +1 -2
  190. package/dist/react/core/inputs/Select.js +298 -299
  191. package/dist/react/core/inputs/Select.js.map +1 -1
  192. package/dist/react/core/inputs/Toggle.d.ts +2 -3
  193. package/dist/react/core/inputs/Toggle.js +142 -148
  194. package/dist/react/core/inputs/Toggle.js.map +1 -1
  195. package/dist/react/core/layout/Box.d.ts +3 -4
  196. package/dist/react/core/layout/Box.js +118 -122
  197. package/dist/react/core/layout/Box.js.map +1 -1
  198. package/dist/react/core/layout/Center.d.ts +0 -1
  199. package/dist/react/core/layout/Center.js +45 -32
  200. package/dist/react/core/layout/Center.js.map +1 -1
  201. package/dist/react/core/layout/Divider.d.ts +1 -2
  202. package/dist/react/core/layout/Divider.js +112 -106
  203. package/dist/react/core/layout/Divider.js.map +1 -1
  204. package/dist/react/core/layout/Flex.d.ts +4 -5
  205. package/dist/react/core/layout/Flex.js +120 -124
  206. package/dist/react/core/layout/Flex.js.map +1 -1
  207. package/dist/react/core/layout/Grid.d.ts +5 -6
  208. package/dist/react/core/layout/Grid.js +131 -138
  209. package/dist/react/core/layout/Grid.js.map +1 -1
  210. package/dist/react/core/layout/Spacer.d.ts +0 -1
  211. package/dist/react/core/layout/Spacer.js +36 -29
  212. package/dist/react/core/layout/Spacer.js.map +1 -1
  213. package/dist/react/core/layout/Stack.d.ts +4 -5
  214. package/dist/react/core/layout/Stack.js +127 -70
  215. package/dist/react/core/layout/Stack.js.map +1 -1
  216. package/dist/react/core/layout/responsive.d.ts +1 -2
  217. package/dist/react/core/layout/responsive.js +25 -19
  218. package/dist/react/core/layout/responsive.js.map +1 -1
  219. package/dist/react/core/layout/useBreakpoint.d.ts +1 -1
  220. package/dist/react/core/layout/useBreakpoint.js +119 -66
  221. package/dist/react/core/layout/useBreakpoint.js.map +1 -1
  222. package/dist/react/core/navigation/AppBar.d.ts +1 -2
  223. package/dist/react/core/navigation/AppBar.js +827 -805
  224. package/dist/react/core/navigation/AppBar.js.map +1 -1
  225. package/dist/react/core/navigation/Pagination.d.ts +2 -3
  226. package/dist/react/core/navigation/Pagination.js +207 -187
  227. package/dist/react/core/navigation/Pagination.js.map +1 -1
  228. package/dist/react/core/navigation/SideNav.d.ts +11 -5
  229. package/dist/react/core/navigation/SideNav.js +857 -602
  230. package/dist/react/core/navigation/SideNav.js.map +1 -1
  231. package/dist/react/core/navigation/Tabs.d.ts +0 -1
  232. package/dist/react/core/navigation/Tabs.js +113 -119
  233. package/dist/react/core/navigation/Tabs.js.map +1 -1
  234. package/dist/react/core/overlays/Popover.d.ts +2 -3
  235. package/dist/react/core/overlays/Popover.js +303 -282
  236. package/dist/react/core/overlays/Popover.js.map +1 -1
  237. package/dist/react/core/overlays/SidePanel.d.ts +1 -2
  238. package/dist/react/core/overlays/SidePanel.js +217 -212
  239. package/dist/react/core/overlays/SidePanel.js.map +1 -1
  240. package/dist/react/core/overlays/Tooltip.d.ts +1 -2
  241. package/dist/react/core/overlays/Tooltip.js +170 -176
  242. package/dist/react/core/overlays/Tooltip.js.map +1 -1
  243. package/dist/react/core/widgets/ActivityPlanner.d.ts +0 -1
  244. package/dist/react/core/widgets/ActivityPlanner.js +855 -517
  245. package/dist/react/core/widgets/ActivityPlanner.js.map +1 -1
  246. package/dist/react/core/widgets/Capture.d.ts +2 -3
  247. package/dist/react/core/widgets/Capture.js +965 -779
  248. package/dist/react/core/widgets/Capture.js.map +1 -1
  249. package/dist/react/core/widgets/ChatPanel.d.ts +16 -17
  250. package/dist/react/core/widgets/ChatPanel.js +1734 -1034
  251. package/dist/react/core/widgets/ChatPanel.js.map +1 -1
  252. package/dist/react/core/widgets/ColorPickerPanel.d.ts +0 -1
  253. package/dist/react/core/widgets/ColorPickerPanel.js +298 -287
  254. package/dist/react/core/widgets/ColorPickerPanel.js.map +1 -1
  255. package/dist/react/core/widgets/CommandBuilder.d.ts +2 -3
  256. package/dist/react/core/widgets/CommandBuilder.js +624 -516
  257. package/dist/react/core/widgets/CommandBuilder.js.map +1 -1
  258. package/dist/react/core/widgets/ConnectionForm.d.ts +2 -3
  259. package/dist/react/core/widgets/ConnectionForm.js +528 -492
  260. package/dist/react/core/widgets/ConnectionForm.js.map +1 -1
  261. package/dist/react/core/widgets/FileExplorer.d.ts +3 -4
  262. package/dist/react/core/widgets/FileExplorer.js +617 -505
  263. package/dist/react/core/widgets/FileExplorer.js.map +1 -1
  264. package/dist/react/core/widgets/HexViewer.d.ts +2 -3
  265. package/dist/react/core/widgets/HexViewer.js +1353 -1091
  266. package/dist/react/core/widgets/HexViewer.js.map +1 -1
  267. package/dist/react/core/widgets/ImageFrame.d.ts +1 -2
  268. package/dist/react/core/widgets/ImageFrame.js +230 -193
  269. package/dist/react/core/widgets/ImageFrame.js.map +1 -1
  270. package/dist/react/core/widgets/ImageGallery.d.ts +2 -1
  271. package/dist/react/core/widgets/ImageGallery.js +380 -314
  272. package/dist/react/core/widgets/ImageGallery.js.map +1 -1
  273. package/dist/react/core/widgets/ImagePanel.d.ts +0 -1
  274. package/dist/react/core/widgets/ImagePanel.js +110 -101
  275. package/dist/react/core/widgets/ImagePanel.js.map +1 -1
  276. package/dist/react/core/widgets/LogViewer.d.ts +2 -3
  277. package/dist/react/core/widgets/LogViewer.js +711 -607
  278. package/dist/react/core/widgets/LogViewer.js.map +1 -1
  279. package/dist/react/core/widgets/MessageStream.d.ts +3 -4
  280. package/dist/react/core/widgets/MessageStream.js +514 -444
  281. package/dist/react/core/widgets/MessageStream.js.map +1 -1
  282. package/dist/react/core/widgets/MissionCalendar.d.ts +3 -4
  283. package/dist/react/core/widgets/MissionCalendar.js +1488 -1020
  284. package/dist/react/core/widgets/MissionCalendar.js.map +1 -1
  285. package/dist/react/core/widgets/PacketViewer.d.ts +2 -3
  286. package/dist/react/core/widgets/PacketViewer.js +550 -421
  287. package/dist/react/core/widgets/PacketViewer.js.map +1 -1
  288. package/dist/react/core/widgets/capture-placeholder.png.js +6 -5
  289. package/dist/react/core/widgets/capture-placeholder.png.js.map +1 -1
  290. package/dist/react/hooks/index.d.ts +5 -5
  291. package/dist/react/hooks/useAccessWindows.d.ts +0 -1
  292. package/dist/react/hooks/useCompactMode.d.ts +1 -1
  293. package/dist/react/hooks/useCompactMode.js +104 -58
  294. package/dist/react/hooks/useCompactMode.js.map +1 -1
  295. package/dist/react/hooks/useGroundTrackHistory.d.ts +0 -1
  296. package/dist/react/hooks/useSimulationScene.d.ts +1 -2
  297. package/dist/react/hooks/useSimulationScene.js +481 -374
  298. package/dist/react/hooks/useSimulationScene.js.map +1 -1
  299. package/dist/react/index.d.ts +3 -3
  300. package/dist/react/panels/LayerControlPanel.d.ts +1 -2
  301. package/dist/react/panels/LayerControlPanel.js +223 -180
  302. package/dist/react/panels/LayerControlPanel.js.map +1 -1
  303. package/dist/react/panels/ObjectInventoryPanel.d.ts +2 -3
  304. package/dist/react/panels/ObjectInventoryPanel.js +315 -250
  305. package/dist/react/panels/ObjectInventoryPanel.js.map +1 -1
  306. package/dist/react/panels/index.d.ts +1 -1
  307. package/dist/react/panels/index.js +1 -6
  308. package/dist/react/shared/ErrorBoundary.d.ts +1 -2
  309. package/dist/react/shared/ErrorBoundary.js +170 -139
  310. package/dist/react/shared/ErrorBoundary.js.map +1 -1
  311. package/dist/react/shared/Skeleton.d.ts +1 -2
  312. package/dist/react/shared/Skeleton.js +300 -301
  313. package/dist/react/shared/Skeleton.js.map +1 -1
  314. package/dist/react/theme/ThemeProvider.d.ts +2 -321
  315. package/dist/react/theme/ThemeProvider.js +312 -939
  316. package/dist/react/theme/ThemeProvider.js.map +1 -1
  317. package/dist/react/theme/cardAccent.d.ts +1 -2
  318. package/dist/react/theme/cardAccent.js +196 -126
  319. package/dist/react/theme/cardAccent.js.map +1 -1
  320. package/dist/react/theme/config.d.ts +0 -1
  321. package/dist/react/theme/config.js +47 -25
  322. package/dist/react/theme/config.js.map +1 -1
  323. package/dist/react/theme/index.d.ts +2 -2
  324. package/dist/react/theme/index.js +1 -16
  325. package/dist/react/theme/types.d.ts +332 -0
  326. package/dist/react/theme/types.js +39 -0
  327. package/dist/react/theme/types.js.map +1 -0
  328. package/dist/react/types.d.ts +8 -8
  329. package/dist/react/types.js +147 -47
  330. package/dist/react/types.js.map +1 -1
  331. package/dist/react/utils/categoryPalette.d.ts +0 -1
  332. package/dist/react/utils/categoryPalette.js +91 -102
  333. package/dist/react/utils/categoryPalette.js.map +1 -1
  334. package/dist/react/utils/index.d.ts +5 -5
  335. package/dist/react/utils/index.js +457 -371
  336. package/dist/react/utils/index.js.map +1 -1
  337. package/dist/react/visualizations/EclipseTimerCard.d.ts +0 -1
  338. package/dist/react/visualizations/LinkBudgetCard.d.ts +0 -1
  339. package/dist/react/visualizations/NavBallCard.d.ts +0 -1
  340. package/dist/react/visualizations/PropulsionCard.d.ts +1 -2
  341. package/dist/react/visualizations/SensorFootprintCard.d.ts +1 -2
  342. package/dist/react/visualizations/ThermalHeatmapCard.d.ts +0 -1
  343. package/dist/react/visualizations/index.d.ts +3 -3
  344. package/dist/react.d.ts +2 -1
  345. package/dist/react.js +17 -221
  346. package/dist/shaders/atmosphere.frag.js +6 -5
  347. package/dist/shaders/atmosphere.frag.js.map +1 -1
  348. package/dist/shaders/atmosphere.vert.js +6 -5
  349. package/dist/shaders/atmosphere.vert.js.map +1 -1
  350. package/dist/shaders/stars.frag.js +6 -5
  351. package/dist/shaders/stars.frag.js.map +1 -1
  352. package/dist/shaders/stars.vert.js +6 -5
  353. package/dist/shaders/stars.vert.js.map +1 -1
  354. package/dist/style.css +217 -194
  355. package/dist/tokens/core.d.ts +159 -0
  356. package/dist/tokens/core.js +144 -0
  357. package/dist/tokens/core.js.map +1 -0
  358. package/dist/tokens/css-vars.d.ts +213 -2
  359. package/dist/tokens/css-vars.js +590 -227
  360. package/dist/tokens/css-vars.js.map +1 -1
  361. package/dist/tokens/index.d.ts +31 -228
  362. package/dist/tokens/index.js +281 -366
  363. package/dist/tokens/index.js.map +1 -1
  364. package/dist/tokens/palettes/astro.d.ts +129 -0
  365. package/dist/tokens/palettes/astro.js +112 -0
  366. package/dist/tokens/palettes/astro.js.map +1 -0
  367. package/dist/tokens/palettes/index.d.ts +288 -0
  368. package/dist/tokens/palettes/index.js +35 -0
  369. package/dist/tokens/palettes/index.js.map +1 -0
  370. package/dist/tokens/palettes/tailwind.d.ts +324 -0
  371. package/dist/tokens/palettes/tailwind.js +201 -0
  372. package/dist/tokens/palettes/tailwind.js.map +1 -0
  373. package/dist/tokens/palettes/zendir.d.ts +126 -0
  374. package/dist/tokens/palettes/zendir.js +92 -0
  375. package/dist/tokens/palettes/zendir.js.map +1 -0
  376. package/dist/tokens/themes.d.ts +30 -0
  377. package/dist/tokens/themes.js +704 -0
  378. package/dist/tokens/themes.js.map +1 -0
  379. package/dist/tokens/tokens.css +419 -41
  380. package/dist/types/index.d.ts +2 -2
  381. package/package.json +310 -313
  382. package/dist/index.js.map +0 -1
  383. package/dist/react/3d/index.js.map +0 -1
  384. package/dist/react/astro/index.js.map +0 -1
  385. package/dist/react/cards/index.js.map +0 -1
  386. package/dist/react/charts/index.js.map +0 -1
  387. package/dist/react/core/index.js.map +0 -1
  388. package/dist/react/panels/index.js.map +0 -1
  389. package/dist/react/theme/astro-tokens.d.ts +0 -153
  390. package/dist/react/theme/index.js.map +0 -1
  391. package/dist/react.js.map +0 -1
@@ -1,678 +1,650 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import React, { memo, useCallback } from "react";
3
1
  import { useTheme } from "../../theme/ThemeProvider.js";
4
2
  import { addAlpha, classNames } from "../../utils/index.js";
3
+ import { useBreakpoint } from "../layout/useBreakpoint.js";
5
4
  import { AstroIcon } from "./AstroIcon.js";
6
5
  import { HeaderIconWithStatus } from "./HeaderIconWithStatus.js";
7
6
  import { CardHeader } from "./CardHeader.js";
8
- import { useBreakpoint } from "../layout/useBreakpoint.js";
9
- const STATUS_COLORS = {
10
- off: "#a4abb6",
11
- standby: "#2dccff",
12
- normal: "#56f000",
13
- caution: "#fce83a",
14
- serious: "#ffb302",
15
- critical: "#ff3838"
16
- };
17
- const STATUS_DESCRIPTIONS = {
18
- off: "Off, unavailable, disabled",
19
- standby: "Standby, available, enabled",
20
- normal: "Normal, ok, satisfactory",
21
- caution: "Caution, warning, unstable",
22
- serious: "Serious, error, needs attention",
23
- critical: "Critical, emergency, urgent"
7
+ import React, { memo, useCallback } from "react";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ //#region src/react/core/display/Container.tsx
10
+ /**
11
+ * @zendir/ui - Container/Card Component
12
+ *
13
+ * Container/Card wrapper following Astro UX Design System.
14
+ * Automatically switches to glassmorphic styling when transparent themes are active.
15
+ *
16
+ * Transparent themes (transparent, transparent-bold):
17
+ * - Glassmorphic panels with blur effect
18
+ * - Colored top border accent
19
+ * - Hover glow effect (like GlassCard)
20
+ * - transparent-bold has 2px top border
21
+ *
22
+ * @example
23
+ * ```tsx
24
+ * <Container>Simple container</Container>
25
+ * <Container title="Spacecraft Status" status="normal">Content</Container>
26
+ * <Container title="Power System" icon="solar" iconStatus="normal">With status</Container>
27
+ * <Container title="Custom Color" icon="thermal" iconColor="#FF6B6B">Custom color</Container>
28
+ * ```
29
+ */
30
+ /** Status descriptions for tooltips (default synonyms from AstroUXDS) */
31
+ var STATUS_DESCRIPTIONS = {
32
+ off: "Off, unavailable, disabled",
33
+ standby: "Standby, available, enabled",
34
+ normal: "Normal, ok, satisfactory",
35
+ caution: "Caution, warning, unstable",
36
+ serious: "Serious, error, needs attention",
37
+ critical: "Critical, emergency, urgent"
24
38
  };
25
- function IconWithStatusTooltip({
26
- icon,
27
- iconColor,
28
- iconStatus,
29
- statusMessage,
30
- iconSize = 20
31
- }) {
32
- const [isHovered, setIsHovered] = React.useState(false);
33
- const color = iconStatus ? STATUS_COLORS[iconStatus] : iconColor;
34
- const defaultMessage = iconStatus ? STATUS_DESCRIPTIONS[iconStatus] : "";
35
- const tooltipText = statusMessage || defaultMessage;
36
- const statusLabel = iconStatus ? iconStatus.charAt(0).toUpperCase() + iconStatus.slice(1) : "";
37
- return /* @__PURE__ */ jsxs(
38
- "div",
39
- {
40
- style: {
41
- position: "relative",
42
- display: "inline-flex",
43
- alignItems: "center",
44
- justifyContent: "center",
45
- flexShrink: 0,
46
- cursor: iconStatus ? "help" : "default"
47
- },
48
- onMouseEnter: () => iconStatus && setIsHovered(true),
49
- onMouseLeave: () => setIsHovered(false),
50
- children: [
51
- iconStatus ? /* @__PURE__ */ jsx(
52
- HeaderIconWithStatus,
53
- {
54
- icon,
55
- status: iconStatus,
56
- size: iconSize,
57
- statusColor: iconColor
58
- }
59
- ) : /* @__PURE__ */ jsx(
60
- AstroIcon,
61
- {
62
- name: icon,
63
- size: iconSize,
64
- color: iconColor
65
- }
66
- ),
67
- iconStatus && isHovered && /* @__PURE__ */ jsxs(
68
- "div",
69
- {
70
- style: {
71
- position: "absolute",
72
- bottom: "calc(100% + 12px)",
73
- left: "50%",
74
- transform: "translateX(-50%)",
75
- padding: "8px 12px",
76
- backgroundColor: "rgba(10, 15, 25, 0.95)",
77
- border: `1px solid ${color}`,
78
- borderRadius: "4px",
79
- boxShadow: `0 0 12px ${color}40, 0 4px 12px rgba(0,0,0,0.4)`,
80
- zIndex: 1e3,
81
- whiteSpace: "nowrap",
82
- pointerEvents: "none",
83
- minWidth: "150px"
84
- },
85
- children: [
86
- /* @__PURE__ */ jsx("div", { style: {
87
- fontSize: "0.6875rem",
88
- // 11px in rem
89
- fontWeight: 500,
90
- // AstroUXDS medium for labels
91
- color,
92
- marginBottom: "4px",
93
- textTransform: "uppercase",
94
- letterSpacing: "0.5px"
95
- }, children: statusLabel }),
96
- /* @__PURE__ */ jsx("div", { style: {
97
- fontSize: "0.75rem",
98
- // 12px in rem
99
- color: "rgba(255,255,255,0.9)",
100
- lineHeight: 1.4
101
- }, children: tooltipText }),
102
- /* @__PURE__ */ jsx("div", { style: {
103
- position: "absolute",
104
- bottom: "-6px",
105
- left: "50%",
106
- transform: "translateX(-50%) rotate(45deg)",
107
- width: "10px",
108
- height: "10px",
109
- backgroundColor: "rgba(10, 15, 25, 0.95)",
110
- borderRight: `1px solid ${color}`,
111
- borderBottom: `1px solid ${color}`
112
- } })
113
- ]
114
- }
115
- )
116
- ]
117
- }
118
- );
39
+ /**
40
+ * Icon wrapper with status tooltip - triggers tooltip on hover over entire icon area
41
+ */
42
+ function IconWithStatusTooltip({ icon, iconColor, iconStatus, statusMessage, iconSize = 20 }) {
43
+ const [isHovered, setIsHovered] = React.useState(false);
44
+ const { tokens } = useTheme();
45
+ const color = iconStatus ? tokens.colors.status[iconStatus] : iconColor;
46
+ const defaultMessage = iconStatus ? STATUS_DESCRIPTIONS[iconStatus] : "";
47
+ const tooltipText = statusMessage || defaultMessage;
48
+ const statusLabel = iconStatus ? iconStatus.charAt(0).toUpperCase() + iconStatus.slice(1) : "";
49
+ return /* @__PURE__ */ jsxs("div", {
50
+ style: {
51
+ position: "relative",
52
+ display: "inline-flex",
53
+ alignItems: "center",
54
+ justifyContent: "center",
55
+ flexShrink: 0,
56
+ cursor: iconStatus ? "help" : "default"
57
+ },
58
+ onMouseEnter: () => iconStatus && setIsHovered(true),
59
+ onMouseLeave: () => setIsHovered(false),
60
+ children: [iconStatus ? /* @__PURE__ */ jsx(HeaderIconWithStatus, {
61
+ icon,
62
+ status: iconStatus,
63
+ size: iconSize,
64
+ statusColor: iconColor
65
+ }) : /* @__PURE__ */ jsx(AstroIcon, {
66
+ name: icon,
67
+ size: iconSize,
68
+ color: iconColor
69
+ }), iconStatus && isHovered && /* @__PURE__ */ jsxs("div", {
70
+ style: {
71
+ position: "absolute",
72
+ bottom: "calc(100% + 12px)",
73
+ left: "50%",
74
+ transform: "translateX(-50%)",
75
+ padding: "8px 12px",
76
+ backgroundColor: "rgba(10, 15, 25, 0.95)",
77
+ border: `1px solid ${color}`,
78
+ borderRadius: "4px",
79
+ boxShadow: `0 0 12px ${color}40, 0 4px 12px rgba(0,0,0,0.4)`,
80
+ zIndex: 1e3,
81
+ whiteSpace: "nowrap",
82
+ pointerEvents: "none",
83
+ minWidth: "150px"
84
+ },
85
+ children: [
86
+ /* @__PURE__ */ jsx("div", {
87
+ style: {
88
+ fontSize: "0.6875rem",
89
+ fontWeight: 500,
90
+ color,
91
+ marginBottom: "4px",
92
+ textTransform: "uppercase",
93
+ letterSpacing: "0.5px"
94
+ },
95
+ children: statusLabel
96
+ }),
97
+ /* @__PURE__ */ jsx("div", {
98
+ style: {
99
+ fontSize: "0.75rem",
100
+ color: "rgba(255,255,255,0.9)",
101
+ lineHeight: 1.4
102
+ },
103
+ children: tooltipText
104
+ }),
105
+ /* @__PURE__ */ jsx("div", { style: {
106
+ position: "absolute",
107
+ bottom: "-6px",
108
+ left: "50%",
109
+ transform: "translateX(-50%) rotate(45deg)",
110
+ width: "10px",
111
+ height: "10px",
112
+ backgroundColor: "rgba(10, 15, 25, 0.95)",
113
+ borderRight: `1px solid ${color}`,
114
+ borderBottom: `1px solid ${color}`
115
+ } })
116
+ ]
117
+ })]
118
+ });
119
119
  }
120
- function StatusSymbol({
121
- status,
122
- size = 8,
123
- message,
124
- showTooltip = false
125
- }) {
126
- const [isHovered, setIsHovered] = React.useState(false);
127
- const color = STATUS_COLORS[status];
128
- const defaultMessage = STATUS_DESCRIPTIONS[status];
129
- const tooltipText = message || defaultMessage;
130
- const statusLabel = status.charAt(0).toUpperCase() + status.slice(1);
131
- const renderShape = () => {
132
- const h = size / 2;
133
- const glow = `drop-shadow(0 0 3px ${color})`;
134
- switch (status) {
135
- case "critical":
136
- return /* @__PURE__ */ jsx("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, style: { filter: glow }, children: /* @__PURE__ */ jsx("polygon", { points: `${h},${size} 0,0 ${size},0`, fill: color }) });
137
- case "serious":
138
- return /* @__PURE__ */ jsx("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, style: { filter: glow }, children: /* @__PURE__ */ jsx("polygon", { points: `${h},0 ${size},${h} ${h},${size} 0,${h}`, fill: color }) });
139
- case "caution":
140
- return /* @__PURE__ */ jsx("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, style: { filter: glow }, children: /* @__PURE__ */ jsx("rect", { width: size, height: size, fill: color }) });
141
- case "normal":
142
- return /* @__PURE__ */ jsx("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, style: { filter: glow }, children: /* @__PURE__ */ jsx("circle", { cx: h, cy: h, r: h, fill: color }) });
143
- case "standby":
144
- return /* @__PURE__ */ jsx("svg", { width: size, height: size, viewBox: "0 0 12 12", style: { filter: glow }, children: /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "3.5", fill: "none", stroke: color, strokeWidth: "2" }) });
145
- case "off":
146
- default:
147
- return /* @__PURE__ */ jsx("svg", { width: size, height: size, viewBox: "0 0 12 12", style: { filter: glow }, children: /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "3", fill: color }) });
148
- }
149
- };
150
- return /* @__PURE__ */ jsxs(
151
- "div",
152
- {
153
- style: {
154
- position: "relative",
155
- display: "inline-flex",
156
- alignItems: "center",
157
- justifyContent: "center",
158
- cursor: showTooltip ? "help" : "default"
159
- },
160
- onMouseEnter: () => showTooltip && setIsHovered(true),
161
- onMouseLeave: () => setIsHovered(false),
162
- children: [
163
- renderShape(),
164
- showTooltip && isHovered && /* @__PURE__ */ jsxs(
165
- "div",
166
- {
167
- style: {
168
- position: "absolute",
169
- bottom: "calc(100% + 8px)",
170
- left: "50%",
171
- transform: "translateX(-50%)",
172
- padding: "8px 12px",
173
- backgroundColor: "rgba(10, 15, 25, 0.95)",
174
- border: `1px solid ${color}`,
175
- borderRadius: "4px",
176
- boxShadow: `0 0 12px ${color}40, 0 4px 12px rgba(0,0,0,0.4)`,
177
- zIndex: 1e3,
178
- whiteSpace: "nowrap",
179
- pointerEvents: "none",
180
- minWidth: "150px"
181
- },
182
- children: [
183
- /* @__PURE__ */ jsx("div", { style: {
184
- fontSize: "0.6875rem",
185
- // 11px in rem
186
- fontWeight: 500,
187
- // AstroUXDS medium for labels
188
- color,
189
- marginBottom: "4px",
190
- textTransform: "uppercase",
191
- letterSpacing: "0.5px"
192
- }, children: statusLabel }),
193
- /* @__PURE__ */ jsx("div", { style: {
194
- fontSize: "0.75rem",
195
- // 12px in rem
196
- color: "rgba(255,255,255,0.9)",
197
- lineHeight: 1.4
198
- }, children: tooltipText }),
199
- /* @__PURE__ */ jsx("div", { style: {
200
- position: "absolute",
201
- bottom: "-6px",
202
- left: "50%",
203
- transform: "translateX(-50%) rotate(45deg)",
204
- width: "10px",
205
- height: "10px",
206
- backgroundColor: "rgba(10, 15, 25, 0.95)",
207
- borderRight: `1px solid ${color}`,
208
- borderBottom: `1px solid ${color}`
209
- } })
210
- ]
211
- }
212
- )
213
- ]
214
- }
215
- );
120
+ /**
121
+ * Renders AstroUXDS-compliant status symbol with proper shape
122
+ * Shapes: Critical=triangle, Serious=diamond, Caution=square, Normal=circle, Standby=ring, Off=small-circle
123
+ */
124
+ function StatusSymbol({ status, size = 8, message, showTooltip = false }) {
125
+ const [isHovered, setIsHovered] = React.useState(false);
126
+ const { tokens } = useTheme();
127
+ const color = tokens.colors.status[status];
128
+ const defaultMessage = STATUS_DESCRIPTIONS[status];
129
+ const tooltipText = message || defaultMessage;
130
+ const statusLabel = status.charAt(0).toUpperCase() + status.slice(1);
131
+ const renderShape = () => {
132
+ const h = size / 2;
133
+ const glow = `drop-shadow(0 0 3px ${color})`;
134
+ switch (status) {
135
+ case "critical": return /* @__PURE__ */ jsx("svg", {
136
+ width: size,
137
+ height: size,
138
+ viewBox: `0 0 ${size} ${size}`,
139
+ style: { filter: glow },
140
+ children: /* @__PURE__ */ jsx("polygon", {
141
+ points: `${h},${size} 0,0 ${size},0`,
142
+ fill: color
143
+ })
144
+ });
145
+ case "serious": return /* @__PURE__ */ jsx("svg", {
146
+ width: size,
147
+ height: size,
148
+ viewBox: `0 0 ${size} ${size}`,
149
+ style: { filter: glow },
150
+ children: /* @__PURE__ */ jsx("polygon", {
151
+ points: `${h},0 ${size},${h} ${h},${size} 0,${h}`,
152
+ fill: color
153
+ })
154
+ });
155
+ case "caution": return /* @__PURE__ */ jsx("svg", {
156
+ width: size,
157
+ height: size,
158
+ viewBox: `0 0 ${size} ${size}`,
159
+ style: { filter: glow },
160
+ children: /* @__PURE__ */ jsx("rect", {
161
+ width: size,
162
+ height: size,
163
+ fill: color
164
+ })
165
+ });
166
+ case "normal": return /* @__PURE__ */ jsx("svg", {
167
+ width: size,
168
+ height: size,
169
+ viewBox: `0 0 ${size} ${size}`,
170
+ style: { filter: glow },
171
+ children: /* @__PURE__ */ jsx("circle", {
172
+ cx: h,
173
+ cy: h,
174
+ r: h,
175
+ fill: color
176
+ })
177
+ });
178
+ case "standby": return /* @__PURE__ */ jsx("svg", {
179
+ width: size,
180
+ height: size,
181
+ viewBox: "0 0 12 12",
182
+ style: { filter: glow },
183
+ children: /* @__PURE__ */ jsx("circle", {
184
+ cx: "6",
185
+ cy: "6",
186
+ r: "3.5",
187
+ fill: "none",
188
+ stroke: color,
189
+ strokeWidth: "2"
190
+ })
191
+ });
192
+ default: return /* @__PURE__ */ jsx("svg", {
193
+ width: size,
194
+ height: size,
195
+ viewBox: "0 0 12 12",
196
+ style: { filter: glow },
197
+ children: /* @__PURE__ */ jsx("circle", {
198
+ cx: "6",
199
+ cy: "6",
200
+ r: "3",
201
+ fill: color
202
+ })
203
+ });
204
+ }
205
+ };
206
+ return /* @__PURE__ */ jsxs("div", {
207
+ style: {
208
+ position: "relative",
209
+ display: "inline-flex",
210
+ alignItems: "center",
211
+ justifyContent: "center",
212
+ cursor: showTooltip ? "help" : "default"
213
+ },
214
+ onMouseEnter: () => showTooltip && setIsHovered(true),
215
+ onMouseLeave: () => setIsHovered(false),
216
+ children: [renderShape(), showTooltip && isHovered && /* @__PURE__ */ jsxs("div", {
217
+ style: {
218
+ position: "absolute",
219
+ bottom: "calc(100% + 8px)",
220
+ left: "50%",
221
+ transform: "translateX(-50%)",
222
+ padding: "8px 12px",
223
+ backgroundColor: "rgba(10, 15, 25, 0.95)",
224
+ border: `1px solid ${color}`,
225
+ borderRadius: "4px",
226
+ boxShadow: `0 0 12px ${color}40, 0 4px 12px rgba(0,0,0,0.4)`,
227
+ zIndex: 1e3,
228
+ whiteSpace: "nowrap",
229
+ pointerEvents: "none",
230
+ minWidth: "150px"
231
+ },
232
+ children: [
233
+ /* @__PURE__ */ jsx("div", {
234
+ style: {
235
+ fontSize: "0.6875rem",
236
+ fontWeight: 500,
237
+ color,
238
+ marginBottom: "4px",
239
+ textTransform: "uppercase",
240
+ letterSpacing: "0.5px"
241
+ },
242
+ children: statusLabel
243
+ }),
244
+ /* @__PURE__ */ jsx("div", {
245
+ style: {
246
+ fontSize: "0.75rem",
247
+ color: "rgba(255,255,255,0.9)",
248
+ lineHeight: 1.4
249
+ },
250
+ children: tooltipText
251
+ }),
252
+ /* @__PURE__ */ jsx("div", { style: {
253
+ position: "absolute",
254
+ bottom: "-6px",
255
+ left: "50%",
256
+ transform: "translateX(-50%) rotate(45deg)",
257
+ width: "10px",
258
+ height: "10px",
259
+ backgroundColor: "rgba(10, 15, 25, 0.95)",
260
+ borderRight: `1px solid ${color}`,
261
+ borderBottom: `1px solid ${color}`
262
+ } })
263
+ ]
264
+ })]
265
+ });
216
266
  }
217
- function StatusBadge({
218
- status,
219
- tokens: _tokens,
220
- size = "bold"
221
- }) {
222
- const color = STATUS_COLORS[status];
223
- const label = status.charAt(0).toUpperCase() + status.slice(1);
224
- const isBold = size === "bold";
225
- return /* @__PURE__ */ jsxs("span", { style: {
226
- display: "inline-flex",
227
- alignItems: "center",
228
- gap: isBold ? "6px" : "4px",
229
- padding: isBold ? "3px 10px" : "2px 8px",
230
- borderRadius: "12px",
231
- fontSize: isBold ? "11px" : "10px",
232
- fontWeight: 500,
233
- backgroundColor: `${color}20`,
234
- color,
235
- flexShrink: 0,
236
- textTransform: "uppercase",
237
- letterSpacing: "0.3px"
238
- }, children: [
239
- /* @__PURE__ */ jsx(StatusSymbol, { status, size: isBold ? 6 : 5 }),
240
- label
241
- ] });
267
+ /**
268
+ * StatusBadge - Compact status indicator for accent lines
269
+ * Shows colored badge with status shape at end of accent line
270
+ */
271
+ function StatusBadge({ status, tokens: _tokens, size = "bold" }) {
272
+ const { tokens } = useTheme();
273
+ const color = tokens.colors.status[status];
274
+ const label = status.charAt(0).toUpperCase() + status.slice(1);
275
+ const isBold = size === "bold";
276
+ return /* @__PURE__ */ jsxs("span", {
277
+ style: {
278
+ display: "inline-flex",
279
+ alignItems: "center",
280
+ gap: isBold ? "6px" : "4px",
281
+ padding: isBold ? "3px 10px" : "2px 8px",
282
+ borderRadius: "12px",
283
+ fontSize: isBold ? "11px" : "10px",
284
+ fontWeight: 500,
285
+ backgroundColor: `${color}20`,
286
+ color,
287
+ flexShrink: 0,
288
+ textTransform: "uppercase",
289
+ letterSpacing: "0.3px"
290
+ },
291
+ children: [/* @__PURE__ */ jsx(StatusSymbol, {
292
+ status,
293
+ size: isBold ? 6 : 5
294
+ }), label]
295
+ });
242
296
  }
243
- const Container = memo(function Container2({
244
- variant = "default",
245
- padding = "md",
246
- title,
247
- subtitle,
248
- status,
249
- actions,
250
- fullHeight = false,
251
- clipContent = true,
252
- loading = false,
253
- children,
254
- className = "",
255
- style,
256
- onClick,
257
- disableAutoGlass = false,
258
- icon,
259
- iconStatus,
260
- statusMessage,
261
- iconColor,
262
- accentColor
263
- }) {
264
- var _a, _b;
265
- const { tokens, theme } = useTheme();
266
- const { isMobile } = useBreakpoint();
267
- const isBoldVariant = theme === "transparent-bold";
268
- const isMinimalVariant = theme === "transparent-minimal";
269
- const useGlassMode = (isBoldVariant || isMinimalVariant) && !disableAutoGlass && !variant.startsWith("glass");
270
- const useSimpleGlass = theme === "transparent" && !disableAutoGlass && !variant.startsWith("glass");
271
- const defaultAccentColor = tokens.colors.accent.primary;
272
- const glassAccentColor = accentColor || defaultAccentColor;
273
- const glassAccentMuted = `${glassAccentColor}66`;
274
- const glassGradient = `linear-gradient(135deg, ${glassAccentColor}10 0%, ${glassAccentColor}03 100%)`;
275
- const resolvedIconColor = iconColor || (iconStatus ? STATUS_COLORS[iconStatus] : glassAccentColor);
276
- const paddingConfig = {
277
- none: "0",
278
- sm: isMobile ? tokens.spacing.xs : tokens.spacing.sm,
279
- md: isMobile ? tokens.spacing.sm : tokens.spacing.md,
280
- lg: isMobile ? tokens.spacing.md : tokens.spacing.lg
281
- };
282
- const headingConfig = ((_b = (_a = tokens.layout) == null ? void 0 : _a.card) == null ? void 0 : _b.heading) ?? {
283
- iconSize: 20,
284
- iconSizeCompact: 16,
285
- titleFontSize: "1.125rem",
286
- titleFontWeight: 500,
287
- gap: 8
288
- };
289
- const variantStyles = {
290
- default: {
291
- backgroundColor: tokens.colors.background.surface,
292
- border: `1px solid ${tokens.colors.border.muted}`,
293
- boxShadow: "none"
294
- },
295
- elevated: {
296
- backgroundColor: tokens.colors.background.surface,
297
- border: "none",
298
- boxShadow: tokens.shadows.md
299
- },
300
- outlined: {
301
- backgroundColor: "transparent",
302
- border: `1px solid ${tokens.colors.border.muted}`,
303
- boxShadow: "none"
304
- },
305
- ghost: {
306
- backgroundColor: "transparent",
307
- border: "none",
308
- boxShadow: "none"
309
- },
310
- // Glass variants - transparent with blur
311
- glass: {
312
- backgroundColor: "rgba(15, 20, 35, 0.85)",
313
- backdropFilter: "blur(12px)",
314
- WebkitBackdropFilter: "blur(12px)",
315
- border: "1px solid rgba(0, 212, 255, 0.25)",
316
- boxShadow: "none"
317
- },
318
- "glass-dark": {
319
- backgroundColor: "rgba(0, 0, 0, 0.7)",
320
- backdropFilter: "blur(16px)",
321
- WebkitBackdropFilter: "blur(16px)",
322
- border: "1px solid rgba(100, 130, 160, 0.2)",
323
- boxShadow: "none"
324
- },
325
- "glass-light": {
326
- backgroundColor: "rgba(255, 255, 255, 0.15)",
327
- backdropFilter: "blur(12px)",
328
- WebkitBackdropFilter: "blur(12px)",
329
- border: "1px solid rgba(255, 255, 255, 0.25)",
330
- boxShadow: "none"
331
- }
332
- };
333
- const glowColor = accentColor ? `${accentColor}66` : "rgba(0, 212, 255, 0.4)";
334
- const glassOverrides = useGlassMode ? {
335
- backgroundColor: "rgba(10, 15, 25, 0.35)",
336
- backdropFilter: "blur(12px)",
337
- WebkitBackdropFilter: "blur(12px)",
338
- border: `1px solid ${glassAccentMuted}`,
339
- borderTop: isBoldVariant ? `2px solid ${glassAccentColor}` : `1px solid ${glassAccentColor}`,
340
- transition: "all 0.3s ease-out, box-shadow 0.3s ease-out"
341
- } : {};
342
- const simpleGlassOverrides = useSimpleGlass ? {
343
- backgroundColor: "transparent",
344
- backdropFilter: "blur(12px)",
345
- WebkitBackdropFilter: "blur(12px)",
346
- border: `1px solid ${tokens.colors.border.muted}`,
347
- transition: "all 0.3s ease-out"
348
- } : {};
349
- const handleMouseEnter = useCallback((e) => {
350
- if (useGlassMode) {
351
- e.currentTarget.style.boxShadow = `0 0 30px ${glowColor}, 0 4px 20px rgba(0,0,0,0.3)`;
352
- }
353
- }, [useGlassMode, glowColor]);
354
- const handleMouseLeave = useCallback((e) => {
355
- if (useGlassMode) {
356
- e.currentTarget.style.boxShadow = "none";
357
- }
358
- }, [useGlassMode]);
359
- const statusColor = status ? tokens.colors.status[status] : void 0;
360
- const isInteractive = !!onClick;
361
- return /* @__PURE__ */ jsxs(
362
- "div",
363
- {
364
- className: classNames(
365
- "zendir-container",
366
- `zendir-container--${variant}`,
367
- useGlassMode && "zendir-container--auto-glass",
368
- className
369
- ),
370
- onClick,
371
- role: isInteractive ? "button" : void 0,
372
- tabIndex: isInteractive ? 0 : void 0,
373
- onKeyDown: onClick ? (e) => {
374
- if (e.key === "Enter" || e.key === " ") {
375
- e.preventDefault();
376
- onClick();
377
- }
378
- } : void 0,
379
- onMouseEnter: handleMouseEnter,
380
- onMouseLeave: handleMouseLeave,
381
- style: {
382
- borderRadius: tokens.borderRadius.lg,
383
- overflow: "hidden",
384
- position: "relative",
385
- height: fullHeight ? "100%" : "auto",
386
- display: "flex",
387
- flexDirection: "column",
388
- cursor: isInteractive ? "pointer" : "default",
389
- transition: "all 0.3s ease-out",
390
- borderLeft: statusColor ? `4px solid ${statusColor}` : void 0,
391
- ...variantStyles[variant],
392
- ...simpleGlassOverrides,
393
- // Normal Glass theme
394
- ...glassOverrides,
395
- // Bold/Minimal themes (overrides simpleGlass if both)
396
- ...style
397
- },
398
- children: [
399
- useGlassMode && /* @__PURE__ */ jsx(
400
- "div",
401
- {
402
- style: {
403
- position: "absolute",
404
- inset: 0,
405
- background: glassGradient,
406
- pointerEvents: "none",
407
- zIndex: 0
408
- }
409
- }
410
- ),
411
- loading && /* @__PURE__ */ jsxs(
412
- "div",
413
- {
414
- style: {
415
- position: "absolute",
416
- inset: 0,
417
- backgroundColor: addAlpha(tokens.colors.background.surface, 0.5),
418
- display: "flex",
419
- alignItems: "center",
420
- justifyContent: "center",
421
- zIndex: 10
422
- },
423
- children: [
424
- /* @__PURE__ */ jsx(
425
- "svg",
426
- {
427
- width: "32",
428
- height: "32",
429
- viewBox: "0 0 24 24",
430
- fill: "none",
431
- style: { animation: "spin 1s linear infinite" },
432
- children: /* @__PURE__ */ jsx(
433
- "circle",
434
- {
435
- cx: "12",
436
- cy: "12",
437
- r: "10",
438
- stroke: tokens.colors.accent.primary,
439
- strokeWidth: "3",
440
- strokeDasharray: "31.4 31.4",
441
- strokeDashoffset: "10"
442
- }
443
- )
444
- }
445
- ),
446
- /* @__PURE__ */ jsx("style", { children: `@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }` })
447
- ]
448
- }
449
- ),
450
- (title || actions) && useGlassMode && isBoldVariant && /* @__PURE__ */ jsxs(
451
- "div",
452
- {
453
- style: {
454
- position: "relative",
455
- zIndex: 1
456
- },
457
- children: [
458
- /* @__PURE__ */ jsxs(
459
- "div",
460
- {
461
- style: {
462
- display: "flex",
463
- alignItems: "center",
464
- justifyContent: "space-between",
465
- padding: `16px ${paddingConfig[padding]} 0`
466
- },
467
- children: [
468
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: headingConfig.gap }, children: [
469
- icon && /* @__PURE__ */ jsx(
470
- IconWithStatusTooltip,
471
- {
472
- icon,
473
- iconColor: resolvedIconColor,
474
- iconStatus,
475
- statusMessage,
476
- iconSize: headingConfig.iconSize
477
- }
478
- ),
479
- /* @__PURE__ */ jsx(
480
- "h3",
481
- {
482
- style: {
483
- margin: 0,
484
- fontSize: headingConfig.titleFontSize,
485
- fontWeight: headingConfig.titleFontWeight,
486
- color: glassAccentColor,
487
- letterSpacing: "0.5px",
488
- textShadow: `0 0 20px ${glassAccentMuted}`
489
- },
490
- children: title
491
- }
492
- )
493
- ] }),
494
- actions && /* @__PURE__ */ jsx("div", { style: { display: "flex", gap: tokens.spacing.xs }, children: actions })
495
- ]
496
- }
497
- ),
498
- subtitle && /* @__PURE__ */ jsx(
499
- "p",
500
- {
501
- style: {
502
- margin: 0,
503
- padding: `${tokens.spacing.xs} ${paddingConfig[padding]} 0`,
504
- fontSize: tokens.typography.fontSize.sm,
505
- color: tokens.colors.text.secondary
506
- },
507
- children: subtitle
508
- }
509
- ),
510
- /* @__PURE__ */ jsxs(
511
- "div",
512
- {
513
- style: {
514
- display: "flex",
515
- alignItems: "center",
516
- gap: tokens.spacing.sm,
517
- padding: `12px ${paddingConfig[padding]} 0`,
518
- marginBottom: tokens.spacing.sm
519
- },
520
- children: [
521
- /* @__PURE__ */ jsx(
522
- "div",
523
- {
524
- style: {
525
- flex: 1,
526
- height: "2px",
527
- background: `linear-gradient(90deg, ${glassAccentColor} 0%, ${glassAccentMuted} 70%, ${glassAccentMuted}20 100%)`,
528
- boxShadow: `0 0 8px ${glassAccentMuted}`
529
- }
530
- }
531
- ),
532
- iconStatus && iconStatus !== "off" && /* @__PURE__ */ jsx(StatusBadge, { status: iconStatus, tokens, size: "bold" })
533
- ]
534
- }
535
- )
536
- ]
537
- }
538
- ),
539
- (title || actions) && useGlassMode && !isBoldVariant && /* @__PURE__ */ jsxs(
540
- "div",
541
- {
542
- style: {
543
- display: "flex",
544
- alignItems: "center",
545
- padding: `${tokens.spacing.sm} ${paddingConfig[padding]} 0`,
546
- marginBottom: tokens.spacing.sm,
547
- position: "relative",
548
- zIndex: 1
549
- },
550
- children: [
551
- icon && /* @__PURE__ */ jsx("div", { style: { display: "flex", alignItems: "center", marginRight: tokens.spacing.sm }, children: /* @__PURE__ */ jsx(
552
- IconWithStatusTooltip,
553
- {
554
- icon,
555
- iconColor: resolvedIconColor,
556
- iconStatus,
557
- statusMessage,
558
- iconSize: headingConfig.iconSizeCompact
559
- }
560
- ) }),
561
- title && /* @__PURE__ */ jsx(
562
- "h3",
563
- {
564
- style: {
565
- margin: 0,
566
- fontSize: headingConfig.titleFontSize,
567
- fontWeight: headingConfig.titleFontWeight,
568
- color: glassAccentColor,
569
- textShadow: `0 0 16px ${glassAccentMuted}`,
570
- letterSpacing: "0.02em",
571
- whiteSpace: "nowrap",
572
- marginRight: "12px"
573
- },
574
- children: title
575
- }
576
- ),
577
- /* @__PURE__ */ jsxs(
578
- "div",
579
- {
580
- style: {
581
- flex: 1,
582
- display: "flex",
583
- alignItems: "center",
584
- gap: tokens.spacing.sm,
585
- minWidth: 40
586
- },
587
- children: [
588
- /* @__PURE__ */ jsx(
589
- "div",
590
- {
591
- style: {
592
- flex: 1,
593
- height: "1px",
594
- background: `linear-gradient(90deg, ${glassAccentColor} 0%, ${glassAccentMuted} 70%, ${glassAccentMuted}20 100%)`
595
- }
596
- }
597
- ),
598
- iconStatus && iconStatus !== "off" && /* @__PURE__ */ jsx(StatusBadge, { status: iconStatus, tokens, size: "minimal" })
599
- ]
600
- }
601
- ),
602
- actions && /* @__PURE__ */ jsx("div", { style: { display: "flex", gap: tokens.spacing.xs, flexShrink: 0, marginLeft: "12px" }, children: actions })
603
- ]
604
- }
605
- ),
606
- subtitle && useGlassMode && !isBoldVariant && /* @__PURE__ */ jsx(
607
- "p",
608
- {
609
- style: {
610
- margin: 0,
611
- padding: `0 ${paddingConfig[padding]}`,
612
- marginBottom: tokens.spacing.sm,
613
- fontSize: tokens.typography.fontSize.sm,
614
- color: tokens.colors.text.secondary,
615
- position: "relative",
616
- zIndex: 1
617
- },
618
- children: subtitle
619
- }
620
- ),
621
- (title || actions) && !useGlassMode && /* @__PURE__ */ jsxs(
622
- "div",
623
- {
624
- style: {
625
- padding: `${paddingConfig[padding]} ${paddingConfig[padding]} 0`,
626
- position: "relative",
627
- zIndex: 1
628
- },
629
- children: [
630
- /* @__PURE__ */ jsx(
631
- CardHeader,
632
- {
633
- icon: icon || (iconStatus ? "mission" : ""),
634
- title: typeof title === "string" ? title : String(title || ""),
635
- subtitle: typeof subtitle === "string" ? subtitle : void 0,
636
- status: iconStatus || status,
637
- iconColor,
638
- iconSize: headingConfig.iconSize,
639
- hideStatusIndicator: !icon && !iconStatus && !status,
640
- rightSlot: actions,
641
- style: { marginBottom: tokens.spacing.sm }
642
- }
643
- ),
644
- subtitle && typeof subtitle !== "string" && /* @__PURE__ */ jsx("div", { style: {
645
- fontSize: tokens.typography.fontSize.sm,
646
- color: tokens.colors.text.secondary,
647
- marginTop: -parseInt(tokens.spacing.xs || "4", 10) || -4,
648
- marginBottom: parseInt(tokens.spacing.sm || "8", 10) || 8
649
- }, children: subtitle })
650
- ]
651
- }
652
- ),
653
- /* @__PURE__ */ jsx(
654
- "div",
655
- {
656
- style: {
657
- flex: 1,
658
- minHeight: fullHeight ? 0 : void 0,
659
- overflow: fullHeight && clipContent ? "hidden" : void 0,
660
- // When fullHeight, become a flex column so any child using flex:1 or height:100%
661
- // gets a properly bounded height and scroll containers can work.
662
- display: fullHeight ? "flex" : void 0,
663
- flexDirection: fullHeight ? "column" : void 0,
664
- padding: fullHeight ? `${tokens.spacing.xs} 0 0 0` : title ? `${tokens.spacing.xs} ${paddingConfig[padding]} ${paddingConfig[padding]}` : paddingConfig[padding],
665
- position: "relative",
666
- zIndex: 1
667
- },
668
- children
669
- }
670
- )
671
- ]
672
- }
673
- );
297
+ var Container = memo(function Container({ variant = "default", padding = "md", title, subtitle, status, actions, fullHeight = false, clipContent = true, loading = false, children, className = "", style, onClick, disableAutoGlass = false, icon, iconStatus, statusMessage, iconColor, accentColor }) {
298
+ const { tokens, theme } = useTheme();
299
+ const { isMobile } = useBreakpoint();
300
+ const isBoldVariant = theme === "transparent-bold";
301
+ const useGlassMode = (isBoldVariant || theme === "transparent-minimal") && !disableAutoGlass && !variant.startsWith("glass");
302
+ const useSimpleGlass = theme === "transparent" && !disableAutoGlass && !variant.startsWith("glass");
303
+ const defaultAccentColor = tokens.colors.accent.primary;
304
+ const glassAccentColor = accentColor || defaultAccentColor;
305
+ const glassAccentMuted = `${glassAccentColor}66`;
306
+ const glassGradient = `linear-gradient(135deg, ${glassAccentColor}10 0%, ${glassAccentColor}03 100%)`;
307
+ const resolvedIconColor = iconColor || (iconStatus ? tokens.colors.status[iconStatus] : glassAccentColor);
308
+ `${resolvedIconColor}`;
309
+ const paddingConfig = {
310
+ none: "0",
311
+ sm: isMobile ? tokens.spacing.xs : tokens.spacing.sm,
312
+ md: isMobile ? tokens.spacing.sm : tokens.spacing.md,
313
+ lg: isMobile ? tokens.spacing.md : tokens.spacing.lg
314
+ };
315
+ const headingConfig = tokens.layout?.card?.heading ?? {
316
+ iconSize: 20,
317
+ iconSizeCompact: 16,
318
+ titleFontSize: "1.125rem",
319
+ titleFontSizeChart: "0.875rem",
320
+ titleFontWeight: 500,
321
+ gap: 8
322
+ };
323
+ const variantStyles = {
324
+ default: {
325
+ backgroundColor: tokens.colors.background.surface,
326
+ border: `1px solid ${tokens.colors.border.muted}`,
327
+ boxShadow: "none"
328
+ },
329
+ elevated: {
330
+ backgroundColor: tokens.colors.background.surface,
331
+ border: "none",
332
+ boxShadow: tokens.shadows.md
333
+ },
334
+ outlined: {
335
+ backgroundColor: "transparent",
336
+ border: `1px solid ${tokens.colors.border.muted}`,
337
+ boxShadow: "none"
338
+ },
339
+ ghost: {
340
+ backgroundColor: "transparent",
341
+ border: "none",
342
+ boxShadow: "none"
343
+ },
344
+ glass: {
345
+ backgroundColor: "rgba(15, 20, 35, 0.85)",
346
+ backdropFilter: "blur(12px)",
347
+ WebkitBackdropFilter: "blur(12px)",
348
+ border: "1px solid rgba(0, 212, 255, 0.25)",
349
+ boxShadow: "none"
350
+ },
351
+ "glass-dark": {
352
+ backgroundColor: "rgba(0, 0, 0, 0.7)",
353
+ backdropFilter: "blur(16px)",
354
+ WebkitBackdropFilter: "blur(16px)",
355
+ border: "1px solid rgba(100, 130, 160, 0.2)",
356
+ boxShadow: "none"
357
+ },
358
+ "glass-light": {
359
+ backgroundColor: "rgba(255, 255, 255, 0.15)",
360
+ backdropFilter: "blur(12px)",
361
+ WebkitBackdropFilter: "blur(12px)",
362
+ border: "1px solid rgba(255, 255, 255, 0.25)",
363
+ boxShadow: "none"
364
+ }
365
+ };
366
+ const glowColor = accentColor ? `${accentColor}66` : "rgba(0, 212, 255, 0.4)";
367
+ const glassOverrides = useGlassMode ? {
368
+ backgroundColor: "rgba(10, 15, 25, 0.35)",
369
+ backdropFilter: "blur(12px)",
370
+ WebkitBackdropFilter: "blur(12px)",
371
+ border: `1px solid ${glassAccentMuted}`,
372
+ borderTop: isBoldVariant ? `2px solid ${glassAccentColor}` : `1px solid ${glassAccentColor}`,
373
+ transition: "all 0.3s ease-out, box-shadow 0.3s ease-out"
374
+ } : {};
375
+ const simpleGlassOverrides = useSimpleGlass ? {
376
+ backgroundColor: "transparent",
377
+ backdropFilter: "blur(12px)",
378
+ WebkitBackdropFilter: "blur(12px)",
379
+ border: `1px solid ${tokens.colors.border.muted}`,
380
+ transition: "all 0.3s ease-out"
381
+ } : {};
382
+ const handleMouseEnter = useCallback((e) => {
383
+ if (useGlassMode) e.currentTarget.style.boxShadow = `0 0 30px ${glowColor}, 0 4px 20px rgba(0,0,0,0.3)`;
384
+ }, [useGlassMode, glowColor]);
385
+ const handleMouseLeave = useCallback((e) => {
386
+ if (useGlassMode) e.currentTarget.style.boxShadow = "none";
387
+ }, [useGlassMode]);
388
+ const statusColor = status ? tokens.colors.status[status] : void 0;
389
+ const isInteractive = !!onClick;
390
+ return /* @__PURE__ */ jsxs("div", {
391
+ className: classNames("zendir-container", `zendir-container--${variant}`, useGlassMode && "zendir-container--auto-glass", className),
392
+ onClick,
393
+ role: isInteractive ? "button" : void 0,
394
+ tabIndex: isInteractive ? 0 : void 0,
395
+ onKeyDown: onClick ? (e) => {
396
+ if (e.key === "Enter" || e.key === " ") {
397
+ e.preventDefault();
398
+ onClick();
399
+ }
400
+ } : void 0,
401
+ onMouseEnter: handleMouseEnter,
402
+ onMouseLeave: handleMouseLeave,
403
+ style: {
404
+ borderRadius: tokens.borderRadius.lg,
405
+ overflow: "hidden",
406
+ position: "relative",
407
+ height: fullHeight ? "100%" : "auto",
408
+ display: "flex",
409
+ flexDirection: "column",
410
+ cursor: isInteractive ? "pointer" : "default",
411
+ transition: "all 0.3s ease-out",
412
+ borderLeft: statusColor ? `4px solid ${statusColor}` : void 0,
413
+ ...variantStyles[variant],
414
+ ...simpleGlassOverrides,
415
+ ...glassOverrides,
416
+ ...style
417
+ },
418
+ children: [
419
+ useGlassMode && /* @__PURE__ */ jsx("div", { style: {
420
+ position: "absolute",
421
+ inset: 0,
422
+ background: glassGradient,
423
+ pointerEvents: "none",
424
+ zIndex: 0
425
+ } }),
426
+ loading && /* @__PURE__ */ jsxs("div", {
427
+ style: {
428
+ position: "absolute",
429
+ inset: 0,
430
+ backgroundColor: addAlpha(tokens.colors.background.surface, .5),
431
+ display: "flex",
432
+ alignItems: "center",
433
+ justifyContent: "center",
434
+ zIndex: 10
435
+ },
436
+ children: [/* @__PURE__ */ jsx("svg", {
437
+ width: "32",
438
+ height: "32",
439
+ viewBox: "0 0 24 24",
440
+ fill: "none",
441
+ style: { animation: "spin 1s linear infinite" },
442
+ children: /* @__PURE__ */ jsx("circle", {
443
+ cx: "12",
444
+ cy: "12",
445
+ r: "10",
446
+ stroke: tokens.colors.accent.primary,
447
+ strokeWidth: "3",
448
+ strokeDasharray: "31.4 31.4",
449
+ strokeDashoffset: "10"
450
+ })
451
+ }), /* @__PURE__ */ jsx("style", { children: `@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }` })]
452
+ }),
453
+ (title || actions) && useGlassMode && isBoldVariant && /* @__PURE__ */ jsxs("div", {
454
+ style: {
455
+ position: "relative",
456
+ zIndex: 1
457
+ },
458
+ children: [
459
+ /* @__PURE__ */ jsxs("div", {
460
+ style: {
461
+ display: "flex",
462
+ alignItems: "center",
463
+ justifyContent: "space-between",
464
+ padding: `16px ${paddingConfig[padding]} 0`
465
+ },
466
+ children: [/* @__PURE__ */ jsxs("div", {
467
+ style: {
468
+ display: "flex",
469
+ alignItems: "center",
470
+ gap: headingConfig.gap
471
+ },
472
+ children: [icon && /* @__PURE__ */ jsx(IconWithStatusTooltip, {
473
+ icon,
474
+ iconColor: resolvedIconColor,
475
+ iconStatus,
476
+ statusMessage,
477
+ iconSize: headingConfig.iconSize
478
+ }), /* @__PURE__ */ jsx("h3", {
479
+ style: {
480
+ margin: 0,
481
+ fontSize: headingConfig.titleFontSize,
482
+ fontWeight: headingConfig.titleFontWeight,
483
+ color: glassAccentColor,
484
+ letterSpacing: "0.5px",
485
+ textShadow: `0 0 20px ${glassAccentMuted}`
486
+ },
487
+ children: title
488
+ })]
489
+ }), actions && /* @__PURE__ */ jsx("div", {
490
+ style: {
491
+ display: "flex",
492
+ gap: tokens.spacing.xs
493
+ },
494
+ children: actions
495
+ })]
496
+ }),
497
+ subtitle && /* @__PURE__ */ jsx("p", {
498
+ style: {
499
+ margin: 0,
500
+ padding: `${tokens.spacing.xs} ${paddingConfig[padding]} 0`,
501
+ fontSize: tokens.typography.fontSize.sm,
502
+ color: tokens.colors.text.secondary
503
+ },
504
+ children: subtitle
505
+ }),
506
+ /* @__PURE__ */ jsxs("div", {
507
+ style: {
508
+ display: "flex",
509
+ alignItems: "center",
510
+ gap: tokens.spacing.sm,
511
+ padding: `12px ${paddingConfig[padding]} 0`,
512
+ marginBottom: tokens.spacing.sm
513
+ },
514
+ children: [/* @__PURE__ */ jsx("div", { style: {
515
+ flex: 1,
516
+ height: "2px",
517
+ background: `linear-gradient(90deg, ${glassAccentColor} 0%, ${glassAccentMuted} 70%, ${glassAccentMuted}20 100%)`,
518
+ boxShadow: `0 0 8px ${glassAccentMuted}`
519
+ } }), iconStatus && iconStatus !== "off" && /* @__PURE__ */ jsx(StatusBadge, {
520
+ status: iconStatus,
521
+ tokens,
522
+ size: "bold"
523
+ })]
524
+ })
525
+ ]
526
+ }),
527
+ (title || actions) && useGlassMode && !isBoldVariant && /* @__PURE__ */ jsxs("div", {
528
+ style: {
529
+ display: "flex",
530
+ alignItems: "center",
531
+ padding: `${tokens.spacing.sm} ${paddingConfig[padding]} 0`,
532
+ marginBottom: tokens.spacing.sm,
533
+ position: "relative",
534
+ zIndex: 1
535
+ },
536
+ children: [
537
+ icon && /* @__PURE__ */ jsx("div", {
538
+ style: {
539
+ display: "flex",
540
+ alignItems: "center",
541
+ marginRight: tokens.spacing.sm
542
+ },
543
+ children: /* @__PURE__ */ jsx(IconWithStatusTooltip, {
544
+ icon,
545
+ iconColor: resolvedIconColor,
546
+ iconStatus,
547
+ statusMessage,
548
+ iconSize: headingConfig.iconSizeCompact
549
+ })
550
+ }),
551
+ title && /* @__PURE__ */ jsx("h3", {
552
+ style: {
553
+ margin: 0,
554
+ fontSize: headingConfig.titleFontSize,
555
+ fontWeight: headingConfig.titleFontWeight,
556
+ color: glassAccentColor,
557
+ textShadow: `0 0 16px ${glassAccentMuted}`,
558
+ letterSpacing: "0.02em",
559
+ whiteSpace: "nowrap",
560
+ marginRight: "12px"
561
+ },
562
+ children: title
563
+ }),
564
+ /* @__PURE__ */ jsxs("div", {
565
+ style: {
566
+ flex: 1,
567
+ display: "flex",
568
+ alignItems: "center",
569
+ gap: tokens.spacing.sm,
570
+ minWidth: 40
571
+ },
572
+ children: [/* @__PURE__ */ jsx("div", { style: {
573
+ flex: 1,
574
+ height: "1px",
575
+ background: `linear-gradient(90deg, ${glassAccentColor} 0%, ${glassAccentMuted} 70%, ${glassAccentMuted}20 100%)`
576
+ } }), iconStatus && iconStatus !== "off" && /* @__PURE__ */ jsx(StatusBadge, {
577
+ status: iconStatus,
578
+ tokens,
579
+ size: "minimal"
580
+ })]
581
+ }),
582
+ actions && /* @__PURE__ */ jsx("div", {
583
+ style: {
584
+ display: "flex",
585
+ gap: tokens.spacing.xs,
586
+ flexShrink: 0,
587
+ marginLeft: "12px"
588
+ },
589
+ children: actions
590
+ })
591
+ ]
592
+ }),
593
+ subtitle && useGlassMode && !isBoldVariant && /* @__PURE__ */ jsx("p", {
594
+ style: {
595
+ margin: 0,
596
+ padding: `0 ${paddingConfig[padding]}`,
597
+ marginBottom: tokens.spacing.sm,
598
+ fontSize: tokens.typography.fontSize.sm,
599
+ color: tokens.colors.text.secondary,
600
+ position: "relative",
601
+ zIndex: 1
602
+ },
603
+ children: subtitle
604
+ }),
605
+ (title || actions) && !useGlassMode && /* @__PURE__ */ jsxs("div", {
606
+ style: {
607
+ padding: `${paddingConfig[padding]} ${paddingConfig[padding]} 0`,
608
+ position: "relative",
609
+ zIndex: 1
610
+ },
611
+ children: [/* @__PURE__ */ jsx(CardHeader, {
612
+ icon: icon || (iconStatus ? "mission" : ""),
613
+ title: typeof title === "string" ? title : String(title || ""),
614
+ subtitle: typeof subtitle === "string" ? subtitle : void 0,
615
+ status: iconStatus || status,
616
+ iconColor,
617
+ iconSize: headingConfig.iconSize,
618
+ hideStatusIndicator: !icon && !iconStatus && !status,
619
+ rightSlot: actions,
620
+ style: { marginBottom: tokens.spacing.sm }
621
+ }), subtitle && typeof subtitle !== "string" && /* @__PURE__ */ jsx("div", {
622
+ style: {
623
+ fontSize: tokens.typography.fontSize.sm,
624
+ color: tokens.colors.text.secondary,
625
+ marginTop: -parseInt(tokens.spacing.xs || "4", 10) || -4,
626
+ marginBottom: parseInt(tokens.spacing.sm || "8", 10) || 8
627
+ },
628
+ children: subtitle
629
+ })]
630
+ }),
631
+ /* @__PURE__ */ jsx("div", {
632
+ style: {
633
+ flex: 1,
634
+ minHeight: fullHeight ? 0 : void 0,
635
+ overflow: fullHeight && clipContent ? "hidden" : void 0,
636
+ display: fullHeight ? "flex" : void 0,
637
+ flexDirection: fullHeight ? "column" : void 0,
638
+ padding: fullHeight ? `${tokens.spacing.xs} 0 0 0` : title ? `${tokens.spacing.xs} ${paddingConfig[padding]} ${paddingConfig[padding]}` : paddingConfig[padding],
639
+ position: "relative",
640
+ zIndex: 1
641
+ },
642
+ children
643
+ })
644
+ ]
645
+ });
674
646
  });
675
- export {
676
- Container
677
- };
678
- //# sourceMappingURL=Container.js.map
647
+ //#endregion
648
+ export { Container, Container as default };
649
+
650
+ //# sourceMappingURL=Container.js.map